From 9c9372f0c87f6d3e6d5b0de3e5509bafa1da9687 Mon Sep 17 00:00:00 2001 From: Tobias Doerffel Date: Sun, 23 Feb 2014 15:23:43 +0100 Subject: [PATCH] LadspaEffect: renamed source directory to match coding style --- plugins/CMakeLists.txt | 2 +- plugins/LadspaEffect/CMakeLists.txt | 26 + plugins/LadspaEffect/LadspaControlDialog.cpp | 147 + plugins/LadspaEffect/LadspaControlDialog.h | 56 + plugins/LadspaEffect/LadspaControls.cpp | 187 + plugins/LadspaEffect/LadspaControls.h | 86 + plugins/LadspaEffect/LadspaEffect.cpp | 580 + plugins/LadspaEffect/LadspaEffect.h | 88 + .../LadspaEffect/LadspaSubPluginFeatures.cpp | 171 + .../LadspaEffect/LadspaSubPluginFeatures.h | 50 + plugins/LadspaEffect/calf/AUTHORS | 16 + plugins/LadspaEffect/calf/CMakeLists.txt | 21 + plugins/LadspaEffect/calf/COPYING | 504 + plugins/LadspaEffect/calf/COPYING.GPL | 340 + plugins/LadspaEffect/calf/ChangeLog | 220 + plugins/LadspaEffect/calf/INSTALL | 254 + plugins/LadspaEffect/calf/NEWS | 0 plugins/LadspaEffect/calf/README | 49 + plugins/LadspaEffect/calf/TODO | 40 + plugins/LadspaEffect/calf/src/audio_fx.cpp | 829 + plugins/LadspaEffect/calf/src/calf/audio_fx.h | 625 + plugins/LadspaEffect/calf/src/calf/biquad.h | 653 + plugins/LadspaEffect/calf/src/calf/buffer.h | 229 + plugins/LadspaEffect/calf/src/calf/delay.h | 185 + plugins/LadspaEffect/calf/src/calf/envelope.h | 282 + plugins/LadspaEffect/calf/src/calf/fft.h | 113 + .../LadspaEffect/calf/src/calf/fixed_point.h | 269 + plugins/LadspaEffect/calf/src/calf/giface.h | 722 + plugins/LadspaEffect/calf/src/calf/inertia.h | 258 + .../LadspaEffect/calf/src/calf/ladspa_wrap.h | 130 + plugins/LadspaEffect/calf/src/calf/loudness.h | 90 + .../calf/src/calf/lv2_external_ui.h | 101 + .../LadspaEffect/calf/src/calf/lv2helpers.h | 30 + plugins/LadspaEffect/calf/src/calf/lv2wrap.h | 350 + plugins/LadspaEffect/calf/src/calf/metadata.h | 595 + .../LadspaEffect/calf/src/calf/modmatrix.h | 125 + .../LadspaEffect/calf/src/calf/modulelist.h | 35 + plugins/LadspaEffect/calf/src/calf/modules.h | 303 + .../LadspaEffect/calf/src/calf/modules_comp.h | 334 + .../LadspaEffect/calf/src/calf/modules_dev.h | 113 + .../LadspaEffect/calf/src/calf/modules_dist.h | 101 + .../LadspaEffect/calf/src/calf/modules_eq.h | 90 + .../calf/src/calf/modules_limit.h | 98 + .../LadspaEffect/calf/src/calf/modules_mod.h | 190 + .../calf/src/calf/modules_synths.h | 193 + .../LadspaEffect/calf/src/calf/multichorus.h | 213 + plugins/LadspaEffect/calf/src/calf/onepole.h | 192 + plugins/LadspaEffect/calf/src/calf/organ.h | 359 + plugins/LadspaEffect/calf/src/calf/osc.h | 336 + plugins/LadspaEffect/calf/src/calf/osctl.h | 561 + .../LadspaEffect/calf/src/calf/plugin_tools.h | 133 + plugins/LadspaEffect/calf/src/calf/preset.h | 167 + .../LadspaEffect/calf/src/calf/primitives.h | 533 + plugins/LadspaEffect/calf/src/calf/synth.h | 230 + plugins/LadspaEffect/calf/src/calf/utils.h | 191 + plugins/LadspaEffect/calf/src/calf/vumeter.h | 147 + .../LadspaEffect/calf/src/calf/waveshaping.h | 37 + .../LadspaEffect/calf/src/calf/wavetable.h | 167 + plugins/LadspaEffect/calf/src/config.h | 1 + plugins/LadspaEffect/calf/src/giface.cpp | 397 + plugins/LadspaEffect/calf/src/metadata.cpp | 1446 ++ plugins/LadspaEffect/calf/src/modmatrix.cpp | 153 + plugins/LadspaEffect/calf/src/modules.cpp | 797 + .../LadspaEffect/calf/src/modules_comp.cpp | 2577 +++ .../LadspaEffect/calf/src/modules_dist.cpp | 644 + plugins/LadspaEffect/calf/src/modules_eq.cpp | 343 + .../LadspaEffect/calf/src/modules_limit.cpp | 695 + plugins/LadspaEffect/calf/src/modules_mod.cpp | 753 + plugins/LadspaEffect/calf/src/monosynth.cpp | 802 + plugins/LadspaEffect/calf/src/organ.cpp | 1095 ++ plugins/LadspaEffect/calf/src/plugin.cpp | 538 + plugins/LadspaEffect/calf/src/synth.cpp | 220 + plugins/LadspaEffect/calf/src/utils.cpp | 156 + plugins/LadspaEffect/calf/src/wavetable.cpp | 552 + plugins/LadspaEffect/caps/Amp.cc | 637 + plugins/LadspaEffect/caps/Amp.h | 377 + plugins/LadspaEffect/caps/CHANGES | 206 + plugins/LadspaEffect/caps/CMakeLists.txt | 21 + plugins/LadspaEffect/caps/Cabinet-Models32.h | 235 + plugins/LadspaEffect/caps/Cabinet.cc | 304 + plugins/LadspaEffect/caps/Cabinet.h | 135 + plugins/LadspaEffect/caps/Chorus.cc | 506 + plugins/LadspaEffect/caps/Chorus.h | 301 + plugins/LadspaEffect/caps/Click.cc | 233 + plugins/LadspaEffect/caps/Click.h | 98 + plugins/LadspaEffect/caps/Clip.cc | 148 + plugins/LadspaEffect/caps/Clip.h | 87 + plugins/LadspaEffect/caps/Compress.cc | 153 + plugins/LadspaEffect/caps/Compress.h | 78 + plugins/LadspaEffect/caps/Descriptor.h | 222 + plugins/LadspaEffect/caps/Eq.cc | 335 + plugins/LadspaEffect/caps/Eq.h | 93 + plugins/LadspaEffect/caps/HRTF.cc | 148 + plugins/LadspaEffect/caps/HRTF.h | 72 + plugins/LadspaEffect/caps/Lorenz.cc | 114 + plugins/LadspaEffect/caps/Lorenz.h | 62 + plugins/LadspaEffect/caps/Pan.cc | 251 + plugins/LadspaEffect/caps/Pan.h | 114 + plugins/LadspaEffect/caps/Phaser.cc | 231 + plugins/LadspaEffect/caps/Phaser.h | 164 + plugins/LadspaEffect/caps/Preamp.cc | 244 + plugins/LadspaEffect/caps/README | 7 + plugins/LadspaEffect/caps/README.ardour | 41 + plugins/LadspaEffect/caps/README.dist | 18 + plugins/LadspaEffect/caps/Reverb.cc | 495 + plugins/LadspaEffect/caps/Reverb.h | 255 + plugins/LadspaEffect/caps/Roessler.cc | 120 + plugins/LadspaEffect/caps/Roessler.h | 64 + plugins/LadspaEffect/caps/Scape.cc | 205 + plugins/LadspaEffect/caps/Scape.h | 79 + plugins/LadspaEffect/caps/Sin.cc | 95 + plugins/LadspaEffect/caps/Sin.h | 62 + plugins/LadspaEffect/caps/SweepVF.cc | 458 + plugins/LadspaEffect/caps/SweepVF.h | 160 + plugins/LadspaEffect/caps/ToneControls.cc | 73 + plugins/LadspaEffect/caps/ToneStack.cc | 195 + plugins/LadspaEffect/caps/ToneStack.h | 98 + plugins/LadspaEffect/caps/VCO.cc | 242 + plugins/LadspaEffect/caps/VCO.h | 134 + plugins/LadspaEffect/caps/White.cc | 81 + plugins/LadspaEffect/caps/White.h | 62 + plugins/LadspaEffect/caps/basics.h | 199 + plugins/LadspaEffect/caps/caps.html | 1715 ++ plugins/LadspaEffect/caps/caps.rdf | 447 + plugins/LadspaEffect/caps/configure.py | 30 + plugins/LadspaEffect/caps/dsp/BiQuad.h | 165 + plugins/LadspaEffect/caps/dsp/Delay.h | 171 + plugins/LadspaEffect/caps/dsp/Eq.h | 158 + plugins/LadspaEffect/caps/dsp/FIR.h | 252 + .../LadspaEffect/caps/dsp/FPTruncateMode.h | 56 + plugins/LadspaEffect/caps/dsp/LatFilt.h | 102 + plugins/LadspaEffect/caps/dsp/Lorenz.h | 108 + plugins/LadspaEffect/caps/dsp/OnePole.h | 124 + plugins/LadspaEffect/caps/dsp/RBJ.h | 294 + plugins/LadspaEffect/caps/dsp/RMS.h | 77 + plugins/LadspaEffect/caps/dsp/Roessler.h | 100 + plugins/LadspaEffect/caps/dsp/SVF.h | 190 + plugins/LadspaEffect/caps/dsp/Sine.h | 95 + plugins/LadspaEffect/caps/dsp/TDFII.h | 80 + plugins/LadspaEffect/caps/dsp/ToneStack.h | 266 + plugins/LadspaEffect/caps/dsp/TwelveAX7.h | 240 + plugins/LadspaEffect/caps/dsp/VCO.h | 225 + plugins/LadspaEffect/caps/dsp/White.h | 82 + plugins/LadspaEffect/caps/dsp/r12ax7.h | 459 + plugins/LadspaEffect/caps/dsp/sinc.h | 58 + .../LadspaEffect/caps/dsp/tonestack/ks_tab.h | 663 + .../LadspaEffect/caps/dsp/tonestack/tables.h | 38 + .../LadspaEffect/caps/dsp/tonestack/vs_tab.h | 15664 ++++++++++++++++ plugins/LadspaEffect/caps/dsp/util.h | 75 + plugins/LadspaEffect/caps/dsp/windows.h | 162 + plugins/LadspaEffect/caps/elev0.h | 344 + plugins/LadspaEffect/caps/interface.cc | 145 + plugins/LadspaEffect/caps/waves/click.h | 520 + plugins/LadspaEffect/caps/waves/money.h | 2715 +++ plugins/LadspaEffect/cmt/CMakeLists.txt | 18 + plugins/LadspaEffect/cmt/README | 7 + plugins/LadspaEffect/cmt/doc/COPYING | 340 + .../LadspaEffect/cmt/doc/adding_plugins.html | 54 + plugins/LadspaEffect/cmt/doc/bugs.html | 20 + plugins/LadspaEffect/cmt/doc/changes.html | 149 + plugins/LadspaEffect/cmt/doc/index.html | 26 + .../LadspaEffect/cmt/doc/installation.html | 19 + plugins/LadspaEffect/cmt/doc/license.html | 16 + plugins/LadspaEffect/cmt/doc/overview.html | 14 + plugins/LadspaEffect/cmt/doc/plugins.html | 477 + plugins/LadspaEffect/cmt/doc/tasks.html | 36 + plugins/LadspaEffect/cmt/src/am.cpp | 103 + plugins/LadspaEffect/cmt/src/ambisonic.cpp | 1135 ++ plugins/LadspaEffect/cmt/src/amp.cpp | 186 + plugins/LadspaEffect/cmt/src/analogue.cpp | 504 + plugins/LadspaEffect/cmt/src/canyondelay.cpp | 223 + plugins/LadspaEffect/cmt/src/cmt.cpp | 184 + plugins/LadspaEffect/cmt/src/cmt.h | 180 + plugins/LadspaEffect/cmt/src/delay.cpp | 351 + plugins/LadspaEffect/cmt/src/descriptor.cpp | 116 + .../LadspaEffect/cmt/src/disintegrator.cpp | 151 + plugins/LadspaEffect/cmt/src/dynamic.cpp | 800 + plugins/LadspaEffect/cmt/src/filter.cpp | 250 + .../cmt/src/freeverb/Components/allpass.cpp | 36 + .../cmt/src/freeverb/Components/allpass.h | 48 + .../cmt/src/freeverb/Components/comb.cpp | 48 + .../cmt/src/freeverb/Components/comb.h | 55 + .../cmt/src/freeverb/Components/denormals.h | 20 + .../cmt/src/freeverb/Components/revmodel.cpp | 256 + .../cmt/src/freeverb/Components/revmodel.h | 87 + .../cmt/src/freeverb/Components/tuning.h | 60 + .../cmt/src/freeverb/freeverb.cpp | 200 + .../LadspaEffect/cmt/src/freeverb/readme.txt | 67 + plugins/LadspaEffect/cmt/src/grain.cpp | 401 + plugins/LadspaEffect/cmt/src/hardgate.cpp | 122 + plugins/LadspaEffect/cmt/src/init.cpp | 133 + plugins/LadspaEffect/cmt/src/ladspa_types.h | 80 + plugins/LadspaEffect/cmt/src/lofi.cpp | 417 + plugins/LadspaEffect/cmt/src/logistic.cpp | 156 + plugins/LadspaEffect/cmt/src/mixer.cpp | 106 + plugins/LadspaEffect/cmt/src/noise.cpp | 141 + plugins/LadspaEffect/cmt/src/null.cpp | 260 + plugins/LadspaEffect/cmt/src/organ.cpp | 375 + plugins/LadspaEffect/cmt/src/peak.cpp | 371 + plugins/LadspaEffect/cmt/src/phasemod.cpp | 465 + plugins/LadspaEffect/cmt/src/pink.cpp | 245 + plugins/LadspaEffect/cmt/src/pink_full.cpp | 115 + plugins/LadspaEffect/cmt/src/pink_sh.cpp | 148 + plugins/LadspaEffect/cmt/src/pinknoise.h | 111 + plugins/LadspaEffect/cmt/src/run_adding.h | 159 + plugins/LadspaEffect/cmt/src/sine.cpp | 296 + plugins/LadspaEffect/cmt/src/sledgehammer.cpp | 186 + plugins/LadspaEffect/cmt/src/syndrum.cpp | 175 + plugins/LadspaEffect/cmt/src/utils.h | 103 + plugins/LadspaEffect/cmt/src/vcf303.cpp | 219 + plugins/LadspaEffect/cmt/src/wshape_sine.cpp | 110 + plugins/LadspaEffect/logo.png | Bin 0 -> 3225 bytes plugins/LadspaEffect/swh/AUTHORS | 18 + plugins/LadspaEffect/swh/CMakeLists.txt | 75 + plugins/LadspaEffect/swh/COPYING | 340 + plugins/LadspaEffect/swh/NEWS | 0 plugins/LadspaEffect/swh/README | 29 + plugins/LadspaEffect/swh/alias_1407.c | 251 + plugins/LadspaEffect/swh/allpass_1895.c | 1369 ++ plugins/LadspaEffect/swh/am_pitchshift_1433.c | 466 + plugins/LadspaEffect/swh/amp_1181.c | 244 + .../LadspaEffect/swh/bandpass_a_iir_1893.c | 288 + plugins/LadspaEffect/swh/bandpass_iir_1892.c | 354 + plugins/LadspaEffect/swh/bode_shifter_1431.c | 469 + .../LadspaEffect/swh/bode_shifter_cv_1432.c | 534 + plugins/LadspaEffect/swh/butterworth_1902.c | 764 + plugins/LadspaEffect/swh/chebstortion_1430.c | 410 + plugins/LadspaEffect/swh/comb_1190.c | 351 + plugins/LadspaEffect/swh/comb_1887.c | 1375 ++ plugins/LadspaEffect/swh/comb_splitter_1411.c | 352 + plugins/LadspaEffect/swh/config.h | 0 plugins/LadspaEffect/swh/const_1909.c | 261 + .../LadspaEffect/swh/crossover_dist_1404.c | 287 + plugins/LadspaEffect/swh/dc_remove_1207.c | 246 + plugins/LadspaEffect/swh/decay_1886.c | 336 + plugins/LadspaEffect/swh/decimator_1202.c | 346 + plugins/LadspaEffect/swh/declip_1195.c | 246 + plugins/LadspaEffect/swh/delay_1898.c | 1116 ++ plugins/LadspaEffect/swh/delayorama_1402.c | 858 + plugins/LadspaEffect/swh/diode_1185.c | 275 + plugins/LadspaEffect/swh/divider_1186.c | 342 + plugins/LadspaEffect/swh/dj_eq_1901.c | 691 + plugins/LadspaEffect/swh/dj_flanger_1438.c | 483 + .../LadspaEffect/swh/dyson_compress_1403.c | 896 + plugins/LadspaEffect/swh/fad_delay_1192.c | 399 + .../swh/fast_lookahead_limiter_1913.c | 714 + plugins/LadspaEffect/swh/flanger_1191.c | 555 + plugins/LadspaEffect/swh/foldover_1213.c | 266 + plugins/LadspaEffect/swh/foverdrive_1196.c | 245 + plugins/LadspaEffect/swh/freq_tracker_1418.c | 330 + plugins/LadspaEffect/swh/gate_1410.c | 593 + plugins/LadspaEffect/swh/giant_flange_1437.c | 648 + plugins/LadspaEffect/swh/gong_1424.c | 958 + plugins/LadspaEffect/swh/gong_beater_1439.c | 411 + plugins/LadspaEffect/swh/gsm/COPYRIGHT | 16 + plugins/LadspaEffect/swh/gsm/README | 36 + plugins/LadspaEffect/swh/gsm/add.c | 251 + plugins/LadspaEffect/swh/gsm/code.c | 100 + plugins/LadspaEffect/swh/gsm/config.h | 37 + plugins/LadspaEffect/swh/gsm/decode.c | 63 + plugins/LadspaEffect/swh/gsm/gsm.h | 71 + plugins/LadspaEffect/swh/gsm/gsm_create.c | 45 + plugins/LadspaEffect/swh/gsm/gsm_decode.c | 361 + plugins/LadspaEffect/swh/gsm/gsm_destroy.c | 26 + plugins/LadspaEffect/swh/gsm/gsm_encode.c | 451 + plugins/LadspaEffect/swh/gsm/gsm_option.c | 69 + plugins/LadspaEffect/swh/gsm/long_term.c | 949 + plugins/LadspaEffect/swh/gsm/lpc.c | 341 + plugins/LadspaEffect/swh/gsm/preprocess.c | 113 + plugins/LadspaEffect/swh/gsm/private.h | 278 + plugins/LadspaEffect/swh/gsm/proto.h | 65 + plugins/LadspaEffect/swh/gsm/rpe.c | 488 + plugins/LadspaEffect/swh/gsm/short_term.c | 429 + plugins/LadspaEffect/swh/gsm/table.c | 63 + plugins/LadspaEffect/swh/gsm/unproto.h | 23 + plugins/LadspaEffect/swh/gsm_1215.c | 504 + plugins/LadspaEffect/swh/gverb/gverb.c | 207 + plugins/LadspaEffect/swh/gverb/gverb.h | 234 + plugins/LadspaEffect/swh/gverb/gverbdsp.c | 130 + plugins/LadspaEffect/swh/gverb/gverbdsp.h | 85 + plugins/LadspaEffect/swh/gverb_1216.c | 440 + plugins/LadspaEffect/swh/hard_limiter_1413.c | 297 + plugins/LadspaEffect/swh/harmonic_gen_1220.c | 553 + plugins/LadspaEffect/swh/hermes_filter_1200.c | 2009 ++ plugins/LadspaEffect/swh/highpass_iir_1890.c | 289 + plugins/LadspaEffect/swh/hilbert_1440.c | 327 + plugins/LadspaEffect/swh/imp_1199.c | 637 + plugins/LadspaEffect/swh/impulse_1885.c | 268 + plugins/LadspaEffect/swh/impulses/01-unit.h | 1 + .../swh/impulses/02-steves-flat.h | 452 + plugins/LadspaEffect/swh/impulses/03-stk-m1.h | 302 + .../swh/impulses/04-fender-68-vibrolux-sm57.h | 1154 ++ .../impulses/05-fender-68-vibrolux-sm57-off.h | 1300 ++ .../impulses/06-fender-68-vibrolux-at4050.h | 1156 ++ .../swh/impulses/07-fender-68-vibrolux-ui87.h | 1226 ++ .../swh/impulses/08-fender-bassman-sm57.h | 681 + .../swh/impulses/09-fender-bassman-sm57-off.h | 636 + .../swh/impulses/10-fender-bassman-at4050.h | 797 + .../swh/impulses/11-fender-bassman-ui87.h | 822 + .../swh/impulses/12-fender-superchamp-sm57.h | 679 + .../impulses/13-fender-superchamp-sm57-off.h | 676 + .../impulses/14-fender-superchamp-at4050.h | 825 + .../swh/impulses/15-fender-superchamp-ui87.h | 790 + .../swh/impulses/16-marshall-jcm2000-sm57.h | 1167 ++ .../impulses/17-marshall-jcm2000-sm57-off.h | 1315 ++ .../swh/impulses/18-marshall-plexi-sm57.h | 1386 ++ .../swh/impulses/19-marshall-plexi-sm57-off.h | 1360 ++ .../impulses/20-matchless-chieftain-sm57.h | 863 + .../21-matchless-chieftain-sm57-off.h | 937 + plugins/LadspaEffect/swh/impulses/all.h | 51 + plugins/LadspaEffect/swh/inv_1429.c | 218 + plugins/LadspaEffect/swh/karaoke_1409.c | 285 + plugins/LadspaEffect/swh/ladspa-util.c | 22 + plugins/LadspaEffect/swh/ladspa-util.h | 233 + plugins/LadspaEffect/swh/latency_1914.c | 270 + plugins/LadspaEffect/swh/lcr_delay_1436.c | 744 + plugins/LadspaEffect/swh/lowpass_iir_1891.c | 291 + plugins/LadspaEffect/swh/ls_filter_1908.c | 319 + plugins/LadspaEffect/swh/matrix_ms_st_1421.c | 277 + .../swh/matrix_spatialiser_1422.c | 435 + plugins/LadspaEffect/swh/matrix_st_ms_1420.c | 256 + plugins/LadspaEffect/swh/mbeq_1197.c | 896 + plugins/LadspaEffect/swh/mod_delay_1419.c | 329 + .../LadspaEffect/swh/multivoice_chorus_1201.c | 667 + plugins/LadspaEffect/swh/notch_iir_1894.c | 354 + plugins/LadspaEffect/swh/phasers_1217.c | 1400 ++ plugins/LadspaEffect/swh/pitch_scale_1193.c | 338 + plugins/LadspaEffect/swh/pitch_scale_1194.c | 322 + plugins/LadspaEffect/swh/plate_1423.c | 412 + plugins/LadspaEffect/swh/pointer_cast_1910.c | 321 + plugins/LadspaEffect/swh/rate_shifter_1417.c | 325 + plugins/LadspaEffect/swh/retro_flange_1208.c | 592 + plugins/LadspaEffect/swh/revdelay_1605.c | 551 + plugins/LadspaEffect/swh/ringmod_1188.c | 649 + .../LadspaEffect/swh/satan_maximiser_1408.c | 355 + plugins/LadspaEffect/swh/sc1_1425.c | 484 + plugins/LadspaEffect/swh/sc2_1426.c | 502 + plugins/LadspaEffect/swh/sc3_1427.c | 573 + plugins/LadspaEffect/swh/sc4_1882.c | 629 + plugins/LadspaEffect/swh/sc4m_1916.c | 579 + plugins/LadspaEffect/swh/se4_1883.c | 625 + plugins/LadspaEffect/swh/shaper_1187.c | 271 + plugins/LadspaEffect/swh/sifter_1210.c | 445 + plugins/LadspaEffect/swh/sin_cos_1881.c | 307 + plugins/LadspaEffect/swh/single_para_1203.c | 323 + .../LadspaEffect/swh/sinus_wavewrapper_1198.c | 255 + .../LadspaEffect/swh/smooth_decimate_1414.c | 340 + plugins/LadspaEffect/swh/split_1406.c | 251 + plugins/LadspaEffect/swh/step_muxer_1212.c | 543 + .../LadspaEffect/swh/surround_encoder_1401.c | 425 + plugins/LadspaEffect/swh/svf_1214.c | 419 + plugins/LadspaEffect/swh/tape_delay_1211.c | 656 + plugins/LadspaEffect/swh/transient_1206.c | 476 + plugins/LadspaEffect/swh/triple_para_1204.c | 604 + plugins/LadspaEffect/swh/util/biquad.h | 179 + plugins/LadspaEffect/swh/util/blo.c | 277 + plugins/LadspaEffect/swh/util/blo.h | 213 + plugins/LadspaEffect/swh/util/buffer.h | 17 + plugins/LadspaEffect/swh/util/db.c | 22 + plugins/LadspaEffect/swh/util/db.h | 86 + plugins/LadspaEffect/swh/util/iir.c | 236 + plugins/LadspaEffect/swh/util/iir.h | 338 + plugins/LadspaEffect/swh/util/ls_filter.h | 64 + plugins/LadspaEffect/swh/util/pitchscale.c | 334 + plugins/LadspaEffect/swh/util/pitchscale.h | 49 + plugins/LadspaEffect/swh/util/rms.c | 25 + plugins/LadspaEffect/swh/util/rms.h | 35 + plugins/LadspaEffect/swh/util/waveguide_nl.h | 148 + plugins/LadspaEffect/swh/valve_1209.c | 343 + plugins/LadspaEffect/swh/valve_rect_1405.c | 412 + plugins/LadspaEffect/swh/vocoder_1337.c | 463 + plugins/LadspaEffect/swh/vynil_1905.c | 723 + plugins/LadspaEffect/swh/wave_terrain_1412.c | 242 + plugins/LadspaEffect/swh/xfade_1915.c | 615 + plugins/LadspaEffect/swh/zm1_1428.c | 243 + plugins/LadspaEffect/tap/CMakeLists.txt | 21 + plugins/LadspaEffect/tap/COPYING | 340 + plugins/LadspaEffect/tap/CREDITS | 66 + plugins/LadspaEffect/tap/README | 44 + plugins/LadspaEffect/tap/tap_autopan.c | 361 + plugins/LadspaEffect/tap/tap_chorusflanger.c | 595 + plugins/LadspaEffect/tap/tap_deesser.c | 491 + plugins/LadspaEffect/tap/tap_doubler.c | 737 + plugins/LadspaEffect/tap/tap_dynamics_m.c | 666 + .../LadspaEffect/tap/tap_dynamics_presets.h | 204 + plugins/LadspaEffect/tap/tap_dynamics_st.c | 877 + plugins/LadspaEffect/tap/tap_echo.c | 629 + plugins/LadspaEffect/tap/tap_eq.c | 777 + plugins/LadspaEffect/tap/tap_eqbw.c | 967 + plugins/LadspaEffect/tap/tap_limiter.c | 443 + plugins/LadspaEffect/tap/tap_pinknoise.c | 345 + plugins/LadspaEffect/tap/tap_pitch.c | 556 + plugins/LadspaEffect/tap/tap_reflector.c | 500 + plugins/LadspaEffect/tap/tap_reverb.c | 835 + plugins/LadspaEffect/tap/tap_reverb.h | 295 + plugins/LadspaEffect/tap/tap_reverb_presets.h | 914 + plugins/LadspaEffect/tap/tap_rotspeak.c | 768 + plugins/LadspaEffect/tap/tap_sigmoid.c | 338 + plugins/LadspaEffect/tap/tap_tremolo.c | 343 + plugins/LadspaEffect/tap/tap_tubewarmth.c | 491 + plugins/LadspaEffect/tap/tap_utils.h | 267 + plugins/LadspaEffect/tap/tap_vibrato.c | 445 + 402 files changed, 155945 insertions(+), 1 deletion(-) create mode 100644 plugins/LadspaEffect/CMakeLists.txt create mode 100644 plugins/LadspaEffect/LadspaControlDialog.cpp create mode 100644 plugins/LadspaEffect/LadspaControlDialog.h create mode 100644 plugins/LadspaEffect/LadspaControls.cpp create mode 100644 plugins/LadspaEffect/LadspaControls.h create mode 100644 plugins/LadspaEffect/LadspaEffect.cpp create mode 100644 plugins/LadspaEffect/LadspaEffect.h create mode 100644 plugins/LadspaEffect/LadspaSubPluginFeatures.cpp create mode 100644 plugins/LadspaEffect/LadspaSubPluginFeatures.h create mode 100644 plugins/LadspaEffect/calf/AUTHORS create mode 100644 plugins/LadspaEffect/calf/CMakeLists.txt create mode 100644 plugins/LadspaEffect/calf/COPYING create mode 100644 plugins/LadspaEffect/calf/COPYING.GPL create mode 100644 plugins/LadspaEffect/calf/ChangeLog create mode 100644 plugins/LadspaEffect/calf/INSTALL create mode 100644 plugins/LadspaEffect/calf/NEWS create mode 100644 plugins/LadspaEffect/calf/README create mode 100644 plugins/LadspaEffect/calf/TODO create mode 100644 plugins/LadspaEffect/calf/src/audio_fx.cpp create mode 100644 plugins/LadspaEffect/calf/src/calf/audio_fx.h create mode 100644 plugins/LadspaEffect/calf/src/calf/biquad.h create mode 100644 plugins/LadspaEffect/calf/src/calf/buffer.h create mode 100644 plugins/LadspaEffect/calf/src/calf/delay.h create mode 100644 plugins/LadspaEffect/calf/src/calf/envelope.h create mode 100644 plugins/LadspaEffect/calf/src/calf/fft.h create mode 100644 plugins/LadspaEffect/calf/src/calf/fixed_point.h create mode 100644 plugins/LadspaEffect/calf/src/calf/giface.h create mode 100644 plugins/LadspaEffect/calf/src/calf/inertia.h create mode 100644 plugins/LadspaEffect/calf/src/calf/ladspa_wrap.h create mode 100644 plugins/LadspaEffect/calf/src/calf/loudness.h create mode 100644 plugins/LadspaEffect/calf/src/calf/lv2_external_ui.h create mode 100644 plugins/LadspaEffect/calf/src/calf/lv2helpers.h create mode 100644 plugins/LadspaEffect/calf/src/calf/lv2wrap.h create mode 100644 plugins/LadspaEffect/calf/src/calf/metadata.h create mode 100644 plugins/LadspaEffect/calf/src/calf/modmatrix.h create mode 100644 plugins/LadspaEffect/calf/src/calf/modulelist.h create mode 100644 plugins/LadspaEffect/calf/src/calf/modules.h create mode 100644 plugins/LadspaEffect/calf/src/calf/modules_comp.h create mode 100644 plugins/LadspaEffect/calf/src/calf/modules_dev.h create mode 100644 plugins/LadspaEffect/calf/src/calf/modules_dist.h create mode 100644 plugins/LadspaEffect/calf/src/calf/modules_eq.h create mode 100644 plugins/LadspaEffect/calf/src/calf/modules_limit.h create mode 100644 plugins/LadspaEffect/calf/src/calf/modules_mod.h create mode 100644 plugins/LadspaEffect/calf/src/calf/modules_synths.h create mode 100644 plugins/LadspaEffect/calf/src/calf/multichorus.h create mode 100644 plugins/LadspaEffect/calf/src/calf/onepole.h create mode 100644 plugins/LadspaEffect/calf/src/calf/organ.h create mode 100644 plugins/LadspaEffect/calf/src/calf/osc.h create mode 100644 plugins/LadspaEffect/calf/src/calf/osctl.h create mode 100644 plugins/LadspaEffect/calf/src/calf/plugin_tools.h create mode 100644 plugins/LadspaEffect/calf/src/calf/preset.h create mode 100644 plugins/LadspaEffect/calf/src/calf/primitives.h create mode 100644 plugins/LadspaEffect/calf/src/calf/synth.h create mode 100644 plugins/LadspaEffect/calf/src/calf/utils.h create mode 100644 plugins/LadspaEffect/calf/src/calf/vumeter.h create mode 100644 plugins/LadspaEffect/calf/src/calf/waveshaping.h create mode 100644 plugins/LadspaEffect/calf/src/calf/wavetable.h create mode 100644 plugins/LadspaEffect/calf/src/config.h create mode 100644 plugins/LadspaEffect/calf/src/giface.cpp create mode 100644 plugins/LadspaEffect/calf/src/metadata.cpp create mode 100644 plugins/LadspaEffect/calf/src/modmatrix.cpp create mode 100644 plugins/LadspaEffect/calf/src/modules.cpp create mode 100644 plugins/LadspaEffect/calf/src/modules_comp.cpp create mode 100644 plugins/LadspaEffect/calf/src/modules_dist.cpp create mode 100644 plugins/LadspaEffect/calf/src/modules_eq.cpp create mode 100644 plugins/LadspaEffect/calf/src/modules_limit.cpp create mode 100644 plugins/LadspaEffect/calf/src/modules_mod.cpp create mode 100644 plugins/LadspaEffect/calf/src/monosynth.cpp create mode 100644 plugins/LadspaEffect/calf/src/organ.cpp create mode 100644 plugins/LadspaEffect/calf/src/plugin.cpp create mode 100644 plugins/LadspaEffect/calf/src/synth.cpp create mode 100644 plugins/LadspaEffect/calf/src/utils.cpp create mode 100644 plugins/LadspaEffect/calf/src/wavetable.cpp create mode 100644 plugins/LadspaEffect/caps/Amp.cc create mode 100644 plugins/LadspaEffect/caps/Amp.h create mode 100644 plugins/LadspaEffect/caps/CHANGES create mode 100644 plugins/LadspaEffect/caps/CMakeLists.txt create mode 100644 plugins/LadspaEffect/caps/Cabinet-Models32.h create mode 100644 plugins/LadspaEffect/caps/Cabinet.cc create mode 100644 plugins/LadspaEffect/caps/Cabinet.h create mode 100644 plugins/LadspaEffect/caps/Chorus.cc create mode 100644 plugins/LadspaEffect/caps/Chorus.h create mode 100644 plugins/LadspaEffect/caps/Click.cc create mode 100644 plugins/LadspaEffect/caps/Click.h create mode 100644 plugins/LadspaEffect/caps/Clip.cc create mode 100644 plugins/LadspaEffect/caps/Clip.h create mode 100644 plugins/LadspaEffect/caps/Compress.cc create mode 100644 plugins/LadspaEffect/caps/Compress.h create mode 100644 plugins/LadspaEffect/caps/Descriptor.h create mode 100644 plugins/LadspaEffect/caps/Eq.cc create mode 100644 plugins/LadspaEffect/caps/Eq.h create mode 100644 plugins/LadspaEffect/caps/HRTF.cc create mode 100644 plugins/LadspaEffect/caps/HRTF.h create mode 100644 plugins/LadspaEffect/caps/Lorenz.cc create mode 100644 plugins/LadspaEffect/caps/Lorenz.h create mode 100644 plugins/LadspaEffect/caps/Pan.cc create mode 100644 plugins/LadspaEffect/caps/Pan.h create mode 100644 plugins/LadspaEffect/caps/Phaser.cc create mode 100644 plugins/LadspaEffect/caps/Phaser.h create mode 100644 plugins/LadspaEffect/caps/Preamp.cc create mode 100644 plugins/LadspaEffect/caps/README create mode 100644 plugins/LadspaEffect/caps/README.ardour create mode 100644 plugins/LadspaEffect/caps/README.dist create mode 100644 plugins/LadspaEffect/caps/Reverb.cc create mode 100644 plugins/LadspaEffect/caps/Reverb.h create mode 100644 plugins/LadspaEffect/caps/Roessler.cc create mode 100644 plugins/LadspaEffect/caps/Roessler.h create mode 100644 plugins/LadspaEffect/caps/Scape.cc create mode 100644 plugins/LadspaEffect/caps/Scape.h create mode 100644 plugins/LadspaEffect/caps/Sin.cc create mode 100644 plugins/LadspaEffect/caps/Sin.h create mode 100644 plugins/LadspaEffect/caps/SweepVF.cc create mode 100644 plugins/LadspaEffect/caps/SweepVF.h create mode 100644 plugins/LadspaEffect/caps/ToneControls.cc create mode 100644 plugins/LadspaEffect/caps/ToneStack.cc create mode 100644 plugins/LadspaEffect/caps/ToneStack.h create mode 100644 plugins/LadspaEffect/caps/VCO.cc create mode 100644 plugins/LadspaEffect/caps/VCO.h create mode 100644 plugins/LadspaEffect/caps/White.cc create mode 100644 plugins/LadspaEffect/caps/White.h create mode 100644 plugins/LadspaEffect/caps/basics.h create mode 100644 plugins/LadspaEffect/caps/caps.html create mode 100644 plugins/LadspaEffect/caps/caps.rdf create mode 100755 plugins/LadspaEffect/caps/configure.py create mode 100644 plugins/LadspaEffect/caps/dsp/BiQuad.h create mode 100644 plugins/LadspaEffect/caps/dsp/Delay.h create mode 100644 plugins/LadspaEffect/caps/dsp/Eq.h create mode 100644 plugins/LadspaEffect/caps/dsp/FIR.h create mode 100644 plugins/LadspaEffect/caps/dsp/FPTruncateMode.h create mode 100644 plugins/LadspaEffect/caps/dsp/LatFilt.h create mode 100644 plugins/LadspaEffect/caps/dsp/Lorenz.h create mode 100644 plugins/LadspaEffect/caps/dsp/OnePole.h create mode 100644 plugins/LadspaEffect/caps/dsp/RBJ.h create mode 100644 plugins/LadspaEffect/caps/dsp/RMS.h create mode 100644 plugins/LadspaEffect/caps/dsp/Roessler.h create mode 100644 plugins/LadspaEffect/caps/dsp/SVF.h create mode 100644 plugins/LadspaEffect/caps/dsp/Sine.h create mode 100644 plugins/LadspaEffect/caps/dsp/TDFII.h create mode 100644 plugins/LadspaEffect/caps/dsp/ToneStack.h create mode 100644 plugins/LadspaEffect/caps/dsp/TwelveAX7.h create mode 100644 plugins/LadspaEffect/caps/dsp/VCO.h create mode 100644 plugins/LadspaEffect/caps/dsp/White.h create mode 100644 plugins/LadspaEffect/caps/dsp/r12ax7.h create mode 100644 plugins/LadspaEffect/caps/dsp/sinc.h create mode 100644 plugins/LadspaEffect/caps/dsp/tonestack/ks_tab.h create mode 100644 plugins/LadspaEffect/caps/dsp/tonestack/tables.h create mode 100644 plugins/LadspaEffect/caps/dsp/tonestack/vs_tab.h create mode 100644 plugins/LadspaEffect/caps/dsp/util.h create mode 100644 plugins/LadspaEffect/caps/dsp/windows.h create mode 100644 plugins/LadspaEffect/caps/elev0.h create mode 100644 plugins/LadspaEffect/caps/interface.cc create mode 100644 plugins/LadspaEffect/caps/waves/click.h create mode 100644 plugins/LadspaEffect/caps/waves/money.h create mode 100644 plugins/LadspaEffect/cmt/CMakeLists.txt create mode 100644 plugins/LadspaEffect/cmt/README create mode 100644 plugins/LadspaEffect/cmt/doc/COPYING create mode 100644 plugins/LadspaEffect/cmt/doc/adding_plugins.html create mode 100644 plugins/LadspaEffect/cmt/doc/bugs.html create mode 100644 plugins/LadspaEffect/cmt/doc/changes.html create mode 100644 plugins/LadspaEffect/cmt/doc/index.html create mode 100644 plugins/LadspaEffect/cmt/doc/installation.html create mode 100644 plugins/LadspaEffect/cmt/doc/license.html create mode 100644 plugins/LadspaEffect/cmt/doc/overview.html create mode 100644 plugins/LadspaEffect/cmt/doc/plugins.html create mode 100644 plugins/LadspaEffect/cmt/doc/tasks.html create mode 100644 plugins/LadspaEffect/cmt/src/am.cpp create mode 100644 plugins/LadspaEffect/cmt/src/ambisonic.cpp create mode 100644 plugins/LadspaEffect/cmt/src/amp.cpp create mode 100644 plugins/LadspaEffect/cmt/src/analogue.cpp create mode 100644 plugins/LadspaEffect/cmt/src/canyondelay.cpp create mode 100644 plugins/LadspaEffect/cmt/src/cmt.cpp create mode 100644 plugins/LadspaEffect/cmt/src/cmt.h create mode 100644 plugins/LadspaEffect/cmt/src/delay.cpp create mode 100644 plugins/LadspaEffect/cmt/src/descriptor.cpp create mode 100644 plugins/LadspaEffect/cmt/src/disintegrator.cpp create mode 100644 plugins/LadspaEffect/cmt/src/dynamic.cpp create mode 100644 plugins/LadspaEffect/cmt/src/filter.cpp create mode 100644 plugins/LadspaEffect/cmt/src/freeverb/Components/allpass.cpp create mode 100644 plugins/LadspaEffect/cmt/src/freeverb/Components/allpass.h create mode 100644 plugins/LadspaEffect/cmt/src/freeverb/Components/comb.cpp create mode 100644 plugins/LadspaEffect/cmt/src/freeverb/Components/comb.h create mode 100644 plugins/LadspaEffect/cmt/src/freeverb/Components/denormals.h create mode 100644 plugins/LadspaEffect/cmt/src/freeverb/Components/revmodel.cpp create mode 100644 plugins/LadspaEffect/cmt/src/freeverb/Components/revmodel.h create mode 100644 plugins/LadspaEffect/cmt/src/freeverb/Components/tuning.h create mode 100644 plugins/LadspaEffect/cmt/src/freeverb/freeverb.cpp create mode 100644 plugins/LadspaEffect/cmt/src/freeverb/readme.txt create mode 100644 plugins/LadspaEffect/cmt/src/grain.cpp create mode 100644 plugins/LadspaEffect/cmt/src/hardgate.cpp create mode 100644 plugins/LadspaEffect/cmt/src/init.cpp create mode 100644 plugins/LadspaEffect/cmt/src/ladspa_types.h create mode 100644 plugins/LadspaEffect/cmt/src/lofi.cpp create mode 100644 plugins/LadspaEffect/cmt/src/logistic.cpp create mode 100644 plugins/LadspaEffect/cmt/src/mixer.cpp create mode 100644 plugins/LadspaEffect/cmt/src/noise.cpp create mode 100644 plugins/LadspaEffect/cmt/src/null.cpp create mode 100644 plugins/LadspaEffect/cmt/src/organ.cpp create mode 100644 plugins/LadspaEffect/cmt/src/peak.cpp create mode 100644 plugins/LadspaEffect/cmt/src/phasemod.cpp create mode 100644 plugins/LadspaEffect/cmt/src/pink.cpp create mode 100644 plugins/LadspaEffect/cmt/src/pink_full.cpp create mode 100644 plugins/LadspaEffect/cmt/src/pink_sh.cpp create mode 100644 plugins/LadspaEffect/cmt/src/pinknoise.h create mode 100644 plugins/LadspaEffect/cmt/src/run_adding.h create mode 100644 plugins/LadspaEffect/cmt/src/sine.cpp create mode 100644 plugins/LadspaEffect/cmt/src/sledgehammer.cpp create mode 100644 plugins/LadspaEffect/cmt/src/syndrum.cpp create mode 100644 plugins/LadspaEffect/cmt/src/utils.h create mode 100644 plugins/LadspaEffect/cmt/src/vcf303.cpp create mode 100644 plugins/LadspaEffect/cmt/src/wshape_sine.cpp create mode 100644 plugins/LadspaEffect/logo.png create mode 100644 plugins/LadspaEffect/swh/AUTHORS create mode 100644 plugins/LadspaEffect/swh/CMakeLists.txt create mode 100644 plugins/LadspaEffect/swh/COPYING create mode 100644 plugins/LadspaEffect/swh/NEWS create mode 100644 plugins/LadspaEffect/swh/README create mode 100644 plugins/LadspaEffect/swh/alias_1407.c create mode 100644 plugins/LadspaEffect/swh/allpass_1895.c create mode 100644 plugins/LadspaEffect/swh/am_pitchshift_1433.c create mode 100644 plugins/LadspaEffect/swh/amp_1181.c create mode 100644 plugins/LadspaEffect/swh/bandpass_a_iir_1893.c create mode 100644 plugins/LadspaEffect/swh/bandpass_iir_1892.c create mode 100644 plugins/LadspaEffect/swh/bode_shifter_1431.c create mode 100644 plugins/LadspaEffect/swh/bode_shifter_cv_1432.c create mode 100644 plugins/LadspaEffect/swh/butterworth_1902.c create mode 100644 plugins/LadspaEffect/swh/chebstortion_1430.c create mode 100644 plugins/LadspaEffect/swh/comb_1190.c create mode 100644 plugins/LadspaEffect/swh/comb_1887.c create mode 100644 plugins/LadspaEffect/swh/comb_splitter_1411.c create mode 100644 plugins/LadspaEffect/swh/config.h create mode 100644 plugins/LadspaEffect/swh/const_1909.c create mode 100644 plugins/LadspaEffect/swh/crossover_dist_1404.c create mode 100644 plugins/LadspaEffect/swh/dc_remove_1207.c create mode 100644 plugins/LadspaEffect/swh/decay_1886.c create mode 100644 plugins/LadspaEffect/swh/decimator_1202.c create mode 100644 plugins/LadspaEffect/swh/declip_1195.c create mode 100644 plugins/LadspaEffect/swh/delay_1898.c create mode 100644 plugins/LadspaEffect/swh/delayorama_1402.c create mode 100644 plugins/LadspaEffect/swh/diode_1185.c create mode 100644 plugins/LadspaEffect/swh/divider_1186.c create mode 100644 plugins/LadspaEffect/swh/dj_eq_1901.c create mode 100644 plugins/LadspaEffect/swh/dj_flanger_1438.c create mode 100644 plugins/LadspaEffect/swh/dyson_compress_1403.c create mode 100644 plugins/LadspaEffect/swh/fad_delay_1192.c create mode 100644 plugins/LadspaEffect/swh/fast_lookahead_limiter_1913.c create mode 100644 plugins/LadspaEffect/swh/flanger_1191.c create mode 100644 plugins/LadspaEffect/swh/foldover_1213.c create mode 100644 plugins/LadspaEffect/swh/foverdrive_1196.c create mode 100644 plugins/LadspaEffect/swh/freq_tracker_1418.c create mode 100644 plugins/LadspaEffect/swh/gate_1410.c create mode 100644 plugins/LadspaEffect/swh/giant_flange_1437.c create mode 100644 plugins/LadspaEffect/swh/gong_1424.c create mode 100644 plugins/LadspaEffect/swh/gong_beater_1439.c create mode 100644 plugins/LadspaEffect/swh/gsm/COPYRIGHT create mode 100644 plugins/LadspaEffect/swh/gsm/README create mode 100644 plugins/LadspaEffect/swh/gsm/add.c create mode 100644 plugins/LadspaEffect/swh/gsm/code.c create mode 100644 plugins/LadspaEffect/swh/gsm/config.h create mode 100644 plugins/LadspaEffect/swh/gsm/decode.c create mode 100644 plugins/LadspaEffect/swh/gsm/gsm.h create mode 100644 plugins/LadspaEffect/swh/gsm/gsm_create.c create mode 100644 plugins/LadspaEffect/swh/gsm/gsm_decode.c create mode 100644 plugins/LadspaEffect/swh/gsm/gsm_destroy.c create mode 100644 plugins/LadspaEffect/swh/gsm/gsm_encode.c create mode 100644 plugins/LadspaEffect/swh/gsm/gsm_option.c create mode 100644 plugins/LadspaEffect/swh/gsm/long_term.c create mode 100644 plugins/LadspaEffect/swh/gsm/lpc.c create mode 100644 plugins/LadspaEffect/swh/gsm/preprocess.c create mode 100644 plugins/LadspaEffect/swh/gsm/private.h create mode 100644 plugins/LadspaEffect/swh/gsm/proto.h create mode 100644 plugins/LadspaEffect/swh/gsm/rpe.c create mode 100644 plugins/LadspaEffect/swh/gsm/short_term.c create mode 100644 plugins/LadspaEffect/swh/gsm/table.c create mode 100644 plugins/LadspaEffect/swh/gsm/unproto.h create mode 100644 plugins/LadspaEffect/swh/gsm_1215.c create mode 100644 plugins/LadspaEffect/swh/gverb/gverb.c create mode 100644 plugins/LadspaEffect/swh/gverb/gverb.h create mode 100644 plugins/LadspaEffect/swh/gverb/gverbdsp.c create mode 100644 plugins/LadspaEffect/swh/gverb/gverbdsp.h create mode 100644 plugins/LadspaEffect/swh/gverb_1216.c create mode 100644 plugins/LadspaEffect/swh/hard_limiter_1413.c create mode 100644 plugins/LadspaEffect/swh/harmonic_gen_1220.c create mode 100644 plugins/LadspaEffect/swh/hermes_filter_1200.c create mode 100644 plugins/LadspaEffect/swh/highpass_iir_1890.c create mode 100644 plugins/LadspaEffect/swh/hilbert_1440.c create mode 100644 plugins/LadspaEffect/swh/imp_1199.c create mode 100644 plugins/LadspaEffect/swh/impulse_1885.c create mode 100644 plugins/LadspaEffect/swh/impulses/01-unit.h create mode 100644 plugins/LadspaEffect/swh/impulses/02-steves-flat.h create mode 100644 plugins/LadspaEffect/swh/impulses/03-stk-m1.h create mode 100644 plugins/LadspaEffect/swh/impulses/04-fender-68-vibrolux-sm57.h create mode 100644 plugins/LadspaEffect/swh/impulses/05-fender-68-vibrolux-sm57-off.h create mode 100644 plugins/LadspaEffect/swh/impulses/06-fender-68-vibrolux-at4050.h create mode 100644 plugins/LadspaEffect/swh/impulses/07-fender-68-vibrolux-ui87.h create mode 100644 plugins/LadspaEffect/swh/impulses/08-fender-bassman-sm57.h create mode 100644 plugins/LadspaEffect/swh/impulses/09-fender-bassman-sm57-off.h create mode 100644 plugins/LadspaEffect/swh/impulses/10-fender-bassman-at4050.h create mode 100644 plugins/LadspaEffect/swh/impulses/11-fender-bassman-ui87.h create mode 100644 plugins/LadspaEffect/swh/impulses/12-fender-superchamp-sm57.h create mode 100644 plugins/LadspaEffect/swh/impulses/13-fender-superchamp-sm57-off.h create mode 100644 plugins/LadspaEffect/swh/impulses/14-fender-superchamp-at4050.h create mode 100644 plugins/LadspaEffect/swh/impulses/15-fender-superchamp-ui87.h create mode 100644 plugins/LadspaEffect/swh/impulses/16-marshall-jcm2000-sm57.h create mode 100644 plugins/LadspaEffect/swh/impulses/17-marshall-jcm2000-sm57-off.h create mode 100644 plugins/LadspaEffect/swh/impulses/18-marshall-plexi-sm57.h create mode 100644 plugins/LadspaEffect/swh/impulses/19-marshall-plexi-sm57-off.h create mode 100644 plugins/LadspaEffect/swh/impulses/20-matchless-chieftain-sm57.h create mode 100644 plugins/LadspaEffect/swh/impulses/21-matchless-chieftain-sm57-off.h create mode 100644 plugins/LadspaEffect/swh/impulses/all.h create mode 100644 plugins/LadspaEffect/swh/inv_1429.c create mode 100644 plugins/LadspaEffect/swh/karaoke_1409.c create mode 100644 plugins/LadspaEffect/swh/ladspa-util.c create mode 100644 plugins/LadspaEffect/swh/ladspa-util.h create mode 100644 plugins/LadspaEffect/swh/latency_1914.c create mode 100644 plugins/LadspaEffect/swh/lcr_delay_1436.c create mode 100644 plugins/LadspaEffect/swh/lowpass_iir_1891.c create mode 100644 plugins/LadspaEffect/swh/ls_filter_1908.c create mode 100644 plugins/LadspaEffect/swh/matrix_ms_st_1421.c create mode 100644 plugins/LadspaEffect/swh/matrix_spatialiser_1422.c create mode 100644 plugins/LadspaEffect/swh/matrix_st_ms_1420.c create mode 100644 plugins/LadspaEffect/swh/mbeq_1197.c create mode 100644 plugins/LadspaEffect/swh/mod_delay_1419.c create mode 100644 plugins/LadspaEffect/swh/multivoice_chorus_1201.c create mode 100644 plugins/LadspaEffect/swh/notch_iir_1894.c create mode 100644 plugins/LadspaEffect/swh/phasers_1217.c create mode 100644 plugins/LadspaEffect/swh/pitch_scale_1193.c create mode 100644 plugins/LadspaEffect/swh/pitch_scale_1194.c create mode 100644 plugins/LadspaEffect/swh/plate_1423.c create mode 100644 plugins/LadspaEffect/swh/pointer_cast_1910.c create mode 100644 plugins/LadspaEffect/swh/rate_shifter_1417.c create mode 100644 plugins/LadspaEffect/swh/retro_flange_1208.c create mode 100644 plugins/LadspaEffect/swh/revdelay_1605.c create mode 100644 plugins/LadspaEffect/swh/ringmod_1188.c create mode 100644 plugins/LadspaEffect/swh/satan_maximiser_1408.c create mode 100644 plugins/LadspaEffect/swh/sc1_1425.c create mode 100644 plugins/LadspaEffect/swh/sc2_1426.c create mode 100644 plugins/LadspaEffect/swh/sc3_1427.c create mode 100644 plugins/LadspaEffect/swh/sc4_1882.c create mode 100644 plugins/LadspaEffect/swh/sc4m_1916.c create mode 100644 plugins/LadspaEffect/swh/se4_1883.c create mode 100644 plugins/LadspaEffect/swh/shaper_1187.c create mode 100644 plugins/LadspaEffect/swh/sifter_1210.c create mode 100644 plugins/LadspaEffect/swh/sin_cos_1881.c create mode 100644 plugins/LadspaEffect/swh/single_para_1203.c create mode 100644 plugins/LadspaEffect/swh/sinus_wavewrapper_1198.c create mode 100644 plugins/LadspaEffect/swh/smooth_decimate_1414.c create mode 100644 plugins/LadspaEffect/swh/split_1406.c create mode 100644 plugins/LadspaEffect/swh/step_muxer_1212.c create mode 100644 plugins/LadspaEffect/swh/surround_encoder_1401.c create mode 100644 plugins/LadspaEffect/swh/svf_1214.c create mode 100644 plugins/LadspaEffect/swh/tape_delay_1211.c create mode 100644 plugins/LadspaEffect/swh/transient_1206.c create mode 100644 plugins/LadspaEffect/swh/triple_para_1204.c create mode 100644 plugins/LadspaEffect/swh/util/biquad.h create mode 100644 plugins/LadspaEffect/swh/util/blo.c create mode 100644 plugins/LadspaEffect/swh/util/blo.h create mode 100644 plugins/LadspaEffect/swh/util/buffer.h create mode 100644 plugins/LadspaEffect/swh/util/db.c create mode 100644 plugins/LadspaEffect/swh/util/db.h create mode 100644 plugins/LadspaEffect/swh/util/iir.c create mode 100644 plugins/LadspaEffect/swh/util/iir.h create mode 100644 plugins/LadspaEffect/swh/util/ls_filter.h create mode 100644 plugins/LadspaEffect/swh/util/pitchscale.c create mode 100644 plugins/LadspaEffect/swh/util/pitchscale.h create mode 100644 plugins/LadspaEffect/swh/util/rms.c create mode 100644 plugins/LadspaEffect/swh/util/rms.h create mode 100644 plugins/LadspaEffect/swh/util/waveguide_nl.h create mode 100644 plugins/LadspaEffect/swh/valve_1209.c create mode 100644 plugins/LadspaEffect/swh/valve_rect_1405.c create mode 100644 plugins/LadspaEffect/swh/vocoder_1337.c create mode 100644 plugins/LadspaEffect/swh/vynil_1905.c create mode 100644 plugins/LadspaEffect/swh/wave_terrain_1412.c create mode 100644 plugins/LadspaEffect/swh/xfade_1915.c create mode 100644 plugins/LadspaEffect/swh/zm1_1428.c create mode 100644 plugins/LadspaEffect/tap/CMakeLists.txt create mode 100644 plugins/LadspaEffect/tap/COPYING create mode 100644 plugins/LadspaEffect/tap/CREDITS create mode 100644 plugins/LadspaEffect/tap/README create mode 100644 plugins/LadspaEffect/tap/tap_autopan.c create mode 100644 plugins/LadspaEffect/tap/tap_chorusflanger.c create mode 100644 plugins/LadspaEffect/tap/tap_deesser.c create mode 100644 plugins/LadspaEffect/tap/tap_doubler.c create mode 100644 plugins/LadspaEffect/tap/tap_dynamics_m.c create mode 100644 plugins/LadspaEffect/tap/tap_dynamics_presets.h create mode 100644 plugins/LadspaEffect/tap/tap_dynamics_st.c create mode 100644 plugins/LadspaEffect/tap/tap_echo.c create mode 100644 plugins/LadspaEffect/tap/tap_eq.c create mode 100644 plugins/LadspaEffect/tap/tap_eqbw.c create mode 100644 plugins/LadspaEffect/tap/tap_limiter.c create mode 100644 plugins/LadspaEffect/tap/tap_pinknoise.c create mode 100644 plugins/LadspaEffect/tap/tap_pitch.c create mode 100644 plugins/LadspaEffect/tap/tap_reflector.c create mode 100644 plugins/LadspaEffect/tap/tap_reverb.c create mode 100644 plugins/LadspaEffect/tap/tap_reverb.h create mode 100644 plugins/LadspaEffect/tap/tap_reverb_presets.h create mode 100644 plugins/LadspaEffect/tap/tap_rotspeak.c create mode 100644 plugins/LadspaEffect/tap/tap_sigmoid.c create mode 100644 plugins/LadspaEffect/tap/tap_tremolo.c create mode 100644 plugins/LadspaEffect/tap/tap_tubewarmth.c create mode 100644 plugins/LadspaEffect/tap/tap_utils.h create mode 100644 plugins/LadspaEffect/tap/tap_vibrato.c diff --git a/plugins/CMakeLists.txt b/plugins/CMakeLists.txt index 86dad9230..71c07501e 100644 --- a/plugins/CMakeLists.txt +++ b/plugins/CMakeLists.txt @@ -6,7 +6,7 @@ ADD_SUBDIRECTORY(flp_import) ADD_SUBDIRECTORY(HydrogenImport) ADD_SUBDIRECTORY(kicker) ADD_SUBDIRECTORY(ladspa_browser) -ADD_SUBDIRECTORY(ladspa_effect) +ADD_SUBDIRECTORY(LadspaEffect) ADD_SUBDIRECTORY(lb302) #ADD_SUBDIRECTORY(lb303) ADD_SUBDIRECTORY(midi_import) diff --git a/plugins/LadspaEffect/CMakeLists.txt b/plugins/LadspaEffect/CMakeLists.txt new file mode 100644 index 000000000..80802ec35 --- /dev/null +++ b/plugins/LadspaEffect/CMakeLists.txt @@ -0,0 +1,26 @@ +IF(WANT_CAPS) +ADD_SUBDIRECTORY(caps) +ENDIF(WANT_CAPS) + +IF(WANT_TAP) +ADD_SUBDIRECTORY(tap) +ENDIF(WANT_TAP) + +IF(WANT_SWH) +ADD_SUBDIRECTORY(swh) +ENDIF(WANT_SWH) + +IF(WANT_CMT) +ADD_SUBDIRECTORY(cmt) +ENDIF(WANT_CMT) + +IF(WANT_CALF) +ADD_SUBDIRECTORY(calf) +ENDIF(WANT_CALF) + + +INCLUDE(BuildPlugin) + +BUILD_PLUGIN(ladspaeffect LadspaEffect.cpp LadspaControls.cpp LadspaControlDialog.cpp LadspaSubPluginFeatures.cpp LadspaEffect.h LadspaControls.h LadspaControlDialog.h LadspaSubPluginFeatures.h MOCFILES LadspaEffect.h LadspaControls.h LadspaControlDialog.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png") + + diff --git a/plugins/LadspaEffect/LadspaControlDialog.cpp b/plugins/LadspaEffect/LadspaControlDialog.cpp new file mode 100644 index 000000000..d217574cb --- /dev/null +++ b/plugins/LadspaEffect/LadspaControlDialog.cpp @@ -0,0 +1,147 @@ +/* + * LadspaControlDialog.cpp - dialog for displaying and editing control port + * values for LADSPA plugins + * + * Copyright (c) 2006-2008 Danny McRae + * Copyright (c) 2009 Tobias Doerffel + * + * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program (see COPYING); if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA. + * + */ + + +#include +#include + +#include "LadspaEffect.h" +#include "LadspaControlDialog.h" +#include "LadspaControlView.h" +#include "led_checkbox.h" + + + +LadspaControlDialog::LadspaControlDialog( LadspaControls * _ctl ) : + EffectControlDialog( _ctl ), + m_effectLayout( NULL ), + m_stereoLink( NULL ) +{ + QVBoxLayout * mainLay = new QVBoxLayout( this ); + + m_effectLayout = new QHBoxLayout(); + mainLay->addLayout( m_effectLayout ); + + updateEffectView( _ctl ); + + if( _ctl->m_processors > 1 ) + { + mainLay->addSpacing( 3 ); + QHBoxLayout * center = new QHBoxLayout(); + mainLay->addLayout( center ); + m_stereoLink = new ledCheckBox( tr( "Link Channels" ), this ); + m_stereoLink->setModel( &_ctl->m_stereoLinkModel ); + center->addWidget( m_stereoLink ); + } +} + + + + +LadspaControlDialog::~LadspaControlDialog() +{ +} + + + + +void LadspaControlDialog::updateEffectView( LadspaControls * _ctl ) +{ + QList list = findChildren(); + for( QList::iterator it = list.begin(); it != list.end(); + ++it ) + { + delete *it; + } + + m_effectControls = _ctl; + + + const int cols = static_cast( sqrt( + static_cast( _ctl->m_controlCount / + _ctl->m_processors ) ) ); + for( ch_cnt_t proc = 0; proc < _ctl->m_processors; proc++ ) + { + control_list_t & controls = _ctl->m_controls[proc]; + int row = 0; + int col = 0; + buffer_data_t last_port = NONE; + + QGroupBox * grouper; + if( _ctl->m_processors > 1 ) + { + grouper = new QGroupBox( tr( "Channel " ) + + QString::number( proc + 1 ), + this ); + } + else + { + grouper = new QGroupBox( this ); + } + + QGridLayout * gl = new QGridLayout( grouper ); + grouper->setLayout( gl ); + grouper->setAlignment( Qt::Vertical ); + + for( control_list_t::iterator it = controls.begin(); + it != controls.end(); it++ ) + { + if( (*it)->port()->proc == proc ) + { + if( last_port != NONE && + (*it)->port()->data_type == TOGGLED && + !( (*it)->port()->data_type == TOGGLED && + last_port == TOGGLED ) ) + { + ++row; + col = 0; + } + gl->addWidget( new LadspaControlView( grouper, *it ), row, col ); + if( ++col == cols ) + { + ++row; + col = 0; + } + last_port = (*it)->port()->data_type; + } + } + + m_effectLayout->addWidget( grouper ); + } + + if( _ctl->m_processors > 1 && m_stereoLink != NULL ) + { + m_stereoLink->setModel( &_ctl->m_stereoLinkModel ); + } + + connect( _ctl, SIGNAL( effectModelChanged( LadspaControls * ) ), + this, SLOT( updateEffectView( LadspaControls * ) ), + Qt::DirectConnection ); +} + + +#include "moc_LadspaControlDialog.cxx" + diff --git a/plugins/LadspaEffect/LadspaControlDialog.h b/plugins/LadspaEffect/LadspaControlDialog.h new file mode 100644 index 000000000..204c7ce6d --- /dev/null +++ b/plugins/LadspaEffect/LadspaControlDialog.h @@ -0,0 +1,56 @@ +/* + * LadspaControlDialog.h - dialog for displaying and editing control port + * values for LADSPA plugins + * + * Copyright (c) 2006-2008 Danny McRae + * Copyright (c) 2009 Tobias Doerffel + * + * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program (see COPYING); if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA. + * + */ + +#ifndef _LADSPA_CONTROL_DIALOG_H +#define _LADSPA_CONTROL_DIALOG_H + +#include "EffectControlDialog.h" + + +class QHBoxLayout; +class LadspaControls; +class ledCheckBox; + + +class LadspaControlDialog : public EffectControlDialog +{ + Q_OBJECT +public: + LadspaControlDialog( LadspaControls * _ctl ); + ~LadspaControlDialog(); + + +private slots: + void updateEffectView( LadspaControls * _ctl ); + + +private: + QHBoxLayout * m_effectLayout; + ledCheckBox * m_stereoLink; + +} ; + +#endif diff --git a/plugins/LadspaEffect/LadspaControls.cpp b/plugins/LadspaEffect/LadspaControls.cpp new file mode 100644 index 000000000..f7b16d5f2 --- /dev/null +++ b/plugins/LadspaEffect/LadspaControls.cpp @@ -0,0 +1,187 @@ +/* + * LadspaControls.cpp - model for LADSPA plugin controls + * + * Copyright (c) 2008-2014 Tobias Doerffel + * + * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program (see COPYING); if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA. + * + */ + +#include + +#include "LadspaEffect.h" + + +LadspaControls::LadspaControls( LadspaEffect * _eff ) : + EffectControls( _eff ), + m_effect( _eff ), + m_processors( _eff->processorCount() ), + m_noLink( false ), + m_stereoLinkModel( true, this ) +{ + + connect( &m_stereoLinkModel, SIGNAL( dataChanged() ), + this, SLOT( updateLinkStatesFromGlobal() ) ); + + multi_proc_t controls = m_effect->getPortControls(); + m_controlCount = controls.count(); + + for( ch_cnt_t proc = 0; proc < m_processors; proc++ ) + { + control_list_t p; + + const bool linked_control = ( m_processors > 1 && proc == 0 ); + + for( multi_proc_t::Iterator it = controls.begin(); it != controls.end(); it++ ) + { + if( (*it)->proc == proc ) + { + (*it)->control = new LadspaControl( this, *it, + linked_control ); + + p.append( (*it)->control ); + + if( linked_control ) + { + connect( (*it)->control, SIGNAL( linkChanged( int, bool ) ), + this, SLOT( linkPort( int, bool ) ) ); + } + } + } + + m_controls.append( p ); + } + + // now link all controls + if( m_processors > 1 ) + { + for( multi_proc_t::Iterator it = controls.begin(); + it != controls.end(); it++ ) + { + if( (*it)->proc == 0 ) + { + linkPort( ( *it )->control_id, true ); + } + } + } +} + + + + +LadspaControls::~LadspaControls() +{ + for( ch_cnt_t proc = 0; proc < m_processors; proc++ ) + { + m_controls[proc].clear(); + } + m_controls.clear(); +} + + + + +void LadspaControls::saveSettings( QDomDocument & _doc, QDomElement & _this ) +{ + if( m_processors > 1 ) + { + _this.setAttribute( "link", m_stereoLinkModel.value() ); + } + + multi_proc_t controls = m_effect->getPortControls(); + _this.setAttribute( "ports", controls.count() ); + for( multi_proc_t::Iterator it = controls.begin(); + it != controls.end(); it++ ) + { + QString n = "port" + QString::number( (*it)->proc ) + + QString::number( (*it)->port_id ); + (*it)->control->saveSettings( _doc, _this, n ); + } +} + + + + +void LadspaControls::loadSettings( const QDomElement & _this ) +{ + if( m_processors > 1 ) + { + m_stereoLinkModel.setValue( _this.attribute( "link" ).toInt() ); + } + + multi_proc_t controls = m_effect->getPortControls(); + for( multi_proc_t::Iterator it = controls.begin(); + it != controls.end(); it++ ) + { + QString n = "port" + QString::number( (*it)->proc ) + + QString::number( (*it)->port_id ); + (*it)->control->loadSettings( _this, n ); + } +} + + + + +void LadspaControls::linkPort( int _port, bool _state ) +{ + LadspaControl * first = m_controls[0][_port]; + if( _state ) + { + for( ch_cnt_t proc = 1; proc < m_processors; proc++ ) + { + first->linkControls( m_controls[proc][_port] ); + } + } + else + { + for( ch_cnt_t proc = 1; proc < m_processors; proc++ ) + { + first->unlinkControls( m_controls[proc][_port] ); + } + m_noLink = true; + m_stereoLinkModel.setValue( false ); + } +} + + + +void LadspaControls::updateLinkStatesFromGlobal() +{ + if( m_stereoLinkModel.value() ) + { + for( int port = 0; port < m_controlCount / m_processors; port++ ) + { + m_controls[0][port]->setLink( true ); + } + } + else if( !m_noLink ) + { + for( int port = 0; port < m_controlCount / m_processors; port++ ) + { + m_controls[0][port]->setLink( false ); + } + } + + // if global channel link state has changed, always ignore link + // status of individual ports in the future + m_noLink = false; +} + + +#include "moc_LadspaControls.cxx" + diff --git a/plugins/LadspaEffect/LadspaControls.h b/plugins/LadspaEffect/LadspaControls.h new file mode 100644 index 000000000..a606f3a6c --- /dev/null +++ b/plugins/LadspaEffect/LadspaControls.h @@ -0,0 +1,86 @@ +/* + * LadspaControls.h - model for LADSPA plugin controls + * + * Copyright (c) 2008-2014 Tobias Doerffel + * + * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program (see COPYING); if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA. + * + */ + +#ifndef _LADSPA_CONTROLS_H +#define _LADSPA_CONTROLS_H + +#include "EffectControls.h" +#include "LadspaControl.h" +#include "LadspaControlDialog.h" + + +typedef QVector control_list_t; + +class LadspaEffect; + + +class LadspaControls : public EffectControls +{ + Q_OBJECT +public: + LadspaControls( LadspaEffect * _eff ); + virtual ~LadspaControls(); + + inline int controlCount() + { + return m_controlCount; + } + + virtual void saveSettings( QDomDocument & _doc, QDomElement & _parent ); + virtual void loadSettings( const QDomElement & _this ); + inline virtual QString nodeName() const + { + return "ladspacontrols"; + } + + virtual EffectControlDialog * createView() + { + return new LadspaControlDialog( this ); + } + + +protected slots: + void updateLinkStatesFromGlobal(); + void linkPort( int _port, bool _state ); + + +private: + LadspaEffect * m_effect; + ch_cnt_t m_processors; + ch_cnt_t m_controlCount; + bool m_noLink; + BoolModel m_stereoLinkModel; + QVector m_controls; + + + friend class LadspaControlDialog; + friend class LadspaEffect; + + +signals: + void effectModelChanged( LadspaControls * ); + +} ; + +#endif diff --git a/plugins/LadspaEffect/LadspaEffect.cpp b/plugins/LadspaEffect/LadspaEffect.cpp new file mode 100644 index 000000000..0ad2ec73e --- /dev/null +++ b/plugins/LadspaEffect/LadspaEffect.cpp @@ -0,0 +1,580 @@ +/* + * LadspaEffect.cpp - class for processing LADSPA effects + * + * Copyright (c) 2006-2008 Danny McRae + * Copyright (c) 2009-2014 Tobias Doerffel + * + * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program (see COPYING); if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA. + * + */ + + +#include + +#include "LadspaEffect.h" +#include "DataFile.h" +#include "AudioDevice.h" +#include "config_mgr.h" +#include "ladspa_2_lmms.h" +#include "LadspaControl.h" +#include "LadspaSubPluginFeatures.h" +#include "Mixer.h" +#include "EffectChain.h" +#include "AutomationPattern.h" +#include "ControllerConnection.h" + +#include "embed.cpp" + + +extern "C" +{ + +Plugin::Descriptor PLUGIN_EXPORT ladspaeffect_plugin_descriptor = +{ + STRINGIFY( PLUGIN_NAME ), + "LADSPA Effect", + QT_TRANSLATE_NOOP( "pluginBrowser", + "plugin for using arbitrary LADSPA-effects " + "inside LMMS." ), + "Danny McRae ", + 0x0100, + Plugin::Effect, + new PluginPixmapLoader( "logo" ), + NULL, + new LadspaSubPluginFeatures( Plugin::Effect ) +} ; + +} + + +LadspaEffect::LadspaEffect( Model * _parent, + const Descriptor::SubPluginFeatures::Key * _key ) : + Effect( &ladspaeffect_plugin_descriptor, _parent, _key ), + m_controls( NULL ), + m_maxSampleRate( 0 ), + m_key( LadspaSubPluginFeatures::subPluginKeyToLadspaKey( _key ) ) +{ + ladspa2LMMS * manager = engine::getLADSPAManager(); + if( manager->getDescription( m_key ) == NULL ) + { + if( !engine::suppressMessages() ) + { + QMessageBox::warning( 0, tr( "Effect" ), + tr( "Unknown LADSPA plugin %1 requested." ). + arg( m_key.second ), + QMessageBox::Ok, QMessageBox::NoButton ); + } + setOkay( FALSE ); + return; + } + + setDisplayName( manager->getShortName( m_key ) ); + + pluginInstantiation(); + + connect( engine::mixer(), SIGNAL( sampleRateChanged() ), + this, SLOT( changeSampleRate() ) ); +} + + + + +LadspaEffect::~LadspaEffect() +{ + pluginDestruction(); +} + + + + +void LadspaEffect::changeSampleRate() +{ + DataFile dataFile( DataFile::EffectSettings ); + m_controls->saveState( dataFile, dataFile.content() ); + + LadspaControls * controls = m_controls; + m_controls = NULL; + + m_pluginMutex.lock(); + pluginDestruction(); + pluginInstantiation(); + m_pluginMutex.unlock(); + + controls->effectModelChanged( m_controls ); + delete controls; + + m_controls->restoreState( dataFile.content().firstChild().toElement() ); + + // the IDs of re-created controls have been saved and now need to be + // resolved again + AutomationPattern::resolveAllIDs(); + + // make sure, connections are ok + ControllerConnection::finalizeConnections(); +} + + + + +bool LadspaEffect::processAudioBuffer( sampleFrame * _buf, + const fpp_t _frames ) +{ + m_pluginMutex.lock(); + if( !isOkay() || dontRun() || !isRunning() || !isEnabled() ) + { + m_pluginMutex.unlock(); + return( FALSE ); + } + + int frames = _frames; + sampleFrame * o_buf = NULL; + + if( m_maxSampleRate < engine::mixer()->processingSampleRate() ) + { + o_buf = _buf; + _buf = new sampleFrame[_frames]; + sampleDown( o_buf, _buf, m_maxSampleRate ); + frames = _frames * m_maxSampleRate / + engine::mixer()->processingSampleRate(); + } + + // Copy the LMMS audio buffer to the LADSPA input buffer and initialize + // the control ports. Need to change this to handle non-in-place-broken + // plugins--would speed things up to use the same buffer for both + // LMMS and LADSPA. + ch_cnt_t channel = 0; + for( ch_cnt_t proc = 0; proc < processorCount(); ++proc ) + { + for( int port = 0; port < m_portCount; ++port ) + { + port_desc_t * pp = m_ports.at( proc ).at( port ); + switch( pp->rate ) + { + case CHANNEL_IN: + for( fpp_t frame = 0; + frame < frames; ++frame ) + { + pp->buffer[frame] = + _buf[frame][channel]; + } + ++channel; + break; + case AUDIO_RATE_INPUT: + pp->value = static_cast( + pp->control->value() / pp->scale ); + // This only supports control rate ports, so the audio rates are + // treated as though they were control rate by setting the + // port buffer to all the same value. + for( fpp_t frame = 0; + frame < frames; ++frame ) + { + pp->buffer[frame] = + pp->value; + } + break; + case CONTROL_RATE_INPUT: + if( pp->control == NULL ) + { + break; + } + pp->value = static_cast( + pp->control->value() / pp->scale ); + pp->buffer[0] = + pp->value; + break; + case CHANNEL_OUT: + case AUDIO_RATE_OUTPUT: + case CONTROL_RATE_OUTPUT: + break; + default: + break; + } + } + } + + // Process the buffers. + for( ch_cnt_t proc = 0; proc < processorCount(); ++proc ) + { + (m_descriptor->run)( m_handles[proc], frames ); + } + + // Copy the LADSPA output buffers to the LMMS buffer. + double out_sum = 0.0; + channel = 0; + const float d = dryLevel(); + const float w = wetLevel(); + for( ch_cnt_t proc = 0; proc < processorCount(); ++proc ) + { + for( int port = 0; port < m_portCount; ++port ) + { + port_desc_t * pp = m_ports.at( proc ).at( port ); + switch( pp->rate ) + { + case CHANNEL_IN: + case AUDIO_RATE_INPUT: + case CONTROL_RATE_INPUT: + break; + case CHANNEL_OUT: + for( fpp_t frame = 0; + frame < frames; ++frame ) + { + _buf[frame][channel] = d * _buf[frame][channel] + w * pp->buffer[frame]; + out_sum += _buf[frame][channel] * _buf[frame][channel]; + } + ++channel; + break; + case AUDIO_RATE_OUTPUT: + case CONTROL_RATE_OUTPUT: + break; + default: + break; + } + } + } + + if( o_buf != NULL ) + { + sampleBack( _buf, o_buf, m_maxSampleRate ); + delete[] _buf; + } + + checkGate( out_sum / frames ); + + + bool is_running = isRunning(); + m_pluginMutex.unlock(); + return( is_running ); +} + + + + +void LadspaEffect::setControl( int _control, LADSPA_Data _value ) +{ + if( !isOkay() ) + { + return; + } + m_portControls[_control]->value = _value; +} + + + + +void LadspaEffect::pluginInstantiation() +{ + m_maxSampleRate = maxSamplerate( displayName() ); + + ladspa2LMMS * manager = engine::getLADSPAManager(); + + // Calculate how many processing units are needed. + const ch_cnt_t lmms_chnls = engine::mixer()->audioDev()->channels(); + int effect_channels = manager->getDescription( m_key )->inputChannels; + setProcessorCount( lmms_chnls / effect_channels ); + + // Categorize the ports, and create the buffers. + m_portCount = manager->getPortCount( m_key ); + + for( ch_cnt_t proc = 0; proc < processorCount(); proc++ ) + { + multi_proc_t ports; + for( int port = 0; port < m_portCount; port++ ) + { + port_desc_t * p = new PortDescription; + + p->name = manager->getPortName( m_key, port ); + p->proc = proc; + p->port_id = port; + p->control = NULL; + + // Determine the port's category. + if( manager->isPortAudio( m_key, port ) ) + { + // Nasty manual memory management--was having difficulty + // with some prepackaged plugins that were segfaulting + // during cleanup. It was easier to troubleshoot with the + // memory management all taking place in one file. + p->buffer = + new LADSPA_Data[engine::mixer()->framesPerPeriod()]; + + if( p->name.toUpper().contains( "IN" ) && + manager->isPortInput( m_key, port ) ) + { + p->rate = CHANNEL_IN; + } + else if( p->name.toUpper().contains( "OUT" ) && + manager->isPortOutput( m_key, port ) ) + { + p->rate = CHANNEL_OUT; + } + else if( manager->isPortInput( m_key, port ) ) + { + p->rate = AUDIO_RATE_INPUT; + } + else + { + p->rate = AUDIO_RATE_OUTPUT; + } + } + else + { + p->buffer = new LADSPA_Data[1]; + + if( manager->isPortInput( m_key, port ) ) + { + p->rate = CONTROL_RATE_INPUT; + } + else + { + p->rate = CONTROL_RATE_OUTPUT; + } + } + + p->scale = 1.0f; + if( manager->isPortToggled( m_key, port ) ) + { + p->data_type = TOGGLED; + } + else if( manager->isInteger( m_key, port ) ) + { + p->data_type = INTEGER; + } + else if( p->name.toUpper().contains( "(SECONDS)" ) ) + { + p->data_type = TIME; + p->scale = 1000.0f; + int loc = p->name.toUpper().indexOf( + "(SECONDS)" ); + p->name.replace( loc, 9, "(ms)" ); + } + else if( p->name.toUpper().contains( "(S)" ) ) + { + p->data_type = TIME; + p->scale = 1000.0f; + int loc = p->name.toUpper().indexOf( "(S)" ); + p->name.replace( loc, 3, "(ms)" ); + } + else if( p->name.toUpper().contains( "(MS)" ) ) + { + p->data_type = TIME; + int loc = p->name.toUpper().indexOf( "(MS)" ); + p->name.replace( loc, 4, "(ms)" ); + } + else + { + p->data_type = FLOATING; + } + + // Get the range and default values. + p->max = manager->getUpperBound( m_key, port ); + if( p->max == NOHINT ) + { + p->max = p->name.toUpper() == "GAIN" ? 10.0f : + 1.0f; + } + + if( manager->areHintsSampleRateDependent( + m_key, port ) ) + { + p->max *= m_maxSampleRate; + } + + p->min = manager->getLowerBound( m_key, port ); + if( p->min == NOHINT ) + { + p->min = 0.0f; + } + + if( manager->areHintsSampleRateDependent( + m_key, port ) ) + { + p->min *= m_maxSampleRate; + } + + p->def = manager->getDefaultSetting( m_key, port ); + if( p->def == NOHINT ) + { + if( p->data_type != TOGGLED ) + { + p->def = ( p->min + p->max ) / 2.0f; + } + else + { + p->def = 1.0f; + } + } + else if( manager->areHintsSampleRateDependent( m_key, port ) ) + { + p->def *= m_maxSampleRate; + } + + + p->max *= p->scale; + p->min *= p->scale; + p->def *= p->scale; + + p->value = p->def; + + + ports.append( p ); + + // For convenience, keep a separate list of the ports that are used + // to control the processors. + if( p->rate == AUDIO_RATE_INPUT || + p->rate == CONTROL_RATE_INPUT ) + { + p->control_id = m_portControls.count(); + m_portControls.append( p ); + } + } + m_ports.append( ports ); + } + + // Instantiate the processing units. + m_descriptor = manager->getDescriptor( m_key ); + if( m_descriptor == NULL ) + { + QMessageBox::warning( 0, "Effect", + "Can't get LADSPA descriptor function: " + m_key.second, + QMessageBox::Ok, QMessageBox::NoButton ); + setOkay( FALSE ); + return; + } + if( m_descriptor->run == NULL ) + { + QMessageBox::warning( 0, "Effect", + "Plugin has no processor: " + m_key.second, + QMessageBox::Ok, QMessageBox::NoButton ); + setDontRun( TRUE ); + } + for( ch_cnt_t proc = 0; proc < processorCount(); proc++ ) + { + LADSPA_Handle effect = manager->instantiate( m_key, + m_maxSampleRate ); + if( effect == NULL ) + { + QMessageBox::warning( 0, "Effect", + "Can't get LADSPA instance: " + m_key.second, + QMessageBox::Ok, QMessageBox::NoButton ); + setOkay( FALSE ); + return; + } + m_handles.append( effect ); + } + + // Connect the ports. + for( ch_cnt_t proc = 0; proc < processorCount(); proc++ ) + { + for( int port = 0; port < m_portCount; port++ ) + { + port_desc_t * pp = m_ports.at( proc ).at( port ); + if( !manager->connectPort( m_key, + m_handles[proc], + port, + pp->buffer ) ) + { + QMessageBox::warning( 0, "Effect", + "Failed to connect port: " + m_key.second, + QMessageBox::Ok, QMessageBox::NoButton ); + setDontRun( TRUE ); + return; + } + } + } + + // Activate the processing units. + for( ch_cnt_t proc = 0; proc < processorCount(); proc++ ) + { + manager->activate( m_key, m_handles[proc] ); + } + m_controls = new LadspaControls( this ); +} + + + + +void LadspaEffect::pluginDestruction() +{ + if( !isOkay() ) + { + return; + } + + delete m_controls; + + for( ch_cnt_t proc = 0; proc < processorCount(); proc++ ) + { + ladspa2LMMS * manager = engine::getLADSPAManager(); + manager->deactivate( m_key, m_handles[proc] ); + manager->cleanup( m_key, m_handles[proc] ); + for( int port = 0; port < m_portCount; port++ ) + { + port_desc_t * pp = m_ports.at( proc ).at( port ); + delete[] pp->buffer; + delete pp; + } + m_ports[proc].clear(); + } + m_ports.clear(); + m_handles.clear(); + m_portControls.clear(); +} + + + + + + +static QMap __buggy_plugins; + +sample_rate_t LadspaEffect::maxSamplerate( const QString & _name ) +{ + if( __buggy_plugins.isEmpty() ) + { + __buggy_plugins["C* AmpVTS"] = 88200; + __buggy_plugins["Chorus2"] = 44100; + __buggy_plugins["Notch Filter"] = 96000; + __buggy_plugins["Freeverb"] = 44100; + __buggy_plugins["TAP Reflector"] = 192000; + } + if( __buggy_plugins.contains( _name ) ) + { + return( __buggy_plugins[_name] ); + } + return( engine::mixer()->processingSampleRate() ); +} + + + + +extern "C" +{ + +// necessary for getting instance out of shared lib +Plugin * PLUGIN_EXPORT lmms_plugin_main( Model * _parent, void * _data ) +{ + return new LadspaEffect( _parent, + static_cast( + _data ) ); +} + +} + + +#include "moc_LadspaEffect.cxx" + diff --git a/plugins/LadspaEffect/LadspaEffect.h b/plugins/LadspaEffect/LadspaEffect.h new file mode 100644 index 000000000..52adc0f0d --- /dev/null +++ b/plugins/LadspaEffect/LadspaEffect.h @@ -0,0 +1,88 @@ +/* + * LadspaEffect.h - class for handling LADSPA effect plugins + * + * Copyright (c) 2006-2008 Danny McRae + * Copyright (c) 2009 Tobias Doerffel + * + * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program (see COPYING); if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA. + * + */ + +#ifndef _LADSPA_EFFECT_H +#define _LADSPA_EFFECT_H + +#include + +#include "Effect.h" +#include "LadspaBase.h" +#include "LadspaControls.h" + + +typedef QVector multi_proc_t; + +class LadspaEffect : public Effect +{ + Q_OBJECT +public: + LadspaEffect( Model * _parent, + const Descriptor::SubPluginFeatures::Key * _key ); + virtual ~LadspaEffect(); + + virtual bool processAudioBuffer( sampleFrame * _buf, + const fpp_t _frames ); + + void setControl( int _control, LADSPA_Data _data ); + + virtual EffectControls * controls() + { + return m_controls; + } + + inline const multi_proc_t & getPortControls() + { + return m_portControls; + } + + +private slots: + void changeSampleRate(); + + +private: + void pluginInstantiation(); + void pluginDestruction(); + + static sample_rate_t maxSamplerate( const QString & _name ); + + + QMutex m_pluginMutex; + LadspaControls * m_controls; + + sample_rate_t m_maxSampleRate; + ladspa_key_t m_key; + int m_portCount; + + const LADSPA_Descriptor * m_descriptor; + QVector m_handles; + + QVector m_ports; + multi_proc_t m_portControls; + +} ; + +#endif diff --git a/plugins/LadspaEffect/LadspaSubPluginFeatures.cpp b/plugins/LadspaEffect/LadspaSubPluginFeatures.cpp new file mode 100644 index 000000000..a51a21322 --- /dev/null +++ b/plugins/LadspaEffect/LadspaSubPluginFeatures.cpp @@ -0,0 +1,171 @@ +/* + * LadspaSubPluginFeatures.cpp - derivation from + * Plugin::Descriptor::SubPluginFeatures for + * hosting LADSPA-plugins + * + * Copyright (c) 2006-2007 Danny McRae + * Copyright (c) 2006-2014 Tobias Doerffel + * + * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program (see COPYING); if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA. + * + */ + +#include +#include + +#include "LadspaSubPluginFeatures.h" +#include "AudioDevice.h" +#include "engine.h" +#include "ladspa_2_lmms.h" +#include "LadspaBase.h" +#include "Mixer.h" + + +LadspaSubPluginFeatures::LadspaSubPluginFeatures( Plugin::PluginTypes _type ) : + SubPluginFeatures( _type ) +{ +} + + + + +void LadspaSubPluginFeatures::fillDescriptionWidget( QWidget * _parent, + const Key * _key ) const +{ + const ladspa_key_t & lkey = subPluginKeyToLadspaKey( _key ); + ladspa2LMMS * lm = engine::getLADSPAManager(); + + QLabel * label = new QLabel( _parent ); + label->setText( QWidget::tr( "Name: " ) + lm->getName( lkey ) ); + + QLabel* fileInfo = new QLabel( _parent ); + fileInfo->setText( QWidget::tr( "File: %1" ).arg( lkey.first ) ); + + QWidget * maker = new QWidget( _parent ); + QHBoxLayout * l = new QHBoxLayout( maker ); + l->setMargin( 0 ); + l->setSpacing( 0 ); + + QLabel * maker_label = new QLabel( maker ); + maker_label->setText( QWidget::tr( "Maker: " ) ); + maker_label->setAlignment( Qt::AlignTop ); + QLabel * maker_content = new QLabel( maker ); + maker_content->setText( lm->getMaker( lkey ) ); + maker_content->setWordWrap( true ); + l->addWidget( maker_label ); + l->addWidget( maker_content, 1 ); + + QWidget * copyright = new QWidget( _parent ); + l = new QHBoxLayout( copyright ); + l->setMargin( 0 ); + l->setSpacing( 0 ); + + copyright->setMinimumWidth( _parent->minimumWidth() ); + QLabel * copyright_label = new QLabel( copyright ); + copyright_label->setText( QWidget::tr( "Copyright: " ) ); + copyright_label->setAlignment( Qt::AlignTop ); + + QLabel * copyright_content = new QLabel( copyright ); + copyright_content->setText( lm->getCopyright( lkey ) ); + copyright_content->setWordWrap( true ); + l->addWidget( copyright_label ); + l->addWidget( copyright_content, 1 ); + + QLabel * requiresRealTime = new QLabel( _parent ); + requiresRealTime->setText( QWidget::tr( "Requires Real Time: " ) + + ( lm->hasRealTimeDependency( lkey ) ? + QWidget::tr( "Yes" ) : + QWidget::tr( "No" ) ) ); + + QLabel * realTimeCapable = new QLabel( _parent ); + realTimeCapable->setText( QWidget::tr( "Real Time Capable: " ) + + ( lm->isRealTimeCapable( lkey ) ? + QWidget::tr( "Yes" ) : + QWidget::tr( "No" ) ) ); + + QLabel * inplaceBroken = new QLabel( _parent ); + inplaceBroken->setText( QWidget::tr( "In Place Broken: " ) + + ( lm->isInplaceBroken( lkey ) ? + QWidget::tr( "Yes" ) : + QWidget::tr( "No" ) ) ); + + QLabel * channelsIn = new QLabel( _parent ); + channelsIn->setText( QWidget::tr( "Channels In: " ) + + QString::number( lm->getDescription( lkey )->inputChannels ) ); + + QLabel * channelsOut = new QLabel( _parent ); + channelsOut->setText( QWidget::tr( "Channels Out: " ) + + QString::number( lm->getDescription( lkey )->outputChannels ) ); +} + + + + +void LadspaSubPluginFeatures::listSubPluginKeys( + const Plugin::Descriptor * _desc, KeyList & _kl ) const +{ + ladspa2LMMS * lm = engine::getLADSPAManager(); + + l_sortable_plugin_t plugins; + switch( m_type ) + { + case Plugin::Instrument: + plugins = lm->getInstruments(); + break; + case Plugin::Effect: + plugins = lm->getValidEffects(); + //plugins += lm->getInvalidEffects(); + break; + case Plugin::Tool: + plugins = lm->getAnalysisTools(); + break; + case Plugin::Other: + plugins = lm->getOthers(); + break; + default: + break; + } + + for( l_sortable_plugin_t::const_iterator it = plugins.begin(); + it != plugins.end(); ++it ) + { + if( lm->getDescription( ( *it ).second )->inputChannels <= + engine::mixer()->audioDev()->channels() ) + { + _kl.push_back( ladspaKeyToSubPluginKey( _desc, ( *it ).first, ( *it ).second ) ); + } + } +} + + + + +ladspa_key_t LadspaSubPluginFeatures::subPluginKeyToLadspaKey( + const Key * _key ) +{ + QString file = _key->attributes["file"].toLower(); + return( ladspa_key_t( file.remove( QRegExp( "\\.so$" ) ). + remove( QRegExp( "\\.dll$" ) ) + +#ifdef LMMS_BUILD_WIN32 + ".dll" +#else + ".so" +#endif + , _key->attributes["plugin"] ) ); +} + diff --git a/plugins/LadspaEffect/LadspaSubPluginFeatures.h b/plugins/LadspaEffect/LadspaSubPluginFeatures.h new file mode 100644 index 000000000..05729e6cb --- /dev/null +++ b/plugins/LadspaEffect/LadspaSubPluginFeatures.h @@ -0,0 +1,50 @@ +/* + * LadspaSubPluginFeatures.h - derivation from + * Plugin::Descriptor::SubPluginFeatures for + * hosting LADSPA-plugins + * + * Copyright (c) 2006-2007 Danny McRae + * Copyright (c) 2006-2009 Tobias Doerffel + * + * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program (see COPYING); if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA. + * + */ + +#ifndef _LADSPA_SUBPLUGIN_FEATURES_H +#define _LADSPA_SUBPLUGIN_FEATURES_H + +#include "ladspa_manager.h" +#include "Plugin.h" + + +class LadspaSubPluginFeatures : public Plugin::Descriptor::SubPluginFeatures +{ +public: + LadspaSubPluginFeatures( Plugin::PluginTypes _type ); + + virtual void fillDescriptionWidget( QWidget * _parent, + const Key * _key ) const; + + virtual void listSubPluginKeys( const Plugin::Descriptor * _desc, + KeyList & _kl ) const; + + static ladspa_key_t subPluginKeyToLadspaKey( const Key * _key ); + +} ; + +#endif diff --git a/plugins/LadspaEffect/calf/AUTHORS b/plugins/LadspaEffect/calf/AUTHORS new file mode 100644 index 000000000..e28cf0bba --- /dev/null +++ b/plugins/LadspaEffect/calf/AUTHORS @@ -0,0 +1,16 @@ +Krzysztof Foltman +Hermann Meyer +Thor Harald Johansen +Thorsten Wilms +Hans Baier +Torben Hohn +Markus Schmidt +Tom Szilagyi +Damien Zammit +Christian Holschuh + +Additional bugfixes/enhancement patches: +David Täht +Dave Robillard +Alexandre Prokoudine +Carl Hetherington diff --git a/plugins/LadspaEffect/calf/CMakeLists.txt b/plugins/LadspaEffect/calf/CMakeLists.txt new file mode 100644 index 000000000..9d766736d --- /dev/null +++ b/plugins/LadspaEffect/calf/CMakeLists.txt @@ -0,0 +1,21 @@ +FILE(GLOB SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp") +ADD_LIBRARY(calf MODULE ${SOURCES}) +INCLUDE_DIRECTORIES("${CMAKE_SOURCE_DIR}/include" + "${CMAKE_BINARY_DIR}" + "${CMAKE_CURRENT_SOURCE_DIR}" + "${CMAKE_CURRENT_SOURCE_DIR}/src") +INSTALL(TARGETS calf LIBRARY DESTINATION "${PLUGIN_DIR}/ladspa") +SET_TARGET_PROPERTIES(calf PROPERTIES PREFIX "") +SET(INLINE_FLAGS "") +IF(NOT LMMS_BUILD_APPLE) +SET(INLINE_FLAGS "-finline-functions-called-once") +ENDIF(NOT LMMS_BUILD_APPLE) +SET_TARGET_PROPERTIES(calf PROPERTIES COMPILE_FLAGS "-O2 -finline-limit=80 -finline-functions ${INLINE_FLAGS}") + +IF(LMMS_BUILD_WIN32) + ADD_CUSTOM_COMMAND(TARGET calf POST_BUILD COMMAND "${STRIP}" "\"${CMAKE_CURRENT_BINARY_DIR}/calf.dll\"") +ENDIF(LMMS_BUILD_WIN32) +IF(NOT LMMS_BUILD_APPLE) + SET_TARGET_PROPERTIES(calf PROPERTIES LINK_FLAGS "${LINK_FLAGS} -shared -Wl,-no-undefined") +ENDIF(NOT LMMS_BUILD_APPLE) + diff --git a/plugins/LadspaEffect/calf/COPYING b/plugins/LadspaEffect/calf/COPYING new file mode 100644 index 000000000..223ede7de --- /dev/null +++ b/plugins/LadspaEffect/calf/COPYING @@ -0,0 +1,504 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! + + diff --git a/plugins/LadspaEffect/calf/COPYING.GPL b/plugins/LadspaEffect/calf/COPYING.GPL new file mode 100644 index 000000000..d60c31a97 --- /dev/null +++ b/plugins/LadspaEffect/calf/COPYING.GPL @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/plugins/LadspaEffect/calf/ChangeLog b/plugins/LadspaEffect/calf/ChangeLog new file mode 100644 index 000000000..8d5bc92ed --- /dev/null +++ b/plugins/LadspaEffect/calf/ChangeLog @@ -0,0 +1,220 @@ +Version 0.0.60.0 (unreleased) ++ Awesome new bitmap-based GUI by Markus Schmidt ++ New plugins by Markus Schmidt: + * several EQs (5, 8, 12 bands) + * new compressors (sidechain, multiband, deesser) + * new distortion plugins (based on code by Tom Szilagyi) + * amplitude modulator plugin (pulsator) ++ New experimental plugin - a simple wrapper for Fluidsynth ++ JACK host: save/load of sessions ++ Vintage Delay: fix another reinitialisation bug that caused, + noise bursts on enable/disable, add Width and LR/RL modes ++ many improvements to Monosynth: + * modulation matrix (not compatible with all plugin standards yet) + * PWM in both oscillators + * stretch (pseudo-hard-sync) for oscillator 1 + * detune scaling (depending on pitch) + * second envelope ++ envelopes now have an extra stage called 'Fade': when enabled, + it replaces Sustain with either ramp down to 0% or ramp up to 100% ++ more options in the build system (LASH use can now be disabled) ++ support for LADISH level 1 in calfjackhost (SIGUSR1-triggered Save) ++ uses more recent LV2 extensions (external UI, persist and others) ++ many bugfixes +- removed small plugins - if anyone's interested, please use the old code + in some new project + +Version 0.0.18.6 + ++ LADSPA: do not delete singletons after .so is unloaded ++ Rotary speaker: fix spelling of plugin class + +Version 0.0.18.5 + ++ Vintage Delay: clear buffer on startup and reactivation ++ GUI: fix dodgy icons ++ JACK host: fix a problem with numeric variant of -M option and the new + versions of JACK + +Version 0.0.18.4 + ++ Framework: gcc-4.4 compilation fix (Orcan Ogetbil) + +Version 0.0.18.3 + ++ Framework: do not use x86 assembler code on non-x86 platforms ++ Monosynth, Organ: fix serious audio quality issues ++ Monosynth: implement inertia for cutoff knob and pitch bend, make + pitch bend range adjustable ++ Organ: fix polyphony limit bug + +Version 0.0.18.2 + ++ Organ: fix voice stealing of released notes, sort out GUI, add quadratic + mode for amplitude envelope (enabled by default) - sounds more natural ++ Monosynth: fix the bug that caused JACK to kick the client out due + to precalculating waves in a completely wrong place, fix portamento + for off-stack notes ++ Presets: 3 new presets for Organ, 4 for Monosynth, 2 for Reverb + +Version 0.0.18.1 + ++ Filter: fixed subtle redraw bugs ++ Icons: fixed packaging-incompatible paths + +Version 0.0.18 + ++ Filterclavier: new plugin (a MIDI controlled filter) by Hans Baier ++ DSSI: added a basic implementation of live graphs. The graphs have a + limited resolution (128 data points), and are rather inefficient + (as the graph data need to be transmitted via OSC to a different + process), but it's better than nothing ++ GUI: Torben Hohn's drawing optimizations (critical for Intel graphics + cards, but should also reduce CPU usage on other hardware) ++ Phaser: added frequency response graph ++ JACK host: discontinue the broken option -p; allow giving preset names + after a colon sign (reverb:DiscoVerb instead of -p DiscoVerb reverb) ++ Reverb: less modulation; tone controls; 2 more room types ++ MultiChorus: add double bandpass filter on input ++ GUI: added frequency grid ++ Organ: added progress reporting on load (works with JACK host and LV2) ++ JACK host: use sensible port names (possibly breaking new LASH sessions) ++ Organ: added polyphony limit ++ Small plugins: added support for polymorphic port extension to allow + the same plugins to be used for control and audio signals ++ DSSI: renamed all the plugins from "plugin LADSPA" to "plugin DSSI" ++ LADSPA: more reasonable default value hints, fixed locale issue in LRDF ++ JACK host: added icons by Thorsten Wilms (thanks!) ++ Organ, Monosynth: better memory usage ++ LV2: attempt at supporting configure-like parameters (key mapping curve + in Organ) by the new String Port extension ++ AutoHell: header files are not installed anymore (they are of little + use anyway) ++ AutoHell: configure script prints if --enable-experimental was specified + +Version 0.0.17 + ++ Compressor: new plugin by Thor Harald Johansen ++ GUI: control improvements (new LED control, improved VU meter, XML + improvements, line graph with dots and grid lines - no legend yet), move + autolayout code from the plugin libraries to makerdf executable, ++ Most plugins: use custom GUI layouts instead of autogenerated ones ++ Most plugins: add dry amount (for aux bus type uses) ++ Flanger, Filter, MultiChorus: added live graphs displaying frequency + response and (in case of MultiChorus) LFO positions ++ LV2 GUI: added a way to display live graphs in Ardour and Zynjacku/LV2Rack + (only works when the plugin and the GUI are in the same process) ++ Framework: general improvements/cleanups to reduce the chance of the + kind of errors that were introduced in 0.0.16 and reduce dependencies ++ Monosynth: removed soft clipper on output + +Version 0.0.16.3 + ++ Fixed compilation without LV2 core installed + +Version 0.0.16.2 + ++ Fixed DSSI GUI for MultiChorus ++ Fixed LV2 GUI for MultiChorus ++ Make knob control mouse wheel handling work better in Ingen + +Version 0.0.16 + ++ New MultiChorus plugin (stereo multitap chorus with maximum of 8 voices) ++ Experimental set of plugins for modular synthesizers like Ingen by + Dave Robillard (enabled using --enable-experimental option in configure + script) ++ Minor improvements to other plugins (like Rotary Speaker) ++ More work on API documentation + +Version 0.0.15 + ++ Organ: new percussive section, using 2-operator FM synthesis for + monophonic or polyphonic percussive attack; added global transpose and + detune; rearrangement of controls between sections ++ Rotary Speaker: another attempt at making it useful (thanks FishB8) ++ JACK host: eliminate deadlock on exit ++ GUI: bipolar knobs now have a "dead zone" (magnet) in the middle point ++ GUI: dragging a knob with SHIFT held allows for fine adjustments ++ GUI: new controls - curve editor and keyboard ++ LV2: improved extension support (supports my "extended port properties" + extension now) ++ Added some API documentation + +Version 0.0.14 ++ OSC: totally new OSC wrapper, to allow for realtime-safe parsing (doesn't + matter as far as functionality goes, will probably be rewritten again + anyway) ++ Everything: memory management fixes (should improve stability and + compatibility) ++ Organ: improved memory usage ++ GUI: improved bipolar knobs, added endless knobs ++ Presets: separate 'built-in' and 'user' presets (so that built-in presets + can be upgraded without affecting user's own presets) ++ Monosynth: new presets + +Version 0.0.13 ++ Fixed several problems related to 64-bit environments and OpenSUSE (thanks +oc2pus!) ++ Added NOCONFIGURE environment variable support to autogen.sh + +Version 0.0.12 ++ RotarySpeaker: work in progress; enabled by default just in case it's + useful for anyone ++ Organ: reworked to add a complete subtractive synth section, a selection + of waveform (settable on a per-drawbar basis), individual settings of + phase, detune, panning, routing for each drawbar, as well as improved(?) + percussive section and vibrato/phaser section. It is usable (and sounds + good!), but some parameters, waveform set etc. may change in future. May + take up to 100 MB of RAM due to pre-calculated bandlimited waveforms. ++ Added half-complete implementation of LV2 (including GUI and events). ++ Lots of small "polishing" kind of fixes in many places (like proper + rounding of values in the GUIs, another set of hold/sostenuto fixes etc) + +Version 0.0.11 + ++ Fixed x86-64 bugs ++ JackHost: implemented LASH support ++ RotarySpeaker: fixed panning bug, implemented acceleration/decceleration + for "off" state + +Version 0.0.10 + ++ First attempt at DSSI GUI, does not support some features from JACK host, + but that's inevitable because of API limitations ++ Reverb: improvements (more parameters, fixed denormals) ++ Knob: added custom support for scroll wheel (instead of one inherited from + GtkRange) + +Version 0.0.9 + ++ started creating an XML-based GUI ++ LineGraph: new GTK+ control for displaying waveforms and filter response + graphs in Monosynth (and maybe others in future) ++ Monosynth: notch filter changes (made notch bandwidth proportional to Q, + just for fun, might be a bad idea) ++ Monosynth: more waveforms (these might be final?) ++ Monosynth: capped Sustain level to 0.999 so that decay time actually means + something with Sustain = 100% (not a great way to do it, but acceptable in + this case) ++ Monosynth: GUI refreshes less often (which means less CPU use) ++ Monosynth: less clicks on sounds using LP filter with very low cutoff + (using ramp of 256 samples instead of 64 samples as before) ++ Knob: new GTK+ control based on GtkRange, with my primitive bitmap set + (generated with Python and Cairo) ++ Organ: added a GUI too, very provisional ++ Organ: fixed Hold pedal (doesn't release the notes which are still depressed) ++ RotarySpeaker: new effect (split off Organ) ++ all: denormal fixes (still some denormals present in reverb) ++ Reverb: better time setting (decay time somewhat corresponds to -60dB + attenuation time) ++ JackHost: -M switch allows for automatic connection to JACK MIDI event source + (use -M system:midi_capture_2 or -M 2 for autoconnection to + system:midi_capture_2; of course, the short numeric form only work for + system:midi_capture_ ports) ++ JackHost: -p switch selects a preset automatically ++ JackHost: better size setting algorithm ++ JackHost: duplicate client name (causing JACK to rename the client) doesn't + break autoconnecting functionality ++ autotools configuration update (detect Cairo and require newer GTK+) ++ more presets diff --git a/plugins/LadspaEffect/calf/INSTALL b/plugins/LadspaEffect/calf/INSTALL new file mode 100644 index 000000000..9ac4dbad9 --- /dev/null +++ b/plugins/LadspaEffect/calf/INSTALL @@ -0,0 +1,254 @@ +Installation Instructions +************************* + +Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005 Free +Software Foundation, Inc. +Copyright (C) 2007-2008 Krzysztof Foltman + +This file is free documentation; the Free Software Foundation gives +unlimited permission to copy, distribute and modify it. + +Prerequisites +============= + +To compile and install Calf, you need: + +- POSIX-compliant operating system +- G++ version 4.0 or higher (tested with 4.1.3) +- GTK+2 headers and libraries (glib 2.10, gtk+ 2.12) +- Cairo headers and libraries +- Glade 2 headers and libraries + +Optional but recommended: +- JACK header and libraries (tested with 0.109.0) +- LADSPA header +- DSSI header +- LV2 core + +Basic Installation +================== + +These are generic installation instructions. + + The `configure' shell script attempts to guess correct values for +various system-dependent variables used during compilation. It uses +those values to create a `Makefile' in each directory of the package. +It may also create one or more `.h' files containing system-dependent +definitions. Finally, it creates a shell script `config.status' that +you can run in the future to recreate the current configuration, and a +file `config.log' containing compiler output (useful mainly for +debugging `configure'). + + It can also use an optional file (typically called `config.cache' +and enabled with `--cache-file=config.cache' or simply `-C') that saves +the results of its tests to speed up reconfiguring. (Caching is +disabled by default to prevent problems with accidental use of stale +cache files.) + + If you need to do unusual things to compile the package, please try +to figure out how `configure' could check whether to do them, and mail +diffs or instructions to the address given in the `README' so they can +be considered for the next release. If you are using the cache, and at +some point `config.cache' contains results you don't want to keep, you +may remove or edit it. + + The file `configure.ac' (or `configure.in') is used to create +`configure' by a program called `autoconf'. You only need +`configure.ac' if you want to change it or regenerate `configure' using +a newer version of `autoconf'. + +The simplest way to compile this package is: + + 1. `cd' to the directory containing the package's source code and type + `./configure' to configure the package for your system. If you're + using `csh' on an old version of System V, you might need to type + `sh ./configure' instead to prevent `csh' from trying to execute + `configure' itself. + + Running `configure' takes awhile. While running, it prints some + messages telling which features it is checking for. + + 2. Type `make' to compile the package. + + 3. Optionally, type `make check' to run any self-tests that come with + the package. + + 4. Type `make install' to install the programs and any data files and + documentation. + + 5. You can remove the program binaries and object files from the + source code directory by typing `make clean'. To also remove the + files that `configure' created (so you can compile the package for + a different kind of computer), type `make distclean'. There is + also a `make maintainer-clean' target, but that is intended mainly + for the package's developers. If you use it, you may have to get + all sorts of other programs in order to regenerate files that came + with the distribution. + +Compilers and Options +===================== + +Some systems require unusual options for compilation or linking that the +`configure' script does not know about. Run `./configure --help' for +details on some of the pertinent environment variables. + + You can give `configure' initial values for configuration parameters +by setting variables in the command line or in the environment. Here +is an example: + + ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix + + *Note Defining Variables::, for more details. + +Compiling For Multiple Architectures +==================================== + +You can compile the package for more than one kind of computer at the +same time, by placing the object files for each architecture in their +own directory. To do this, you must use a version of `make' that +supports the `VPATH' variable, such as GNU `make'. `cd' to the +directory where you want the object files and executables to go and run +the `configure' script. `configure' automatically checks for the +source code in the directory that `configure' is in and in `..'. + + If you have to use a `make' that does not support the `VPATH' +variable, you have to compile the package for one architecture at a +time in the source code directory. After you have installed the +package for one architecture, use `make distclean' before reconfiguring +for another architecture. + +Installation Names +================== + +By default, `make install' installs the package's commands under +`/usr/local/bin', include files under `/usr/local/include', etc. You +can specify an installation prefix other than `/usr/local' by giving +`configure' the option `--prefix=PREFIX'. + + You can specify separate installation prefixes for +architecture-specific files and architecture-independent files. If you +pass the option `--exec-prefix=PREFIX' to `configure', the package uses +PREFIX as the prefix for installing programs and libraries. +Documentation and other data files still use the regular prefix. + + In addition, if you use an unusual directory layout you can give +options like `--bindir=DIR' to specify different values for particular +kinds of files. Run `configure --help' for a list of the directories +you can set and what kinds of files go in them. + + If the package supports it, you can cause programs to be installed +with an extra prefix or suffix on their names by giving `configure' the +option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. + +Optional Features +================= + +Some packages pay attention to `--enable-FEATURE' options to +`configure', where FEATURE indicates an optional part of the package. +They may also pay attention to `--with-PACKAGE' options, where PACKAGE +is something like `gnu-as' or `x' (for the X Window System). The +`README' should mention any `--enable-' and `--with-' options that the +package recognizes. + + For packages that use the X Window System, `configure' can usually +find the X include and library files automatically, but if it doesn't, +you can use the `configure' options `--x-includes=DIR' and +`--x-libraries=DIR' to specify their locations. + +Specifying the System Type +========================== + +There may be some features `configure' cannot figure out automatically, +but needs to determine by the type of machine the package will run on. +Usually, assuming the package is built to be run on the _same_ +architectures, `configure' can figure that out, but if it prints a +message saying it cannot guess the machine type, give it the +`--build=TYPE' option. TYPE can either be a short name for the system +type, such as `sun4', or a canonical name which has the form: + + CPU-COMPANY-SYSTEM + +where SYSTEM can have one of these forms: + + OS KERNEL-OS + + See the file `config.sub' for the possible values of each field. If +`config.sub' isn't included in this package, then this package doesn't +need to know the machine type. + + If you are _building_ compiler tools for cross-compiling, you should +use the option `--target=TYPE' to select the type of system they will +produce code for. + + If you want to _use_ a cross compiler, that generates code for a +platform different from the build platform, you should specify the +"host" platform (i.e., that on which the generated programs will +eventually be run) with `--host=TYPE'. + +Sharing Defaults +================ + +If you want to set default values for `configure' scripts to share, you +can create a site shell script called `config.site' that gives default +values for variables like `CC', `cache_file', and `prefix'. +`configure' looks for `PREFIX/share/config.site' if it exists, then +`PREFIX/etc/config.site' if it exists. Or, you can set the +`CONFIG_SITE' environment variable to the location of the site script. +A warning: not all `configure' scripts look for a site script. + +Defining Variables +================== + +Variables not defined in a site shell script can be set in the +environment passed to `configure'. However, some packages may run +configure again during the build, and the customized values of these +variables may be lost. In order to avoid this problem, you should set +them in the `configure' command line, using `VAR=value'. For example: + + ./configure CC=/usr/local2/bin/gcc + +causes the specified `gcc' to be used as the C compiler (unless it is +overridden in the site shell script). Here is a another example: + + /bin/bash ./configure CONFIG_SHELL=/bin/bash + +Here the `CONFIG_SHELL=/bin/bash' operand causes subsequent +configuration-related scripts to be executed by `/bin/bash'. + +`configure' Invocation +====================== + +`configure' recognizes the following options to control how it operates. + +`--help' +`-h' + Print a summary of the options to `configure', and exit. + +`--version' +`-V' + Print the version of Autoconf used to generate the `configure' + script, and exit. + +`--cache-file=FILE' + Enable the cache: use and save the results of the tests in FILE, + traditionally `config.cache'. FILE defaults to `/dev/null' to + disable caching. + +`--config-cache' +`-C' + Alias for `--cache-file=config.cache'. + +`--quiet' +`--silent' +`-q' + Do not print messages saying which checks are being made. To + suppress all normal output, redirect it to `/dev/null' (any error + messages will still be shown). + +`--srcdir=DIR' + Look for the package's source code in directory DIR. Usually + `configure' can determine that directory automatically. + +`configure' also accepts some other, not widely useful, options. Run +`configure --help' for more details. + diff --git a/plugins/LadspaEffect/calf/NEWS b/plugins/LadspaEffect/calf/NEWS new file mode 100644 index 000000000..e69de29bb diff --git a/plugins/LadspaEffect/calf/README b/plugins/LadspaEffect/calf/README new file mode 100644 index 000000000..4cba953e6 --- /dev/null +++ b/plugins/LadspaEffect/calf/README @@ -0,0 +1,49 @@ +Calf is a pack of audio plugins - effects and instruments, currently in +development. The goal is to create a set of plugins using decent algorithms +and parameter settings, available in a form which is compatible with as many +open source applications as possible. + +How to use Calf plugins: + +* LADSPA plugins + +Calf is installed as calf.so library in your LADSPA directory (typically +/usr/lib/ladspa). It means that typical LADSPA host should be able to find +Calf's plugins. + +* DSSI plugins + +Calf .so module is also installed in your DSSI plugin directory, which means +your DSSI host (like jack-dssi-host or rosegarden) should find it and +include its plugins in the plugin list. + +* JACK client application + +You can also use Calf plugins as separate applications, connecting to other +applications using JACK Audio Connection Kit (version 0.103 or newer is +required). To run the client, type: + + calfjackhost monosynth ! + +(! means "connect", last "!" means "connect to output") + +Other examples: + + calfjackhost monosynth ! vintagedelay ! flanger ! + +(runs monosynth into vintagedelay and vintagedelay into flanger, then to +output) + + calfjackhost ! reverb ! + +(takes signal from system:capture_1 and _2, puts it through reverb, and then +sends to system:playback_1 and _2) + +You can also change client name or input/output port names with command-line +options (type calfjackhost --help). Use qjackctl, patchage or jack_connect +to connect the Calf JACK client to your sound card or other applications, if +"!" is inadequate for any reason (if I didn't explain it properly, or if it +doesn't provide the connectivity options needed). + +Keep in mind this project is in the early development phase. It is usable +for certain purposes, but drop me a note if you need something. diff --git a/plugins/LadspaEffect/calf/TODO b/plugins/LadspaEffect/calf/TODO new file mode 100644 index 000000000..55bcfb1ca --- /dev/null +++ b/plugins/LadspaEffect/calf/TODO @@ -0,0 +1,40 @@ +1. More effects + +- auto-wah (might be integrated into filter) +- envelope follower +- better reverb (more features, use nested allpasses, use 1-pole + 1-zero allpass instead of fractional delays) +- dynamics processing (Thor already did the compressor) +- distortion? +- windy rotary speakery stuff +- filter: more types + +2. Some instruments + +- some virtual analogue thing (something larger than Monosynth) +- FM (by reusing my MMX code, or something) + +3. DSP library + +- profiling framework +- optimized code (the one I have now only pretends to be optimized :) ) +- underflow handling + +4. Wrappers + +- LADSPA: proper rdf (get clearance from drobilla ;) ) +- better jack host (controls etc) +- BSE +- buzztard +- Linux VST +- LV2 + Message Context (for Organ) + EPP (the rest of them) + Mixing Controls + +5. Organization stuff (autotools etc) + +- correct compilation and installation of LADSPA plugins (current version is a hack!) +- switch to -O3 +- get to work on 64-bit architectures +- i18n (gettext or whatever) diff --git a/plugins/LadspaEffect/calf/src/audio_fx.cpp b/plugins/LadspaEffect/calf/src/audio_fx.cpp new file mode 100644 index 000000000..a5695be88 --- /dev/null +++ b/plugins/LadspaEffect/calf/src/audio_fx.cpp @@ -0,0 +1,829 @@ +/* Calf DSP Library + * Reusable audio effect classes - implementation. + * + * Copyright (C) 2001-2010 Krzysztof Foltman, Markus Schmidt, Thor Harald Johansen and others + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this program; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA + */ + +#include +#include +#include +#include +#include + +using namespace calf_plugins; +using namespace dsp; + +simple_phaser::simple_phaser(int _max_stages, float *x1vals, float *y1vals) +{ + max_stages = _max_stages; + x1 = x1vals; + y1 = y1vals; + + set_base_frq(1000); + set_mod_depth(1000); + set_fb(0); + state = 0; + cnt = 0; + stages = 0; + set_stages(_max_stages); +} + +void simple_phaser::set_stages(int _stages) +{ + if (_stages > stages) + { + assert(_stages <= max_stages); + if (_stages > max_stages) + _stages = max_stages; + for (int i = stages; i < _stages; i++) + { + x1[i] = x1[stages-1]; + y1[i] = y1[stages-1]; + } + } + stages = _stages; +} + +void simple_phaser::reset() +{ + cnt = 0; + state = 0; + phase.set(0); + for (int i = 0; i < max_stages; i++) + x1[i] = y1[i] = 0; + control_step(); +} + +void simple_phaser::control_step() +{ + cnt = 0; + int v = phase.get() + 0x40000000; + int sign = v >> 31; + v ^= sign; + // triangle wave, range from 0 to INT_MAX + double vf = (double)((v >> 16) * (1.0 / 16384.0) - 1); + + float freq = base_frq * pow(2.0, vf * mod_depth / 1200.0); + freq = dsp::clip(freq, 10.0, 0.49 * sample_rate); + stage1.set_ap_w(freq * (M_PI / 2.0) * odsr); + phase += dphase * 32; + for (int i = 0; i < stages; i++) + { + dsp::sanitize(x1[i]); + dsp::sanitize(y1[i]); + } + dsp::sanitize(state); +} + +void simple_phaser::process(float *buf_out, float *buf_in, int nsamples) +{ + for (int i=0; i cfloat; + freq *= 2.0 * M_PI / sr; + cfloat z = 1.0 / exp(cfloat(0.0, freq)); // z^-1 + + cfloat p = cfloat(1.0); + cfloat stg = stage1.h_z(z); + + for (int i = 0; i < stages; i++) + p = p * stg; + + p = p / (cfloat(1.0) - cfloat(fb) * p); + return std::abs(cfloat(gs_dry.get_last()) + cfloat(gs_wet.get_last()) * p); +} + +/////////////////////////////////////////////////////////////////////////////////// + +void biquad_filter_module::calculate_filter(float freq, float q, int mode, float gain) +{ + if (mode <= mode_36db_lp) { + order = mode + 1; + left[0].set_lp_rbj(freq, pow(q, 1.0 / order), srate, gain); + } else if ( mode_12db_hp <= mode && mode <= mode_36db_hp ) { + order = mode - mode_12db_hp + 1; + left[0].set_hp_rbj(freq, pow(q, 1.0 / order), srate, gain); + } else if ( mode_6db_bp <= mode && mode <= mode_18db_bp ) { + order = mode - mode_6db_bp + 1; + left[0].set_bp_rbj(freq, pow(q, 1.0 / order), srate, gain); + } else { // mode_6db_br <= mode <= mode_18db_br + order = mode - mode_6db_br + 1; + left[0].set_br_rbj(freq, order * 0.1 * q, srate, gain); + } + + right[0].copy_coeffs(left[0]); + for (int i = 1; i < order; i++) { + left[i].copy_coeffs(left[0]); + right[i].copy_coeffs(left[0]); + } +} + +void biquad_filter_module::filter_activate() +{ + for (int i=0; i < order; i++) { + left[i].reset(); + right[i].reset(); + } +} + +void biquad_filter_module::sanitize() +{ + for (int i=0; i < order; i++) { + left[i].sanitize(); + right[i].sanitize(); + } +} + +int biquad_filter_module::process_channel(uint16_t channel_no, const float *in, float *out, uint32_t numsamples, int inmask) { + dsp::biquad_d1 *filter; + switch (channel_no) { + case 0: + filter = left; + break; + + case 1: + filter = right; + break; + + default: + assert(false); + return 0; + } + + if (inmask) { + switch(order) { + case 1: + for (uint32_t i = 0; i < numsamples; i++) + out[i] = filter[0].process(in[i]); + break; + case 2: + for (uint32_t i = 0; i < numsamples; i++) + out[i] = filter[1].process(filter[0].process(in[i])); + break; + case 3: + for (uint32_t i = 0; i < numsamples; i++) + out[i] = filter[2].process(filter[1].process(filter[0].process(in[i]))); + break; + } + } else { + if (filter[order - 1].empty()) + return 0; + switch(order) { + case 1: + for (uint32_t i = 0; i < numsamples; i++) + out[i] = filter[0].process_zeroin(); + break; + case 2: + if (filter[0].empty()) + for (uint32_t i = 0; i < numsamples; i++) + out[i] = filter[1].process_zeroin(); + else + for (uint32_t i = 0; i < numsamples; i++) + out[i] = filter[1].process(filter[0].process_zeroin()); + break; + case 3: + if (filter[1].empty()) + for (uint32_t i = 0; i < numsamples; i++) + out[i] = filter[2].process_zeroin(); + else + for (uint32_t i = 0; i < numsamples; i++) + out[i] = filter[2].process(filter[1].process(filter[0].process_zeroin())); + break; + } + } + for (int i = 0; i < order; i++) + filter[i].sanitize(); + return filter[order - 1].empty() ? 0 : inmask; +} + +float biquad_filter_module::freq_gain(int subindex, float freq, float srate) const +{ + float level = 1.0; + for (int j = 0; j < order; j++) + level *= left[j].freq_gain(freq, srate); + return level; +} + +///////////////////////////////////////////////////////////////////////////////////////////////////////// + +void reverb::update_times() +{ + switch(type) + { + case 0: + tl[0] = 397 << 16, tr[0] = 383 << 16; + tl[1] = 457 << 16, tr[1] = 429 << 16; + tl[2] = 549 << 16, tr[2] = 631 << 16; + tl[3] = 649 << 16, tr[3] = 756 << 16; + tl[4] = 773 << 16, tr[4] = 803 << 16; + tl[5] = 877 << 16, tr[5] = 901 << 16; + break; + case 1: + tl[0] = 697 << 16, tr[0] = 783 << 16; + tl[1] = 957 << 16, tr[1] = 929 << 16; + tl[2] = 649 << 16, tr[2] = 531 << 16; + tl[3] = 1049 << 16, tr[3] = 1177 << 16; + tl[4] = 473 << 16, tr[4] = 501 << 16; + tl[5] = 587 << 16, tr[5] = 681 << 16; + break; + case 2: + default: + tl[0] = 697 << 16, tr[0] = 783 << 16; + tl[1] = 957 << 16, tr[1] = 929 << 16; + tl[2] = 649 << 16, tr[2] = 531 << 16; + tl[3] = 1249 << 16, tr[3] = 1377 << 16; + tl[4] = 1573 << 16, tr[4] = 1671 << 16; + tl[5] = 1877 << 16, tr[5] = 1781 << 16; + break; + case 3: + tl[0] = 1097 << 16, tr[0] = 1087 << 16; + tl[1] = 1057 << 16, tr[1] = 1031 << 16; + tl[2] = 1049 << 16, tr[2] = 1039 << 16; + tl[3] = 1083 << 16, tr[3] = 1055 << 16; + tl[4] = 1075 << 16, tr[4] = 1099 << 16; + tl[5] = 1003 << 16, tr[5] = 1073 << 16; + break; + case 4: + tl[0] = 197 << 16, tr[0] = 133 << 16; + tl[1] = 357 << 16, tr[1] = 229 << 16; + tl[2] = 549 << 16, tr[2] = 431 << 16; + tl[3] = 949 << 16, tr[3] = 1277 << 16; + tl[4] = 1173 << 16, tr[4] = 1671 << 16; + tl[5] = 1477 << 16, tr[5] = 1881 << 16; + break; + case 5: + tl[0] = 197 << 16, tr[0] = 133 << 16; + tl[1] = 257 << 16, tr[1] = 179 << 16; + tl[2] = 549 << 16, tr[2] = 431 << 16; + tl[3] = 619 << 16, tr[3] = 497 << 16; + tl[4] = 1173 << 16, tr[4] = 1371 << 16; + tl[5] = 1577 << 16, tr[5] = 1881 << 16; + break; + } + + float fDec=1000 + 2400.f * diffusion; + for (int i = 0 ; i < 6; i++) { + ldec[i]=exp(-float(tl[i] >> 16) / fDec), + rdec[i]=exp(-float(tr[i] >> 16) / fDec); + } +} + +void reverb::reset() +{ + apL1.reset();apR1.reset(); + apL2.reset();apR2.reset(); + apL3.reset();apR3.reset(); + apL4.reset();apR4.reset(); + apL5.reset();apR5.reset(); + apL6.reset();apR6.reset(); + lp_left.reset();lp_right.reset(); + old_left = 0; old_right = 0; +} + +void reverb::process(float &left, float &right) +{ + unsigned int ipart = phase.ipart(); + + // the interpolated LFO might be an overkill here + int lfo = phase.lerp_by_fract_int(sine.data[ipart], sine.data[ipart+1]) >> 2; + phase += dphase; + + left += old_right; + left = apL1.process_allpass_comb_lerp16(left, tl[0] - 45*lfo, ldec[0]); + left = apL2.process_allpass_comb_lerp16(left, tl[1] + 47*lfo, ldec[1]); + float out_left = left; + left = apL3.process_allpass_comb_lerp16(left, tl[2] + 54*lfo, ldec[2]); + left = apL4.process_allpass_comb_lerp16(left, tl[3] - 69*lfo, ldec[3]); + left = apL5.process_allpass_comb_lerp16(left, tl[4] + 69*lfo, ldec[4]); + left = apL6.process_allpass_comb_lerp16(left, tl[5] - 46*lfo, ldec[5]); + old_left = lp_left.process(left * fb); + sanitize(old_left); + + right += old_left; + right = apR1.process_allpass_comb_lerp16(right, tr[0] - 45*lfo, rdec[0]); + right = apR2.process_allpass_comb_lerp16(right, tr[1] + 47*lfo, rdec[1]); + float out_right = right; + right = apR3.process_allpass_comb_lerp16(right, tr[2] + 54*lfo, rdec[2]); + right = apR4.process_allpass_comb_lerp16(right, tr[3] - 69*lfo, rdec[3]); + right = apR5.process_allpass_comb_lerp16(right, tr[4] + 69*lfo, rdec[4]); + right = apR6.process_allpass_comb_lerp16(right, tr[5] - 46*lfo, rdec[5]); + old_right = lp_right.process(right * fb); + sanitize(old_right); + + left = out_left, right = out_right; +} + +/// Distortion Module by Tom Szilagyi +/// +/// This module provides a blendable saturation stage +/////////////////////////////////////////////////////////////////////////////////////////////// + +tap_distortion::tap_distortion() +{ + is_active = false; + srate = 0; + meter = 0.f; + prev_med = prev_out = 0.f; + drive_old = blend_old = -1.f; +} + +void tap_distortion::activate() +{ + is_active = true; + set_params(0.f, 0.f); +} +void tap_distortion::deactivate() +{ + is_active = false; +} + +void tap_distortion::set_params(float blend, float drive) +{ + // set distortion coeffs + if ((drive_old != drive) || (blend_old != blend)) { + rdrive = 12.0f / drive; + rbdr = rdrive / (10.5f - blend) * 780.0f / 33.0f; + kpa = D(2.0f * (rdrive*rdrive) - 1.0f) + 1.0f; + kpb = (2.0f - kpa) / 2.0f; + ap = ((rdrive*rdrive) - kpa + 1.0f) / 2.0f; + kc = kpa / D(2.0f * D(2.0f * (rdrive*rdrive) - 1.0f) - 2.0f * rdrive*rdrive); + + srct = (0.1f * srate) / (0.1f * srate + 1.0f); + sq = kc*kc + 1.0f; + knb = -1.0f * rbdr / D(sq); + kna = 2.0f * kc * rbdr / D(sq); + an = rbdr*rbdr / sq; + imr = 2.0f * knb + D(2.0f * kna + 4.0f * an - 1.0f); + pwrq = 2.0f / (imr + 1.0f); + + drive_old = drive; + blend_old = blend; + } +} + +void tap_distortion::set_sample_rate(uint32_t sr) +{ + srate = sr; +} + +float tap_distortion::process(float in) +{ + meter = 0.f; + float out = 0.f; + float proc = in; + float med; + if (proc >= 0.0f) { + med = (D(ap + proc * (kpa - proc)) + kpb) * pwrq; + } else { + med = (D(an - proc * (kna + proc)) + knb) * pwrq * -1.0f; + } + proc = srct * (med - prev_med + prev_out); + prev_med = M(med); + prev_out = M(proc); + out = proc; + meter = proc; + return out; +} + +float tap_distortion::get_distortion_level() +{ + return meter; +} + +//////////////////////////////////////////////////////////////////////////////// + +simple_lfo::simple_lfo() +{ + is_active = false; + phase = 0.f; +} + +void simple_lfo::activate() +{ + is_active = true; + phase = 0.f; +} + +void simple_lfo::deactivate() +{ + is_active = false; +} + +float simple_lfo::get_value() +{ + return get_value_from_phase(phase, offset) * amount; +} + +float simple_lfo::get_value_from_phase(float ph, float off) const +{ + float val = 0.f; + float phs = ph + off; + if (phs >= 1.0) + phs = fmod(phs, 1.f); + switch (mode) { + default: + case 0: + // sine + val = sin((phs * 360.f) * M_PI / 180); + break; + case 1: + // triangle + if(phs > 0.75) + val = (phs - 0.75) * 4 - 1; + else if(phs > 0.5) + val = (phs - 0.5) * 4 * -1; + else if(phs > 0.25) + val = 1 - (phs - 0.25) * 4; + else + val = phs * 4; + break; + case 2: + // square + val = (phs < 0.5) ? -1 : +1; + break; + case 3: + // saw up + val = phs * 2.f - 1; + break; + case 4: + // saw down + val = 1 - phs * 2.f; + break; + } + return val; +} + +void simple_lfo::advance(uint32_t count) +{ + //this function walks from 0.f to 1.f and starts all over again + phase += count * freq * (1.0 / srate); + if (phase >= 1.0) + phase = fmod(phase, 1.f); +} + +void simple_lfo::set_phase(float ph) +{ + //set the phase from outsinde + phase = fabs(ph); + if (phase >= 1.0) + phase = fmod(phase, 1.f); +} + +void simple_lfo::set_params(float f, int m, float o, uint32_t sr, float a) +{ + // freq: a value in Hz + // mode: sine=0, triangle=1, square=2, saw_up=3, saw_down=4 + // offset: value between 0.f and 1.f to offset the lfo in time + freq = f; + mode = m; + offset = o; + srate = sr; + amount = a; +} + +bool simple_lfo::get_graph(float *data, int points, cairo_iface *context) const +{ + if (!is_active) + return false; + for (int i = 0; i < points; i++) { + float ph = (float)i / (float)points; + data[i] = get_value_from_phase(ph, offset) * amount; + } + return true; +} + +bool simple_lfo::get_dot(float &x, float &y, int &size, cairo_iface *context) const +{ + if (!is_active) + return false; + float phs = phase + offset; + if (phs >= 1.0) + phs = fmod(phs, 1.f); + x = phase; + y = get_value_from_phase(phase, offset) * amount; + return true; +} + + +/// Lookahead Limiter by Christian Holschuh and Markus Schmidt + +lookahead_limiter::lookahead_limiter() { + is_active = false; + channels = 2; + id = 0; + buffer_size = 0; + overall_buffer_size = 0; + att = 1.f; + att_max = 1.0; + pos = 0; + delta = 0.f; + _delta = 0.f; + peak = 0.f; + over_s = 0; + over_c = 1.f; + attack = 0.005; + use_multi = false; + weight = 1.f; + _sanitize = false; + auto_release = false; + asc_active = false; + nextiter = 0; + nextlen = 0; + asc = 0.f; + asc_c = 0; + asc_pos = -1; + asc_changed = false; + asc_coeff = 1.f; +} + +void lookahead_limiter::activate() +{ + is_active = true; + pos = 0; + +} + +void lookahead_limiter::set_multi(bool set) { use_multi = set; } + +void lookahead_limiter::deactivate() +{ + is_active = false; +} + +float lookahead_limiter::get_attenuation() +{ + float a = att_max; + att_max = 1.0; + return a; +} + +void lookahead_limiter::set_sample_rate(uint32_t sr) +{ + srate = sr; + // rebuild buffer + overall_buffer_size = (int)(srate * (100.f / 1000.f) * channels) + channels; // buffer size attack rate multiplied by 2 channels + buffer = (float*) calloc(overall_buffer_size, sizeof(float)); + memset(buffer, 0, overall_buffer_size * sizeof(float)); // reset buffer to zero + pos = 0; + + nextpos = (int*) calloc(overall_buffer_size, sizeof(int)); + nextdelta = (float*) calloc(overall_buffer_size, sizeof(float)); + memset(nextpos, -1, overall_buffer_size * sizeof(int)); +} + +void lookahead_limiter::set_params(float l, float a, float r, float w, bool ar, float arc, bool d) +{ + limit = l; + attack = a / 1000.f; + release = r / 1000.f; + auto_release = ar; + asc_coeff = arc; + debug = d; + weight = w; +} + +void lookahead_limiter::reset() { + int bs = (int)(srate * attack * channels); + buffer_size = bs - bs % channels; // buffer size attack rate + _sanitize = true; + pos = 0; + nextpos[0] = -1; + nextlen = 0; + nextiter = 0; + delta = 0.f; + att = 1.f; + reset_asc(); +} + +void lookahead_limiter::reset_asc() { + asc = 0.f; + asc_c = 0; + asc_pos = pos; + asc_changed = true; +} + +void lookahead_limiter::process(float &left, float &right, float * multi_buffer) +{ + // PROTIP: harming paying customers enough to make them develop a competing + // product may be considered an example of a less than sound business practice. + + // fill lookahead buffer + if(_sanitize) { + // if we're sanitizing (zeroing) the buffer on attack time change, + // don't write the samples to the buffer + buffer[pos] = 0.f; + buffer[pos + 1] = 0.f; + } else { + buffer[pos] = left; + buffer[pos + 1] = right; + } + + // are we using multiband? get the multiband coefficient or use 1.f + float multi_coeff = (use_multi) ? multi_buffer[pos] : 1.f; + + // input peak - impact higher in left or right channel? + peak = fabs(left) > fabs(right) ? fabs(left) : fabs(right); + + // calc the real limit including weight and multi coeff + float _limit = limit * multi_coeff * weight; + + // add an eventually appearing peak to the asc fake buffer if asc active + if(auto_release and peak > _limit) { + asc += peak; + asc_c ++; + } + + if(peak > _limit or multi_coeff < 1.0) { + float _multi_coeff = 1.f; + float _peak; + + // calc the attenuation needed to reduce incoming peak + float _att = std::min(_limit / peak, 1.f); + + + // calc a release delta from this attenuation + float _rdelta = (1.0 - _att) / (srate * release); + if(auto_release and asc_c > 0) { + // check if releasing to average level of peaks is steeper than + // releasing to 1.f + float _delta = std::max((limit * weight) / (asc_coeff * asc) * (float)asc_c - _att, 0.000001f) / (srate * release); + if(_delta < _rdelta) { + asc_active = true; + _rdelta = _delta; + } + } + + // calc the delta for walking to incoming peak attenuation + float _delta = (_limit / peak - att) / buffer_size * channels; + + if(_delta < delta) { + // is the delta more important than the actual one? + // if so, we can forget about all stored deltas (because they can't + // be more important - we already checked that earlier) and use this + // delta now. and we have to create a release delta in nextpos buffer + nextpos[0] = pos; + nextpos[1] = -1; + nextdelta[0] = _rdelta; + nextlen = 1; + nextiter = 0; + delta = _delta; + } else { + // we have a peak on input its delta is less important than the + // actual delta. But what about the stored deltas we're following? + bool _found = false; + int i = 0; + for(i = nextiter; i < nextiter + nextlen; i++) { + // walk through our nextpos buffer + int j = i % buffer_size; + // calculate a delta for the next stored peak + // are we using multiband? then get the multi_coeff for the + // stored position + _multi_coeff = (use_multi) ? multi_buffer[nextpos[j]] : 1.f; + // is the left or the right channel on this position more + // important? + _peak = fabs(buffer[nextpos[j]]) > fabs(buffer[nextpos[j] + 1]) ? fabs(buffer[nextpos[j]]) : fabs(buffer[nextpos[j] + 1]); + // calc a delta to use to reach our incoming peak from the + // stored position + _delta = (_limit / peak - (limit * _multi_coeff * weight) / _peak) / (((buffer_size - nextpos[j] + pos) % buffer_size) / channels); + if(_delta < nextdelta[j]) { + // if the buffered delta is more important than the delta + // used to reach our peak from the stored position, store + // the new delta at that position and stop the loop + nextdelta[j] = _delta; + _found = true; + break; + } + } + if(_found) { + // there was something more important in the next-buffer. + // throw away any position and delta after the important + // position and add a new release delta + nextlen = i - nextiter + 1; + nextpos[(nextiter + nextlen) % buffer_size] = pos; + nextdelta[(nextiter + nextlen) % buffer_size] = _rdelta; + // set the next following position value to -1 (cleaning up the + // nextpos buffer) + nextpos[(nextiter + nextlen + 1) % buffer_size] = -1; + // and raise the length of our nextpos buffer for keeping the + // release value + nextlen ++; + } + } + } + + // switch left and right pointers in buffer to output position + left = buffer[(pos + channels) % buffer_size]; + right = buffer[(pos + channels + 1) % buffer_size]; + + // if a peak leaves the buffer, remove it from asc fake buffer + // but only if we're not sanitizing asc buffer + float _peak = fabs(left) > fabs(right) ? fabs(left) : fabs(right); + float _multi_coeff = (use_multi) ? multi_buffer[(pos + channels) % buffer_size] : 1.f; + if(pos == asc_pos and !asc_changed) { + asc_pos = -1; + } + if(auto_release and asc_pos == -1 and _peak > (limit * weight * _multi_coeff)) { + asc -= _peak; + asc_c --; + } + + // change the attenuation level + att += delta; + + // ...and calculate outpout from it + left *= att; + right *= att; + + if((pos + channels) % buffer_size == nextpos[nextiter]) { + // if we reach a buffered position, change the actual delta and erase + // this (the first) element from nextpos and nextdelta buffer + delta = nextdelta[nextiter]; + nextlen = (nextlen - 1) % buffer_size; + nextpos[nextiter] = -1; + nextiter = (nextiter + 1) % buffer_size; + } + + if (att > 1.0f) { + // release time seems over, reset attenuation and delta + att = 1.0f; + delta = 0.0f; + } + + // main limiting party is over, let's cleanup the puke + + if(_sanitize) { + // we're sanitizing? then send 0.f as output + left = 0.f; + right = 0.f; + } + + // security personnel pawing your values + if(att <= 0.f) { + // if this happens we're doomed!! + // may happen on manually lowering attack + att = 0.0000000000001; + delta = (1.0f - att) / (srate * release); + } + + if(att != 1.f and 1 - att < 0.0000000000001) { + // denormalize att + att = 1.f; + } + + if(delta != 0.f and fabs(delta) < 0.00000000000001) { + // denormalize delta + delta = 0.f; + } + + // post treatment (denormal, limit) + denormal(&left); + denormal(&right); + + // store max attenuation for meter output + att_max = (att < att_max) ? att : att_max; + + // step forward in our sample ring buffer + pos = (pos + channels) % buffer_size; + + // sanitizing is always done after a full cycle through the lookahead buffer + if(_sanitize and pos == 0) _sanitize = false; + + asc_changed = false; +} + +bool lookahead_limiter::get_asc() { + if(!asc_active) return false; + asc_active = false; + return true; +} diff --git a/plugins/LadspaEffect/calf/src/calf/audio_fx.h b/plugins/LadspaEffect/calf/src/calf/audio_fx.h new file mode 100644 index 000000000..f71880289 --- /dev/null +++ b/plugins/LadspaEffect/calf/src/calf/audio_fx.h @@ -0,0 +1,625 @@ +/* Calf DSP Library + * Reusable audio effect classes. + * + * Copyright (C) 2001-2010 Krzysztof Foltman, Markus Schmidt, Thor Harald Johansen and others + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this program; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA + */ +#ifndef CALF_AUDIOFX_H +#define CALF_AUDIOFX_H + +#include "biquad.h" +#include "delay.h" +#include "fixed_point.h" +#include "inertia.h" +#include "onepole.h" +#include + +namespace calf_plugins { + struct cairo_iface; +}; + +namespace dsp { +#if 0 +}; to keep editor happy +#endif + +/** + * Audio effect base class. Not really useful until it gets more developed. + */ +class audio_effect +{ +public: + virtual void setup(int sample_rate)=0; + virtual ~audio_effect() {} +}; + +class modulation_effect: public audio_effect +{ +protected: + int sample_rate; + float rate, wet, dry, odsr; + gain_smoothing gs_wet, gs_dry; +public: + fixed_point phase, dphase; + float get_rate() const { + return rate; + } + void set_rate(float rate) { + this->rate = rate; + dphase = rate/sample_rate*4096; + } + float get_wet() const { + return wet; + } + void set_wet(float wet) { + this->wet = wet; + gs_wet.set_inertia(wet); + } + float get_dry() const { + return dry; + } + void set_dry(float dry) { + this->dry = dry; + gs_dry.set_inertia(dry); + } + void reset_phase(float req_phase) + { + phase = req_phase * 4096.0; + } + void inc_phase(float req_phase) + { + phase += fixed_point(req_phase * 4096.0); + } + void setup(int sample_rate) + { + this->sample_rate = sample_rate; + this->odsr = 1.0 / sample_rate; + phase = 0; + set_rate(get_rate()); + } +}; + +/** + * A monophonic phaser. If you want stereo, combine two :) + * Also, gave up on using template args for signal type. + */ +class simple_phaser: public modulation_effect +{ +protected: + float base_frq, mod_depth, fb; + float state; + int cnt, stages, max_stages; + dsp::onepole stage1; + float *x1, *y1; +public: + simple_phaser(int _max_stages, float *x1vals, float *y1vals); + + float get_base_frq() const { + return base_frq; + } + void set_base_frq(float _base_frq) { + base_frq = _base_frq; + } + int get_stages() const { + return stages; + } + void set_stages(int _stages); + + float get_mod_depth() const { + return mod_depth; + } + void set_mod_depth(float _mod_depth) { + mod_depth = _mod_depth; + } + + float get_fb() const { + return fb; + } + void set_fb(float fb) { + this->fb = fb; + } + + virtual void setup(int sample_rate) { + modulation_effect::setup(sample_rate); + reset(); + } + void reset(); + void control_step(); + void process(float *buf_out, float *buf_in, int nsamples); + float freq_gain(float freq, float sr) const; +}; + +/** + * Base class for chorus and flanger. Wouldn't be needed if it wasn't + * for odd behaviour of GCC when deriving templates from template + * base classes (not seeing fields from base classes!). + */ +class chorus_base: public modulation_effect +{ +protected: + int min_delay_samples, mod_depth_samples; + float min_delay, mod_depth; + sine_table sine; +public: + float get_min_delay() const { + return min_delay; + } + void set_min_delay(float min_delay) { + this->min_delay = min_delay; + this->min_delay_samples = (int)(min_delay * 65536.0 * sample_rate); + } + float get_mod_depth() const { + return mod_depth; + } + void set_mod_depth(float mod_depth) { + this->mod_depth = mod_depth; + // 128 because it's then multiplied by (hopefully) a value of 32768..-32767 + this->mod_depth_samples = (int)(mod_depth * 32.0 * sample_rate); + } +}; + +/** + * Single-tap chorus without feedback. + * Perhaps MaxDelay should be a bit longer! + */ +template +class simple_chorus: public chorus_base +{ +protected: + simple_delay delay; +public: + simple_chorus() { + rate = 0.63f; + dry = 0.5f; + wet = 0.5f; + min_delay = 0.005f; + mod_depth = 0.0025f; + setup(44100); + } + void reset() { + delay.reset(); + } + virtual void setup(int sample_rate) { + modulation_effect::setup(sample_rate); + delay.reset(); + set_min_delay(get_min_delay()); + set_mod_depth(get_mod_depth()); + } + template + void process(OutIter buf_out, InIter buf_in, int nsamples) { + int mds = min_delay_samples + mod_depth_samples * 1024 + 2*65536; + int mdepth = mod_depth_samples; + for (int i=0; i(sine.data[ipart], sine.data[ipart+1]); + int v = mds + (mdepth * lfo >> 6); + // if (!(i & 7)) printf("%d\n", v); + int ifv = v >> 16; + delay.put(in); + T fd; // signal from delay's output + delay.get_interp(fd, ifv, (v & 0xFFFF)*(1.0/65536.0)); + T sdry = in * gs_dry.get(); + T swet = fd * gs_wet.get(); + *buf_out++ = sdry + swet; + } + } +}; + +/** + * Single-tap flanger (chorus plus feedback). + */ +template +class simple_flanger: public chorus_base +{ +protected: + simple_delay delay; + float fb; + int last_delay_pos, last_actual_delay_pos; + int ramp_pos, ramp_delay_pos; +public: + simple_flanger() + : fb(0) {} + void reset() { + delay.reset(); + last_delay_pos = last_actual_delay_pos = ramp_delay_pos = 0; + ramp_pos = 1024; + } + virtual void setup(int sample_rate) { + this->sample_rate = sample_rate; + this->odsr = 1.0 / sample_rate; + delay.reset(); + phase = 0; + set_rate(get_rate()); + set_min_delay(get_min_delay()); + } + float get_fb() const { + return fb; + } + void set_fb(float fb) { + this->fb = fb; + } + template + void process(OutIter buf_out, InIter buf_in, int nsamples) { + if (!nsamples) + return; + int mds = this->min_delay_samples + this->mod_depth_samples * 1024 + 2 * 65536; + int mdepth = this->mod_depth_samples; + int delay_pos; + unsigned int ipart = this->phase.ipart(); + int lfo = phase.lerp_by_fract_int(this->sine.data[ipart], this->sine.data[ipart+1]); + delay_pos = mds + (mdepth * lfo >> 6); + + if (delay_pos != last_delay_pos || ramp_pos < 1024) + { + if (delay_pos != last_delay_pos) { + // we need to ramp from what the delay tap length actually was, + // not from old (ramp_delay_pos) or desired (delay_pos) tap length + ramp_delay_pos = last_actual_delay_pos; + ramp_pos = 0; + } + + int64_t dp = 0; + for (int i=0; i> 10; + ramp_pos++; + if (ramp_pos > 1024) ramp_pos = 1024; + this->delay.get_interp(fd, dp >> 16, (dp & 0xFFFF)*(1.0/65536.0)); + sanitize(fd); + T sdry = in * this->dry; + T swet = fd * this->wet; + *buf_out++ = sdry + swet; + this->delay.put(in+fb*fd); + + this->phase += this->dphase; + ipart = this->phase.ipart(); + lfo = phase.lerp_by_fract_int(this->sine.data[ipart], this->sine.data[ipart+1]); + delay_pos = mds + (mdepth * lfo >> 6); + } + last_actual_delay_pos = dp; + } + else { + for (int i=0; idelay.get_interp(fd, delay_pos >> 16, (delay_pos & 0xFFFF)*(1.0/65536.0)); + sanitize(fd); + T sdry = in * this->gs_dry.get(); + T swet = fd * this->gs_wet.get(); + *buf_out++ = sdry + swet; + this->delay.put(in+fb*fd); + + this->phase += this->dphase; + ipart = this->phase.ipart(); + lfo = phase.lerp_by_fract_int(this->sine.data[ipart], this->sine.data[ipart+1]); + delay_pos = mds + (mdepth * lfo >> 6); + } + last_actual_delay_pos = delay_pos; + } + last_delay_pos = delay_pos; + } + float freq_gain(float freq, float sr) const + { + typedef std::complex cfloat; + freq *= 2.0 * M_PI / sr; + cfloat z = 1.0 / exp(cfloat(0.0, freq)); // z^-1 + + float ldp = last_delay_pos / 65536.0; + float fldp = floor(ldp); + cfloat zn = std::pow(z, fldp); // z^-N + cfloat zn1 = zn * z; // z^-(N+1) + // simulate a lerped comb filter - H(z) = 1 / (1 + fb * (lerp(z^-N, z^-(N+1), fracpos))), N = int(pos), fracpos = pos - int(pos) + cfloat delayed = zn + (zn1 - zn) * cfloat(ldp - fldp); + cfloat h = cfloat(delayed) / (cfloat(1.0) - cfloat(fb) * delayed); + // mix with dry signal + float v = std::abs(cfloat(gs_dry.get_last()) + cfloat(gs_wet.get_last()) * h); + return v; + } +}; + +/** + * A classic allpass loop reverb with modulated allpass filter. + * Just started implementing it, so there is no control over many + * parameters. + */ +class reverb: public audio_effect +{ + simple_delay<2048, float> apL1, apL2, apL3, apL4, apL5, apL6; + simple_delay<2048, float> apR1, apR2, apR3, apR4, apR5, apR6; + fixed_point phase, dphase; + sine_table sine; + onepole lp_left, lp_right; + float old_left, old_right; + int type; + float time, fb, cutoff, diffusion; + int tl[6], tr[6]; + float ldec[6], rdec[6]; + + int sr; +public: + reverb() + { + phase = 0.0; + time = 1.0; + cutoff = 9000; + type = 2; + diffusion = 1.f; + setup(44100); + } + virtual void setup(int sample_rate) { + sr = sample_rate; + set_time(time); + set_cutoff(cutoff); + phase = 0.0; + dphase = 0.5*128/sr; + update_times(); + } + void update_times(); + float get_time() const { + return time; + } + void set_time(float time) { + this->time = time; + // fb = pow(1.0f/4096.0f, (float)(1700/(time*sr))); + fb = 1.0 - 0.3 / (time * sr / 44100.0); + } + float get_type() const { + return type; + } + void set_type(int type) { + this->type = type; + update_times(); + } + float get_diffusion() const { + return diffusion; + } + void set_diffusion(float diffusion) { + this->diffusion = diffusion; + update_times(); + } + void set_type_and_diffusion(int type, float diffusion) { + this->type = type; + this->diffusion = diffusion; + update_times(); + } + float get_fb() const + { + return this->fb; + } + void set_fb(float fb) + { + this->fb = fb; + } + float get_cutoff() const { + return cutoff; + } + void set_cutoff(float cutoff) { + this->cutoff = cutoff; + lp_left.set_lp(cutoff,sr); + lp_right.set_lp(cutoff,sr); + } + void reset(); + void process(float &left, float &right); + void extra_sanitize() + { + lp_left.sanitize(); + lp_right.sanitize(); + } +}; + +class filter_module_iface +{ +public: + virtual void calculate_filter(float freq, float q, int mode, float gain = 1.0) = 0; + virtual void filter_activate() = 0; + virtual void sanitize() = 0; + virtual int process_channel(uint16_t channel_no, const float *in, float *out, uint32_t numsamples, int inmask) = 0; + virtual float freq_gain(int subindex, float freq, float srate) const = 0; + + virtual ~filter_module_iface() {} +}; + + +class biquad_filter_module: public filter_module_iface +{ +private: + dsp::biquad_d1 left[3], right[3]; + int order; + +public: + uint32_t srate; + + enum { mode_12db_lp = 0, mode_24db_lp = 1, mode_36db_lp = 2, + mode_12db_hp = 3, mode_24db_hp = 4, mode_36db_hp = 5, + mode_6db_bp = 6, mode_12db_bp = 7, mode_18db_bp = 8, + mode_6db_br = 9, mode_12db_br = 10, mode_18db_br = 11, + mode_count + }; + +public: + biquad_filter_module() + : order(0) {} + /// Calculate filter coefficients based on parameters - cutoff/center frequency, q, filter type, output gain + void calculate_filter(float freq, float q, int mode, float gain = 1.0); + /// Reset filter state + void filter_activate(); + /// Remove denormals + void sanitize(); + /// Process a single channel (float buffer) of data + int process_channel(uint16_t channel_no, const float *in, float *out, uint32_t numsamples, int inmask); + /// Determine gain (|H(z)|) for a given frequency + float freq_gain(int subindex, float freq, float srate) const; +}; + +class two_band_eq +{ +private: + dsp::onepole lowcut, highcut; + float low_gain, high_gain; + +public: + void reset() + { + lowcut.reset(); + highcut.reset(); + } + + inline float process(float v) + { + v = dsp::lerp(lowcut.process_hp(v), v, low_gain); + v = dsp::lerp(highcut.process_lp(v), v, high_gain); + return v; + } + + inline void copy_coeffs(const two_band_eq &src) + { + lowcut.copy_coeffs(src.lowcut); + highcut.copy_coeffs(src.highcut); + low_gain = src.low_gain; + high_gain = src.high_gain; + } + + void sanitize() + { + lowcut.sanitize(); + highcut.sanitize(); + } + + void set(float _low_freq, float _low_gain, float _high_freq, float _high_gain, float sr) + { + lowcut.set_hp(_low_freq, sr); + highcut.set_lp(_high_freq, sr); + low_gain = _low_gain; + high_gain = _high_gain; + } +}; + +/// Tom Szilagyi's distortion code, used with permission +/// KF: I'm not 100% sure how this is supposed to work, but it does. +/// I'm planning to rewrite it using more modular approach when I have more time. +class tap_distortion { +private: + float blend_old, drive_old; + float meter; + float rdrive, rbdr, kpa, kpb, kna, knb, ap, an, imr, kc, srct, sq, pwrq; + float prev_med, prev_out; +public: + uint32_t srate; + bool is_active; + tap_distortion(); + void activate(); + void deactivate(); + void set_params(float blend, float drive); + void set_sample_rate(uint32_t sr); + float process(float in); + float get_distortion_level(); + static inline float M(float x) + { + return (fabs(x) > 0.000000001f) ? x : 0.0f; + } + + static inline float D(float x) + { + x = fabs(x); + return (x > 0.000000001f) ? sqrtf(x) : 0.0f; + } +}; + +/// LFO module by Markus +/// This module provides simple LFO's (sine=0, triangle=1, square=2, saw_up=3, saw_down=4) +/// get_value() returns a value between -1 and 1 +class simple_lfo { +private: + float phase, freq, offset, amount; + int mode; + uint32_t srate; + bool is_active; +public: + simple_lfo(); + void set_params(float f, int m, float o, uint32_t sr, float amount = 1.f); + float get_value(); + void advance(uint32_t count); + void set_phase(float ph); + void activate(); + void deactivate(); + float get_value_from_phase(float ph, float off) const; + bool get_graph(float *data, int points, calf_plugins::cairo_iface *context) const; + bool get_dot(float &x, float &y, int &size, calf_plugins::cairo_iface *context) const; +}; + + +/// Lookahead Limiter by Markus Schmidt and Christian Holschuh +class lookahead_limiter { +private: +public: + float limit, attack, release, weight; + uint32_t srate; + float att; // a coefficient the output is multiplied with + float att_max; // a memory for the highest attenuation - used for display + int pos; // where we are actually in our sample buffer + int buffer_size; + int overall_buffer_size; + bool is_active; + bool debug; + bool auto_release; + bool asc_active; + float *buffer; + int channels; + float delta; + float _delta; + float peak; + unsigned int over_s; + float over_c; + bool use_multi; + unsigned int id; + bool _sanitize; + int nextiter; + int nextlen; + int * nextpos; + float * nextdelta; + int asc_c; + float asc; + int asc_pos; + bool asc_changed; + float asc_coeff; + static inline void denormal(volatile float *f) { + *f += 1e-18; + *f -= 1e-18; + } + void reset(); + void reset_asc(); + bool get_asc(); + lookahead_limiter(); + void set_multi(bool set); + void process(float &left, float &right, float *multi_buffer); + void set_sample_rate(uint32_t sr); + void set_params(float l, float a, float r, float weight = 1.f, bool ar = false, float arc = 1.f, bool d = false); + float get_attenuation(); + void activate(); + void deactivate(); +}; + +#if 0 +{ to keep editor happy +#endif +} + +#endif diff --git a/plugins/LadspaEffect/calf/src/calf/biquad.h b/plugins/LadspaEffect/calf/src/calf/biquad.h new file mode 100644 index 000000000..a6d5a959c --- /dev/null +++ b/plugins/LadspaEffect/calf/src/calf/biquad.h @@ -0,0 +1,653 @@ +/* Calf DSP Library + * Biquad filters + * Copyright (C) 2001-2007 Krzysztof Foltman + * + * Most of code in this file is based on freely + * available other work of other people (filter equations). + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this program; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA + */ +#ifndef __CALF_BIQUAD_H +#define __CALF_BIQUAD_H + +#include +#include "primitives.h" + +namespace dsp { + +/** + * Coefficients for two-pole two-zero filter, for floating point values, + * plus a bunch of functions to set them to typical values. + * + * Coefficient calculation is based on famous Robert Bristow-Johnson's equations, + * except where it's not. + * The coefficient calculation is NOT mine, the only exception is the lossy + * optimization in Zoelzer and rbj HP filter code. + * + * See http://www.musicdsp.org/files/Audio-EQ-Cookbook.txt for reference. + * + * don't use this for integers because it won't work + */ +template +class biquad_coeffs +{ +public: + // filter coefficients + Coeff a0, a1, a2, b1, b2; + typedef std::complex cfloat; + + biquad_coeffs() + { + set_null(); + } + + inline void set_null() + { + a0 = 1.0; + b1 = b2 = a1 = a2 = 0.f; + } + + /** Lowpass filter based on Robert Bristow-Johnson's equations + * Perhaps every synth code that doesn't use SVF uses these + * equations :) + * @param fc resonant frequency + * @param q resonance (gain at fc) + * @param sr sample rate + * @param gain amplification (gain at 0Hz) + */ + inline void set_lp_rbj(float fc, float q, float sr, float gain = 1.0) + { + float omega=(float)(2*M_PI*fc/sr); + float sn=sin(omega); + float cs=cos(omega); + float alpha=(float)(sn/(2*q)); + float inv=(float)(1.0/(1.0+alpha)); + + a2 = a0 = (float)(gain*inv*(1 - cs)*0.5f); + a1 = a0 + a0; + b1 = (float)(-2*cs*inv); + b2 = (float)((1 - alpha)*inv); + } + + // different lowpass filter, based on Zoelzer's equations, modified by + // me (kfoltman) to use polynomials to approximate tangent function + // not very accurate, but perhaps good enough for synth work :) + // odsr is "one divided by samplerate" + // from how it looks, it perhaps uses bilinear transform - but who knows :) + inline void set_lp_zoelzer(float fc, float q, float odsr, float gain=1.0) + { + Coeff omega=(Coeff)(M_PI*fc*odsr); + Coeff omega2=omega*omega; + Coeff K=omega*(1+omega2*omega2*Coeff(1.0/1.45)); + Coeff KK=K*K; + Coeff QK=q*(KK+1.f); + Coeff iQK=1.0f/(QK+K); + Coeff inv=q*iQK; + b2 = (Coeff)(iQK*(QK-K)); + b1 = (Coeff)(2.f*(KK-1.f)*inv); + a2 = a0 = (Coeff)(inv*gain*KK); + a1 = a0 + a0; + } + + /** Highpass filter based on Robert Bristow-Johnson's equations + * @param fc resonant frequency + * @param q resonance (gain at fc) + * @param sr sample rate + * @param gain amplification (gain at sr/2) + */ + inline void set_hp_rbj(float fc, float q, float esr, float gain=1.0) + { + Coeff omega=(float)(2*M_PI*fc/esr); + Coeff sn=sin(omega); + Coeff cs=cos(omega); + Coeff alpha=(float)(sn/(2*q)); + + float inv=(float)(1.0/(1.0+alpha)); + + a0 = (Coeff)(gain*inv*(1 + cs)/2); + a1 = -2.f * a0; + a2 = a0; + b1 = (Coeff)(-2*cs*inv); + b2 = (Coeff)((1 - alpha)*inv); + } + + // this replaces sin/cos with polynomial approximation + inline void set_hp_rbj_optimized(float fc, float q, float esr, float gain=1.0) + { + Coeff omega=(float)(2*M_PI*fc/esr); + Coeff sn=omega+omega*omega*omega*(1.0/6.0)+omega*omega*omega*omega*omega*(1.0/120); + Coeff cs=1-omega*omega*(1.0/2.0)+omega*omega*omega*omega*(1.0/24); + Coeff alpha=(float)(sn/(2*q)); + + float inv=(float)(1.0/(1.0+alpha)); + + a0 = (Coeff)(gain*inv*(1 + cs)*(1.0/2.0)); + a1 = -2.f * a0; + a2 = a0; + b1 = (Coeff)(-2*cs*inv); + b2 = (Coeff)((1 - alpha)*inv); + } + + /** Bandpass filter based on Robert Bristow-Johnson's equations (normalized to 1.0 at center frequency) + * @param fc center frequency (gain at fc = 1.0) + * @param q =~ fc/bandwidth (not quite, but close) - 1/Q = 2*sinh(ln(2)/2*BW*w0/sin(w0)) + * @param sr sample rate + * @param gain amplification (gain at sr/2) + */ + inline void set_bp_rbj(double fc, double q, double esr, double gain=1.0) + { + float omega=(float)(2*M_PI*fc/esr); + float sn=sin(omega); + float cs=cos(omega); + float alpha=(float)(sn/(2*q)); + + float inv=(float)(1.0/(1.0+alpha)); + + a0 = (float)(gain*inv*alpha); + a1 = 0.f; + a2 = (float)(-gain*inv*alpha); + b1 = (float)(-2*cs*inv); + b2 = (float)((1 - alpha)*inv); + } + + // rbj's bandreject + inline void set_br_rbj(double fc, double q, double esr, double gain=1.0) + { + float omega=(float)(2*M_PI*fc/esr); + float sn=sin(omega); + float cs=cos(omega); + float alpha=(float)(sn/(2*q)); + + float inv=(float)(1.0/(1.0+alpha)); + + a0 = (Coeff)(gain*inv); + a1 = (Coeff)(-gain*inv*2*cs); + a2 = (Coeff)(gain*inv); + b1 = (Coeff)(-2*cs*inv); + b2 = (Coeff)((1 - alpha)*inv); + } + // this is mine (and, I guess, it sucks/doesn't work) + void set_allpass(float freq, float pole_r, float sr) + { + float a=prewarp(freq, sr); + float q=pole_r; + set_bilinear(a*a+q*q, -2.0f*a, 1, a*a+q*q, 2.0f*a, 1); + } + /// prewarping for bilinear transform, maps given digital frequency to analog counterpart for analog filter design + static inline float prewarp(float freq, float sr) + { + if (freq>sr*0.49) freq=(float)(sr*0.49); + return (float)(tan(M_PI*freq/sr)); + } + /// convert analog angular frequency value to digital + static inline float unwarp(float omega, float sr) + { + float T = 1.0 / sr; + return (2 / T) * atan(omega * T / 2); + } + /// convert analog filter time constant to digital counterpart + static inline float unwarpf(float t, float sr) + { + // this is most likely broken and works by pure accident! + float omega = 1.0 / t; + omega = unwarp(omega, sr); + // I really don't know why does it have to be M_PI and not 2 * M_PI! + float f = M_PI / omega; + return f / sr; + } + /// set digital filter parameters based on given analog filter parameters + void set_bilinear(float aa0, float aa1, float aa2, float ab0, float ab1, float ab2) + { + float q=(float)(1.0/(ab0+ab1+ab2)); + a0 = (aa0+aa1+aa2)*q; + a1 = 2*(aa0-aa2)*q; + a2 = (aa0-aa1+aa2)*q; + b1 = 2*(ab0-ab2)*q; + b2 = (ab0-ab1+ab2)*q; + } + + /// RBJ peaking EQ + /// @param freq peak frequency + /// @param q q (correlated to freq/bandwidth, @see set_bp_rbj) + /// @param peak peak gain (1.0 means no peak, >1.0 means a peak, less than 1.0 is a dip) + inline void set_peakeq_rbj(float freq, float q, float peak, float sr) + { + float A = sqrt(peak); + float w0 = freq * 2 * M_PI * (1.0 / sr); + float alpha = sin(w0) / (2 * q); + float ib0 = 1.0 / (1 + alpha/A); + a1 = b1 = -2*cos(w0) * ib0; + a0 = ib0 * (1 + alpha*A); + a2 = ib0 * (1 - alpha*A); + b2 = ib0 * (1 - alpha/A); + } + + /// RBJ low shelf EQ - amplitication of 'peak' at 0 Hz and of 1.0 (0dB) at sr/2 Hz + /// @param freq corner frequency (gain at freq is sqrt(peak)) + /// @param q q (relates bandwidth and peak frequency), the higher q, the louder the resonant peak (situated below fc) is + /// @param peak shelf gain (1.0 means no peak, >1.0 means a peak, less than 1.0 is a dip) + inline void set_lowshelf_rbj(float freq, float q, float peak, float sr) + { + float A = sqrt(peak); + float w0 = freq * 2 * M_PI * (1.0 / sr); + float alpha = sin(w0) / (2 * q); + float cw0 = cos(w0); + float tmp = 2 * sqrt(A) * alpha; + float b0 = 0.f, ib0 = 0.f; + + a0 = A*( (A+1) - (A-1)*cw0 + tmp); + a1 = 2*A*( (A-1) - (A+1)*cw0); + a2 = A*( (A+1) - (A-1)*cw0 - tmp); + b0 = (A+1) + (A-1)*cw0 + tmp; + b1 = -2*( (A-1) + (A+1)*cw0); + b2 = (A+1) + (A-1)*cw0 - tmp; + + ib0 = 1.0 / b0; + b1 *= ib0; + b2 *= ib0; + a0 *= ib0; + a1 *= ib0; + a2 *= ib0; + } + + /// RBJ high shelf EQ - amplitication of 0dB at 0 Hz and of peak at sr/2 Hz + /// @param freq corner frequency (gain at freq is sqrt(peak)) + /// @param q q (relates bandwidth and peak frequency), the higher q, the louder the resonant peak (situated above fc) is + /// @param peak shelf gain (1.0 means no peak, >1.0 means a peak, less than 1.0 is a dip) + inline void set_highshelf_rbj(float freq, float q, float peak, float sr) + { + float A = sqrt(peak); + float w0 = freq * 2 * M_PI * (1.0 / sr); + float alpha = sin(w0) / (2 * q); + float cw0 = cos(w0); + float tmp = 2 * sqrt(A) * alpha; + float b0 = 0.f, ib0 = 0.f; + + a0 = A*( (A+1) + (A-1)*cw0 + tmp); + a1 = -2*A*( (A-1) + (A+1)*cw0); + a2 = A*( (A+1) + (A-1)*cw0 - tmp); + b0 = (A+1) - (A-1)*cw0 + tmp; + b1 = 2*( (A-1) - (A+1)*cw0); + b2 = (A+1) - (A-1)*cw0 - tmp; + + ib0 = 1.0 / b0; + b1 *= ib0; + b2 *= ib0; + a0 *= ib0; + a1 *= ib0; + a2 *= ib0; + } + + /// copy coefficients from another biquad + template + inline void copy_coeffs(const biquad_coeffs &src) + { + a0 = src.a0; + a1 = src.a1; + a2 = src.a2; + b1 = src.b1; + b2 = src.b2; + } + + /// Return the filter's gain at frequency freq + /// @param freq Frequency to look up + /// @param sr Filter sample rate (used to convert frequency to angular frequency) + float freq_gain(float freq, float sr) const + { + typedef std::complex cfloat; + freq *= 2.0 * M_PI / sr; + cfloat z = 1.0 / exp(cfloat(0.0, freq)); + + return std::abs(h_z(z)); + } + + /// Return H(z) the filter's gain at frequency freq + /// @param z Z variable (e^jw) + cfloat h_z(const cfloat &z) const + { + + return (cfloat(a0) + double(a1) * z + double(a2) * z*z) / (cfloat(1.0) + double(b1) * z + double(b2) * z*z); + } + +}; + +/** + * Two-pole two-zero filter, for floating point values. + * Uses "traditional" Direct I form (separate FIR and IIR halves). + * don't use this for integers because it won't work + */ +template +struct biquad_d1: public biquad_coeffs +{ + using biquad_coeffs::a0; + using biquad_coeffs::a1; + using biquad_coeffs::a2; + using biquad_coeffs::b1; + using biquad_coeffs::b2; + /// input[n-1] + T x1; + /// input[n-2] + T x2; + /// output[n-1] + T y1; + /// output[n-2] + T y2; + /// Constructor (initializes state to all zeros) + biquad_d1() + { + reset(); + } + /// direct I form with four state variables + inline T process(T in) + { + T out = in * a0 + x1 * a1 + x2 * a2 - y1 * b1 - y2 * b2; + x2 = x1; + y2 = y1; + x1 = in; + y1 = out; + return out; + } + + /// direct I form with zero input + inline T process_zeroin() + { + T out = - y1 * b1 - y2 * b2; + y2 = y1; + y1 = out; + return out; + } + + /// simplified version for lowpass case with two zeros at -1 + inline T process_lp(T in) + { + T out = a0*(in + x1 + x1 + x2) - y1 * b1 - y2 * b2; + x2 = x1; + y2 = y1; + x1 = in; + y1 = out; + return out; + } + /// Sanitize (set to 0 if potentially denormal) filter state + inline void sanitize() + { + dsp::sanitize(x1); + dsp::sanitize(y1); + dsp::sanitize(x2); + dsp::sanitize(y2); + } + /// Reset state variables + inline void reset() + { + dsp::zero(x1); + dsp::zero(y1); + dsp::zero(x2); + dsp::zero(y2); + } + inline bool empty() const { + return (y1 == 0.f && y2 == 0.f); + } + +}; + +/** + * Two-pole two-zero filter, for floating point values. + * Uses slightly faster Direct II form (combined FIR and IIR halves). + * However, when used with wildly varying coefficients, it may + * make more zipper noise than Direct I form, so it's better to + * use it when filter coefficients are not changed mid-stream. + */ +template +struct biquad_d2: public biquad_coeffs +{ + using biquad_coeffs::a0; + using biquad_coeffs::a1; + using biquad_coeffs::a2; + using biquad_coeffs::b1; + using biquad_coeffs::b2; + /// state[n-1] + float w1; + /// state[n-2] + float w2; + /// Constructor (initializes state to all zeros) + biquad_d2() + { + reset(); + } + /// direct II form with two state variables + inline T process(T in) + { + dsp::sanitize_denormal(in); + dsp::sanitize(in); + dsp::sanitize(w1); + dsp::sanitize(w2); + + T tmp = in - w1 * b1 - w2 * b2; + T out = tmp * a0 + w1 * a1 + w2 * a2; + w2 = w1; + w1 = tmp; + return out; + } + + // direct II form with two state variables, lowpass version + // interesting fact: this is actually slower than the general version! + inline T process_lp(T in) + { + T tmp = in - w1 * b1 - w2 * b2; + T out = (tmp + w2 + w1* 2) * a0; + w2 = w1; + w1 = tmp; + return out; + } + + /// Is the filter state completely silent? (i.e. set to 0 by sanitize function) + inline bool empty() const { + return (w1 == 0.f && w2 == 0.f); + } + + + /// Sanitize (set to 0 if potentially denormal) filter state + inline void sanitize() + { + dsp::sanitize(w1); + dsp::sanitize(w2); + } + + /// Reset state variables + inline void reset() + { + dsp::zero(w1); + dsp::zero(w2); + } +}; + +/** + * Two-pole two-zero filter, for floating point values. + * Uses "traditional" Direct I form (separate FIR and IIR halves). + * don't use this for integers because it won't work + */ +template +struct biquad_d1_lerp: public biquad_coeffs +{ + using biquad_coeffs::a0; + using biquad_coeffs::a1; + using biquad_coeffs::a2; + using biquad_coeffs::b1; + using biquad_coeffs::b2; + Coeff a0cur, a1cur, a2cur, b1cur, b2cur; + Coeff a0delta, a1delta, a2delta, b1delta, b2delta; + /// input[n-1] + T x1; + /// input[n-2] + T x2; + /// output[n-1] + T y1; + /// output[n-2] + T y2; + /// Constructor (initializes state to all zeros) + biquad_d1_lerp() + { + reset(); + } + #define _DO_COEFF(coeff) coeff##delta = (coeff - coeff##cur) * (frac) + void big_step(Coeff frac) + { + _DO_COEFF(a0); + _DO_COEFF(a1); + _DO_COEFF(a2); + _DO_COEFF(b1); + _DO_COEFF(b2); + } + #undef _DO_COEFF + /// direct I form with four state variables + inline T process(T in) + { + T out = in * a0cur + x1 * a1cur + x2 * a2cur - y1 * b1cur - y2 * b2cur; + x2 = x1; + y2 = y1; + x1 = in; + y1 = out; + a0cur += a0delta; + a1cur += a1delta; + a2cur += a2delta; + b1cur += b1delta; + b2cur += b2delta; + return out; + } + + /// direct I form with zero input + inline T process_zeroin() + { + T out = - y1 * b1 - y2 * b2; + y2 = y1; + y1 = out; + b1cur += b1delta; + b2cur += b2delta; + return out; + } + + /// simplified version for lowpass case with two zeros at -1 + inline T process_lp(T in) + { + T out = a0*(in + x1 + x1 + x2) - y1 * b1 - y2 * b2; + x2 = x1; + y2 = y1; + x1 = in; + y1 = out; + return out; + } + /// Sanitize (set to 0 if potentially denormal) filter state + inline void sanitize() + { + dsp::sanitize(x1); + dsp::sanitize(y1); + dsp::sanitize(x2); + dsp::sanitize(y2); + dsp::sanitize(a0cur); + dsp::sanitize(a1cur); + dsp::sanitize(a2cur); + dsp::sanitize(b1cur); + dsp::sanitize(b2cur); + } + /// Reset state variables + inline void reset() + { + dsp::zero(x1); + dsp::zero(y1); + dsp::zero(x2); + dsp::zero(y2); + dsp::zero(a0cur); + dsp::zero(a1cur); + dsp::zero(a2cur); + dsp::zero(b1cur); + dsp::zero(b2cur); + } + inline bool empty() { + return (y1 == 0.f && y2 == 0.f); + } + +}; + +/// Compose two filters in series +template +class filter_compose { +public: + typedef std::complex cfloat; + F1 f1; + F2 f2; +public: + float process(float value) { + return f2.process(f1.process(value)); + } + + inline cfloat h_z(const cfloat &z) const { + return f1.h_z(z) * f2.h_z(z); + } + + /// Return the filter's gain at frequency freq + /// @param freq Frequency to look up + /// @param sr Filter sample rate (used to convert frequency to angular frequency) + float freq_gain(float freq, float sr) const + { + typedef std::complex cfloat; + freq *= 2.0 * M_PI / sr; + cfloat z = 1.0 / exp(cfloat(0.0, freq)); + + return std::abs(h_z(z)); + } + + void sanitize() { + f1.sanitize(); + f2.sanitize(); + } +}; + +/// Compose two filters in parallel +template +class filter_sum { +public: + typedef std::complex cfloat; + F1 f1; + F2 f2; +public: + float process(float value) { + return f2.process(value) + f1.process(value); + } + + inline cfloat h_z(const cfloat &z) const { + return f1.h_z(z) + f2.h_z(z); + } + + /// Return the filter's gain at frequency freq + /// @param freq Frequency to look up + /// @param sr Filter sample rate (used to convert frequency to angular frequency) + float freq_gain(float freq, float sr) const + { + typedef std::complex cfloat; + freq *= 2.0 * M_PI / sr; + cfloat z = 1.0 / exp(cfloat(0.0, freq)); + + return std::abs(h_z(z)); + } + + void sanitize() { + f1.sanitize(); + f2.sanitize(); + } +}; + +}; + +#endif diff --git a/plugins/LadspaEffect/calf/src/calf/buffer.h b/plugins/LadspaEffect/calf/src/calf/buffer.h new file mode 100644 index 000000000..373fbd1cd --- /dev/null +++ b/plugins/LadspaEffect/calf/src/calf/buffer.h @@ -0,0 +1,229 @@ +/* Calf DSP Library + * Buffer abstractions. + * + * Copyright (C) 2007 Krzysztof Foltman + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this program; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA + */ +#ifndef __BUFFER_H +#define __BUFFER_H + +namespace dsp { + +/// decrease by N if >= N (useful for circular buffers) +template inline int wrap_around(int a) { + return (a >= N) ? a - N : a; +} + +// provide fast specializations for powers of 2 +template<> inline int wrap_around<2>(int a) { return a & 1; } +template<> inline int wrap_around<4>(int a) { return a & 3; } +template<> inline int wrap_around<8>(int a) { return a & 7; } +template<> inline int wrap_around<16>(int a) { return a & 15; } +template<> inline int wrap_around<32>(int a) { return a & 31; } +template<> inline int wrap_around<64>(int a) { return a & 63; } +template<> inline int wrap_around<128>(int a) { return a & 127; } +template<> inline int wrap_around<256>(int a) { return a & 255; } +template<> inline int wrap_around<512>(int a) { return a & 511; } +template<> inline int wrap_around<1024>(int a) { return a & 1023; } +template<> inline int wrap_around<2048>(int a) { return a & 2047; } +template<> inline int wrap_around<4096>(int a) { return a & 4095; } +template<> inline int wrap_around<8192>(int a) { return a & 8191; } +template<> inline int wrap_around<16384>(int a) { return a & 16383; } +template<> inline int wrap_around<32768>(int a) { return a & 32767; } +template<> inline int wrap_around<65536>(int a) { return a & 65535; } + +template +void fill(Buf &buf, T value) { + T* data = buf.data(); + int size = buf.size(); + for (int i=0; i +void fill(T *data, int size, T value) { + for (int i=0; i +void copy(T *dest, U *src, int size, T scale = 1, T add = 0) { + for (int i=0; i +struct sample_traits { + enum { + channels = 1, + bps = sizeof(T)*8 + }; +}; + +template +struct sample_traits > { + enum { + channels = 2, + bps = sizeof(T)*8 + }; +}; + +template +class fixed_size_buffer { +public: + typedef T data_type; + enum { buffer_size = N }; + inline int size() { return N; } +}; + +template +class mem_fixed_size_buffer: public fixed_size_buffer { + T *buf; +public: + mem_fixed_size_buffer(T ubuf[N]) { buf = ubuf; } + void set_data(T buf[N]) { this->buf = buf; } + inline T* data() { return buf; } + inline const T* data() const { return buf; } + inline T& operator[](int pos) { return buf[pos]; } + inline const T& operator[](int pos) const { return buf[pos]; } +}; + +template +class auto_buffer: public fixed_size_buffer { + T buf[N]; +public: + T* data() const { return buf; } + inline T& operator[](int pos) { return buf[pos]; } + inline const T& operator[](int pos) const { return buf[pos]; } +}; + +template +class dynamic_buffer { + T *buf; + int buf_size; + bool owns; +public: + dynamic_buffer() { owns = false; } + dynamic_buffer(T *_buf, int _buf_size, bool _own) + : buf(_buf), buf_size(_buf_size), owns(_own) { + } + dynamic_buffer(int _size) { + buf = new T[_size]; + buf_size = _size; + owns = true; + } + inline T* data() { return buf; } + inline const T* data() const { return buf; } + inline int size() { return buf_size; } + void resize(int new_size, bool fill_with_zeros = false) { + T *new_buf = new T[new_size]; + memcpy(new_buf, buf, std::min(buf_size, new_size)); + if (fill_with_zeros && buf_size < new_size) + dsp::zero(new_buf + buf_size, new_size - buf_size); + if (owns) + delete []buf; + buf = new_buf; + buf_size = new_size; + owns = true; + } + inline T& operator[](int pos) { return buf[pos]; } + inline const T& operator[](int pos) const { return buf[pos]; } + ~dynamic_buffer() { + if (owns) + delete []buf; + } +}; + +template +void copy_buf(T &dest_buf, const U &src_buf, T scale = 1, T add = 0) { + typedef typename T::data_type data_type; + data_type *dest = dest_buf.data(); + const data_type *src = src_buf.data(); + int size = src.size(); + for (int i=0; i +struct buffer_traits { +}; + +/// this class template defines some basic position operations for fixed_size_buffers +template +struct buffer_traits > { + int inc_wrap(int pos) const { + return wrap_around(pos+1); + } + + int pos_diff(int pos1, int pos2) const { + int pos = pos1 - pos2; + if (pos < 0) pos += T::size; + return pos; + } +}; + +/// this is useless for now (and untested too) +template +class circular_buffer: public B { + typedef typename B::data_type data_type; + typedef class buffer_traits traits; + B buffer; + int rpos, wpos; + circular_buffer() { + clear(); + } + void clear() { + rpos = 0; + wpos = 0; + } + inline void put(data_type data) { + buffer[wpos] = data; + wpos = traits::inc_wrap(wpos); + } + inline bool empty() { + return rpos == wpos; + } + inline bool full() { + return rpos == traits::inc_wrap(wpos); + } + inline const data_type& get() { + int oldrpos = rpos; + rpos = traits::inc_wrap(rpos); + return buffer[oldrpos]; + } + inline int get_rbytes() { + return traits::pos_diff(wpos, rpos); + } + inline int get_wbytes() { + if (full()) return 0; + return traits::pos_diff(rpos, wpos); + } +}; + +/// this is useless for now +template +class mono_auto_buffer: public auto_buffer { +}; + +/// this is useless for now +template +class stereo_auto_buffer: public auto_buffer > { +}; + +}; + +#endif diff --git a/plugins/LadspaEffect/calf/src/calf/delay.h b/plugins/LadspaEffect/calf/src/calf/delay.h new file mode 100644 index 000000000..7ff6e7bb8 --- /dev/null +++ b/plugins/LadspaEffect/calf/src/calf/delay.h @@ -0,0 +1,185 @@ +/* Calf DSP Library + * Reusable audio effect classes. + * + * Copyright (C) 2001-2007 Krzysztof Foltman + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this program; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA + */ +#ifndef __CALF_DELAY_H +#define __CALF_DELAY_H + +#include "primitives.h" +#include "buffer.h" +#include "onepole.h" + +namespace dsp { + +/** + * Delay primitive. Can be used for most delay stuff, including + * variable (modulated) delays like chorus/flanger. Note that + * for modulated delay effects use of GetInterp is preferred, + * because it handles fractional positions and uses linear + * interpolation, which sounds better most of the time. + * + * @param N maximum length + * @param C number of channels read/written for each sample (1 mono, 2 stereo etc) + */ +template +struct simple_delay { + auto_buffer data; + int pos; + + simple_delay() { + reset(); + } + void reset() { + pos = 0; + for (int i=0; i(pos+1); + } + + /** + * Read one C-channel sample into odata[0], odata[1] etc into buffer. + * Don't use for modulated delays (chorus/flanger etc) unless you + * want them to crackle and generally sound ugly + * @param odata pointer to write into + * @param delay delay relative to current writing pos + */ + template + inline void get(U &odata, int delay) { + assert(delay >= 0 && delay < N); + int ppos = wrap_around(pos + N - delay); + odata = data[ppos]; + } + + /** + * Read and write during the same function call + */ + inline T process(T idata, int delay) + { + assert(delay >= 0 && delay < N); + int ppos = wrap_around(pos + N - delay); + T odata = data[ppos]; + data[pos] = idata; + pos = wrap_around(pos+1); + return odata; + } + + /** Read one C-channel sample at fractional position. + * This version can be used for modulated delays, because + * it uses linear interpolation. + * @param odata value to write into + * @param delay delay relative to current writing pos + * @param udelay fractional delay (0..1) + */ + template + inline void get_interp(U &odata, int delay, float udelay) { +// assert(delay >= 0 && delay <= N-1); + int ppos = wrap_around(pos + N - delay); + int pppos = wrap_around(ppos + N - 1); + odata = lerp(data[ppos], data[pppos], udelay); + } + + /** Read one C-channel sample at fractional position. + * This version can be used for modulated delays, because + * it uses linear interpolation. + * @param odata value to write into + * @param delay delay relative to current writing pos + * @param udelay fractional delay (0..1) + */ + inline T get_interp_1616(unsigned int delay) { + float udelay = (float)((delay & 0xFFFF) * (1.0 / 65536.0)); + delay = delay >> 16; +// assert(delay >= 0 && delay < N-1); + int ppos = wrap_around(pos + N - delay); + int pppos = wrap_around(ppos + N - 1); + return lerp(data[ppos], data[pppos], udelay); + } + + /** + * Comb filter. Feedback delay line with given delay and feedback values + * @param in input signal + * @param delay delay length (must be >16, dsp::fract16(delay)); + cur = in + fb*old; + sanitize(cur); + put(cur); + return old; + } + + /** + * Comb allpass filter. The comb filter with additional direct path, which is supposed to cancel the coloration. + * @param in input signal + * @param delay delay length (must be >16, dsp::fract16(delay)); + cur = in + fb*old; + sanitize(cur); + put(cur); + return old - fb * cur; + } +}; + +}; + +#endif diff --git a/plugins/LadspaEffect/calf/src/calf/envelope.h b/plugins/LadspaEffect/calf/src/calf/envelope.h new file mode 100644 index 000000000..302e4c06c --- /dev/null +++ b/plugins/LadspaEffect/calf/src/calf/envelope.h @@ -0,0 +1,282 @@ +/* Calf DSP Library + * ADSR envelope class (and other envelopes in future) + * + * Copyright (C) 2007-2008 Krzysztof Foltman + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this program; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA + */ +#ifndef __CALF_ENVELOPE_H +#define __CALF_ENVELOPE_H + +#include "primitives.h" + +namespace dsp { + +/// Rate-based ADSFR envelope class. Note that if release rate is slower than decay +/// rate, this envelope won't use release rate until output level falls below sustain level +/// it's different to what certain hardware synth companies did, but it prevents the very +/// un-musical (IMHO) behaviour known from (for example) SoundFont 2. +class adsr +{ +public: + enum env_state { + STOP, ///< envelope is stopped + ATTACK, ///< attack - rise from 0 to 1 + DECAY, ///< decay - fall from 1 to sustain level + SUSTAIN, ///< sustain - remain at sustain level (unless sustain is 0 - then it gets stopped); with fade != 0 it goes towards 0% (positive fade) or 100% (negative fade) + RELEASE, ///< release - fall from sustain (or pre-sustain) level to 0 + LOCKDECAY, ///< locked decay + }; + + /// Current envelope stage + env_state state; + /// @note these are *rates*, not times + double attack, decay, sustain, release, fade; + /// Requested release time (not the rate!) in frames, used for recalculating the rate if sustain is changed + double release_time; + /// Current envelope (output) level + double value; + /// Release rate used for the current note (calculated from this note's sustain level, and not the current sustain level, + /// which may have changed after note has been released) + double thisrelease; + /// Sustain level used for the current note (used to calculate release rate if sustain changed during release stage + /// of the current note) + double thiss; + /// Value from the time before advance() was called last time + double old_value; + + adsr() + { + attack = decay = sustain = release = thisrelease = thiss = 0.f; + reset(); + } + /// Stop (reset) the envelope + inline void reset() + { + old_value = value = 0.0; + thiss = 0.0; + state = STOP; + } + /// Set the envelope parameters (updates rate member variables based on values passed) + /// @param a attack time + /// @param d decay time + /// @param s sustain level + /// @param r release time + /// @param er Envelope (update) rate + /// @param f fade time (if applicable) + inline void set(float a, float d, float s, float r, float er, float f = 0.f) + { + attack = 1.0 / (a * er); + decay = (1 - s) / (d * er); + sustain = s; + release_time = r * er; + release = s / release_time; + if (fabs(f) > small_value()) + fade = 1.0 / (f * er); + else + fade = 0.0; + // in release: + // lock thiss setting (start of release for current note) and unlock thisrelease setting (current note's release rate) + if (state != RELEASE) + thiss = s; + else + thisrelease = thiss / release_time; + } + /// @retval true if envelope is in released state (forced decay, release or stopped) + inline bool released() const + { + return state == LOCKDECAY || state == RELEASE || state == STOP; + } + /// @retval true if envelope is stopped (has not been started or has run till its end) + inline bool stopped() const + { + return state == STOP; + } + /// Start the envelope + inline void note_on() + { + state = ATTACK; + thiss = sustain; + } + /// Release the envelope + inline void note_off() + { + // Do nothing if envelope is already stopped + if (state == STOP) + return; + // XXXKF what if envelope is already released? (doesn't happen in any current synth, but who knows?) + // Raise sustain value if it has been changed... I'm not sure if it's needed + thiss = std::max(sustain, value); + // Calculate release rate from sustain level + thisrelease = thiss / release_time; + // we're in attack or decay, and if decay is faster than release + if (value > sustain && decay > thisrelease) { + // use standard release time later (because we'll be switching at sustain point) + thisrelease = release; + state = LOCKDECAY; + } else { + // in attack/decay, but use fixed release time + // in case value fell below sustain, assume it didn't (for the purpose of calculating release rate only) + state = RELEASE; + } + } + /// Calculate next envelope value + inline void advance() + { + old_value = value; + // XXXKF This may use a state array instead of a switch some day (at least for phases other than attack and possibly sustain) + switch(state) + { + case ATTACK: + value += attack; + if (value >= 1.0) { + value = 1.0; + state = DECAY; + } + break; + case DECAY: + value -= decay; + if (value < sustain) + { + value = sustain; + state = SUSTAIN; + } + break; + case LOCKDECAY: + value -= decay; + if (value < sustain) + { + if (value < 0.f) + value = 0.f; + state = RELEASE; + thisrelease = release; + } + break; + case SUSTAIN: + if (fade != 0.f) + { + value -= fade; + if (value > 1.f) + value = 1.f; + } + else + value = sustain; + if (value < 0.00001f) { + value = 0; + state = STOP; + } + break; + case RELEASE: + value -= thisrelease; + if (value <= 0.f) { + value = 0.f; + state = STOP; + } + break; + case STOP: + value = 0.f; + break; + } + } + /// Return a value between old_value (previous step) and value (current step) + /// @param pos between 0 and 1 + inline double interpolate(double pos) + { + return old_value + (value - old_value) * pos; + } + inline float get_amp_value() + { + if (state == RELEASE && sustain > 0 && value < sustain) + { + return value * value * value / (sustain * sustain); + } + return value; + } +}; + +/// Simple linear fade out for note tails +struct fadeout +{ + float value; + float step, step_orig; + bool done, undoing; + + fadeout(int steps = 256) + { + step_orig = (float)(1.f / steps); + value = 1.f; + reset(); + } + + /// Prepare fade out + void reset() + { + value = 1.f; + step = -step_orig; + done = false; + undoing = false; + } + + /// Fade back in with double speed (to prevent click on note restart) + void undo() + { + step = step_orig; + done = false; + undoing = true; + } + + /// Reset if fully faded out; fade back in if in the middle of fading out + void reset_soft() + { + if (value <= 0.f || value >= 1.f) + reset(); + else + undo(); + } + + void process(float *buffer, int len) + { + int i = 0; + if (!done) + { + for (; value > 0 && value <= 1.0 && i < len; i++) + { + buffer[i] *= value; + value += step; + } + if (value <= 0 || value > 1) + done = true; + } + if (done && value <= 0) + { + while (i < len) + buffer[i++] = 0.f; + } + if (done && undoing && value >= 1) + { + undoing = false; + done = false; + // prepare for the next fade-out + value = 1.f; + } + } +}; + +}; + +#endif + + diff --git a/plugins/LadspaEffect/calf/src/calf/fft.h b/plugins/LadspaEffect/calf/src/calf/fft.h new file mode 100644 index 000000000..5eef9fe8e --- /dev/null +++ b/plugins/LadspaEffect/calf/src/calf/fft.h @@ -0,0 +1,113 @@ +/* Calf DSP Library + * FFT class + * + * Copyright (C) 2007 Krzysztof Foltman + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this program; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02111-1307, USA. + */ + +#ifndef __CALF_FFT_H +#define __CALF_FFT_H + +#include + +namespace dsp { + +/// FFT routine copied from my old OneSignal library, modified to +/// match Calf's style. It's not fast at all, just a straightforward +/// implementation. +template +class fft +{ + typedef typename std::complex complex; + int scramble[1<= 4); + for (int i=0; i>(j+1)); + scramble[i]=v; + } + int N90 = N >> 2; + T divN = 2 * M_PI / N; + // use symmetry + for (int i=0; i>bits; }; +inline int32_t shr(int32_t v, int bits = 1) { return v>>bits; }; +inline uint64_t shr(uint64_t v, int bits = 1) { return v>>bits; }; +inline int64_t shr(int64_t v, int bits = 1) { return v>>bits; }; +inline float shr(float v, int bits = 1) { return v*(1.0/(1< +inline T shr(T v, int bits = 1) { + v.set(v >> bits); + return v; +} + +template class fixed_point { + T value; + enum { IntBits = (sizeof(T)/8) - FracBits }; + +public: + /// default constructor, does not initialize the value, just like - say - float doesn't + inline fixed_point() { + } + + /// copy constructor from any other fixed_point value + template inline fixed_point(const fixed_point &v) { + if (FracBits == FracBits2) value = v.get(); + else if (FracBits > FracBits2) value = v.get() << abs(FracBits - FracBits2); + else value = v.get() >> abs(FracBits - FracBits2); + } + + /* this would be way too confusing, it wouldn't be obvious if it expects a whole fixed point or an integer part + explicit inline fixed_point(T v) { + this->value = v; + } + */ + explicit inline fixed_point(double v) { + value = (T)(v*one()); + } + + /// Makes an instance from a representation value (ie. same type of value as is used for internal storage and get/set) + static inline fixed_point from_base(const T &v) + { + fixed_point result; + result.value = v; + return result; + } + + inline static T one() { + return (T)(1) << FracBits; + } + + inline void set(T value) { + this->value = value; + } + + inline T get() const { + return value; + } + + inline operator double() const { + return value * (1.0/one()); + } + + inline fixed_point &operator=(double v) { + value = (T)(v*one()); + return *this; + } + + template static inline T rebase(const fixed_point &v) { + if (FracBits == FracBits2) + return v.get(); + if (FracBits > FracBits2) + return v.get() << abs(FracBits - FracBits2); + return v.get() >> abs(FracBits2 - FracBits); + } + + template inline fixed_point &operator=(const fixed_point &v) { + value = rebase(v); + return *this; + } + + template inline fixed_point &operator+=(const fixed_point &v) { + value += rebase(v); + return *this; + } + + template inline fixed_point &operator-=(const fixed_point &v) { + value -= rebase(v); + return *this; + } + + template inline fixed_point operator+(const fixed_point &v) const { + fixed_point fpv; + fpv.set(value + rebase(v)); + return fpv; + } + + template inline fixed_point operator-(const fixed_point &v) const { + fixed_point fpv; + fpv.set(value - rebase(v)); + return fpv; + } + + /// multiply two fixed point values, using long long int to store the temporary multiplication result + template inline fixed_point operator*(const fixed_point &v) const { + fixed_point tmp; + tmp.set(((int64_t)value) * v.get() >> FracBits2); + return tmp; + } + + /// multiply two fixed point values, using BigType (usually 64-bit int) to store the temporary multiplication result + template inline fixed_point& operator*=(const fixed_point &v) { + value = (T)(((BigType)value) * v.get() >> FracBits2); + return *this; + } + + inline fixed_point operator+(int v) const { + fixed_point tmp; + tmp.set(value + (v << FracBits)); + return tmp; + } + + inline fixed_point operator-(int v) const { + fixed_point tmp; + tmp.set(value - (v << FracBits)); + return tmp; + } + + inline fixed_point operator*(int v) const { + fixed_point tmp; + tmp.value = value*v; + return tmp; + } + + inline fixed_point& operator+=(int v) { + value += (v << FracBits); + return *this; + } + + inline fixed_point& operator-=(int v) { + value -= (v << FracBits); + return *this; + } + + inline fixed_point& operator*=(int v) { + value *= v; + return *this; + } + + /// return integer part + inline T ipart() const { + return value >> FracBits; + } + + /// return integer part as unsigned int + inline unsigned int uipart() const { + return ((unsigned)value) >> FracBits; + } + + /// return integer part as unsigned int + inline unsigned int ui64part() const { + return ((uint64_t)value) >> FracBits; + } + + /// return fractional part as 0..(2^FracBits-1) + inline T fpart() const { + return value & ((1 << FracBits)-1); + } + + /// return fractional part as 0..(2^Bits-1) + template + inline T fpart() const { + int fbits = value & ((1 << FracBits)-1); + if (Bits == FracBits) return fbits; + int shift = abs(Bits-FracBits); + return (Bits < FracBits) ? (fbits >> shift) : (fbits << shift); + } + + /// return fractional part as 0..1 + inline double fpart_as_double() const { + return (value & ((1 << FracBits)-1)) * (1.0 / (1 << FracBits)); + } + + /// use fractional part (either whole or given number of most significant bits) for interpolating between two values + /// note that it uses integer arithmetic only, and isn't suitable for floating point or fixed point U! + /// @param UseBits can be used when there's a risk of exceeding range of U because max(fpart)*max(v1 or v2) > range of U + template + inline U lerp_by_fract_int(U v1, U v2) const { + int fp = fpart(); + assert ( fp >=0 && fp <= (1< + inline U lerp_table_lookup_int(U data[(1<(data[pos], data[pos+1]); + } + + /// Untested... I've started it to get a sin/cos readout for rotaryorgan, but decided to use table-less solution instead + /// Do not assume it works, because it most probably doesn't + template + inline U lerp_table_lookup_int_shift(U data[(1<(data[pos], data[pos+1]); + } + + template + inline U lerp_table_lookup_float(U data[(1< + inline U lerp_table_lookup_float_mask(U data[(1< + inline U lerp_ptr_lookup_int(U *data) const { + unsigned int pos = ui64part(); + return lerp_by_fract_int(data[pos], data[pos+1]); + } + + template + inline U lerp_ptr_lookup_float(U *data) const { + unsigned int pos = ui64part(); + return data[pos] + (data[pos+1]-data[pos]) * fpart_as_double(); + } +}; + +template +inline fixed_point operator*(int v, fixed_point v2) { + v2 *= v; + return v2; +} + +/// wave position (unsigned 64-bit int including 24-bit fractional part) +typedef fixed_point wpos; + +}; + +#endif diff --git a/plugins/LadspaEffect/calf/src/calf/giface.h b/plugins/LadspaEffect/calf/src/calf/giface.h new file mode 100644 index 000000000..b4c6e4186 --- /dev/null +++ b/plugins/LadspaEffect/calf/src/calf/giface.h @@ -0,0 +1,722 @@ +/* Calf DSP Library + * Common plugin interface definitions (shared between LADSPA/LV2/DSSI/standalone). + * + * Copyright (C) 2007-2010 Krzysztof Foltman + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this program; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02111-1307, USA. + */ +#ifndef CALF_GIFACE_H +#define CALF_GIFACE_H + +#include +#include "primitives.h" +#include +#include +#include +#include + +namespace osctl { + struct osc_client; +} + +namespace calf_plugins { + +enum { + MAX_SAMPLE_RUN = 256 +}; + +/// Values ORed together for flags field in parameter_properties +enum parameter_flags +{ + PF_TYPEMASK = 0x000F, ///< bit mask for type + PF_FLOAT = 0x0000, ///< any float value + PF_INT = 0x0001, ///< integer value (still represented as float) + PF_BOOL = 0x0002, ///< bool value (usually >=0.5f is treated as TRUE, which is inconsistent with LV2 etc. which treats anything >0 as TRUE) + PF_ENUM = 0x0003, ///< enum value (min, min+1, ..., max, only guaranteed to work when min = 0) + PF_ENUM_MULTI = 0x0004, ///< SET / multiple-choice + + PF_SCALEMASK = 0xF0, ///< bit mask for scale + PF_SCALE_DEFAULT = 0x00, ///< no scale given + PF_SCALE_LINEAR = 0x10, ///< linear scale + PF_SCALE_LOG = 0x20, ///< log scale + PF_SCALE_GAIN = 0x30, ///< gain = -96dB..0 or -inf dB + PF_SCALE_PERC = 0x40, ///< percent + PF_SCALE_QUAD = 0x50, ///< quadratic scale (decent for some gain/amplitude values) + PF_SCALE_LOG_INF = 0x60, ///< log scale + +inf (FAKE_INFINITY) + + PF_CTLMASK = 0x0F00, ///< bit mask for control type + PF_CTL_DEFAULT = 0x0000, ///< try to figure out automatically + PF_CTL_KNOB = 0x0100, ///< knob + PF_CTL_FADER = 0x0200, ///< fader (slider) + PF_CTL_TOGGLE = 0x0300, ///< toggle button + PF_CTL_COMBO = 0x0400, ///< combo box + PF_CTL_RADIO = 0x0500, ///< radio button + PF_CTL_BUTTON = 0x0600, ///< push button + PF_CTL_METER = 0x0700, ///< volume meter + PF_CTL_LED = 0x0800, ///< light emitting diode + PF_CTL_LABEL = 0x0900, ///< label + + PF_CTLOPTIONS = 0x00F000, ///< bit mask for control (widget) options + PF_CTLO_HORIZ = 0x001000, ///< horizontal version of the control (unused) + PF_CTLO_VERT = 0x002000, ///< vertical version of the control (unused) + PF_CTLO_LABEL = 0x004000, ///< add a text display to the control (meters only) + PF_CTLO_REVERSE = 0x008000, ///< use VU_MONOCHROME_REVERSE mode (meters only) + + PF_PROP_NOBOUNDS = 0x010000, ///< no epp:hasStrictBounds + PF_PROP_EXPENSIVE = 0x020000, ///< epp:expensive, may trigger expensive calculation + PF_PROP_OUTPUT_GAIN=0x050000, ///< epp:outputGain + skip epp:hasStrictBounds + PF_PROP_OUTPUT = 0x080000, ///< output port + PF_PROP_OPTIONAL = 0x100000, ///< connection optional + PF_PROP_GRAPH = 0x200000, ///< add graph + + PF_UNITMASK = 0xFF000000, ///< bit mask for units \todo reduce to use only 5 bits + PF_UNIT_DB = 0x01000000, ///< decibels + PF_UNIT_COEF = 0x02000000, ///< multiply-by factor + PF_UNIT_HZ = 0x03000000, ///< Hertz + PF_UNIT_SEC = 0x04000000, ///< second + PF_UNIT_MSEC = 0x05000000, ///< millisecond + PF_UNIT_CENTS = 0x06000000, ///< cents (1/100 of a semitone, 1/1200 of an octave) + PF_UNIT_SEMITONES = 0x07000000,///< semitones + PF_UNIT_BPM = 0x08000000, ///< beats per minute + PF_UNIT_DEG = 0x09000000, ///< degrees + PF_UNIT_NOTE = 0x0A000000, ///< MIDI note number + PF_UNIT_RPM = 0x0B000000, ///< revolutions per minute +}; + +/// A fake infinity value (because real infinity may break some hosts) +#define FAKE_INFINITY (65536.0 * 65536.0) +/// Check for infinity (with appropriate-ish tolerance) +#define IS_FAKE_INFINITY(value) (fabs(value-FAKE_INFINITY) < 1.0) + +/// Information record about plugin's menu command +struct plugin_command_info +{ + const char *label; ///< short command name / label + const char *name; ///< human-readable command name + const char *description; ///< description (for status line etc.) +}; + +/// Range, default value, flags and names for a parameter +struct parameter_properties +{ + /// default value + float def_value; + /// minimum value + float min; + /// maximum value + float max; + /// number of steps (for an integer value from 0 to 100 this will be 101; for 0/90/180/270/360 this will be 5), or 0 for continuous + float step; + /// logical OR of parameter_flags + uint32_t flags; + /// for PF_ENUM: array of text values (from min to max step 1), otherwise NULL + const char **choices; + /// parameter label (for use in LV2 label field etc.) + const char *short_name; + /// parameter human-readable name + const char *name; + /// convert from [0, 1] range to [min, max] (applying scaling) + float from_01(double value01) const; + /// convert from [min, max] to [0, 1] range (applying reverse scaling) + double to_01(float value) const; + /// stringify (in sensible way) + std::string to_string(float value) const; + /// get required width (for reserving GUI space) + int get_char_count() const; + /// get increment step based on step value (if specified) and other factors + float get_increment() const; +}; + +struct cairo_iface +{ + virtual void set_source_rgba(float r, float g, float b, float a = 1.f) = 0; + virtual void set_line_width(float width) = 0; + virtual ~cairo_iface() {} +}; + +struct progress_report_iface +{ + virtual void report_progress(float percentage, const std::string &message) = 0; + virtual ~progress_report_iface() {} +}; + +/// 'provides live line graph values' interface +struct line_graph_iface +{ + /// Obtain subindex'th graph of parameter 'index' + /// @param index parameter/graph number (usually tied to particular plugin control port) + /// @param subindex graph number (there may be multiple overlaid graphs for one parameter, eg. for monosynth 2x12dB filters) + /// @param data buffer for normalized output values + /// @param points number of points to fill + /// @param context cairo context to adjust (for multicolour graphs etc.) + /// @retval true graph data was returned; subindex+1 graph may or may not be available + /// @retval false graph data was not returned; subindex+1 graph does not exist either + virtual bool get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const { return false; } + + /// Obtain subindex'th dot of parameter 'index' + /// @param index parameter/dot number (usually tied to particular plugin control port) + /// @param subindex dot number (there may be multiple dots graphs for one parameter) + virtual bool get_dot(int index, int subindex, float &x, float &y, int &size, cairo_iface *context) const { return false; } + + /// Obtain subindex'th dot of parameter 'index' + /// @param index parameter/dot number (usually tied to particular plugin control port) + /// @param subindex dot number (there may be multiple dots graphs for one parameter) + virtual bool get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const { return false; } + + /// Obtain subindex'th static graph of parameter index (static graphs are only dependent on parameter value, not plugin state) + /// @param index parameter/graph number (usually tied to particular plugin control port) + /// @param subindex graph number (there may be multiple overlaid graphs for one parameter, eg. for monosynth 2x12dB filters) + /// @param value parameter value to pick the graph for + /// @param data buffer for normalized output values + /// @param points number of points to fill + /// @param context cairo context to adjust (for multicolour graphs etc.) + /// @retval true graph data was returned; subindex+1 graph may or may not be available + /// @retval false graph data was not returned; subindex+1 graph does not exist either + virtual bool get_static_graph(int index, int subindex, float value, float *data, int points, cairo_iface *context) const { return false; } + + /// Return which graphs need to be redrawn and which can be cached for later reuse + /// @param index Parameter/graph number (usually tied to particular plugin control port) + /// @param generation 0 (at start) or the last value returned by the function (corresponds to a set of input values) + /// @param subindex_graph First graph that has to be redrawn (because it depends on values that might have changed) + /// @param subindex_dot First dot that has to be redrawn + /// @param subindex_gridline First gridline/legend that has to be redrawn + /// @retval Current generation (to pass when calling the function next time); if different than passed generation value, call the function again to retrieve which graph offsets should be put into cache + virtual int get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline) const { subindex_graph = subindex_dot = subindex_gridline = 0; return 0; } + + /// Standard destructor to make compiler happy + virtual ~line_graph_iface() {} +}; + +enum table_column_type +{ + TCT_UNKNOWN, ///< guard invalid type + TCT_FLOAT, ///< float value (encoded as C locale string) + TCT_ENUM, ///< enum value (see: 'values' array in table_column_info) - encoded as string base 10 representation of integer + TCT_STRING, ///< string value (encoded as C-escaped string) + TCT_OBJECT, ///< external object, encoded as string + TCT_LABEL, ///< string value (encoded as C-escaped string) +}; + +/// parameters of +struct table_column_info +{ + const char *name; ///< column label + table_column_type type; ///< column data type + float min; ///< minimum value (for float) + float max; ///< maximum value (for float and enum) + float def_value; ///< default value (for float and enum) + const char **values; ///< NULL unless a TCT_ENUM, where it represents a NULL-terminated list of choices +}; + +/// 'has string parameters containing tabular data' interface +struct table_metadata_iface +{ + /// retrieve the table layout for specific parameter + virtual const table_column_info *get_table_columns() const = 0; + + /// return the fixed number of rows, or 0 if the number of rows is variable + virtual uint32_t get_table_rows() const = 0; + + virtual ~table_metadata_iface() {} +}; + +/// 'may receive configure variables' interface +struct send_configure_iface +{ + /// Called to set configure variable + /// @param key variable name + /// @param value variable content + virtual void send_configure(const char *key, const char *value) = 0; + + virtual ~send_configure_iface() {} +}; + +/// 'may receive new status values' interface +struct send_updates_iface +{ + /// Called to set configure variable + /// @param key variable name + /// @param value variable content + virtual void send_status(const char *key, const char *value) = 0; + + virtual ~send_updates_iface() {} +}; + +struct plugin_command_info; + +/// General information about the plugin - @todo XXXKF lacks the "new" id-label-name triple +struct ladspa_plugin_info +{ + /// LADSPA ID + uint32_t unique_id; + /// plugin short name (camel case) + const char *label; + /// plugin human-readable name + const char *name; + /// maker (author) + const char *maker; + /// copyright notice + const char *copyright; + /// plugin type for LRDF/LV2 + const char *plugin_type; +}; + +/// An interface returning metadata about a plugin +struct plugin_metadata_iface +{ + /// @return plugin long name + virtual const char *get_name() const = 0; + /// @return plugin LV2 label + virtual const char *get_id() const = 0; + /// @return plugin human-readable label + virtual const char *get_label() const = 0; + /// @return total number of parameters + virtual int get_param_count() const = 0; + /// Return custom XML + virtual const char *get_gui_xml() const = 0; + /// @return number of audio inputs + virtual int get_input_count() const =0; + /// @return number of audio outputs + virtual int get_output_count() const =0; + /// @return number of optional inputs + virtual int get_inputs_optional() const =0; + /// @return number of optional outputs + virtual int get_outputs_optional() const =0; + /// @return true if plugin can work in hard-realtime conditions + virtual bool is_rt_capable() const =0; + /// @return true if plugin has MIDI input + virtual bool get_midi() const =0; + /// @return true if plugin has MIDI input + virtual bool requires_midi() const =0; + /// @return port offset of first control (parameter) port (= number of audio inputs + number of audio outputs in all existing plugins as for 1 Aug 2008) + virtual int get_param_port_offset() const = 0; + /// @return NULL-terminated list of menu commands + virtual plugin_command_info *get_commands() const { return NULL; } + /// @return description structure for given parameter + virtual const parameter_properties *get_param_props(int param_no) const = 0; + /// @return retrieve names of audio ports (@note control ports are named in parameter_properties, not here) + virtual const char **get_port_names() const = 0; + /// @return description structure for the plugin + virtual const ladspa_plugin_info &get_plugin_info() const = 0; + /// is a given parameter a control voltage? + virtual bool is_cv(int param_no) const = 0; + /// is the given parameter non-interpolated? + virtual bool is_noisy(int param_no) const = 0; + /// does the plugin require string port extension? (or DSSI configure) may be slow + virtual bool requires_configure() const = 0; + /// obtain array of names of configure variables (or NULL is none needed) + virtual const char *const *get_configure_vars() const { return NULL; } + /// @return table_metadata_iface if any + virtual const table_metadata_iface *get_table_metadata_iface(const char *key) const { return NULL; } + + /// Do-nothing destructor to silence compiler warning + virtual ~plugin_metadata_iface() {} +}; + +/// Interface for host-GUI-plugin interaction (should be really split in two, but ... meh) +struct plugin_ctl_iface +{ + /// @return value of given parameter + virtual float get_param_value(int param_no) = 0; + /// Set value of given parameter + virtual void set_param_value(int param_no, float value) = 0; + /// Load preset with given number + virtual bool activate_preset(int bank, int program) = 0; + /// @return volume level for port'th port (if supported by the implementation, currently only jack_host implements that by measuring signal level on plugin ports) + virtual float get_level(unsigned int port)=0; + /// Execute menu command with given number + virtual void execute(int cmd_no)=0; + /// Set a configure variable on a plugin + virtual char *configure(const char *key, const char *value) = 0; + /// Send all configure variables set within a plugin to given destination (which may be limited to only those that plugin understands) + virtual void send_configures(send_configure_iface *)=0; + /// Restore all state (parameters and configure vars) to default values - implemented in giface.cpp + virtual void clear_preset(); + /// Call a named function in a plugin - this will most likely be redesigned soon - and never used + /// @retval false call has failed, result contains an error message + virtual bool blobcall(const char *command, const std::string &request, std::string &result) { result = "Call not supported"; return false; } + /// Update status variables changed since last_serial + /// @return new last_serial + virtual int send_status_updates(send_updates_iface *sui, int last_serial) = 0; + /// Return metadata object + virtual const plugin_metadata_iface *get_metadata_iface() const = 0; + /// @return line_graph_iface if any + virtual const line_graph_iface *get_line_graph_iface() const = 0; + /// Do-nothing destructor to silence compiler warning + virtual ~plugin_ctl_iface() {} +}; + +struct plugin_list_info_iface; + +/// A class to retrieve and query the list of Calf plugins +class plugin_registry +{ +public: + typedef std::vector plugin_vector; +private: + plugin_vector plugins; + plugin_registry(); +public: + /// Get the singleton object. + static plugin_registry &instance(); + + /// Get all plugin metadata objects + const plugin_vector &get_all() { return plugins; } + /// Get single plugin metadata object by URI + const plugin_metadata_iface *get_by_uri(const char *URI); + /// Get single plugin metadata object by URI + const plugin_metadata_iface *get_by_id(const char *id, bool case_sensitive = false); +}; + +/// Load and strdup a text file with GUI definition +extern const char *load_gui_xml(const std::string &plugin_id); + +/// Interface to audio processing plugins (the real things, not only metadata) +struct audio_module_iface +{ + /// Handle MIDI Note On + virtual void note_on(int channel, int note, int velocity) = 0; + /// Handle MIDI Note Off + virtual void note_off(int channel, int note, int velocity) = 0; + /// Handle MIDI Program Change + virtual void program_change(int channel, int program) = 0; + /// Handle MIDI Control Change + virtual void control_change(int channel, int controller, int value) = 0; + /// Handle MIDI Pitch Bend + /// @param value pitch bend value (-8192 to 8191, defined as in MIDI ie. 8191 = 200 ct by default) + virtual void pitch_bend(int channel, int value) = 0; + /// Handle MIDI Channel Pressure + /// @param value channel pressure (0 to 127) + virtual void channel_pressure(int channel, int value) = 0; + /// Called when params are changed (before processing) + virtual void params_changed() = 0; + /// LADSPA-esque activate function, except it is called after ports are connected, not before + virtual void activate() = 0; + /// LADSPA-esque deactivate function + virtual void deactivate() = 0; + /// Set sample rate for the plugin + virtual void set_sample_rate(uint32_t sr) = 0; + /// Execute menu command with given number + virtual void execute(int cmd_no) = 0; + /// DSSI configure call, value = NULL = reset to default + virtual char *configure(const char *key, const char *value) = 0; + /// Send all understood configure vars (none by default) + virtual void send_configures(send_configure_iface *sci) = 0; + /// Send all supported status vars (none by default) + virtual int send_status_updates(send_updates_iface *sui, int last_serial) = 0; + /// Reset parameter values for epp:trigger type parameters (ones activated by oneshot push button instead of check box) + virtual void params_reset() = 0; + /// Called after instantiating (after all the feature pointers are set - including interfaces like progress_report_iface) + virtual void post_instantiate() = 0; + /// Return the arrays of port buffer pointers + virtual void get_port_arrays(float **&ins_ptrs, float **&outs_ptrs, float **¶ms_ptrs) = 0; + /// Return metadata object + virtual const plugin_metadata_iface *get_metadata_iface() const = 0; + /// Set the progress report interface to communicate progress to + virtual void set_progress_report_iface(progress_report_iface *iface) = 0; + /// Clear a part of output buffers that have 0s at mask; subdivide the buffer so that no runs > MAX_SAMPLE_RUN are fed to process function + virtual uint32_t process_slice(uint32_t offset, uint32_t end) = 0; + /// The audio processing loop; assumes numsamples <= MAX_SAMPLE_RUN, for larger buffers, call process_slice + virtual uint32_t process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask) = 0; + /// Message port processing function + virtual uint32_t message_run(const void *valid_ports, void *output_ports) = 0; + /// @return line_graph_iface if any + virtual const line_graph_iface *get_line_graph_iface() const = 0; + virtual ~audio_module_iface() {} +}; + +/// Empty implementations for plugin functions. +template +class audio_module: public Metadata, public audio_module_iface +{ +public: + typedef Metadata metadata_type; + using Metadata::in_count; + using Metadata::out_count; + using Metadata::param_count; + float *ins[Metadata::in_count]; + float *outs[Metadata::out_count]; + float *params[Metadata::param_count]; + + progress_report_iface *progress_report; + + audio_module() { + progress_report = NULL; + memset(ins, 0, sizeof(ins)); + memset(outs, 0, sizeof(outs)); + memset(params, 0, sizeof(params)); + } + + /// Handle MIDI Note On + void note_on(int channel, int note, int velocity) {} + /// Handle MIDI Note Off + void note_off(int channel, int note, int velocity) {} + /// Handle MIDI Program Change + void program_change(int channel, int program) {} + /// Handle MIDI Control Change + void control_change(int channel, int controller, int value) {} + /// Handle MIDI Pitch Bend + /// @param value pitch bend value (-8192 to 8191, defined as in MIDI ie. 8191 = 200 ct by default) + void pitch_bend(int channel, int value) {} + /// Handle MIDI Channel Pressure + /// @param value channel pressure (0 to 127) + void channel_pressure(int channel, int value) {} + /// Called when params are changed (before processing) + void params_changed() {} + /// LADSPA-esque activate function, except it is called after ports are connected, not before + void activate() {} + /// LADSPA-esque deactivate function + void deactivate() {} + /// Set sample rate for the plugin + void set_sample_rate(uint32_t sr) { } + /// Execute menu command with given number + void execute(int cmd_no) {} + /// DSSI configure call + virtual char *configure(const char *key, const char *value) { return NULL; } + /// Send all understood configure vars (none by default) + void send_configures(send_configure_iface *sci) {} + /// Send all supported status vars (none by default) + int send_status_updates(send_updates_iface *sui, int last_serial) { return last_serial; } + /// Reset parameter values for epp:trigger type parameters (ones activated by oneshot push button instead of check box) + void params_reset() {} + /// Called after instantiating (after all the feature pointers are set - including interfaces like progress_report_iface) + void post_instantiate() {} + /// Handle 'message context' port message + /// @arg output_ports pointer to bit array of output port "changed" flags, note that 0 = first audio input, not first parameter (use input_count + output_count) + uint32_t message_run(const void *valid_ports, void *output_ports) { + fprintf(stderr, "ERROR: message run not implemented\n"); + return 0; + } + /// Return the array of input port pointers + virtual void get_port_arrays(float **&ins_ptrs, float **&outs_ptrs, float **¶ms_ptrs) + { + ins_ptrs = ins; + outs_ptrs = outs; + params_ptrs = params; + } + /// Return metadata object + virtual const plugin_metadata_iface *get_metadata_iface() const { return this; } + /// Set the progress report interface to communicate progress to + virtual void set_progress_report_iface(progress_report_iface *iface) { progress_report = iface; } + + /// utility function: zero port values if mask is 0 + inline void zero_by_mask(uint32_t mask, uint32_t offset, uint32_t nsamples) + { + for (int i=0; i(this); } +}; + +#if USE_EXEC_GUI || USE_DSSI + +enum line_graph_item +{ + LGI_END = 0, + LGI_GRAPH, + LGI_SUBGRAPH, + LGI_LEGEND, + LGI_DOT, + LGI_END_ITEM, + LGI_SET_RGBA, + LGI_SET_WIDTH, +}; + +/// A class to send status updates via OSC +struct dssi_feedback_sender +{ + /// OSC client object used to send updates + osctl::osc_client *client; + /// Is client shared with something else? + bool is_client_shared; + /// Quit flag (used to terminate the thread) + bool quit; + /// Indices of graphs to send + std::vector indices; + /// Source for the graph data (interface to marshal) + const calf_plugins::line_graph_iface *graph; + + /// Create using a new client + dssi_feedback_sender(const char *URI, const line_graph_iface *_graph); + dssi_feedback_sender(osctl::osc_client *_client, const line_graph_iface *_graph); + void add_graphs(const calf_plugins::parameter_properties *props, int num_params); + void update(); + ~dssi_feedback_sender(); +}; +#endif + +/// Metadata base class template, to provide default versions of interface functions +template +class plugin_metadata: public plugin_metadata_iface +{ +public: + static const char *port_names[]; + static parameter_properties param_props[]; + static ladspa_plugin_info plugin_info; + typedef plugin_metadata metadata_class; + + // These below are stock implementations based on enums and static members in Metadata classes + // they may be overridden to provide more interesting functionality + + const char *get_name() const { return Metadata::impl_get_name(); } + const char *get_id() const { return Metadata::impl_get_id(); } + const char *get_label() const { return Metadata::impl_get_label(); } + int get_input_count() const { return Metadata::in_count; } + int get_output_count() const { return Metadata::out_count; } + int get_inputs_optional() const { return Metadata::ins_optional; } + int get_outputs_optional() const { return Metadata::outs_optional; } + int get_param_count() const { return Metadata::param_count; } + bool get_midi() const { return Metadata::support_midi; } + bool requires_midi() const { return Metadata::require_midi; } + bool is_rt_capable() const { return Metadata::rt_capable; } + int get_param_port_offset() const { return Metadata::in_count + Metadata::out_count; } + const char *get_gui_xml() const { static const char *data_ptr = calf_plugins::load_gui_xml(get_id()); return data_ptr; } + plugin_command_info *get_commands() const { return NULL; } + const parameter_properties *get_param_props(int param_no) const { return ¶m_props[param_no]; } + const char **get_port_names() const { return port_names; } + bool is_cv(int param_no) const { return true; } + bool is_noisy(int param_no) const { return false; } + const ladspa_plugin_info &get_plugin_info() const { return plugin_info; } + bool requires_configure() const { return false; } +}; + +#define CALF_PORT_NAMES(name) template<> const char *::plugin_metadata::port_names[] +#define CALF_PORT_PROPS(name) template<> parameter_properties plugin_metadata::param_props[name##_metadata::param_count + 1] +#define CALF_PLUGIN_INFO(name) template<> calf_plugins::ladspa_plugin_info plugin_metadata::plugin_info +#define PLUGIN_NAME_ID_LABEL(name, id, label) \ + static const char *impl_get_name() { return name; } \ + static const char *impl_get_id() { return id; } \ + static const char *impl_get_label() { return label; } \ + +extern const char *calf_copyright_info; + +bool get_freq_gridline(int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context, bool use_frequencies = true, float res = 256, float ofs = 0.4); + +/// convert amplitude value to normalized grid-ish value +static inline float dB_grid(float amp, float res = 256, float ofs = 0.4) +{ + return log(amp) * (1.0 / log(res)) + ofs; +} + +template +static bool get_graph(Fx &fx, int subindex, float *data, int points, float res = 256, float ofs = 0.4) +{ + for (int i = 0; i < points; i++) + { + double freq = 20.0 * pow (20000.0 / 20.0, i * 1.0 / points); + data[i] = dB_grid(fx.freq_gain(subindex, freq, fx.srate), res, ofs); + } + return true; +} + +/// convert normalized grid-ish value back to amplitude value +static inline float dB_grid_inv(float pos) +{ + return pow(256.0, pos - 0.4); +} + +/// Line graph interface implementation for frequency response graphs +class frequency_response_line_graph: public line_graph_iface +{ +public: + bool get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const; + virtual int get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline) const; +}; + +/// set drawing color based on channel index (0 or 1) +void set_channel_color(cairo_iface *context, int channel); + +struct preset_access_iface +{ + virtual void store_preset() = 0; + virtual void activate_preset(int preset, bool builtin) = 0; + virtual ~preset_access_iface() {} +}; + +/// Implementation of table_metadata_iface providing metadata for mod matrices +class mod_matrix_metadata: public table_metadata_iface +{ +public: + /// Mapping modes + enum mapping_mode { + map_positive, ///< 0..100% + map_bipolar, ///< -100%..100% + map_negative, ///< -100%..0% + map_squared, ///< x^2 + map_squared_bipolar, ///< x^2 scaled to -100%..100% + map_antisquared, ///< 1-(1-x)^2 scaled to 0..100% + map_antisquared_bipolar, ///< 1-(1-x)^2 scaled to -100..100% + map_parabola, ///< inverted parabola (peaks at 0.5, then decreases to 0) + map_type_count + }; + const char **mod_src_names, **mod_dest_names; + + mod_matrix_metadata(unsigned int _rows, const char **_src_names, const char **_dest_names); + virtual const table_column_info *get_table_columns() const; + virtual uint32_t get_table_rows() const; + +protected: + /// Column descriptions for table widget + table_column_info table_columns[6]; + + unsigned int matrix_rows; +}; + +/// Check if a given key is either prefix + rows or prefix + i2s(row) + "," + i2s(column) +/// @arg key key to parse +/// @arg prefix table prefix (e.g. "modmatrix:") +/// @arg is_rows[out] set to true if key == prefix + "rows" +/// @arg row[out] if key is of a form: prefix + row + "," + i2s(column), returns row, otherwise returns -1 +/// @arg column[out] if key is of a form: prefix + row + "," + i2s(column), returns row, otherwise returns -1 +/// @retval true if this is one of the recognized string forms +extern bool parse_table_key(const char *key, const char *prefix, bool &is_rows, int &row, int &column); + +#if USE_EXEC_GUI +class table_via_configure +{ +protected: + typedef std::pair coord; + std::vector columns; + std::map values; + int rows; +public: + table_via_configure(); + void configure(const char *key, const char *value); + virtual ~table_via_configure(); +}; +#endif + +}; + +#endif diff --git a/plugins/LadspaEffect/calf/src/calf/inertia.h b/plugins/LadspaEffect/calf/src/calf/inertia.h new file mode 100644 index 000000000..70ba9ede1 --- /dev/null +++ b/plugins/LadspaEffect/calf/src/calf/inertia.h @@ -0,0 +1,258 @@ +/* Calf DSP Library + * Basic "inertia" (parameter smoothing) classes. + * Copyright (C) 2001-2007 Krzysztof Foltman + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this program; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02111-1307, USA. + */ +#ifndef __CALF_INERTIA_H +#define __CALF_INERTIA_H + +#include "primitives.h" + +namespace dsp { + +/// Algorithm for a constant time linear ramp +class linear_ramp +{ +public: + int ramp_len; + float mul, delta; +public: + /// Construct for given ramp length + linear_ramp(int _ramp_len) { + ramp_len = _ramp_len; + mul = (float)(1.0f / ramp_len); + delta = 0.f; + } + /// Change ramp length + inline void set_length(int _ramp_len) { + ramp_len = _ramp_len; + mul = (float)(1.0f / ramp_len); + } + inline int length() + { + return ramp_len; + } + inline void start_ramp(float start, float end) + { + delta = mul * (end - start); + } + /// Return value after single step + inline float ramp(float value) + { + return value + delta; + } + /// Return value after many steps + inline float ramp_many(float value, int count) + { + return value + delta * count; + } +}; + +/// Algorithm for a constant time linear ramp +class exponential_ramp +{ +public: + int ramp_len; + float root, delta; +public: + exponential_ramp(int _ramp_len) { + ramp_len = _ramp_len; + root = (float)(1.0f / ramp_len); + delta = 1.0; + } + inline void set_length(int _ramp_len) { + ramp_len = _ramp_len; + root = (float)(1.0f / ramp_len); + } + inline int length() + { + return ramp_len; + } + inline void start_ramp(float start, float end) + { + delta = pow(end / start, root); + } + /// Return value after single step + inline float ramp(float value) + { + return value * delta; + } + /// Return value after many steps + inline float ramp_many(float value, float count) + { + return value * pow(delta, count); + } +}; + +/// Generic inertia using ramping algorithm specified as template argument. The basic idea +/// is producing smooth(ish) output for discrete input, using specified algorithm to go from +/// last output value to input value. It is not the same as classic running average lowpass +/// filter, because ramping time is finite and pre-determined (it calls ramp algorithm's length() +/// function to obtain the expected ramp length) +template +class inertia +{ +public: + float old_value; + float value; + unsigned int count; + Ramp ramp; + +public: + inertia(const Ramp &_ramp, float init_value = 0.f) + : ramp(_ramp) + { + value = old_value = init_value; + count = 0; + } + /// Set value immediately (no inertia) + void set_now(float _value) + { + value = old_value = _value; + count = 0; + } + /// Set with inertia + void set_inertia(float source) + { + if (source != old_value) { + ramp.start_ramp(value, source); + count = ramp.length(); + old_value = source; + } + } + /// Get smoothed value of given source value + inline float get(float source) + { + if (source != old_value) { + ramp.start_ramp(value, source); + count = ramp.length(); + old_value = source; + } + if (!count) + return old_value; + value = ramp.ramp(value); + count--; + if (!count) // finished ramping, set to desired value to get rid of accumulated rounding errors + value = old_value; + return value; + } + /// Get smoothed value assuming no new input + inline float get() + { + if (!count) + return old_value; + value = ramp.ramp(value); + count--; + if (!count) // finished ramping, set to desired value to get rid of accumulated rounding errors + value = old_value; + return value; + } + /// Do one inertia step, without returning the new value and without changing destination value + inline void step() + { + if (count) { + value = ramp.ramp(value); + count--; + if (!count) // finished ramping, set to desired value to get rid of accumulated rounding errors + value = old_value; + } + } + /// Do many inertia steps, without returning the new value and without changing destination value + inline void step_many(unsigned int steps) + { + if (steps < count) { + // Skip only a part of the current ramping period + value = ramp.ramp_many(value, steps); + count -= steps; + if (!count) // finished ramping, set to desired value to get rid of accumulated rounding errors + value = old_value; + } + else + { + // The whole ramping period has been skipped, just go to destination + value = old_value; + count = 0; + } + } + /// Get last smoothed value, without affecting anything + inline float get_last() const + { + return value; + } + /// Is it still ramping? + inline bool active() const + { + return count > 0; + } +}; + +class once_per_n +{ +public: + unsigned int frequency; + unsigned int left; +public: + once_per_n(unsigned int _frequency) + : frequency(_frequency), left(_frequency) + {} + inline void start() + { + left = frequency; + } + /// Set timer to "elapsed" state (elapsed() will return true during next call) + inline void signal() + { + left = 0; + } + inline unsigned int get(unsigned int desired) + { + if (desired > left) { + desired = left; + left = 0; + return desired; + } + left -= desired; + return desired; + } + inline bool elapsed() + { + if (!left) { + left = frequency; + return true; + } + return false; + } +}; + +class gain_smoothing: public inertia +{ +public: + gain_smoothing() + : inertia(linear_ramp(64)) + { + } + void set_sample_rate(int sr) + { + ramp = linear_ramp(sr / 100); + } + // to change param, use set_inertia(value) + // to read param, use get() +}; + +} + +#endif diff --git a/plugins/LadspaEffect/calf/src/calf/ladspa_wrap.h b/plugins/LadspaEffect/calf/src/calf/ladspa_wrap.h new file mode 100644 index 000000000..d94ebcea3 --- /dev/null +++ b/plugins/LadspaEffect/calf/src/calf/ladspa_wrap.h @@ -0,0 +1,130 @@ +/* Calf DSP Library + * API wrappers for LADSPA/DSSI + * + * Copyright (C) 2007-2008 Krzysztof Foltman + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this program; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02111-1307, USA. + */ +#ifndef __CALF_LADSPA_WRAP_H +#define __CALF_LADSPA_WRAP_H + +#if USE_LADSPA + +#include +#include +#if USE_DSSI +#include +#endif +#include "giface.h" +#include "preset.h" + +namespace calf_plugins { + +struct ladspa_plugin_metadata_set; +/// A template implementing plugin_ctl_iface for a given plugin +struct ladspa_instance: public plugin_ctl_iface +{ + audio_module_iface *module; + const plugin_metadata_iface *metadata; + ladspa_plugin_metadata_set *ladspa; + bool activate_flag; + float **ins, **outs, **params; +#if USE_DSSI + dssi_feedback_sender *feedback_sender; +#endif + + ladspa_instance(audio_module_iface *_module, ladspa_plugin_metadata_set *_ladspa, int sample_rate); + virtual const line_graph_iface *get_line_graph_iface() const { return module->get_line_graph_iface(); } + virtual float get_param_value(int param_no); + virtual void set_param_value(int param_no, float value); + virtual bool activate_preset(int bank, int program); + virtual char *configure(const char *key, const char *value); + virtual float get_level(unsigned int port) { return 0.f; } + virtual void execute(int cmd_no) { + module->execute(cmd_no); + } + virtual void send_configures(send_configure_iface *sci) { + module->send_configures(sci); + } + virtual int send_status_updates(send_updates_iface *sui, int last_serial) { return module->send_status_updates(sui, last_serial); } + void run(unsigned long SampleCount); +#if USE_DSSI + /// Utility function: handle MIDI event (only handles a subset in this version) + void process_dssi_event(snd_seq_event_t &event); + void run_synth(unsigned long SampleCount, snd_seq_event_t *Events, unsigned long EventCount); +#endif + virtual const plugin_metadata_iface *get_metadata_iface() const + { + return metadata; + } +}; + +/// Set of metadata produced by LADSPA wrapper for LADSPA-related purposes +struct ladspa_plugin_metadata_set +{ + /// LADSPA descriptor + LADSPA_Descriptor descriptor; + /// LADSPA descriptor for DSSI (uses a different name for the plugin, otherwise same as descriptor) + LADSPA_Descriptor descriptor_for_dssi; +#if USE_DSSI + /// Extended DSSI descriptor (points to descriptor_for_dssi for things like name/label/port info etc.) + DSSI_Descriptor dssi_descriptor; + DSSI_Program_Descriptor dssi_default_program; + + std::vector *presets; + std::vector *preset_descs; +#endif + + int input_count, output_count, param_count; + const plugin_metadata_iface *metadata; + + ladspa_plugin_metadata_set(); + void prepare(const plugin_metadata_iface *md, LADSPA_Handle (*cb_instantiate)(const struct _LADSPA_Descriptor * Descriptor, unsigned long sample_rate)); + void prepare_dssi(); + ~ladspa_plugin_metadata_set(); +}; + +/// A wrapper class for plugin class object (there is only one ladspa_wrapper singleton for many instances of the same plugin) +template +struct ladspa_wrapper +{ + static ladspa_plugin_metadata_set output; + +private: + ladspa_wrapper(const plugin_metadata_iface *md) + { + output.prepare(md, cb_instantiate); + } + +public: + /// LADSPA instantiation function (create a plugin instance) + static LADSPA_Handle cb_instantiate(const struct _LADSPA_Descriptor * Descriptor, unsigned long sample_rate) + { + return new ladspa_instance(new Module, &output, sample_rate); + } + + /// Get a wrapper singleton - used to prevent initialization order problems which were present in older versions + static ladspa_plugin_metadata_set &get() { + static ladspa_wrapper instance(new typename Module::metadata_class); + return instance.output; + } +}; + +}; + +#endif + +#endif diff --git a/plugins/LadspaEffect/calf/src/calf/loudness.h b/plugins/LadspaEffect/calf/src/calf/loudness.h new file mode 100644 index 000000000..62a00b5be --- /dev/null +++ b/plugins/LadspaEffect/calf/src/calf/loudness.h @@ -0,0 +1,90 @@ +/* Calf DSP Library + * A-weighting filter for + * Copyright (C) 2001-2007 Krzysztof Foltman + * + * Most of code in this file is based on freely + * available other work of other people (filter equations). + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this program; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02111-1307, USA. + */ +#ifndef __CALF_LOUDNESS_H +#define __CALF_LOUDNESS_H + +#include "biquad.h" + +namespace dsp { + +class aweighter { +public: + biquad_d2 bq1, bq2, bq3; + + /// Produce one output sample from one input sample + float process(float sample) + { + return bq1.process(bq2.process(bq3.process(sample))); + } + + /// Set sample rate (updates filter coefficients) + void set(float sr) + { + // analog coeffs taken from: http://www.diracdelta.co.uk/science/source/a/w/aweighting/source.html + // first we need to adjust them by doing some obscene sort of reverse pre-warping (a broken one, too!) + float f1 = biquad_coeffs::unwarpf(20.6f, sr); + float f2 = biquad_coeffs::unwarpf(107.7f, sr); + float f3 = biquad_coeffs::unwarpf(738.f, sr); + float f4 = biquad_coeffs::unwarpf(12200.f, sr); + // then map s domain to z domain using bilinear transform + // note: f1 and f4 are double poles + bq1.set_bilinear(0, 0, 1, f1*f1, 2 * f1, 1); + bq2.set_bilinear(1, 0, 0, f2*f3, f2 + f3, 1); + bq3.set_bilinear(0, 0, 1, f4*f4, 2 * f4, 1); + // the coeffs above give non-normalized value, so it should be normalized to produce 0dB at 1 kHz + // find actual gain + float gain1kHz = freq_gain(1000.0, sr); + // divide one filter's x[n-m] coefficients by that value + float gc = 1.0 / gain1kHz; + bq1.a0 *= gc; + bq1.a1 *= gc; + bq1.a2 *= gc; + } + + /// Reset to zero if at risk of denormals + void sanitize() + { + bq1.sanitize(); + bq2.sanitize(); + bq3.sanitize(); + } + + /// Reset state to zero + void reset() + { + bq1.reset(); + bq2.reset(); + bq3.reset(); + } + + /// Gain and a given frequency + float freq_gain(float freq, float sr) + { + return bq1.freq_gain(freq, sr) * bq2.freq_gain(freq, sr) * bq3.freq_gain(freq, sr); + } + +}; + +}; + +#endif diff --git a/plugins/LadspaEffect/calf/src/calf/lv2_external_ui.h b/plugins/LadspaEffect/calf/src/calf/lv2_external_ui.h new file mode 100644 index 000000000..242271ecc --- /dev/null +++ b/plugins/LadspaEffect/calf/src/calf/lv2_external_ui.h @@ -0,0 +1,101 @@ +/* -*- Mode: C ; c-basic-offset: 2 -*- */ +/***************************************************************************** + * + * This work is in public domain. + * + * This file is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + * If you have questions, contact Nedko Arnaudov or + * ask in #lad channel, FreeNode IRC network. + * + *****************************************************************************/ + +#ifndef LV2_EXTERNAL_UI_H__5AFE09A5_0FB7_47AF_924E_2AF0F8DE8873__INCLUDED +#define LV2_EXTERNAL_UI_H__5AFE09A5_0FB7_47AF_924E_2AF0F8DE8873__INCLUDED + +/** UI extension suitable for out-of-process UIs */ +#define LV2_EXTERNAL_UI_URI "http://lv2plug.in/ns/extensions/ui#external" + +#ifdef __cplusplus +extern "C" { +#endif +#if 0 +} /* Adjust editor indent */ +#endif + +/** + * When LV2_EXTERNAL_UI_URI UI is instantiated, the returned + * LV2UI_Widget handle must be cast to pointer to struct lv2_external_ui. + * UI is created in invisible state. + */ +struct lv2_external_ui +{ + /** + * Host calls this function regulary. UI library implementing the + * callback may do IPC or redraw the UI. + * + * @param _this_ the UI context + */ + void (* run)(struct lv2_external_ui * _this_); + + /** + * Host calls this function to make the plugin UI visible. + * + * @param _this_ the UI context + */ + void (* show)(struct lv2_external_ui * _this_); + + /** + * Host calls this function to make the plugin UI invisible again. + * + * @param _this_ the UI context + */ + void (* hide)(struct lv2_external_ui * _this_); +}; + +#define LV2_EXTERNAL_UI_RUN(ptr) (ptr)->run(ptr) +#define LV2_EXTERNAL_UI_SHOW(ptr) (ptr)->show(ptr) +#define LV2_EXTERNAL_UI_HIDE(ptr) (ptr)->hide(ptr) + +/** + * On UI instantiation, host must supply LV2_EXTERNAL_UI_URI + * feature. LV2_Feature::data must be pointer to struct lv2_external_ui_host. */ +struct lv2_external_ui_host +{ + /** + * Callback that plugin UI will call + * when UI (GUI window) is closed by user. + * This callback wil; be called during execution of lv2_external_ui::run() + * (i.e. not from background thread). + * + * After this callback is called, UI is defunct. Host must call + * LV2UI_Descriptor::cleanup(). If host wants to make the UI visible + * again UI must be reinstantiated. + * + * @param controller Host context associated with plugin UI, as + * supplied to LV2UI_Descriptor::instantiate() + */ + void (* ui_closed)(LV2UI_Controller controller); + + /** + * Optional (may be NULL) "user friendly" identifier which the UI + * may display to allow a user to easily associate this particular + * UI instance with the correct plugin instance as it is represented + * by the host (e.g. "track 1" or "channel 4"). + * + * If supplied by host, the string will be referenced only during + * LV2UI_Descriptor::instantiate() + */ + const char * plugin_human_id; +}; + +#if 0 +{ /* Adjust editor indent */ +#endif +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* #ifndef LV2_EXTERNAL_UI_H__5AFE09A5_0FB7_47AF_924E_2AF0F8DE8873__INCLUDED */ diff --git a/plugins/LadspaEffect/calf/src/calf/lv2helpers.h b/plugins/LadspaEffect/calf/src/calf/lv2helpers.h new file mode 100644 index 000000000..21e6cfc00 --- /dev/null +++ b/plugins/LadspaEffect/calf/src/calf/lv2helpers.h @@ -0,0 +1,30 @@ +/* Calf DSP Library + * LV2-related helper classes and functions + * + * Copyright (C) 2001-2008 Krzysztof Foltman + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this program; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02111-1307, USA. + */ +#ifndef CALF_LV2HELPERS_H +#define CALF_LV2HELPERS_H + +#if USE_LV2 + +#include +#include + +#endif +#endif diff --git a/plugins/LadspaEffect/calf/src/calf/lv2wrap.h b/plugins/LadspaEffect/calf/src/calf/lv2wrap.h new file mode 100644 index 000000000..f204db6ca --- /dev/null +++ b/plugins/LadspaEffect/calf/src/calf/lv2wrap.h @@ -0,0 +1,350 @@ +/* Calf DSP Library + * LV2 wrapper templates + * + * Copyright (C) 2001-2008 Krzysztof Foltman + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this program; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02111-1307, USA. + */ +#ifndef CALF_LV2WRAP_H +#define CALF_LV2WRAP_H + +#if USE_LV2 + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace calf_plugins { + +struct lv2_instance: public plugin_ctl_iface, public progress_report_iface +{ + const plugin_metadata_iface *metadata; + audio_module_iface *module; + bool set_srate; + int srate_to_set; + LV2_Event_Buffer *event_data; + LV2_URI_Map_Feature *uri_map; + LV2_Event_Feature *event_feature; + uint32_t midi_event_type; + LV2_Progress *progress_report_feature; + float **ins, **outs, **params; + int out_count; + int real_param_count; + lv2_instance(audio_module_iface *_module) + { + module = _module; + module->get_port_arrays(ins, outs, params); + metadata = module->get_metadata_iface(); + out_count = metadata->get_output_count(); + real_param_count = metadata->get_param_count(); + + uri_map = NULL; + event_data = NULL; + progress_report_feature = NULL; + midi_event_type = 0xFFFFFFFF; + + srate_to_set = 44100; + set_srate = true; + } + /// This, and not Module::post_instantiate, is actually called by lv2_wrapper class + void post_instantiate() + { + if (progress_report_feature) + module->set_progress_report_iface(this); + module->post_instantiate(); + } + virtual bool activate_preset(int bank, int program) { + return false; + } + virtual float get_level(unsigned int port) { return 0.f; } + virtual void execute(int cmd_no) { + module->execute(cmd_no); + } + virtual void report_progress(float percentage, const std::string &message) { + if (progress_report_feature) + (*progress_report_feature->progress)(progress_report_feature->context, percentage, !message.empty() ? message.c_str() : NULL); + } + void send_configures(send_configure_iface *sci) { + module->send_configures(sci); + } + void impl_restore(LV2_State_Retrieve_Function retrieve, void *callback_data) + { + const char *const *vars = module->get_metadata_iface()->get_configure_vars(); + if (!vars) + return; + assert(uri_map); + uint32_t string_type = uri_map->uri_to_id(uri_map->callback_data, NULL, "http://lv2plug.in/ns/ext/atom#String"); + assert(string_type); + for (unsigned int i = 0; vars[i]; i++) + { + const uint32_t key = uri_map->uri_to_id(uri_map->callback_data, NULL, vars[i]); + size_t len = 0; + uint32_t type = 0; + uint32_t flags = 0; + const void *ptr = (*retrieve)(callback_data, key, &len, &type, &flags); + if (ptr) + { + if (type != string_type) + fprintf(stderr, "Warning: type is %d, expected %d\n", (int)type, (int)string_type); + printf("Calling configure on %s\n", vars[i]); + configure(vars[i], std::string((const char *)ptr, len).c_str()); + } + else + configure(vars[i], NULL); + } + } + char *configure(const char *key, const char *value) { + // disambiguation - the plugin_ctl_iface version is just a stub, so don't use it + return module->configure(key, value); + } + + void process_events(uint32_t &offset) { + struct LV2_Midi_Event: public LV2_Event { + unsigned char data[1]; + }; + unsigned char *data = (unsigned char *)(event_data->data); + for (uint32_t i = 0; i < event_data->event_count; i++) { + LV2_Midi_Event *item = (LV2_Midi_Event *)data; + uint32_t ts = item->frames; + // printf("Event: timestamp %d subframes %d type %d vs %d\n", item->frames, item->subframes, item->type, mod->midi_event_type); + if (ts > offset) + { + module->process_slice(offset, ts); + offset = ts; + } + if (item->type == midi_event_type) + { + // printf("Midi message %x %x %x %x %d\n", item->data[0], item->data[1], item->data[2], item->data[3], item->size); + int channel = item->data[0] & 15; + switch(item->data[0] >> 4) + { + case 8: module->note_off(channel, item->data[1], item->data[2]); break; + case 9: module->note_on(channel, item->data[1], item->data[2]); break; + case 11: module->control_change(channel, item->data[1], item->data[2]); break; + case 12: module->program_change(channel, item->data[1]); break; + case 13: module->channel_pressure(channel, item->data[1]); break; + case 14: module->pitch_bend(channel, item->data[1] + 128 * item->data[2] - 8192); break; + } + } + else + if (item->type == 0 && event_feature) + event_feature->lv2_event_unref(event_feature->callback_data, item); + // printf("timestamp %f item size %d first byte %x\n", item->timestamp, item->size, item->data[0]); + data += ((sizeof(LV2_Event) + item->size + 7))&~7; + } + } + + virtual float get_param_value(int param_no) + { + // XXXKF hack + if (param_no >= real_param_count) + return 0; + return (*params)[param_no]; + } + virtual void set_param_value(int param_no, float value) + { + // XXXKF hack + if (param_no >= real_param_count) + return; + *params[param_no] = value; + } + virtual const plugin_metadata_iface *get_metadata_iface() const { return metadata; } + virtual const line_graph_iface *get_line_graph_iface() const { return module->get_line_graph_iface(); } + virtual int send_status_updates(send_updates_iface *sui, int last_serial) { return module->send_status_updates(sui, last_serial); } +}; + +struct LV2_Calf_Descriptor { + plugin_ctl_iface *(*get_pci)(LV2_Handle Instance); +}; + +template +struct lv2_wrapper +{ + typedef lv2_instance instance; + static LV2_Descriptor descriptor; + static LV2_Calf_Descriptor calf_descriptor; + static LV2_State_Interface state_iface; + std::string uri; + + lv2_wrapper() + { + ladspa_plugin_info &info = Module::plugin_info; + uri = "http://calf.sourceforge.net/plugins/" + std::string(info.label); + descriptor.URI = uri.c_str(); + descriptor.instantiate = cb_instantiate; + descriptor.connect_port = cb_connect; + descriptor.activate = cb_activate; + descriptor.run = cb_run; + descriptor.deactivate = cb_deactivate; + descriptor.cleanup = cb_cleanup; + descriptor.extension_data = cb_ext_data; + state_iface.save = cb_state_save; + state_iface.restore = cb_state_restore; + calf_descriptor.get_pci = cb_get_pci; + } + + static void cb_connect(LV2_Handle Instance, uint32_t port, void *DataLocation) + { + instance *const mod = (instance *)Instance; + const plugin_metadata_iface *md = mod->metadata; + unsigned long ins = md->get_input_count(); + unsigned long outs = md->get_output_count(); + unsigned long params = md->get_param_count(); + if (port < ins) + mod->ins[port] = (float *)DataLocation; + else if (port < ins + outs) + mod->outs[port - ins] = (float *)DataLocation; + else if (port < ins + outs + params) { + int i = port - ins - outs; + mod->params[i] = (float *)DataLocation; + } + else if (md->get_midi() && port == ins + outs + params) { + mod->event_data = (LV2_Event_Buffer *)DataLocation; + } + } + + static void cb_activate(LV2_Handle Instance) + { + instance *const mod = (instance *)Instance; + mod->set_srate = true; + } + + static void cb_deactivate(LV2_Handle Instance) + { + instance *const mod = (instance *)Instance; + mod->module->deactivate(); + } + + static LV2_Handle cb_instantiate(const LV2_Descriptor * Descriptor, double sample_rate, const char *bundle_path, const LV2_Feature *const *features) + { + instance *mod = new instance(new Module); + // XXXKF some people use fractional sample rates; we respect them ;-) + mod->srate_to_set = (uint32_t)sample_rate; + mod->set_srate = true; + while(*features) + { + if (!strcmp((*features)->URI, LV2_URI_MAP_URI)) + { + mod->uri_map = (LV2_URI_Map_Feature *)((*features)->data); + mod->midi_event_type = mod->uri_map->uri_to_id( + mod->uri_map->callback_data, + "http://lv2plug.in/ns/ext/event", + "http://lv2plug.in/ns/ext/midi#MidiEvent"); + } + else if (!strcmp((*features)->URI, LV2_EVENT_URI)) + { + mod->event_feature = (LV2_Event_Feature *)((*features)->data); + } + else if (!strcmp((*features)->URI, LV2_PROGRESS_URI)) + { + mod->progress_report_feature = (LV2_Progress *)((*features)->data); + } + features++; + } + mod->post_instantiate(); + return mod; + } + static plugin_ctl_iface *cb_get_pci(LV2_Handle Instance) + { + return static_cast(Instance); + } + + static void cb_run(LV2_Handle Instance, uint32_t SampleCount) + { + instance *const inst = (instance *)Instance; + audio_module_iface *mod = inst->module; + if (inst->set_srate) { + mod->set_sample_rate(inst->srate_to_set); + mod->activate(); + inst->set_srate = false; + } + mod->params_changed(); + uint32_t offset = 0; + if (inst->event_data) + { + inst->process_events(offset); + } + inst->module->process_slice(offset, SampleCount); + } + static void cb_cleanup(LV2_Handle Instance) + { + instance *const mod = (instance *)Instance; + delete mod; + } + static const void *cb_ext_data(const char *URI) + { + if (!strcmp(URI, "http://foltman.com/ns/calf-plugin-instance")) + return &calf_descriptor; + if (!strcmp(URI, LV2_STATE_INTERFACE_URI)) + return &state_iface; + return NULL; + } + static void cb_state_save(LV2_Handle Instance, + LV2_State_Store_Function store, LV2_State_Handle handle, + uint32_t flags, const LV2_Feature *const * features) + { + instance *const inst = (instance *)Instance; + struct store_state: public send_configure_iface + { + LV2_State_Store_Function store; + void *callback_data; + instance *inst; + uint32_t string_data_type; + + virtual void send_configure(const char *key, const char *value) + { + (*store)(callback_data, + inst->uri_map->uri_to_id(inst->uri_map->callback_data, NULL, key), + value, + strlen(value) + 1, + string_data_type, + LV2_STATE_IS_POD|LV2_STATE_IS_PORTABLE); + } + }; + // A host that supports State MUST support URI-Map as well. + assert(inst->uri_map); + store_state s; + s.store = store; + s.callback_data = handle; + s.inst = inst; + s.string_data_type = inst->uri_map->uri_to_id(inst->uri_map->callback_data, NULL, "http://lv2plug.in/ns/ext/atom#String"); + + inst->send_configures(&s); + } + static void cb_state_restore(LV2_Handle Instance, + LV2_State_Retrieve_Function retrieve, LV2_State_Handle callback_data, + uint32_t flags, const LV2_Feature *const * features) + { + instance *const inst = (instance *)Instance; + inst->impl_restore(retrieve, callback_data); + } + + static lv2_wrapper &get() { + static lv2_wrapper *instance = new lv2_wrapper; + return *instance; + } +}; + +}; + +#endif +#endif diff --git a/plugins/LadspaEffect/calf/src/calf/metadata.h b/plugins/LadspaEffect/calf/src/calf/metadata.h new file mode 100644 index 000000000..d0035c07b --- /dev/null +++ b/plugins/LadspaEffect/calf/src/calf/metadata.h @@ -0,0 +1,595 @@ +/* Calf DSP Library + * Audio module (plugin) metadata - header file + * + * Copyright (C) 2007-2008 Krzysztof Foltman + * Copyright (C) 2008 Thor Harald Johansen + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this program; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02111-1307, USA. + */ + +#ifndef __CALF_METADATA_H +#define __CALF_METADATA_H + +#include "giface.h" + +#define MONO_VU_METER_PARAMS param_meter_in, param_meter_out, param_clip_in, param_clip_out +#define STEREO_VU_METER_PARAMS param_meter_inL, param_meter_inR, param_meter_outL, param_meter_outR, param_clip_inL, param_clip_inR, param_clip_outL, param_clip_outR + +namespace calf_plugins { + +struct flanger_metadata: public plugin_metadata +{ +public: + enum { par_delay, par_depth, par_rate, par_fb, par_stereo, par_reset, par_amount, par_dryamount, param_count }; + enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true }; + PLUGIN_NAME_ID_LABEL("flanger", "flanger", "Flanger") +}; + +struct phaser_metadata: public plugin_metadata +{ + enum { par_freq, par_depth, par_rate, par_fb, par_stages, par_stereo, par_reset, par_amount, par_dryamount, param_count }; + enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true }; + PLUGIN_NAME_ID_LABEL("phaser", "phaser", "Phaser") +}; + +struct filter_metadata: public plugin_metadata +{ + enum { par_cutoff, par_resonance, par_mode, par_inertia, param_count }; + enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, rt_capable = true, require_midi = false, support_midi = false }; + PLUGIN_NAME_ID_LABEL("filter", "filter", "Filter") + /// do not export mode and inertia as CVs, as those are settings and not parameters + bool is_cv(int param_no) { return param_no != par_mode && param_no != par_inertia; } +}; + +/// Filterclavier - metadata +struct filterclavier_metadata: public plugin_metadata +{ + enum { par_transpose, par_detune, par_max_resonance, par_mode, par_inertia, param_count }; + enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, rt_capable = true, require_midi = true, support_midi = true }; + PLUGIN_NAME_ID_LABEL("filterclavier", "filterclavier", "Filterclavier") + /// do not export mode and inertia as CVs, as those are settings and not parameters + bool is_cv(int param_no) { return param_no != par_mode && param_no != par_inertia; } +}; + +struct reverb_metadata: public plugin_metadata +{ + enum { par_clip, par_meter_wet, par_meter_out, par_decay, par_hfdamp, par_roomsize, par_diffusion, par_amount, par_dry, par_predelay, par_basscut, par_treblecut, param_count }; + enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true }; + PLUGIN_NAME_ID_LABEL("reverb", "reverb", "Reverb") +}; + +struct vintage_delay_metadata: public plugin_metadata +{ + enum { par_bpm, par_divide, par_time_l, par_time_r, par_feedback, par_amount, par_mixmode, par_medium, par_dryamount, par_width, param_count }; + enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, rt_capable = true, support_midi = false, require_midi = false }; + PLUGIN_NAME_ID_LABEL("vintage_delay", "vintagedelay", "Vintage Delay") +}; + +struct rotary_speaker_metadata: public plugin_metadata +{ +public: + enum { par_speed, par_spacing, par_shift, par_moddepth, par_treblespeed, par_bassspeed, par_micdistance, par_reflection, par_am_depth, par_test, par_meter_l, par_meter_h, param_count }; + enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = true, require_midi = false, rt_capable = true }; + PLUGIN_NAME_ID_LABEL("rotary_speaker", "rotaryspeaker", "Rotary Speaker") +}; + +/// A multitap stereo chorus thing - metadata +struct multichorus_metadata: public plugin_metadata +{ +public: + enum { par_delay, par_depth, par_rate, par_stereo, par_voices, par_vphase, par_amount, par_dryamount, par_freq, par_freq2, par_q, par_overlap, param_count }; + enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, rt_capable = true, support_midi = false, require_midi = false }; + PLUGIN_NAME_ID_LABEL("multichorus", "multichorus", "Multi Chorus") +}; + +enum CalfEqMode { + MODE12DB, + MODE24DB, + MODE36DB +}; + +/// Monosynth - metadata +struct monosynth_metadata: public plugin_metadata +{ + enum { wave_saw, wave_sqr, wave_pulse, wave_sine, wave_triangle, wave_varistep, wave_skewsaw, wave_skewsqr, wave_test1, wave_test2, wave_test3, wave_test4, wave_test5, wave_test6, wave_test7, wave_test8, wave_count }; + enum { flt_lp12, flt_lp24, flt_2lp12, flt_hp12, flt_lpbr, flt_hpbr, flt_bp6, flt_2bp6 }; + enum { par_wave1, par_wave2, par_pw1, par_pw2, par_detune, par_osc2xpose, par_oscmode, par_oscmix, par_filtertype, par_cutoff, par_resonance, par_cutoffsep, par_env1tocutoff, par_env1tores, par_env1toamp, + par_env1attack, par_env1decay, par_env1sustain, par_env1fade, par_env1release, + par_keyfollow, par_legato, par_portamento, par_vel2filter, par_vel2amp, par_master, par_pwhlrange, + par_lforate, par_lfodelay, par_lfofilter, par_lfopitch, par_lfopw, par_mwhl_lfo, par_scaledetune, + par_env2tocutoff, par_env2tores, par_env2toamp, + par_env2attack, par_env2decay, par_env2sustain, par_env2fade, par_env2release, + par_stretch1, par_window1, + par_lfo1trig, par_lfo2trig, + par_lfo2rate, par_lfo2delay, + param_count }; + enum { in_count = 0, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = true, require_midi = true, rt_capable = true }; + enum { step_size = 64, step_shift = 6 }; + enum { mod_matrix_slots = 10 }; + enum { + modsrc_none, + modsrc_velocity, + modsrc_pressure, + modsrc_modwheel, + modsrc_env1, + modsrc_env2, + modsrc_lfo1, + modsrc_lfo2, + modsrc_count, + }; + enum { + moddest_none, + moddest_attenuation, + moddest_oscmix, + moddest_cutoff, + moddest_resonance, + moddest_o1detune, + moddest_o2detune, + moddest_o1pw, + moddest_o2pw, + moddest_o1stretch, + moddest_count, + }; + PLUGIN_NAME_ID_LABEL("monosynth", "monosynth", "Monosynth") + + mod_matrix_metadata mm_metadata; + + monosynth_metadata(); + /// Lookup of table edit interface + virtual const table_metadata_iface *get_table_metadata_iface(const char *key) const { if (!strcmp(key, "mod_matrix")) return &mm_metadata; else return NULL; } + const char *const *get_configure_vars() const; +}; + +/// Thor's compressor - metadata +/// Added some meters and stripped the weighting part +struct compressor_metadata: public plugin_metadata +{ + enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true }; + enum { param_bypass, param_level_in, MONO_VU_METER_PARAMS, + param_threshold, param_ratio, param_attack, param_release, param_makeup, param_knee, param_detection, param_stereo_link, param_compression, + param_count }; + PLUGIN_NAME_ID_LABEL("compressor", "compressor", "Compressor") +}; + +/// Markus's sidechain compressor - metadata +struct sidechaincompressor_metadata: public plugin_metadata +{ + enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true }; + enum { param_bypass, param_level_in, MONO_VU_METER_PARAMS, + param_threshold, param_ratio, param_attack, param_release, param_makeup, param_knee, param_detection, param_stereo_link, param_compression, + param_sc_mode, param_f1_freq, param_f2_freq, param_f1_level, param_f2_level, + param_sc_listen, param_f1_active, param_f2_active, param_sc_route, param_sc_level, param_count }; + PLUGIN_NAME_ID_LABEL("sidechaincompressor", "sidechaincompressor", "Sidechain Compressor") +}; + +/// Markus's multibandcompressor - metadata +struct multibandcompressor_metadata: public plugin_metadata +{ + enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true }; + enum { param_bypass, param_level_in, param_level_out, + STEREO_VU_METER_PARAMS, + param_freq0, param_freq1, param_freq2, + param_sep0, param_sep1, param_sep2, + param_q0, param_q1, param_q2, + param_mode, + param_threshold0, param_ratio0, param_attack0, param_release0, param_makeup0, param_knee0, + param_detection0, param_compression0, param_output0, param_bypass0, param_solo0, + param_threshold1, param_ratio1, param_attack1, param_release1, param_makeup1, param_knee1, + param_detection1, param_compression1, param_output1, param_bypass1, param_solo1, + param_threshold2, param_ratio2, param_attack2, param_release2, param_makeup2, param_knee2, + param_detection2, param_compression2, param_output2, param_bypass2, param_solo2, + param_threshold3, param_ratio3, param_attack3, param_release3, param_makeup3, param_knee3, + param_detection3, param_compression3, param_output3, param_bypass3, param_solo3, + param_count }; + PLUGIN_NAME_ID_LABEL("multiband_compressor", "multibandcompressor", "Multiband Compressor") +}; + +/// Markus's deesser - metadata +struct deesser_metadata: public plugin_metadata +{ + enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true }; + enum { param_bypass, param_detected, param_compression, param_detected_led, param_clip_out, + param_detection, param_mode, + param_threshold, param_ratio, param_laxity, param_makeup, + param_f1_freq, param_f2_freq, param_f1_level, param_f2_level, param_f2_q, + param_sc_listen, param_count }; + PLUGIN_NAME_ID_LABEL("deesser", "deesser", "Deesser") +}; + +/// Damiens' Gate - metadata +/// Added some meters and stripped the weighting part +struct gate_metadata: public plugin_metadata +{ + enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true }; + enum { param_bypass, param_level_in, MONO_VU_METER_PARAMS, + param_range, param_threshold, param_ratio, param_attack, param_release, param_makeup, param_knee, param_detection, param_stereo_link, param_gating, + param_count }; + PLUGIN_NAME_ID_LABEL("gate", "gate", "Gate") +}; + +/// Markus's sidechain gate - metadata +struct sidechaingate_metadata: public plugin_metadata +{ + enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true }; + enum { param_bypass, param_level_in, MONO_VU_METER_PARAMS, + param_range, param_threshold, param_ratio, param_attack, param_release, param_makeup, param_knee, param_detection, param_stereo_link, param_gating, + param_sc_mode, param_f1_freq, param_f2_freq, param_f1_level, param_f2_level, + param_sc_listen, param_f1_active, param_f2_active, param_sc_route, param_sc_level, param_count }; + PLUGIN_NAME_ID_LABEL("sidechaingate", "sidechaingate", "Sidechain Gate") +}; + +/// Markus's multiband gate - metadata +struct multibandgate_metadata: public plugin_metadata +{ + enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true }; + enum { param_bypass, param_level_in, param_level_out, + STEREO_VU_METER_PARAMS, + param_freq0, param_freq1, param_freq2, + param_sep0, param_sep1, param_sep2, + param_q0, param_q1, param_q2, + param_mode, + param_range0, param_threshold0, param_ratio0, param_attack0, param_release0, param_makeup0, param_knee0, + param_detection0, param_gating0, param_output0, param_bypass0, param_solo0, + param_range1, param_threshold1, param_ratio1, param_attack1, param_release1, param_makeup1, param_knee1, + param_detection1, param_gating1, param_output1, param_bypass1, param_solo1, + param_range2, param_threshold2, param_ratio2, param_attack2, param_release2, param_makeup2, param_knee2, + param_detection2, param_gating2, param_output2, param_bypass2, param_solo2, + param_range3, param_threshold3, param_ratio3, param_attack3, param_release3, param_makeup3, param_knee3, + param_detection3, param_gating3, param_output3, param_bypass3, param_solo3, + param_count }; + PLUGIN_NAME_ID_LABEL("multiband_gate", "multibandgate", "Multiband Gate") +}; + +/// Markus's limiter - metadata +struct limiter_metadata: public plugin_metadata +{ + enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true }; + enum { param_bypass, param_level_in, param_level_out, + STEREO_VU_METER_PARAMS, + param_limit, param_attack, param_release, + param_att, + param_asc, param_asc_led, param_asc_coeff, + param_count }; + PLUGIN_NAME_ID_LABEL("limiter", "limiter", "Limiter") +}; + +/// Markus's multibandlimiter - metadata +struct multibandlimiter_metadata: public plugin_metadata +{ + enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true }; + enum { param_bypass, param_level_in, param_level_out, + STEREO_VU_METER_PARAMS, + param_freq0, param_freq1, param_freq2, + param_sep0, param_sep1, param_sep2, + param_q0, param_q1, param_q2, + param_mode, + param_limit, param_attack, param_release, param_minrel, + param_att0, param_att1, param_att2, param_att3, + param_weight0, param_weight1, param_weight2, param_weight3, + param_release0, param_release1, param_release2, param_release3, + param_solo0, param_solo1, param_solo2, param_solo3, + param_effrelease0, param_effrelease1, param_effrelease2, param_effrelease3, + param_asc, param_asc_led, param_asc_coeff, + param_count }; + PLUGIN_NAME_ID_LABEL("multiband_limiter", "multibandlimiter", "Multiband Limiter") +}; + +/// Markus's 5-band EQ - metadata +struct equalizer5band_metadata: public plugin_metadata +{ + enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true }; + enum { param_bypass, param_level_in, param_level_out, STEREO_VU_METER_PARAMS, + param_ls_active, param_ls_level, param_ls_freq, + param_hs_active, param_hs_level, param_hs_freq, + param_p1_active, param_p1_level, param_p1_freq, param_p1_q, + param_p2_active, param_p2_level, param_p2_freq, param_p2_q, + param_p3_active, param_p3_level, param_p3_freq, param_p3_q, + param_count }; + // dummy parameter numbers, shouldn't be used EVER, they're only there to avoid pushing LP/HP filters to a separate class + // and potentially making inlining and optimization harder for the compiler + enum { param_lp_active = 0xDEADBEEF, param_hp_active, param_hp_mode, param_lp_mode, param_hp_freq, param_lp_freq }; + enum { PeakBands = 3, first_graph_param = param_ls_active, last_graph_param = param_p3_q }; + PLUGIN_NAME_ID_LABEL("equalizer5band", "eq5", "Equalizer 5 Band") +}; +/// Markus's 8-band EQ - metadata +struct equalizer8band_metadata: public plugin_metadata +{ + enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true }; + enum { param_bypass, param_level_in, param_level_out, + STEREO_VU_METER_PARAMS, + param_hp_active, param_hp_freq, param_hp_mode, + param_lp_active, param_lp_freq, param_lp_mode, + param_ls_active, param_ls_level, param_ls_freq, + param_hs_active, param_hs_level, param_hs_freq, + param_p1_active, param_p1_level, param_p1_freq, param_p1_q, + param_p2_active, param_p2_level, param_p2_freq, param_p2_q, + param_p3_active, param_p3_level, param_p3_freq, param_p3_q, + param_p4_active, param_p4_level, param_p4_freq, param_p4_q, + param_count }; + enum { PeakBands = 4, first_graph_param = param_hp_active, last_graph_param = param_p4_q }; + PLUGIN_NAME_ID_LABEL("equalizer8band", "eq8", "Equalizer 8 Band") +}; +/// Markus's 12-band EQ - metadata +struct equalizer12band_metadata: public plugin_metadata +{ + enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true }; + enum { param_bypass, param_level_in, param_level_out, + STEREO_VU_METER_PARAMS, + param_hp_active, param_hp_freq, param_hp_mode, + param_lp_active, param_lp_freq, param_lp_mode, + param_ls_active, param_ls_level, param_ls_freq, + param_hs_active, param_hs_level, param_hs_freq, + param_p1_active, param_p1_level, param_p1_freq, param_p1_q, + param_p2_active, param_p2_level, param_p2_freq, param_p2_q, + param_p3_active, param_p3_level, param_p3_freq, param_p3_q, + param_p4_active, param_p4_level, param_p4_freq, param_p4_q, + param_p5_active, param_p5_level, param_p5_freq, param_p5_q, + param_p6_active, param_p6_level, param_p6_freq, param_p6_q, + param_p7_active, param_p7_level, param_p7_freq, param_p7_q, + param_p8_active, param_p8_level, param_p8_freq, param_p8_q, + param_count }; + enum { PeakBands = 8, first_graph_param = param_hp_active, last_graph_param = param_p8_q }; + PLUGIN_NAME_ID_LABEL("equalizer12band", "eq12", "Equalizer 12 Band") +}; + +/// Markus's Pulsator - metadata +struct pulsator_metadata: public plugin_metadata +{ + enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true }; + enum { param_bypass, param_level_in, param_level_out, STEREO_VU_METER_PARAMS, + param_mode, param_freq, param_amount, param_offset, param_mono, param_reset, param_count }; + PLUGIN_NAME_ID_LABEL("pulsator", "pulsator", "Pulsator") +}; + +/// Markus's Saturator - metadata +struct saturator_metadata: public plugin_metadata +{ + enum { in_count = 2, out_count = 2, ins_optional = 1, outs_optional = 1, support_midi = false, require_midi = false, rt_capable = true }; + enum { param_bypass, param_level_in, param_level_out, param_mix, MONO_VU_METER_PARAMS, param_drive, param_blend, param_meter_drive, + param_lp_pre_freq, param_hp_pre_freq, param_lp_post_freq, param_hp_post_freq, + param_p_freq, param_p_level, param_p_q, param_count }; + PLUGIN_NAME_ID_LABEL("saturator", "saturator", "Saturator") +}; +/// Markus's Exciter - metadata +struct exciter_metadata: public plugin_metadata +{ + enum { in_count = 2, out_count = 2, ins_optional = 1, outs_optional = 1, support_midi = false, require_midi = false, rt_capable = true }; + enum { param_bypass, param_level_in, param_level_out, param_amount, MONO_VU_METER_PARAMS, param_drive, param_blend, param_meter_drive, + param_freq, param_listen, param_ceil_active, param_ceil, param_count }; + PLUGIN_NAME_ID_LABEL("exciter", "exciter", "Exciter") +}; +/// Markus's Bass Enhancer - metadata +struct bassenhancer_metadata: public plugin_metadata +{ + enum { in_count = 2, out_count = 2, ins_optional = 1, outs_optional = 1, support_midi = false, require_midi = false, rt_capable = true }; + enum { param_bypass, param_level_in, param_level_out, param_amount, MONO_VU_METER_PARAMS, param_drive, param_blend, param_meter_drive, + param_freq, param_listen, param_floor_active, param_floor, param_count }; + PLUGIN_NAME_ID_LABEL("bassenhancer", "bassenhancer", "Bass Enhancer") +}; +/// Markus's Mono Module - metadata +struct stereo_metadata: public plugin_metadata +{ + enum { in_count = 2, out_count = 2, ins_optional = 1, outs_optional = 1, support_midi = false, require_midi = false, rt_capable = true }; + enum { param_bypass, param_level_in, param_level_out, + STEREO_VU_METER_PARAMS, param_balance_in, param_balance_out, param_softclip, + param_mute_l, param_mute_r, param_phase_l, param_phase_r, + param_mode, param_slev, param_sbal, param_mlev, param_mpan, + param_widener, param_delay, + param_meter_phase, + param_count }; + PLUGIN_NAME_ID_LABEL("stereo", "stereo", "Stereo Tools") +}; +/// Markus's Mono Module - metadata +struct mono_metadata: public plugin_metadata +{ + enum { in_count = 1, out_count = 2, ins_optional = 1, outs_optional = 1, support_midi = false, require_midi = false, rt_capable = true }; + enum { param_bypass, param_level_in, param_level_out, + param_meter_in, param_meter_outL, param_meter_outR, param_clip_in,param_clip_outL, param_clip_outR, + param_balance_out, param_softclip, + param_mute_l, param_mute_r, param_phase_l, param_phase_r, + param_delay, + param_count }; + PLUGIN_NAME_ID_LABEL("mono", "mono", "Mono Input") +}; + +/// Organ - enums for parameter IDs etc. (this mess is caused by organ split between plugin and generic class - which was +/// a bad design decision and should be sorted out some day) XXXKF @todo +struct organ_enums +{ + enum { + par_drawbar1, par_drawbar2, par_drawbar3, par_drawbar4, par_drawbar5, par_drawbar6, par_drawbar7, par_drawbar8, par_drawbar9, + par_frequency1, par_frequency2, par_frequency3, par_frequency4, par_frequency5, par_frequency6, par_frequency7, par_frequency8, par_frequency9, + par_waveform1, par_waveform2, par_waveform3, par_waveform4, par_waveform5, par_waveform6, par_waveform7, par_waveform8, par_waveform9, + par_detune1, par_detune2, par_detune3, par_detune4, par_detune5, par_detune6, par_detune7, par_detune8, par_detune9, + par_phase1, par_phase2, par_phase3, par_phase4, par_phase5, par_phase6, par_phase7, par_phase8, par_phase9, + par_pan1, par_pan2, par_pan3, par_pan4, par_pan5, par_pan6, par_pan7, par_pan8, par_pan9, + par_routing1, par_routing2, par_routing3, par_routing4, par_routing5, par_routing6, par_routing7, par_routing8, par_routing9, + par_foldover, + par_percdecay, par_perclevel, par_percwave, par_percharm, par_percvel2amp, + par_percfmdecay, par_percfmdepth, par_percfmwave, par_percfmharm, par_percvel2fm, + par_perctrigger, par_percstereo, + par_filterchain, + par_filter1type, + par_master, + par_f1cutoff, par_f1res, par_f1env1, par_f1env2, par_f1env3, par_f1keyf, + par_f2cutoff, par_f2res, par_f2env1, par_f2env2, par_f2env3, par_f2keyf, + par_eg1attack, par_eg1decay, par_eg1sustain, par_eg1release, par_eg1velscl, par_eg1ampctl, + par_eg2attack, par_eg2decay, par_eg2sustain, par_eg2release, par_eg2velscl, par_eg2ampctl, + par_eg3attack, par_eg3decay, par_eg3sustain, par_eg3release, par_eg3velscl, par_eg3ampctl, + par_lforate, par_lfoamt, par_lfowet, par_lfophase, par_lfomode, par_lfotype, + par_transpose, par_detune, + par_polyphony, + par_quadenv, + par_pwhlrange, + par_bassfreq, + par_bassgain, + par_treblefreq, + par_treblegain, + param_count + }; + enum organ_waveform { + wave_sine, + wave_sinepl1, wave_sinepl2, wave_sinepl3, + wave_ssaw, wave_ssqr, wave_spls, wave_saw, wave_sqr, wave_pulse, wave_sinepl05, wave_sqr05, wave_halfsin, wave_clvg, wave_bell, wave_bell2, + wave_w1, wave_w2, wave_w3, wave_w4, wave_w5, wave_w6, wave_w7, wave_w8, wave_w9, + wave_dsaw, wave_dsqr, wave_dpls, + wave_count_small, + wave_strings = wave_count_small, + wave_strings2, + wave_sinepad, + wave_bellpad, + wave_space, + wave_choir, + wave_choir2, + wave_choir3, + wave_count, + wave_count_big = wave_count - wave_count_small + }; + enum { + ampctl_none, + ampctl_direct, + ampctl_f1, + ampctl_f2, + ampctl_all, + ampctl_count + }; + enum { + lfotype_allpass = 0, + lfotype_cv1, + lfotype_cv2, + lfotype_cv3, + lfotype_cvfull, + lfotype_count + }; + enum { + lfomode_off = 0, + lfomode_direct, + lfomode_filter1, + lfomode_filter2, + lfomode_voice, + lfomode_global, + lfomode_count + }; + enum { + perctrig_first = 0, + perctrig_each, + perctrig_eachplus, + perctrig_polyphonic, + perctrig_count + }; +}; + +/// Organ - metadata +struct organ_metadata: public organ_enums, public plugin_metadata +{ + enum { in_count = 0, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = true, require_midi = true, rt_capable = true }; + PLUGIN_NAME_ID_LABEL("organ", "organ", "Organ") + +public: + plugin_command_info *get_commands(); + const char *const *get_configure_vars() const; +}; + +/// FluidSynth - metadata +struct fluidsynth_metadata: public plugin_metadata +{ + enum { par_master, par_interpolation, par_reverb, par_chorus, param_count }; + enum { in_count = 0, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = true, require_midi = true, rt_capable = false }; + PLUGIN_NAME_ID_LABEL("fluidsynth", "fluidsynth", "Fluidsynth") + +public: + const char *const *get_configure_vars() const; +}; + +/// Wavetable - metadata +struct wavetable_metadata: public plugin_metadata +{ + enum { + wt_fmshiny, + wt_fmshiny2, + wt_rezo, + wt_metal, + wt_bell, + wt_blah, + wt_pluck, + wt_stretch, + wt_stretch2, + wt_hardsync, + wt_hardsync2, + wt_softsync, + wt_bell2, + wt_bell3, + wt_tine, + wt_tine2, + wt_clav, + wt_clav2, + wt_gtr, + wt_gtr2, + wt_gtr3, + wt_gtr4, + wt_gtr5, + wt_reed, + wt_reed2, + wt_silver, + wt_brass, + wt_multi, + wt_multi2, + wt_count + }; + enum { + modsrc_none, + modsrc_velocity, + modsrc_pressure, + modsrc_modwheel, + modsrc_env1, + modsrc_env2, + modsrc_env3, + modsrc_count, + }; + enum { + moddest_none, + moddest_attenuation, + moddest_oscmix, + moddest_cutoff, + moddest_resonance, + moddest_o1shift, + moddest_o2shift, + moddest_o1detune, + moddest_o2detune, + moddest_count, + }; + enum { + par_o1wave, par_o1offset, par_o1transpose, par_o1detune, par_o1level, + par_o2wave, par_o2offset, par_o2transpose, par_o2detune, par_o2level, + par_eg1attack, par_eg1decay, par_eg1sustain, par_eg1fade, par_eg1release, par_eg1velscl, + par_eg2attack, par_eg2decay, par_eg2sustain, par_eg2fade, par_eg2release, par_eg2velscl, + par_eg3attack, par_eg3decay, par_eg3sustain, par_eg3fade, par_eg3release, par_eg3velscl, + par_pwhlrange, + param_count }; + enum { in_count = 0, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = true, require_midi = true, rt_capable = true }; + enum { mod_matrix_slots = 10 }; + enum { step_size = 64 }; + PLUGIN_NAME_ID_LABEL("wavetable", "wavetable", "Wavetable") + mod_matrix_metadata mm_metadata; + + wavetable_metadata(); + /// Lookup of table edit interface + virtual const table_metadata_iface *get_table_metadata_iface(const char *key) const { if (!strcmp(key, "mod_matrix")) return &mm_metadata; else return NULL; } +}; + +}; + +#endif diff --git a/plugins/LadspaEffect/calf/src/calf/modmatrix.h b/plugins/LadspaEffect/calf/src/calf/modmatrix.h new file mode 100644 index 000000000..08b44cdf3 --- /dev/null +++ b/plugins/LadspaEffect/calf/src/calf/modmatrix.h @@ -0,0 +1,125 @@ +/* Calf DSP Library + * Modulation matrix boilerplate code. + * + * Copyright (C) 2009 Krzysztof Foltman + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this program; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02111-1307, USA. + */ +#ifndef __CALF_MODMATRIX_H +#define __CALF_MODMATRIX_H + +#include "giface.h" +#include + +namespace dsp { + +/// Single entry in modulation matrix +struct modulation_entry +{ + /// Mapped source + int src1; + /// Source mapping mode + calf_plugins::mod_matrix_metadata::mapping_mode mapping; + /// Unmapped modulating source + int src2; + /// Modulation amount + float amount; + /// Modulation destination + int dest; + + modulation_entry() { + reset(); + } + + /// Reset the row to default + void reset() { + src1 = 0; + src2 = 0; + mapping = calf_plugins::mod_matrix_metadata::map_positive; + amount = 0.f; + dest = 0; + } +}; + +}; + +namespace calf_plugins { + +class mod_matrix_impl +{ +protected: + dsp::modulation_entry *matrix; + mod_matrix_metadata *metadata; + unsigned int matrix_rows; + /// Polynomials for different scaling modes (1, x, x^2) + static const float scaling_coeffs[calf_plugins::mod_matrix_metadata::map_type_count][3]; + +public: + mod_matrix_impl(dsp::modulation_entry *_matrix, calf_plugins::mod_matrix_metadata *_metadata); + + /// Process modulation matrix, calculate outputs from inputs + inline void calculate_modmatrix(float *moddest, int moddest_count, float *modsrc) + { + for (int i = 0; i < moddest_count; i++) + moddest[i] = 0; + for (unsigned int i = 0; i < matrix_rows; i++) + { + dsp::modulation_entry &slot = matrix[i]; + if (slot.dest) { + float value = modsrc[slot.src1]; + const float *c = scaling_coeffs[slot.mapping]; + value = c[0] + c[1] * value + c[2] * value * value; + moddest[slot.dest] += value * modsrc[slot.src2] * slot.amount; + } + } + } + void send_configures(send_configure_iface *); + char *configure(const char *key, const char *value); + + /// Return a list of configure variables used by the modulation matrix + template + static const char **get_configure_vars() + { + static std::vector names_vector; + static const char *names[rows * 5 + 1]; + + if (names[0] == NULL) + { + for (int i = 0; i < rows; i++) + { + for (int j = 0; j < 5; j++) + { + char buf[40]; + sprintf(buf, "mod_matrix:%d,%d", i, j); + names_vector.push_back(buf); + } + } + for (size_t i = 0; i < names_vector.size(); i++) + names[i] = names_vector[i].c_str(); + names[names_vector.size()] = NULL; + } + + return names; + } + +private: + std::string get_cell(int row, int column) const; + void set_cell(int row, int column, const std::string &src, std::string &error); +}; + +}; + +#endif diff --git a/plugins/LadspaEffect/calf/src/calf/modulelist.h b/plugins/LadspaEffect/calf/src/calf/modulelist.h new file mode 100644 index 000000000..8425794f2 --- /dev/null +++ b/plugins/LadspaEffect/calf/src/calf/modulelist.h @@ -0,0 +1,35 @@ +#ifdef PER_MODULE_ITEM + PER_MODULE_ITEM(filter, false, "filter") + PER_MODULE_ITEM(filterclavier, false, "filterclavier") + PER_MODULE_ITEM(flanger, false, "flanger") + PER_MODULE_ITEM(reverb, false, "reverb") + PER_MODULE_ITEM(monosynth, true, "monosynth") + PER_MODULE_ITEM(vintage_delay, false, "vintagedelay") + PER_MODULE_ITEM(organ, true, "organ") + PER_MODULE_ITEM(rotary_speaker, false, "rotaryspeaker") + PER_MODULE_ITEM(phaser, false, "phaser") + PER_MODULE_ITEM(multichorus, false, "multichorus") + PER_MODULE_ITEM(compressor, false, "compressor") + PER_MODULE_ITEM(sidechaincompressor, false, "sidechaincompressor") + PER_MODULE_ITEM(multibandcompressor, false, "multibandcompressor") + PER_MODULE_ITEM(deesser, false, "deesser") + PER_MODULE_ITEM(gate, false, "gate") + PER_MODULE_ITEM(sidechaingate, false, "sidechaingate") + PER_MODULE_ITEM(multibandgate, false, "multibandgate") + PER_MODULE_ITEM(limiter, false, "limiter") + PER_MODULE_ITEM(multibandlimiter, false, "multibandlimiter") + PER_MODULE_ITEM(pulsator, false, "pulsator") + PER_MODULE_ITEM(equalizer5band, false, "eq5") + PER_MODULE_ITEM(equalizer8band, false, "eq8") + PER_MODULE_ITEM(equalizer12band, false, "eq12") + PER_MODULE_ITEM(saturator, false, "saturator") + PER_MODULE_ITEM(exciter, false, "exciter") + PER_MODULE_ITEM(bassenhancer, false, "bassenhancer") + PER_MODULE_ITEM(mono, false, "mono") + PER_MODULE_ITEM(stereo, false, "stereo") +#ifdef ENABLE_EXPERIMENTAL + PER_MODULE_ITEM(fluidsynth, true, "fluidsynth") + PER_MODULE_ITEM(wavetable, true, "wavetable") +#endif +#undef PER_MODULE_ITEM +#endif diff --git a/plugins/LadspaEffect/calf/src/calf/modules.h b/plugins/LadspaEffect/calf/src/calf/modules.h new file mode 100644 index 000000000..fb9ba7790 --- /dev/null +++ b/plugins/LadspaEffect/calf/src/calf/modules.h @@ -0,0 +1,303 @@ +/* Calf DSP plugin pack + * Assorted plugins + * + * Copyright (C) 2001-2010 Krzysztof Foltman, Markus Schmidt, Thor Harald Johansen and others + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this program; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02111-1307, USA. + */ +#ifndef CALF_MODULES_H +#define CALF_MODULES_H + +#include +#include +#include "biquad.h" +#include "inertia.h" +#include "audio_fx.h" +#include "giface.h" +#include "metadata.h" +#include "loudness.h" + +namespace calf_plugins { + +struct ladspa_plugin_info; + +class reverb_audio_module: public audio_module +{ +public: + dsp::reverb reverb; + dsp::simple_delay<16384, dsp::stereo_sample > pre_delay; + dsp::onepole left_lo, right_lo, left_hi, right_hi; + uint32_t srate; + dsp::gain_smoothing amount, dryamount; + int predelay_amt; + float meter_wet, meter_out; + uint32_t clip; + + void params_changed(); + uint32_t process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask); + void activate(); + void set_sample_rate(uint32_t sr); + void deactivate(); +}; + +class vintage_delay_audio_module: public audio_module +{ +public: + // 1MB of delay memory per channel... uh, RAM is cheap + enum { MAX_DELAY = 262144, ADDR_MASK = MAX_DELAY - 1 }; + enum { MIXMODE_STEREO, MIXMODE_PINGPONG, MIXMODE_LR, MIXMODE_RL }; + float buffers[2][MAX_DELAY]; + int bufptr, deltime_l, deltime_r, mixmode, medium, old_medium; + /// number of table entries written (value is only important when it is less than MAX_DELAY, which means that the buffer hasn't been totally filled yet) + int age; + + dsp::gain_smoothing amt_left, amt_right, fb_left, fb_right, dry, chmix; + + dsp::biquad_d2 biquad_left[2], biquad_right[2]; + + uint32_t srate; + + vintage_delay_audio_module(); + + void params_changed(); + void activate(); + void deactivate(); + void set_sample_rate(uint32_t sr); + void calc_filters(); + uint32_t process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask); +}; + +template +class filter_module_with_inertia: public audio_module, public FilterClass +{ +public: + /// These are pointers to the ins, outs, params arrays in the main class + typedef filter_module_with_inertia inertia_filter_module; + using audio_module::ins; + using audio_module::outs; + using audio_module::params; + + dsp::inertia inertia_cutoff, inertia_resonance, inertia_gain; + dsp::once_per_n timer; + bool is_active; + mutable volatile int last_generation, last_calculated_generation; + + filter_module_with_inertia(float **ins, float **outs, float **params) + : inertia_cutoff(dsp::exponential_ramp(128), 20) + , inertia_resonance(dsp::exponential_ramp(128), 20) + , inertia_gain(dsp::exponential_ramp(128), 1.0) + , timer(128) + , is_active(false) + , last_generation(-1) + , last_calculated_generation(-2) + {} + + void calculate_filter() + { + float freq = inertia_cutoff.get_last(); + // printf("freq=%g inr.cnt=%d timer.left=%d\n", freq, inertia_cutoff.count, timer.left); + // XXXKF this is resonance of a single stage, obviously for three stages, resonant gain will be different + float q = inertia_resonance.get_last(); + int mode = dsp::fastf2i_drm(*params[Metadata::par_mode]); + // printf("freq = %f q = %f mode = %d\n", freq, q, mode); + + int inertia = dsp::fastf2i_drm(*params[Metadata::par_inertia]); + if (inertia != inertia_cutoff.ramp.length()) { + inertia_cutoff.ramp.set_length(inertia); + inertia_resonance.ramp.set_length(inertia); + inertia_gain.ramp.set_length(inertia); + } + + FilterClass::calculate_filter(freq, q, mode, inertia_gain.get_last()); + } + + virtual void params_changed() + { + calculate_filter(); + } + + void on_timer() + { + int gen = last_generation; + inertia_cutoff.step(); + inertia_resonance.step(); + inertia_gain.step(); + calculate_filter(); + last_calculated_generation = gen; + } + + void activate() + { + params_changed(); + FilterClass::filter_activate(); + timer = dsp::once_per_n(FilterClass::srate / 1000); + timer.start(); + is_active = true; + } + + void set_sample_rate(uint32_t sr) + { + FilterClass::srate = sr; + } + + + void deactivate() + { + is_active = false; + } + + uint32_t process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask) { +// printf("sr=%d cutoff=%f res=%f mode=%f\n", FilterClass::srate, *params[Metadata::par_cutoff], *params[Metadata::par_resonance], *params[Metadata::par_mode]); + uint32_t ostate = 0; + numsamples += offset; + while(offset < numsamples) { + uint32_t numnow = numsamples - offset; + // if inertia's inactive, we can calculate the whole buffer at once + if (inertia_cutoff.active() || inertia_resonance.active() || inertia_gain.active()) + numnow = timer.get(numnow); + + if (outputs_mask & 1) { + ostate |= FilterClass::process_channel(0, ins[0] + offset, outs[0] + offset, numnow, inputs_mask & 1); + } + if (outputs_mask & 2) { + ostate |= FilterClass::process_channel(1, ins[1] + offset, outs[1] + offset, numnow, inputs_mask & 2); + } + + if (timer.elapsed()) { + on_timer(); + } + offset += numnow; + } + return ostate; + } +}; + +/// biquad filter module +class filter_audio_module: + public filter_module_with_inertia, + public frequency_response_line_graph +{ + mutable float old_cutoff, old_resonance, old_mode; +public: + filter_audio_module() + : filter_module_with_inertia(ins, outs, params) + { + last_generation = 0; + old_mode = old_resonance = old_cutoff = -1; + } + void params_changed() + { + inertia_cutoff.set_inertia(*params[par_cutoff]); + inertia_resonance.set_inertia(*params[par_resonance]); + inertia_filter_module::params_changed(); + } + + bool get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const; + int get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline) const; +}; + +/// Filterclavier --- MIDI controlled filter by Hans Baier +class filterclavier_audio_module: + public filter_module_with_inertia, + public frequency_response_line_graph +{ + using audio_module::ins; + using audio_module::outs; + using audio_module::params; + + const float min_gain; + const float max_gain; + + int last_note; + int last_velocity; + +public: + filterclavier_audio_module(); + void params_changed(); + void activate(); + void set_sample_rate(uint32_t sr); + void deactivate(); + + /// MIDI control + virtual void note_on(int channel, int note, int vel); + virtual void note_off(int channel, int note, int vel); + + bool get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const; + +private: + void adjust_gain_according_to_filter_mode(int velocity); +}; + + +#define MATH_E 2.718281828 +class mono_audio_module: + public audio_module +{ + typedef mono_audio_module AM; + uint32_t srate; + bool active; + + uint32_t clip_in, clip_outL, clip_outR; + float meter_in, meter_outL, meter_outR; + + float * buffer; + unsigned int pos; + unsigned int buffer_size; + + void softclip(float &s) { + int ph = s / fabs(s); + s = s > 0.63 ? ((0.63 + 0.36) * ph * (1 - pow(MATH_E, (1.f / 3) * (0.63 + s * ph)))) : s; + } +public: + mono_audio_module(); + void params_changed(); + void activate(); + void set_sample_rate(uint32_t sr); + void deactivate(); + uint32_t process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask); +}; + +class stereo_audio_module: + public audio_module +{ + typedef stereo_audio_module AM; + float LL, LR, RL, RR; + uint32_t srate; + bool active; + + uint32_t clip_inL, clip_inR, clip_outL, clip_outR; + float meter_inL, meter_inR, meter_outL, meter_outR, meter_phase; + + float * buffer; + unsigned int pos; + unsigned int buffer_size; + + void softclip(float &s) { + int ph = s / fabs(s); + s = s > 0.63 ? ((0.63 + 0.36) * ph * (1 - pow(MATH_E, (1.f / 3) * (0.63 + s * ph)))) : s; + } +public: + stereo_audio_module(); + void params_changed(); + void activate(); + void set_sample_rate(uint32_t sr); + void deactivate(); + uint32_t process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask); +}; + + +}; +#endif diff --git a/plugins/LadspaEffect/calf/src/calf/modules_comp.h b/plugins/LadspaEffect/calf/src/calf/modules_comp.h new file mode 100644 index 000000000..decdf2097 --- /dev/null +++ b/plugins/LadspaEffect/calf/src/calf/modules_comp.h @@ -0,0 +1,334 @@ +/* Calf DSP plugin pack + * Compression related plugins + * + * Copyright (C) 2001-2010 Krzysztof Foltman, Markus Schmidt, Thor Harald Johansen and others + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this program; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02111-1307, USA. + */ +#ifndef CALF_MODULES_COMP_H +#define CALF_MODULES_COMP_H + +#include +#include +#include "biquad.h" +#include "inertia.h" +#include "audio_fx.h" +#include "giface.h" +#include "loudness.h" +#include "metadata.h" +#include "plugin_tools.h" + +namespace calf_plugins { + +/// Not a true _audio_module style class, just pretends to be one! +/// Main gain reduction routine by Thor called by various audio modules + +class gain_reduction_audio_module +{ +private: + float linSlope, detected, kneeSqrt, kneeStart, linKneeStart, kneeStop; + float compressedKneeStop, adjKneeStart, thres; + float attack, release, threshold, ratio, knee, makeup, detection, stereo_link, bypass, mute, meter_out, meter_comp; + mutable float old_threshold, old_ratio, old_knee, old_makeup, old_bypass, old_mute, old_detection, old_stereo_link; + mutable volatile int last_generation; + uint32_t srate; + bool is_active; + inline float output_level(float slope) const; + inline float output_gain(float linSlope, bool rms) const; +public: + gain_reduction_audio_module(); + void set_params(float att, float rel, float thr, float rat, float kn, float mak, float det, float stl, float byp, float mu); + void update_curve(); + void process(float &left, float &right, const float *det_left = NULL, const float *det_right = NULL); + void activate(); + void deactivate(); + int id; + void set_sample_rate(uint32_t sr); + float get_output_level(); + float get_comp_level(); + bool get_graph(int subindex, float *data, int points, cairo_iface *context) const; + bool get_dot(int subindex, float &x, float &y, int &size, cairo_iface *context) const; + bool get_gridline(int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const; + int get_changed_offsets(int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline) const; +}; + +/// Not a true _audio_module style class, just pretends to be one! +/// Main gate routine by Damien called by various audio modules +class expander_audio_module { +private: + float linSlope, peak, detected, kneeSqrt, kneeStart, linKneeStart, kneeStop, linKneeStop; + float compressedKneeStop, adjKneeStart, range, thres, attack_coeff, release_coeff; + float attack, release, threshold, ratio, knee, makeup, detection, stereo_link, bypass, mute, meter_out, meter_gate; + mutable float old_threshold, old_ratio, old_knee, old_makeup, old_bypass, old_range, old_trigger, old_mute, old_detection, old_stereo_link; + mutable volatile int last_generation; + inline float output_level(float slope) const; + inline float output_gain(float linSlope, bool rms) const; +public: + uint32_t srate; + bool is_active; + expander_audio_module(); + void set_params(float att, float rel, float thr, float rat, float kn, float mak, float det, float stl, float byp, float mu, float ran); + void update_curve(); + void process(float &left, float &right, const float *det_left = NULL, const float *det_right = NULL); + void activate(); + void deactivate(); + int id; + void set_sample_rate(uint32_t sr); + float get_output_level(); + float get_expander_level(); + bool get_graph(int subindex, float *data, int points, cairo_iface *context) const; + bool get_dot(int subindex, float &x, float &y, int &size, cairo_iface *context) const; + bool get_gridline(int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const; + int get_changed_offsets(int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline) const; +}; + +/// Compressor by Thor +class compressor_audio_module: public audio_module, public line_graph_iface { +private: + typedef compressor_audio_module AM; + stereo_in_out_metering meters; + gain_reduction_audio_module compressor; +public: + typedef std::complex cfloat; + uint32_t srate; + bool is_active; + mutable volatile int last_generation, last_calculated_generation; + compressor_audio_module(); + void activate(); + void deactivate(); + void params_changed(); + void set_sample_rate(uint32_t sr); + uint32_t process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask); + bool get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const; + bool get_dot(int index, int subindex, float &x, float &y, int &size, cairo_iface *context) const; + bool get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const; + int get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline) const; +}; + +/// Sidecain Compressor by Markus Schmidt (based on Thor's compressor and Krzysztof's filters) +class sidechaincompressor_audio_module: public audio_module, public frequency_response_line_graph { +private: + typedef sidechaincompressor_audio_module AM; + enum CalfScModes { + WIDEBAND, + DEESSER_WIDE, + DEESSER_SPLIT, + DERUMBLER_WIDE, + DERUMBLER_SPLIT, + WEIGHTED_1, + WEIGHTED_2, + WEIGHTED_3, + BANDPASS_1, + BANDPASS_2 + }; + enum CalfScRoute { + STEREO, + RIGHT_LEFT, + LEFT_RIGHT + }; + mutable float f1_freq_old, f2_freq_old, f1_level_old, f2_level_old; + mutable float f1_freq_old1, f2_freq_old1, f1_level_old1, f2_level_old1; + CalfScModes sc_mode; + mutable CalfScModes sc_mode_old, sc_mode_old1; + float f1_active, f2_active; + stereo_in_out_metering meters; + gain_reduction_audio_module compressor; + dsp::biquad_d2 f1L, f1R, f2L, f2R; +public: + typedef std::complex cfloat; + uint32_t srate; + bool is_active; + mutable volatile int last_generation, last_calculated_generation; + sidechaincompressor_audio_module(); + void activate(); + void deactivate(); + void params_changed(); + cfloat h_z(const cfloat &z) const; + float freq_gain(int index, double freq, uint32_t sr) const; + void set_sample_rate(uint32_t sr); + uint32_t process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask); + bool get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const; + bool get_dot(int index, int subindex, float &x, float &y, int &size, cairo_iface *context) const; + bool get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const; + int get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline) const; +}; + +/// Multibandcompressor by Markus Schmidt (based on Thor's compressor and Krzysztof's filters) +class multibandcompressor_audio_module: public audio_module, public line_graph_iface { +private: + typedef multibandcompressor_audio_module AM; + static const int strips = 4; + bool solo[strips]; + bool no_solo; + uint32_t clip_inL, clip_inR, clip_outL, clip_outR; + float meter_inL, meter_inR, meter_outL, meter_outR; + gain_reduction_audio_module strip[strips]; + dsp::biquad_d2 lpL[strips - 1][3], lpR[strips - 1][3], hpL[strips - 1][3], hpR[strips - 1][3]; + float freq_old[strips - 1], sep_old[strips - 1], q_old[strips - 1]; + int mode, mode_old; +public: + uint32_t srate; + bool is_active; + multibandcompressor_audio_module(); + void activate(); + void deactivate(); + void params_changed(); + uint32_t process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask); + void set_sample_rate(uint32_t sr); + const gain_reduction_audio_module *get_strip_by_param_index(int index) const; + virtual bool get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const; + virtual bool get_dot(int index, int subindex, float &x, float &y, int &size, cairo_iface *context) const; + virtual bool get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const; + virtual int get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline) const; +}; + +/// Deesser by Markus Schmidt (based on Thor's compressor and Krzyexpander_audio_modulesztof's filters) +class deesser_audio_module: public audio_module, public frequency_response_line_graph { +private: + enum CalfDeessModes { + WIDE, + SPLIT + }; + mutable float f1_freq_old, f2_freq_old, f1_level_old, f2_level_old, f2_q_old; + mutable float f1_freq_old1, f2_freq_old1, f1_level_old1, f2_level_old1, f2_q_old1; + uint32_t detected_led; + float detected, clip_out; + uint32_t clip_led; + gain_reduction_audio_module compressor; + dsp::biquad_d2 hpL, hpR, lpL, lpR, pL, pR; +public: + uint32_t srate; + bool is_active; + mutable volatile int last_generation, last_calculated_generation; + deesser_audio_module(); + void activate(); + void deactivate(); + void params_changed(); + float freq_gain(int index, double freq, uint32_t sr) const + { + return hpL.freq_gain(freq, sr) * pL.freq_gain(freq, sr); + } + void set_sample_rate(uint32_t sr); + uint32_t process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask); + bool get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const; + bool get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const; + int get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline) const; +}; + +/// Gate by Damien +class gate_audio_module: public audio_module, public line_graph_iface { +private: + typedef gate_audio_module AM; + stereo_in_out_metering meters; + expander_audio_module gate; +public: + typedef std::complex cfloat; + uint32_t srate; + bool is_active; + mutable volatile int last_generation, last_calculated_generation; + gate_audio_module(); + void activate(); + void deactivate(); + void params_changed(); + void set_sample_rate(uint32_t sr); + uint32_t process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask); + bool get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const; + bool get_dot(int index, int subindex, float &x, float &y, int &size, cairo_iface *context) const; + bool get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const; + int get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline) const; +}; + +/// Sidecain Gate by Markus Schmidt (based on Damiens's gate and Krzysztof's filters) +class sidechaingate_audio_module: public audio_module, public frequency_response_line_graph { +private: + typedef sidechaingate_audio_module AM; + enum CalfScModes { + WIDEBAND, + HIGHGATE_WIDE, + HIGHGATE_SPLIT, + LOWGATE_WIDE, + LOWGATE_SPLIT, + WEIGHTED_1, + WEIGHTED_2, + WEIGHTED_3, + BANDPASS_1, + BANDPASS_2 + }; + enum CalfScRoute { + STEREO, + RIGHT_LEFT, + LEFT_RIGHT + }; + mutable float f1_freq_old, f2_freq_old, f1_level_old, f2_level_old; + mutable float f1_freq_old1, f2_freq_old1, f1_level_old1, f2_level_old1; + CalfScModes sc_mode; + mutable CalfScModes sc_mode_old, sc_mode_old1; + float f1_active, f2_active; + stereo_in_out_metering meters; + expander_audio_module gate; + dsp::biquad_d2 f1L, f1R, f2L, f2R; +public: + typedef std::complex cfloat; + uint32_t srate; + bool is_active; + mutable volatile int last_generation, last_calculated_generation; + sidechaingate_audio_module(); + void activate(); + void deactivate(); + void params_changed(); + cfloat h_z(const cfloat &z) const; + float freq_gain(int index, double freq, uint32_t sr) const; + void set_sample_rate(uint32_t sr); + uint32_t process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask); + bool get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const; + bool get_dot(int index, int subindex, float &x, float &y, int &size, cairo_iface *context) const; + bool get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const; + int get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline) const; +}; + + +/// Multibandgate by Markus Schmidt (based on Damiens's gate and Krzysztof's filters) +class multibandgate_audio_module: public audio_module, public line_graph_iface { +private: + typedef multibandgate_audio_module AM; + static const int strips = 4; + bool solo[strips]; + bool no_solo; + uint32_t clip_inL, clip_inR, clip_outL, clip_outR; + float meter_inL, meter_inR, meter_outL, meter_outR; + expander_audio_module gate[strips]; + dsp::biquad_d2 lpL[strips - 1][3], lpR[strips - 1][3], hpL[strips - 1][3], hpR[strips - 1][3]; + float freq_old[strips - 1], sep_old[strips - 1], q_old[strips - 1]; + int mode, mode_old; +public: + uint32_t srate; + bool is_active; + multibandgate_audio_module(); + void activate(); + void deactivate(); + void params_changed(); + uint32_t process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask); + void set_sample_rate(uint32_t sr); + const expander_audio_module *get_strip_by_param_index(int index) const; + virtual bool get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const; + virtual bool get_dot(int index, int subindex, float &x, float &y, int &size, cairo_iface *context) const; + virtual bool get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const; + virtual int get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline) const; +}; + +}; + +#endif diff --git a/plugins/LadspaEffect/calf/src/calf/modules_dev.h b/plugins/LadspaEffect/calf/src/calf/modules_dev.h new file mode 100644 index 000000000..628fcd539 --- /dev/null +++ b/plugins/LadspaEffect/calf/src/calf/modules_dev.h @@ -0,0 +1,113 @@ +/* Calf DSP Library + * Prototype audio modules + * + * Copyright (C) 2008 Thor Harald Johansen + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this program; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02111-1307, USA. + */ +#ifndef __CALF_MODULES_DEV_H +#define __CALF_MODULES_DEV_H + +#include + +#if ENABLE_EXPERIMENTAL +#include +#endif + +namespace calf_plugins { + +#if ENABLE_EXPERIMENTAL + +/// Tiny wrapper for fluidsynth +class fluidsynth_audio_module: public audio_module +{ +protected: + /// Current sample rate + uint32_t srate; + /// FluidSynth Settings object + fluid_settings_t *settings; + /// FluidSynth Synth object + fluid_synth_t *synth; + /// Soundfont filename + std::string soundfont; + /// Soundfont filename (as received from Fluidsynth) + std::string soundfont_name; + /// TAB-separated preset list (preset+128*bank TAB preset name LF) + std::string soundfont_preset_list; + /// FluidSynth assigned SoundFont ID + int sfid; + /// Map of preset+128*bank to preset name + std::map sf_preset_names; + /// Last selected preset+128*bank + uint32_t last_selected_preset; + /// Serial number of status data + int status_serial; + /// Preset number to set on next process() call + volatile int set_preset; + + /// Update last_selected_preset based on synth object state + void update_preset_num(); + /// Create a fluidsynth object and load the current soundfont + fluid_synth_t *create_synth(int &new_sfid); +public: + /// Constructor to initialize handles to NULL + fluidsynth_audio_module(); + + void post_instantiate(); + void set_sample_rate(uint32_t sr) { srate = sr; } + /// Handle MIDI Note On message (by sending it to fluidsynth) + void note_on(int channel, int note, int vel); + /// Handle MIDI Note Off message (by sending it to fluidsynth) + void note_off(int channel, int note, int vel); + /// Handle pitch bend message. + inline void pitch_bend(int channel, int value) + { + fluid_synth_pitch_bend(synth, 0, value + 0x2000); + } + /// Handle control change messages. + void control_change(int channel, int controller, int value); + /// Handle program change messages. + void program_change(int channel, int program); + + /// Update variables from control ports. + void params_changed() { + } + void activate(); + void deactivate(); + /// No CV inputs for now + bool is_cv(int param_no) { return false; } + /// Practically all the stuff here is noisy... for now + bool is_noisy(int param_no) { return true; } + /// Main processing function + uint32_t process(uint32_t offset, uint32_t nsamples, uint32_t inputs_mask, uint32_t outputs_mask); + /// DSSI-style configure function for handling string port data + char *configure(const char *key, const char *value); + void send_configures(send_configure_iface *sci); + int send_status_updates(send_updates_iface *sui, int last_serial); + uint32_t message_run(const void *valid_inputs, void *output_ports) { + // silence a default printf (which is kind of a warning about unhandled message_run) + return 0; + } + ~fluidsynth_audio_module(); +}; + + + +#endif + +}; + +#endif diff --git a/plugins/LadspaEffect/calf/src/calf/modules_dist.h b/plugins/LadspaEffect/calf/src/calf/modules_dist.h new file mode 100644 index 000000000..2c46caa78 --- /dev/null +++ b/plugins/LadspaEffect/calf/src/calf/modules_dist.h @@ -0,0 +1,101 @@ +/* Calf DSP plugin pack + * Distortion related plugins + * + * Copyright (C) 2001-2010 Krzysztof Foltman, Markus Schmidt, Thor Harald Johansen and others + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this program; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02111-1307, USA. + */ +#ifndef CALF_MODULES_DIST_H +#define CALF_MODULES_DIST_H + +#include +#include +#include "biquad.h" +#include "inertia.h" +#include "audio_fx.h" +#include "giface.h" +#include "metadata.h" +#include "plugin_tools.h" + +namespace calf_plugins { + +/// Saturator by Markus Schmidt (based on Krzysztof's filters and Tom's distortion algorythm) +class saturator_audio_module: public audio_module { +private: + float hp_pre_freq_old, lp_pre_freq_old; + float hp_post_freq_old, lp_post_freq_old; + float p_level_old, p_freq_old, p_q_old; + stereo_in_out_metering meters; + float meter_drive; + dsp::biquad_d2 lp[2][4], hp[2][4]; + dsp::biquad_d2 p[2]; + dsp::tap_distortion dist[2]; +public: + uint32_t srate; + bool is_active; + saturator_audio_module(); + void activate(); + void deactivate(); + void params_changed(); + void set_sample_rate(uint32_t sr); + uint32_t process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask); +}; + +/// Exciter by Markus Schmidt (based on Krzysztof's filters and Tom's distortion algorythm) +class exciter_audio_module: public audio_module { +private: + float freq_old, ceil_old; + bool ceil_active_old; + stereo_in_out_metering meters; + float meter_drive; + dsp::biquad_d2 hp[2][4]; + dsp::biquad_d2 lp[2][2]; + dsp::tap_distortion dist[2]; +public: + uint32_t srate; + bool is_active; + exciter_audio_module(); + void activate(); + void deactivate(); + void params_changed(); + void set_sample_rate(uint32_t sr); + uint32_t process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask); +}; + +/// Bass Enhancer by Markus Schmidt (based on Krzysztof's filters and Tom's distortion algorythm) +class bassenhancer_audio_module: public audio_module { +private: + float freq_old, floor_old; + bool floor_active_old; + stereo_in_out_metering meters; + float meter_drive; + dsp::biquad_d2 lp[2][4]; + dsp::biquad_d2 hp[2][2]; + dsp::tap_distortion dist[2]; +public: + uint32_t srate; + bool is_active; + bassenhancer_audio_module(); + void activate(); + void deactivate(); + void params_changed(); + void set_sample_rate(uint32_t sr); + uint32_t process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask); +}; + +}; + +#endif diff --git a/plugins/LadspaEffect/calf/src/calf/modules_eq.h b/plugins/LadspaEffect/calf/src/calf/modules_eq.h new file mode 100644 index 000000000..61c6c2856 --- /dev/null +++ b/plugins/LadspaEffect/calf/src/calf/modules_eq.h @@ -0,0 +1,90 @@ +/* Calf DSP plugin pack + * Equalization related plugins + * + * Copyright (C) 2001-2010 Krzysztof Foltman, Markus Schmidt, Thor Harald Johansen and others + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this program; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02111-1307, USA. + */ +#ifndef CALF_MODULES_EQ_H +#define CALF_MODULES_EQ_H + +#include +#include +#include "biquad.h" +#include "inertia.h" +#include "audio_fx.h" +#include "giface.h" +#include "metadata.h" +#include "plugin_tools.h" + +namespace calf_plugins { + +/// Equalizer N Band by Markus Schmidt (based on Krzysztof's filters) +template +class equalizerNband_audio_module: public audio_module, public frequency_response_line_graph { +public: + typedef audio_module AM; + using AM::ins; + using AM::outs; + using AM::params; + using AM::in_count; + using AM::out_count; + using AM::param_count; + using AM::PeakBands; +private: + enum { graph_param_count = BaseClass::last_graph_param - BaseClass::first_graph_param + 1, params_per_band = AM::param_p2_active - AM::param_p1_active }; + float hp_mode_old, hp_freq_old; + float lp_mode_old, lp_freq_old; + float ls_level_old, ls_freq_old; + float hs_level_old, hs_freq_old; + float p_level_old[PeakBands], p_freq_old[PeakBands], p_q_old[PeakBands]; + mutable float old_params_for_graph[graph_param_count]; + dual_in_out_metering meters; + CalfEqMode hp_mode, lp_mode; + dsp::biquad_d2 hp[3][2], lp[3][2]; + dsp::biquad_d2 lsL, lsR, hsL, hsR; + dsp::biquad_d2 pL[PeakBands], pR[PeakBands]; + + inline void process_hplp(float &left, float &right); +public: + typedef std::complex cfloat; + uint32_t srate; + bool is_active; + mutable volatile int last_generation, last_calculated_generation; + equalizerNband_audio_module(); + void activate(); + void deactivate(); + + void params_changed(); + float freq_gain(int index, double freq, uint32_t sr) const; + void set_sample_rate(uint32_t sr) + { + srate = sr; + meters.set_sample_rate(sr); + } + uint32_t process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask); + bool get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const; + bool get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const; + int get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline) const; +}; + +typedef equalizerNband_audio_module equalizer5band_audio_module; +typedef equalizerNband_audio_module equalizer8band_audio_module; +typedef equalizerNband_audio_module equalizer12band_audio_module; + +}; + +#endif diff --git a/plugins/LadspaEffect/calf/src/calf/modules_limit.h b/plugins/LadspaEffect/calf/src/calf/modules_limit.h new file mode 100644 index 000000000..d5d4b9a52 --- /dev/null +++ b/plugins/LadspaEffect/calf/src/calf/modules_limit.h @@ -0,0 +1,98 @@ +/* Calf DSP plugin pack + * Limiter related plugins + * + * Copyright (C) 2001-2010 Krzysztof Foltman, Markus Schmidt, Thor Harald Johansen and others + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this program; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02111-1307, USA. + */ +#ifndef CALF_MODULES_LIMIT_H +#define CALF_MODULES_LIMIT_H + +#include +#include +#include "biquad.h" +#include "inertia.h" +#include "audio_fx.h" +#include "giface.h" +#include "metadata.h" +#include "plugin_tools.h" + +namespace calf_plugins { + +/// Limiter by Markus Schmidt and Christian Holschuh +class limiter_audio_module: public audio_module, public line_graph_iface { +private: + typedef limiter_audio_module AM; + uint32_t clip_inL, clip_inR, clip_outL, clip_outR, asc_led; + int mode, mode_old; + float meter_inL, meter_inR, meter_outL, meter_outR; + dsp::lookahead_limiter limiter; +public: + uint32_t srate; + bool is_active; + float limit_old; + bool asc_old; + float attack_old; + limiter_audio_module(); + void activate(); + void deactivate(); + void params_changed(); + uint32_t process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask); + void set_sample_rate(uint32_t sr); +}; + +/// Multiband Limiter by Markus Schmidt and Christian Holschuh +class multibandlimiter_audio_module: public audio_module, public line_graph_iface { +private: + typedef multibandlimiter_audio_module AM; + static const int strips = 4; + uint32_t clip_inL, clip_inR, clip_outL, clip_outR, asc_led; + int mode, mode_old; + bool solo[strips]; + bool no_solo; + float meter_inL, meter_inR, meter_outL, meter_outR; + dsp::lookahead_limiter strip[strips]; + dsp::lookahead_limiter broadband; + dsp::biquad_d2 lpL[strips - 1][3], lpR[strips - 1][3], hpL[strips - 1][3], hpR[strips - 1][3]; + float freq_old[strips - 1], sep_old[strips - 1], q_old[strips - 1]; + unsigned int pos; + unsigned int buffer_size; + unsigned int overall_buffer_size; + float *buffer; + int channels; + float striprel[strips]; + float weight[strips]; + float weight_old[strips]; + float limit_old; + bool asc_old; + float attack_old; + bool _sanitize; +public: + uint32_t srate; + bool is_active; + multibandlimiter_audio_module(); + void activate(); + void deactivate(); + void params_changed(); + uint32_t process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask); + void set_sample_rate(uint32_t sr); + bool get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const; + bool get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const; +}; + +}; + +#endif diff --git a/plugins/LadspaEffect/calf/src/calf/modules_mod.h b/plugins/LadspaEffect/calf/src/calf/modules_mod.h new file mode 100644 index 000000000..bee6d3777 --- /dev/null +++ b/plugins/LadspaEffect/calf/src/calf/modules_mod.h @@ -0,0 +1,190 @@ +/* Calf DSP plugin pack + * Modulation effect plugins + * + * Copyright (C) 2001-2010 Krzysztof Foltman, Markus Schmidt, Thor Harald Johansen and others + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this program; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02111-1307, USA. + */ +#ifndef CALF_MODULES_MOD_H +#define CALF_MODULES_MOD_H + +#include +#include +#include "biquad.h" +#include "inertia.h" +#include "audio_fx.h" +#include "giface.h" +#include "metadata.h" +#include "multichorus.h" + +namespace calf_plugins { + +class flanger_audio_module: public audio_module, public frequency_response_line_graph +{ +public: + dsp::simple_flanger left, right; + uint32_t srate; + bool clear_reset; + float last_r_phase; + bool is_active; +public: + flanger_audio_module() { + is_active = false; + } + void set_sample_rate(uint32_t sr); + void params_changed(); + void params_reset(); + void activate(); + void deactivate(); + uint32_t process(uint32_t offset, uint32_t nsamples, uint32_t inputs_mask, uint32_t outputs_mask) { + left.process(outs[0] + offset, ins[0] + offset, nsamples); + right.process(outs[1] + offset, ins[1] + offset, nsamples); + return outputs_mask; // XXXKF allow some delay after input going blank + } + bool get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const; + float freq_gain(int subindex, float freq, float srate) const; +}; + +class phaser_audio_module: public audio_module, public frequency_response_line_graph +{ +public: + enum { MaxStages = 12 }; + uint32_t srate; + bool clear_reset; + float last_r_phase; + dsp::simple_phaser left, right; + float x1vals[2][MaxStages], y1vals[2][MaxStages]; + bool is_active; +public: + phaser_audio_module(); + void params_changed(); + void params_reset(); + void activate(); + void set_sample_rate(uint32_t sr); + void deactivate(); + uint32_t process(uint32_t offset, uint32_t nsamples, uint32_t inputs_mask, uint32_t outputs_mask) { + left.process(outs[0] + offset, ins[0] + offset, nsamples); + right.process(outs[1] + offset, ins[1] + offset, nsamples); + return outputs_mask; // XXXKF allow some delay after input going blank + } + bool get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const; + bool get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const; + float freq_gain(int subindex, float freq, float srate) const; +}; + +class rotary_speaker_audio_module: public audio_module +{ +public: + /// Current phases and phase deltas for bass and treble rotors + uint32_t phase_l, dphase_l, phase_h, dphase_h; + dsp::simple_delay<1024, float> delay; + dsp::biquad_d2 crossover1l, crossover1r, crossover2l, crossover2r, damper1l, damper1r; + dsp::simple_delay<8, float> phaseshift; + uint32_t srate; + int vibrato_mode; + /// Current CC1 (Modulation) value, normalized to [0, 1] + float mwhl_value; + /// Current CC64 (Hold) value, normalized to [0, 1] + float hold_value; + /// Current rotation speed for bass rotor - automatic mode + float aspeed_l; + /// Current rotation speed for treble rotor - automatic mode + float aspeed_h; + /// Desired speed (0=slow, 1=fast) - automatic mode + float dspeed; + /// Current rotation speed for bass rotor - manual mode + float maspeed_l; + /// Current rotation speed for treble rotor - manual mode + float maspeed_h; + + int meter_l, meter_h; + + rotary_speaker_audio_module(); + void set_sample_rate(uint32_t sr); + void setup(); + void activate(); + void deactivate(); + + void params_changed(); + void set_vibrato(); + /// Convert RPM speed to delta-phase + uint32_t rpm2dphase(float rpm); + /// Set delta-phase variables based on current calculated (and interpolated) RPM speed + void update_speed(); + void update_speed_manual(float delta); + /// Increase or decrease aspeed towards raspeed, with required negative and positive rate + bool incr_towards(float &aspeed, float raspeed, float delta_decc, float delta_acc); + uint32_t process(uint32_t offset, uint32_t nsamples, uint32_t inputs_mask, uint32_t outputs_mask); + virtual void control_change(int channel, int ctl, int val); +}; + +/// A multitap stereo chorus thing +class multichorus_audio_module: public audio_module, public frequency_response_line_graph +{ +public: + uint32_t srate; + dsp::multichorus, dsp::filter_sum, dsp::biquad_d2<> >, 4096> left, right; + float last_r_phase; + float cutoff; + bool is_active; + +public: + multichorus_audio_module(); + void params_changed(); + uint32_t process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask); + void activate(); + void deactivate(); + void set_sample_rate(uint32_t sr); + bool get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const; + float freq_gain(int subindex, float freq, float srate) const; + bool get_dot(int index, int subindex, float &x, float &y, int &size, cairo_iface *context) const; + bool get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const; +}; + +/// Pulsator by Markus Schmidt +class pulsator_audio_module: public audio_module, public frequency_response_line_graph { +private: + typedef pulsator_audio_module AM; + uint32_t clip_inL, clip_inR, clip_outL, clip_outR; + float meter_inL, meter_inR, meter_outL, meter_outR; + float offset_old; + int mode_old; + bool clear_reset; + dsp::simple_lfo lfoL, lfoR; +public: + uint32_t srate; + bool is_active; + pulsator_audio_module(); + void activate(); + void deactivate(); + void params_changed(); + void set_sample_rate(uint32_t sr); + void params_reset() + { + if (clear_reset) { + *params[param_reset] = 0.f; + clear_reset = false; + } + } + uint32_t process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask); + bool get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const; + bool get_dot(int index, int subindex, float &x, float &y, int &size, cairo_iface *context) const; + bool get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const; +}; + +}; + +#endif diff --git a/plugins/LadspaEffect/calf/src/calf/modules_synths.h b/plugins/LadspaEffect/calf/src/calf/modules_synths.h new file mode 100644 index 000000000..161166813 --- /dev/null +++ b/plugins/LadspaEffect/calf/src/calf/modules_synths.h @@ -0,0 +1,193 @@ +/* Calf DSP Library + * Audio modules - synthesizers + * + * Copyright (C) 2001-2007 Krzysztof Foltman + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this program; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02111-1307, USA. + */ +#ifndef __CALF_MODULES_SYNTHS_H +#define __CALF_MODULES_SYNTHS_H + +#include "biquad.h" +#include "onepole.h" +#include "audio_fx.h" +#include "inertia.h" +#include "osc.h" +#include "synth.h" +#include "envelope.h" +#include "modmatrix.h" +#include "metadata.h" + +namespace calf_plugins { + +#define MONOSYNTH_WAVE_BITS 12 + +/// Monosynth-in-making. Parameters may change at any point, so don't make songs with it! +/// It lacks inertia for parameters, even for those that really need it. +class monosynth_audio_module: public audio_module, public line_graph_iface, public mod_matrix_impl +{ +public: + uint32_t srate, crate; + static dsp::waveform_family *waves; + dsp::waveform_oscillator osc1, osc2; + dsp::triangle_lfo lfo1, lfo2; + dsp::biquad_d1_lerp filter, filter2; + /// The step code is producing non-zero values + bool running; + /// This is the last non-zero buffer (set on calculate_step after fadeout is complete, the next calculate_step will zero running) + bool stopping; + /// A key is kept pressed + bool gate; + /// All notes off fadeout + bool force_fadeout; + /// Last triggered note + int last_key; + + /// Output buffers, used to ensure updates are done every step_size regardless of process buffer size + float buffer[step_size], buffer2[step_size]; + /// Read position within the buffers, on each '0' the buffers are being filled with new data by calculate_step + uint32_t output_pos; + /// Waveform number - OSC1 + int wave1; + /// Waveform number - OSC2 + int wave2; + /// Last used waveform number - OSC1 + int prev_wave1; + /// Last used waveform number - OSC2 + int prev_wave2; + /// Filter type + int filter_type; + /// Filter type on the last calculate_step + int last_filter_type; + float freq, start_freq, target_freq, cutoff, fgain, fgain_delta, separation; + float detune, xpose, xfade, ampctl, fltctl; + float odcr, porta_time, lfo_bend; + /// Modulation wheel position (0.f-1.f) + float modwheel_value; + /// Delay counter for LFOs + float lfo_clock; + /// Last value of phase shift for pulse width emulation for OSC1 + int32_t last_pwshift1; + /// Last value of phase shift for pulse width emulation for OSC2 + int32_t last_pwshift2; + /// Last value of stretch for osc sync emulation for OSC1 + int32_t last_stretch1; + /// Next note to play on the next calculate_step + int queue_note_on; + /// Whether the queued note has been already released + bool queue_note_on_and_off; + /// Velocity of the next note to play + float queue_vel; + /// Integer value for modwheel (0-16383, read from CC1 - MSBs and CC33 - LSBs) + int modwheel_value_int; + /// Legato mode (bitmask) + int legato; + /// Envelope Generators + dsp::adsr envelope1, envelope2; + dsp::keystack stack; + /// Smoothing for master volume + dsp::gain_smoothing master; + /// Fadeout for buffer 1 + dsp::fadeout fadeout; + /// Fadeout for buffer 2 + dsp::fadeout fadeout2; + /// Smoothed cutoff value + dsp::inertia inertia_cutoff; + /// Smoothed pitch bend value + dsp::inertia inertia_pitchbend; + /// Smoothed channel pressure value + dsp::inertia inertia_pressure; + /// Rows of the modulation matrix + dsp::modulation_entry mod_matrix_data[mod_matrix_slots]; + /// Currently used velocity + float velocity; + /// Last value of oscillator mix ratio + float last_xfade; + /// Current calculated mod matrix outputs + float moddest[moddest_count]; + + monosynth_audio_module(); + static void precalculate_waves(progress_report_iface *reporter); + void set_sample_rate(uint32_t sr); + void delayed_note_on(); + /// Release a note (physically), called from note-off handler or when note-off has been scheduled after note-on (very short queued note) + void end_note(); + /// Handle MIDI Note On message (does not immediately trigger a note, as it must start on + /// boundary of step_size samples). + void note_on(int channel, int note, int vel); + /// Handle MIDI Note Off message + void note_off(int channel, int note, int vel); + /// Handle MIDI Channel Pressure + void channel_pressure(int channel, int value); + /// Handle pitch bend message. + inline void pitch_bend(int /*channel*/, int value) + { + inertia_pitchbend.set_inertia(pow(2.0, (value * *params[par_pwhlrange]) / (1200.0 * 8192.0))); + } + /// Update oscillator frequency based on base frequency, detune amount, pitch bend scaling factor and sample rate. + void set_frequency(); + /// Handle control change messages. + void control_change(int channel, int controller, int value); + /// Update variables from control ports. + void params_changed(); + void activate(); + void deactivate(); + void post_instantiate() + { + precalculate_waves(progress_report); + } + /// Set waveform addresses for oscillators + void lookup_waveforms(); + /// Run oscillators + void calculate_buffer_oscs(float lfo); + /// Run two filters in series to produce mono output samples. + void calculate_buffer_ser(); + /// Run one filter to produce mono output samples. + void calculate_buffer_single(); + /// Run two filters (one per channel) to produce stereo output samples. + void calculate_buffer_stereo(); + /// Retrieve filter graph (which is 'live' so it cannot be generated by get_static_graph), or fall back to get_static_graph. + bool get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const; + /// @retval true if the filter 1 is to be used for the left channel and filter 2 for the right channel + /// @retval false if filters are to be connected in series and sent (mono) to both channels + inline bool is_stereo_filter() const + { + return filter_type == flt_2lp12 || filter_type == flt_2bp6; + } + /// No CV inputs for now + bool is_cv(int param_no) const { return false; } + /// Practically all the stuff here is noisy + bool is_noisy(int param_no) const { return param_no != par_cutoff; } + /// Calculate control signals and produce step_size samples of output. + void calculate_step(); + /// Apply anti-click'n'pop fadeout (used at the end of the sound) + void apply_fadeout(); + /// Main processing function + uint32_t process(uint32_t offset, uint32_t nsamples, uint32_t inputs_mask, uint32_t outputs_mask); + /// Send all configure variables set within a plugin to given destination (which may be limited to only those that plugin understands) + virtual void send_configures(send_configure_iface *sci) { return mod_matrix_impl::send_configures(sci); } + virtual char *configure(const char *key, const char *value) { return mod_matrix_impl::configure(key, value); } +}; + +}; + +#if ENABLE_EXPERIMENTAL + +#include "wavetable.h" + +#endif + +#endif diff --git a/plugins/LadspaEffect/calf/src/calf/multichorus.h b/plugins/LadspaEffect/calf/src/calf/multichorus.h new file mode 100644 index 000000000..b954603ab --- /dev/null +++ b/plugins/LadspaEffect/calf/src/calf/multichorus.h @@ -0,0 +1,213 @@ +/* Calf DSP Library + * Multitap chorus class. + * + * Copyright (C) 2001-2007 Krzysztof Foltman + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this program; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02111-1307, USA. + */ +#ifndef __CALF_MULTICHORUS_H +#define __CALF_MULTICHORUS_H + +#include "audio_fx.h" + +namespace dsp { + +typedef fixed_point chorus_phase; + +template +class sine_multi_lfo +{ +protected: + sine_table sine; + +public: + /// Current LFO phase + chorus_phase phase; + /// LFO phase increment + chorus_phase dphase; + /// LFO phase per-voice increment + chorus_phase vphase; + /// Current number of voices + uint32_t voices; + /// Current scale (output multiplier) + T scale; + /// Per-voice offset unit (the value that says how much the voices are offset with respect to each other in non-100% 'overlap' mode), scaled so that full range = 131072 + int32_t voice_offset; + /// LFO Range scaling for non-100% overlap + uint32_t voice_depth; +public: + sine_multi_lfo() + { + phase = dphase = vphase = 0.0; + voice_offset = 0; + voice_depth = 1U << 31; + + set_voices(Voices); + } + inline uint32_t get_voices() const + { + return voices; + } + inline void set_voices(uint32_t value) + { + voices = value; + // use sqrt, because some phases will cancel each other - so 1 / N is usually too low + scale = sqrt(1.0 / voices); + } + inline void set_overlap(float overlap) + { + // If we scale the delay amount so that full range of a single LFO is 0..1, all the overlapped LFOs will cover 0..range + // How it's calculated: + // 1. First voice is assumed to always cover the range of 0..1 + // 2. Each remaining voice contributes an interval of a width = 1 - overlap, starting from the end of the interval of the previous voice + // Coverage = non-overlapped part of the LFO range in the 1st voice + float range = 1.f + (1.f - overlap) * (voices - 1); + float scaling = 1.f / range; + voice_offset = (int)(131072 * (1 - overlap) / range); + voice_depth = (unsigned int)((1U << 30) * 1.0 * scaling); + } + /// Get LFO value for given voice, returns a values in range of [-65536, 65535] (or close) + inline int get_value(uint32_t voice) const { + // find this voice's phase (= phase + voice * 360 degrees / number of voices) + chorus_phase voice_phase = phase + vphase * (int)voice; + // find table offset + unsigned int ipart = voice_phase.ipart(); + // interpolate (use 14 bits of precision - because the table itself uses 17 bits and the result of multiplication must fit in int32_t) + // note, the result is still -65535 .. 65535, it's just interpolated + // it is never reaching -65536 - but that's acceptable + int intval = voice_phase.lerp_by_fract_int(sine.data[ipart], sine.data[ipart+1]); + // apply the voice offset/depth (rescale from -65535..65535 to appropriate voice's "band") + return -65535 + voice * voice_offset + ((voice_depth >> (30-13)) * (65536 + intval) >> 13); + } + inline void step() { + phase += dphase; + } + inline T get_scale() const { + return scale; + } + void reset() { + phase = 0.f; + } +}; + +/** + * Multi-tap chorus without feedback. + * Perhaps MaxDelay should be a bit longer! + */ +template +class multichorus: public chorus_base +{ +protected: + simple_delay delay; +public: + MultiLfo lfo; + Postprocessor post; +public: + multichorus() { + rate = 0.63f; + dry = 0.5f; + wet = 0.5f; + min_delay = 0.005f; + mod_depth = 0.0025f; + setup(44100); + } + void reset() { + delay.reset(); + lfo.reset(); + } + void set_rate(float rate) { + chorus_base::set_rate(rate); + lfo.dphase = dphase; + } + virtual void setup(int sample_rate) { + modulation_effect::setup(sample_rate); + delay.reset(); + lfo.reset(); + set_min_delay(get_min_delay()); + set_mod_depth(get_mod_depth()); + } + template + void process(OutIter buf_out, InIter buf_in, int nsamples) { + int mds = min_delay_samples + mod_depth_samples * 1024 + 2*65536; + int mdepth = mod_depth_samples; + // 1 sample peak-to-peak = mod_depth_samples of 32 (this scaling stuff is tricky and may - but shouldn't - be wrong) + // with 192 kHz sample rate, 1 ms = 192 samples, and the maximum 20 ms = 3840 samples (so, 4096 will be used) + // 3840 samples of mod depth = mdepth of 122880 (which multiplied by 65536 doesn't fit in int32_t) + // so, it will be right-shifted by 2, which gives it a safe range of 30720 + // NB: calculation of mod_depth_samples (and multiply-by-32) is in chorus_base::set_mod_depth + mdepth = mdepth >> 2; + T scale = lfo.get_scale(); + for (int i=0; i> 2) + 1 because the LFO value is in range of [-65535, 65535] (17 bits) + int dv = mds + (mdepth * lfo_output >> (3 + 1)); + int ifv = dv >> 16; + T fd; // signal from delay's output + delay.get_interp(fd, ifv, (dv & 0xFFFF)*(1.0/65536.0)); + out += fd; + } + // apply the post filter + out = post.process(out); + T sdry = in * gs_dry.get(); + T swet = out * gs_wet.get() * scale; + *buf_out++ = sdry + swet; + lfo.step(); + } + post.sanitize(); + } + float freq_gain(float freq, float sr) const + { + typedef std::complex cfloat; + freq *= 2.0 * M_PI / sr; + cfloat z = 1.0 / exp(cfloat(0.0, freq)); // z^-1 + cfloat h = 0.0; + int mds = min_delay_samples + mod_depth_samples * 1024 + 2*65536; + int mdepth = mod_depth_samples; + mdepth = mdepth >> 2; + T scale = lfo.get_scale(); + unsigned int nvoices = lfo.get_voices(); + for (unsigned int v = 0; v < nvoices; v++) + { + int lfo_output = lfo.get_value(v); + // 3 = log2(32 >> 2) + 1 because the LFO value is in range of [-65535, 65535] (17 bits) + int dv = mds + (mdepth * lfo_output >> (3 + 1)); + int fldp = dv >> 16; + cfloat zn = std::pow(z, fldp); // z^-N + h += zn + (zn * z - zn) * cfloat(dv / 65536.0 - fldp); + } + // apply the post filter + h *= post.h_z(z); + // mix with dry signal + float v = std::abs(cfloat(gs_dry.get_last()) + cfloat(scale * gs_wet.get_last()) * h); + return v; + } +}; + +}; + +#endif + + diff --git a/plugins/LadspaEffect/calf/src/calf/onepole.h b/plugins/LadspaEffect/calf/src/calf/onepole.h new file mode 100644 index 000000000..5fdc66942 --- /dev/null +++ b/plugins/LadspaEffect/calf/src/calf/onepole.h @@ -0,0 +1,192 @@ +/* Calf DSP Library + * Basic one-pole one-zero filters based on bilinear transform. + * Copyright (C) 2001-2007 Krzysztof Foltman + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this program; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02111-1307, USA. + */ +#ifndef __CALF_ONEPOLE_H +#define __CALF_ONEPOLE_H + +#include "primitives.h" + +namespace dsp { + +/** + * one-pole filter, for floating point values + * coefficient calculation is based on bilinear transform, and the code itself is based on my very old OneSignal lib + * lp and hp are *somewhat* tested, allpass is not tested at all + * don't use this for integers because it won't work + */ +template +class onepole +{ +public: + typedef std::complex cfloat; + + T x1, y1; + Coeff a0, a1, b1; + + onepole() + { + reset(); + } + + /// Set coefficients for a lowpass filter + void set_lp(float fc, float sr) + { + // x x + // x+1 x-1 + Coeff x = tan (M_PI * fc / (2 * sr)); + Coeff q = 1/(1+x); + a0 = a1 = x*q; + b1 = (x-1)*q; + } + + /// Set coefficients for an allpass filter + void set_ap(float fc, float sr) + { + // x-1 x+1 + // x+1 x-1 + Coeff x = tan (M_PI * fc / (2 * sr)); + Coeff q = 1/(1+x); + b1 = a0 = (x-1)*q; + a1 = 1; + } + + /// Set coefficients for an allpass filter, using omega instead of fc and sr + /// omega = (PI / 2) * fc / sr + void set_ap_w(float w) + { + // x-1 x+1 + // x+1 x-1 + Coeff x = tan (w); + Coeff q = 1/(1+x); + b1 = a0 = (x-1)*q; + a1 = 1; + } + + /// Set coefficients for a highpass filter + void set_hp(float fc, float sr) + { + // x -x + // x+1 x-1 + Coeff x = tan (M_PI * fc / (2 * sr)); + Coeff q = 1/(1+x); + a0 = q; + a1 = -a0; + b1 = (x-1)*q; + } + + /// Process one sample + inline T process(T in) + { + T out = in * a0 + x1 * a1 - y1 * b1; + x1 = in; + y1 = out; + return out; + } + + /// Process one sample, assuming it's a lowpass filter (optimized special case) + inline T process_lp(T in) + { + T out = (in + x1) * a0 - y1 * b1; + x1 = in; + y1 = out; + return out; + } + + /// Process one sample, assuming it's a highpass filter (optimized special case) + inline T process_hp(T in) + { + T out = (in - x1) * a0 - y1 * b1; + x1 = in; + y1 = out; + return out; + } + + /// Process one sample, assuming it's an allpass filter (optimized special case) + inline T process_ap(T in) + { + T out = (in - y1) * a0 + x1; + x1 = in; + y1 = out; + return out; + } + + /// Process one sample using external state variables + inline T process_ap(T in, float &x1, float &y1) + { + T out = (in - y1) * a0 + x1; + x1 = in; + y1 = out; + return out; + } + + /// Process one sample using external state variables, including filter coeff + inline T process_ap(T in, float &x1, float &y1, float a0) + { + T out = (in - y1) * a0 + x1; + x1 = in; + y1 = out; + return out; + } + + inline bool empty() const { + return y1 == 0; + } + + inline void sanitize() + { + dsp::sanitize(x1); + dsp::sanitize(y1); + } + + inline void reset() + { + dsp::zero(x1); + dsp::zero(y1); + } + + template + inline void copy_coeffs(const onepole &src) + { + a0 = src.a0; + a1 = src.a1; + b1 = src.b1; + } + + /// Return the filter's gain at frequency freq + /// @param freq Frequency to look up + /// @param sr Filter sample rate (used to convert frequency to angular frequency) + float freq_gain(float freq, float sr) const + { + freq *= 2.0 * M_PI / sr; + cfloat z = 1.0 / exp(cfloat(0.0, freq)); + + return std::abs(h_z(z)); + } + + /// Return H(z) the filter's gain at frequency freq + /// @param z Z variable (e^jw) + cfloat h_z(const cfloat &z) const + { + return (cfloat(a0) + double(a1) * z) / (cfloat(1.0) + double(b1) * z); + } +}; + +}; + +#endif diff --git a/plugins/LadspaEffect/calf/src/calf/organ.h b/plugins/LadspaEffect/calf/src/calf/organ.h new file mode 100644 index 000000000..fe830b179 --- /dev/null +++ b/plugins/LadspaEffect/calf/src/calf/organ.h @@ -0,0 +1,359 @@ +/* Calf DSP Library + * Drawbar organ emulator. + * + * Copyright (C) 2007 Krzysztof Foltman + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this program; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02111-1307, USA. + */ + +#ifndef __CALF_ORGAN_H +#define __CALF_ORGAN_H + +#include "audio_fx.h" +#include "envelope.h" +#include "metadata.h" +#include "osc.h" +#include "synth.h" + +#define ORGAN_KEYTRACK_POINTS 4 + +namespace dsp +{ + +struct organ_parameters { + enum { FilterCount = 2, EnvCount = 3 }; + struct organ_filter_parameters + { + float cutoff; + float resonance; + float envmod[organ_parameters::EnvCount]; + float keyf; + }; + + struct organ_env_parameters + { + float attack, decay, sustain, release, velscale, ampctl; + }; + + ////////////////////////////////////////////////////////////////////////// + // these parameters are binary-copied from control ports (order is important!) + + float drawbars[9]; + float harmonics[9]; + float waveforms[9]; + float detune[9]; + float phase[9]; + float pan[9]; + float routing[9]; + float foldover; + float percussion_time; + float percussion_level; + float percussion_wave; + float percussion_harmonic; + float percussion_vel2amp; + float percussion_fm_time; + float percussion_fm_depth; + float percussion_fm_wave; + float percussion_fm_harmonic; + float percussion_vel2fm; + float percussion_trigger; + float percussion_stereo; + float filter_chain; + float filter1_type; + float master; + + organ_filter_parameters filters[organ_parameters::FilterCount]; + organ_env_parameters envs[organ_parameters::EnvCount]; + float lfo_rate; + float lfo_amt; + float lfo_wet; + float lfo_phase; + float lfo_mode; + float lfo_type; + + float global_transpose; + float global_detune; + + float polyphony; + + float quad_env; + + float pitch_bend_range; + + float bass_freq; + float bass_gain; + float treble_freq; + float treble_gain; + + float dummy_mapcurve; + + ////////////////////////////////////////////////////////////////////////// + // these parameters are calculated + + double perc_decay_const, perc_fm_decay_const; + float multiplier[9]; + int phaseshift[9]; + float cutoff; + unsigned int foldvalue; + float pitch_bend; + + float percussion_keytrack[ORGAN_KEYTRACK_POINTS][2]; + + organ_parameters() : pitch_bend(1.0f) {} + + inline int get_percussion_wave() { return dsp::fastf2i_drm(percussion_wave); } + inline int get_percussion_fm_wave() { return dsp::fastf2i_drm(percussion_fm_wave); } +}; + +#define ORGAN_WAVE_BITS 12 +#define ORGAN_WAVE_SIZE 4096 +#define ORGAN_BIG_WAVE_BITS 17 +#define ORGAN_BIG_WAVE_SIZE 131072 +/// 2^ORGAN_BIG_WAVE_SHIFT = how many (quasi)periods per sample +#define ORGAN_BIG_WAVE_SHIFT 5 + +class organ_voice_base: public calf_plugins::organ_enums +{ +public: + typedef waveform_family small_wave_family; + typedef waveform_family big_wave_family; +public: + organ_parameters *parameters; +protected: + static small_wave_family (*waves)[wave_count_small]; + static big_wave_family (*big_waves)[wave_count_big]; + + int note; + dsp::decay amp; + /// percussion FM carrier amplitude envelope + dsp::decay pamp; + /// percussion FM modulator amplitude envelope + dsp::decay fm_amp; + dsp::fixed_point pphase, dpphase; + dsp::fixed_point modphase, moddphase; + float fm_keytrack; + int &sample_rate_ref; + bool &released_ref; + /// pamp per-sample (linear) step during release stage (calculated on release so that it will take 30ms for it to go from "current value at release point" to 0) + float rel_age_const; + + organ_voice_base(organ_parameters *_parameters, int &_sample_rate_ref, bool &_released_ref); + + inline float wave(float *data, dsp::fixed_point ph) { + return ph.lerp_table_lookup_float(data); + } + inline float big_wave(float *data, dsp::fixed_point &ph) { + // wrap to fit within the wave + return ph.lerp_table_lookup_float_mask(data, ORGAN_BIG_WAVE_SIZE - 1); + } +public: + static inline small_wave_family &get_wave(int wave) { + return (*waves)[wave]; + } + static inline big_wave_family &get_big_wave(int wave) { + return (*big_waves)[wave]; + } + static void precalculate_waves(calf_plugins::progress_report_iface *reporter); + void update_pitch(); + // this doesn't really have a voice interface + void render_percussion_to(float (*buf)[2], int nsamples); + void perc_note_on(int note, int vel); + void perc_note_off(int note, int vel); + void perc_reset(); +}; + +/// A simple (and bad) simulation of scanner vibrato based on a series of modulated allpass filters +class organ_vibrato +{ +protected: + enum { VibratoSize = 6 }; + float vibrato_x1[VibratoSize][2], vibrato_y1[VibratoSize][2]; + float lfo_phase; + dsp::onepole vibrato[2]; +public: + void reset(); + void process(organ_parameters *parameters, float (*data)[2], unsigned int len, float sample_rate); +}; + +/// A more sophisticated simulation of scanner vibrato. Simulates a line box +/// and an interpolating scanner. The line box is a series of 18 2nd order +/// lowpass filters with cutoff frequency ~4kHz, with loss compensation. +/// The interpolating scanner uses linear interpolation to "slide" between +/// selected outputs of the line box. +/// +/// @note +/// This is a true CPU hog, and it should be optimised some day. +/// @note +/// The line box is mono. 36 lowpass filters might be an overkill. +/// @note +/// See also: http://www.jhaible.de/interpolating_scanner_and_scanvib/jh_interpolating_scanner_and_scanvib.html +/// (though it's a very loose adaptation of that version) +class scanner_vibrato +{ +protected: + enum { ScannerSize = 18 }; + float lfo_phase; + dsp::biquad_d2 scanner[ScannerSize]; + organ_vibrato legacy; +public: + void reset(); + void process(organ_parameters *parameters, float (*data)[2], unsigned int len, float sample_rate); +}; + +class organ_voice: public dsp::voice, public organ_voice_base { +protected: + enum { Channels = 2, BlockSize = 64, EnvCount = organ_parameters::EnvCount, FilterCount = organ_parameters::FilterCount }; + union { + float output_buffer[BlockSize][Channels]; + float aux_buffers[3][BlockSize][Channels]; + }; + dsp::fixed_point phase, dphase; + dsp::biquad_d1 filterL[2], filterR[2]; + adsr envs[EnvCount]; + dsp::inertia expression; + scanner_vibrato vibrato; + float velocity; + bool perc_released; + /// The envelopes have ended and the voice is in final fadeout stage + bool finishing; + dsp::inertia inertia_pitchbend; + +public: + organ_voice() + : organ_voice_base(NULL, sample_rate, perc_released) + , expression(dsp::linear_ramp(16)) + , inertia_pitchbend(dsp::exponential_ramp(1)) + { + inertia_pitchbend.set_now(1); + } + + void reset(); + void note_on(int note, int vel); + void note_off(int /* vel */); + virtual float get_priority() { return stolen ? 20000 : (perc_released ? 1 : (sostenuto ? 200 : 100)); } + virtual void steal(); + void render_block(); + + virtual int get_current_note() { + return note; + } + virtual bool get_active() { + // printf("note %d getactive %d use_percussion %d pamp active %d\n", note, amp.get_active(), use_percussion(), pamp.get_active()); + return (note != -1) && (amp.get_active() || (use_percussion() && pamp.get_active())); + } + void update_pitch(); + inline bool use_percussion() + { + return dsp::fastf2i_drm(parameters->percussion_trigger) == perctrig_polyphonic && parameters->percussion_level > 0; + } +}; + +/// Not a true voice, just something with similar-ish interface. +class percussion_voice: public organ_voice_base { +public: + int sample_rate; + bool released; + + percussion_voice(organ_parameters *_parameters) + : organ_voice_base(_parameters, sample_rate, released) + , released(false) + { + } + + bool get_active() { + return (note != -1) && pamp.get_active(); + } + bool get_noticable() { + return (note != -1) && (pamp.get() > 0.2 * parameters->percussion_level); + } + void setup(int sr) { + sample_rate = sr; + } +}; + +struct drawbar_organ: public dsp::basic_synth, public calf_plugins::organ_enums { + organ_parameters *parameters; + percussion_voice percussion; + scanner_vibrato global_vibrato; + two_band_eq eq_l, eq_r; + + drawbar_organ(organ_parameters *_parameters) + : parameters(_parameters) + , percussion(_parameters) { + } + void render_separate(float *output[], int nsamples); + dsp::voice *alloc_voice(); + virtual void percussion_note_on(int note, int vel); + virtual void params_changed() = 0; + virtual void setup(int sr); + void update_params(); + void control_change(int controller, int value) + { + dsp::basic_synth::control_change(controller, value); + } + void pitch_bend(int amt); + virtual bool check_percussion(); +}; + +}; + +namespace calf_plugins { + +struct organ_audio_module: public audio_module, public dsp::drawbar_organ, public line_graph_iface +{ +public: + using drawbar_organ::note_on; + using drawbar_organ::note_off; + using drawbar_organ::control_change; + enum { param_count = drawbar_organ::param_count}; + dsp::organ_parameters par_values; + uint32_t srate; + bool panic_flag; + /// Value for configure variable map_curve + std::string var_map_curve; + + organ_audio_module(); + + void post_instantiate(); + + void set_sample_rate(uint32_t sr) { + srate = sr; + } + void params_changed(); + + void activate(); + void deactivate(); + uint32_t process(uint32_t offset, uint32_t nsamples, uint32_t inputs_mask, uint32_t outputs_mask); + /// No CV inputs for now + bool is_cv(int param_no) { return false; } + /// Practically all the stuff here is noisy + bool is_noisy(int param_no) { return true; } + void execute(int cmd_no); + bool get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const; + char *configure(const char *key, const char *value); + void send_configures(send_configure_iface *); + uint32_t message_run(const void *valid_inputs, void *output_ports); +public: + // overrides + virtual void note_on(int /*channel*/, int note, int velocity) { dsp::drawbar_organ::note_on(note, velocity); } + virtual void note_off(int /*channel*/, int note, int velocity) { dsp::drawbar_organ::note_off(note, velocity); } + virtual void control_change(int /*channel*/, int controller, int value) { dsp::drawbar_organ::control_change(controller, value); } + virtual void pitch_bend(int /*channel*/, int value) { dsp::drawbar_organ::pitch_bend(value); } +}; + +}; + +#endif diff --git a/plugins/LadspaEffect/calf/src/calf/osc.h b/plugins/LadspaEffect/calf/src/calf/osc.h new file mode 100644 index 000000000..779f1c009 --- /dev/null +++ b/plugins/LadspaEffect/calf/src/calf/osc.h @@ -0,0 +1,336 @@ +/* Calf DSP Library + * Oscillators + * + * Copyright (C) 2001-2007 Krzysztof Foltman + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this program; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02111-1307, USA. + */ + +#ifndef CALF_OSC_H +#define CALF_OSC_H + +#include "fft.h" +#include + +namespace dsp +{ + +/** Very simple, non-bandlimited saw oscillator. Should not be used for anything + * else than testing/prototyping. Unless get() function is replaced with something + * with "proper" oscillator code, as the frequency setting function is fine. + */ +struct simple_oscillator +{ + /// Phase (from 0 to 0xFFFFFFFF) + uint32_t phase; + /// Per-sample phase delta (phase increment), equal to 2^32*freq/sr. + uint32_t phasedelta; + /// Reset oscillator phase to zero. + void reset() + { + phase = 0; + } + /// Set phase delta based on oscillator frequency and sample rate. + void set_freq(float freq, float sr) + { + phasedelta = (int)(freq * 65536.0 * 256.0 * 16.0 / sr) << 4; + } + /// Set phase delta based on oscillator frequency and inverse of sample rate. + void set_freq_odsr(float freq, double odsr) + { + phasedelta = (int)(freq * 65536.0 * 256.0 * 16.0 * odsr) << 4; + } + inline float get() + { + float value = (phase >> 16 ) / 65535.0 - 0.5; + phase += phasedelta; + return value; + } +}; + +/** + * FFT-based bandlimiting helper class. Allows conversion between time and frequency domains and generating brickwall filtered + * versions of a waveform given a pre-computed spectrum. + * Waveform size must be a power of two, and template argument SIZE_BITS is log2 of waveform size. + */ +template +struct bandlimiter +{ + enum { SIZE = 1 << SIZE_BITS }; + static dsp::fft &get_fft() + { + static dsp::fft fft; + return fft; + } + + std::complex spectrum[SIZE]; + + /// Import time domain waveform and calculate spectrum from it + void compute_spectrum(float input[SIZE]) + { + dsp::fft &fft = get_fft(); + std::complex *data = new std::complex[SIZE]; + for (int i = 0; i < SIZE; i++) + data[i] = input[i]; + fft.calculate(data, spectrum, false); + delete []data; + } + + /// Generate the waveform from the contained spectrum. + void compute_waveform(float output[SIZE]) + { + dsp::fft &fft = get_fft(); + std::complex *data = new std::complex[SIZE]; + fft.calculate(spectrum, data, true); + for (int i = 0; i < SIZE; i++) + output[i] = data[i].real(); + delete []data; + } + + /// remove DC offset of the spectrum (it usually does more harm than good!) + void remove_dc() + { + spectrum[0] = 0.f; + } + + /// Very basic bandlimiting (brickwall filter) + /// might need to be improved much in future! + void make_waveform(float output[SIZE], int cutoff, bool foldover = false) + { + dsp::fft &fft = get_fft(); + std::vector > new_spec, iffted; + new_spec.resize(SIZE); + iffted.resize(SIZE); + // Copy original harmonics up to cutoff point + new_spec[0] = spectrum[0]; + for (int i = 1; i < cutoff; i++) + new_spec[i] = spectrum[i], + new_spec[SIZE - i] = spectrum[SIZE - i]; + // Fill the rest with zeros, optionally folding over harmonics over the + // cutoff point into the lower octaves while halving the amplitude. + // (I think it is almost nice for bell type waveforms when the original + // waveform has few widely spread harmonics) + if (foldover) + { + std::complex fatt(0.5); + cutoff /= 2; + if (cutoff < 2) + cutoff = 2; + for (int i = SIZE / 2; i >= cutoff; i--) + { + new_spec[i / 2] += new_spec[i] * fatt; + new_spec[SIZE - i / 2] += new_spec[SIZE - i] * fatt; + new_spec[i] = 0.f, + new_spec[SIZE - i] = 0.f; + } + } + else + { + if (cutoff < 1) + cutoff = 1; + for (int i = cutoff; i < SIZE / 2; i++) + new_spec[i] = 0.f, + new_spec[SIZE - i] = 0.f; + } + // convert back to time domain (IFFT) and extract only real part + fft.calculate(&new_spec.front(), &iffted.front(), true); + for (int i = 0; i < SIZE; i++) + output[i] = iffted[i].real(); + } +}; + +/// Set of bandlimited wavetables +template +struct waveform_family: public std::map +{ + enum { SIZE = 1 << SIZE_BITS }; + using std::map::iterator; + using std::map::end; + using std::map::lower_bound; + float original[SIZE]; + + /// Fill the family using specified bandlimiter and original waveform. Optionally apply foldover. + /// Does not produce harmonics over specified limit (limit = (SIZE / 2) / min_number_of_harmonics) + void make(bandlimiter &bl, float input[SIZE], bool foldover = false, uint32_t limit = SIZE / 2) + { + memcpy(original, input, sizeof(original)); + bl.compute_spectrum(input); + make_from_spectrum(bl, foldover); + } + + /// Fill the family using specified bandlimiter and spectrum contained within. Optionally apply foldover. + /// Does not produce harmonics over specified limit (limit = (SIZE / 2) / min_number_of_harmonics) + void make_from_spectrum(bandlimiter &bl, bool foldover = false, uint32_t limit = SIZE / 2) + { + bl.remove_dc(); + + uint32_t base = 1 << (32 - SIZE_BITS); + uint32_t cutoff = SIZE / 2, top = SIZE / 2; + float vmax = 0; + for (unsigned int i = 0; i < cutoff; i++) + vmax = std::max(vmax, abs(bl.spectrum[i])); + float vthres = vmax / 1024.0; // -60dB + float cumul = 0.f; + while(cutoff > (SIZE / limit)) { + if (!foldover) + { + // skip harmonics too quiet to be heard, but measure their loudness cumulatively, + // because even if a single harmonic is too quiet, a whole bunch of them may add up + // to considerable amount of space + cumul = 0.f; + while(cutoff > 1 && cumul + abs(bl.spectrum[cutoff - 1]) < vthres) + { + cumul += abs(bl.spectrum[cutoff - 1]); + cutoff--; + } + } + float *wf = new float[SIZE+1]; + bl.make_waveform(wf, cutoff, foldover); + wf[SIZE] = wf[0]; + (*this)[base * (top / cutoff)] = wf; + cutoff = (int)(0.75 * cutoff); + } + } + + /// Retrieve waveform pointer suitable for specified phase_delta + inline float *get_level(uint32_t phase_delta) + { + iterator i = upper_bound(phase_delta); + if (i == end()) + return NULL; + // printf("Level = %08x\n", i->first); + return i->second; + } + /// Destructor, deletes the waveforms and removes them from the map. + ~waveform_family() + { + for (iterator i = begin(); i != end(); i++) + delete []i->second; + clear(); + } +}; + +#if 0 +// cubic interpolation +static inline float cerp(float pm1, float p0, float p1, float p2, float t) +{ + return (-t*(t-1)*(t-2) * pm1 + 3*(t+1)*(t-1)*(t-2) * p0 - 3*(t+1)*t*(t-2) * p1 + (t+1)*t*(t-1) * p2) * (1.0 / 6.0); +} +#endif +/** + * Simple table-based lerping oscillator. Uses waveform of size 2^SIZE_BITS. + * Combine with waveform_family if bandlimited waveforms are needed. Because + * of linear interpolation, it's usually a good idea to use large tables + * (2048-4096 points), otherwise aliasing may be produced. + */ +template +struct waveform_oscillator: public simple_oscillator +{ + enum { SIZE = 1 << SIZE_BITS, MASK = SIZE - 1, SCALE = 1 << (32 - SIZE_BITS) }; + float *waveform; + waveform_oscillator() + { + waveform = NULL; + } + + /// Get the value from single oscillator at current position + inline float get() + { + uint32_t wpos = phase >> (32 - SIZE_BITS); + return dsp::lerp(waveform[wpos], waveform[(wpos + 1) & MASK], (phase & (SCALE - 1)) * (1.0f / SCALE)); + } + /// Add/substract two phase-shifted values + inline float get_phaseshifted(uint32_t shift, float mix) + { + uint32_t wpos = phase >> (32 - SIZE_BITS); + float value1 = dsp::lerp(waveform[wpos], waveform[(wpos + 1) & MASK], (phase & (SCALE - 1)) * (1.0f / SCALE)); + wpos = (phase + shift) >> (32 - SIZE_BITS); + float value2 = dsp::lerp(waveform[wpos], waveform[(wpos + 1) & MASK], ((phase + shift) & (SCALE - 1)) * (1.0f / SCALE)); + return value1 + mix * value2; + } + /// Get the value of a hard synced osc (65536 = 1:1 ratio) + inline float get_phasedist(uint32_t sync, uint32_t shift, float mix) + { + uint32_t phase_mod = (uint64_t(phase) * sync >> 16); + + uint32_t wpos = phase_mod >> (32 - SIZE_BITS); + float value1 = dsp::lerp(waveform[wpos], waveform[(wpos + 1) & MASK], (phase & (SCALE - 1)) * (1.0f / SCALE)); + wpos = (phase_mod + shift) >> (32 - SIZE_BITS); + float value2 = dsp::lerp(waveform[wpos], waveform[(wpos + 1) & MASK], ((phase + shift) & (SCALE - 1)) * (1.0f / SCALE)); + return value1 + mix * value2; + } + /// One step + inline void advance() + { + phase += phasedelta; + } +}; + +/** + * Simple triangle LFO without any smoothing or anything of this sort. + */ +struct triangle_lfo: public simple_oscillator +{ + /// Previous value (not stored here, but may be used by calling code) + float last; + + triangle_lfo() + { + reset(); + } + void reset() + { + simple_oscillator::reset(); + last = 0; + } + inline float get() + { + uint32_t phase2 = phase; + // start at 90 degrees point of the "/\" wave (-1 to +1) + phase2 += 1<<30; + // if in second half, invert the wave (so it falls back into 0..0x7FFFFFFF) + phase2 ^= ((int32_t)phase2)>>31; + + float value = (phase2 >> 6) / 16777216.0 - 1.0; + phase += phasedelta; + return value; + } +}; + +/// Simple stupid inline function to normalize a waveform (by removing DC offset and ensuring max absolute value of 1). +static inline void normalize_waveform(float *table, unsigned int size) +{ + float dc = 0; + for (unsigned int i = 0; i < size; i++) + dc += table[i]; + dc /= size; + for (unsigned int i = 0; i < size; i++) + table[i] -= dc; + float thismax = 0; + for (unsigned int i = 0; i < size; i++) + thismax = std::max(thismax, fabsf(table[i])); + if (thismax < 0.000001f) + return; + double divv = 1.0 / thismax; + for (unsigned int i = 0; i < size; i++) + table[i] *= divv; +} + + + +}; + +#endif diff --git a/plugins/LadspaEffect/calf/src/calf/osctl.h b/plugins/LadspaEffect/calf/src/calf/osctl.h new file mode 100644 index 000000000..2b500174f --- /dev/null +++ b/plugins/LadspaEffect/calf/src/calf/osctl.h @@ -0,0 +1,561 @@ +/* Calf DSP Library + * Open Sound Control primitives + * + * Copyright (C) 2007 Krzysztof Foltman + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this program; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02111-1307, USA. + */ + +#ifndef __CALF_OSCTL_H +#define __CALF_OSCTL_H + +#include +#include +#include +#include +#include +#include + +namespace osctl +{ + +enum osc_type +{ + osc_i32 = 'i', + osc_f32 = 'f', + osc_string = 's', + osc_blob = 'b', + + // unsupported + osc_i64 = 'h', + osc_ts = 't', + osc_f64 = 'd', + osc_string_alt = 'S', + osc_char = 'c', + osc_rgba = 'r', + osc_midi = 'm', + osc_true = 'T', + osc_false = 'F', + osc_nil = 'N', + osc_inf = 'I', + osc_start_array = '[', + osc_end_array = ']' +}; + +extern const char *osc_type_name(osc_type type); + +struct osc_exception: public std::exception +{ + virtual const char *what() const throw() { return "OSC parsing error"; } +}; + +struct osc_read_exception: public std::exception +{ + virtual const char *what() const throw() { return "OSC buffer underflow"; } +}; + +struct osc_write_exception: public std::exception +{ + virtual const char *what() const throw() { return "OSC buffer overflow"; } +}; + +struct null_buffer +{ + static bool read(uint8_t *dest, uint32_t bytes) + { + return false; + } + static bool write(uint8_t *dest, uint32_t bytes) + { + return true; + } + static void clear() + { + } +}; + +struct raw_buffer +{ + uint8_t *ptr; + uint32_t pos, count, size; + + raw_buffer() + { + ptr = NULL; + pos = count = size = 0; + } + raw_buffer(uint8_t *_ptr, uint32_t _count, uint32_t _size) + { + set(_ptr, _count, _size); + } + inline void set(uint8_t *_ptr, uint32_t _count, uint32_t _size) + { + ptr = _ptr; + pos = 0; + count = _count; + size = _size; + } + bool read(uint8_t *dest, uint32_t bytes) + { + if (pos + bytes > count) + return false; + memcpy(dest, ptr + pos, bytes); + pos += bytes; + return true; + } + bool write(const uint8_t *src, uint32_t bytes) + { + if (count + bytes > size) + return false; + memcpy(ptr + count, src, bytes); + count += bytes; + return true; + } + int read_left() + { + return count - pos; + } + int write_left() + { + return size - count; + } + inline int write_misalignment() + { + return 4 - (count & 3); + } + void clear() + { + pos = 0; + count = 0; + } + int tell() + { + return pos; + } + void seek(int _pos) + { + pos = _pos; + } +}; + +struct string_buffer +{ + std::string data; + uint32_t pos, size; + + string_buffer() + { + pos = 0; + size = 1048576; + } + string_buffer(std::string _data, int _size = 1048576) + { + data = _data; + pos = 0; + size = _size; + } + bool read(uint8_t *dest, uint32_t bytes) + { + if (pos + bytes > data.length()) + return false; + memcpy(dest, &data[pos], bytes); + pos += bytes; + return true; + } + bool write(const uint8_t *src, uint32_t bytes) + { + if (data.length() + bytes > size) + return false; + uint32_t wpos = data.length(); + data.resize(wpos + bytes); + memcpy(&data[wpos], src, bytes); + return true; + } + inline int read_left() + { + return data.length() - pos; + } + inline int write_left() + { + return size - data.length(); + } + inline int write_misalignment() + { + return 4 - (data.length() & 3); + } + void clear() + { + data.clear(); + pos = 0; + } + int tell() + { + return pos; + } + void seek(int _pos) + { + pos = _pos; + } +}; + +template +struct osc_stream +{ + Buffer &buffer; + TypeBuffer *type_buffer; + bool error; + + osc_stream(Buffer &_buffer) : buffer(_buffer), type_buffer(NULL), error(false) {} + osc_stream(Buffer &_buffer, TypeBuffer &_type_buffer) : buffer(_buffer), type_buffer(&_type_buffer), error(false) {} + inline void pad() + { + uint32_t zero = 0; + write(&zero, buffer.write_misalignment()); + } + inline void read(void *dest, uint32_t bytes) + { + if (!buffer.read((uint8_t *)dest, bytes)) + { +#if 0 + if (Throw) + throw osc_read_exception(); + else +#endif + { + error = true; + memset(dest, 0, bytes); + } + } + } + inline void write(const void *src, uint32_t bytes) + { + if (!buffer.write((const uint8_t *)src, bytes)) + { +#if 0 + if (Throw) + throw osc_write_exception(); + else +#endif + error = true; + } + } + inline void clear() + { + buffer.clear(); + if (type_buffer) + type_buffer->clear(); + } + inline void write_type(char ch) + { + if (type_buffer) + type_buffer->write((uint8_t *)&ch, 1); + } +}; + +typedef osc_stream osc_strstream; +typedef osc_stream osc_typed_strstream; + +struct osc_inline_strstream: public string_buffer, public osc_strstream +{ + osc_inline_strstream() + : string_buffer(), osc_strstream(static_cast(*this)) + { + } +}; + +struct osc_str_typed_buffer_pair +{ + string_buffer buf_data, buf_types; +}; + +struct osc_inline_typed_strstream: public osc_str_typed_buffer_pair, public osc_typed_strstream +{ + osc_inline_typed_strstream() + : osc_str_typed_buffer_pair(), osc_typed_strstream(buf_data, buf_types) + { + } +}; + +template +inline osc_stream & +operator <<(osc_stream &s, uint32_t val) +{ +#if 0 + val = htonl(val); + s.write(&val, 4); + s.write_type(osc_i32); +#endif + return s; +} + +template +inline osc_stream & +operator >>(osc_stream &s, uint32_t &val) +{ +#if 0 + s.read(&val, 4); + val = htonl(val); +#endif + return s; +} + +template +inline osc_stream & +operator >>(osc_stream &s, int32_t &val) +{ +#if 0 + s.read(&val, 4); + val = htonl(val); +#endif + return s; +} + +template +inline osc_stream & +operator <<(osc_stream &s, float val) +{ + union { float v; uint32_t i; } val2; + val2.v = val; + val2.i = htonl(val2.i); + s.write(&val2.i, 4); + s.write_type(osc_f32); + return s; +} + +template +inline osc_stream & +operator >>(osc_stream &s, float &val) +{ + union { float v; uint32_t i; } val2; + s.read(&val2.i, 4); + val2.i = htonl(val2.i); + val = val2.v; + return s; +} + +template +inline osc_stream & +operator <<(osc_stream &s, const std::string &str) +{ + s.write(&str[0], str.length()); + s.pad(); + s.write_type(osc_string); + return s; +} + +template +inline osc_stream & +operator >>(osc_stream &s, std::string &str) +{ + // inefficient... + char five[5]; + five[4] = '\0'; + str.resize(0); + while(1) + { + s.read(five, 4); + if (five[0] == '\0') + break; + str += five; + if (!five[1] || !five[2] || !five[3]) + break; + } + return s; +} + +template +inline osc_stream & +read_buffer_from_osc_stream(osc_stream &s, DestBuffer &buf) +{ +#if 0 + uint32_t nlen = 0; + s.read(&nlen, 4); + uint32_t len = htonl(nlen); + // write length in network order + for (uint32_t i = 0; i < len; i += 1024) + { + uint8_t tmp[1024]; + uint32_t part = std::min((uint32_t)1024, len - i); + s.read(tmp, part); + buf.write(tmp, part); + } + // pad + s.read(&nlen, 4 - (len & 3)); +#endif + return s; +} + +template +inline osc_stream & +write_buffer_to_osc_stream(osc_stream &s, SrcBuffer &buf) +{ +#if 0 + uint32_t len = buf.read_left(); + uint32_t nlen = ntohl(len); + s.write(&nlen, 4); + // write length in network order + for (uint32_t i = 0; i < len; i += 1024) + { + uint8_t tmp[1024]; + uint32_t part = std::min((uint32_t)1024, len - i); + buf.read(tmp, part); + s.write(tmp, part); + } + s.pad(); + s.write_type(osc_blob); +#endif + return s; +} + +template +inline osc_stream & +operator >>(osc_stream &s, raw_buffer &str) +{ + return read_buffer_from_osc_stream(s, str); +} + +template +inline osc_stream & +operator >>(osc_stream &s, string_buffer &str) +{ + return read_buffer_from_osc_stream(s, str); +} + +template +inline osc_stream & +operator <<(osc_stream &s, raw_buffer &str) +{ + return write_buffer_to_osc_stream(s, str); +} + +template +inline osc_stream & +operator <<(osc_stream &s, string_buffer &str) +{ + return write_buffer_to_osc_stream(s, str); +} + +// XXXKF: I don't support reading binary blobs yet + +struct osc_net_bad_address: public std::exception +{ + std::string addr, error_msg; + osc_net_bad_address(const char *_addr) + { + addr = _addr; + error_msg = "Incorrect OSC URI: " + addr; + } + virtual const char *what() const throw() { return error_msg.c_str(); } + virtual ~osc_net_bad_address() throw () {} +}; + +struct osc_net_exception: public std::exception +{ + int net_errno; + std::string command, error_msg; + osc_net_exception(const char *cmd, int _errno = errno) + { + command = cmd; + net_errno = _errno; + error_msg = "OSC error in "+command+": "+strerror(_errno); + } + virtual const char *what() const throw() { return error_msg.c_str(); } + virtual ~osc_net_exception() throw () {} +}; + +struct osc_net_dns_exception: public std::exception +{ +#if 0 + int net_errno; + std::string command, error_msg; + osc_net_dns_exception(const char *cmd, int _errno = h_errno) + { + command = cmd; + net_errno = _errno; + error_msg = "OSC error in "+command+": "+hstrerror(_errno); + } + virtual const char *what() const throw() { return error_msg.c_str(); } + virtual ~osc_net_dns_exception() throw () {} +#endif +}; + +template +struct osc_message_sink +{ + virtual void receive_osc_message(std::string address, std::string type_tag, OscStream &buffer)=0; + virtual ~osc_message_sink() {} +}; + +template +struct osc_message_dump: public osc_message_sink +{ + DumpStream &stream; + osc_message_dump(DumpStream &_stream) : stream(_stream) {} + + virtual void receive_osc_message(std::string address, std::string type_tag, OscStream &buffer) + { + int pos = buffer.buffer.tell(); + stream << "address: " << address << ", type tag: " << type_tag << std::endl; + for (unsigned int i = 0; i < type_tag.size(); i++) + { + stream << "Argument " << i << " is "; + switch(type_tag[i]) + { + case 'i': + { + uint32_t val; + buffer >> val; + stream << val; + break; + } + case 'f': + { + float val; + buffer >> val; + stream << val; + break; + } + case 's': + { + std::string val; + buffer >> val; + stream << val; + break; + } + case 'b': + { + osctl::string_buffer val; + buffer >> val; + stream << "blob (" << val.data.length() << " bytes)"; + break; + } + default: + { + stream << "unknown - cannot parse more arguments" << std::endl; + i = type_tag.size(); + break; + } + } + stream << std::endl; + } + stream << std::flush; + buffer.buffer.seek(pos); + } +}; + +}; + +#endif diff --git a/plugins/LadspaEffect/calf/src/calf/plugin_tools.h b/plugins/LadspaEffect/calf/src/calf/plugin_tools.h new file mode 100644 index 000000000..9fff2a5b8 --- /dev/null +++ b/plugins/LadspaEffect/calf/src/calf/plugin_tools.h @@ -0,0 +1,133 @@ +/* Calf DSP plugin pack + * Tools to use in plugins + * + * Copyright (C) 2001-2010 Krzysztof Foltman, Markus Schmidt, Thor Harald Johansen and others + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this program; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02111-1307, USA. + */ +#ifndef CALF_PLUGIN_TOOLS_H +#define CALF_PLUGIN_TOOLS_H + +#include + +#include "giface.h" +#include "vumeter.h" + +namespace calf_plugins { + +template +struct in_out_metering_base +{ + typedef Meter meter; + meter vumeter_in, vumeter_out; + in_out_metering_base() + { + reset(); + } + void reset() + { + vumeter_in.reset(); + vumeter_out.reset(); + } + void set_sample_rate(double sample_rate) + { + vumeter_in.set_falloff(0.f, sample_rate); + vumeter_out.copy_falloff(vumeter_in); + } +}; + +/// Universal single stereo level metering for a specific plugin +template +class stereo_in_out_metering: public in_out_metering_base +{ +public: + inline void process(float *const *params, const float *const *inputs, const float *const *outputs, unsigned int offset, unsigned int nsamples) + { + if (params[Metadata::param_meter_in] || params[Metadata::param_clip_in]) { + if (inputs) + vumeter_in.update_stereo(inputs[0] ? inputs[0] + offset : NULL, inputs[1] ? inputs[1] + offset : NULL, nsamples); + else + vumeter_in.update_zeros(nsamples); + if (params[Metadata::param_meter_in]) + *params[Metadata::param_meter_in] = vumeter_in.level; + if (params[Metadata::param_clip_in]) + *params[Metadata::param_clip_in] = vumeter_in.clip > 0 ? 1.f : 0.f; + } + if (params[Metadata::param_meter_out] || params[Metadata::param_clip_out]) { + if (outputs) + vumeter_out.update_stereo(outputs[0] ? outputs[0] + offset : NULL, outputs[1] ? outputs[1] + offset : NULL, nsamples); + else + vumeter_out.update_zeros(nsamples); + if (params[Metadata::param_meter_out]) + *params[Metadata::param_meter_out] = vumeter_out.level; + if (params[Metadata::param_clip_out]) + *params[Metadata::param_clip_out] = vumeter_out.clip > 0 ? 1.f : 0.f; + } + } + void bypassed(float *const *params, unsigned int nsamples) + { + reset(); + process(params, NULL, NULL, 0, nsamples); + } +}; + +/// Universal dual level metering for a specific plugin +template +class dual_in_out_metering: public in_out_metering_base +{ +public: + inline void process(float *const *params, const float *const *inputs, const float *const *outputs, unsigned int offset, unsigned int nsamples) + { + if (params[Metadata::param_meter_inL] || params[Metadata::param_clip_inL] || params[Metadata::param_meter_inR] || params[Metadata::param_clip_inR]) { + if (inputs) + vumeter_in.update_stereo(inputs[0] ? inputs[0] + offset : NULL, inputs[1] ? inputs[1] + offset : NULL, nsamples); + else + vumeter_in.update_zeros(nsamples); + if (params[Metadata::param_meter_inL]) + *params[Metadata::param_meter_inL] = vumeter_in.left.level; + if (params[Metadata::param_meter_inR]) + *params[Metadata::param_meter_inR] = vumeter_in.right.level; + if (params[Metadata::param_clip_inL]) + *params[Metadata::param_clip_inL] = vumeter_in.left.clip > 0 ? 1.f : 0.f; + if (params[Metadata::param_clip_inR]) + *params[Metadata::param_clip_inR] = vumeter_in.right.clip > 0 ? 1.f : 0.f; + } + if (params[Metadata::param_meter_outL] || params[Metadata::param_clip_outL] || params[Metadata::param_meter_outR] || params[Metadata::param_clip_outR]) { + if (outputs) + vumeter_out.update_stereo(outputs[0] ? outputs[0] + offset : NULL, outputs[1] ? outputs[1] + offset : NULL, nsamples); + else + vumeter_out.update_zeros(nsamples); + if (params[Metadata::param_meter_outL]) + *params[Metadata::param_meter_outL] = vumeter_out.left.level; + if (params[Metadata::param_meter_outR]) + *params[Metadata::param_meter_outR] = vumeter_out.right.level; + if (params[Metadata::param_clip_outL]) + *params[Metadata::param_clip_outL] = vumeter_out.left.clip > 0 ? 1.f : 0.f; + if (params[Metadata::param_clip_outR]) + *params[Metadata::param_clip_outR] = vumeter_out.right.clip > 0 ? 1.f : 0.f; + } + } + void bypassed(float *const *params, unsigned int nsamples) + { + reset(); + process(params, NULL, NULL, 0, nsamples); + } +}; + +}; + +#endif + diff --git a/plugins/LadspaEffect/calf/src/calf/preset.h b/plugins/LadspaEffect/calf/src/calf/preset.h new file mode 100644 index 000000000..c6b93a722 --- /dev/null +++ b/plugins/LadspaEffect/calf/src/calf/preset.h @@ -0,0 +1,167 @@ +/* Calf DSP Library + * Preset management + * + * Copyright (C) 2007 Krzysztof Foltman + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this program; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02111-1307, USA. + */ +#ifndef __CALF_PRESET_H +#define __CALF_PRESET_H + +#include +#include +#include "utils.h" + +namespace calf_plugins { + +class plugin_ctl_iface; + +/// Contents of single preset +struct plugin_preset +{ + /// Bank the preset belongs to (not used yet) + int bank; + /// Program number of the preset (not used yet) + int program; + /// Name of the preset + std::string name; + /// Name of the plugin the preset is for + std::string plugin; + /// Names of parameters in values array (for each item in param_names there should be a counterpart in values) + std::vector param_names; + /// Values of parameters + std::vector values; + /// DSSI configure-style variables + std::map variables; + + plugin_preset() : bank(0), program(0) {} + /// Export preset as XML + std::string to_xml(); + /// "Upload" preset content to the plugin + void activate(plugin_ctl_iface *plugin); + /// "Download" preset content from the plugin + void get_from(plugin_ctl_iface *plugin); + + std::string get_safe_name(); +}; + +/// Exception thrown by preset system +struct preset_exception +{ + std::string message, param, fulltext; + int error; + preset_exception(const std::string &_message, const std::string &_param, int _error) + : message(_message), param(_param), error(_error) + { + } + const char *what() { + if (error) + fulltext = message + " " + param + " (" + strerror(error) + ")"; + else + fulltext = message + " " + param; + return fulltext.c_str(); + } + ~preset_exception() + { + } +}; + +/// A vector of presets +typedef std::vector preset_vector; + +/// A single list of presets (usually there are two - @see get_builtin_presets(), get_user_presets() ) +struct preset_list +{ + /// Plugin list item + struct plugin_snapshot + { + /// Preset offset + int preset_offset; + /// Plugin type + std::string type; + /// Instance name + std::string instance_name; + /// Index of the first input port + int input_index; + /// Index of the first output port + int output_index; + /// Index of the first MIDI port + int midi_index; + + /// Reset to initial values + void reset(); + }; + + /// Parser states + enum parser_state + { + START, ///< Beginning of parsing process (before root element) + LIST, ///< Inside root element + PRESET, ///< Inside preset definition + VALUE, ///< Inside (empty) param tag + VAR, ///< Inside (non-empty) var tag + PLUGIN, ///< Inside plugin element (calfjackhost snapshots only) + RACK, ///< Inside rack element (calfjackhost snapshots only) + } state; + + /// Contained presets (usually for all plugins) + preset_vector presets; + /// Temporary preset used during parsing process + plugin_preset parser_preset; + /// Temporary plugin desc used during parsing process + plugin_snapshot parser_plugin; + /// Preset number counters for DSSI (currently broken) + std::map last_preset_ids; + /// The key used in current tag (for state == VAR) + std::string current_key; + /// The file is loaded in rack mode (and rack/plugin elements are expected) + bool rack_mode; + /// List of plugin states for rack mode + std::vector plugins; + + /// Return the name of the built-in or user-defined preset file + static std::string get_preset_filename(bool builtin); + /// Load default preset list (built-in or user-defined) + bool load_defaults(bool builtin); + /// Load preset list from an in-memory XML string + void parse(const std::string &data, bool in_rack_mode); + /// Load preset list from XML file + void load(const char *filename, bool in_rack_mode); + /// Save preset list as XML file + void save(const char *filename); + /// Append or replace a preset (replaces a preset with the same plugin and preset name) + void add(const plugin_preset &sp); + /// Get a sublist of presets for a given plugin (those with plugin_preset::plugin == plugin) + void get_for_plugin(preset_vector &vec, const char *plugin); + +protected: + /// Internal function: start element handler for expat + static void xml_start_element_handler(void *user_data, const char *name, const char *attrs[]); + /// Internal function: end element handler for expat + static void xml_end_element_handler(void *user_data, const char *name); + /// Internal function: character data (tag text content) handler for expat + static void xml_character_data_handler(void *user_data, const char *data, int len); +}; + +/// Return the current list of built-in (factory) presets (these are loaded from system-wide file) +extern preset_list &get_builtin_presets(); + +/// Return the current list of user-defined presets (these are loaded from ~/.calfpresets) +extern preset_list &get_user_presets(); + +}; + +#endif diff --git a/plugins/LadspaEffect/calf/src/calf/primitives.h b/plugins/LadspaEffect/calf/src/calf/primitives.h new file mode 100644 index 000000000..0bffd8594 --- /dev/null +++ b/plugins/LadspaEffect/calf/src/calf/primitives.h @@ -0,0 +1,533 @@ +/* Calf DSP Library + * DSP primitives. + * + * Copyright (C) 2001-2007 Krzysztof Foltman + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this program; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02111-1307, USA. + */ +#ifndef __CALF_PRIMITIVES_H +#define __CALF_PRIMITIVES_H + +#include +#include +#include +#include +#include +#include +#include + +namespace dsp { + +/// Set a float to zero +inline void zero(float &v) { + v = 0; +}; + +/// Set a double to zero +inline void zero(double &v) { + v = 0; +}; + +/// Set 64-bit unsigned integer value to zero +inline void zero(uint64_t &v) { v = 0; }; +/// Set 32-bit unsigned integer value to zero +inline void zero(uint32_t &v) { v = 0; }; +/// Set 16-bit unsigned integer value to zero +inline void zero(uint16_t &v) { v = 0; }; +/// Set 8-bit unsigned integer value to zero +inline void zero(uint8_t &v) { v = 0; }; +/// Set 64-bit signed integer value to zero +inline void zero(int64_t &v) { v = 0; }; +/// Set 32-bit signed integer value to zero +inline void zero(int32_t &v) { v = 0; }; +/// Set 16-bit signed integer value to zero +inline void zero(int16_t &v) { v = 0; }; +/// Set 8-bit signed integer value to zero +inline void zero(int8_t &v) { v = 0; }; + +/// Set array (buffer or anything similar) to vector of zeroes +template +void zero(T *data, unsigned int size) { + T value; + dsp::zero(value); + for (unsigned int i=0; istruct stereo_sample { + T left; + T right; + /// default constructor - preserves T's semantics (ie. no implicit initialization to 0) + inline stereo_sample() { + } + inline stereo_sample(T _left, T _right) { + left = _left; + right = _right; + } + inline stereo_sample(T _both) { + left = right = _both; + } + template + inline stereo_sample(const stereo_sample &value) { + left = value.left; + right = value.right; + } + inline stereo_sample& operator=(const T &value) { + left = right = value; + return *this; + } + template + inline stereo_sample& operator=(const stereo_sample &value) { + left = value.left; + right = value.right; + return *this; + } +/* + inline operator T() const { + return (left+right)/2; + } +*/ + inline stereo_sample& operator*=(const T &multiplier) { + left *= multiplier; + right *= multiplier; + return *this; + } + inline stereo_sample& operator+=(const stereo_sample &value) { + left += value.left; + right += value.right; + return *this; + } + inline stereo_sample& operator-=(const stereo_sample &value) { + left -= value.left; + right -= value.right; + return *this; + } + template inline stereo_sample operator*(const U &value) const { + return stereo_sample(left*value, right*value); + } + /*inline stereo_sample operator*(float value) const { + return stereo_sample(left*value, right*value); + } + inline stereo_sample operator*(double value) const { + return stereo_sample(left*value, right*value); + }*/ + inline stereo_sample operator+(const stereo_sample &value) { + return stereo_sample(left+value.left, right+value.right); + } + inline stereo_sample operator-(const stereo_sample &value) { + return stereo_sample(left-value.left, right-value.right); + } + inline stereo_sample operator+(const T &value) { + return stereo_sample(left+value, right+value); + } + inline stereo_sample operator-(const T &value) { + return stereo_sample(left-value, right-value); + } + inline stereo_sample operator+(float value) { + return stereo_sample(left+value, right+value); + } + inline stereo_sample operator-(float value) { + return stereo_sample(left-value, right-value); + } + inline stereo_sample operator+(double value) { + return stereo_sample(left+value, right+value); + } + inline stereo_sample operator-(double value) { + return stereo_sample(left-value, right-value); + } +}; + +/// Multiply constant by stereo_value +template +inline stereo_sample operator*(const T &value, const stereo_sample &value2) { + return stereo_sample(value2.left*value, value2.right*value); +} + +/// Add constant to stereo_value +template +inline stereo_sample operator+(const T &value, const stereo_sample &value2) { + return stereo_sample(value2.left+value, value2.right+value); +} + +/// Subtract stereo_value from constant (yields stereo_value of course) +template +inline stereo_sample operator-(const T &value, const stereo_sample &value2) { + return stereo_sample(value-value2.left, value-value2.right); +} + +/// Shift value right by 'bits' bits (multiply by 2^-bits) +template +inline stereo_sample shr(stereo_sample v, int bits = 1) { + v.left = shr(v.left, bits); + v.right = shr(v.right, bits); + return v; +} + +/// Set a stereo_sample value to zero +template +inline void zero(stereo_sample &v) { + dsp::zero(v.left); + dsp::zero(v.right); +} + +/// 'Small value' for integer and other types +template +inline T small_value() { + return 0; +} + +/// 'Small value' for floats (2^-24) - used for primitive underrun prevention. The value is pretty much arbitrary (allowing for 24-bit signals normalized to 1.0). +template<> +inline float small_value() { + return (1.0/16777216.0); // allows for 2^-24, should be enough for 24-bit DACs at least :) +} + +/// 'Small value' for doubles (2^-24) - used for primitive underrun prevention. The value is pretty much arbitrary. +template<> +inline double small_value() { + return (1.0/16777216.0); +} + +/// Convert a single value to single value = do nothing :) (but it's a generic with specialisation for stereo_sample) +template +inline float mono(T v) { + return v; +} + +/// Convert a stereo_sample to single value by averaging two channels +template +inline T mono(stereo_sample v) { + return shr(v.left+v.right); +} + +/// Clip a value to [min, max] +template +inline T clip(T value, T min, T max) { + if (value < min) return min; + if (value > max) return max; + return value; +} + +/// Clip a double to [-1.0, +1.0] +inline double clip11(double value) { + double a = fabs(value); + if (a<=1) return value; + return (value<0) ? -1.0 : 1.0; +} + +/// Clip a float to [-1.0f, +1.0f] +inline float clip11(float value) { + float a = fabsf(value); + if (a<=1) return value; + return (value<0) ? -1.0f : 1.0f; +} + +/// Clip a double to [0.0, +1.0] +inline double clip01(double value) { + double a = fabs(value-0.5); + if (a<=0.5) return value; + return (a<0) ? -0.0 : 1.0; +} + +/// Clip a float to [0.0f, +1.0f] +inline float clip01(float value) { + float a = fabsf(value-0.5f); + if (a<=0.5f) return value; + return (value < 0) ? -0.0f : 1.0f; +} + +// Linear interpolation (mix-way between v1 and v2). +template +inline T lerp(T v1, T v2, U mix) { + return v1+(v2-v1)*mix; +} + +// Linear interpolation for stereo values (mix-way between v1 and v2). +template +inline stereo_sample lerp(stereo_sample &v1, stereo_sample &v2, float mix) { + return stereo_sample(v1.left+(v2.left-v1.left)*mix, v1.right+(v2.right-v1.right)*mix); +} + +/** + * decay-only envelope (linear or exponential); deactivates itself when it goes below a set point (epsilon) + */ +class decay +{ + double value, initial; + unsigned int age, mask; + bool active; +public: + decay() { + active = false; + mask = 127; + initial = value = 0.0; + } + inline bool get_active() { + return active; + } + inline double get() { + return active ? value : 0.0; + } + inline void set(double v) { + initial = value = v; + active = true; + age = 0; + } + /// reinitialise envelope (must be called if shape changes from linear to exponential or vice versa in the middle of envelope) + inline void reinit() + { + initial = value; + age = 1; + } + inline void add(double v) { + if (active) + value += v; + else + value = v; + initial = value; + age = 0; + active = true; + } + static inline double calc_exp_constant(double times, double cycles) + { + if (cycles < 1.0) + cycles = 1.0; + return pow(times, 1.0 / cycles); + } + inline void age_exp(double constant, double epsilon) { + if (active) { + if (!(age & mask)) + value = initial * pow(constant, (double)age); + else + value *= constant; + if (value < epsilon) + active = false; + age++; + } + } + inline void age_lin(double constant, double epsilon) { + if (active) { + if (!(age & mask)) + value = initial - constant * age; + else + value -= constant; + if (value < epsilon) + active = false; + age++; + } + } + inline void deactivate() { + active = false; + value = 0; + } +}; + +class scheduler; + +class task { +public: + virtual void execute(scheduler *s)=0; + virtual void dispose() { delete this; } + virtual ~task() {} +}; + +/// this scheduler is based on std::multimap, so it isn't very fast, I guess +/// maybe some day it should be rewritten to use heapsort or something +/// work in progress, don't use! +class scheduler { + std::multimap timeline; + unsigned int time, next_task; + bool eob; + class end_buf_task: public task { + public: + scheduler *p; + end_buf_task(scheduler *_p) : p(_p) {} + virtual void execute(scheduler *s) { p->eob = true; } + virtual void dispose() { } + } eobt; +public: + + scheduler() + : time(0) + , next_task((unsigned)-1) + , eob(true) + , eobt (this) + { + time = 0; + next_task = (unsigned)-1; + eob = false; + } + inline bool is_next_tick() { + if (time < next_task) + return true; + do_tasks(); + } + inline void next_tick() { + time++; + } + void set(int pos, task *t) { + timeline.insert(std::pair(time+pos, t)); + next_task = timeline.begin()->first; + } + void do_tasks() { + std::multimap::iterator i = timeline.begin(); + while(i != timeline.end() && i->first == time) { + i->second->execute(this); + i->second->dispose(); + timeline.erase(i); + } + } + bool is_eob() { + return eob; + } + void set_buffer_size(int count) { + set(count, &eobt); + } +}; + +/** + * Force "small enough" float value to zero + */ +inline void sanitize(float &value) +{ + if (std::abs(value) < small_value()) + value = 0.f; +} + +/** + * Force already-denormal float value to zero + */ +inline void sanitize_denormal(float& value) +{ + if (((*(unsigned int *) &value) & 0x7f800000) == 0) { + value = 0; + } +} + +/** + * Force "small enough" double value to zero + */ +inline void sanitize(double &value) +{ + if (std::abs(value) < small_value()) + value = 0.f; +} + +/** + * Force "small enough" stereo value to zero + */ +template +inline void sanitize(stereo_sample &value) +{ + sanitize(value.left); + sanitize(value.right); +} + +inline float fract16(unsigned int value) +{ + return (value & 0xFFFF) * (1.0 / 65536.0); +} + +/** + * typical precalculated sine table + */ +template +class sine_table +{ +public: + static bool initialized; + static T data[N+1]; + sine_table() { + if (initialized) + return; + initialized = true; + for (int i=0; i +bool sine_table::initialized = false; + +template +T sine_table::data[N+1]; + +/// fast float to int conversion using default rounding mode +inline int fastf2i_drm(float f) +{ +#ifdef __X86__ + volatile int v; + __asm ( "flds %1; fistpl %0" : "=m"(v) : "m"(f)); + return v; +#else + return (int)nearbyintf(f); +#endif +} + +/// Convert MIDI note to frequency in Hz. +inline float note_to_hz(double note, double detune_cents = 0.0) +{ + return 440 * pow(2.0, (note - 69 + detune_cents/100.0) / 12.0); +} + +/// Hermite interpolation between two points and slopes in normalized range (written after Wikipedia article) +/// @arg t normalized x coordinate (0-1 over the interval in question) +/// @arg p0 first point +/// @arg p1 second point +/// @arg m0 first slope (multiply by interval width when using over non-1-wide interval) +/// @arg m1 second slope (multiply by interval width when using over non-1-wide interval) +inline float normalized_hermite(float t, float p0, float p1, float m0, float m1) +{ + float t2 = t*t; + float t3 = t2*t; + return (2*t3 - 3*t2 + 1) * p0 + (t3 - 2*t2 + t) * m0 + (-2*t3 + 3*t2) * p1 + (t3-t2) * m1; +} + +/// Hermite interpolation between two points and slopes +/// @arg x point within interval (x0 <= x <= x1) +/// @arg x0 interval start +/// @arg x1 interval end +/// @arg p0 value at x0 +/// @arg p1 value at x1 +/// @arg m0 slope (steepness, tangent) at x0 +/// @arg m1 slope at x1 +inline float hermite_interpolation(float x, float x0, float x1, float p0, float p1, float m0, float m1) +{ + float width = x1 - x0; + float t = (x - x0) / width; + m0 *= width; + m1 *= width; + float t2 = t*t; + float t3 = t2*t; + + float ct0 = p0; + float ct1 = m0; + float ct2 = -3 * p0 - 2 * m0 + 3 * p1 - m1; + float ct3 = 2 * p0 + m0 - 2 * p1 + m1; + + return ct3 * t3 + ct2 * t2 + ct1 * t + ct0; + //return (2*t3 - 3*t2 + 1) * p0 + (t3 - 2*t2 + t) * m0 + (-2*t3 + 3*t2) * p1 + (t3-t2) * m1; +} + +/// convert amplitude value to dB +inline float amp2dB(float amp) +{ + return 6.0 * log(amp) / log(2); +} + +}; + +#endif diff --git a/plugins/LadspaEffect/calf/src/calf/synth.h b/plugins/LadspaEffect/calf/src/calf/synth.h new file mode 100644 index 000000000..85fb35404 --- /dev/null +++ b/plugins/LadspaEffect/calf/src/calf/synth.h @@ -0,0 +1,230 @@ +/* Calf DSP Library + * Framework for synthesizer-like plugins. This is based + * on my earlier work on Drawbar electric organ emulator. + * + * Copyright (C) 2007 Krzysztof Foltman + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this program; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02111-1307, USA. + */ +#ifndef CALF_SYNTH_H +#define CALF_SYNTH_H + +#include +#include +#include +#include +#include +#include +#include + +namespace dsp { + +/** + * A kind of set with fast non-ordered iteration, used for storing lists of pressed keys. + */ +class keystack { +private: + int dcount; + uint8_t active[128]; + uint8_t states[128]; +public: + keystack() { + memset(states, 0xFF, sizeof(states)); + dcount = 0; + } + void clear() { + for (int i=0; i= 0 && key <= 127); + if (states[key] != 0xFF) { + return true; + } + states[key] = dcount; + active[dcount++] = key; + return false; + } + bool pop(int key) { + if (states[key] == 0xFF) + return false; + int pos = states[key]; + if (pos != dcount-1) { + // reuse the popped item's stack position for stack top + int last = active[dcount-1]; + active[pos] = last; + // mark that position's new place on stack + states[last] = pos; + } + states[key] = 0xFF; + dcount--; + return true; + } + inline bool has(int key) { + return states[key] != 0xFF; + } + inline int count() { + return dcount; + } + inline bool empty() { + return (dcount == 0); + } + inline int nth(int n) { + return active[n]; + } +}; + +/** + * Convert MIDI note number to normalized UINT phase (where 1<<32 is full cycle). + * @param MIDI note number + * @param cents detune in cents (1/100 of a semitone) + * @param sr sample rate + */ +inline unsigned int midi_note_to_phase(int note, double cents, int sr) { + double incphase = 440*pow(2.0, (note-69)/12.0 + cents/1200.0)/sr; + if (incphase >= 1.0) incphase = fmod(incphase, 1.0); + incphase *= 65536.0*65536.0; + return (unsigned int)incphase; +} + +// Base class for all voice objects +class voice { +public: + int sample_rate; + bool released, sostenuto, stolen; + + voice() : sample_rate(-1), released(false), sostenuto(false), stolen(false) {} + + /// reset voice to default state (used when a voice is to be reused) + virtual void setup(int sr) { sample_rate = sr; } + /// reset voice to default state (used when a voice is to be reused) + virtual void reset()=0; + /// a note was pressed + virtual void note_on(int note, int vel)=0; + /// a note was released + virtual void note_off(int vel)=0; + /// check if voice can be removed from active voice list + virtual bool get_active()=0; + /// render voice data to buffer + virtual void render_to(float (*buf)[2], int nsamples)=0; + /// very fast note off + virtual void steal()=0; + /// return the note used by this voice + virtual int get_current_note()=0; + virtual float get_priority() { return stolen ? 20000 : (released ? 1 : (sostenuto ? 200 : 100)); } + /// empty virtual destructor + virtual ~voice() {} +}; + +/// An "optimized" voice class using fixed-size processing units +/// and fixed number of channels. The drawback is that voice +/// control is not sample-accurate, and no modulation input +/// is possible, but it should be good enough for most cases +/// (like Calf Organ). +template +class block_voice: public Base { +public: + // derived from Base + // enum { Channels = 2 }; + using Base::Channels; + // enum { BlockSize = 16 }; + using Base::BlockSize; + // float output_buffer[BlockSize][Channels]; + using Base::output_buffer; + // void render_block(); + using Base::render_block; + unsigned int read_ptr; + + block_voice() + { + read_ptr = BlockSize; + } + virtual void reset() + { + Base::reset(); + read_ptr = BlockSize; + } + virtual void render_to(float (*buf)[2], int nsamples) + { + int p = 0; + while(p < nsamples) + { + if (read_ptr == BlockSize) + { + render_block(); + read_ptr = 0; + } + int ncopy = std::min(BlockSize - read_ptr, nsamples - p); + for (int i = 0; i < ncopy; i++) + for (int c = 0; c < Channels; c++) + buf[p + i][c] += output_buffer[read_ptr + i][c]; + p += ncopy; + read_ptr += ncopy; + } + } +}; + +/// Base class for all kinds of polyphonic instruments, provides +/// somewhat reasonable voice management, pedal support - and +/// little else. It's implemented as a base class with virtual +/// functions, so there's some performance loss, but it shouldn't +/// be horrible. +/// @todo it would make sense to support all notes off controller too +struct basic_synth { +protected: + /// Current sample rate + int sample_rate; + /// Hold pedal state + bool hold; + /// Sostenuto pedal state + bool sostenuto; + /// Voices currently playing + std::list active_voices; + /// Voices allocated, but not used + std::stack unused_voices; + /// Gate values for all 128 MIDI notes + std::bitset<128> gate; + /// Maximum allocated number of channels + unsigned int polyphony_limit; + + void kill_note(int note, int vel, bool just_one); +public: + virtual void setup(int sr) { + sample_rate = sr; + hold = false; + sostenuto = false; + polyphony_limit = (unsigned)-1; + } + virtual void trim_voices(); + virtual dsp::voice *give_voice(); + virtual dsp::voice *alloc_voice()=0; + virtual dsp::voice *steal_voice(); + virtual void render_to(float (*output)[2], int nsamples); + virtual void note_on(int note, int vel); + virtual void percussion_note_on(int note, int vel) {} + virtual void control_change(int ctl, int val); + virtual void note_off(int note, int vel); + /// amt = -8192 to 8191 + virtual void pitch_bend(int amt) {} + virtual void on_pedal_release(); + virtual bool check_percussion() { return active_voices.empty(); } + virtual ~basic_synth(); +}; + +} + +#endif diff --git a/plugins/LadspaEffect/calf/src/calf/utils.h b/plugins/LadspaEffect/calf/src/calf/utils.h new file mode 100644 index 000000000..783a98ad3 --- /dev/null +++ b/plugins/LadspaEffect/calf/src/calf/utils.h @@ -0,0 +1,191 @@ +/* Calf DSP Library + * Utilities + * + * Copyright (C) 2008 Krzysztof Foltman + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this program; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02111-1307, USA. + */ +#ifndef __CALF_UTILS_H +#define __CALF_UTILS_H + +#include +#include +#include +#include + +namespace calf_utils +{ + +/// Pthreads based mutex class +class ptmutex +{ +public: + pthread_mutex_t pm; + + ptmutex(int type = PTHREAD_MUTEX_RECURSIVE) + { + pthread_mutexattr_t attr; + pthread_mutexattr_init(&attr); + pthread_mutexattr_settype(&attr, type); + pthread_mutex_init(&pm, &attr); + pthread_mutexattr_destroy(&attr); + } + + bool lock() + { + return pthread_mutex_lock(&pm) == 0; + } + + bool trylock() + { + return pthread_mutex_trylock(&pm) == 0; + } + + void unlock() + { + pthread_mutex_unlock(&pm); + } + + ~ptmutex() + { + pthread_mutex_destroy(&pm); + } +}; + +class ptlock_base +{ +protected: + ptmutex &mutex; + bool locked; + + ptlock_base(ptmutex &_m) + : mutex(_m) + , locked(false) + { + } + +public: + bool is_locked() + { + return locked; + } + void unlock() + { + mutex.unlock(); + locked = false; + } + void unlocked() + { + locked = false; + } + ~ptlock_base() + { + if (locked) + mutex.unlock(); + } +}; + +/// Exception-safe mutex lock +class ptlock: public ptlock_base +{ +public: + ptlock(ptmutex &_m) : ptlock_base(_m) + { + locked = mutex.lock(); + } +}; + +/// Exception-safe polling mutex lock +class pttrylock: public ptlock_base +{ +public: + pttrylock(ptmutex &_m) : ptlock_base(_m) + { + locked = mutex.trylock(); + } +}; + +/// Exception-safe temporary assignment +template +class scope_assign +{ + Tref data; + T old_value; +public: + scope_assign(Tref _data, T new_value) + : data(_data), old_value(_data) + { + data = new_value; + } + ~scope_assign() + { + data = old_value; + } +}; + +struct text_exception: public std::exception +{ + const char *text; + std::string container; +public: + text_exception(const std::string &t) : container(t) { text = container.c_str(); } + virtual const char *what() const throw () { return text; } + virtual ~text_exception() throw () {} +}; + +struct file_exception: public std::exception +{ + const char *text; + std::string message, filename, container; +public: + file_exception(const std::string &f); + file_exception(const std::string &f, const std::string &t); + virtual const char *what() const throw () { return text; } + virtual ~file_exception() throw () {} +}; + +/// String-to-string mapping +typedef std::map dictionary; + +/// Serialize a dictonary to a string +extern std::string encode_map(const dictionary &data); +/// Deserialize a dictonary from a string +extern void decode_map(dictionary &data, const std::string &src); + +/// int-to-string +extern std::string i2s(int value); + +/// float-to-string +extern std::string f2s(double value); + +/// float-to-string-that-doesn't-resemble-an-int +extern std::string ff2s(double value); + +/// Encode a key-value pair as XML attribute +std::string to_xml_attr(const std::string &key, const std::string &value); + +/// Escape a string to be used in XML file +std::string xml_escape(const std::string &src); + +/// Load file from disk into a std::string blob, or throw file_exception +std::string load_file(const std::string &src); + +/// Indent a string by another string (prefix each line) +std::string indent(const std::string &src, const std::string &indent); + +}; + +#endif diff --git a/plugins/LadspaEffect/calf/src/calf/vumeter.h b/plugins/LadspaEffect/calf/src/calf/vumeter.h new file mode 100644 index 000000000..64536598e --- /dev/null +++ b/plugins/LadspaEffect/calf/src/calf/vumeter.h @@ -0,0 +1,147 @@ +/* Calf DSP Library + * Peak metering facilities. + * + * Copyright (C) 2007 Krzysztof Foltman + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + * 02110-1301, USA. + */ +#ifndef __CALF_VUMETER_H +#define __CALF_VUMETER_H + +#include + +namespace dsp { + +/// Peak meter class +struct vumeter +{ + /// Measured signal level + float level; + /// Falloff of signal level (b1 coefficient of a 1-pole filter) + float falloff; + /// Clip indicator (set to 1 when |value| >= 1, fading otherwise) + float clip; + /// Falloff of clip indicator (b1 coefficient of a 1-pole filter); set to 1 if no falloff is required (manual reset of clip indicator) + float clip_falloff; + + vumeter() + { + falloff = 0.999f; + clip_falloff = 0.999f; + reset(); + } + + void reset() + { + level = 0; + clip = 0; + } + + /// Set falloff so that the meter falls 20dB in time_20dB seconds, assuming sample rate of sample_rate + /// @arg time_20dB time for the meter to move by 20dB (default 300ms if <= 0) + void set_falloff(double time_20dB, double sample_rate) + { + if (time_20dB <= 0) + time_20dB = 0.3; + // 20dB = 10x +/- --> 0.1 = pow(falloff, sample_rate * time_20dB) = exp(sample_rate * ln(falloff)) + // ln(0.1) = sample_rate * ln(falloff) + falloff = pow(0.1, 1 / (sample_rate * time_20dB)); + clip_falloff = falloff; + } + /// Copy falloff from another object + void copy_falloff(const vumeter &src) + { + falloff = src.falloff; + clip_falloff = src.clip_falloff; + } + + /// Update peak meter based on input signal + inline void update(const float *src, unsigned int len) + { + update_stereo(src, NULL, len); + } + /// Update peak meter based on louder of two input signals + inline void update_stereo(const float *src1, const float *src2, unsigned int len) + { + // "Age" the old level by falloff^length + level *= pow(falloff, len); + // Same for clip level (using different fade constant) + clip *= pow(clip_falloff, len); + dsp::sanitize(level); + dsp::sanitize(clip); + // Process input samples - to get peak value, take a max of all values in the input signal and "aged" old peak + // Clip is set to 1 if any sample is out-of-range, if no clip occurs, the "aged" value is assumed + if (src1) + run_sample_loop(src1, len); + if (src2) + run_sample_loop(src2, len); + } + inline void run_sample_loop(const float *src, unsigned int len) + { + float tmp = level; + for (unsigned int i = 0; i < len; i++) { + float sig = fabs(src[i]); + tmp = std::max(tmp, sig); + if (sig >= 1.f) + clip = 1.f; + } + level = tmp; + } + /// Update clip meter as if update was called with all-zero input signal + inline void update_zeros(unsigned int len) + { + level *= pow((double)falloff, (double)len); + clip *= pow((double)clip_falloff, (double)len); + dsp::sanitize(level); + dsp::sanitize(clip); + } +}; + +struct dual_vumeter +{ + vumeter left, right; + + inline void update_stereo(const float *src1, const float *src2, unsigned int len) + { + left.update_stereo(src1, NULL, len); + right.update_stereo(NULL, src2, len); + } + inline void update_zeros(unsigned int len) + { + left.update_zeros(len); + right.update_zeros(len); + } + inline void reset() + { + left.reset(); + right.reset(); + } + inline void set_falloff(double time_20dB, double sample_rate) + { + left.set_falloff(time_20dB, sample_rate); + right.copy_falloff(left); + } + inline void copy_falloff(const dual_vumeter &src) + { + left.copy_falloff(src.left); + right.copy_falloff(src.right); + } + +}; + +}; + +#endif diff --git a/plugins/LadspaEffect/calf/src/calf/waveshaping.h b/plugins/LadspaEffect/calf/src/calf/waveshaping.h new file mode 100644 index 000000000..914637c0a --- /dev/null +++ b/plugins/LadspaEffect/calf/src/calf/waveshaping.h @@ -0,0 +1,37 @@ +/* Calf DSP Library + * Placeholder for waveshaping classes + * + * Copyright (C) 2001-2009 Krzysztof Foltman + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this program; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02111-1307, USA. + */ +#ifndef __CALF_WAVESHAPING_H +#define __CALF_WAVESHAPING_H + +/// This will be a waveshaper... when I'll code it (-: +/// (or get Tom Szlagyi's permission to use his own) +class waveshaper { +public: + waveshaper(); + void activate() {} + void deactivate() {} + void set_params(float blend, float drive) {} + void set_sample_rate(uint32_t sr) {} + float process(float in) { return in; } + float get_distortion_level() { return 1; } +}; + +#endif diff --git a/plugins/LadspaEffect/calf/src/calf/wavetable.h b/plugins/LadspaEffect/calf/src/calf/wavetable.h new file mode 100644 index 000000000..836585acb --- /dev/null +++ b/plugins/LadspaEffect/calf/src/calf/wavetable.h @@ -0,0 +1,167 @@ +#ifndef __CALF_WAVETABLE_H +#define __CALF_WAVETABLE_H + +#include +#include "biquad.h" +#include "onepole.h" +#include "audio_fx.h" +#include "inertia.h" +#include "osc.h" +#include "synth.h" +#include "envelope.h" +#include "modmatrix.h" + +namespace calf_plugins { + +#define WAVETABLE_WAVE_BITS 8 + +class wavetable_audio_module; + +struct wavetable_oscillator: public dsp::simple_oscillator +{ + enum { SIZE = 1 << 8, MASK = SIZE - 1, SCALE = 1 << (32 - 8) }; + int16_t (*tables)[256]; + inline float get(uint16_t slice) + { + float fracslice = (slice & 255) * (1.0 / 256.0); + slice = slice >> 8; + int16_t *waveform = tables[slice]; + int16_t *waveform2 = tables[slice + 1]; + float value1 = 0.f, value2 = 0.f; + uint32_t cphase = phase, cphasedelta = phasedelta >> 3; + for (int j = 0; j < 8; j++) + { + uint32_t wpos = cphase >> (32 - 8); + uint32_t wpos2 = (wpos + 1) & MASK; + float frac = (cphase & (SCALE - 1)) * (1.0f / SCALE); + value1 += dsp::lerp((float)waveform[wpos], (float)waveform[wpos2], frac); + value2 += dsp::lerp((float)waveform2[wpos], (float)waveform2[wpos2], frac); + cphase += cphasedelta; + } + phase += phasedelta; + return dsp::lerp(value1, value2, fracslice) * (1.0 / 8.0) * (1.0 / 32768.0);; + } +}; + +class wavetable_voice: public dsp::voice +{ +public: + enum { Channels = 2, BlockSize = 64, EnvCount = 3, OscCount = 2 }; + float output_buffer[BlockSize][Channels]; +protected: + int note; + wavetable_audio_module *parent; + float **params; + dsp::decay amp; + wavetable_oscillator oscs[OscCount]; + dsp::adsr envs[EnvCount]; + /// Current MIDI velocity + float velocity; + /// Current calculated mod matrix outputs + float moddest[wavetable_metadata::moddest_count]; + /// Last oscillator shift (wavetable index) of each oscillator + float last_oscshift[OscCount]; + /// Last oscillator amplitude of each oscillator + float last_oscamp[OscCount]; + /// Current osc amplitude + float cur_oscamp[OscCount]; +public: + wavetable_voice(); + void set_params_ptr(wavetable_audio_module *_parent, int _srate); + void reset(); + void note_on(int note, int vel); + void note_off(int /* vel */); + void channel_pressure(int value); + void steal(); + void render_block(); + virtual int get_current_note() { + return note; + } + virtual bool get_active() { + // printf("note %d getactive %d use_percussion %d pamp active %d\n", note, amp.get_active(), use_percussion(), pamp.get_active()); + return (note != -1) && (amp.get_active()) && !envs[0].stopped(); + } + inline void calc_derived_dests() { + float cv = dsp::clip(0.5f + moddest[wavetable_metadata::moddest_oscmix], 0.f, 1.f); + cur_oscamp[0] = (cv) * *params[wavetable_metadata::par_o1level]; + cur_oscamp[1] = (1 - cv) * *params[wavetable_metadata::par_o2level]; + } +}; + +class wavetable_audio_module: public audio_module, public dsp::basic_synth, public mod_matrix_impl +{ +public: + using dsp::basic_synth::note_on; + using dsp::basic_synth::note_off; + using dsp::basic_synth::control_change; + using dsp::basic_synth::pitch_bend; + +protected: + uint32_t crate; + bool panic_flag; + +public: + int16_t tables[wt_count][129][256]; // one dummy level for interpolation + /// Rows of the modulation matrix + dsp::modulation_entry mod_matrix_data[mod_matrix_slots]; + /// Smoothed cutoff value + dsp::inertia inertia_cutoff; + /// Smoothed pitch bend value + dsp::inertia inertia_pitchbend; + /// Smoothed channel pressure value + dsp::inertia inertia_pressure; + /// Unsmoothed mod wheel value + float modwheel_value; + +public: + wavetable_audio_module(); + + dsp::voice *alloc_voice() { + dsp::block_voice *v = new dsp::block_voice(); + v->set_params_ptr(this, sample_rate); + return v; + } + + /// process function copied from Organ (will probably need some adjustments as well as implementing the panic flag elsewhere + uint32_t process(uint32_t offset, uint32_t nsamples, uint32_t inputs_mask, uint32_t outputs_mask) { + float *o[2] = { outs[0] + offset, outs[1] + offset }; + if (panic_flag) + { + control_change(120, 0); // stop all sounds + control_change(121, 0); // reset all controllers + panic_flag = false; + } + float buf[4096][2]; + dsp::zero(&buf[0][0], 2 * nsamples); + basic_synth::render_to(buf, nsamples); + float gain = 1.0f; + for (uint32_t i=0; i +#include +#include +#include + +using namespace std; +using namespace calf_utils; +using namespace calf_plugins; + +float parameter_properties::from_01(double value01) const +{ + double value = dsp::clip(value01, 0., 1.); + switch(flags & PF_SCALEMASK) + { + case PF_SCALE_DEFAULT: + case PF_SCALE_LINEAR: + case PF_SCALE_PERC: + default: + value = min + (max - min) * value01; + break; + case PF_SCALE_QUAD: + value = min + (max - min) * value01 * value01; + break; + case PF_SCALE_LOG: + value = min * pow(double(max / min), value01); + break; + case PF_SCALE_GAIN: + if (value01 < 0.00001) + value = min; + else { + float rmin = std::max(1.0f / 1024.0f, min); + value = rmin * pow(double(max / rmin), value01); + } + break; + case PF_SCALE_LOG_INF: + assert(step); + if (value01 > (step - 1.0) / step) + value = FAKE_INFINITY; + else + value = min * pow(double(max / min), value01 * step / (step - 1.0)); + break; + } + switch(flags & PF_TYPEMASK) + { + case PF_INT: + case PF_BOOL: + case PF_ENUM: + case PF_ENUM_MULTI: + if (value > 0) + value = (int)(value + 0.5); + else + value = (int)(value - 0.5); + break; + } + return value; +} + +double parameter_properties::to_01(float value) const +{ + switch(flags & PF_SCALEMASK) + { + case PF_SCALE_DEFAULT: + case PF_SCALE_LINEAR: + case PF_SCALE_PERC: + default: + return double(value - min) / (max - min); + case PF_SCALE_QUAD: + return sqrt(double(value - min) / (max - min)); + case PF_SCALE_LOG: + value /= min; + return log((double)value) / log((double)max / min); + case PF_SCALE_LOG_INF: + if (IS_FAKE_INFINITY(value)) + return max; + value /= min; + assert(step); + return (step - 1.0) * log((double)value) / (step * log((double)max / min)); + case PF_SCALE_GAIN: + if (value < 1.0 / 1024.0) // new bottom limit - 60 dB + return 0; + double rmin = std::max(1.0f / 1024.0f, min); + value /= rmin; + return log((double)value) / log(max / rmin); + } +} + +float parameter_properties::get_increment() const +{ + float increment = 0.01; + if (step > 1) + increment = 1.0 / (step - 1); + else + if (step > 0 && step < 1) + increment = step; + else + if ((flags & PF_TYPEMASK) != PF_FLOAT) + increment = 1.0 / (max - min); + return increment; +} + +int parameter_properties::get_char_count() const +{ + if ((flags & PF_SCALEMASK) == PF_SCALE_PERC) + return 6; + if ((flags & PF_SCALEMASK) == PF_SCALE_GAIN) { + char buf[256]; + size_t len = 0; + sprintf(buf, "%0.0f dB", 6.0 * log(min) / log(2)); + len = strlen(buf); + sprintf(buf, "%0.0f dB", 6.0 * log(max) / log(2)); + len = std::max(len, strlen(buf)) + 2; + return (int)len; + } + return std::max(to_string(min).length(), std::max(to_string(max).length(), to_string(min + (max-min) * 0.987654).length())); +} + +std::string parameter_properties::to_string(float value) const +{ + char buf[32]; + if ((flags & PF_SCALEMASK) == PF_SCALE_PERC) { + sprintf(buf, "%0.f%%", 100.0 * value); + return string(buf); + } + if ((flags & PF_SCALEMASK) == PF_SCALE_GAIN) { + if (value < 1.0 / 1024.0) // new bottom limit - 60 dB + return "-inf dB"; // XXXKF change to utf-8 infinity + sprintf(buf, "%0.1f dB", 6.0 * log(value) / log(2)); + return string(buf); + } + switch(flags & PF_TYPEMASK) + { + case PF_INT: + case PF_BOOL: + case PF_ENUM: + case PF_ENUM_MULTI: + value = (int)value; + break; + } + + if ((flags & PF_SCALEMASK) == PF_SCALE_LOG_INF && IS_FAKE_INFINITY(value)) + sprintf(buf, "+inf"); // XXXKF change to utf-8 infinity + else + sprintf(buf, "%g", value); + + switch(flags & PF_UNITMASK) { + case PF_UNIT_DB: return string(buf) + " dB"; + case PF_UNIT_HZ: return string(buf) + " Hz"; + case PF_UNIT_SEC: return string(buf) + " s"; + case PF_UNIT_MSEC: return string(buf) + " ms"; + case PF_UNIT_CENTS: return string(buf) + " ct"; + case PF_UNIT_SEMITONES: return string(buf) + "#"; + case PF_UNIT_BPM: return string(buf) + " bpm"; + case PF_UNIT_RPM: return string(buf) + " rpm"; + case PF_UNIT_DEG: return string(buf) + " deg"; + case PF_UNIT_NOTE: + { + static const char *notes = "C C#D D#E F F#G G#A A#B "; + int note = (int)value; + if (note < 0 || note > 127) + return "---"; + return string(notes + 2 * (note % 12), 2) + i2s(note / 12 - 2); + } + } + + return string(buf); +} + +void calf_plugins::plugin_ctl_iface::clear_preset() { + int param_count = get_metadata_iface()->get_param_count(); + for (int i = 0; i < param_count; i++) + { + const parameter_properties &pp = *get_metadata_iface()->get_param_props(i); + set_param_value(i, pp.def_value); + } + const char *const *vars = get_metadata_iface()->get_configure_vars(); + if (vars) + { + for (int i = 0; vars[i]; i++) + configure(vars[i], NULL); + } +} + +const char *calf_plugins::load_gui_xml(const std::string &plugin_id) +{ +#if 0 + try { + return strdup(calf_utils::load_file((std::string(PKGLIBDIR) + "/gui-" + plugin_id + ".xml").c_str()).c_str()); + } + catch(file_exception e) +#endif + { + return NULL; + } +} + +bool calf_plugins::get_freq_gridline(int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context, bool use_frequencies, float res, float ofs) +{ + if (subindex < 0 ) + return false; + if (use_frequencies) + { + if (subindex < 28) + { + vertical = true; + if (subindex == 9) legend = "100 Hz"; + if (subindex == 18) legend = "1 kHz"; + if (subindex == 27) legend = "10 kHz"; + float freq = 100; + if (subindex < 9) + freq = 10 * (subindex + 1); + else if (subindex < 18) + freq = 100 * (subindex - 9 + 1); + else if (subindex < 27) + freq = 1000 * (subindex - 18 + 1); + else + freq = 10000 * (subindex - 27 + 1); + pos = log(freq / 20.0) / log(1000); + if (!legend.empty()) + context->set_source_rgba(0, 0, 0, 0.2); + else + context->set_source_rgba(0, 0, 0, 0.1); + return true; + } + subindex -= 28; + } + if (subindex >= 32) + return false; + float gain = 16.0 / (1 << subindex); + pos = dB_grid(gain, res, ofs); + if (pos < -1) + return false; + if (subindex != 4) + context->set_source_rgba(0, 0, 0, subindex & 1 ? 0.1 : 0.2); + if (!(subindex & 1)) + { + std::stringstream ss; + ss << (24 - 6 * subindex) << " dB"; + legend = ss.str(); + } + vertical = false; + return true; +} + +void calf_plugins::set_channel_color(cairo_iface *context, int channel) +{ + if (channel & 1) + context->set_source_rgba(0.35, 0.4, 0.2, 1); + else + context->set_source_rgba(0.35, 0.4, 0.2, 0.5); + context->set_line_width(1.5); +} + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +bool frequency_response_line_graph::get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const +{ + return get_freq_gridline(subindex, pos, vertical, legend, context); +} + +int frequency_response_line_graph::get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline) const +{ + subindex_graph = 0; + subindex_dot = 0; + subindex_gridline = generation ? INT_MAX : 0; + return 1; +} + +/////////////////////////////////////////////////////////////////////////////////////// + +calf_plugins::plugin_registry &calf_plugins::plugin_registry::instance() +{ + static calf_plugins::plugin_registry registry; + return registry; +} + +const plugin_metadata_iface *calf_plugins::plugin_registry::get_by_uri(const char *plugin_uri) +{ + static const char prefix[] = "http://calf.sourceforge.net/plugins/"; + if (strncmp(plugin_uri, prefix, sizeof(prefix) - 1)) + return NULL; + const char *label = plugin_uri + sizeof(prefix) - 1; + for (unsigned int i = 0; i < plugins.size(); i++) + { + if (!strcmp(plugins[i]->get_plugin_info().label, label)) + return plugins[i]; + } + return NULL; +} + +const plugin_metadata_iface *calf_plugins::plugin_registry::get_by_id(const char *id, bool case_sensitive) +{ + typedef int (*comparator)(const char *, const char *); + comparator comp = case_sensitive ? strcmp : strcasecmp; + for (unsigned int i = 0; i < plugins.size(); i++) + { + if (!comp(plugins[i]->get_id(), id)) + return plugins[i]; + } + return NULL; +} + +/////////////////////////////////////////////////////////////////////////////////////// + +bool calf_plugins::parse_table_key(const char *key, const char *prefix, bool &is_rows, int &row, int &column) +{ + is_rows = false; + row = -1; + column = -1; + if (0 != strncmp(key, prefix, strlen(prefix))) + return false; + + key += strlen(prefix); + + if (!strcmp(key, "rows")) + { + is_rows = true; + return true; + } + + const char *comma = strchr(key, ','); + if (comma) + { + row = atoi(string(key, comma - key).c_str()); + column = atoi(comma + 1); + return true; + } + + printf("Unknown key %s under prefix %s", key, prefix); + + return false; +} + +/////////////////////////////////////////////////////////////////////////////////////// + +const char *mod_mapping_names[] = { "0..1", "-1..1", "-1..0", "x^2", "2x^2-1", "ASqr", "ASqrBip", "Para", NULL }; + +mod_matrix_metadata::mod_matrix_metadata(unsigned int _rows, const char **_src_names, const char **_dest_names) +: mod_src_names(_src_names) +, mod_dest_names(_dest_names) +, matrix_rows(_rows) +{ + table_column_info tci[6] = { + { "Source", TCT_ENUM, 0, 0, 0, mod_src_names }, + { "Mapping", TCT_ENUM, 0, 0, 0, mod_mapping_names }, + { "Modulator", TCT_ENUM, 0, 0, 0, mod_src_names }, + { "Amount", TCT_FLOAT, 0, 1, 1, NULL}, + { "Destination", TCT_ENUM, 0, 0, 0, mod_dest_names }, + { NULL } + }; + assert(sizeof(table_columns) == sizeof(tci)); + memcpy(table_columns, tci, sizeof(table_columns)); +} + +const table_column_info *mod_matrix_metadata::get_table_columns() const +{ + return table_columns; +} + +uint32_t mod_matrix_metadata::get_table_rows() const +{ + return matrix_rows; +} + +/////////////////////////////////////////////////////////////////////////////////////// + +#if USE_EXEC_GUI + +table_via_configure::table_via_configure() +{ + rows = 0; +} + +table_via_configure::~table_via_configure() +{ +} + +#endif diff --git a/plugins/LadspaEffect/calf/src/metadata.cpp b/plugins/LadspaEffect/calf/src/metadata.cpp new file mode 100644 index 000000000..45891e96e --- /dev/null +++ b/plugins/LadspaEffect/calf/src/metadata.cpp @@ -0,0 +1,1446 @@ +/* Calf DSP Library + * Example audio modules - parameters and LADSPA wrapper instantiation + * + * Copyright (C) 2001-2008 Krzysztof Foltman + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this program; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA + */ +#include +#include +#include +#include +#include + +using namespace dsp; +using namespace calf_plugins; + +const char *calf_plugins::calf_copyright_info = "(C) 2001-2009 Krzysztof Foltman, Thor Harald Johanssen, Markus Schmidt and others; license: LGPL"; + +//////////////////////////////////////////////////////////////////////////// + +CALF_PORT_NAMES(flanger) = {"In L", "In R", "Out L", "Out R"}; + +CALF_PORT_PROPS(flanger) = { + { 0.1, 0.1, 10, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC | PF_PROP_GRAPH, NULL, "min_delay", "Min delay" }, + { 0.5, 0.1, 10, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "mod_depth", "Mod depth" }, + { 0.25, 0.01, 20, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "mod_rate", "Mod rate" }, + { 0.90, -0.99, 0.99, 0, PF_FLOAT | PF_SCALE_PERC | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "feedback", "Feedback" }, + { 0, 0, 360, 9, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_DEG, NULL, "stereo", "Stereo phase" }, + { 0, 0, 1, 2, PF_BOOL | PF_CTL_BUTTON , NULL, "reset", "Reset" }, + { 1, 0, 4, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "amount", "Amount" }, + { 1.0, 0, 4, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "dry", "Dry Amount" }, + {} +}; + +CALF_PLUGIN_INFO(flanger) = { 0x847d, "Flanger", "Calf Flanger", "Krzysztof Foltman", calf_plugins::calf_copyright_info, "FlangerPlugin" }; + +//////////////////////////////////////////////////////////////////////////// + +CALF_PORT_NAMES(phaser) = {"In L", "In R", "Out L", "Out R"}; + +CALF_PORT_PROPS(phaser) = { + { 1000, 20, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ | PF_PROP_GRAPH, NULL, "base_freq", "Center Freq" }, + { 4000, 0, 10800, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_CENTS, NULL, "mod_depth", "Mod depth" }, + { 0.25, 0.01, 20, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "mod_rate", "Mod rate" }, + { 0.25, -0.99, 0.99, 0, PF_FLOAT | PF_SCALE_PERC | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "feedback", "Feedback" }, + { 6, 1, 12, 12, PF_INT | PF_SCALE_LINEAR | PF_CTL_KNOB, NULL, "stages", "# Stages" }, + { 180, 0, 360, 9, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_DEG, NULL, "stereo", "Stereo phase" }, + { 0, 0, 1, 2, PF_BOOL | PF_CTL_BUTTON , NULL, "reset", "Reset" }, + { 1, 0, 4, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "amount", "Amount" }, + { 1.0, 0, 4, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "dry", "Dry Amount" }, +}; + +CALF_PLUGIN_INFO(phaser) = { 0x8484, "Phaser", "Calf Phaser", "Krzysztof Foltman", calf_plugins::calf_copyright_info, "PhaserPlugin" }; + +//////////////////////////////////////////////////////////////////////////// + +CALF_PORT_NAMES(reverb) = {"In L", "In R", "Out L", "Out R"}; + +const char *reverb_room_sizes[] = { "Small", "Medium", "Large", "Tunnel-like", "Large/smooth", "Experimental" }; + +CALF_PORT_PROPS(reverb) = { + { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip", "0dB" }, + { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_wet", "Wet amount" }, + { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_out", "Output" }, + { 1.5, 0.4, 15.0, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_SEC, NULL, "decay_time", "Decay time" }, + { 5000, 2000,20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "hf_damp", "High Frq Damp" }, + { 2, 0, 5, 0, PF_ENUM | PF_CTL_COMBO , reverb_room_sizes, "room_size", "Room size", }, + { 0.5, 0, 1, 0, PF_FLOAT | PF_CTL_KNOB | PF_SCALE_PERC, NULL, "diffusion", "Diffusion" }, + { 0.25, 0, 2, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "amount", "Wet Amount" }, + { 1.0, 0, 2, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "dry", "Dry Amount" }, + { 0, 0, 50, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "predelay", "Pre Delay" }, + { 300, 20, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "bass_cut", "Bass Cut" }, + { 5000, 20, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "treble_cut", "Treble Cut" }, + {} +}; + +CALF_PLUGIN_INFO(reverb) = { 0x847e, "Reverb", "Calf Reverb", "Krzysztof Foltman", calf_plugins::calf_copyright_info, "ReverbPlugin" }; + +//////////////////////////////////////////////////////////////////////////// + +CALF_PORT_NAMES(filter) = {"In L", "In R", "Out L", "Out R"}; + +const char *filter_choices[] = { + "12dB/oct Lowpass", + "24dB/oct Lowpass", + "36dB/oct Lowpass", + "12dB/oct Highpass", + "24dB/oct Highpass", + "36dB/oct Highpass", + "6dB/oct Bandpass", + "12dB/oct Bandpass", + "18dB/oct Bandpass", + "6dB/oct Bandreject", + "12dB/oct Bandreject", + "18dB/oct Bandreject", +}; + +CALF_PORT_PROPS(filter) = { + { 2000, 10,20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ | PF_PROP_GRAPH, NULL, "freq", "Frequency" }, + { 0.707, 0.707, 32, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "res", "Resonance" }, + { biquad_filter_module::mode_12db_lp, + biquad_filter_module::mode_12db_lp, + biquad_filter_module::mode_count - 1, + 1, PF_ENUM | PF_CTL_COMBO, filter_choices, "mode", "Mode" }, + { 20, 5, 100, 20, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "inertia", "Inertia"}, +}; + +CALF_PLUGIN_INFO(filter) = { 0x847f, "Filter", "Calf Filter", "Krzysztof Foltman", calf_plugins::calf_copyright_info, "FilterPlugin" }; + +//////////////////////////////////////////////////////////////////////////// + +CALF_PORT_NAMES(filterclavier) = {"In L", "In R", "Out L", "Out R"}; + +CALF_PORT_PROPS(filterclavier) = { + { 0, -48, 48, 48*2+1, PF_INT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_SEMITONES, NULL, "transpose", "Transpose" }, + { 0, -100, 100, 0, PF_INT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_CENTS, NULL, "detune", "Detune" }, + { 32, 0.707, 32, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "maxres", "Max. Resonance" }, + { biquad_filter_module::mode_6db_bp, + biquad_filter_module::mode_12db_lp, + biquad_filter_module::mode_count - 1, + 1, PF_ENUM | PF_CTL_COMBO | PF_PROP_GRAPH, filter_choices, "mode", "Mode" }, + { 20, 1, 2000, 20, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "inertia", "Portamento time"}, + {} +}; + +CALF_PLUGIN_INFO(filterclavier) = { 0x849f, "Filterclavier", "Calf Filterclavier", "Krzysztof Foltman / Hans Baier", calf_plugins::calf_copyright_info, "FilterclavierPlugin" }; + +//////////////////////////////////////////////////////////////////////////// + +CALF_PORT_NAMES(vintage_delay) = {"In L", "In R", "Out L", "Out R"}; + +const char *vintage_delay_mixmodes[] = { + "Stereo", + "Ping-Pong", + "L then R", + "R then L", +}; + +const char *vintage_delay_fbmodes[] = { + "Plain", + "Tape", + "Old Tape", +}; + +CALF_PORT_PROPS(vintage_delay) = { + { 120, 30, 300, 1, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_BPM, NULL, "bpm", "Tempo" }, + { 4, 1, 16, 1, PF_INT | PF_SCALE_LINEAR | PF_CTL_FADER, NULL, "subdiv", "Subdivide"}, + { 3, 1, 16, 1, PF_INT | PF_SCALE_LINEAR | PF_CTL_FADER, NULL, "time_l", "Time L"}, + { 5, 1, 16, 1, PF_INT | PF_SCALE_LINEAR | PF_CTL_FADER, NULL, "time_r", "Time R"}, + { 0.5, 0, 1, 0, PF_FLOAT | PF_SCALE_PERC | PF_CTL_KNOB, NULL, "feedback", "Feedback" }, + { 0.25, 0, 4, 100, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "amount", "Amount" }, + { 1, 0, 3, 0, PF_ENUM | PF_CTL_COMBO, vintage_delay_mixmodes, "mix_mode", "Mix mode" }, + { 1, 0, 2, 0, PF_ENUM | PF_CTL_COMBO, vintage_delay_fbmodes, "medium", "Medium" }, + { 1.0, 0, 4, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "dry", "Dry Amount" }, + { 1.0, -1, 1, 0, PF_FLOAT | PF_SCALE_PERC | PF_CTL_KNOB , NULL, "width", "Stereo Width" }, + {} +}; + +CALF_PLUGIN_INFO(vintage_delay) = { 0x8482, "VintageDelay", "Calf Vintage Delay", "Krzysztof Foltman", calf_plugins::calf_copyright_info, "DelayPlugin" }; + +//////////////////////////////////////////////////////////////////////////// + +CALF_PORT_NAMES(rotary_speaker) = {"In L", "In R", "Out L", "Out R"}; + +const char *rotary_speaker_speed_names[] = { "Off", "Chorale", "Tremolo", "HoldPedal", "ModWheel", "Manual" }; + +CALF_PORT_PROPS(rotary_speaker) = { + { 5, 0, 5, 1.01, PF_ENUM | PF_CTL_COMBO, rotary_speaker_speed_names, "vib_speed", "Speed Mode" }, + { 0.5, 0, 1, 0, PF_FLOAT | PF_CTL_KNOB | PF_SCALE_PERC, NULL, "spacing", "Tap Spacing" }, + { 0.5, 0, 1, 0, PF_FLOAT | PF_CTL_KNOB | PF_SCALE_PERC, NULL, "shift", "Tap Offset" }, + { 0.45, 0, 1, 0, PF_FLOAT | PF_CTL_KNOB | PF_SCALE_PERC, NULL, "mod_depth", "FM Depth" }, + { 36, 10, 600, 0, PF_FLOAT | PF_CTL_KNOB | PF_SCALE_LOG | PF_UNIT_RPM, NULL, "treble_speed", "Treble Motor" }, + { 30, 10, 600, 0, PF_FLOAT | PF_CTL_KNOB | PF_SCALE_LOG | PF_UNIT_RPM, NULL, "bass_speed", "Bass Motor" }, + { 0.7, 0, 1, 101, PF_FLOAT | PF_CTL_KNOB | PF_SCALE_PERC, NULL, "mic_distance", "Mic Distance" }, + { 0.3, 0, 1, 101, PF_FLOAT | PF_CTL_KNOB | PF_SCALE_PERC, NULL, "reflection", "Reflection" }, + { 0.45, 0, 1, 0, PF_FLOAT | PF_CTL_KNOB | PF_SCALE_PERC, NULL, "am_depth", "AM Depth" }, + { 0, 0, 1, 0, PF_FLOAT | PF_CTL_KNOB | PF_SCALE_PERC, NULL, "test", "Test" }, + { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_l", "Low rotor" }, + { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_h", "High rotor" }, + {} +}; + +CALF_PLUGIN_INFO(rotary_speaker) = { 0x8483, "RotarySpeaker", "Calf Rotary Speaker", "Krzysztof Foltman", calf_plugins::calf_copyright_info, "SimulatorPlugin" }; + +//////////////////////////////////////////////////////////////////////////// + +CALF_PORT_NAMES(multichorus) = {"In L", "In R", "Out L", "Out R"}; + +CALF_PORT_PROPS(multichorus) = { + { 5, 0.1, 10, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC | PF_PROP_GRAPH, NULL, "min_delay", "Min delay" }, + { 6, 0.1, 10, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC| PF_PROP_GRAPH, NULL, "mod_depth", "Mod depth" }, + { 0.5, 0.01, 20, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ| PF_PROP_GRAPH, NULL, "mod_rate", "Modulation rate" }, + { 180, 0, 360, 91, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_DEG, NULL, "stereo", "Stereo phase" }, + { 4, 1, 8, 8, PF_INT | PF_SCALE_LINEAR | PF_CTL_FADER, NULL, "voices", "Voices"}, + { 64, 0, 360, 91, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_DEG, NULL, "vphase", "Inter-voice phase" }, + { 2, 0, 4, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "amount", "Amount" }, + { 1.0, 0, 4, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "dry", "Dry Amount" }, + { 100, 10,20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ | PF_PROP_GRAPH, NULL, "freq", "Center Frq 1" }, + { 5000, 10,20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ | PF_PROP_GRAPH, NULL, "freq2", "Center Frq 2" }, + { 0.125, 0.125, 8, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "q", "Q" }, + { 1, 0, 1, 0, PF_FLOAT | PF_SCALE_PERC | PF_CTL_KNOB, NULL, "overlap", "Overlap" }, +}; + +CALF_PLUGIN_INFO(multichorus) = { 0x8501, "MultiChorus", "Calf MultiChorus", "Krzysztof Foltman", calf_plugins::calf_copyright_info, "ChorusPlugin" }; + +//////////////////////////////////////////////////////////////////////////// + +CALF_PORT_NAMES(compressor) = {"In L", "In R", "Out L", "Out R"}; + +const char *compressor_detection_names[] = { "RMS", "Peak" }; +const char *compressor_stereo_link_names[] = { "Average", "Maximum" }; + +CALF_PORT_PROPS(compressor) = { + { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "bypass", "Bypass" }, + { 1, 0, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "level_in", "Input" }, + { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_in", "Input" }, + { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_out", "Output" }, + { 0, 0, 1, 0, PF_BOOL | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_in", "0dB-In" }, + { 0, 0, 1, 0, PF_BOOL | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_out", "0dB-Out" }, + { 0.125, 0.000976563, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "threshold", "Threshold" }, + { 2, 1, 20, 21, PF_FLOAT | PF_SCALE_LOG_INF | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "ratio", "Ratio" }, + { 20, 0.01, 2000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "attack", "Attack" }, + { 250, 0.01, 2000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "release", "Release" }, + { 2, 1, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "makeup", "Makeup Gain" }, + { 2.828427125, 1, 8, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "knee", "Knee" }, + { 0, 0, 1, 0, PF_ENUM | PF_CTL_COMBO, compressor_detection_names, "detection", "Detection" }, + { 0, 0, 1, 0, PF_ENUM | PF_CTL_COMBO, compressor_stereo_link_names, "stereo_link", "Stereo Link" }, + { 0, 0.03125, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_CTLO_REVERSE | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL| PF_PROP_GRAPH, NULL, "compression", "Reduction" }, + {} +}; + +CALF_PLUGIN_INFO(compressor) = { 0x8502, "Compressor", "Calf Compressor", "Thor Harald Johansen", calf_plugins::calf_copyright_info, "CompressorPlugin" }; + +//////////////////////////////////////////////////////////////////////////// + +CALF_PORT_NAMES(sidechaincompressor) = {"In L", "In R", "Out L", "Out R"}; + +const char *sidechaincompressor_detection_names[] = { "RMS", "Peak" }; +const char *sidechaincompressor_stereo_link_names[] = { "Average", "Maximum" }; +const char *sidechaincompressor_mode_names[] = {"Wideband (F1:off / F2:off)", + "Deesser wide (F1:Bell / F2:HP)", + "Deesser split (F1:off / F2:HP)", + "Derumbler wide (F1:LP / F2:Bell)", + "Derumbler split (F1:LP / F2:off)", + "Weighted #1 (F1:Shelf / F2:Shelf)", + "Weighted #2 (F1:Shelf / F2:Bell)", + "Weighted #3 (F1:Bell / F2:Shelf)", + "Bandpass #1 (F1:BP / F2:off)", + "Bandpass #2 (F1:HP / F2:LP)"}; +const char *sidechaincompressor_route_names[] = {"Stereo Input (Default)", + "R â–¸ L (L: Signal / R: S/C)", + "L â–¸ R (L: S/C / R: Signal)"}; +const char *sidechaincompressor_filter_choices[] = { "12dB", "24dB", "36dB"}; + + +CALF_PORT_PROPS(sidechaincompressor) = { + { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "bypass", "Bypass" }, + { 1, 0, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "level_in", "Input" }, + { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_in", "Input" }, + { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_out", "Output" }, + { 0, 0, 1, 0, PF_BOOL | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_in", "0dB-In" }, + { 0, 0, 1, 0, PF_BOOL | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_out", "0dB-Out" }, + { 0.125, 0.000976563, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "threshold", "Threshold" }, + { 2, 1, 20, 21, PF_FLOAT | PF_SCALE_LOG_INF | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "ratio", "Ratio" }, + { 20, 0.01, 2000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "attack", "Attack" }, + { 250, 0.01, 2000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "release", "Release" }, + { 2, 1, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "makeup", "Makeup Gain" }, + { 2.828427125, 1, 8, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "knee", "Knee" }, + { 0, 0, 1, 0, PF_ENUM | PF_CTL_COMBO, sidechaincompressor_detection_names, "detection", "Detection" }, + { 0, 0, 1, 0, PF_ENUM | PF_CTL_COMBO, sidechaincompressor_stereo_link_names, "stereo_link", "Stereo Link" }, + { 0, 0.03125, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_CTLO_REVERSE | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL| PF_PROP_GRAPH, NULL, "compression", "Gain Reduction" }, + { 0, 0, 9, 0, PF_ENUM | PF_CTL_COMBO, sidechaincompressor_mode_names, "sc_mode", "S/C Mode" }, + { 250, 10,18000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ | PF_PROP_GRAPH, NULL, "f1_freq", "F1 Freq" }, + { 4500, 10,18000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "f2_freq", "F2 Freq" }, + { 1, 0.0625, 16, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "f1_level", "F1 Level" }, + { 1, 0.0625, 16, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "f2_level", "F2 Level" }, + { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "sc_listen", "S/C-Listen" }, + { 0, 0, 1, 0, PF_BOOL | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "f1_active", "F1 Active" }, + { 0, 0, 1, 0, PF_BOOL | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "f2_active", "F2 Active" }, + { 0, 0, 2, 0, PF_ENUM | PF_CTL_COMBO, sidechaincompressor_route_names, "sc_route", "S/C Route" }, + { 1, 0.015625, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "sc_level", "S/C Level" }, + {} +}; + +CALF_PLUGIN_INFO(sidechaincompressor) = { 0x8517, "Sidechaincompressor", "Calf Sidechain Compressor", "Markus Schmidt / Thor Harald Johansen", calf_plugins::calf_copyright_info, "CompressorPlugin" }; + +//////////////////////////////////////////////////////////////////////////// + +CALF_PORT_NAMES(multibandcompressor) = {"In L", "In R", "Out L", "Out R"}; + +const char *multibandcompressor_detection_names[] = { "RMS", "Peak" }; +const char *multibandcompressor_filter_choices[] = { "12dB", "36dB"}; + +CALF_PORT_PROPS(multibandcompressor) = { + { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "bypass", "Bypass" }, + { 1, 0, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "level_in", "Input" }, + { 1, 0, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "level_out", "Output" }, + { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_inL", "Input L" }, + { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_inR", "Input R" }, + { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_outL", "Output L" }, + { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_outR", "Output R" }, + { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_inL", "0dB-InL" }, + { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_inR", "0dB-InR" }, + { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_outL", "0dB-OutL" }, + { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_outR", "0dB-OutR" }, + + { 120, 10, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ | PF_PROP_GRAPH, NULL, "freq0", "Split 1/2" }, + { 1000, 10, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ | PF_PROP_GRAPH, NULL, "freq1", "Split 2/3" }, + { 6000, 10, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ | PF_PROP_GRAPH, NULL, "freq2", "Split 3/4" }, + + { -0.17, -0.5, 0.5, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_GRAPH, NULL, "sep0", "S1" }, + { -0.17, -0.5, 0.5, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_GRAPH, NULL, "sep1", "S2" }, + { -0.17, -0.5, 0.5, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_GRAPH, NULL, "sep2", "S3" }, + + { 0.7762471166286917, 0.25, 4, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB | PF_PROP_GRAPH, NULL, "q0", "Q1" }, + { 0.7762471166286917, 0.25, 4, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB | PF_PROP_GRAPH, NULL, "q1", "Q2" }, + { 0.7762471166286917, 0.25, 4, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB | PF_PROP_GRAPH, NULL, "q2", "Q3" }, + + { 1, 0, 1, 0, PF_ENUM | PF_CTL_COMBO, multibandcompressor_filter_choices, "mode", "Filter Mode" }, + + { 0.25, 0.000976563, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "threshold0", "Threshold 1" }, + { 2, 1, 20, 21, PF_FLOAT | PF_SCALE_LOG_INF | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "ratio0", "Ratio 1" }, + { 150, 0.01, 2000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "attack0", "Attack 1" }, + { 300, 0.01, 2000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "release0", "Release 1" }, + { 2, 1, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "makeup0", "Makeup 1" }, + { 2.828427125, 1, 8, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "knee0", "Knee 1" }, + { 0, 0, 1, 0, PF_ENUM | PF_CTL_COMBO, multibandcompressor_detection_names, "detection0", "Detection 1" }, + { 1, 0.0625, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_CTLO_REVERSE | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL| PF_PROP_GRAPH, NULL, "compression0", "Gain Reduction 1" }, + { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "output0", "Output 1" }, + { 1, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "bypass0", "Bypass 1" }, + { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "solo0", "Solo 1" }, + + + { 0.125, 0.000976563, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "threshold1", "Threshold 2" }, + { 2, 1, 20, 21, PF_FLOAT | PF_SCALE_LOG_INF | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "ratio1", "Ratio 2" }, + { 100, 0.01, 2000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "attack1", "Attack 2" }, + { 200, 0.01, 2000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "release1", "Release 2" }, + { 2, 1, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "makeup1", "Makeup 2" }, + { 2.828427125, 1, 8, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "knee1", "Knee 2" }, + { 0, 0, 1, 0, PF_ENUM | PF_CTL_COMBO, multibandcompressor_detection_names, "detection1", "Detection 2" }, + { 1, 0.0625, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_CTLO_REVERSE | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL| PF_PROP_GRAPH, NULL, "compression1", "Gain Reduction 2" }, + { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "output1", "Output 2" }, + { 1, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "bypass1", "Bypass 2" }, + { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "solo1", "Solo 2" }, + + + { 0.0625, 0.000976563, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "threshold2", "Threshold 3" }, + { 2, 1, 20, 21, PF_FLOAT | PF_SCALE_LOG_INF | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "ratio2", "Ratio 3" }, + { 50, 0.01, 2000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "attack2", "Attack 3" }, + { 100, 0.01, 2000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "release2", "Release 3" }, + { 2, 1, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "makeup2", "Makeup 3" }, + { 2.828427125, 1, 8, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "knee2", "Knee 3" }, + { 0, 0, 1, 0, PF_ENUM | PF_CTL_COMBO, multibandcompressor_detection_names, "detection2", "Detection 3" }, + { 1, 0.0625, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_CTLO_REVERSE | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL| PF_PROP_GRAPH, NULL, "compression2", "Gain Reduction 3" }, + { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "output2", "Output 3" }, + { 1, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "bypass2", "Bypass 3" }, + { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "solo2", "Solo 3" }, + + + { 0.03125, 0.000976563, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "threshold3", "Threshold 4" }, + { 2, 1, 20, 21, PF_FLOAT | PF_SCALE_LOG_INF | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "ratio3", "Ratio 4" }, + { 25, 0.01, 2000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "attack3", "Attack 4" }, + { 50, 0.01, 2000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "release3", "Release 4" }, + { 2, 1, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "makeup3", "Makeup 4" }, + { 2.828427125, 1, 8, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "knee3", "Knee 4" }, + { 0, 0, 1, 0, PF_ENUM | PF_CTL_COMBO, multibandcompressor_detection_names, "detection3", "Detection 4" }, + { 1, 0.0625, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_CTLO_REVERSE | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL| PF_PROP_GRAPH, NULL, "compression3", "Gain Reduction 4" }, + { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "output3", "Output 4" }, + { 1, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "bypass3", "Bypass 4" }, + { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "solo3", "Solo 4" }, + {} +}; + +CALF_PLUGIN_INFO(multibandcompressor) = { 0x8516, "Multibandcompressor", "Calf Multiband Compressor", "Markus Schmidt / Thor Harald Johansen", calf_plugins::calf_copyright_info, "CompressorPlugin" }; + +//////////////////////////////////////////////////////////////////////////// + +CALF_PORT_NAMES(deesser) = {"In L", "In R", "Out L", "Out R"}; + +const char *deesser_detection_names[] = { "RMS", "Peak" }; +const char *deesser_mode_names[] = { "Wide", "Split" }; + + +CALF_PORT_PROPS(deesser) = { + { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "bypass", "Bypass" }, + { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "detected", "Detected" }, + { 0, 0.0625, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_CTLO_REVERSE | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL| PF_PROP_GRAPH, NULL, "compression", "Gain Reduction" }, + { 0, 0, 1, 0, PF_BOOL | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "detected_led", "Active" }, + { 0, 0, 1, 0, PF_BOOL | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_out", "Out" }, + { 0, 0, 1, 0, PF_ENUM | PF_CTL_COMBO, deesser_detection_names, "detection", "Detection" }, + { 0, 0, 1, 0, PF_ENUM | PF_CTL_COMBO, deesser_mode_names, "mode", "Mode" }, + { 0.125, 0.000976563, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "threshold", "Threshold" }, + { 3, 1, 20, 21, PF_FLOAT | PF_SCALE_LOG_INF | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "ratio", "Ratio" }, + { 15, 1, 100, 1, PF_INT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "laxity", "Laxity" }, + { 1, 1, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "makeup", "Makeup" }, + + { 6000, 10, 18000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ | PF_PROP_GRAPH, NULL, "f1_freq", "Split" }, + { 4500, 10, 18000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "f2_freq", "Peak" }, + { 1, 0.0625, 16, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "f1_level", "Gain" }, + { 4, 0.0625, 16, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "f2_level", "Level" }, + { 1, 0.1, 100,1, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "f2_q", "Peak Q" }, + { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "sc_listen", "S/C-Listen" }, + {} +}; + +CALF_PLUGIN_INFO(deesser) = { 0x8515, "Deesser", "Calf Deesser", "Markus Schmidt / Thor Harald Johansen", calf_plugins::calf_copyright_info, "CompressorPlugin" }; + +//////////////////////////////////////////////////////////////////////////// + +CALF_PORT_NAMES(gate) = {"In L", "In R", "Out L", "Out R"}; + +const char *gate_detection_names[] = { "RMS", "Peak" }; +const char *gate_stereo_link_names[] = { "Average", "Maximum" }; + +CALF_PORT_PROPS(gate) = { + { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "bypass", "Bypass" }, + { 1, 0, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "level_in", "Input" }, + { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_in", "Input" }, + { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_out", "Output" }, + { 0, 0, 1, 0, PF_BOOL | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_in", "0dB-In" }, + { 0, 0, 1, 0, PF_BOOL | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_out", "0dB-Out" }, + { 0.06125, 0.000015849, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "range", "Max Gain Reduction" }, + { 0.125, 0.000976563, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "threshold", "Threshold" }, + { 2, 1, 20, 21, PF_FLOAT | PF_SCALE_LOG_INF | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "ratio", "Ratio" }, + { 20, 0.01, 2000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "attack", "Attack" }, + { 250, 0.01, 2000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "release", "Release" }, + { 1, 1, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "makeup", "Makeup Gain" }, + { 2.828427125, 1, 8, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "knee", "Knee" }, + { 0, 0, 1, 0, PF_ENUM | PF_CTL_COMBO, gate_detection_names, "detection", "Detection" }, + { 0, 0, 1, 0, PF_ENUM | PF_CTL_COMBO, gate_stereo_link_names, "stereo_link", "Stereo Link" }, + { 0, 0.03125, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_CTLO_REVERSE | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL| PF_PROP_GRAPH, NULL, "gating", "Gating" }, + {} +}; + +CALF_PLUGIN_INFO(gate) = { 0x8503, "Gate", "Calf Gate", "Damien Zammit / Thor Harald Johansen", calf_plugins::calf_copyright_info, "ExpanderPlugin" }; + +//////////////////////////////////////////////////////////////////////////// + +CALF_PORT_NAMES(sidechaingate) = {"In L", "In R", "Out L", "Out R"}; + +const char *sidechaingate_detection_names[] = { "RMS", "Peak" }; +const char *sidechaingate_stereo_link_names[] = { "Average", "Maximum" }; +const char *sidechaingate_mode_names[] = {"Wideband (F1:off / F2:off)", + "High gate wide (F1:Bell / F2:HP)", + "High gate split (F1:off / F2:HP)", + "Low Gate wide (F1:LP / F2:Bell)", + "Low gate split (F1:LP / F2:off)", + "Weighted #1 (F1:Shelf / F2:Shelf)", + "Weighted #2 (F1:Shelf / F2:Bell)", + "Weighted #3 (F1:Bell / F2:Shelf)", + "Bandpass #1 (F1:BP / F2:off)", + "Bandpass #2 (F1:HP / F2:LP)"}; +const char *sidechaingate_route_names[] = {"Stereo Input (Default)", + "R â–¸ L (L: Signal / R: S/C)", + "L â–¸ R (L: S/C / R: Signal)"}; +const char *sidechaingate_filter_choices[] = { "12dB", "24dB", "36dB"}; + + +CALF_PORT_PROPS(sidechaingate) = { + { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "bypass", "Bypass" }, + { 1, 0, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "level_in", "Input" }, + { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_in", "Input" }, + { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_out", "Output" }, + { 0, 0, 1, 0, PF_BOOL | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_in", "0dB-In" }, + { 0, 0, 1, 0, PF_BOOL | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_out", "0dB-Out" }, + { 0.06125, 0.000015849, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "range", "Max Gain Reduction" }, + { 0.125, 0.000976563, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "threshold", "Threshold" }, + { 2, 1, 20, 21, PF_FLOAT | PF_SCALE_LOG_INF | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "ratio", "Ratio" }, + { 20, 0.01, 2000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "attack", "Attack" }, + { 250, 0.01, 2000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "release", "Release" }, + { 1, 1, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "makeup", "Makeup Gain" }, + { 2.828427125, 1, 8, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "knee", "Knee" }, + { 0, 0, 1, 0, PF_ENUM | PF_CTL_COMBO, sidechaingate_detection_names, "detection", "Detection" }, + { 0, 0, 1, 0, PF_ENUM | PF_CTL_COMBO, sidechaingate_stereo_link_names, "stereo_link", "Stereo Link" }, + { 0, 0.03125, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_CTLO_REVERSE | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL| PF_PROP_GRAPH, NULL, "gating", "Gating" }, + { 0, 0, 9, 0, PF_ENUM | PF_CTL_COMBO, sidechaingate_mode_names, "sc_mode", "S/C Mode" }, + { 250, 10,18000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ | PF_PROP_GRAPH, NULL, "f1_freq", "F1 Freq" }, + { 4500, 10,18000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "f2_freq", "F2 Freq" }, + { 1, 0.0625, 16, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "f1_level", "F1 Level" }, + { 1, 0.0625, 16, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "f2_level", "F2 Level" }, + { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "sc_listen", "S/C-Listen" }, + { 0, 0, 1, 0, PF_BOOL | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "f1_active", "F1 Active" }, + { 0, 0, 1, 0, PF_BOOL | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "f2_active", "F2 Active" }, + { 0, 0, 2, 0, PF_ENUM | PF_CTL_COMBO, sidechaingate_route_names, "sc_route", "S/C Route" }, + { 1, 0.015625, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "sc_level", "S/C Level" }, + {} +}; + +CALF_PLUGIN_INFO(sidechaingate) = { 0x8504, "Sidechaingate", "Calf Sidechain Gate", "Markus Schmidt / Damien Zammit / Thor Harald Johansen", calf_plugins::calf_copyright_info, "ExpanderPlugin" }; + +//////////////////////////////////////////////////////////////////////////// + +CALF_PORT_NAMES(multibandgate) = {"In L", "In R", "Out L", "Out R"}; + +const char *multibandgate_detection_names[] = { "RMS", "Peak" }; +const char *multibandgate_filter_choices[] = { "12dB", "36dB"}; + +CALF_PORT_PROPS(multibandgate) = { + { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "bypass", "Bypass" }, + { 1, 0, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "level_in", "Input" }, + { 1, 0, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "level_out", "Output" }, + { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_inL", "Input L" }, + { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_inR", "Input R" }, + { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_outL", "Output L" }, + { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_outR", "Output R" }, + { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_inL", "0dB-InL" }, + { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_inR", "0dB-InR" }, + { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_outL", "0dB-OutL" }, + { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_outR", "0dB-OutR" }, + + { 120, 10, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ | PF_PROP_GRAPH, NULL, "freq0", "Split 1/2" }, + { 1000, 10, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ | PF_PROP_GRAPH, NULL, "freq1", "Split 2/3" }, + { 6000, 10, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ | PF_PROP_GRAPH, NULL, "freq2", "Split 3/4" }, + + { -0.17, -0.5, 0.5, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_GRAPH, NULL, "sep0", "S1" }, + { -0.17, -0.5, 0.5, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_GRAPH, NULL, "sep1", "S2" }, + { -0.17, -0.5, 0.5, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_GRAPH, NULL, "sep2", "S3" }, + + { 0.7762471166286917, 0.25, 4, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB | PF_PROP_GRAPH, NULL, "q0", "Q1" }, + { 0.7762471166286917, 0.25, 4, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB | PF_PROP_GRAPH, NULL, "q1", "Q2" }, + { 0.7762471166286917, 0.25, 4, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB | PF_PROP_GRAPH, NULL, "q2", "Q3" }, + + { 1, 0, 1, 0, PF_ENUM | PF_CTL_COMBO, multibandgate_filter_choices, "mode", "Filter Mode" }, + + { 0.06125, 0.000015849, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "range0", "Reduction 1" }, + { 0.25, 0.000976563, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "threshold0", "Threshold 1" }, + { 2, 1, 20, 21, PF_FLOAT | PF_SCALE_LOG_INF | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "ratio0", "Ratio 1" }, + { 150, 0.01, 2000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "attack0", "Attack 1" }, + { 300, 0.01, 2000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "release0", "Release 1" }, + { 1, 1, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "makeup0", "Makeup 1" }, + { 2.828427125, 1, 8, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "knee0", "Knee 1" }, + { 0, 0, 1, 0, PF_ENUM | PF_CTL_COMBO, multibandcompressor_detection_names, "detection0", "Detection 1" }, + { 1, 0.0625, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_CTLO_REVERSE | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL| PF_PROP_GRAPH, NULL, "gating0", "Gating 1" }, + { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "output0", "Output 1" }, + { 1, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "bypass0", "Bypass 1" }, + { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "solo0", "Solo 1" }, + + { 0.06125, 0.000015849, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "range1", "Reduction 2" }, + { 0.125, 0.000976563, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "threshold1", "Threshold 2" }, + { 2, 1, 20, 21, PF_FLOAT | PF_SCALE_LOG_INF | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "ratio1", "Ratio 2" }, + { 100, 0.01, 2000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "attack1", "Attack 2" }, + { 200, 0.01, 2000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "release1", "Release 2" }, + { 1, 1, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "makeup1", "Makeup 2" }, + { 2.828427125, 1, 8, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "knee1", "Knee 2" }, + { 0, 0, 1, 0, PF_ENUM | PF_CTL_COMBO, multibandcompressor_detection_names, "detection1", "Detection 2" }, + { 1, 0.0625, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_CTLO_REVERSE | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL| PF_PROP_GRAPH, NULL, "gating1", "Gating 2" }, + { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "output1", "Output 2" }, + { 1, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "bypass1", "Bypass 2" }, + { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "solo1", "Solo 2" }, + + { 0.06125, 0.000015849, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "range2", "Reduction 3" }, + { 0.0625, 0.000976563, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "threshold2", "Threshold 3" }, + { 2, 1, 20, 21, PF_FLOAT | PF_SCALE_LOG_INF | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "ratio2", "Ratio 3" }, + { 50, 0.01, 2000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "attack2", "Attack 3" }, + { 100, 0.01, 2000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "release2", "Release 3" }, + { 1, 1, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "makeup2", "Makeup 3" }, + { 2.828427125, 1, 8, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "knee2", "Knee 3" }, + { 0, 0, 1, 0, PF_ENUM | PF_CTL_COMBO, multibandcompressor_detection_names, "detection2", "Detection 3" }, + { 1, 0.0625, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_CTLO_REVERSE | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL| PF_PROP_GRAPH, NULL, "gating2", "Gating 3" }, + { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "output2", "Output 3" }, + { 1, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "bypass2", "Bypass 3" }, + { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "solo2", "Solo 3" }, + + { 0.06125, 0.000015849, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "range3", "Reduction 4" }, + { 0.03125, 0.000976563, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "threshold3", "Threshold 4" }, + { 2, 1, 20, 21, PF_FLOAT | PF_SCALE_LOG_INF | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "ratio3", "Ratio 4" }, + { 25, 0.01, 2000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "attack3", "Attack 4" }, + { 50, 0.01, 2000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "release3", "Release 4" }, + { 1, 1, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "makeup3", "Makeup 4" }, + { 2.828427125, 1, 8, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "knee3", "Knee 4" }, + { 0, 0, 1, 0, PF_ENUM | PF_CTL_COMBO, multibandcompressor_detection_names, "detection3", "Detection 4" }, + { 1, 0.0625, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_CTLO_REVERSE | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL| PF_PROP_GRAPH, NULL, "gating3", "Gating 4" }, + { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "output3", "Output 4" }, + { 1, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "bypass3", "Bypass 4" }, + { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "solo3", "Solo 4" }, + {} +}; + +CALF_PLUGIN_INFO(multibandgate) = { 0x8505, "Multibandgate", "Calf Multiband Gate", "Markus Schmidt / Damien Zammit / Thor Harald Johansen", calf_plugins::calf_copyright_info, "ExpanderPlugin" }; + +//////////////////////////////////////////////////////////////////////////// + +CALF_PORT_NAMES(limiter) = {"In L", "In R", "Out L", "Out R"}; + +CALF_PORT_PROPS(limiter) = { + { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "bypass", "Bypass" }, + { 1, 0, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "level_in", "Input" }, + { 1, 0, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "level_out", "Output" }, + { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_inL", "Input L" }, + { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_inR", "Input R" }, + { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_outL", "Output L" }, + { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_outR", "Output R" }, + { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_inL", "0dB-InL" }, + { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_inR", "0dB-InR" }, + { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_outL", "0dB-OutL" }, + { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_outR", "0dB-OutR" }, + + { 1, 0.0625, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "limit", "Limit" }, + { 5, 0.1, 10, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "attack", "Lookahead" }, + { 50, 1, 1000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "release", "Release" }, + + { 1, 0.125, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_CTLO_REVERSE | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL| PF_PROP_GRAPH, NULL, "att", "Attenuation" }, + + { 1, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "asc", "ASC" }, + + { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "asc_led", "asc active" }, + + { 0.5f, 0.f, 1.f, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_GRAPH, NULL, "asc_coeff", "ASC Level" }, + + {} +}; + +CALF_PLUGIN_INFO(limiter) = { 0x8521, "Limiter", "Calf Limiter", "Christian Holschuh / Markus Schmidt", calf_plugins::calf_copyright_info, "LimiterPlugin" }; + +//////////////////////////////////////////////////////////////////////////// + +CALF_PORT_NAMES(multibandlimiter) = {"In L", "In R", "Out L", "Out R"}; +const char *multibandlimiter_filter_choices[] = { "12dB", "36dB"}; + +CALF_PORT_PROPS(multibandlimiter) = { + { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "bypass", "Bypass" }, + { 1, 0, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "level_in", "Input" }, + { 1, 0, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "level_out", "Output" }, + { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_inL", "Input L" }, + { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_inR", "Input R" }, + { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_outL", "Output L" }, + { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_outR", "Output R" }, + { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_inL", "0dB-InL" }, + { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_inR", "0dB-InR" }, + { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_outL", "0dB-OutL" }, + { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_outR", "0dB-OutR" }, + + { 100, 10, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ | PF_PROP_GRAPH, NULL, "freq0", "Split 1/2" }, + { 750, 10, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ | PF_PROP_GRAPH, NULL, "freq1", "Split 2/3" }, + { 5000, 10, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ | PF_PROP_GRAPH, NULL, "freq2", "Split 3/4" }, + + { -0.17, -0.5, 0.5, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_GRAPH, NULL, "sep0", "S1" }, + { -0.17, -0.5, 0.5, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_GRAPH, NULL, "sep1", "S2" }, + { -0.17, -0.5, 0.5, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_GRAPH, NULL, "sep2", "S3" }, + + { 0.7762471166286917, 0.25, 4, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB | PF_PROP_GRAPH, NULL, "q0", "Q1" }, + { 0.7762471166286917, 0.25, 4, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB | PF_PROP_GRAPH, NULL, "q1", "Q2" }, + { 0.7762471166286917, 0.25, 4, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB | PF_PROP_GRAPH, NULL, "q2", "Q3" }, + + { 1, 0, 1, 0, PF_ENUM | PF_CTL_COMBO, multibandlimiter_filter_choices, "mode", "Filter Mode" }, + + { 1, 0.0625, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "limit", "Limit" }, + { 4, 0.1, 10, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "attack", "Lookahead" }, + { 30, 1, 1000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "release", "Release" }, + { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "minrel", "Min Release" }, + + { 1, 0.125, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_CTLO_REVERSE | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL| PF_PROP_GRAPH, NULL, "att0", "Low" }, + { 1, 0.125, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_CTLO_REVERSE | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL| PF_PROP_GRAPH, NULL, "att1", "LMid" }, + { 1, 0.125, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_CTLO_REVERSE | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL| PF_PROP_GRAPH, NULL, "att2", "HMid" }, + { 1, 0.125, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_CTLO_REVERSE | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL| PF_PROP_GRAPH, NULL, "att3", "Hi" }, + + { 0.f, -1.f, 1.f, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_GRAPH, NULL, "weight0", "Weight 1" }, + { 0.f, -1.f, 1.f, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_GRAPH, NULL, "weight1", "Weight 2" }, + { 0.f, -1.f, 1.f, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_GRAPH, NULL, "weight2", "Weight 3" }, + { 0.f, -1.f, 1.f, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_GRAPH, NULL, "weight3", "Weight 4" }, + + { 0.5f, -1.f, 1.f, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_GRAPH, NULL, "release0", "Release 1" }, + { 0.2f, -1.f, 1.f, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_GRAPH, NULL, "release1", "Release 2" }, + { -0.2f, -1.f, 1.f, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_GRAPH, NULL, "release2", "Release 3" }, + { -0.5f, -1.f, 1.f, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_GRAPH, NULL, "release3", "Release 4" }, + + { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "solo0", "Solo 1" }, + { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "solo1", "Solo 2" }, + { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "solo2", "Solo 3" }, + { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "solo3", "Solo 4" }, + + { 1, 0.f, 1000, 0, PF_FLOAT | PF_UNIT_MSEC | PF_PROP_OUTPUT, NULL, "effrelease0", "Effectively Release 1" }, + { 1, 0.f, 1000, 0, PF_FLOAT | PF_UNIT_MSEC | PF_PROP_OUTPUT, NULL, "effrelease1", "Effectively Release 2" }, + { 1, 0.f, 1000, 0, PF_FLOAT | PF_UNIT_MSEC | PF_PROP_OUTPUT, NULL, "effrelease2", "Effectively Release 3" }, + { 1, 0.f, 1000, 0, PF_FLOAT | PF_UNIT_MSEC | PF_PROP_OUTPUT, NULL, "effrelease3", "Effectively Release 4" }, + + { 1, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "asc", "ASC" }, + + { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "asc_led", "asc active" }, + + { 0.5f, 0.f, 1.f, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_GRAPH, NULL, "asc_coeff", "ASC Level" }, + + {} +}; + +CALF_PLUGIN_INFO(multibandlimiter) = { 0x8520, "Multibandlimiter", "Calf Multiband Limiter", "Markus Schmidt / Christian Holschuh", calf_plugins::calf_copyright_info, "LimiterPlugin" }; + +//////////////////////////////////////////////////////////////////////////// +// A few macros to make + +#define BYPASS_AND_LEVEL_PARAMS \ + { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "bypass", "Bypass" }, \ + { 1, 0, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "level_in", "Input Gain" }, \ + { 1, 0, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "level_out", "Output Gain" }, + +#define METERING_PARAMS \ + { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_inL", "Meter-InL" }, \ + { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_inR", "Meter-InR" }, \ + { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_outL", "Meter-OutL" }, \ + { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_outR", "Meter-OutR" }, \ + { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_inL", "0dB-InL" }, \ + { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_inR", "0dB-InR" }, \ + { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_outL", "0dB-OutL" }, \ + { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_outR", "0dB-OutR" }, + +#define LPHP_PARAMS \ + { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "hp_active", "HP Active" }, \ + { 30, 10, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "hp_freq", "HP Freq" }, \ + { 1, 0, 2, 0, PF_ENUM | PF_CTL_COMBO, rolloff_mode_names, "hp_mode", "HP Mode" }, \ + { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "lp_active", "LP Active" }, \ + { 18000, 10, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "lp_freq", "LP Freq" }, \ + { 1, 0, 2, 0, PF_ENUM | PF_CTL_COMBO, rolloff_mode_names, "lp_mode", "LP Mode" }, \ + +#define SHELF_PARAMS \ + { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "ls_active", "LS Active" }, \ + { 1, 0.015625, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "ls_level", "Level L" }, \ + { 200, 10, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "ls_freq", "Freq L" }, \ + { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "hs_active", "HS Active" }, \ + { 1, 0.015625, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "hs_level", "Level H" }, \ + { 4000, 10, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "hs_freq", "Freq H" }, + +#define EQ_BAND_PARAMS(band, frequency) \ + { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "p" #band "_active", "F" #band " Active" }, \ + { 1, 0.015625, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "p" #band "_level", "Level " #band }, \ + { frequency, 10, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ | PF_PROP_GRAPH, NULL, "p" #band "_freq", "Freq " #band }, \ + { 1, 0.1, 100, 1, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "p" #band "_q", "Q " #band }, + +//////////////////////////////////////////////////////////////////////////// + +CALF_PORT_NAMES(equalizer5band) = {"In L", "In R", "Out L", "Out R"}; + +CALF_PORT_PROPS(equalizer5band) = { + BYPASS_AND_LEVEL_PARAMS + METERING_PARAMS + SHELF_PARAMS + EQ_BAND_PARAMS(1, 250) + EQ_BAND_PARAMS(2, 1000) + EQ_BAND_PARAMS(3, 2500) + {} +}; + +CALF_PLUGIN_INFO(equalizer5band) = { 0x8511, "Equalizer5Band", "Calf Equalizer 5 Band", "Markus Schmidt", calf_plugins::calf_copyright_info, "EqualizerPlugin" }; + +////////////////////////////////////////////////////////////////////////////// + + +CALF_PORT_NAMES(equalizer8band) = {"In L", "In R", "Out L", "Out R"}; +const char *rolloff_mode_names[] = {"12dB/oct", "24dB/oct", "36dB/oct"}; + +CALF_PORT_PROPS(equalizer8band) = { + BYPASS_AND_LEVEL_PARAMS + METERING_PARAMS + LPHP_PARAMS + SHELF_PARAMS + EQ_BAND_PARAMS(1, 250) + EQ_BAND_PARAMS(2, 1000) + EQ_BAND_PARAMS(3, 2500) + EQ_BAND_PARAMS(4, 5000) + {} +}; + +CALF_PLUGIN_INFO(equalizer8band) = { 0x8512, "Equalizer8Band", "Calf Equalizer 8 Band", "Markus Schmidt", calf_plugins::calf_copyright_info, "EqualizerPlugin" }; + +//////////////////////////////////////////////////////////////////////////// + +CALF_PORT_NAMES(equalizer12band) = {"In L", "In R", "Out L", "Out R"}; + +CALF_PORT_PROPS(equalizer12band) = { + BYPASS_AND_LEVEL_PARAMS + METERING_PARAMS + LPHP_PARAMS + SHELF_PARAMS + EQ_BAND_PARAMS(1, 60) + EQ_BAND_PARAMS(2, 120) + EQ_BAND_PARAMS(3, 250) + EQ_BAND_PARAMS(4, 500) + EQ_BAND_PARAMS(5, 1000) + EQ_BAND_PARAMS(6, 2500) + EQ_BAND_PARAMS(7, 4000) + EQ_BAND_PARAMS(8, 6000) + {} +}; + +CALF_PLUGIN_INFO(equalizer12band) = { 0x8513, "Equalizer12Band", "Calf Equalizer 12 Band", "Markus Schmidt", calf_plugins::calf_copyright_info, "EqualizerPlugin" }; + +//////////////////////////////////////////////////////////////////////////// + +CALF_PORT_NAMES(pulsator) = {"In L", "In R", "Out L", "Out R"}; + +const char *pulsator_mode_names[] = { "Sine", "Triangle", "Square", "Saw up", "Saw down" }; + +CALF_PORT_PROPS(pulsator) = { + BYPASS_AND_LEVEL_PARAMS + METERING_PARAMS + { 0, 0, 4, 0, PF_ENUM | PF_CTL_COMBO, pulsator_mode_names, "mode", "Mode" }, + { 1, 0.01, 100, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "freq", "Frequency" }, + { 1, 0, 1, 0, PF_FLOAT | PF_SCALE_PERC, NULL, "amount", "Modulation" }, + { 0.5, 0, 1, 0, PF_FLOAT | PF_SCALE_PERC, NULL, "offset", "Offset L/R" }, + { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "mono", "Mono-in" }, + { 0, 0, 1, 2, PF_BOOL | PF_CTL_BUTTON , NULL, "reset", "Reset" }, + {} +}; + +CALF_PLUGIN_INFO(pulsator) = { 0x8514, "Pulsator", "Calf Pulsator", "Markus Schmidt", calf_plugins::calf_copyright_info, "ModulationPlugin" }; + +//////////////////////////////////////////////////////////////////////////// + +CALF_PORT_NAMES(saturator) = {"In L", "In R", "Out L", "Out R"}; + +CALF_PORT_PROPS(saturator) = { + { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "bypass", "Bypass" }, + { 1, 1, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "level_in", "Activation" }, + { 1, 0, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "level_out", "Master" }, + { 1, 0, 1, 0, PF_FLOAT | PF_SCALE_PERC | PF_CTL_KNOB , NULL, "mix", "Mix" }, + { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_in", "Input" }, + { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_out", "Output" }, + { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_in", "0dB" }, + { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_out", "0dB" }, + + { 5, 0.1, 10, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "drive", "Saturation" }, + { 10, -10, 10, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_FADER | PF_UNIT_COEF, NULL, "blend", "Blend" }, + { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_drive", "Drive" }, + + { 20000, 10, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "lp_pre_freq", "Lowpass" }, + { 10, 10, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "hp_pre_freq", "Highpass" }, + + { 20000, 10, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "lp_post_freq", "Lowpass" }, + { 10, 10, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "hp_post_freq", "Highpass" }, + + { 2000, 80, 8000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "p_freq", "Tone" }, + { 1, 0.0625, 16, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "p_level", "Amount" }, + { 1, 0.1, 10, 1, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "p_q", "Gradient" }, + {} +}; + +CALF_PLUGIN_INFO(saturator) = { 0x8530, "Saturator", "Calf Saturator", "Markus Schmidt / Krzysztof Foltman", calf_plugins::calf_copyright_info, "DistortionPlugin" }; + +//////////////////////////////////////////////////////////////////////////// + +CALF_PORT_NAMES(exciter) = {"In L", "In R", "Out L", "Out R"}; + +CALF_PORT_PROPS(exciter) = { + { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "bypass", "Bypass" }, + { 1, 0, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "level_in", "Input" }, + { 1, 0, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "level_out", "Output" }, + { 1, 0, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB | PF_PROP_NOBOUNDS, NULL, "amount", "Amount" }, + { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_in", "Input" }, + { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_out", "Output" }, + { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_in", "0dB" }, + { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_out", "0dB" }, + + { 8.5, 0.1, 10, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "drive", "Harmonics" }, + { 0, -10, 10, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_FADER | PF_UNIT_COEF, NULL, "blend", "Blend harmonics" }, + { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_drive", "Harmonics level" }, + + { 6000, 2000, 12000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "freq", "Scope" }, + { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "listen", "Listen" }, + { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "ceil_active", "Ceiling active" }, + { 16000, 10000, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "ceil", "Ceiling" }, + {} +}; + +CALF_PLUGIN_INFO(exciter) = { 0x8531, "Exciter", "Calf Exciter", "Markus Schmidt / Krzysztof Foltman", calf_plugins::calf_copyright_info, "DistortionPlugin" }; + +//////////////////////////////////////////////////////////////////////////// + +CALF_PORT_NAMES(bassenhancer) = {"In L", "In R", "Out L", "Out R"}; + +CALF_PORT_PROPS(bassenhancer) = { + { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "bypass", "Bypass" }, + { 1, 0, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "level_in", "Input" }, + { 1, 0, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "level_out", "Output" }, + { 1, 0, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB | PF_PROP_NOBOUNDS, NULL, "amount", "Amount" }, + { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_in", "Input" }, + { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_out", "Output" }, + { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_in", "0dB" }, + { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_out", "0dB" }, + + { 8.5, 0.1, 10, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "drive", "Harmonics" }, + { 0, -10, 10, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_FADER | PF_UNIT_COEF, NULL, "blend", "Blend harmonics" }, + { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_drive", "Harmonics level" }, + + { 120, 10, 250, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "freq", "Scope" }, + { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "listen", "Listen" }, + { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "floor_active", "Floor active" }, + { 30, 10, 120, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "floor", "Floor" }, + {} +}; + +CALF_PLUGIN_INFO(bassenhancer) = { 0x8532, "BassEnhancer", "Calf Bass Enhancer", "Markus Schmidt / Krzysztof Foltman", calf_plugins::calf_copyright_info, "DistortionPlugin" }; + +//////////////////////////////////////////////////////////////////////////// + +CALF_PORT_NAMES(mono) = {"In", "Out L", "Out R"}; +CALF_PORT_PROPS(mono) = { + { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "bypass", "Bypass" }, + { 1, 0, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "level_in", "Input" }, + { 1, 0, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "level_out", "Output" }, + { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_in", "Input" }, + { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_outL", "Output L" }, + { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_outR", "Output R" }, + { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_in", "0dB-In" }, + { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_outL", "0dB-OutL" }, + { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_outR", "0dB-OutR" }, + + { 0.f, -1.f, 1.f, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_GRAPH, NULL, "balance_out", "Balance" }, + + { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "softclip", "Softclip" }, + { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "mutel", "Mute L" }, + { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "muter", "Mute R" }, + { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "phasel", "Phase L" }, + { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "phaser", "Phase R" }, + + { 0.f, -20.f, 20.f, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "delay", "Delay" }, + {} +}; + +CALF_PLUGIN_INFO(mono) = { 0x8589, "MonoInput", "Calf Mono Input", "Markus Schmidt", calf_plugins::calf_copyright_info, "Utility" }; + + +//////////////////////////////////////////////////////////////////////////// + +CALF_PORT_NAMES(stereo) = {"In L", "In R", "Out L", "Out R"}; +const char *stereo_mode_names[] = { "LR â–¸ LR (Stereo Default)", "LR â–¸ MS (Stereo to Mid-Side)", "MS â–¸ LR (Mid-Side to Stereo)", "LR â–¸ LL (Mono Left Channel)", "LR â–¸ RR (Mono Right Channel)", "LR â–¸ L+R (Mono Sum L+R)", "LR â–¸ RL (Stereo Flip Channels)" }; +CALF_PORT_PROPS(stereo) = { + { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "bypass", "Bypass" }, + { 1, 0, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "level_in", "Input" }, + { 1, 0, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "level_out", "Output" }, + { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_inL", "Input L" }, + { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_inR", "Input R" }, + { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_outL", "Output L" }, + { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_outR", "Output R" }, + { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_inL", "0dB-InL" }, + { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_inR", "0dB-InR" }, + { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_outL", "0dB-OutL" }, + { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_outR", "0dB-OutR" }, + + { 0.f, -1.f, 1.f, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_GRAPH, NULL, "balance_in", "Balance In" }, + { 0.f, -1.f, 1.f, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_GRAPH, NULL, "balance_out", "Balance Out" }, + + { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "softclip", "Softclip" }, + { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "mutel", "Mute L" }, + { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "muter", "Mute R" }, + { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "phasel", "Phase L" }, + { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "phaser", "Phase R" }, + + { 0, 0, 6, 0, PF_ENUM | PF_CTL_COMBO, stereo_mode_names, "mode", "Mode" }, + + { 0.f, -1.f, 1.f, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_GRAPH, NULL, "slev", "S Level" }, + { 0.f, -1.f, 1.f, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_GRAPH, NULL, "sbal", "S Balance" }, + { 0.f, -1.f, 1.f, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_GRAPH, NULL, "mlev", "M Level" }, + { 0.f, -1.f, 1.f, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_GRAPH, NULL, "mpan", "M Panorama" }, + + { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "widener", "Widener" }, + { 0.f, -20.f, 20.f, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "delay", "Delay" }, + + { 0.f, 0.f, 1.f, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_COEF | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_phase", "Phase Correlation" }, + + {} +}; + +CALF_PLUGIN_INFO(stereo) = { 0x8588, "StereoTools", "Calf Stereo Tools", "Markus Schmidt", calf_plugins::calf_copyright_info, "Utility" }; + + +//////////////////////////////////////////////////////////////////////////// + +CALF_PORT_NAMES(monosynth) = { + "Out L", "Out R", +}; + +const char *monosynth_waveform_names[] = { "Sawtooth", "Square", "Pulse", "Sine", "Triangle", "Varistep", "Skewed Saw", "Skewed Square", + "Smooth Brass", "Bass", "Dark FM", "Multiwave", "Bell FM", "Dark Pad", "DCO Saw", "DCO Maze" }; +const char *monosynth_mode_names[] = { "0\xC2\xB0 : 0\xC2\xB0", "0\xC2\xB0 : 180\xC2\xB0", "0\xC2\xB0 : 90\xC2\xB0", "90\xC2\xB0 : 90\xC2\xB0", "90\xC2\xB0 : 270\xC2\xB0", "Random" }; +const char *monosynth_legato_names[] = { "Retrig", "Legato", "Fng Retrig", "Fng Legato" }; +const char *monosynth_lfotrig_names[] = { "Retrig", "Free" }; + +const char *monosynth_filter_choices[] = { + "12dB/oct Lowpass", + "24dB/oct Lowpass", + "2x12dB/oct Lowpass", + "12dB/oct Highpass", + "Lowpass+Notch", + "Highpass+Notch", + "6dB/oct Bandpass", + "2x6dB/oct Bandpass", +}; + +CALF_PLUGIN_INFO(monosynth) = { 0x8480, "Monosynth", "Calf Monosynth", "Krzysztof Foltman", calf_plugins::calf_copyright_info, "SynthesizerPlugin" }; + +CALF_PORT_PROPS(monosynth) = { + { monosynth_metadata::wave_saw, 0, monosynth_metadata::wave_count - 1, 1, PF_ENUM | PF_CTL_COMBO | PF_PROP_GRAPH, monosynth_waveform_names, "o1_wave", "Osc1 Wave" }, + { monosynth_metadata::wave_sqr, 0, monosynth_metadata::wave_count - 1, 1, PF_ENUM | PF_CTL_COMBO | PF_PROP_GRAPH, monosynth_waveform_names, "o2_wave", "Osc2 Wave" }, + + { 0, -1, 1, 0.1, PF_FLOAT | PF_SCALE_PERC | PF_CTL_KNOB, NULL, "o1_pw", "Osc1 PW" }, + { 0, -1, 1, 0.1, PF_FLOAT | PF_SCALE_PERC | PF_CTL_KNOB, NULL, "o2_pw", "Osc2 PW" }, + + { 10, 0, 100, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_CENTS, NULL, "o12_detune", "O1<>2 Detune" }, + { 12, -24, 24, 0, PF_INT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_SEMITONES, NULL, "o2_xpose", "Osc 2 transpose" }, + { 0, 0, 5, 0, PF_ENUM | PF_CTL_COMBO, monosynth_mode_names, "phase_mode", "Phase mode" }, + { 0.5, 0, 1, 0, PF_FLOAT | PF_SCALE_PERC, NULL, "o12_mix", "O1<>2 Mix" }, + { 1, 0, 7, 0, PF_ENUM | PF_CTL_COMBO | PF_PROP_GRAPH, monosynth_filter_choices, "filter", "Filter" }, + { 33, 10,16000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "cutoff", "Cutoff" }, + { 3, 0.7, 8, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB, NULL, "res", "Resonance" }, + { 0, -2400, 2400, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_CENTS, NULL, "filter_sep", "Separation" }, + { 8000, -10800,10800, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_CENTS, NULL, "env2cutoff", "Env->Cutoff" }, + { 1, 0, 1, 0, PF_FLOAT | PF_SCALE_PERC | PF_CTL_KNOB, NULL, "env2res", "Env->Res" }, + { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "env2amp", "Env->Amp" }, + + { 1, 1,20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_FADER | PF_UNIT_MSEC, NULL, "adsr_a", "EG1 Attack" }, + { 350, 10,20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_FADER | PF_UNIT_MSEC, NULL, "adsr_d", "EG1 Decay" }, + { 0.5, 0, 1, 0, PF_FLOAT | PF_SCALE_PERC, NULL, "adsr_s", "EG1 Sustain" }, + { 0, -10000,10000, 21, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_FADER | PF_UNIT_MSEC, NULL, "adsr_f", "EG1 Fade" }, + { 100, 10,20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_FADER | PF_UNIT_MSEC, NULL, "adsr_r", "EG1 Release" }, + + { 0, 0, 2, 0, PF_FLOAT | PF_SCALE_PERC, NULL, "key_follow", "Key Follow" }, + { 0, 0, 3, 0, PF_ENUM | PF_CTL_COMBO, monosynth_legato_names, "legato", "Legato Mode" }, + { 1, 1, 2000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "portamento", "Portamento" }, + + { 0.5, 0, 1, 0.1, PF_FLOAT | PF_SCALE_PERC | PF_CTL_KNOB, NULL, "vel2filter", "Vel->Filter" }, + { 0, 0, 1, 0.1, PF_FLOAT | PF_SCALE_PERC | PF_CTL_KNOB, NULL, "vel2amp", "Vel->Amp" }, + + { 0.5, 0, 1, 100, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_PROP_OUTPUT_GAIN, NULL, "master", "Volume" }, + + { 200, 0, 2400, 25, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_CENTS, NULL, "pbend_range", "PBend Range" }, + + { 5, 0.01, 20, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "lfo_rate", "LFO1 Rate" }, + { 0.5, 0, 5, 0, PF_FLOAT | PF_SCALE_QUAD | PF_CTL_KNOB | PF_UNIT_SEC, NULL, "lfo_delay", "LFO1 Delay" }, + { 0, -4800, 4800, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_CENTS, NULL, "lfo2filter", "LFO1->Filter" }, + { 100, 0, 1200, 0, PF_FLOAT | PF_SCALE_QUAD | PF_CTL_KNOB | PF_UNIT_CENTS, NULL, "lfo2pitch", "LFO1->Pitch" }, + { 0, 0, 1, 0.1, PF_FLOAT | PF_SCALE_PERC | PF_CTL_KNOB, NULL, "lfo2pw", "LFO1->PW" }, + { 1, 0, 1, 0.1, PF_FLOAT | PF_SCALE_PERC | PF_CTL_KNOB, NULL, "mwhl2lfo", "ModWheel->LFO1" }, + + { 1, 0, 1, 0, PF_FLOAT | PF_SCALE_PERC | PF_CTL_KNOB, NULL, "scale_detune", "Scale Detune" }, + + { 0, -10800,10800, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_CENTS, NULL, "adsr2_cutoff", "EG2->Cutoff" }, + { 0.3, 0, 1, 0, PF_FLOAT | PF_SCALE_PERC | PF_CTL_KNOB, NULL, "adsr2_res", "EG2->Res" }, + { 1, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "adsr2_amp", "EG2->Amp" }, + + { 1, 1,20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_FADER | PF_UNIT_MSEC, NULL, "adsr2_a", "EG2 Attack" }, + { 100, 10,20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_FADER | PF_UNIT_MSEC, NULL, "adsr2_d", "EG2 Decay" }, + { 0.5, 0, 1, 0, PF_FLOAT | PF_SCALE_PERC, NULL, "adsr2_s", "EG2 Sustain" }, + { 0, -10000,10000, 21, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_FADER | PF_UNIT_MSEC, NULL, "adsr2_f", "EG2 Fade" }, + { 50, 10,20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_FADER | PF_UNIT_MSEC, NULL, "adsr2_r", "Release" }, + + { 1, 1, 16, 0, PF_FLOAT | PF_SCALE_LOG | PF_UNIT_COEF | PF_CTL_KNOB, NULL, "o1_stretch", "Osc1 Stretch" }, + { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_PERC | PF_CTL_KNOB, NULL, "o1_window", "Osc1 Window" }, + + { 0, 0, 1, 0, PF_ENUM | PF_CTL_COMBO, monosynth_lfotrig_names, "lfo1_trig", "LFO1 Trigger Mode" }, + { 0, 0, 1, 0, PF_ENUM | PF_CTL_COMBO, monosynth_lfotrig_names, "lfo2_trig", "LFO2 Trigger Mode" }, + { 5, 0.01, 20, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "lfo2_rate", "LFO1 Rate" }, + { 0.5, 0.1, 5, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_SEC, NULL, "lfo2_delay", "LFO1 Delay" }, + {} +}; + +static const char *monosynth_mod_src_names[] = { + "None", + "Velocity", + "Pressure", + "ModWheel", + "Envelope 1", + "Envelope 2", + "LFO 1", + "LFO 2", + NULL +}; + +static const char *monosynth_mod_dest_names[] = { + "None", + "Attenuation", + "Osc Mix Ratio (%)", + "Cutoff [ct]", + "Resonance", + "O1: Detune [ct]", + "O2: Detune [ct]", + "O1: PW (%)", + "O2: PW (%)", + "O1: Stretch", + NULL +}; + +monosynth_metadata::monosynth_metadata() +: mm_metadata(mod_matrix_slots, monosynth_mod_src_names, monosynth_mod_dest_names) +{ +} + +const char *const *monosynth_metadata::get_configure_vars() const +{ + return mod_matrix_impl::get_configure_vars(); +} + +//////////////////////////////////////////////////////////////////////////// + +CALF_PLUGIN_INFO(organ) = { 0x8481, "Organ", "Calf Organ", "Krzysztof Foltman", calf_plugins::calf_copyright_info, "SynthesizerPlugin" }; + +plugin_command_info *organ_metadata::get_commands() +{ + static plugin_command_info cmds[] = { + { "cmd_panic", "Panic!", "Stop all sounds and reset all controllers" }, + { NULL } + }; + return cmds; +} + +CALF_PORT_NAMES(organ) = {"Out L", "Out R"}; + +const char *organ_percussion_trigger_names[] = { "First note", "Each note", "Each, no retrig", "Polyphonic" }; + +const char *organ_wave_names[] = { + "Sin", + "S0", "S00", "S000", + "SSaw", "SSqr", "SPls", + "Saw", "Sqr", "Pls", + "S(", "Sq(", "S+", "Clvg", + "Bell", "Bell2", + "W1", "W2", "W3", "W4", "W5", "W6", "W7", "W8", "W9", + "DSaw", "DSqr", "DPls", + "P:SynStr","P:WideStr","P:Sine","P:Bell","P:Space","P:Voice","P:Hiss","P:Chant", +}; + +const char *organ_routing_names[] = { "Out", "Flt 1", "Flt 2" }; + +const char *organ_ampctl_names[] = { "None", "Direct", "Flt 1", "Flt 2", "All" }; + +const char *organ_vibrato_mode_names[] = { "None", "Direct", "Flt 1", "Flt 2", "Voice", "Global" }; + +const char *organ_vibrato_type_names[] = { "Allpass", "Scanner (V1/C1)", "Scanner (V2/C2)", "Scanner (V3/C3)", "Scanner (Full)" }; + +const char *organ_filter_type_names[] = { "12dB/oct LP", "12dB/oct HP" }; + +const char *organ_filter_send_names[] = { "Output", "Filter 2" }; + +const char *organ_init_map_curve = "2\n0 1\n1 1\n"; + +CALF_PORT_PROPS(organ) = { + { 8, 0, 8, 80, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_FADER, NULL, "l1", "16'" }, + { 8, 0, 8, 80, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_FADER, NULL, "l2", "5 1/3'" }, + { 8, 0, 8, 80, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_FADER, NULL, "l3", "8'" }, + { 0, 0, 8, 80, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_FADER, NULL, "l4", "4'" }, + { 0, 0, 8, 80, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_FADER, NULL, "l5", "2 2/3'" }, + { 0, 0, 8, 80, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_FADER, NULL, "l6", "2'" }, + { 0, 0, 8, 80, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_FADER, NULL, "l7", "1 3/5'" }, + { 0, 0, 8, 80, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_FADER, NULL, "l8", "1 1/3'" }, + { 8, 0, 8, 80, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_FADER, NULL, "l9", "1'" }, + + { 1, 1, 32, 32, PF_INT | PF_SCALE_LINEAR | PF_CTL_KNOB, NULL, "f1", "Freq 1" }, + { 3, 1, 32, 32, PF_INT | PF_SCALE_LINEAR | PF_CTL_KNOB, NULL, "f2", "Freq 2" }, + { 2, 1, 32, 32, PF_INT | PF_SCALE_LINEAR | PF_CTL_KNOB, NULL, "f3", "Freq 3" }, + { 4, 1, 32, 32, PF_INT | PF_SCALE_LINEAR | PF_CTL_KNOB, NULL, "f4", "Freq 4" }, + { 6, 1, 32, 32, PF_INT | PF_SCALE_LINEAR | PF_CTL_KNOB, NULL, "f5", "Freq 5" }, + { 8, 1, 32, 32, PF_INT | PF_SCALE_LINEAR | PF_CTL_KNOB, NULL, "f6", "Freq 6" }, + { 10, 1, 32, 32, PF_INT | PF_SCALE_LINEAR | PF_CTL_KNOB, NULL, "f7", "Freq 7" }, + { 12, 1, 32, 32, PF_INT | PF_SCALE_LINEAR | PF_CTL_KNOB, NULL, "f8", "Freq 8" }, + { 16, 1, 32, 32, PF_INT | PF_SCALE_LINEAR | PF_CTL_KNOB, NULL, "f9", "Freq 9" }, + + { 0, 0, organ_enums::wave_count - 1, 0, PF_ENUM | PF_SCALE_LINEAR | PF_CTL_COMBO, organ_wave_names, "w1", "Wave 1" }, + { 0, 0, organ_enums::wave_count - 1, 0, PF_ENUM | PF_SCALE_LINEAR | PF_CTL_COMBO, organ_wave_names, "w2", "Wave 2" }, + { 0, 0, organ_enums::wave_count - 1, 0, PF_ENUM | PF_SCALE_LINEAR | PF_CTL_COMBO, organ_wave_names, "w3", "Wave 3" }, + { 0, 0, organ_enums::wave_count - 1, 0, PF_ENUM | PF_SCALE_LINEAR | PF_CTL_COMBO, organ_wave_names, "w4", "Wave 4" }, + { 0, 0, organ_enums::wave_count - 1, 0, PF_ENUM | PF_SCALE_LINEAR | PF_CTL_COMBO, organ_wave_names, "w5", "Wave 5" }, + { 0, 0, organ_enums::wave_count - 1, 0, PF_ENUM | PF_SCALE_LINEAR | PF_CTL_COMBO, organ_wave_names, "w6", "Wave 6" }, + { 0, 0, organ_enums::wave_count - 1, 0, PF_ENUM | PF_SCALE_LINEAR | PF_CTL_COMBO, organ_wave_names, "w7", "Wave 7" }, + { 0, 0, organ_enums::wave_count - 1, 0, PF_ENUM | PF_SCALE_LINEAR | PF_CTL_COMBO, organ_wave_names, "w8", "Wave 8" }, + { 0, 0, organ_enums::wave_count - 1, 0, PF_ENUM | PF_SCALE_LINEAR | PF_CTL_COMBO, organ_wave_names, "w9", "Wave 9" }, + + { 0, -100,100, 401, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_CENTS, NULL, "detune1", "Detune 1" }, + { 0, -100,100, 401, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_CENTS, NULL, "detune2", "Detune 2" }, + { 0, -100,100, 401, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_CENTS, NULL, "detune3", "Detune 3" }, + { 0, -100,100, 401, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_CENTS, NULL, "detune4", "Detune 4" }, + { 0, -100,100, 401, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_CENTS, NULL, "detune5", "Detune 5" }, + { 0, -100,100, 401, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_CENTS, NULL, "detune6", "Detune 6" }, + { 0, -100,100, 401, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_CENTS, NULL, "detune7", "Detune 7" }, + { 0, -100,100, 401, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_CENTS, NULL, "detune8", "Detune 8" }, + { 0, -100,100, 401, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_CENTS, NULL, "detune9", "Detune 9" }, + + { 0, 0,360, 361, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_DEG, NULL, "phase1", "Phase 1" }, + { 0, 0,360, 361, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_DEG, NULL, "phase2", "Phase 2" }, + { 0, 0,360, 361, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_DEG, NULL, "phase3", "Phase 3" }, + { 0, 0,360, 361, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_DEG, NULL, "phase4", "Phase 4" }, + { 0, 0,360, 361, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_DEG, NULL, "phase5", "Phase 5" }, + { 0, 0,360, 361, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_DEG, NULL, "phase6", "Phase 6" }, + { 0, 0,360, 361, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_DEG, NULL, "phase7", "Phase 7" }, + { 0, 0,360, 361, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_DEG, NULL, "phase8", "Phase 8" }, + { 0, 0,360, 361, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_DEG, NULL, "phase9", "Phase 9" }, + + { 0, -1, 1, 201, PF_FLOAT | PF_SCALE_PERC | PF_CTL_KNOB, NULL, "pan1", "Pan 1" }, + { 0, -1, 1, 201, PF_FLOAT | PF_SCALE_PERC | PF_CTL_KNOB, NULL, "pan2", "Pan 2" }, + { 0, -1, 1, 201, PF_FLOAT | PF_SCALE_PERC | PF_CTL_KNOB, NULL, "pan3", "Pan 3" }, + { 0, -1, 1, 201, PF_FLOAT | PF_SCALE_PERC | PF_CTL_KNOB, NULL, "pan4", "Pan 4" }, + { 0, -1, 1, 201, PF_FLOAT | PF_SCALE_PERC | PF_CTL_KNOB, NULL, "pan5", "Pan 5" }, + { 0, -1, 1, 201, PF_FLOAT | PF_SCALE_PERC | PF_CTL_KNOB, NULL, "pan6", "Pan 6" }, + { 0, -1, 1, 201, PF_FLOAT | PF_SCALE_PERC | PF_CTL_KNOB, NULL, "pan7", "Pan 7" }, + { 0, -1, 1, 201, PF_FLOAT | PF_SCALE_PERC | PF_CTL_KNOB, NULL, "pan8", "Pan 8" }, + { 0, -1, 1, 201, PF_FLOAT | PF_SCALE_PERC | PF_CTL_KNOB, NULL, "pan9", "Pan 9" }, + + { 0, 0, 2, 0, PF_ENUM | PF_SCALE_LINEAR | PF_CTL_COMBO, organ_routing_names, "routing1", "Routing 1" }, + { 0, 0, 2, 0, PF_ENUM | PF_SCALE_LINEAR | PF_CTL_COMBO, organ_routing_names, "routing2", "Routing 2" }, + { 0, 0, 2, 0, PF_ENUM | PF_SCALE_LINEAR | PF_CTL_COMBO, organ_routing_names, "routing3", "Routing 3" }, + { 0, 0, 2, 0, PF_ENUM | PF_SCALE_LINEAR | PF_CTL_COMBO, organ_routing_names, "routing4", "Routing 4" }, + { 0, 0, 2, 0, PF_ENUM | PF_SCALE_LINEAR | PF_CTL_COMBO, organ_routing_names, "routing5", "Routing 5" }, + { 0, 0, 2, 0, PF_ENUM | PF_SCALE_LINEAR | PF_CTL_COMBO, organ_routing_names, "routing6", "Routing 6" }, + { 0, 0, 2, 0, PF_ENUM | PF_SCALE_LINEAR | PF_CTL_COMBO, organ_routing_names, "routing7", "Routing 7" }, + { 0, 0, 2, 0, PF_ENUM | PF_SCALE_LINEAR | PF_CTL_COMBO, organ_routing_names, "routing8", "Routing 8" }, + { 0, 0, 2, 0, PF_ENUM | PF_SCALE_LINEAR | PF_CTL_COMBO, organ_routing_names, "routing9", "Routing 9" }, + + { 96 + 12, 0, 127, 128, PF_INT | PF_CTL_KNOB | PF_UNIT_NOTE, NULL, "foldnote", "Foldover" }, + + { 200, 10, 3000, 100, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "perc_decay", "P: Carrier Decay" }, + { 0.25, 0, 1, 100, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB, NULL, "perc_level", "P: Level" }, + { 0, 0, organ_enums::wave_count_small - 1, 1, PF_ENUM | PF_CTL_COMBO, organ_wave_names, "perc_waveform", "P: Carrier Wave" }, + { 6, 1, 32, 32, PF_INT | PF_SCALE_LINEAR | PF_CTL_KNOB, NULL, "perc_harmonic", "P: Carrier Frq" }, + { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_PERC, NULL, "perc_vel2amp", "P: Vel->Amp" }, + + { 200, 10, 3000, 100, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "perc_fm_decay", "P: Modulator Decay" }, + { 0, 0, 4, 0, PF_FLOAT | PF_SCALE_PERC, NULL, "perc_fm_depth", "P: FM Depth" }, + { 0, 0, organ_enums::wave_count_small - 1, 1, PF_ENUM | PF_CTL_COMBO, organ_wave_names, "perc_fm_waveform", "P: Modulator Wave" }, + { 6, 1, 32, 32, PF_INT | PF_SCALE_LINEAR | PF_CTL_KNOB, NULL, "perc_fm_harmonic", "P: Modulator Frq" }, + { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_PERC, NULL, "perc_vel2fm", "P: Vel->FM" }, + + { 0, 0, organ_enums::perctrig_count - 1, 0, PF_ENUM | PF_CTL_COMBO, organ_percussion_trigger_names, "perc_trigger", "P: Trigger" }, + { 90, 0,360, 361, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_DEG, NULL, "perc_stereo", "P: Stereo Phase" }, + + { 0, 0, 1, 0, PF_ENUM | PF_CTL_COMBO, organ_filter_send_names, "filter_chain", "Filter 1 To" }, + { 0, 0, 1, 0, PF_ENUM | PF_CTL_COMBO, organ_filter_type_names, "filter1_type", "Filter 1 Type" }, + { 0.1, 0, 1, 100, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_PROP_OUTPUT_GAIN | PF_PROP_GRAPH, NULL, "master", "Volume" }, + + { 2000, 20, 20000, 100, PF_FLOAT | PF_SCALE_LOG | PF_UNIT_HZ | PF_CTL_KNOB, NULL, "f1_cutoff", "F1 Cutoff" }, + { 2, 0.7, 8, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB, NULL, "f1_res", "F1 Res" }, + { 8000, -10800,10800, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_CENTS, NULL, "f1_env1", "F1 Env1" }, + { 0, -10800,10800, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_CENTS, NULL, "f1_env2", "F1 Env2" }, + { 0, -10800,10800, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_CENTS, NULL, "f1_env3", "F1 Env3" }, + { 0, 0, 2, 0, PF_FLOAT | PF_SCALE_PERC, NULL, "f1_keyf", "F1 KeyFollow" }, + + { 2000, 20, 20000, 100, PF_FLOAT | PF_SCALE_LOG | PF_UNIT_HZ | PF_CTL_KNOB, NULL, "f2_cutoff", "F2 Cutoff" }, + { 2, 0.7, 8, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB, NULL, "f2_res", "F2 Res" }, + { 0, -10800,10800, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_CENTS, NULL, "f2_env1", "F2 Env1" }, + { 8000, -10800,10800, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_CENTS, NULL, "f2_env2", "F2 Env2" }, + { 0, -10800,10800, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_CENTS, NULL, "f2_env3", "F2 Env3" }, + { 0, 0, 2, 0, PF_FLOAT | PF_SCALE_PERC, NULL, "f2_keyf", "F2 KeyFollow" }, + + { 1, 1,20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "adsr_a", "EG1 Attack" }, + { 350, 10,20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "adsr_d", "EG1 Decay" }, + { 0.5, 0, 1, 0, PF_FLOAT | PF_SCALE_PERC, NULL, "adsr_s", "EG1 Sustain" }, + { 50, 10,20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "adsr_r", "EG1 Release" }, + { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_PERC, NULL, "adsr_v", "EG1 VelMod" }, + { 0, 0, organ_enums::ampctl_count - 1, + 0, PF_INT | PF_CTL_COMBO, organ_ampctl_names, "eg1_amp_ctl", "EG1 To Amp"}, + + { 1, 1,20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "adsr2_a", "EG2 Attack" }, + { 350, 10,20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "adsr2_d", "EG2 Decay" }, + { 0.5, 0, 1, 0, PF_FLOAT | PF_SCALE_PERC, NULL, "adsr2_s", "EG2 Sustain" }, + { 50, 10,20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "adsr2_r", "EG2 Release" }, + { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_PERC, NULL, "adsr2_v", "EG2 VelMod" }, + { 0, 0, organ_enums::ampctl_count - 1, + 0, PF_INT | PF_CTL_COMBO, organ_ampctl_names, "eg2_amp_ctl", "EG2 To Amp"}, + + { 1, 1,20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "adsr3_a", "EG3 Attack" }, + { 350, 10,20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "adsr3_d", "EG3 Decay" }, + { 0.5, 0, 1, 0, PF_FLOAT | PF_SCALE_PERC, NULL, "adsr3_s", "EG3 Sustain" }, + { 50, 10,20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "adsr3_r", "EG3 Release" }, + { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_PERC, NULL, "adsr3_v", "EG3 VelMod" }, + { 0, 0, organ_enums::ampctl_count - 1, + 0, PF_INT | PF_CTL_COMBO, organ_ampctl_names, "eg3_amp_ctl", "EG3 To Amp"}, + + { 6.6, 0.01, 240, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "vib_rate", "Vib Rate" }, + { 1.0, 0, 1, 0, PF_FLOAT | PF_SCALE_PERC | PF_CTL_KNOB , NULL, "vib_amt", "Vib Mod Amt" }, + { 0.5, 0, 1, 0, PF_FLOAT | PF_SCALE_PERC | PF_CTL_KNOB , NULL, "vib_wet", "Vib Wet" }, + { 180, 0, 360, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_DEG, NULL, "vib_phase", "Vib Stereo" }, + { organ_enums::lfomode_global, 0, organ_enums::lfomode_count - 1, 0, PF_ENUM | PF_CTL_COMBO, organ_vibrato_mode_names, "vib_mode", "Vib Mode" }, + { organ_enums::lfotype_cv3, 0, organ_enums::lfotype_count - 1, 0, PF_ENUM | PF_CTL_COMBO, organ_vibrato_type_names, "vib_type", "Vib Type" }, +// { 0, 0, organ_enums::ampctl_count - 1, +// 0, PF_INT | PF_CTL_COMBO, organ_ampctl_names, "vel_amp_ctl", "Vel To Amp"}, + + { -12, -24, 24, 49, PF_INT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_SEMITONES, NULL, "transpose", "Transpose" }, + { 0, -100, 100, 201, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_CENTS, NULL, "detune", "Detune" }, + + { 16, 1, 32, 32, PF_INT | PF_SCALE_LINEAR | PF_CTL_KNOB, NULL, "polyphony", "Polyphony" }, + + { 1, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "quad_env", "Quadratic AmpEnv" }, + + { 200, 0, 2400, 25, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_CENTS, NULL, "pbend_range", "PBend Range" }, + + { 80, 20, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "bass_freq", "Bass Freq" }, + { 1, 0.1, 10, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "bass_gain", "Bass Gain" }, + { 12000, 20, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "treble_freq", "Treble Freq" }, + { 1, 0.1, 10, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "treble_gain", "Treble Gain" }, +}; + +const char *const *organ_metadata::get_configure_vars() const +{ + static const char *names[] = {"map_curve", NULL}; + return names; +} + +//////////////////////////////////////////////////////////////////////////// + +const char *fluidsynth_init_soundfont = ""; +const char *fluidsynth_init_presetkeyset = ""; + +const char *fluidsynth_interpolation_names[] = { "None (zero-hold)", "Linear", "Cubic", "7-point" }; + +CALF_PORT_NAMES(fluidsynth) = { + "Out L", "Out R", +}; + +CALF_PLUGIN_INFO(fluidsynth) = { 0x8700, "Fluidsynth", "Calf Fluidsynth", "FluidSynth Team / Krzysztof Foltman", calf_plugins::calf_copyright_info, "SynthesizerPlugin" }; + +CALF_PORT_PROPS(fluidsynth) = { + { 0.5, 0, 1, 100, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_PROP_OUTPUT_GAIN, NULL, "master", "Volume" }, + { 2, 0, 3, 0, PF_ENUM | PF_CTL_COMBO, fluidsynth_interpolation_names, "interpolation", "Interpolation" }, + { 1, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "reverb", "Reverb" }, + { 1, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "chorus", "Chorus" }, +}; + +const char *const *fluidsynth_metadata::get_configure_vars() const +{ + static const char *names[] = {"soundfont", "preset_key_set", NULL}; + return names; +} + +//////////////////////////////////////////////////////////////////////////// + +const char *wavetable_names[] = { + "Shiny1", + "Shiny2", + "Rezo", + "Metal", + "Bell", + "Blah", + "Pluck", + "Stretch", + "Stretch 2", + "Hard Sync", + "Hard Sync 2", + "Soft Sync", + "Bell 2", + "Bell 3", + "Tine", + "Tine 2", + "Clav", + "Clav 2", + "Gtr", + "Gtr 2", + "Gtr 3", + "Gtr 4", + "Gtr 5", + "Reed", + "Reed 2", + "Silver", + "Brass", + "Multi", + "Multi 2", +}; + +static const char *wavetable_mod_src_names[] = { + "None", + "Velocity", + "Pressure", + "ModWheel", + "Env 1", + "Env 2", + "Env 3", + NULL +}; + +static const char *wavetable_mod_dest_names[] = { + "None", + "Attenuation", + "Osc Mix Ratio (%)", + "Cutoff [ct]", + "Resonance", + "O1: Shift (%)", + "O2: Shift (%)", + "O1: Detune [ct]", + "O2: Detune [ct]", + NULL +}; + +CALF_PORT_NAMES(wavetable) = { + "Out L", "Out R", +}; + +CALF_PLUGIN_INFO(wavetable) = { 0x8701, "Wavetable", "Calf Wavetable", "Krzysztof Foltman", calf_plugins::calf_copyright_info, "SynthesizerPlugin" }; + +CALF_PORT_PROPS(wavetable) = { + { wavetable_metadata::wt_count - 1, 0, wavetable_metadata::wt_count - 1, 0, PF_ENUM | PF_SCALE_LINEAR | PF_CTL_COMBO, wavetable_names, "o1wave", "Osc1 Wave" }, + { 0.2, -1, 1, 0, PF_FLOAT | PF_SCALE_PERC | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "o1offset", "Osc1 Ctl"}, + { 0, -48, 48, 48*2+1, PF_INT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_SEMITONES, NULL, "o1trans", "Osc1 Transpose" }, + { 6, -100, 100, 0, PF_INT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_CENTS, NULL, "o1detune", "Osc1 Detune" }, + { 0.1, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "o1level", "Osc1 Level" }, + + { 0, 0, wavetable_metadata::wt_count - 1, 0, PF_ENUM | PF_SCALE_LINEAR | PF_CTL_COMBO, wavetable_names, "o2wave", "Osc2 Wave" }, + { 0.4, -1, 1, 0, PF_FLOAT | PF_SCALE_PERC | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "o2offset", "Osc2 Ctl"}, + { 0, -48, 48, 48*2+1, PF_INT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_SEMITONES, NULL, "o2trans", "Osc2 Transpose" }, + { -6, -100, 100, 0, PF_INT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_CENTS, NULL, "o2detune", "Osc2 Detune" }, + { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "o2level", "Osc2 Level" }, + + { 1, 1,20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "adsr_a", "EG1 Attack" }, + { 350, 10,20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "adsr_d", "EG1 Decay" }, + { 0.5, 0, 1, 0, PF_FLOAT | PF_SCALE_PERC, NULL, "adsr_s", "EG1 Sustain" }, + { 0, -10000,10000, 21, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "adsr_f", "EG1 Fade" }, + { 50, 10,20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "adsr_r", "EG1 Release" }, + { 1, 0, 1, 0, PF_FLOAT | PF_SCALE_PERC, NULL, "adsr_v", "EG1 VelMod" }, + + { 1, 1,20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "adsr2_a", "EG2 Attack" }, + { 350, 10,20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "adsr2_d", "EG2 Decay" }, + { 0.5, 0, 1, 0, PF_FLOAT | PF_SCALE_PERC, NULL, "adsr2_s", "EG2 Sustain" }, + { 0, -10000,10000, 21, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "adsr2_f", "EG2 Fade" }, + { 50, 10,20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "adsr2_r", "EG2 Release" }, + { 1, 0, 1, 0, PF_FLOAT | PF_SCALE_PERC, NULL, "adsr2_v", "EG2 VelMod" }, + + { 1, 1,20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "adsr3_a", "EG3 Attack" }, + { 350, 10,20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "adsr3_d", "EG3 Decay" }, + { 0.5, 0, 1, 0, PF_FLOAT | PF_SCALE_PERC, NULL, "adsr3_s", "EG3 Sustain" }, + { 0, -10000,10000, 21, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "adsr3_f", "EG3 Fade" }, + { 50, 10, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "adsr3_r", "EG3 Release" }, + { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_PERC, NULL, "adsr3_v", "EG3 VelMod" }, + + { 200, 0, 2400, 25, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_CENTS, NULL, "pbend_range", "PBend Range" }, + {} +}; + +wavetable_metadata::wavetable_metadata() +: mm_metadata(mod_matrix_slots, wavetable_mod_src_names, wavetable_mod_dest_names) +{ +} + +//////////////////////////////////////////////////////////////////////////// + +calf_plugins::plugin_registry::plugin_registry() +{ + #define PER_MODULE_ITEM(name, isSynth, jackname) plugins.push_back((new name##_metadata)); + #include +} diff --git a/plugins/LadspaEffect/calf/src/modmatrix.cpp b/plugins/LadspaEffect/calf/src/modmatrix.cpp new file mode 100644 index 000000000..0a320c220 --- /dev/null +++ b/plugins/LadspaEffect/calf/src/modmatrix.cpp @@ -0,0 +1,153 @@ +/* Calf DSP Library + * Modulation matrix boilerplate code. + * + * Copyright (C) 2001-2007 Krzysztof Foltman + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this program; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA + */ +#include +#include +#include +#include + +using namespace std; +using namespace dsp; +using namespace calf_plugins; +using namespace calf_utils; + +mod_matrix_impl::mod_matrix_impl(dsp::modulation_entry *_matrix, mod_matrix_metadata *_metadata) +: matrix(_matrix) +, metadata(_metadata) +{ + matrix_rows = metadata->get_table_rows(); + for (unsigned int i = 0; i < matrix_rows; i++) + matrix[i].reset(); +} + +const float mod_matrix_impl::scaling_coeffs[mod_matrix_metadata::map_type_count][3] = { + { 0, 1, 0 }, + { -1, 2, 0 }, + { -1, 1, 0 }, + { 0, 0, 1 }, + { -1, 0, 1 }, + { 0, 2, -1 }, + { -1, 4, -2 }, + { 0, 4, -4 }, +}; + +std::string mod_matrix_impl::get_cell(int row, int column) const +{ + assert(row >= 0 && row < (int)matrix_rows); + modulation_entry &slot = matrix[row]; + const char **arr = metadata->get_table_columns()[column].values; + switch(column) { + case 0: // source 1 + return arr[slot.src1]; + case 1: // mapping mode + return arr[slot.mapping]; + case 2: // source 2 + return arr[slot.src2]; + case 3: // amount + return calf_utils::f2s(slot.amount); + case 4: // destination + return arr[slot.dest]; + default: + assert(0); + return ""; + } +} + +void mod_matrix_impl::set_cell(int row, int column, const std::string &src, std::string &error) +{ + assert(row >= 0 && row < (int)matrix_rows); + modulation_entry &slot = matrix[row]; + const char **arr = metadata->get_table_columns()[column].values; + switch(column) { + case 0: + case 1: + case 2: + case 4: + { + for (int i = 0; arr[i]; i++) + { + if (src == arr[i]) + { + if (column == 0) + slot.src1 = i; + else if (column == 1) + slot.mapping = (mod_matrix_metadata::mapping_mode)i; + else if (column == 2) + slot.src2 = i; + else if (column == 4) + slot.dest = i; + error.clear(); + return; + } + } + error = "Invalid name: " + src; + return; + } + case 3: + { + stringstream ss(src); + ss >> slot.amount; + error.clear(); + return; + } + } +} + +void mod_matrix_impl::send_configures(send_configure_iface *sci) +{ + for (int i = 0; i < (int)matrix_rows; i++) + { + for (int j = 0; j < 5; j++) + { + string key = "mod_matrix:" + i2s(i) + "," + i2s(j); + sci->send_configure(key.c_str(), get_cell(i, j).c_str()); + } + } +} + +char *mod_matrix_impl::configure(const char *key, const char *value) +{ + bool is_rows; + int row, column; + if (!parse_table_key(key, "mod_matrix:", is_rows, row, column)) + return NULL; + if (is_rows) + return strdup("Unexpected key"); + + if (row != -1 && column != -1) + { + string error; + string value_text; + if (value == NULL) + { + const table_column_info &ci = metadata->get_table_columns()[column]; + if (ci.type == TCT_ENUM) + value_text = ci.values[(int)ci.def_value]; + else + if (ci.type == TCT_FLOAT) + value_text = f2s(ci.def_value); + value = value_text.c_str(); + } + set_cell(row, column, value, error); + if (!error.empty()) + return strdup(error.c_str()); + } + return NULL; +} diff --git a/plugins/LadspaEffect/calf/src/modules.cpp b/plugins/LadspaEffect/calf/src/modules.cpp new file mode 100644 index 000000000..ba06f0201 --- /dev/null +++ b/plugins/LadspaEffect/calf/src/modules.cpp @@ -0,0 +1,797 @@ +/* Calf DSP plugin pack + * Assorted plugins + * + * Copyright (C) 2001-2010 Krzysztof Foltman, Markus Schmidt, Thor Harald Johansen + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this program; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA + */ +#include +#include +#include +#include +#include + +using namespace dsp; +using namespace calf_plugins; + +#define SET_IF_CONNECTED(name) if (params[AM::param_##name] != NULL) *params[AM::param_##name] = name; + +/////////////////////////////////////////////////////////////////////////////////////////////// + +void reverb_audio_module::activate() +{ + reverb.reset(); +} + +void reverb_audio_module::deactivate() +{ +} + +void reverb_audio_module::set_sample_rate(uint32_t sr) +{ + srate = sr; + reverb.setup(sr); + amount.set_sample_rate(sr); +} + +void reverb_audio_module::params_changed() +{ + reverb.set_type_and_diffusion(fastf2i_drm(*params[par_roomsize]), *params[par_diffusion]); + reverb.set_time(*params[par_decay]); + reverb.set_cutoff(*params[par_hfdamp]); + amount.set_inertia(*params[par_amount]); + dryamount.set_inertia(*params[par_dry]); + left_lo.set_lp(dsp::clip(*params[par_treblecut], 20.f, (float)(srate * 0.49f)), srate); + left_hi.set_hp(dsp::clip(*params[par_basscut], 20.f, (float)(srate * 0.49f)), srate); + right_lo.copy_coeffs(left_lo); + right_hi.copy_coeffs(left_hi); + predelay_amt = (int) (srate * (*params[par_predelay]) * (1.0f / 1000.0f) + 1); +} + +uint32_t reverb_audio_module::process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask) +{ + numsamples += offset; + clip -= std::min(clip, numsamples); + for (uint32_t i = offset; i < numsamples; i++) { + float dry = dryamount.get(); + float wet = amount.get(); + stereo_sample s(ins[0][i], ins[1][i]); + stereo_sample s2 = pre_delay.process(s, predelay_amt); + + float rl = s2.left, rr = s2.right; + rl = left_lo.process(left_hi.process(rl)); + rr = right_lo.process(right_hi.process(rr)); + reverb.process(rl, rr); + outs[0][i] = dry*s.left + wet*rl; + outs[1][i] = dry*s.right + wet*rr; + meter_wet = std::max(fabs(wet*rl), fabs(wet*rr)); + meter_out = std::max(fabs(outs[0][i]), fabs(outs[1][i])); + if(outs[0][i] > 1.f or outs[1][i] > 1.f) { + clip = srate >> 3; + } + } + reverb.extra_sanitize(); + left_lo.sanitize(); + left_hi.sanitize(); + right_lo.sanitize(); + right_hi.sanitize(); + if(params[par_meter_wet] != NULL) { + *params[par_meter_wet] = meter_wet; + } + if(params[par_meter_out] != NULL) { + *params[par_meter_out] = meter_out; + } + if(params[par_clip] != NULL) { + *params[par_clip] = clip; + } + return outputs_mask; +} + +/////////////////////////////////////////////////////////////////////////////////////////////// + +vintage_delay_audio_module::vintage_delay_audio_module() +{ + old_medium = -1; + for (int i = 0; i < MAX_DELAY; i++) { + buffers[0][i] = 0.f; + buffers[1][i] = 0.f; + } +} + +void vintage_delay_audio_module::params_changed() +{ + float unit = 60.0 * srate / (*params[par_bpm] * *params[par_divide]); + deltime_l = dsp::fastf2i_drm(unit * *params[par_time_l]); + deltime_r = dsp::fastf2i_drm(unit * *params[par_time_r]); + int deltime_fb = deltime_l + deltime_r; + float fb = *params[par_feedback]; + dry.set_inertia(*params[par_dryamount]); + mixmode = dsp::fastf2i_drm(*params[par_mixmode]); + medium = dsp::fastf2i_drm(*params[par_medium]); + switch(mixmode) + { + case MIXMODE_STEREO: + fb_left.set_inertia(fb); + fb_right.set_inertia(pow(fb, *params[par_time_r] / *params[par_time_l])); + amt_left.set_inertia(*params[par_amount]); + amt_right.set_inertia(*params[par_amount]); + break; + case MIXMODE_PINGPONG: + fb_left.set_inertia(fb); + fb_right.set_inertia(fb); + amt_left.set_inertia(*params[par_amount]); + amt_right.set_inertia(*params[par_amount]); + break; + case MIXMODE_LR: + fb_left.set_inertia(fb); + fb_right.set_inertia(fb); + amt_left.set_inertia(*params[par_amount]); // L is straight 'amount' + amt_right.set_inertia(*params[par_amount] * pow(fb, 1.0 * deltime_r / deltime_fb)); // R is amount with feedback based dampening as if it ran through R/FB*100% of delay line's dampening + // deltime_l <<< deltime_r -> pow() = fb -> full delay line worth of dampening + // deltime_l >>> deltime_r -> pow() = 1 -> no dampening + break; + case MIXMODE_RL: + fb_left.set_inertia(fb); + fb_right.set_inertia(fb); + amt_left.set_inertia(*params[par_amount] * pow(fb, 1.0 * deltime_l / deltime_fb)); + amt_right.set_inertia(*params[par_amount]); + break; + } + chmix.set_inertia((1 - *params[par_width]) * 0.5); + if (medium != old_medium) + calc_filters(); +} + +void vintage_delay_audio_module::activate() +{ + bufptr = 0; + age = 0; +} + +void vintage_delay_audio_module::deactivate() +{ +} + +void vintage_delay_audio_module::set_sample_rate(uint32_t sr) +{ + srate = sr; + old_medium = -1; + amt_left.set_sample_rate(sr); amt_right.set_sample_rate(sr); + fb_left.set_sample_rate(sr); fb_right.set_sample_rate(sr); +} + +void vintage_delay_audio_module::calc_filters() +{ + // parameters are heavily influenced by gordonjcp and his tape delay unit + // although, don't blame him if it sounds bad - I've messed with them too :) + biquad_left[0].set_lp_rbj(6000, 0.707, srate); + biquad_left[1].set_bp_rbj(4500, 0.250, srate); + biquad_right[0].copy_coeffs(biquad_left[0]); + biquad_right[1].copy_coeffs(biquad_left[1]); +} + +/// Single delay line with feedback at the same tap +static inline void delayline_impl(int age, int deltime, float dry_value, const float &delayed_value, float &out, float &del, gain_smoothing &amt, gain_smoothing &fb) +{ + // if the buffer hasn't been cleared yet (after activation), pretend we've read zeros + if (age <= deltime) { + out = 0; + del = dry_value; + amt.step(); + fb.step(); + } + else + { + float delayed = delayed_value; // avoid dereferencing the pointer in 'then' branch of the if() + dsp::sanitize(delayed); + out = delayed * amt.get(); + del = dry_value + delayed * fb.get(); + } +} + +/// Single delay line with tap output +static inline void delayline2_impl(int age, int deltime, float dry_value, const float &delayed_value, const float &delayed_value_for_fb, float &out, float &del, gain_smoothing &amt, gain_smoothing &fb) +{ + if (age <= deltime) { + out = 0; + del = dry_value; + amt.step(); + fb.step(); + } + else + { + out = delayed_value * amt.get(); + del = dry_value + delayed_value_for_fb * fb.get(); + dsp::sanitize(out); + dsp::sanitize(del); + } +} + +static inline void delay_mix(float dry_left, float dry_right, float &out_left, float &out_right, float dry, float chmix) +{ + float tmp_left = lerp(out_left, out_right, chmix); + float tmp_right = lerp(out_right, out_left, chmix); + out_left = dry_left * dry + tmp_left; + out_right = dry_right * dry + tmp_right; +} + +uint32_t vintage_delay_audio_module::process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask) +{ + uint32_t ostate = 3; // XXXKF optimize! + uint32_t end = offset + numsamples; + int orig_bufptr = bufptr; + float out_left, out_right, del_left, del_right; + + switch(mixmode) + { + case MIXMODE_STEREO: + case MIXMODE_PINGPONG: + { + int v = mixmode == MIXMODE_PINGPONG ? 1 : 0; + for(uint32_t i = offset; i < end; i++) + { + delayline_impl(age, deltime_l, ins[0][i], buffers[v][(bufptr - deltime_l) & ADDR_MASK], out_left, del_left, amt_left, fb_left); + delayline_impl(age, deltime_r, ins[1][i], buffers[1 - v][(bufptr - deltime_r) & ADDR_MASK], out_right, del_right, amt_right, fb_right); + delay_mix(ins[0][i], ins[1][i], out_left, out_right, dry.get(), chmix.get()); + + age++; + outs[0][i] = out_left; outs[1][i] = out_right; buffers[0][bufptr] = del_left; buffers[1][bufptr] = del_right; + bufptr = (bufptr + 1) & (MAX_DELAY - 1); + } + } + break; + + case MIXMODE_LR: + case MIXMODE_RL: + { + int v = mixmode == MIXMODE_RL ? 1 : 0; + int deltime_fb = deltime_l + deltime_r; + int deltime_l_corr = mixmode == MIXMODE_RL ? deltime_fb : deltime_l; + int deltime_r_corr = mixmode == MIXMODE_LR ? deltime_fb : deltime_r; + + for(uint32_t i = offset; i < end; i++) + { + delayline2_impl(age, deltime_l, ins[0][i], buffers[v][(bufptr - deltime_l_corr) & ADDR_MASK], buffers[v][(bufptr - deltime_fb) & ADDR_MASK], out_left, del_left, amt_left, fb_left); + delayline2_impl(age, deltime_r, ins[1][i], buffers[1 - v][(bufptr - deltime_r_corr) & ADDR_MASK], buffers[1-v][(bufptr - deltime_fb) & ADDR_MASK], out_right, del_right, amt_right, fb_right); + delay_mix(ins[0][i], ins[1][i], out_left, out_right, dry.get(), chmix.get()); + + age++; + outs[0][i] = out_left; outs[1][i] = out_right; buffers[0][bufptr] = del_left; buffers[1][bufptr] = del_right; + bufptr = (bufptr + 1) & (MAX_DELAY - 1); + } + } + } + if (age >= MAX_DELAY) + age = MAX_DELAY; + if (medium > 0) { + bufptr = orig_bufptr; + if (medium == 2) + { + for(uint32_t i = offset; i < end; i++) + { + buffers[0][bufptr] = biquad_left[0].process_lp(biquad_left[1].process(buffers[0][bufptr])); + buffers[1][bufptr] = biquad_right[0].process_lp(biquad_right[1].process(buffers[1][bufptr])); + bufptr = (bufptr + 1) & (MAX_DELAY - 1); + } + biquad_left[0].sanitize();biquad_right[0].sanitize(); + } else { + for(uint32_t i = offset; i < end; i++) + { + buffers[0][bufptr] = biquad_left[1].process(buffers[0][bufptr]); + buffers[1][bufptr] = biquad_right[1].process(buffers[1][bufptr]); + bufptr = (bufptr + 1) & (MAX_DELAY - 1); + } + } + biquad_left[1].sanitize();biquad_right[1].sanitize(); + + } + return ostate; +} + +/////////////////////////////////////////////////////////////////////////////////////////////// + +bool filter_audio_module::get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const +{ + if (!is_active) + return false; + if (index == par_cutoff && !subindex) { + context->set_line_width(1.5); + return ::get_graph(*this, subindex, data, points); + } + return false; +} + +int filter_audio_module::get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline) const +{ + if (fabs(inertia_cutoff.get_last() - old_cutoff) + 100 * fabs(inertia_resonance.get_last() - old_resonance) + fabs(*params[par_mode] - old_mode) > 0.1f) + { + old_cutoff = inertia_cutoff.get_last(); + old_resonance = inertia_resonance.get_last(); + old_mode = *params[par_mode]; + last_generation++; + subindex_graph = 0; + subindex_dot = INT_MAX; + subindex_gridline = INT_MAX; + } + else { + subindex_graph = 0; + subindex_dot = subindex_gridline = generation ? INT_MAX : 0; + } + if (generation == last_calculated_generation) + subindex_graph = INT_MAX; + return last_generation; +} + + +/////////////////////////////////////////////////////////////////////////////////////////////// + +filterclavier_audio_module::filterclavier_audio_module() +: filter_module_with_inertia(ins, outs, params) +, min_gain(1.0) +, max_gain(32.0) +, last_note(-1) +, last_velocity(-1) +{ +} + +void filterclavier_audio_module::params_changed() +{ + inertia_filter_module::inertia_cutoff.set_inertia( + note_to_hz(last_note + *params[par_transpose], *params[par_detune])); + + float min_resonance = param_props[par_max_resonance].min; + inertia_filter_module::inertia_resonance.set_inertia( + (float(last_velocity) / 127.0) + // 0.001: see below + * (*params[par_max_resonance] - min_resonance + 0.001) + + min_resonance); + + adjust_gain_according_to_filter_mode(last_velocity); + + inertia_filter_module::calculate_filter(); +} + +void filterclavier_audio_module::activate() +{ + inertia_filter_module::activate(); +} + +void filterclavier_audio_module::set_sample_rate(uint32_t sr) +{ + inertia_filter_module::set_sample_rate(sr); +} + +void filterclavier_audio_module::deactivate() +{ + inertia_filter_module::deactivate(); +} + + +void filterclavier_audio_module::note_on(int channel, int note, int vel) +{ + last_note = note; + last_velocity = vel; + inertia_filter_module::inertia_cutoff.set_inertia( + note_to_hz(note + *params[par_transpose], *params[par_detune])); + + float min_resonance = param_props[par_max_resonance].min; + inertia_filter_module::inertia_resonance.set_inertia( + (float(vel) / 127.0) + // 0.001: if the difference is equal to zero (which happens + // when the max_resonance knom is at minimum position + // then the filter gain doesnt seem to snap to zero on most note offs + * (*params[par_max_resonance] - min_resonance + 0.001) + + min_resonance); + + adjust_gain_according_to_filter_mode(vel); + + inertia_filter_module::calculate_filter(); +} + +void filterclavier_audio_module::note_off(int channel, int note, int vel) +{ + if (note == last_note) { + inertia_filter_module::inertia_resonance.set_inertia(param_props[par_max_resonance].min); + inertia_filter_module::inertia_gain.set_inertia(min_gain); + inertia_filter_module::calculate_filter(); + last_velocity = 0; + } +} + +void filterclavier_audio_module::adjust_gain_according_to_filter_mode(int velocity) +{ + int mode = dsp::fastf2i_drm(*params[par_mode]); + + // for bandpasses: boost gain for velocities > 0 + if ( (mode_6db_bp <= mode) && (mode <= mode_18db_bp) ) { + // gain for velocity 0: 1.0 + // gain for velocity 127: 32.0 + float mode_max_gain = max_gain; + // max_gain is right for mode_6db_bp + if (mode == mode_12db_bp) + mode_max_gain /= 6.0; + if (mode == mode_18db_bp) + mode_max_gain /= 10.5; + + inertia_filter_module::inertia_gain.set_now( + (float(velocity) / 127.0) * (mode_max_gain - min_gain) + min_gain); + } else { + inertia_filter_module::inertia_gain.set_now(min_gain); + } +} + +bool filterclavier_audio_module::get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const +{ + if (!is_active || index != par_mode) { + return false; + } + if (!subindex) { + context->set_line_width(1.5); + return ::get_graph(*this, subindex, data, points); + } + return false; +} + + +/////////////////////////////////////////////////////////////////////////////////////////////// + +stereo_audio_module::stereo_audio_module() { + active = false; + clip_inL = 0.f; + clip_inR = 0.f; + clip_outL = 0.f; + clip_outR = 0.f; + meter_inL = 0.f; + meter_inR = 0.f; + meter_outL = 0.f; + meter_outR = 0.f; +} + +void stereo_audio_module::activate() { + active = true; +} + +void stereo_audio_module::deactivate() { + active = false; +} + +void stereo_audio_module::params_changed() { + float slev = 2 * *params[param_slev]; // stereo level ( -2 -> 2 ) + float sbal = 1 + *params[param_sbal]; // stereo balance ( 0 -> 2 ) + float mlev = 2 * *params[param_mlev]; // mono level ( -2 -> 2 ) + float mpan = 1 + *params[param_mpan]; // mono pan ( 0 -> 2 ) + + switch((int)*params[param_mode]) + { + case 0: + default: + //LR->LR + LL = (mlev * (2.f - mpan) + slev * (2.f - sbal)); + LR = (mlev * mpan - slev * sbal); + RL = (mlev * (2.f - mpan) - slev * (2.f - sbal)); + RR = (mlev * mpan + slev * sbal); + break; + case 1: + //LR->MS + LL = (2.f - mpan) * (2.f - sbal); + LR = mpan * (2.f - sbal) * -1; + RL = (2.f - mpan) * sbal; + RR = mpan * sbal; + break; + case 2: + //MS->LR + LL = mlev * (2.f - sbal); + LR = mlev * mpan; + RL = slev * (2.f - sbal); + RR = slev * sbal * -1; + break; + case 3: + case 4: + case 5: + case 6: + //LR->LL + LL = 0.f; + LR = 0.f; + RL = 0.f; + RR = 0.f; + break; + } +} + +uint32_t stereo_audio_module::process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask) { + for(uint32_t i = offset; i < offset + numsamples; i++) { + if(*params[param_bypass] > 0.5) { + outs[0][i] = ins[0][i]; + outs[1][i] = ins[1][i]; + clip_inL = 0.f; + clip_inR = 0.f; + clip_outL = 0.f; + clip_outR = 0.f; + meter_inL = 0.f; + meter_inR = 0.f; + meter_outL = 0.f; + meter_outR = 0.f; + } else { + // let meters fall a bit + clip_inL -= std::min(clip_inL, numsamples); + clip_inR -= std::min(clip_inR, numsamples); + clip_outL -= std::min(clip_outL, numsamples); + clip_outR -= std::min(clip_outR, numsamples); + meter_inL = 0.f; + meter_inR = 0.f; + meter_outL = 0.f; + meter_outR = 0.f; + + float L = ins[0][i]; + float R = ins[1][i]; + + // levels in + L *= *params[param_level_in]; + R *= *params[param_level_in]; + + // balance in + L *= (1.f - std::max(0.f, *params[param_balance_in])); + R *= (1.f + std::min(0.f, *params[param_balance_in])); + + // copy / flip / mono ... + switch((int)*params[param_mode]) + { + case 0: + default: + // LR > LR + break; + case 1: + // LR > MS + break; + case 2: + // MS > LR + break; + case 3: + // LR > LL + R = L; + break; + case 4: + // LR > RR + L = R; + break; + case 5: + // LR > L+R + L = (L + R) / 2; + R = L; + break; + case 6: + // LR > RL + float tmp = L; + L = R; + R = tmp; + break; + } + + // softclip + if(*params[param_softclip]) { + int ph; + ph = L / fabs(L); + L = L > 0.63 ? ph * (0.63 + 0.36 * (1 - pow(MATH_E, (1.f / 3) * (0.63 + L * ph)))) : L; + ph = R / fabs(R); + R = R > 0.63 ? ph * (0.63 + 0.36 * (1 - pow(MATH_E, (1.f / 3) * (0.63 + R * ph)))) : R; + } + + // GUI stuff + if(L > meter_inL) meter_inL = L; + if(R > meter_inR) meter_inR = R; + if(L > 1.f) clip_inL = srate >> 3; + if(R > 1.f) clip_inR = srate >> 3; + + // mute + L *= (1 - floor(*params[param_mute_l] + 0.5)); + R *= (1 - floor(*params[param_mute_r] + 0.5)); + + // phase + L *= (2 * (1 - floor(*params[param_phase_l] + 0.5))) - 1; + R *= (2 * (1 - floor(*params[param_phase_r] + 0.5))) - 1; + + // LR/MS + L += LL*L + RL*R; + R += RR*R + LR*L; + + // widener + L += *params[param_widener] * R * -1; + R += *params[param_widener] * L * -1; + + // delay + buffer[pos] = L; + buffer[pos + 1] = R; + + int nbuf = srate * (fabs(*params[param_delay]) / 1000.f); + nbuf -= nbuf % 2; + if(*params[param_delay] > 0.f) { + R = buffer[(pos - (int)nbuf + 1 + buffer_size) % buffer_size]; + } else if (*params[param_delay] < 0.f) { + L = buffer[(pos - (int)nbuf + buffer_size) % buffer_size]; + } + + pos = (pos + 2) % buffer_size; + + // balance out + L *= (1.f - std::max(0.f, *params[param_balance_out])); + R *= (1.f + std::min(0.f, *params[param_balance_out])); + + // level + L *= *params[param_level_out]; + R *= *params[param_level_out]; + + //output + outs[0][i] = L; + outs[1][i] = R; + + // clip LED's + if(L > 1.f) clip_outL = srate >> 3; + if(R > 1.f) clip_outR = srate >> 3; + if(L > meter_outL) meter_outL = L; + if(R > meter_outR) meter_outR = R; + + // phase meter + if(fabs(L) > 0.001 and fabs(R) > 0.001) { + meter_phase = fabs(fabs(L+R) > 0.000000001 ? sin(fabs((L-R)/(L+R))) : 0.f); + } else { + meter_phase = 0.f; + } + } + } + // draw meters + SET_IF_CONNECTED(clip_inL); + SET_IF_CONNECTED(clip_inR); + SET_IF_CONNECTED(clip_outL); + SET_IF_CONNECTED(clip_outR); + SET_IF_CONNECTED(meter_inL); + SET_IF_CONNECTED(meter_inR); + SET_IF_CONNECTED(meter_outL); + SET_IF_CONNECTED(meter_outR); + SET_IF_CONNECTED(meter_phase); + return outputs_mask; +} + +void stereo_audio_module::set_sample_rate(uint32_t sr) +{ + srate = sr; + // rebuild buffer + buffer_size = (int)(srate * 0.05 * 2.f); // buffer size attack rate multiplied by 2 channels + buffer = (float*) calloc(buffer_size, sizeof(float)); + memset(buffer, 0, buffer_size * sizeof(float)); // reset buffer to zero + pos = 0; +} + +/////////////////////////////////////////////////////////////////////////////////////////////// + +mono_audio_module::mono_audio_module() { + active = false; + clip_in = 0.f; + clip_outL = 0.f; + clip_outR = 0.f; + meter_in = 0.f; + meter_outL = 0.f; + meter_outR = 0.f; +} + +void mono_audio_module::activate() { + active = true; +} + +void mono_audio_module::deactivate() { + active = false; +} + +void mono_audio_module::params_changed() { + +} + +uint32_t mono_audio_module::process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask) { + for(uint32_t i = offset; i < offset + numsamples; i++) { + if(*params[param_bypass] > 0.5) { + outs[0][i] = ins[0][i]; + outs[1][i] = ins[0][i]; + clip_in = 0.f; + clip_outL = 0.f; + clip_outR = 0.f; + meter_in = 0.f; + meter_outL = 0.f; + meter_outR = 0.f; + } else { + // let meters fall a bit + clip_in -= std::min(clip_in, numsamples); + clip_outL -= std::min(clip_outL, numsamples); + clip_outR -= std::min(clip_outR, numsamples); + meter_in = 0.f; + meter_outL = 0.f; + meter_outR = 0.f; + + float L = ins[0][i]; + + // levels in + L *= *params[param_level_in]; + + // softclip + if(*params[param_softclip]) { + int ph = L / fabs(L); + L = L > 0.63 ? ph * (0.63 + 0.36 * (1 - pow(MATH_E, (1.f / 3) * (0.63 + L * ph)))) : L; + } + + // GUI stuff + if(L > meter_in) meter_in = L; + if(L > 1.f) clip_in = srate >> 3; + + float R = L; + + // mute + L *= (1 - floor(*params[param_mute_l] + 0.5)); + R *= (1 - floor(*params[param_mute_r] + 0.5)); + + // phase + L *= (2 * (1 - floor(*params[param_phase_l] + 0.5))) - 1; + R *= (2 * (1 - floor(*params[param_phase_r] + 0.5))) - 1; + + // delay + buffer[pos] = L; + buffer[pos + 1] = R; + + int nbuf = srate * (fabs(*params[param_delay]) / 1000.f); + nbuf -= nbuf % 2; + if(*params[param_delay] > 0.f) { + R = buffer[(pos - (int)nbuf + 1 + buffer_size) % buffer_size]; + } else if (*params[param_delay] < 0.f) { + L = buffer[(pos - (int)nbuf + buffer_size) % buffer_size]; + } + + pos = (pos + 2) % buffer_size; + + // balance out + L *= (1.f - std::max(0.f, *params[param_balance_out])); + R *= (1.f + std::min(0.f, *params[param_balance_out])); + + // level + L *= *params[param_level_out]; + R *= *params[param_level_out]; + + //output + outs[0][i] = L; + outs[1][i] = R; + + // clip LED's + if(L > 1.f) clip_outL = srate >> 3; + if(R > 1.f) clip_outR = srate >> 3; + if(L > meter_outL) meter_outL = L; + if(R > meter_outR) meter_outR = R; + } + } + // draw meters + SET_IF_CONNECTED(clip_in); + SET_IF_CONNECTED(clip_outL); + SET_IF_CONNECTED(clip_outR); + SET_IF_CONNECTED(meter_in); + SET_IF_CONNECTED(meter_outL); + SET_IF_CONNECTED(meter_outR); + return outputs_mask; +} + +void mono_audio_module::set_sample_rate(uint32_t sr) +{ + srate = sr; + // rebuild buffer + buffer_size = (int)srate * 0.05 * 2; // delay buffer size multiplied by 2 channels + buffer = (float*) calloc(buffer_size, sizeof(float)); + memset(buffer, 0, buffer_size * sizeof(float)); // reset buffer to zero + pos = 0; +} diff --git a/plugins/LadspaEffect/calf/src/modules_comp.cpp b/plugins/LadspaEffect/calf/src/modules_comp.cpp new file mode 100644 index 000000000..85797706e --- /dev/null +++ b/plugins/LadspaEffect/calf/src/modules_comp.cpp @@ -0,0 +1,2577 @@ +/* Calf DSP plugin pack + * Compression related plugins + * + * Copyright (C) 2001-2010 Krzysztof Foltman, Markus Schmidt, Thor Harald Johansen and others + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this program; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA + */ +#include +#include +#include +#include + +using namespace dsp; +using namespace calf_plugins; + +#define SET_IF_CONNECTED(name) if (params[AM::param_##name] != NULL) *params[AM::param_##name] = name; + +/// Multiband Compressor by Markus Schmidt +/// +/// This module splits the signal in four different bands +/// and sends them through multiple filters (implemented by +/// Krzysztof). They are processed by a compressing routine +/// (implemented by Thor) afterwards and summed up to the +/// final output again. +/////////////////////////////////////////////////////////////////////////////////////////////// + +multibandcompressor_audio_module::multibandcompressor_audio_module() +{ + is_active = false; + srate = 0; + // zero all displays + clip_inL = 0.f; + clip_inR = 0.f; + clip_outL = 0.f; + clip_outR = 0.f; + meter_inL = 0.f; + meter_inR = 0.f; + meter_outL = 0.f; + meter_outR = 0.f; + for(int i = 0; i < strips - 1; i ++) { + freq_old[i] = -1; + sep_old[i] = -1; + q_old[i] = -1; + } + mode_old = -1; +} + +void multibandcompressor_audio_module::activate() +{ + is_active = true; + // set all filters and strips + params_changed(); + // activate all strips + for (int j = 0; j < strips; j ++) { + strip[j].activate(); + strip[j].id = j; + } +} + +void multibandcompressor_audio_module::deactivate() +{ + is_active = false; + // deactivate all strips + for (int j = 0; j < strips; j ++) { + strip[j].deactivate(); + } +} + +void multibandcompressor_audio_module::params_changed() +{ + // determine mute/solo states + solo[0] = *params[param_solo0] > 0.f ? true : false; + solo[1] = *params[param_solo1] > 0.f ? true : false; + solo[2] = *params[param_solo2] > 0.f ? true : false; + solo[3] = *params[param_solo3] > 0.f ? true : false; + no_solo = (*params[param_solo0] > 0.f || + *params[param_solo1] > 0.f || + *params[param_solo2] > 0.f || + *params[param_solo3] > 0.f) ? false : true; + int i; + int j1; + switch(mode) { + case 0: + default: + j1 = 0; + break; + case 1: + j1 = 2; + break; + } + // set the params of all filters + if(*params[param_freq0] != freq_old[0] or *params[param_sep0] != sep_old[0] or *params[param_q0] != q_old[0] or *params[param_mode] != mode_old) { + lpL[0][0].set_lp_rbj((float)(*params[param_freq0] * (1 - *params[param_sep0])), *params[param_q0], (float)srate); + hpL[0][0].set_hp_rbj((float)(*params[param_freq0] * (1 + *params[param_sep0])), *params[param_q0], (float)srate); + lpR[0][0].copy_coeffs(lpL[0][0]); + hpR[0][0].copy_coeffs(hpL[0][0]); + for(i = 1; i <= j1; i++) { + lpL[0][i].copy_coeffs(lpL[0][0]); + hpL[0][i].copy_coeffs(hpL[0][0]); + lpR[0][i].copy_coeffs(lpL[0][0]); + hpR[0][i].copy_coeffs(hpL[0][0]); + } + freq_old[0] = *params[param_freq0]; + sep_old[0] = *params[param_sep0]; + q_old[0] = *params[param_q0]; + } + if(*params[param_freq1] != freq_old[1] or *params[param_sep1] != sep_old[1] or *params[param_q1] != q_old[1] or *params[param_mode] != mode_old) { + lpL[1][0].set_lp_rbj((float)(*params[param_freq1] * (1 - *params[param_sep1])), *params[param_q1], (float)srate); + hpL[1][0].set_hp_rbj((float)(*params[param_freq1] * (1 + *params[param_sep1])), *params[param_q1], (float)srate); + lpR[1][0].copy_coeffs(lpL[1][0]); + hpR[1][0].copy_coeffs(hpL[1][0]); + for(i = 1; i <= j1; i++) { + lpL[1][i].copy_coeffs(lpL[1][0]); + hpL[1][i].copy_coeffs(hpL[1][0]); + lpR[1][i].copy_coeffs(lpL[1][0]); + hpR[1][i].copy_coeffs(hpL[1][0]); + } + freq_old[1] = *params[param_freq1]; + sep_old[1] = *params[param_sep1]; + q_old[1] = *params[param_q1]; + } + if(*params[param_freq2] != freq_old[2] or *params[param_sep2] != sep_old[2] or *params[param_q2] != q_old[2] or *params[param_mode] != mode_old) { + lpL[2][0].set_lp_rbj((float)(*params[param_freq2] * (1 - *params[param_sep2])), *params[param_q2], (float)srate); + hpL[2][0].set_hp_rbj((float)(*params[param_freq2] * (1 + *params[param_sep2])), *params[param_q2], (float)srate); + lpR[2][0].copy_coeffs(lpL[2][0]); + hpR[2][0].copy_coeffs(hpL[2][0]); + for(i = 1; i <= j1; i++) { + lpL[2][i].copy_coeffs(lpL[2][0]); + hpL[2][i].copy_coeffs(hpL[2][0]); + lpR[2][i].copy_coeffs(lpL[2][0]); + hpR[2][i].copy_coeffs(hpL[2][0]); + } + freq_old[2] = *params[param_freq2]; + sep_old[2] = *params[param_sep2]; + q_old[2] = *params[param_q2]; + } + // set the params of all strips + strip[0].set_params(*params[param_attack0], *params[param_release0], *params[param_threshold0], *params[param_ratio0], *params[param_knee0], *params[param_makeup0], *params[param_detection0], 1.f, *params[param_bypass0], !(solo[0] || no_solo)); + strip[1].set_params(*params[param_attack1], *params[param_release1], *params[param_threshold1], *params[param_ratio1], *params[param_knee1], *params[param_makeup1], *params[param_detection1], 1.f, *params[param_bypass1], !(solo[1] || no_solo)); + strip[2].set_params(*params[param_attack2], *params[param_release2], *params[param_threshold2], *params[param_ratio2], *params[param_knee2], *params[param_makeup2], *params[param_detection2], 1.f, *params[param_bypass2], !(solo[2] || no_solo)); + strip[3].set_params(*params[param_attack3], *params[param_release3], *params[param_threshold3], *params[param_ratio3], *params[param_knee3], *params[param_makeup3], *params[param_detection3], 1.f, *params[param_bypass3], !(solo[3] || no_solo)); +} + +void multibandcompressor_audio_module::set_sample_rate(uint32_t sr) +{ + srate = sr; + // set srate of all strips + for (int j = 0; j < strips; j ++) { + strip[j].set_sample_rate(srate); + } +} + +#define BYPASSED_COMPRESSION(index) \ + if(params[param_compression##index] != NULL) \ + *params[param_compression##index] = 1.0; \ + if(params[param_output##index] != NULL) \ + *params[param_output##index] = 0.0; + +#define ACTIVE_COMPRESSION(index) \ + if(params[param_compression##index] != NULL) \ + *params[param_compression##index] = strip[index].get_comp_level(); \ + if(params[param_output##index] != NULL) \ + *params[param_output##index] = strip[index].get_output_level(); + +uint32_t multibandcompressor_audio_module::process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask) +{ + bool bypass = *params[param_bypass] > 0.5f; + numsamples += offset; + for (int i = 0; i < strips; i++) + strip[i].update_curve(); + if(bypass) { + // everything bypassed + while(offset < numsamples) { + outs[0][offset] = ins[0][offset]; + outs[1][offset] = ins[1][offset]; + ++offset; + } + // displays, too + clip_inL = 0.f; + clip_inR = 0.f; + clip_outL = 0.f; + clip_outR = 0.f; + meter_inL = 0.f; + meter_inR = 0.f; + meter_outL = 0.f; + meter_outR = 0.f; + } else { + // process all strips + + // let meters fall a bit + clip_inL -= std::min(clip_inL, numsamples); + clip_inR -= std::min(clip_inR, numsamples); + clip_outL -= std::min(clip_outL, numsamples); + clip_outR -= std::min(clip_outR, numsamples); + meter_inL = 0.f; + meter_inR = 0.f; + meter_outL = 0.f; + meter_outR = 0.f; + while(offset < numsamples) { + // cycle through samples + float inL = ins[0][offset]; + float inR = ins[1][offset]; + // in level + inR *= *params[param_level_in]; + inL *= *params[param_level_in]; + // out vars + float outL = 0.f; + float outR = 0.f; + int j1; + for (int i = 0; i < strips; i ++) { + // cycle trough strips + if (solo[i] || no_solo) { + // strip unmuted + float left = inL; + float right = inR; + // send trough filters + switch(mode) { + case 0: + default: + j1 = 0; + break; + case 1: + j1 = 2; + break; + } + for (int j = 0; j <= j1; j++){ + if(i + 1 < strips) { + left = lpL[i][j].process(left); + right = lpR[i][j].process(right); + lpL[i][j].sanitize(); + lpR[i][j].sanitize(); + } + if(i - 1 >= 0) { + left = hpL[i - 1][j].process(left); + right = hpR[i - 1][j].process(right); + hpL[i - 1][j].sanitize(); + hpR[i - 1][j].sanitize(); + } + } + // process gain reduction + strip[i].process(left, right); + // sum up output + outL += left; + outR += right; + } else { + // strip muted + + } + + + } // process single strip + + // even out filters gain reduction + // 3dB - levelled manually (based on default sep and q settings) + switch(mode) { + case 0: + outL *= 1.414213562; + outR *= 1.414213562; + break; + case 1: + outL *= 0.88; + outR *= 0.88; + break; + } + + // out level + outL *= *params[param_level_out]; + outR *= *params[param_level_out]; + + // send to output + outs[0][offset] = outL; + outs[1][offset] = outR; + + // clip LED's + if(inL > 1.f) { + clip_inL = srate >> 3; + } + if(inR > 1.f) { + clip_inR = srate >> 3; + } + if(outL > 1.f) { + clip_outL = srate >> 3; + } + if(outR > 1.f) { + clip_outR = srate >> 3; + } + // set up in / out meters + if(inL > meter_inL) { + meter_inL = inL; + } + if(inR > meter_inR) { + meter_inR = inR; + } + if(outL > meter_outL) { + meter_outL = outL; + } + if(outR > meter_outR) { + meter_outR = outR; + } + // next sample + ++offset; + } // cycle trough samples + + } // process all strips (no bypass) + + // draw meters + SET_IF_CONNECTED(clip_inL); + SET_IF_CONNECTED(clip_inR); + SET_IF_CONNECTED(clip_outL); + SET_IF_CONNECTED(clip_outR); + SET_IF_CONNECTED(meter_inL); + SET_IF_CONNECTED(meter_inR); + SET_IF_CONNECTED(meter_outL); + SET_IF_CONNECTED(meter_outR); + // draw strip meters + if(bypass > 0.5f) { + BYPASSED_COMPRESSION(0) + BYPASSED_COMPRESSION(1) + BYPASSED_COMPRESSION(2) + BYPASSED_COMPRESSION(3) + } else { + ACTIVE_COMPRESSION(0) + ACTIVE_COMPRESSION(1) + ACTIVE_COMPRESSION(2) + ACTIVE_COMPRESSION(3) + } + // whatever has to be returned x) + return outputs_mask; +} + +const gain_reduction_audio_module *multibandcompressor_audio_module::get_strip_by_param_index(int index) const +{ + // let's handle by the corresponding strip + switch (index) { + case param_compression0: + return &strip[0]; + case param_compression1: + return &strip[1]; + case param_compression2: + return &strip[2]; + case param_compression3: + return &strip[3]; + } + return NULL; +} + +bool multibandcompressor_audio_module::get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const +{ + const gain_reduction_audio_module *m = get_strip_by_param_index(index); + if (m) + return m->get_graph(subindex, data, points, context); + return false; +} + +bool multibandcompressor_audio_module::get_dot(int index, int subindex, float &x, float &y, int &size, cairo_iface *context) const +{ + const gain_reduction_audio_module *m = get_strip_by_param_index(index); + if (m) + return m->get_dot(subindex, x, y, size, context); + return false; +} + +bool multibandcompressor_audio_module::get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const +{ + const gain_reduction_audio_module *m = get_strip_by_param_index(index); + if (m) + return m->get_gridline(subindex, pos, vertical, legend, context); + return false; +} + +int multibandcompressor_audio_module::get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline) const +{ + const gain_reduction_audio_module *m = get_strip_by_param_index(index); + if (m) + return m->get_changed_offsets(generation, subindex_graph, subindex_dot, subindex_gridline); + return 0; +} + +/// Compressor originally by Thor +/// +/// This module provides Thor's original compressor without any sidechain or weighting +/////////////////////////////////////////////////////////////////////////////////////////////// + +compressor_audio_module::compressor_audio_module() +{ + is_active = false; + srate = 0; + last_generation = 0; + meters.reset(); +} + +void compressor_audio_module::activate() +{ + is_active = true; + // set all filters and strips + compressor.activate(); + params_changed(); + meters.reset(); +} +void compressor_audio_module::deactivate() +{ + is_active = false; + compressor.deactivate(); +} + +void compressor_audio_module::params_changed() +{ + compressor.set_params(*params[param_attack], *params[param_release], *params[param_threshold], *params[param_ratio], *params[param_knee], *params[param_makeup], *params[param_detection], *params[param_stereo_link], *params[param_bypass], 0.f); +} + +void compressor_audio_module::set_sample_rate(uint32_t sr) +{ + srate = sr; + compressor.set_sample_rate(srate); + meters.set_sample_rate(srate); +} + +uint32_t compressor_audio_module::process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask) +{ + uint32_t orig_offset = offset; + uint32_t orig_numsamples = numsamples; + bool bypass = *params[param_bypass] > 0.5f; + numsamples += offset; + if(bypass) { + // everything bypassed + while(offset < numsamples) { + outs[0][offset] = ins[0][offset]; + outs[1][offset] = ins[1][offset]; + ++offset; + } + // displays, too + meters.bypassed(params, orig_numsamples); + } else { + // process + + compressor.update_curve(); + + while(offset < numsamples) { + // cycle through samples + float outL = 0.f; + float outR = 0.f; + float inL = ins[0][offset]; + float inR = ins[1][offset]; + // in level + inR *= *params[param_level_in]; + inL *= *params[param_level_in]; + + float leftAC = inL; + float rightAC = inR; + + compressor.process(leftAC, rightAC); + + outL = leftAC; + outR = rightAC; + + // send to output + outs[0][offset] = outL; + outs[1][offset] = outR; + + // next sample + ++offset; + } // cycle trough samples + meters.process(params, ins, outs, orig_offset, orig_numsamples); + } + // draw strip meter + if(bypass > 0.5f) { + if(params[param_compression] != NULL) { + *params[param_compression] = 1.0f; + } + } else { + if(params[param_compression] != NULL) { + *params[param_compression] = compressor.get_comp_level(); + } + } + // whatever has to be returned x) + return outputs_mask; +} +bool compressor_audio_module::get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const +{ + if (!is_active) + return false; + return compressor.get_graph(subindex, data, points, context); +} + +bool compressor_audio_module::get_dot(int index, int subindex, float &x, float &y, int &size, cairo_iface *context) const +{ + if (!is_active) + return false; + return compressor.get_dot(subindex, x, y, size, context); +} + +bool compressor_audio_module::get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const +{ + if (!is_active) + return false; + return compressor.get_gridline(subindex, pos, vertical, legend, context); +} + +int compressor_audio_module::get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline) const +{ + if (!is_active) + return false; + return compressor.get_changed_offsets(generation, subindex_graph, subindex_dot, subindex_gridline); +} + +/// Sidecain Compressor by Markus Schmidt +/// +/// This module splits the signal in a sidechain- and a process signal. +/// The sidechain is processed through Krzystofs filters and compresses +/// the process signal via Thor's compression routine afterwards. +/////////////////////////////////////////////////////////////////////////////////////////////// + +sidechaincompressor_audio_module::sidechaincompressor_audio_module() +{ + is_active = false; + srate = 0; + last_generation = 0; + f1_freq_old1 = 0.f; + f2_freq_old1 = 0.f; + f1_level_old1 = 0.f; + f2_level_old1 = 0.f; + f1_freq_old = 0.f; + f2_freq_old = 0.f; + f1_level_old = 0.f; + f2_level_old = 0.f; + sc_mode_old1 = WIDEBAND; + meters.reset(); +} + +void sidechaincompressor_audio_module::activate() +{ + is_active = true; + // set all filters and strips + compressor.activate(); + params_changed(); + meters.reset(); +} +void sidechaincompressor_audio_module::deactivate() +{ + is_active = false; + compressor.deactivate(); +} + +sidechaincompressor_audio_module::cfloat sidechaincompressor_audio_module::h_z(const cfloat &z) const +{ + switch ((CalfScModes)sc_mode) { + default: + case WIDEBAND: + return false; + break; + case DEESSER_WIDE: + case DERUMBLER_WIDE: + case WEIGHTED_1: + case WEIGHTED_2: + case WEIGHTED_3: + case BANDPASS_2: + return f1L.h_z(z) * f2L.h_z(z); + break; + case DEESSER_SPLIT: + return f2L.h_z(z); + break; + case DERUMBLER_SPLIT: + case BANDPASS_1: + return f1L.h_z(z); + break; + } +} + +float sidechaincompressor_audio_module::freq_gain(int index, double freq, uint32_t sr) const +{ + typedef std::complex cfloat; + freq *= 2.0 * M_PI / sr; + cfloat z = 1.0 / exp(cfloat(0.0, freq)); + + return std::abs(h_z(z)); +} + +void sidechaincompressor_audio_module::params_changed() +{ + // set the params of all filters + if(*params[param_f1_freq] != f1_freq_old or *params[param_f1_level] != f1_level_old + or *params[param_f2_freq] != f2_freq_old or *params[param_f2_level] != f2_level_old + or *params[param_sc_mode] != sc_mode) { + float q = 0.707; + switch ((CalfScModes)*params[param_sc_mode]) { + default: + case WIDEBAND: + f1L.set_hp_rbj((float)*params[param_f1_freq], q, (float)srate, *params[param_f1_level]); + f1R.copy_coeffs(f1L); + f2L.set_lp_rbj((float)*params[param_f2_freq], q, (float)srate, *params[param_f2_level]); + f2R.copy_coeffs(f2L); + f1_active = 0.f; + f2_active = 0.f; + break; + case DEESSER_WIDE: + f1L.set_peakeq_rbj((float)*params[param_f1_freq], q, *params[param_f1_level], (float)srate); + f1R.copy_coeffs(f1L); + f2L.set_hp_rbj((float)*params[param_f2_freq], q, (float)srate, *params[param_f2_level]); + f2R.copy_coeffs(f2L); + f1_active = 0.5f; + f2_active = 1.f; + break; + case DEESSER_SPLIT: + f1L.set_lp_rbj((float)*params[param_f2_freq] * (1 + 0.17), q, (float)srate); + f1R.copy_coeffs(f1L); + f2L.set_hp_rbj((float)*params[param_f2_freq] * (1 - 0.17), q, (float)srate, *params[param_f2_level]); + f2R.copy_coeffs(f2L); + f1_active = 0.f; + f2_active = 1.f; + break; + case DERUMBLER_WIDE: + f1L.set_lp_rbj((float)*params[param_f1_freq], q, (float)srate, *params[param_f1_level]); + f1R.copy_coeffs(f1L); + f2L.set_peakeq_rbj((float)*params[param_f2_freq], q, *params[param_f2_level], (float)srate); + f2R.copy_coeffs(f2L); + f1_active = 1.f; + f2_active = 0.5f; + break; + case DERUMBLER_SPLIT: + f1L.set_lp_rbj((float)*params[param_f1_freq] * (1 + 0.17), q, (float)srate, *params[param_f1_level]); + f1R.copy_coeffs(f1L); + f2L.set_hp_rbj((float)*params[param_f1_freq] * (1 - 0.17), q, (float)srate); + f2R.copy_coeffs(f2L); + f1_active = 1.f; + f2_active = 0.f; + break; + case WEIGHTED_1: + f1L.set_lowshelf_rbj((float)*params[param_f1_freq], q, *params[param_f1_level], (float)srate); + f1R.copy_coeffs(f1L); + f2L.set_highshelf_rbj((float)*params[param_f2_freq], q, *params[param_f2_level], (float)srate); + f2R.copy_coeffs(f2L); + f1_active = 0.5f; + f2_active = 0.5f; + break; + case WEIGHTED_2: + f1L.set_lowshelf_rbj((float)*params[param_f1_freq], q, *params[param_f1_level], (float)srate); + f1R.copy_coeffs(f1L); + f2L.set_peakeq_rbj((float)*params[param_f2_freq], q, *params[param_f2_level], (float)srate); + f2R.copy_coeffs(f2L); + f1_active = 0.5f; + f2_active = 0.5f; + break; + case WEIGHTED_3: + f1L.set_peakeq_rbj((float)*params[param_f1_freq], q, *params[param_f1_level], (float)srate); + f1R.copy_coeffs(f1L); + f2L.set_highshelf_rbj((float)*params[param_f2_freq], q, *params[param_f2_level], (float)srate); + f2R.copy_coeffs(f2L); + f1_active = 0.5f; + f2_active = 0.5f; + break; + case BANDPASS_1: + f1L.set_bp_rbj((float)*params[param_f1_freq], q, (float)srate, *params[param_f1_level]); + f1R.copy_coeffs(f1L); + f2L.set_hp_rbj((float)*params[param_f2_freq], q, *params[param_f2_level], (float)srate); + f2R.copy_coeffs(f2L); + f1_active = 1.f; + f2_active = 0.f; + break; + case BANDPASS_2: + f1L.set_hp_rbj((float)*params[param_f1_freq], q, (float)srate, *params[param_f1_level]); + f1R.copy_coeffs(f1L); + f2L.set_lp_rbj((float)*params[param_f2_freq], q, (float)srate, *params[param_f2_level]); + f2R.copy_coeffs(f2L); + f1_active = 1.f; + f2_active = 1.f; + break; + } + f1_freq_old = *params[param_f1_freq]; + f1_level_old = *params[param_f1_level]; + f2_freq_old = *params[param_f2_freq]; + f2_level_old = *params[param_f2_level]; + sc_mode = (CalfScModes)*params[param_sc_mode]; + } + // light LED's + if(params[param_f1_active] != NULL) { + *params[param_f1_active] = f1_active; + } + if(params[param_f2_active] != NULL) { + *params[param_f2_active] = f2_active; + } + // and set the compressor module + compressor.set_params(*params[param_attack], *params[param_release], *params[param_threshold], *params[param_ratio], *params[param_knee], *params[param_makeup], *params[param_detection], *params[param_stereo_link], *params[param_bypass], 0.f); +} + +void sidechaincompressor_audio_module::set_sample_rate(uint32_t sr) +{ + srate = sr; + compressor.set_sample_rate(srate); + meters.set_sample_rate(srate); +} + +uint32_t sidechaincompressor_audio_module::process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask) +{ + uint32_t orig_offset = offset; + uint32_t orig_numsamples = numsamples; + bool bypass = *params[param_bypass] > 0.5f; + numsamples += offset; + if(bypass) { + // everything bypassed + while(offset < numsamples) { + switch ((CalfScRoute)*params[param_sc_route]) { + case STEREO: + outs[0][offset] = ins[0][offset]; + outs[1][offset] = ins[1][offset]; + break; + case RIGHT_LEFT: + outs[0][offset] = ins[0][offset]; + outs[1][offset] = ins[0][offset]; + break; + case LEFT_RIGHT: + outs[0][offset] = ins[1][offset]; + outs[1][offset] = ins[1][offset]; + break; + } + ++offset; + } + // displays, too + meters.bypassed(params, orig_numsamples); + } else { + // process + + compressor.update_curve(); + + while(offset < numsamples) { + // cycle through samples + float outL = 0.f; + float outR = 0.f; + float inL = ins[0][offset]; + float inR = ins[1][offset]; + // in level + inR *= *params[param_level_in]; + inL *= *params[param_level_in]; + + float leftAC = inL; + float rightAC = inR; + float leftSC = inL; + float rightSC = inR; + float leftMC = inL; + float rightMC = inR; + + switch ((CalfScRoute)*params[param_sc_route]) { + case STEREO: + leftAC = inL; + rightAC = inR; + leftSC = inL; + rightSC = inR; + leftMC = inL; + rightMC = inR; + break; + case RIGHT_LEFT: + leftAC = inL; + rightAC = inL; + leftSC = inR; + rightSC = inR; + leftMC = inL; + rightMC = inL; + break; + case LEFT_RIGHT: + leftAC = inR; + rightAC = inR; + leftSC = inL; + rightSC = inL; + leftMC = inR; + rightMC = inR; + break; + } + + leftSC *= *params[param_sc_level]; + rightSC *= *params[param_sc_level]; + + switch ((CalfScModes)*params[param_sc_mode]) { + default: + case WIDEBAND: + compressor.process(leftAC, rightAC, &leftSC, &rightSC); + leftMC = leftSC; + rightMC = rightSC; + break; + case DEESSER_WIDE: + case DERUMBLER_WIDE: + case WEIGHTED_1: + case WEIGHTED_2: + case WEIGHTED_3: + case BANDPASS_2: + leftSC = f2L.process(f1L.process(leftSC)); + rightSC = f2R.process(f1R.process(rightSC)); + leftMC = leftSC; + rightMC = rightSC; + compressor.process(leftAC, rightAC, &leftSC, &rightSC); + break; + case DEESSER_SPLIT: + leftSC = f2L.process(leftSC); + rightSC = f2R.process(rightSC); + leftMC = leftSC; + rightMC = rightSC; + compressor.process(leftSC, rightSC, &leftSC, &rightSC); + leftAC = f1L.process(leftAC); + rightAC = f1R.process(rightAC); + leftAC += leftSC; + rightAC += rightSC; + break; + case DERUMBLER_SPLIT: + leftSC = f1L.process(leftSC); + rightSC = f1R.process(rightSC); + leftMC = leftSC; + rightMC = rightSC; + compressor.process(leftSC, rightSC, &leftSC, &rightSC); + leftAC = f2L.process(leftAC); + rightAC = f2R.process(rightAC); + leftAC += leftSC; + rightAC += rightSC; + break; + case BANDPASS_1: + leftSC = f1L.process(leftSC); + rightSC = f1R.process(rightSC); + leftMC = leftSC; + rightMC = rightSC; + compressor.process(leftAC, rightAC, &leftSC, &rightSC); + break; + } + + if(*params[param_sc_listen] > 0.f) { + outL = leftMC; + outR = rightMC; + } else { + outL = leftAC; + outR = rightAC; + } + + // send to output + outs[0][offset] = outL; + outs[1][offset] = outR; + + // next sample + ++offset; + } // cycle trough samples + meters.process(params, ins, outs, orig_offset, orig_numsamples); + f1L.sanitize(); + f1R.sanitize(); + f2L.sanitize(); + f2R.sanitize(); + } + // draw strip meter + if(bypass > 0.5f) { + if(params[param_compression] != NULL) { + *params[param_compression] = 1.0f; + } + } else { + if(params[param_compression] != NULL) { + *params[param_compression] = compressor.get_comp_level(); + } + } + // whatever has to be returned x) + return outputs_mask; +} +bool sidechaincompressor_audio_module::get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const +{ + if (!is_active) + return false; + if (index == param_f1_freq && !subindex) { + context->set_line_width(1.5); + return ::get_graph(*this, subindex, data, points); + } else if(index == param_compression) { + return compressor.get_graph(subindex, data, points, context); + } + return false; +} + +bool sidechaincompressor_audio_module::get_dot(int index, int subindex, float &x, float &y, int &size, cairo_iface *context) const +{ + if (!is_active) + return false; + if (index == param_compression) { + return compressor.get_dot(subindex, x, y, size, context); + } + return false; +} + +bool sidechaincompressor_audio_module::get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const +{ + if (!is_active) + return false; + if (index == param_compression) { + return compressor.get_gridline(subindex, pos, vertical, legend, context); + } else { + return get_freq_gridline(subindex, pos, vertical, legend, context); + } +// return false; +} + +int sidechaincompressor_audio_module::get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline) const +{ + if (!is_active) + return false; + if(index == param_compression) { + return compressor.get_changed_offsets(generation, subindex_graph, subindex_dot, subindex_gridline); + } else { + // (fabs(inertia_cutoff.get_last() - old_cutoff) + 100 * fabs(inertia_resonance.get_last() - old_resonance) + fabs(*params[par_mode] - old_mode) > 0.1f) + if (*params[param_f1_freq] != f1_freq_old1 + or *params[param_f2_freq] != f2_freq_old1 + or *params[param_f1_level] != f1_level_old1 + or *params[param_f2_level] != f2_level_old1 + or *params[param_sc_mode] !=sc_mode_old1) + { + f1_freq_old1 = *params[param_f1_freq]; + f2_freq_old1 = *params[param_f2_freq]; + f1_level_old1 = *params[param_f1_level]; + f2_level_old1 = *params[param_f2_level]; + sc_mode_old1 = (CalfScModes)*params[param_sc_mode]; + last_generation++; + subindex_graph = 0; + subindex_dot = INT_MAX; + subindex_gridline = INT_MAX; + } + else { + subindex_graph = 0; + subindex_dot = subindex_gridline = generation ? INT_MAX : 0; + } + if (generation == last_calculated_generation) + subindex_graph = INT_MAX; + return last_generation; + } + return false; +} + +/// Deesser by Markus Schmidt +/// +/// This module splits the signal in a sidechain- and a process signal. +/// The sidechain is processed through Krzystofs filters and compresses +/// the process signal via Thor's compression routine afterwards. +/////////////////////////////////////////////////////////////////////////////////////////////// + +deesser_audio_module::deesser_audio_module() +{ + is_active = false; + srate = 0; + last_generation = 0; + f1_freq_old1 = 0.f; + f2_freq_old1 = 0.f; + f1_level_old1 = 0.f; + f2_level_old1 = 0.f; + f2_q_old1 = 0.f; + f1_freq_old = 0.f; + f2_freq_old = 0.f; + f1_level_old = 0.f; + f2_level_old = 0.f; + f2_q_old = 0.f; + detected_led = 0; + clip_led = 0; +} + +void deesser_audio_module::activate() +{ + is_active = true; + // set all filters and strips + compressor.activate(); + params_changed(); + detected = 0.f; + detected_led = 0.f; + clip_out = 0.f; +} +void deesser_audio_module::deactivate() +{ + is_active = false; + compressor.deactivate(); +} + +void deesser_audio_module::params_changed() +{ + // set the params of all filters + if(*params[param_f1_freq] != f1_freq_old or *params[param_f1_level] != f1_level_old + or *params[param_f2_freq] != f2_freq_old or *params[param_f2_level] != f2_level_old + or *params[param_f2_q] != f2_q_old) { + float q = 0.707; + + hpL.set_hp_rbj((float)*params[param_f1_freq] * (1 - 0.17), q, (float)srate, *params[param_f1_level]); + hpR.copy_coeffs(hpL); + lpL.set_lp_rbj((float)*params[param_f1_freq] * (1 + 0.17), q, (float)srate); + lpR.copy_coeffs(lpL); + pL.set_peakeq_rbj((float)*params[param_f2_freq], *params[param_f2_q], *params[param_f2_level], (float)srate); + pR.copy_coeffs(pL); + f1_freq_old = *params[param_f1_freq]; + f1_level_old = *params[param_f1_level]; + f2_freq_old = *params[param_f2_freq]; + f2_level_old = *params[param_f2_level]; + f2_q_old = *params[param_f2_q]; + } + // and set the compressor module + compressor.set_params((float)*params[param_laxity], (float)*params[param_laxity] * 1.33, *params[param_threshold], *params[param_ratio], 2.8, *params[param_makeup], *params[param_detection], 0.f, *params[param_bypass], 0.f); +} + +void deesser_audio_module::set_sample_rate(uint32_t sr) +{ + srate = sr; + compressor.set_sample_rate(srate); +} + +uint32_t deesser_audio_module::process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask) +{ + bool bypass = *params[param_bypass] > 0.5f; + numsamples += offset; + if(bypass) { + // everything bypassed81e8da266 + while(offset < numsamples) { + outs[0][offset] = ins[0][offset]; + outs[1][offset] = ins[1][offset]; + ++offset; + } + // displays, too + clip_out = 0.f; + detected = 0.f; + detected_led = 0.f; + } else { + // process + + detected_led -= std::min(detected_led, numsamples); + clip_led -= std::min(clip_led, numsamples); + compressor.update_curve(); + + while(offset < numsamples) { + // cycle through samples + float outL = 0.f; + float outR = 0.f; + float inL = ins[0][offset]; + float inR = ins[1][offset]; + + + float leftAC = inL; + float rightAC = inR; + float leftSC = inL; + float rightSC = inR; + float leftRC = inL; + float rightRC = inR; + float leftMC = inL; + float rightMC = inR; + + leftSC = pL.process(hpL.process(leftSC)); + rightSC = pR.process(hpR.process(rightSC)); + leftMC = leftSC; + rightMC = rightSC; + + switch ((int)*params[param_mode]) { + default: + case WIDE: + compressor.process(leftAC, rightAC, &leftSC, &rightSC); + break; + case SPLIT: + hpL.sanitize(); + hpR.sanitize(); + leftRC = hpL.process(leftRC); + rightRC = hpR.process(rightRC); + compressor.process(leftRC, rightRC, &leftSC, &rightSC); + leftAC = lpL.process(leftAC); + rightAC = lpR.process(rightAC); + leftAC += leftRC; + rightAC += rightRC; + break; + } + + if(*params[param_sc_listen] > 0.f) { + outL = leftMC; + outR = rightMC; + } else { + outL = leftAC; + outR = rightAC; + } + + // send to output + outs[0][offset] = outL; + outs[1][offset] = outR; + + if(std::max(fabs(leftSC), fabs(rightSC)) > *params[param_threshold]) { + detected_led = srate >> 3; + } + if(std::max(fabs(leftAC), fabs(rightAC)) > 1.f) { + clip_led = srate >> 3; + } + if(clip_led > 0) { + clip_out = 1.f; + } else { + clip_out = std::max(fabs(outL), fabs(outR)); + } + detected = std::max(fabs(leftMC), fabs(rightMC)); + + // next sample + ++offset; + } // cycle trough samples + hpL.sanitize(); + hpR.sanitize(); + lpL.sanitize(); + lpR.sanitize(); + pL.sanitize(); + pR.sanitize(); + } + // draw meters + if(params[param_detected_led] != NULL) { + *params[param_detected_led] = detected_led; + } + if(params[param_clip_out] != NULL) { + *params[param_clip_out] = clip_out; + } + if(params[param_detected] != NULL) { + *params[param_detected] = detected; + } + // draw strip meter + if(bypass > 0.5f) { + if(params[param_compression] != NULL) { + *params[param_compression] = 1.0f; + } + } else { + if(params[param_compression] != NULL) { + *params[param_compression] = compressor.get_comp_level(); + } + } + // whatever has to be returned x) + return outputs_mask; +} +bool deesser_audio_module::get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const +{ + if (!is_active) + return false; + if (index == param_f1_freq && !subindex) { + context->set_line_width(1.5); + return ::get_graph(*this, subindex, data, points); + } + return false; +} + +bool deesser_audio_module::get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const +{ + return get_freq_gridline(subindex, pos, vertical, legend, context); + +// return false; +} + +int deesser_audio_module::get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline) const +{ + if (!is_active) { + return false; + } else { + // (fabs(inertia_cutoff.get_last() - old_cutoff) + 100 * fabs(inertia_resonance.get_last() - old_resonance) + fabs(*params[par_mode] - old_mode) > 0.1f) + if (*params[param_f1_freq] != f1_freq_old1 + or *params[param_f2_freq] != f2_freq_old1 + or *params[param_f1_level] != f1_level_old1 + or *params[param_f2_level] != f2_level_old1 + or *params[param_f2_q] !=f2_q_old1) + { + f1_freq_old1 = *params[param_f1_freq]; + f2_freq_old1 = *params[param_f2_freq]; + f1_level_old1 = *params[param_f1_level]; + f2_level_old1 = *params[param_f2_level]; + f2_q_old1 = *params[param_f2_q]; + last_generation++; + subindex_graph = 0; + subindex_dot = INT_MAX; + subindex_gridline = INT_MAX; + } + else { + subindex_graph = 0; + subindex_dot = subindex_gridline = generation ? INT_MAX : 0; + } + if (generation == last_calculated_generation) + subindex_graph = INT_MAX; + return last_generation; + } + return false; +} + +/// Gate originally by Damien +/// +/// This module provides Damien's original expander based on Thor's compressor +/// without any weighting +/////////////////////////////////////////////////////////////////////////////////////////////// + +gate_audio_module::gate_audio_module() +{ + is_active = false; + srate = 0; + last_generation = 0; + meters.reset(); +} + +void gate_audio_module::activate() +{ + is_active = true; + // set all filters and strips + gate.activate(); + params_changed(); + meters.reset(); +} +void gate_audio_module::deactivate() +{ + is_active = false; + gate.deactivate(); +} + +void gate_audio_module::params_changed() +{ + gate.set_params(*params[param_attack], *params[param_release], *params[param_threshold], *params[param_ratio], *params[param_knee], *params[param_makeup], *params[param_detection], *params[param_stereo_link], *params[param_bypass], 0.f, *params[param_range]); +} + +void gate_audio_module::set_sample_rate(uint32_t sr) +{ + srate = sr; + gate.set_sample_rate(srate); + meters.set_sample_rate(srate); +} + +uint32_t gate_audio_module::process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask) +{ + uint32_t orig_offset = offset; + uint32_t orig_numsamples = numsamples; + bool bypass = *params[param_bypass] > 0.5f; + numsamples += offset; + if(bypass) { + // everything bypassed + while(offset < numsamples) { + outs[0][offset] = ins[0][offset]; + outs[1][offset] = ins[1][offset]; + ++offset; + } + // displays, too + meters.bypassed(params, orig_numsamples); + } else { + // process + gate.update_curve(); + + while(offset < numsamples) { + // cycle through samples + float outL = 0.f; + float outR = 0.f; + float inL = ins[0][offset]; + float inR = ins[1][offset]; + // in level + inR *= *params[param_level_in]; + inL *= *params[param_level_in]; + + float leftAC = inL; + float rightAC = inR; + + gate.process(leftAC, rightAC); + + outL = leftAC; + outR = rightAC; + + // send to output + outs[0][offset] = outL; + outs[1][offset] = outR; + + // next sample + ++offset; + } // cycle trough samples + meters.process(params, ins, outs, orig_offset, orig_numsamples); + } + // draw strip meter + if(bypass > 0.5f) { + if(params[param_gating] != NULL) { + *params[param_gating] = 1.0f; + } + } else { + if(params[param_gating] != NULL) { + *params[param_gating] = gate.get_expander_level(); + } + } + // whatever has to be returned x) + return outputs_mask; +} +bool gate_audio_module::get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const +{ + if (!is_active) + return false; + return gate.get_graph(subindex, data, points, context); +} + +bool gate_audio_module::get_dot(int index, int subindex, float &x, float &y, int &size, cairo_iface *context) const +{ + if (!is_active) + return false; + return gate.get_dot(subindex, x, y, size, context); +} + +bool gate_audio_module::get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const +{ + if (!is_active) + return false; + return gate.get_gridline(subindex, pos, vertical, legend, context); +} + +int gate_audio_module::get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline) const +{ + if (!is_active) + return false; + return gate.get_changed_offsets(generation, subindex_graph, subindex_dot, subindex_gridline); +} + +/// Sidecain Gate by Markus Schmidt +/// +/// This module splits the signal in a sidechain- and a process signal. +/// The sidechain is processed through Krzystofs filters and gates +/// the process signal via Damiens's gating routine afterwards. +/////////////////////////////////////////////////////////////////////////////////////////////// + +sidechaingate_audio_module::sidechaingate_audio_module() +{ + is_active = false; + srate = 0; + last_generation = 0; + + f1_freq_old = f2_freq_old = f1_level_old = f2_level_old = 0; + f1_freq_old1 = f2_freq_old1 = f1_level_old1 = f2_level_old1 = 0; + sc_mode_old = sc_mode_old1 = WIDEBAND; // doesn't matter as long as it's sane + meters.reset(); +} + +void sidechaingate_audio_module::activate() +{ + is_active = true; + // set all filters and strips + gate.activate(); + params_changed(); + meters.reset(); +} +void sidechaingate_audio_module::deactivate() +{ + is_active = false; + gate.deactivate(); +} + +sidechaingate_audio_module::cfloat sidechaingate_audio_module::h_z(const cfloat &z) const +{ + switch ((CalfScModes)sc_mode) { + default: + case WIDEBAND: + return false; + break; + case HIGHGATE_WIDE: + case LOWGATE_WIDE: + case WEIGHTED_1: + case WEIGHTED_2: + case WEIGHTED_3: + case BANDPASS_2: + return f1L.h_z(z) * f2L.h_z(z); + break; + case HIGHGATE_SPLIT: + return f2L.h_z(z); + break; + case LOWGATE_SPLIT: + case BANDPASS_1: + return f1L.h_z(z); + break; + } +} + +float sidechaingate_audio_module::freq_gain(int index, double freq, uint32_t sr) const +{ + typedef std::complex cfloat; + freq *= 2.0 * M_PI / sr; + cfloat z = 1.0 / exp(cfloat(0.0, freq)); + + return std::abs(h_z(z)); +} + +void sidechaingate_audio_module::params_changed() +{ + // set the params of all filters + if(*params[param_f1_freq] != f1_freq_old or *params[param_f1_level] != f1_level_old + or *params[param_f2_freq] != f2_freq_old or *params[param_f2_level] != f2_level_old + or *params[param_sc_mode] != sc_mode) { + float q = 0.707; + switch ((CalfScModes)*params[param_sc_mode]) { + default: + case WIDEBAND: + f1L.set_hp_rbj((float)*params[param_f1_freq], q, (float)srate, *params[param_f1_level]); + f1R.copy_coeffs(f1L); + f2L.set_lp_rbj((float)*params[param_f2_freq], q, (float)srate, *params[param_f2_level]); + f2R.copy_coeffs(f2L); + f1_active = 0.f; + f2_active = 0.f; + break; + case HIGHGATE_WIDE: + f1L.set_peakeq_rbj((float)*params[param_f1_freq], q, *params[param_f1_level], (float)srate); + f1R.copy_coeffs(f1L); + f2L.set_hp_rbj((float)*params[param_f2_freq], q, (float)srate, *params[param_f2_level]); + f2R.copy_coeffs(f2L); + f1_active = 0.5f; + f2_active = 1.f; + break; + case HIGHGATE_SPLIT: + f1L.set_lp_rbj((float)*params[param_f2_freq] * (1 + 0.17), q, (float)srate); + f1R.copy_coeffs(f1L); + f2L.set_hp_rbj((float)*params[param_f2_freq] * (1 - 0.17), q, (float)srate, *params[param_f2_level]); + f2R.copy_coeffs(f2L); + f1_active = 0.f; + f2_active = 1.f; + break; + case LOWGATE_WIDE: + f1L.set_lp_rbj((float)*params[param_f1_freq], q, (float)srate, *params[param_f1_level]); + f1R.copy_coeffs(f1L); + f2L.set_peakeq_rbj((float)*params[param_f2_freq], q, *params[param_f2_level], (float)srate); + f2R.copy_coeffs(f2L); + f1_active = 1.f; + f2_active = 0.5f; + break; + case LOWGATE_SPLIT: + f1L.set_lp_rbj((float)*params[param_f1_freq] * (1 + 0.17), q, (float)srate, *params[param_f1_level]); + f1R.copy_coeffs(f1L); + f2L.set_hp_rbj((float)*params[param_f1_freq] * (1 - 0.17), q, (float)srate); + f2R.copy_coeffs(f2L); + f1_active = 1.f; + f2_active = 0.f; + break; + case WEIGHTED_1: + f1L.set_lowshelf_rbj((float)*params[param_f1_freq], q, *params[param_f1_level], (float)srate); + f1R.copy_coeffs(f1L); + f2L.set_highshelf_rbj((float)*params[param_f2_freq], q, *params[param_f2_level], (float)srate); + f2R.copy_coeffs(f2L); + f1_active = 0.5f; + f2_active = 0.5f; + break; + case WEIGHTED_2: + f1L.set_lowshelf_rbj((float)*params[param_f1_freq], q, *params[param_f1_level], (float)srate); + f1R.copy_coeffs(f1L); + f2L.set_peakeq_rbj((float)*params[param_f2_freq], q, *params[param_f2_level], (float)srate); + f2R.copy_coeffs(f2L); + f1_active = 0.5f; + f2_active = 0.5f; + break; + case WEIGHTED_3: + f1L.set_peakeq_rbj((float)*params[param_f1_freq], q, *params[param_f1_level], (float)srate); + f1R.copy_coeffs(f1L); + f2L.set_highshelf_rbj((float)*params[param_f2_freq], q, *params[param_f2_level], (float)srate); + f2R.copy_coeffs(f2L); + f1_active = 0.5f; + f2_active = 0.5f; + break; + case BANDPASS_1: + f1L.set_bp_rbj((float)*params[param_f1_freq], q, (float)srate, *params[param_f1_level]); + f1R.copy_coeffs(f1L); + f2L.set_hp_rbj((float)*params[param_f2_freq], q, *params[param_f2_level], (float)srate); + f2R.copy_coeffs(f2L); + f1_active = 1.f; + f2_active = 0.f; + break; + case BANDPASS_2: + f1L.set_hp_rbj((float)*params[param_f1_freq], q, (float)srate, *params[param_f1_level]); + f1R.copy_coeffs(f1L); + f2L.set_lp_rbj((float)*params[param_f2_freq], q, (float)srate, *params[param_f2_level]); + f2R.copy_coeffs(f2L); + f1_active = 1.f; + f2_active = 1.f; + break; + } + f1_freq_old = *params[param_f1_freq]; + f1_level_old = *params[param_f1_level]; + f2_freq_old = *params[param_f2_freq]; + f2_level_old = *params[param_f2_level]; + sc_mode = (CalfScModes)*params[param_sc_mode]; + } + // light LED's + if(params[param_f1_active] != NULL) { + *params[param_f1_active] = f1_active; + } + if(params[param_f2_active] != NULL) { + *params[param_f2_active] = f2_active; + } + // and set the expander module + gate.set_params(*params[param_attack], *params[param_release], *params[param_threshold], *params[param_ratio], *params[param_knee], *params[param_makeup], *params[param_detection], *params[param_stereo_link], *params[param_bypass], 0.f, *params[param_range]); +} + +void sidechaingate_audio_module::set_sample_rate(uint32_t sr) +{ + srate = sr; + gate.set_sample_rate(srate); + meters.set_sample_rate(srate); +} + +uint32_t sidechaingate_audio_module::process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask) +{ + uint32_t orig_offset = offset; + uint32_t orig_numsamples = numsamples; + bool bypass = *params[param_bypass] > 0.5f; + numsamples += offset; + if(bypass) { + // everything bypassed + while(offset < numsamples) { + switch ((CalfScRoute)*params[param_sc_route]) { + case STEREO: + outs[0][offset] = ins[0][offset]; + outs[1][offset] = ins[1][offset]; + break; + case RIGHT_LEFT: + outs[0][offset] = ins[0][offset]; + outs[1][offset] = ins[0][offset]; + break; + case LEFT_RIGHT: + outs[0][offset] = ins[1][offset]; + outs[1][offset] = ins[1][offset]; + break; + } + outs[0][offset] = ins[0][offset]; + outs[1][offset] = ins[1][offset]; + ++offset; + } + // displays, too + meters.bypassed(params, orig_offset); + } else { + // process + + gate.update_curve(); + + while(offset < numsamples) { + // cycle through samples + float outL = 0.f; + float outR = 0.f; + float inL = ins[0][offset]; + float inR = ins[1][offset]; + // in level + inR *= *params[param_level_in]; + inL *= *params[param_level_in]; + + float leftAC = inL; + float rightAC = inR; + float leftSC = inL; + float rightSC = inR; + float leftMC = inL; + float rightMC = inR; + + switch ((CalfScRoute)*params[param_sc_route]) { + case STEREO: + leftAC = inL; + rightAC = inR; + leftSC = inL; + rightSC = inR; + leftMC = inL; + rightMC = inR; + break; + case RIGHT_LEFT: + leftAC = inL; + rightAC = inL; + leftSC = inR; + rightSC = inR; + leftMC = inL; + rightMC = inL; + break; + case LEFT_RIGHT: + leftAC = inR; + rightAC = inR; + leftSC = inL; + rightSC = inL; + leftMC = inR; + rightMC = inR; + break; + } + + leftSC *= *params[param_sc_level]; + rightSC *= *params[param_sc_level]; + + switch ((CalfScModes)*params[param_sc_mode]) { + default: + case WIDEBAND: + gate.process(leftAC, rightAC, &leftSC, &rightSC); + leftMC = leftSC; + rightMC = rightSC; + break; + case HIGHGATE_WIDE: + case LOWGATE_WIDE: + case WEIGHTED_1: + case WEIGHTED_2: + case WEIGHTED_3: + case BANDPASS_2: + leftSC = f2L.process(f1L.process(leftSC)); + rightSC = f2R.process(f1R.process(rightSC)); + leftMC = leftSC; + rightMC = rightSC; + gate.process(leftAC, rightAC, &leftSC, &rightSC); + break; + case HIGHGATE_SPLIT: + leftSC = f2L.process(leftSC); + rightSC = f2R.process(rightSC); + leftMC = leftSC; + rightMC = rightSC; + gate.process(leftSC, rightSC, &leftSC, &rightSC); + leftAC = f1L.process(leftAC); + rightAC = f1R.process(rightAC); + leftAC += leftSC; + rightAC += rightSC; + break; + case LOWGATE_SPLIT: + leftSC = f1L.process(leftSC); + rightSC = f1R.process(rightSC); + leftMC = leftSC; + rightMC = rightSC; + gate.process(leftSC, rightSC, &leftSC, &rightSC); + leftAC = f2L.process(leftAC); + rightAC = f2R.process(rightAC); + leftAC += leftSC; + rightAC += rightSC; + break; + case BANDPASS_1: + leftSC = f1L.process(leftSC); + rightSC = f1R.process(rightSC); + leftMC = leftSC; + rightMC = rightSC; + gate.process(leftAC, rightAC, &leftSC, &rightSC); + break; + } + + if(*params[param_sc_listen] > 0.f) { + outL = leftMC; + outR = rightMC; + } else { + outL = leftAC; + outR = rightAC; + } + + // send to output + outs[0][offset] = outL; + outs[1][offset] = outR; + + // next sample + ++offset; + } // cycle trough samples + meters.process(params, ins, outs, orig_offset, orig_numsamples); + f1L.sanitize(); + f1R.sanitize(); + f2L.sanitize(); + f2R.sanitize(); + + } + // draw strip meter + if(bypass > 0.5f) { + if(params[param_gating] != NULL) { + *params[param_gating] = 1.0f; + } + } else { + if(params[param_gating] != NULL) { + *params[param_gating] = gate.get_expander_level(); + } + } + // whatever has to be returned x) + return outputs_mask; +} +bool sidechaingate_audio_module::get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const +{ + if (!is_active) + return false; + if (index == param_f1_freq && !subindex) { + context->set_line_width(1.5); + return ::get_graph(*this, subindex, data, points); + } else if(index == param_gating) { + return gate.get_graph(subindex, data, points, context); + } + return false; +} + +bool sidechaingate_audio_module::get_dot(int index, int subindex, float &x, float &y, int &size, cairo_iface *context) const +{ + if (!is_active) + return false; + if (index == param_gating) { + return gate.get_dot(subindex, x, y, size, context); + } + return false; +} + +bool sidechaingate_audio_module::get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const +{ + if (!is_active) + return false; + if (index == param_gating) { + return gate.get_gridline(subindex, pos, vertical, legend, context); + } else { + return get_freq_gridline(subindex, pos, vertical, legend, context); + } +// return false; +} + +int sidechaingate_audio_module::get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline) const +{ + if (!is_active) + return false; + if(index == param_gating) { + return gate.get_changed_offsets(generation, subindex_graph, subindex_dot, subindex_gridline); + } else { + // (fabs(inertia_cutoff.get_last() - old_cutoff) + 100 * fabs(inertia_resonance.get_last() - old_resonance) + fabs(*params[par_mode] - old_mode) > 0.1f) + if (*params[param_f1_freq] != f1_freq_old1 + or *params[param_f2_freq] != f2_freq_old1 + or *params[param_f1_level] != f1_level_old1 + or *params[param_f2_level] != f2_level_old1 + or *params[param_sc_mode] !=sc_mode_old1) + { + f1_freq_old1 = *params[param_f1_freq]; + f2_freq_old1 = *params[param_f2_freq]; + f1_level_old1 = *params[param_f1_level]; + f2_level_old1 = *params[param_f2_level]; + sc_mode_old1 = (CalfScModes)*params[param_sc_mode]; + last_generation++; + subindex_graph = 0; + subindex_dot = INT_MAX; + subindex_gridline = INT_MAX; + } + else { + subindex_graph = 0; + subindex_dot = subindex_gridline = generation ? INT_MAX : 0; + } + if (generation == last_calculated_generation) + subindex_graph = INT_MAX; + return last_generation; + } + return false; +} + + +/// Multiband Compressor by Markus Schmidt +/// +/// This module splits the signal in four different bands +/// and sends them through multiple filters (implemented by +/// Krzysztof). They are processed by a compressing routine +/// (implemented by Thor) afterwards and summed up to the +/// final output again. +/////////////////////////////////////////////////////////////////////////////////////////////// + +multibandgate_audio_module::multibandgate_audio_module() +{ + is_active = false; + srate = 0; + // zero all displays + clip_inL = 0.f; + clip_inR = 0.f; + clip_outL = 0.f; + clip_outR = 0.f; + meter_inL = 0.f; + meter_inR = 0.f; + meter_outL = 0.f; + meter_outR = 0.f; + for(int i = 0; i < strips - 1; i ++) { + freq_old[i] = -1; + sep_old[i] = -1; + q_old[i] = -1; + } + mode_old = -1; +} + +void multibandgate_audio_module::activate() +{ + is_active = true; + // set all filters and strips + params_changed(); + // activate all strips + for (int j = 0; j < strips; j ++) { + gate[j].activate(); + gate[j].id = j; + } +} + +void multibandgate_audio_module::deactivate() +{ + is_active = false; + // deactivate all strips + for (int j = 0; j < strips; j ++) { + gate[j].deactivate(); + } +} + +void multibandgate_audio_module::params_changed() +{ + // determine mute/solo states + solo[0] = *params[param_solo0] > 0.f ? true : false; + solo[1] = *params[param_solo1] > 0.f ? true : false; + solo[2] = *params[param_solo2] > 0.f ? true : false; + solo[3] = *params[param_solo3] > 0.f ? true : false; + no_solo = (*params[param_solo0] > 0.f || + *params[param_solo1] > 0.f || + *params[param_solo2] > 0.f || + *params[param_solo3] > 0.f) ? false : true; + int i; + int j1; + switch(mode) { + case 0: + default: + j1 = 0; + break; + case 1: + j1 = 2; + break; + } + // set the params of all filters + if(*params[param_freq0] != freq_old[0] or *params[param_sep0] != sep_old[0] or *params[param_q0] != q_old[0] or *params[param_mode] != mode_old) { + lpL[0][0].set_lp_rbj((float)(*params[param_freq0] * (1 - *params[param_sep0])), *params[param_q0], (float)srate); + hpL[0][0].set_hp_rbj((float)(*params[param_freq0] * (1 + *params[param_sep0])), *params[param_q0], (float)srate); + lpR[0][0].copy_coeffs(lpL[0][0]); + hpR[0][0].copy_coeffs(hpL[0][0]); + for(i = 1; i <= j1; i++) { + lpL[0][i].copy_coeffs(lpL[0][0]); + hpL[0][i].copy_coeffs(hpL[0][0]); + lpR[0][i].copy_coeffs(lpL[0][0]); + hpR[0][i].copy_coeffs(hpL[0][0]); + } + freq_old[0] = *params[param_freq0]; + sep_old[0] = *params[param_sep0]; + q_old[0] = *params[param_q0]; + } + if(*params[param_freq1] != freq_old[1] or *params[param_sep1] != sep_old[1] or *params[param_q1] != q_old[1] or *params[param_mode] != mode_old) { + lpL[1][0].set_lp_rbj((float)(*params[param_freq1] * (1 - *params[param_sep1])), *params[param_q1], (float)srate); + hpL[1][0].set_hp_rbj((float)(*params[param_freq1] * (1 + *params[param_sep1])), *params[param_q1], (float)srate); + lpR[1][0].copy_coeffs(lpL[1][0]); + hpR[1][0].copy_coeffs(hpL[1][0]); + for(i = 1; i <= j1; i++) { + lpL[1][i].copy_coeffs(lpL[1][0]); + hpL[1][i].copy_coeffs(hpL[1][0]); + lpR[1][i].copy_coeffs(lpL[1][0]); + hpR[1][i].copy_coeffs(hpL[1][0]); + } + freq_old[1] = *params[param_freq1]; + sep_old[1] = *params[param_sep1]; + q_old[1] = *params[param_q1]; + } + if(*params[param_freq2] != freq_old[2] or *params[param_sep2] != sep_old[2] or *params[param_q2] != q_old[2] or *params[param_mode] != mode_old) { + lpL[2][0].set_lp_rbj((float)(*params[param_freq2] * (1 - *params[param_sep2])), *params[param_q2], (float)srate); + hpL[2][0].set_hp_rbj((float)(*params[param_freq2] * (1 + *params[param_sep2])), *params[param_q2], (float)srate); + lpR[2][0].copy_coeffs(lpL[2][0]); + hpR[2][0].copy_coeffs(hpL[2][0]); + for(i = 1; i <= j1; i++) { + lpL[2][i].copy_coeffs(lpL[2][0]); + hpL[2][i].copy_coeffs(hpL[2][0]); + lpR[2][i].copy_coeffs(lpL[2][0]); + hpR[2][i].copy_coeffs(hpL[2][0]); + } + freq_old[2] = *params[param_freq2]; + sep_old[2] = *params[param_sep2]; + q_old[2] = *params[param_q2]; + } + // set the params of all strips + gate[0].set_params(*params[param_attack0], *params[param_release0], *params[param_threshold0], *params[param_ratio0], *params[param_knee0], *params[param_makeup0], *params[param_detection0], 1.f, *params[param_bypass0], !(solo[0] || no_solo), *params[param_range0]); + gate[1].set_params(*params[param_attack1], *params[param_release1], *params[param_threshold1], *params[param_ratio1], *params[param_knee1], *params[param_makeup1], *params[param_detection1], 1.f, *params[param_bypass1], !(solo[1] || no_solo), *params[param_range1]); + gate[2].set_params(*params[param_attack2], *params[param_release2], *params[param_threshold2], *params[param_ratio2], *params[param_knee2], *params[param_makeup2], *params[param_detection2], 1.f, *params[param_bypass2], !(solo[2] || no_solo), *params[param_range2]); + gate[3].set_params(*params[param_attack3], *params[param_release3], *params[param_threshold3], *params[param_ratio3], *params[param_knee3], *params[param_makeup3], *params[param_detection3], 1.f, *params[param_bypass3], !(solo[3] || no_solo), *params[param_range3]); +} + +void multibandgate_audio_module::set_sample_rate(uint32_t sr) +{ + srate = sr; + // set srate of all strips + for (int j = 0; j < strips; j ++) { + gate[j].set_sample_rate(srate); + } +} + +#define BYPASSED_GATING(index) \ + if(params[param_gating##index] != NULL) \ + *params[param_gating##index] = 1.0; \ + if(params[param_output##index] != NULL) \ + *params[param_output##index] = 0.0; + +#define ACTIVE_GATING(index) \ + if(params[param_gating##index] != NULL) \ + *params[param_gating##index] = gate[index].get_expander_level(); \ + if(params[param_output##index] != NULL) \ + *params[param_output##index] = gate[index].get_output_level(); + +uint32_t multibandgate_audio_module::process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask) +{ + bool bypass = *params[param_bypass] > 0.5f; + numsamples += offset; + for (int i = 0; i < strips; i++) + gate[i].update_curve(); + if(bypass) { + // everything bypassed + while(offset < numsamples) { + outs[0][offset] = ins[0][offset]; + outs[1][offset] = ins[1][offset]; + ++offset; + } + // displays, too + clip_inL = 0.f; + clip_inR = 0.f; + clip_outL = 0.f; + clip_outR = 0.f; + meter_inL = 0.f; + meter_inR = 0.f; + meter_outL = 0.f; + meter_outR = 0.f; + } else { + // process all strips + + // let meters fall a bit + clip_inL -= std::min(clip_inL, numsamples); + clip_inR -= std::min(clip_inR, numsamples); + clip_outL -= std::min(clip_outL, numsamples); + clip_outR -= std::min(clip_outR, numsamples); + meter_inL = 0.f; + meter_inR = 0.f; + meter_outL = 0.f; + meter_outR = 0.f; + while(offset < numsamples) { + // cycle through samples + float inL = ins[0][offset]; + float inR = ins[1][offset]; + // in level + inR *= *params[param_level_in]; + inL *= *params[param_level_in]; + // out vars + float outL = 0.f; + float outR = 0.f; + int j1; + for (int i = 0; i < strips; i ++) { + // cycle trough strips + if (solo[i] || no_solo) { + // strip unmuted + float left = inL; + float right = inR; + // send trough filters + switch(mode) { + case 0: + default: + j1 = 0; + break; + case 1: + j1 = 2; + break; + } + for (int j = 0; j <= j1; j++){ + if(i + 1 < strips) { + left = lpL[i][j].process(left); + right = lpR[i][j].process(right); + lpL[i][j].sanitize(); + lpR[i][j].sanitize(); + } + if(i - 1 >= 0) { + left = hpL[i - 1][j].process(left); + right = hpR[i - 1][j].process(right); + hpL[i - 1][j].sanitize(); + hpR[i - 1][j].sanitize(); + } + } + // process gain reduction + gate[i].process(left, right); + // sum up output + outL += left; + outR += right; + } else { + // strip muted + + } + + + } // process single strip + + // even out filters gain reduction + // 3dB - levelled manually (based on default sep and q settings) + switch(mode) { + case 0: + outL *= 1.414213562; + outR *= 1.414213562; + break; + case 1: + outL *= 0.88; + outR *= 0.88; + break; + } + + // out level + outL *= *params[param_level_out]; + outR *= *params[param_level_out]; + + // send to output + outs[0][offset] = outL; + outs[1][offset] = outR; + + // clip LED's + if(inL > 1.f) { + clip_inL = srate >> 3; + } + if(inR > 1.f) { + clip_inR = srate >> 3; + } + if(outL > 1.f) { + clip_outL = srate >> 3; + } + if(outR > 1.f) { + clip_outR = srate >> 3; + } + // set up in / out meters + if(inL > meter_inL) { + meter_inL = inL; + } + if(inR > meter_inR) { + meter_inR = inR; + } + if(outL > meter_outL) { + meter_outL = outL; + } + if(outR > meter_outR) { + meter_outR = outR; + } + // next sample + ++offset; + } // cycle trough samples + + } // process all strips (no bypass) + + // draw meters + SET_IF_CONNECTED(clip_inL); + SET_IF_CONNECTED(clip_inR); + SET_IF_CONNECTED(clip_outL); + SET_IF_CONNECTED(clip_outR); + SET_IF_CONNECTED(meter_inL); + SET_IF_CONNECTED(meter_inR); + SET_IF_CONNECTED(meter_outL); + SET_IF_CONNECTED(meter_outR); + // draw strip meters + if(bypass > 0.5f) { + BYPASSED_GATING(0) + BYPASSED_GATING(1) + BYPASSED_GATING(2) + BYPASSED_GATING(3) + } else { + ACTIVE_GATING(0) + ACTIVE_GATING(1) + ACTIVE_GATING(2) + ACTIVE_GATING(3) + } + // whatever has to be returned x) + return outputs_mask; +} + +const expander_audio_module *multibandgate_audio_module::get_strip_by_param_index(int index) const +{ + // let's handle by the corresponding strip + switch (index) { + case param_gating0: + return &gate[0]; + case param_gating1: + return &gate[1]; + case param_gating2: + return &gate[2]; + case param_gating3: + return &gate[3]; + } + return NULL; +} + +bool multibandgate_audio_module::get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const +{ + const expander_audio_module *m = get_strip_by_param_index(index); + if (m) + return m->get_graph(subindex, data, points, context); + return false; +} + +bool multibandgate_audio_module::get_dot(int index, int subindex, float &x, float &y, int &size, cairo_iface *context) const +{ + const expander_audio_module *m = get_strip_by_param_index(index); + if (m) + return m->get_dot(subindex, x, y, size, context); + return false; +} + +bool multibandgate_audio_module::get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const +{ + const expander_audio_module *m = get_strip_by_param_index(index); + if (m) + return m->get_gridline(subindex, pos, vertical, legend, context); + return false; +} + +int multibandgate_audio_module::get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline) const +{ + const expander_audio_module *m = get_strip_by_param_index(index); + if (m) + return m->get_changed_offsets(generation, subindex_graph, subindex_dot, subindex_gridline); + return 0; +} + + +/// Gain reduction module by Thor +/// All functions of this module are originally written +/// by Thor, while some features have been stripped (mainly stereo linking +/// and frequency correction as implemented in Sidechain Compressor above) +/// To save some CPU. +//////////////////////////////////////////////////////////////////////////////// +gain_reduction_audio_module::gain_reduction_audio_module() +{ + is_active = false; + srate = 0; + last_generation = 0; + old_threshold = 0.f; + old_ratio = 0.f; + old_knee = 0.f; + old_makeup = 0.f; + old_detection = 0.f; + old_bypass = 0.f; + old_mute = 0.f; + linSlope = 0.f; + attack = 0.f; + release = 0.f; + detection = -1; + stereo_link = -1; + threshold = -1; + ratio = -1; + knee = -1; + makeup = -1; + bypass = -1; + mute = -1; +} + +void gain_reduction_audio_module::activate() +{ + is_active = true; + linSlope = 0.f; + meter_out = 0.f; + meter_comp = 1.f; + float l, r; + l = r = 0.f; + float byp = bypass; + bypass = 0.0; + process(l, r, 0, 0); + bypass = byp; +} + +void gain_reduction_audio_module::deactivate() +{ + is_active = false; +} + +void gain_reduction_audio_module::update_curve() +{ + float linThreshold = threshold; + float linKneeSqrt = sqrt(knee); + linKneeStart = linThreshold / linKneeSqrt; + adjKneeStart = linKneeStart*linKneeStart; + float linKneeStop = linThreshold * linKneeSqrt; + thres = log(linThreshold); + kneeStart = log(linKneeStart); + kneeStop = log(linKneeStop); + compressedKneeStop = (kneeStop - thres) / ratio + thres; +} + +void gain_reduction_audio_module::process(float &left, float &right, const float *det_left, const float *det_right) +{ + if(!det_left) { + det_left = &left; + } + if(!det_right) { + det_right = &right; + } + if(bypass < 0.5f) { + // this routine is mainly copied from thor's compressor module + // greatest sounding compressor I've heard! + bool rms = (detection == 0); + bool average = (stereo_link == 0); + float attack_coeff = std::min(1.f, 1.f / (attack * srate / 4000.f)); + float release_coeff = std::min(1.f, 1.f / (release * srate / 4000.f)); + + float absample = average ? (fabs(*det_left) + fabs(*det_right)) * 0.5f : std::max(fabs(*det_left), fabs(*det_right)); + if(rms) absample *= absample; + + dsp::sanitize(linSlope); + + linSlope += (absample - linSlope) * (absample > linSlope ? attack_coeff : release_coeff); + float gain = 1.f; + if(linSlope > 0.f) { + gain = output_gain(linSlope, rms); + } + + left *= gain * makeup; + right *= gain * makeup; + meter_out = std::max(fabs(left), fabs(right));; + meter_comp = gain; + detected = rms ? sqrt(linSlope) : linSlope; + } +} + +float gain_reduction_audio_module::output_level(float slope) const { + return slope * output_gain(slope, false) * makeup; +} + +float gain_reduction_audio_module::output_gain(float linSlope, bool rms) const { + //this calculation is also thor's work + if(linSlope > (rms ? adjKneeStart : linKneeStart)) { + float slope = log(linSlope); + if(rms) slope *= 0.5f; + + float gain = 0.f; + float delta = 0.f; + if(IS_FAKE_INFINITY(ratio)) { + gain = thres; + delta = 0.f; + } else { + gain = (slope - thres) / ratio + thres; + delta = 1.f / ratio; + } + + if(knee > 1.f && slope < kneeStop) { + gain = hermite_interpolation(slope, kneeStart, kneeStop, kneeStart, compressedKneeStop, 1.f, delta); + } + + return exp(gain - slope); + } + + return 1.f; +} + +void gain_reduction_audio_module::set_sample_rate(uint32_t sr) +{ + srate = sr; +} +void gain_reduction_audio_module::set_params(float att, float rel, float thr, float rat, float kn, float mak, float det, float stl, float byp, float mu) +{ + // set all params + attack = att; + release = rel; + threshold = thr; + ratio = rat; + knee = kn; + makeup = mak; + detection = det; + stereo_link = stl; + bypass = byp; + mute = mu; + if(mute > 0.f) { + meter_out = 0.f; + meter_comp = 1.f; + } +} +float gain_reduction_audio_module::get_output_level() { + // returns output level (max(left, right)) + return meter_out; +} +float gain_reduction_audio_module::get_comp_level() { + // returns amount of compression + return meter_comp; +} + +bool gain_reduction_audio_module::get_graph(int subindex, float *data, int points, cairo_iface *context) const +{ + if (!is_active) + return false; + if (subindex > 1) // 1 + return false; + for (int i = 0; i < points; i++) + { + float input = dB_grid_inv(-1.0 + i * 2.0 / (points - 1)); + if (subindex == 0) + data[i] = dB_grid(input); + else { + float output = output_level(input); + data[i] = dB_grid(output); + } + } + if (subindex == (bypass > 0.5f ? 1 : 0) or mute > 0.1f) + context->set_source_rgba(0.35, 0.4, 0.2, 0.3); + else { + context->set_source_rgba(0.35, 0.4, 0.2, 1); + context->set_line_width(1.5); + } + return true; +} + +bool gain_reduction_audio_module::get_dot(int subindex, float &x, float &y, int &size, cairo_iface *context) const +{ + if (!is_active) + return false; + if (!subindex) + { + if(bypass > 0.5f or mute > 0.f) { + return false; + } else { + bool rms = (detection == 0); + float det = rms ? sqrt(detected) : detected; + x = 0.5 + 0.5 * dB_grid(det); + y = dB_grid(bypass > 0.5f or mute > 0.f ? det : output_level(det)); + return true; + } + } + return false; +} + +bool gain_reduction_audio_module::get_gridline(int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const +{ + bool tmp; + vertical = (subindex & 1) != 0; + bool result = get_freq_gridline(subindex >> 1, pos, tmp, legend, context, false); + if (result && vertical) { + if ((subindex & 4) && !legend.empty()) { + legend = ""; + } + else { + size_t pos = legend.find(" dB"); + if (pos != std::string::npos) + legend.erase(pos); + } + pos = 0.5 + 0.5 * pos; + } + return result; +} + +int gain_reduction_audio_module::get_changed_offsets(int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline) const +{ + subindex_graph = 0; + subindex_dot = 0; + subindex_gridline = generation ? INT_MAX : 0; + + if (fabs(threshold-old_threshold) + fabs(ratio - old_ratio) + fabs(knee - old_knee) + fabs(makeup - old_makeup) + fabs(detection - old_detection) + fabs(bypass - old_bypass) + fabs(mute - old_mute) > 0.000001f) + { + old_threshold = threshold; + old_ratio = ratio; + old_knee = knee; + old_makeup = makeup; + old_detection = detection; + old_bypass = bypass; + old_mute = mute; + last_generation++; + } + + if (generation == last_generation) + subindex_graph = 2; + return last_generation; +} + + +/// Gate module by Damien +/// All functions of this module are originally written +/// by Damien, while some features have been stripped (mainly stereo linking +/// and frequency correction as implemented in Sidechain Gate above) +/// To save some CPU. +//////////////////////////////////////////////////////////////////////////////// +expander_audio_module::expander_audio_module() +{ + is_active = false; + srate = 0; + last_generation = 0; + range = -1.f; + threshold = -1.f; + ratio = -1.f; + knee = -1.f; + makeup = -1.f; + detection = -1.f; + bypass = -1.f; + mute = -1.f; + stereo_link = -1.f; + old_range = 0.f; + old_threshold = 0.f; + old_ratio = 0.f; + old_knee = 0.f; + old_makeup = 0.f; + old_detection = 0.f; + old_bypass = 0.f; + old_mute = 0.f; + old_trigger = 0.f; + old_stereo_link = 0.f; + linSlope = -1; + linKneeStop = 0; +} + +void expander_audio_module::activate() +{ + is_active = true; + linSlope = 0.f; + meter_out = 0.f; + meter_gate = 1.f; + float l, r; + l = r = 0.f; + float byp = bypass; + bypass = 0.0; + process(l, r); + bypass = byp; +} + +void expander_audio_module::deactivate() +{ + is_active = false; +} + +void expander_audio_module::update_curve() +{ + bool rms = (detection == 0); + float linThreshold = threshold; + if (rms) + linThreshold = linThreshold * linThreshold; + attack_coeff = std::min(1.f, 1.f / (attack * srate / 4000.f)); + release_coeff = std::min(1.f, 1.f / (release * srate / 4000.f)); + float linKneeSqrt = sqrt(knee); + linKneeStart = linThreshold / linKneeSqrt; + adjKneeStart = linKneeStart*linKneeStart; + linKneeStop = linThreshold * linKneeSqrt; + thres = log(linThreshold); + kneeStart = log(linKneeStart); + kneeStop = log(linKneeStop); + compressedKneeStop = (kneeStop - thres) / ratio + thres; +} + +void expander_audio_module::process(float &left, float &right, const float *det_left, const float *det_right) +{ + if(!det_left) { + det_left = &left; + } + if(!det_right) { + det_right = &right; + } + if(bypass < 0.5f) { + // this routine is mainly copied from Damien's expander module based on Thor's compressor + bool rms = (detection == 0); + bool average = (stereo_link == 0); + float absample = average ? (fabs(*det_left) + fabs(*det_right)) * 0.5f : std::max(fabs(*det_left), fabs(*det_right)); + if(rms) absample *= absample; + + dsp::sanitize(linSlope); + + linSlope += (absample - linSlope) * (absample > linSlope ? attack_coeff : release_coeff); + float gain = 1.f; + if(linSlope > 0.f) { + gain = output_gain(linSlope, rms); + } + left *= gain * makeup; + right *= gain * makeup; + meter_out = std::max(fabs(left), fabs(right)); + meter_gate = gain; + detected = linSlope; + } +} + +float expander_audio_module::output_level(float slope) const { + bool rms = (detection == 0); + return slope * output_gain(rms ? slope*slope : slope, rms) * makeup; +} + +float expander_audio_module::output_gain(float linSlope, bool rms) const { + //this calculation is also Damiens's work based on Thor's compressor + if(linSlope < linKneeStop) { + float slope = log(linSlope); + //float tratio = rms ? sqrt(ratio) : ratio; + float tratio = ratio; + float gain = 0.f; + float delta = 0.f; + if(IS_FAKE_INFINITY(ratio)) + tratio = 1000.f; + gain = (slope-thres) * tratio + thres; + delta = tratio; + + if(knee > 1.f && slope > kneeStart ) { + gain = dsp::hermite_interpolation(slope, kneeStart, kneeStop, ((kneeStart - thres) * tratio + thres), kneeStop, delta,1.f); + } + return std::max(range, expf(gain-slope)); + } + return 1.f; +} + +void expander_audio_module::set_sample_rate(uint32_t sr) +{ + srate = sr; +} +void expander_audio_module::set_params(float att, float rel, float thr, float rat, float kn, float mak, float det, float stl, float byp, float mu, float ran) +{ + // set all params + attack = att; + release = rel; + threshold = thr; + ratio = rat; + knee = kn; + makeup = mak; + detection = det; + stereo_link = stl; + bypass = byp; + mute = mu; + range = ran; + if(mute > 0.f) { + meter_out = 0.f; + meter_gate = 1.f; + } +} +float expander_audio_module::get_output_level() { + // returns output level (max(left, right)) + return meter_out; +} +float expander_audio_module::get_expander_level() { + // returns amount of gating + return meter_gate; +} + +bool expander_audio_module::get_graph(int subindex, float *data, int points, cairo_iface *context) const +{ + if (!is_active) + return false; + if (subindex > 1) // 1 + return false; + for (int i = 0; i < points; i++) + { + float input = dB_grid_inv(-1.0 + i * 2.0 / (points - 1)); + if (subindex == 0) + data[i] = dB_grid(input); + else { + float output = output_level(input); + data[i] = dB_grid(output); + } + } + if (subindex == (bypass > 0.5f ? 1 : 0) or mute > 0.1f) + context->set_source_rgba(0.35, 0.4, 0.2, 0.3); + else { + context->set_source_rgba(0.35, 0.4, 0.2, 1); + context->set_line_width(1.5); + } + return true; +} + +bool expander_audio_module::get_dot(int subindex, float &x, float &y, int &size, cairo_iface *context) const +{ + if (!is_active) + return false; + if (!subindex) + { + if(bypass > 0.5f or mute > 0.f) { + return false; + } else { + bool rms = (detection == 0); + float det = rms ? sqrt(detected) : detected; + x = 0.5 + 0.5 * dB_grid(det); + y = dB_grid(bypass > 0.5f or mute > 0.f ? det : output_level(det)); + return true; + } + } + return false; +} + +bool expander_audio_module::get_gridline(int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const +{ + bool tmp; + vertical = (subindex & 1) != 0; + bool result = get_freq_gridline(subindex >> 1, pos, tmp, legend, context, false); + if (result && vertical) { + if ((subindex & 4) && !legend.empty()) { + legend = ""; + } + else { + size_t pos = legend.find(" dB"); + if (pos != std::string::npos) + legend.erase(pos); + } + pos = 0.5 + 0.5 * pos; + } + return result; +} + +int expander_audio_module::get_changed_offsets(int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline) const +{ + subindex_graph = 0; + subindex_dot = 0; + subindex_gridline = generation ? INT_MAX : 0; + + if (fabs(range-old_range) + fabs(threshold-old_threshold) + fabs(ratio - old_ratio) + fabs(knee - old_knee) + fabs(makeup - old_makeup) + fabs(detection - old_detection) + fabs(bypass - old_bypass) + fabs(mute - old_mute) > 0.000001f) + { + old_range = range; + old_threshold = threshold; + old_ratio = ratio; + old_knee = knee; + old_makeup = makeup; + old_detection = detection; + old_bypass = bypass; + old_mute = mute; + last_generation++; + } + if (generation == last_generation) + subindex_graph = 2; + return last_generation; +} diff --git a/plugins/LadspaEffect/calf/src/modules_dist.cpp b/plugins/LadspaEffect/calf/src/modules_dist.cpp new file mode 100644 index 000000000..ddc147db7 --- /dev/null +++ b/plugins/LadspaEffect/calf/src/modules_dist.cpp @@ -0,0 +1,644 @@ +/* Calf DSP plugin pack + * Distortion related plugins + * + * Copyright (C) 2001-2010 Krzysztof Foltman, Markus Schmidt, Thor Harald Johansen and others + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this program; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA + */ +#include +#include +#include +#include + +using namespace dsp; +using namespace calf_plugins; + +/// Saturator Band by Markus Schmidt +/// +/// This module is based on Krzysztof's filters and Tom Szilagyi's distortion routine. +/// It provides a blendable saturation stage followed by a highpass, a lowpass and a peak filter +/////////////////////////////////////////////////////////////////////////////////////////////// + +saturator_audio_module::saturator_audio_module() +{ + is_active = false; + srate = 0; + meter_drive = 0.f; + lp_pre_freq_old = -1; + hp_pre_freq_old = -1; + lp_post_freq_old = -1; + hp_post_freq_old = -1; + p_freq_old = -1; + p_level_old = -1; +} + +void saturator_audio_module::activate() +{ + is_active = true; + // set all filters + params_changed(); + meters.reset(); + meter_drive = 0.f; +} +void saturator_audio_module::deactivate() +{ + is_active = false; +} + +void saturator_audio_module::params_changed() +{ + // set the params of all filters + if(*params[param_lp_pre_freq] != lp_pre_freq_old) { + lp[0][0].set_lp_rbj(*params[param_lp_pre_freq], 0.707, (float)srate); + if(in_count > 1 && out_count > 1) + lp[1][0].copy_coeffs(lp[0][0]); + lp[0][1].copy_coeffs(lp[0][0]); + if(in_count > 1 && out_count > 1) + lp[1][1].copy_coeffs(lp[0][0]); + lp_pre_freq_old = *params[param_lp_pre_freq]; + } + if(*params[param_hp_pre_freq] != hp_pre_freq_old) { + hp[0][0].set_hp_rbj(*params[param_hp_pre_freq], 0.707, (float)srate); + if(in_count > 1 && out_count > 1) + hp[1][0].copy_coeffs(hp[0][0]); + hp[0][1].copy_coeffs(hp[0][0]); + if(in_count > 1 && out_count > 1) + hp[1][1].copy_coeffs(hp[0][0]); + hp_pre_freq_old = *params[param_hp_pre_freq]; + } + if(*params[param_lp_post_freq] != lp_post_freq_old) { + lp[0][2].set_lp_rbj(*params[param_lp_post_freq], 0.707, (float)srate); + if(in_count > 1 && out_count > 1) + lp[1][2].copy_coeffs(lp[0][2]); + lp[0][3].copy_coeffs(lp[0][2]); + if(in_count > 1 && out_count > 1) + lp[1][3].copy_coeffs(lp[0][2]); + lp_post_freq_old = *params[param_lp_post_freq]; + } + if(*params[param_hp_post_freq] != hp_post_freq_old) { + hp[0][2].set_hp_rbj(*params[param_hp_post_freq], 0.707, (float)srate); + if(in_count > 1 && out_count > 1) + hp[1][2].copy_coeffs(hp[0][2]); + hp[0][3].copy_coeffs(hp[0][2]); + if(in_count > 1 && out_count > 1) + hp[1][3].copy_coeffs(hp[0][2]); + hp_post_freq_old = *params[param_hp_post_freq]; + } + if(*params[param_p_freq] != p_freq_old or *params[param_p_level] != p_level_old or *params[param_p_q] != p_q_old) { + p[0].set_peakeq_rbj((float)*params[param_p_freq], (float)*params[param_p_q], (float)*params[param_p_level], (float)srate); + if(in_count > 1 && out_count > 1) + p[1].copy_coeffs(p[0]); + p_freq_old = *params[param_p_freq]; + p_level_old = *params[param_p_level]; + p_q_old = *params[param_p_q]; + } + // set distortion + dist[0].set_params(*params[param_blend], *params[param_drive]); + if(in_count > 1 && out_count > 1) + dist[1].set_params(*params[param_blend], *params[param_drive]); +} + +void saturator_audio_module::set_sample_rate(uint32_t sr) +{ + srate = sr; + dist[0].set_sample_rate(sr); + if(in_count > 1 && out_count > 1) + dist[1].set_sample_rate(sr); + meters.set_sample_rate(srate); +} + +uint32_t saturator_audio_module::process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask) +{ + bool bypass = *params[param_bypass] > 0.5f; + uint32_t orig_offset = offset; + uint32_t orig_numsamples = numsamples; + numsamples += offset; + if(bypass) { + // everything bypassed + while(offset < numsamples) { + if(in_count > 1 && out_count > 1) { + outs[0][offset] = ins[0][offset]; + outs[1][offset] = ins[1][offset]; + } else if(in_count > 1) { + outs[0][offset] = (ins[0][offset] + ins[1][offset]) / 2; + } else if(out_count > 1) { + outs[0][offset] = ins[0][offset]; + outs[1][offset] = ins[0][offset]; + } else { + outs[0][offset] = ins[0][offset]; + } + ++offset; + } + meters.bypassed(params, orig_numsamples); + } else { + meter_drive = 0.f; + float in_avg[2] = {0.f, 0.f}; + float out_avg[2] = {0.f, 0.f}; + float tube_avg = 0.f; + // process + while(offset < numsamples) { + // cycle through samples + float out[2], in[2] = {0.f, 0.f}; + int c = 0; + + if(in_count > 1 && out_count > 1) { + // stereo in/stereo out + // handle full stereo + in[0] = ins[0][offset]; + in[1] = ins[1][offset]; + c = 2; + } else { + // in and/or out mono + // handle mono + in[0] = ins[0][offset]; + in[1] = in[0]; + c = 1; + } + + float proc[2]; + proc[0] = in[0] * *params[param_level_in]; + proc[1] = in[1] * *params[param_level_in]; + + float onedivlevelin = 1.0 / *params[param_level_in]; + + for (int i = 0; i < c; ++i) { + // all pre filters in chain + proc[i] = lp[i][1].process(lp[i][0].process(proc[i])); + proc[i] = hp[i][1].process(hp[i][0].process(proc[i])); + + // get average for display purposes before... + in_avg[i] += fabs(pow(proc[i], 2.f)); + + // ...saturate... + proc[i] = dist[i].process(proc[i]); + + // ...and get average after... + out_avg[i] += fabs(pow(proc[i], 2.f)); + + // tone control + proc[i] = p[i].process(proc[i]); + + // all post filters in chain + proc[i] = lp[i][2].process(lp[i][3].process(proc[i])); + proc[i] = hp[i][2].process(hp[i][3].process(proc[i])); + + //subtract gain + proc[i] *= onedivlevelin; + } + + if(in_count > 1 && out_count > 1) { + // full stereo + out[0] = ((proc[0] * *params[param_mix]) + in[0] * (1 - *params[param_mix])) * *params[param_level_out]; + outs[0][offset] = out[0]; + out[1] = ((proc[1] * *params[param_mix]) + in[1] * (1 - *params[param_mix])) * *params[param_level_out]; + outs[1][offset] = out[1]; + } else if(out_count > 1) { + // mono -> pseudo stereo + out[0] = ((proc[0] * *params[param_mix]) + in[0] * (1 - *params[param_mix])) * *params[param_level_out]; + outs[0][offset] = out[0]; + out[1] = out[0]; + outs[1][offset] = out[1]; + } else { + // stereo -> mono + // or full mono + out[0] = ((proc[0] * *params[param_mix]) + in[0] * (1 - *params[param_mix])) * *params[param_level_out]; + outs[0][offset] = out[0]; + } + + // next sample + ++offset; + } // cycle trough samples + meters.process(params, ins, outs, orig_offset, orig_numsamples); + + tube_avg = (sqrt(std::max(out_avg[0], out_avg[1])) / numsamples) - (sqrt(std::max(in_avg[0], in_avg[1])) / numsamples); + meter_drive = (5.0f * fabs(tube_avg) * (float(*params[param_blend]) + 30.0f)); + // printf("out:%.6f in: %.6f avg: %.6f drv: %.3f\n", sqrt(std::max(out_avg[0], out_avg[1])) / numsamples, sqrt(std::max(in_avg[0], in_avg[1])) / numsamples, tube_avg, meter_drive); + // clean up + lp[0][0].sanitize(); + lp[1][0].sanitize(); + lp[0][1].sanitize(); + lp[1][1].sanitize(); + lp[0][2].sanitize(); + lp[1][2].sanitize(); + lp[0][3].sanitize(); + lp[1][3].sanitize(); + hp[0][0].sanitize(); + hp[1][0].sanitize(); + hp[0][1].sanitize(); + hp[1][1].sanitize(); + hp[0][2].sanitize(); + hp[1][2].sanitize(); + hp[0][3].sanitize(); + hp[1][3].sanitize(); + p[0].sanitize(); + p[1].sanitize(); + } + // draw meters + if(params[param_meter_drive] != NULL) { + *params[param_meter_drive] = meter_drive; + } + // whatever has to be returned x) + return outputs_mask; +} + +/// Exciter by Markus Schmidt +/// +/// This module is based on Krzysztof's filters and Tom Szilagyi's distortion routine. +/// It provides a blendable saturation stage followed by a highpass, a lowpass and a peak filter +/////////////////////////////////////////////////////////////////////////////////////////////// + +exciter_audio_module::exciter_audio_module() +{ + is_active = false; + srate = 0; + meter_drive = 0.f; +} + +void exciter_audio_module::activate() +{ + is_active = true; + // set all filters + params_changed(); +} + +void exciter_audio_module::deactivate() +{ + is_active = false; +} + +void exciter_audio_module::params_changed() +{ + // set the params of all filters + if(*params[param_freq] != freq_old) { + hp[0][0].set_hp_rbj(*params[param_freq], 0.707, (float)srate); + hp[0][1].copy_coeffs(hp[0][0]); + hp[0][2].copy_coeffs(hp[0][0]); + hp[0][3].copy_coeffs(hp[0][0]); + if(in_count > 1 && out_count > 1) { + hp[1][0].copy_coeffs(hp[0][0]); + hp[1][1].copy_coeffs(hp[0][0]); + hp[1][2].copy_coeffs(hp[0][0]); + hp[1][3].copy_coeffs(hp[0][0]); + } + freq_old = *params[param_freq]; + } + // set the params of all filters + if(*params[param_ceil] != ceil_old or *params[param_ceil_active] != ceil_active_old) { + lp[0][0].set_lp_rbj(*params[param_ceil], 0.707, (float)srate); + lp[0][1].copy_coeffs(lp[0][0]); + lp[1][0].copy_coeffs(lp[0][0]); + lp[1][1].copy_coeffs(lp[0][0]); + ceil_old = *params[param_ceil]; + ceil_active_old = *params[param_ceil_active]; + } + // set distortion + dist[0].set_params(*params[param_blend], *params[param_drive]); + if(in_count > 1 && out_count > 1) + dist[1].set_params(*params[param_blend], *params[param_drive]); +} + +void exciter_audio_module::set_sample_rate(uint32_t sr) +{ + srate = sr; + dist[0].set_sample_rate(sr); + if(in_count > 1 && out_count > 1) + dist[1].set_sample_rate(sr); + meters.set_sample_rate(srate); +} + +uint32_t exciter_audio_module::process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask) +{ + uint32_t orig_offset = offset; + uint32_t orig_numsamples = numsamples; + bool bypass = *params[param_bypass] > 0.5f; + numsamples += offset; + if(bypass) { + // everything bypassed + while(offset < numsamples) { + if(in_count > 1 && out_count > 1) { + outs[0][offset] = ins[0][offset]; + outs[1][offset] = ins[1][offset]; + } else if(in_count > 1) { + outs[0][offset] = (ins[0][offset] + ins[1][offset]) / 2; + } else if(out_count > 1) { + outs[0][offset] = ins[0][offset]; + outs[1][offset] = ins[0][offset]; + } else { + outs[0][offset] = ins[0][offset]; + } + ++offset; + } + meters.bypassed(params, orig_numsamples); + // displays, too + meter_drive = 0.f; + } else { + + meter_drive = 0.f; + + float in2out = *params[param_listen] > 0.f ? 0.f : 1.f; + + // process + while(offset < numsamples) { + // cycle through samples + float out[2], in[2] = {0.f, 0.f}; + float maxDrive = 0.f; + int c = 0; + + if(in_count > 1 && out_count > 1) { + // stereo in/stereo out + // handle full stereo + in[0] = ins[0][offset]; + in[0] *= *params[param_level_in]; + in[1] = ins[1][offset]; + in[1] *= *params[param_level_in]; + c = 2; + } else { + // in and/or out mono + // handle mono + in[0] = ins[0][offset]; + in[0] *= *params[param_level_in]; + in[1] = in[0]; + c = 1; + } + + float proc[2]; + proc[0] = in[0]; + proc[1] = in[1]; + + for (int i = 0; i < c; ++i) { + // all pre filters in chain + proc[i] = hp[i][1].process(hp[i][0].process(proc[i])); + + // saturate + proc[i] = dist[i].process(proc[i]); + + // all post filters in chain + proc[i] = hp[i][2].process(hp[i][3].process(proc[i])); + + if(*params[param_ceil_active] > 0.5f) { + // all H/P post filters in chain + proc[i] = lp[i][0].process(lp[i][1].process(proc[i])); + + } + } + maxDrive = dist[0].get_distortion_level() * *params[param_amount]; + + if(in_count > 1 && out_count > 1) { + maxDrive = std::max(maxDrive, dist[1].get_distortion_level() * *params[param_amount]); + // full stereo + out[0] = (proc[0] * *params[param_amount] + in2out * in[0]) * *params[param_level_out]; + out[1] = (proc[1] * *params[param_amount] + in2out * in[1]) * *params[param_level_out]; + outs[0][offset] = out[0]; + outs[1][offset] = out[1]; + } else if(out_count > 1) { + // mono -> pseudo stereo + out[1] = out[0] = (proc[0] * *params[param_amount] + in2out * in[0]) * *params[param_level_out]; + outs[0][offset] = out[0]; + outs[1][offset] = out[1]; + } else { + // stereo -> mono + // or full mono + out[0] = (proc[0] * *params[param_amount] + in2out * in[0]) * *params[param_level_out]; + outs[0][offset] = out[0]; + } + + // set up in / out meters + if(maxDrive > meter_drive) { + meter_drive = maxDrive; + } + + // next sample + ++offset; + } // cycle trough samples + meters.process(params, ins, outs, orig_offset, orig_numsamples); + // clean up + hp[0][0].sanitize(); + hp[1][0].sanitize(); + hp[0][1].sanitize(); + hp[1][1].sanitize(); + hp[0][2].sanitize(); + hp[1][2].sanitize(); + hp[0][3].sanitize(); + hp[1][3].sanitize(); + } + // draw meters + if(params[param_meter_drive] != NULL) { + *params[param_meter_drive] = meter_drive; + } + // whatever has to be returned x) + return outputs_mask; +} + +/// Bass Enhancer by Markus Schmidt +/// +/// This module is based on Krzysztof's filters and Tom's distortion routine. +/// It sends the signal through a lowpass, saturates it and sends it through a lowpass again +/////////////////////////////////////////////////////////////////////////////////////////////// + +bassenhancer_audio_module::bassenhancer_audio_module() +{ + is_active = false; + srate = 0; + meters.reset(); + meter_drive = 0.f; +} + +void bassenhancer_audio_module::activate() +{ + is_active = true; + meters.reset(); + // set all filters + params_changed(); +} +void bassenhancer_audio_module::deactivate() +{ + is_active = false; +} + +void bassenhancer_audio_module::params_changed() +{ + // set the params of all filters + if(*params[param_freq] != freq_old) { + lp[0][0].set_lp_rbj(*params[param_freq], 0.707, (float)srate); + lp[0][1].copy_coeffs(lp[0][0]); + lp[0][2].copy_coeffs(lp[0][0]); + lp[0][3].copy_coeffs(lp[0][0]); + if(in_count > 1 && out_count > 1) { + lp[1][0].copy_coeffs(lp[0][0]); + lp[1][1].copy_coeffs(lp[0][0]); + lp[1][2].copy_coeffs(lp[0][0]); + lp[1][3].copy_coeffs(lp[0][0]); + } + freq_old = *params[param_freq]; + } + // set the params of all filters + if(*params[param_floor] != floor_old or *params[param_floor_active] != floor_active_old) { + hp[0][0].set_hp_rbj(*params[param_floor], 0.707, (float)srate); + hp[0][1].copy_coeffs(hp[0][0]); + hp[1][0].copy_coeffs(hp[0][0]); + hp[1][1].copy_coeffs(hp[0][0]); + floor_old = *params[param_floor]; + floor_active_old = *params[param_floor_active]; + } + // set distortion + dist[0].set_params(*params[param_blend], *params[param_drive]); + if(in_count > 1 && out_count > 1) + dist[1].set_params(*params[param_blend], *params[param_drive]); +} + +void bassenhancer_audio_module::set_sample_rate(uint32_t sr) +{ + srate = sr; + dist[0].set_sample_rate(sr); + if(in_count > 1 && out_count > 1) + dist[1].set_sample_rate(sr); + meters.set_sample_rate(srate); +} + +uint32_t bassenhancer_audio_module::process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask) +{ + bool bypass = *params[param_bypass] > 0.5f; + uint32_t orig_offset = offset; + uint32_t orig_numsamples = numsamples; + numsamples += offset; + if(bypass) { + // everything bypassed + while(offset < numsamples) { + if(in_count > 1 && out_count > 1) { + outs[0][offset] = ins[0][offset]; + outs[1][offset] = ins[1][offset]; + } else if(in_count > 1) { + outs[0][offset] = (ins[0][offset] + ins[1][offset]) / 2; + } else if(out_count > 1) { + outs[0][offset] = ins[0][offset]; + outs[1][offset] = ins[0][offset]; + } else { + outs[0][offset] = ins[0][offset]; + } + ++offset; + } + // displays, too + meters.bypassed(params, orig_numsamples); + meter_drive = 0.f; + } else { + meter_drive = 0.f; + + // process + while(offset < numsamples) { + // cycle through samples + float out[2], in[2] = {0.f, 0.f}; + float maxDrive = 0.f; + int c = 0; + + if(in_count > 1 && out_count > 1) { + // stereo in/stereo out + // handle full stereo + in[0] = ins[0][offset]; + in[0] *= *params[param_level_in]; + in[1] = ins[1][offset]; + in[1] *= *params[param_level_in]; + c = 2; + } else { + // in and/or out mono + // handle mono + in[0] = ins[0][offset]; + in[0] *= *params[param_level_in]; + in[1] = in[0]; + c = 1; + } + + float proc[2]; + proc[0] = in[0]; + proc[1] = in[1]; + + for (int i = 0; i < c; ++i) { + // all pre filters in chain + proc[i] = lp[i][1].process(lp[i][0].process(proc[i])); + + // saturate + proc[i] = dist[i].process(proc[i]); + + // all post filters in chain + proc[i] = lp[i][2].process(lp[i][3].process(proc[i])); + + if(*params[param_floor_active] > 0.5f) { + // all H/P post filters in chain + proc[i] = hp[i][0].process(hp[i][1].process(proc[i])); + + } + } + + if(in_count > 1 && out_count > 1) { + // full stereo + if(*params[param_listen] > 0.f) + out[0] = proc[0] * *params[param_amount] * *params[param_level_out]; + else + out[0] = (proc[0] * *params[param_amount] + in[0]) * *params[param_level_out]; + outs[0][offset] = out[0]; + if(*params[param_listen] > 0.f) + out[1] = proc[1] * *params[param_amount] * *params[param_level_out]; + else + out[1] = (proc[1] * *params[param_amount] + in[1]) * *params[param_level_out]; + outs[1][offset] = out[1]; + maxDrive = std::max(dist[0].get_distortion_level() * *params[param_amount], + dist[1].get_distortion_level() * *params[param_amount]); + } else if(out_count > 1) { + // mono -> pseudo stereo + if(*params[param_listen] > 0.f) + out[0] = proc[0] * *params[param_amount] * *params[param_level_out]; + else + out[0] = (proc[0] * *params[param_amount] + in[0]) * *params[param_level_out]; + outs[0][offset] = out[0]; + out[1] = out[0]; + outs[1][offset] = out[1]; + maxDrive = dist[0].get_distortion_level() * *params[param_amount]; + } else { + // stereo -> mono + // or full mono + if(*params[param_listen] > 0.f) + out[0] = proc[0] * *params[param_amount] * *params[param_level_out]; + else + out[0] = (proc[0] * *params[param_amount] + in[0]) * *params[param_level_out]; + outs[0][offset] = out[0]; + maxDrive = dist[0].get_distortion_level() * *params[param_amount]; + } + + // set up in / out meters + if(maxDrive > meter_drive) { + meter_drive = maxDrive; + } + + // next sample + ++offset; + } // cycle trough samples + meters.process(params, ins, outs, orig_offset, orig_numsamples); + // clean up + lp[0][0].sanitize(); + lp[1][0].sanitize(); + lp[0][1].sanitize(); + lp[1][1].sanitize(); + lp[0][2].sanitize(); + lp[1][2].sanitize(); + lp[0][3].sanitize(); + lp[1][3].sanitize(); + } + // draw meters + if(params[param_meter_drive] != NULL) { + *params[param_meter_drive] = meter_drive; + } + // whatever has to be returned x) + return outputs_mask; +} diff --git a/plugins/LadspaEffect/calf/src/modules_eq.cpp b/plugins/LadspaEffect/calf/src/modules_eq.cpp new file mode 100644 index 000000000..177b7fab9 --- /dev/null +++ b/plugins/LadspaEffect/calf/src/modules_eq.cpp @@ -0,0 +1,343 @@ +/* Calf DSP plugin pack + * Equalization related plugins + * + * Copyright (C) 2001-2010 Krzysztof Foltman, Markus Schmidt, Thor Harald Johansen and others + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this program; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA + */ +#include +#include +#include +#include + +using namespace dsp; +using namespace calf_plugins; + +/// Equalizer 12 Band by Markus Schmidt +/// +/// This module is based on Krzysztof's filters. It provides a couple +/// of different chained filters. +/////////////////////////////////////////////////////////////////////////////////////////////// + +template +equalizerNband_audio_module::equalizerNband_audio_module() +{ + is_active = false; + srate = 0; + last_generation = 0; + hp_freq_old = lp_freq_old = 0; + hs_freq_old = ls_freq_old = 0; + hs_level_old = ls_level_old = 0; + for (int i = 0; i < AM::PeakBands; i++) + { + p_freq_old[i] = 0; + p_level_old[i] = 0; + p_q_old[i] = 0; + } +} + +template +void equalizerNband_audio_module::activate() +{ + is_active = true; + // set all filters + params_changed(); + meters.reset(); +} + +template +void equalizerNband_audio_module::deactivate() +{ + is_active = false; +} + +static inline void copy_lphp(biquad_d2 filters[3][2]) +{ + for (int i = 0; i < 3; i++) + for (int j = 0; j < 2; j++) + if (i || j) + filters[i][j].copy_coeffs(filters[0][0]); +} + +template +void equalizerNband_audio_module::params_changed() +{ + // set the params of all filters + + // lp/hp first (if available) + if (has_lphp) + { + hp_mode = (CalfEqMode)(int)*params[AM::param_hp_mode]; + lp_mode = (CalfEqMode)(int)*params[AM::param_lp_mode]; + + float hpfreq = *params[AM::param_hp_freq], lpfreq = *params[AM::param_lp_freq]; + + if(hpfreq != hp_freq_old) { + hp[0][0].set_hp_rbj(hpfreq, 0.707, (float)srate, 1.0); + copy_lphp(hp); + hp_freq_old = hpfreq; + } + if(lpfreq != lp_freq_old) { + lp[0][0].set_lp_rbj(lpfreq, 0.707, (float)srate, 1.0); + copy_lphp(lp); + lp_freq_old = lpfreq; + } + } + + // then shelves + float hsfreq = *params[AM::param_hs_freq], hslevel = *params[AM::param_hs_level]; + float lsfreq = *params[AM::param_ls_freq], lslevel = *params[AM::param_ls_level]; + + if(lsfreq != ls_freq_old or lslevel != ls_level_old) { + lsL.set_lowshelf_rbj(lsfreq, 0.707, lslevel, (float)srate); + lsR.copy_coeffs(lsL); + ls_level_old = lslevel; + ls_freq_old = lsfreq; + } + if(hsfreq != hs_freq_old or hslevel != hs_level_old) { + hsL.set_highshelf_rbj(hsfreq, 0.707, hslevel, (float)srate); + hsR.copy_coeffs(hsL); + hs_level_old = hslevel; + hs_freq_old = hsfreq; + } + for (int i = 0; i < AM::PeakBands; i++) + { + int offset = i * params_per_band; + float freq = *params[AM::param_p1_freq + offset]; + float level = *params[AM::param_p1_level + offset]; + float q = *params[AM::param_p1_q + offset]; + if(freq != p_freq_old[i] or level != p_level_old[i] or q != p_q_old[i]) { + pL[i].set_peakeq_rbj(freq, q, level, (float)srate); + pR[i].copy_coeffs(pL[i]); + p_freq_old[i] = freq; + p_level_old[i] = level; + p_q_old[i] = q; + } + } +} + +template +inline void equalizerNband_audio_module::process_hplp(float &left, float &right) +{ + if (!has_lphp) + return; + if (*params[AM::param_lp_active] > 0.f) + { + switch(lp_mode) + { + case MODE12DB: + left = lp[0][0].process(left); + right = lp[0][1].process(right); + break; + case MODE24DB: + left = lp[1][0].process(lp[0][0].process(left)); + right = lp[1][1].process(lp[0][1].process(right)); + break; + case MODE36DB: + left = lp[2][0].process(lp[1][0].process(lp[0][0].process(left))); + right = lp[2][1].process(lp[1][1].process(lp[0][1].process(right))); + break; + } + } + if (*params[AM::param_hp_active] > 0.f) + { + switch(hp_mode) + { + case MODE12DB: + left = hp[0][0].process(left); + right = hp[0][1].process(right); + break; + case MODE24DB: + left = hp[1][0].process(hp[0][0].process(left)); + right = hp[1][1].process(hp[0][1].process(right)); + break; + case MODE36DB: + left = hp[2][0].process(hp[1][0].process(hp[0][0].process(left))); + right = hp[2][1].process(hp[1][1].process(hp[0][1].process(right))); + break; + } + } +} + +template +uint32_t equalizerNband_audio_module::process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask) +{ + bool bypass = *params[AM::param_bypass] > 0.f; + uint32_t orig_offset = offset; + uint32_t orig_numsamples = numsamples; + numsamples += offset; + if(bypass) { + // everything bypassed + while(offset < numsamples) { + outs[0][offset] = ins[0][offset]; + outs[1][offset] = ins[1][offset]; + ++offset; + } + // displays, too + meters.bypassed(params, orig_numsamples); + } else { + // process + while(offset < numsamples) { + // cycle through samples + float outL = 0.f; + float outR = 0.f; + float inL = ins[0][offset]; + float inR = ins[1][offset]; + // in level + inR *= *params[AM::param_level_in]; + inL *= *params[AM::param_level_in]; + + float procL = inL; + float procR = inR; + + // all filters in chain + process_hplp(procL, procR); + if(*params[AM::param_ls_active] > 0.f) { + procL = lsL.process(procL); + procR = lsR.process(procR); + } + if(*params[AM::param_hs_active] > 0.f) { + procL = hsL.process(procL); + procR = hsR.process(procR); + } + for (int i = 0; i < AM::PeakBands; i++) + { + if(*params[AM::param_p1_active + i * params_per_band] > 0.f) { + procL = pL[i].process(procL); + procR = pR[i].process(procR); + } + } + + outL = procL * *params[AM::param_level_out]; + outR = procR * *params[AM::param_level_out]; + + // send to output + outs[0][offset] = outL; + outs[1][offset] = outR; + + // next sample + ++offset; + } // cycle trough samples + meters.process(params, ins, outs, orig_offset, orig_numsamples); + // clean up + for(int i = 0; i < 3; ++i) { + hp[i][0].sanitize(); + hp[i][1].sanitize(); + lp[i][0].sanitize(); + lp[i][1].sanitize(); + } + lsL.sanitize(); + hsR.sanitize(); + for(int i = 0; i < AM::PeakBands; ++i) { + pL[i].sanitize(); + pR[i].sanitize(); + } + } + // whatever has to be returned x) + return outputs_mask; +} + +template +bool equalizerNband_audio_module::get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const +{ + if (!is_active) + return false; + if (index == AM::param_p1_freq && !subindex) { + context->set_line_width(1.5); + return ::get_graph(*this, subindex, data, points, 32, 0); + } + return false; +} + +template +bool equalizerNband_audio_module::get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const +{ + if (!is_active) { + return false; + } else { + return get_freq_gridline(subindex, pos, vertical, legend, context, true, 32, 0); + } +} + +template +int equalizerNband_audio_module::get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline) const +{ + if (!is_active) { + return false; + } else { + bool changed = false; + for (int i = 0; i < graph_param_count && !changed; i++) + { + if (*params[AM::first_graph_param + i] != old_params_for_graph[i]) + changed = true; + } + if (changed) + { + for (int i = 0; i < graph_param_count; i++) + old_params_for_graph[i] = *params[AM::first_graph_param + i]; + + last_generation++; + subindex_graph = 0; + subindex_dot = INT_MAX; + subindex_gridline = INT_MAX; + } + else { + subindex_graph = 0; + subindex_dot = subindex_gridline = generation ? INT_MAX : 0; + } + if (generation == last_calculated_generation) + subindex_graph = INT_MAX; + return last_generation; + } + return false; +} + +static inline float adjusted_lphp_gain(const float *const *params, int param_active, int param_mode, const biquad_d2 &filter, float freq, float srate) +{ + if(*params[param_active] > 0.f) { + float gain = filter.freq_gain(freq, srate); + switch((int)*params[param_mode]) { + case MODE12DB: + return gain; + case MODE24DB: + return gain * gain; + case MODE36DB: + return gain * gain * gain; + } + } + return 1; +} + +template +float equalizerNband_audio_module::freq_gain(int index, double freq, uint32_t sr) const +{ + float ret = 1.f; + if (use_hplp) + { + ret *= adjusted_lphp_gain(params, AM::param_hp_active, AM::param_hp_mode, hp[0][0], freq, (float)sr); + ret *= adjusted_lphp_gain(params, AM::param_lp_active, AM::param_lp_mode, lp[0][0], freq, (float)sr); + } + ret *= (*params[AM::param_ls_active] > 0.f) ? lsL.freq_gain(freq, sr) : 1; + ret *= (*params[AM::param_hs_active] > 0.f) ? hsL.freq_gain(freq, sr) : 1; + for (int i = 0; i < PeakBands; i++) + ret *= (*params[AM::param_p1_active + i * params_per_band] > 0.f) ? pL[i].freq_gain(freq, (float)sr) : 1; + return ret; +} + +template class equalizerNband_audio_module; +template class equalizerNband_audio_module; +template class equalizerNband_audio_module; + diff --git a/plugins/LadspaEffect/calf/src/modules_limit.cpp b/plugins/LadspaEffect/calf/src/modules_limit.cpp new file mode 100644 index 000000000..f7fb6fc80 --- /dev/null +++ b/plugins/LadspaEffect/calf/src/modules_limit.cpp @@ -0,0 +1,695 @@ +/* Calf DSP plugin pack + * Limiter related plugins + * + * Copyright (C) 2001-2010 Krzysztof Foltman, Markus Schmidt, Thor Harald Johansen and others + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this program; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA + */ +#include +#include +#include +#include + +using namespace dsp; +using namespace calf_plugins; + +#define SET_IF_CONNECTED(name) if (params[AM::param_##name] != NULL) *params[AM::param_##name] = name; + +/// Limiter by Markus Schmidt and Christian Holschuh +/// +/// This module provides the lookahead limiter as a simple audio module +/// with choosable lookahead and release time. +/////////////////////////////////////////////////////////////////////////////////////////////// + +limiter_audio_module::limiter_audio_module() +{ + is_active = false; + srate = 0; + // zero all displays + clip_inL = 0.f; + clip_inR = 0.f; + clip_outL = 0.f; + clip_outR = 0.f; + meter_inL = 0.f; + meter_inR = 0.f; + meter_outL = 0.f; + meter_outR = 0.f; + asc_led = 0.f; + attack_old = -1.f; + limit_old = -1.f; + asc_old = true; +} + +void limiter_audio_module::activate() +{ + is_active = true; + // set all filters and strips + params_changed(); + limiter.activate(); +} + +void limiter_audio_module::deactivate() +{ + is_active = false; + limiter.deactivate(); +} + +void limiter_audio_module::params_changed() +{ + limiter.set_params(*params[param_limit], *params[param_attack], *params[param_release], 1.f, *params[param_asc], pow(0.5, (*params[param_asc_coeff] - 0.5) * 2 * -1), true); + if( *params[param_attack] != attack_old) { + attack_old = *params[param_attack]; + limiter.reset(); + } + if(*params[param_limit] != limit_old or *params[param_asc] != asc_old) { + asc_old = *params[param_asc]; + limit_old = *params[param_limit]; + limiter.reset_asc(); + } +} + +void limiter_audio_module::set_sample_rate(uint32_t sr) +{ + srate = sr; + limiter.set_sample_rate(srate); +} + +uint32_t limiter_audio_module::process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask) +{ + bool bypass = *params[param_bypass] > 0.5f; + numsamples += offset; + if(bypass) { + // everything bypassed + while(offset < numsamples) { + outs[0][offset] = ins[0][offset]; + outs[1][offset] = ins[1][offset]; + ++offset; + } + // displays, too + clip_inL = 0.f; + clip_inR = 0.f; + clip_outL = 0.f; + clip_outR = 0.f; + meter_inL = 0.f; + meter_inR = 0.f; + meter_outL = 0.f; + meter_outR = 0.f; + asc_led = 0.f; + } else { + // let meters fall a bit + clip_inL -= std::min(clip_inL, numsamples); + clip_inR -= std::min(clip_inR, numsamples); + clip_outL -= std::min(clip_outL, numsamples); + clip_outR -= std::min(clip_outR, numsamples); + meter_inL = 0.f; + meter_inR = 0.f; + meter_outL = 0.f; + meter_outR = 0.f; + asc_led -= std::min(asc_led, numsamples); + + while(offset < numsamples) { + // cycle through samples + float inL = ins[0][offset]; + float inR = ins[1][offset]; + // in level + inR *= *params[param_level_in]; + inL *= *params[param_level_in]; + // out vars + float outL = inL; + float outR = inR; + + // process gain reduction + float fickdich[0]; + limiter.process(outL, outR, fickdich); + if(limiter.get_asc()) + asc_led = srate >> 3; + + // should never be used. but hackers are paranoid by default. + // so we make shure NOTHING is above limit + outL = std::max(outL, -*params[param_limit]); + outL = std::min(outL, *params[param_limit]); + outR = std::max(outR, -*params[param_limit]); + outR = std::min(outR, *params[param_limit]); + + // autolevel + outL /= *params[param_limit]; + outR /= *params[param_limit]; + + // out level + outL *= *params[param_level_out]; + outR *= *params[param_level_out]; + + // send to output + outs[0][offset] = outL; + outs[1][offset] = outR; + + // clip LED's + if(inL > 1.f) { + clip_inL = srate >> 3; + } + if(inR > 1.f) { + clip_inR = srate >> 3; + } + if(outL > 1.f) { + clip_outL = srate >> 3; + } + if(outR > 1.f) { + clip_outR = srate >> 3; + } + // set up in / out meters + if(inL > meter_inL) { + meter_inL = inL; + } + if(inR > meter_inR) { + meter_inR = inR; + } + if(outL > meter_outL) { + meter_outL = outL; + } + if(outR > meter_outR) { + meter_outR = outR; + } + // next sample + ++offset; + } // cycle trough samples + + } // process (no bypass) + + // draw meters + SET_IF_CONNECTED(clip_inL); + SET_IF_CONNECTED(clip_inR); + SET_IF_CONNECTED(clip_outL); + SET_IF_CONNECTED(clip_outR); + SET_IF_CONNECTED(meter_inL); + SET_IF_CONNECTED(meter_inR); + SET_IF_CONNECTED(meter_outL); + SET_IF_CONNECTED(meter_outR); + + if (params[param_asc_led] != NULL) *params[param_asc_led] = asc_led; + + if (*params[param_att]) { + if(bypass) + *params[param_att] = 1.f; + else + *params[param_att] = limiter.get_attenuation(); + } + + // whatever has to be returned x) + return outputs_mask; +} + +/// Multiband Limiter by Markus Schmidt and Christian Holschuh +/// +/// This module splits the signal in four different bands +/// and sends them through multiple filters (implemented by +/// Krzysztof). They are processed by a lookahead limiter module afterwards +/// and summed up to the final output again. +/////////////////////////////////////////////////////////////////////////////////////////////// + +multibandlimiter_audio_module::multibandlimiter_audio_module() +{ + is_active = false; + srate = 0; + // zero all displays + clip_inL = 0.f; + clip_inR = 0.f; + clip_outL = 0.f; + clip_outR = 0.f; + meter_inL = 0.f; + meter_inR = 0.f; + meter_outL = 0.f; + meter_outR = 0.f; + asc_led = 0.f; + attack_old = -1.f; + channels = 2; + buffer_size = 0; + overall_buffer_size = 0; + _sanitize = false; + for(int i = 0; i < strips - 1; i ++) { + freq_old[i] = -1; + sep_old[i] = -1; + q_old[i] = -1; + } + mode_old = 0; + for(int i = 0; i < strips; i ++) { + weight_old[i] = -1.f; + } + attack_old = -1.f; + limit_old = -1.f; + asc_old = true; +} + +void multibandlimiter_audio_module::activate() +{ + is_active = true; + // set all filters and strips + params_changed(); + // activate all strips + for (int j = 0; j < strips; j ++) { + strip[j].activate(); + strip[j].set_multi(true); + strip[j].id = j; + } + broadband.activate(); + pos = 0; +} + +void multibandlimiter_audio_module::deactivate() +{ + is_active = false; + // deactivate all strips + for (int j = 0; j < strips; j ++) { + strip[j].deactivate(); + } + broadband.deactivate(); +} + +void multibandlimiter_audio_module::params_changed() +{ + // determine mute/solo states + solo[0] = *params[param_solo0] > 0.f ? true : false; + solo[1] = *params[param_solo1] > 0.f ? true : false; + solo[2] = *params[param_solo2] > 0.f ? true : false; + solo[3] = *params[param_solo3] > 0.f ? true : false; + no_solo = (*params[param_solo0] > 0.f || + *params[param_solo1] > 0.f || + *params[param_solo2] > 0.f || + *params[param_solo3] > 0.f) ? false : true; + + mode_old = mode; + mode = *params[param_mode]; + int i; + int j1; + switch(mode) { + case 0: + default: + j1 = 0; + break; + case 1: + j1 = 2; + break; + } + // set the params of all filters + if(*params[param_freq0] != freq_old[0] or *params[param_sep0] != sep_old[0] or *params[param_q0] != q_old[0] or *params[param_mode] != mode_old) { + lpL[0][0].set_lp_rbj((float)(*params[param_freq0] * (1 - *params[param_sep0])), *params[param_q0], (float)srate); + hpL[0][0].set_hp_rbj((float)(*params[param_freq0] * (1 + *params[param_sep0])), *params[param_q0], (float)srate); + lpR[0][0].copy_coeffs(lpL[0][0]); + hpR[0][0].copy_coeffs(hpL[0][0]); + for(i = 1; i <= j1; i++) { + lpL[0][i].copy_coeffs(lpL[0][0]); + hpL[0][i].copy_coeffs(hpL[0][0]); + lpR[0][i].copy_coeffs(lpL[0][0]); + hpR[0][i].copy_coeffs(hpL[0][0]); + } + freq_old[0] = *params[param_freq0]; + sep_old[0] = *params[param_sep0]; + q_old[0] = *params[param_q0]; + } + if(*params[param_freq1] != freq_old[1] or *params[param_sep1] != sep_old[1] or *params[param_q1] != q_old[1] or *params[param_mode] != mode_old) { + lpL[1][0].set_lp_rbj((float)(*params[param_freq1] * (1 - *params[param_sep1])), *params[param_q1], (float)srate); + hpL[1][0].set_hp_rbj((float)(*params[param_freq1] * (1 + *params[param_sep1])), *params[param_q1], (float)srate); + lpR[1][0].copy_coeffs(lpL[1][0]); + hpR[1][0].copy_coeffs(hpL[1][0]); + for(i = 1; i <= j1; i++) { + lpL[1][i].copy_coeffs(lpL[1][0]); + hpL[1][i].copy_coeffs(hpL[1][0]); + lpR[1][i].copy_coeffs(lpL[1][0]); + hpR[1][i].copy_coeffs(hpL[1][0]); + } + freq_old[1] = *params[param_freq1]; + sep_old[1] = *params[param_sep1]; + q_old[1] = *params[param_q1]; + } + if(*params[param_freq2] != freq_old[2] or *params[param_sep2] != sep_old[2] or *params[param_q2] != q_old[2] or *params[param_mode] != mode_old) { + lpL[2][0].set_lp_rbj((float)(*params[param_freq2] * (1 - *params[param_sep2])), *params[param_q2], (float)srate); + hpL[2][0].set_hp_rbj((float)(*params[param_freq2] * (1 + *params[param_sep2])), *params[param_q2], (float)srate); + lpR[2][0].copy_coeffs(lpL[2][0]); + hpR[2][0].copy_coeffs(hpL[2][0]); + for(i = 1; i <= j1; i++) { + lpL[2][i].copy_coeffs(lpL[2][0]); + hpL[2][i].copy_coeffs(hpL[2][0]); + lpR[2][i].copy_coeffs(lpL[2][0]); + hpR[2][i].copy_coeffs(hpL[2][0]); + } + freq_old[2] = *params[param_freq2]; + sep_old[2] = *params[param_sep2]; + q_old[2] = *params[param_q2]; + } + // set the params of all strips + float rel; + + rel = *params[param_release] * pow(0.25, *params[param_release0] * -1); + rel = (*params[param_minrel] > 0.5) ? std::max(2500 * (1.f / 30), rel) : rel; + weight[0] = pow(0.25, *params[param_weight0] * -1); + strip[0].set_params(*params[param_limit], *params[param_attack], rel, weight[0], *params[param_asc], pow(0.5, (*params[param_asc_coeff] - 0.5) * 2 * -1), true); + *params[param_effrelease0] = rel; + rel = *params[param_release] * pow(0.25, *params[param_release1] * -1); + rel = (*params[param_minrel] > 0.5) ? std::max(2500 * (1.f / *params[param_freq0]), rel) : rel; + weight[1] = pow(0.25, *params[param_weight1] * -1); + strip[1].set_params(*params[param_limit], *params[param_attack], rel, weight[1], *params[param_asc], pow(0.5, (*params[param_asc_coeff] - 0.5) * 2 * -1)); + *params[param_effrelease1] = rel; + rel = *params[param_release] * pow(0.25, *params[param_release2] * -1); + rel = (*params[param_minrel] > 0.5) ? std::max(2500 * (1.f / *params[param_freq1]), rel) : rel; + weight[2] = pow(0.25, *params[param_weight2] * -1); + strip[2].set_params(*params[param_limit], *params[param_attack], rel, weight[2], *params[param_asc], pow(0.5, (*params[param_asc_coeff] - 0.5) * 2 * -1)); + *params[param_effrelease2] = rel; + rel = *params[param_release] * pow(0.25, *params[param_release3] * -1); + rel = (*params[param_minrel] > 0.5) ? std::max(2500 * (1.f / *params[param_freq2]), rel) : rel; + weight[3] = pow(0.25, *params[param_weight3] * -1); + strip[3].set_params(*params[param_limit], *params[param_attack], rel, weight[3], *params[param_asc], pow(0.5, (*params[param_asc_coeff] - 0.5) * 2 * -1)); + *params[param_effrelease3] = rel; + broadband.set_params(*params[param_limit], *params[param_attack], rel, 1.f, *params[param_asc], pow(0.5, (*params[param_asc_coeff] - 0.5) * 2 * -1)); + // rebuild multiband buffer + if( *params[param_attack] != attack_old) { + int bs = (int)(srate * (*params[param_attack] / 1000.f) * channels); + buffer_size = bs - bs % channels; // buffer size attack rate + attack_old = *params[param_attack]; + _sanitize = true; + pos = 0; + for (int j = 0; j < strips; j ++) { + strip[j].reset(); + } + broadband.reset(); + } + if(*params[param_limit] != limit_old or *params[param_asc] != asc_old or *params[param_weight0] != weight_old[0] or *params[param_weight1] != weight_old[1] or *params[param_weight2] != weight_old[2] or *params[param_weight3] != weight_old[3] ) { + asc_old = *params[param_asc]; + limit_old = *params[param_limit]; + weight_old[0] = *params[param_weight0]; + weight_old[1] = *params[param_weight1]; + weight_old[2] = *params[param_weight2]; + weight_old[3] = *params[param_weight3]; + for (int j = 0; j < strips; j ++) { + strip[j].reset_asc(); + } + broadband.reset_asc(); + } +} + +void multibandlimiter_audio_module::set_sample_rate(uint32_t sr) +{ + srate = sr; + // rebuild buffer + overall_buffer_size = (int)(srate * (100.f / 1000.f) * channels) + channels; // buffer size max attack rate + buffer = (float*) calloc(overall_buffer_size, sizeof(float)); + memset(buffer, 0, overall_buffer_size * sizeof(float)); // reset buffer to zero + pos = 0; + // set srate of all strips + for (int j = 0; j < strips; j ++) { + strip[j].set_sample_rate(srate); + } + broadband.set_sample_rate(srate); +} + +#define BYPASSED_COMPRESSION(index) \ + if(params[param_att##index] != NULL) \ + *params[param_att##index] = 1.0; \ + +#define ACTIVE_COMPRESSION(index) \ + if(params[param_att##index] != NULL) \ + *params[param_att##index] = strip[index].get_attenuation(); \ + +uint32_t multibandlimiter_audio_module::process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask) +{ + bool bypass = *params[param_bypass] > 0.5f; + numsamples += offset; + float batt = 0.f; + if(bypass) { + // everything bypassed + while(offset < numsamples) { + outs[0][offset] = ins[0][offset]; + outs[1][offset] = ins[1][offset]; + ++offset; + } + // displays, too + clip_inL = 0.f; + clip_inR = 0.f; + clip_outL = 0.f; + clip_outR = 0.f; + meter_inL = 0.f; + meter_inR = 0.f; + meter_outL = 0.f; + meter_outR = 0.f; + asc_led = 0.f; + } else { + // process all strips + + // let meters fall a bit + clip_inL -= std::min(clip_inL, numsamples); + clip_inR -= std::min(clip_inR, numsamples); + clip_outL -= std::min(clip_outL, numsamples); + clip_outR -= std::min(clip_outR, numsamples); + asc_led -= std::min(asc_led, numsamples); + meter_inL = 0.f; + meter_inR = 0.f; + meter_outL = 0.f; + meter_outR = 0.f; + float _tmpL[channels]; + float _tmpR[channels]; + while(offset < numsamples) { + float inL = 0.f; + float inR = 0.f; + // cycle through samples + if(!_sanitize) { + inL = ins[0][offset]; + inR = ins[1][offset]; + } + // in level + inR *= *params[param_level_in]; + inL *= *params[param_level_in]; + // even out filters gain reduction + // 3dB - levelled manually (based on default sep and q settings) + switch(mode) { + case 0: + inL *= 1.414213562; + inR *= 1.414213562; + break; + case 1: + inL *= 0.88; + inR *= 0.88; + break; + } + // out vars + float outL = 0.f; + float outR = 0.f; + int j1; + float left; + float right; + float sum_left = 0.f; + float sum_right = 0.f; + bool asc_active = false; + for (int i = 0; i < strips; i++) { + left = inL; + right = inR; + // send trough filters + switch(mode) { + // how many filter passes? (12/36dB) + case 0: + default: + j1 = 0; + break; + case 1: + j1 = 2; + break; + } + for (int j = 0; j <= j1; j++){ + if(i + 1 < strips) { + // do lowpass on all bands except most high + left = lpL[i][j].process(left); + right = lpR[i][j].process(right); + lpL[i][j].sanitize(); + lpR[i][j].sanitize(); + } + if(i - 1 >= 0) { + // do highpass on all bands except most low + left = hpL[i - 1][j].process(left); + right = hpR[i - 1][j].process(right); + hpL[i - 1][j].sanitize(); + hpR[i - 1][j].sanitize(); + } + } + + // remember filtered values for limiting + // (we need multiband_coeff before we can call the limiter bands) + _tmpL[i] = left; + _tmpR[i] = right; + + // sum up for multiband coefficient + sum_left += ((fabs(left) > *params[param_limit]) ? *params[param_limit] * (fabs(left) / left) : left) * weight[i]; + sum_right += ((fabs(right) > *params[param_limit]) ? *params[param_limit] * (fabs(right) / right) : right) * weight[i]; + } // process single strip with filter + + // write multiband coefficient to buffer + buffer[pos] = std::min(*params[param_limit] / std::max(fabs(sum_left), fabs(sum_right)), 1.0); + + for (int i = 0; i < strips; i++) { + // process gain reduction + strip[i].process(_tmpL[i], _tmpR[i], buffer); + // sum up output of limiters + if (solo[i] || no_solo) { + outL += _tmpL[i]; + outR += _tmpR[i]; + } + asc_active = asc_active || strip[i].get_asc(); + } // process single strip again for limiter + float fickdich[0]; + broadband.process(outL, outR, fickdich); + asc_active = asc_active || broadband.get_asc(); + + // should never be used. but hackers are paranoid by default. + // so we make shure NOTHING is above limit + outL = std::max(outL, -*params[param_limit]); + outL = std::min(outL, *params[param_limit]); + outR = std::max(outR, -*params[param_limit]); + outR = std::min(outR, *params[param_limit]); + + batt = broadband.get_attenuation(); + + // autolevel + outL /= *params[param_limit]; + outR /= *params[param_limit]; + + // out level + outL *= *params[param_level_out]; + outR *= *params[param_level_out]; + + // send to output + outs[0][offset] = outL; + outs[1][offset] = outR; + + // clip LED's + if(ins[0][offset] * *params[param_level_in] > 1.f) { + clip_inL = srate >> 3; + } + if(ins[1][offset] * *params[param_level_in] > 1.f) { + clip_inR = srate >> 3; + } + if(outL > 1.f) { + clip_outL = srate >> 3; + } + if(outR > 1.f) { + clip_outR = srate >> 3; + } + // set up in / out meters + if(ins[0][offset] * *params[param_level_in] > meter_inL) { + meter_inL = ins[0][offset] * *params[param_level_in]; + } + if(ins[1][offset] * *params[param_level_in] > meter_inR) { + meter_inR = ins[1][offset] * *params[param_level_in]; + } + if(outL > meter_outL) { + meter_outL = outL; + } + if(outR > meter_outR) { + meter_outR = outR; + } + if(asc_active) { + asc_led = srate >> 3; + } + // next sample + ++offset; + pos = (pos + channels) % buffer_size; + if(pos == 0) _sanitize = false; + } // cycle trough samples + + } // process all strips (no bypass) + + // draw meters + SET_IF_CONNECTED(clip_inL); + SET_IF_CONNECTED(clip_inR); + SET_IF_CONNECTED(clip_outL); + SET_IF_CONNECTED(clip_outR); + SET_IF_CONNECTED(meter_inL); + SET_IF_CONNECTED(meter_inR); + SET_IF_CONNECTED(meter_outL); + SET_IF_CONNECTED(meter_outR); + + if (params[param_asc_led] != NULL) *params[param_asc_led] = asc_led; + + // draw strip meters + if(bypass > 0.5f) { + if(params[param_att0] != NULL) *params[param_att0] = 1.0; + if(params[param_att1] != NULL) *params[param_att1] = 1.0; + if(params[param_att2] != NULL) *params[param_att2] = 1.0; + if(params[param_att3] != NULL) *params[param_att3] = 1.0; + + } else { + if(params[param_att0] != NULL) *params[param_att0] = strip[0].get_attenuation() * batt; + if(params[param_att1] != NULL) *params[param_att1] = strip[1].get_attenuation() * batt; + if(params[param_att2] != NULL) *params[param_att2] = strip[2].get_attenuation() * batt; + if(params[param_att3] != NULL) *params[param_att3] = strip[3].get_attenuation() * batt; + } + // whatever has to be returned x) + return outputs_mask; +} + +bool multibandlimiter_audio_module::get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const +{ + if (!is_active or subindex > 3) + return false; + float ret; + double freq; + int j1; + for (int i = 0; i < points; i++) + { + ret = 1.f; + freq = 20.0 * pow (20000.0 / 20.0, i * 1.0 / points); + switch(mode) { + case 0: + default: + j1 = 0; + break; + case 1: + j1 = 2; + break; + } + for(int j = 0; j <= j1; j ++) { + switch(subindex) { + case 0: + ret *= lpL[0][j].freq_gain(freq, (float)srate); + break; + case 1: + ret *= hpL[0][j].freq_gain(freq, (float)srate); + ret *= lpL[1][j].freq_gain(freq, (float)srate); + break; + case 2: + ret *= hpL[1][j].freq_gain(freq, (float)srate); + ret *= lpL[2][j].freq_gain(freq, (float)srate); + break; + case 3: + ret *= hpL[2][j].freq_gain(freq, (float)srate); + break; + } + } + data[i] = dB_grid(ret); + } + if (*params[param_bypass] > 0.5f) + context->set_source_rgba(0.35, 0.4, 0.2, 0.3); + else { + context->set_source_rgba(0.35, 0.4, 0.2, 1); + context->set_line_width(1.5); + } + return true; +} + +bool multibandlimiter_audio_module::get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const +{ + if (!is_active) { + return false; + } else { + vertical = (subindex & 1) != 0; + return get_freq_gridline(subindex, pos, vertical, legend, context); + } +} diff --git a/plugins/LadspaEffect/calf/src/modules_mod.cpp b/plugins/LadspaEffect/calf/src/modules_mod.cpp new file mode 100644 index 000000000..91c50df70 --- /dev/null +++ b/plugins/LadspaEffect/calf/src/modules_mod.cpp @@ -0,0 +1,753 @@ +/* Calf DSP plugin pack + * Modulation effect plugins + * + * Copyright (C) 2001-2010 Krzysztof Foltman, Markus Schmidt, Thor Harald Johansen and others + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this program; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA + */ +#include +#include +#include +#include + +using namespace dsp; +using namespace calf_plugins; + +#define SET_IF_CONNECTED(name) if (params[AM::param_##name] != NULL) *params[AM::param_##name] = name; + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +void flanger_audio_module::activate() { + left.reset(); + right.reset(); + last_r_phase = *params[par_stereo] * (1.f / 360.f); + left.reset_phase(0.f); + right.reset_phase(last_r_phase); + is_active = true; +} + +void flanger_audio_module::set_sample_rate(uint32_t sr) { + srate = sr; + left.setup(sr); + right.setup(sr); +} + +void flanger_audio_module::deactivate() { + is_active = false; +} + +bool flanger_audio_module::get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const +{ + if (!is_active) + return false; + if (index == par_delay && subindex < 2) + { + set_channel_color(context, subindex); + return ::get_graph(*this, subindex, data, points); + } + return false; +} + +float flanger_audio_module::freq_gain(int subindex, float freq, float srate) const +{ + return (subindex ? right : left).freq_gain(freq, srate); +} + +void flanger_audio_module::params_changed() +{ + float dry = *params[par_dryamount]; + float wet = *params[par_amount]; + float rate = *params[par_rate]; // 0.01*pow(1000.0f,*params[par_rate]); + float min_delay = *params[par_delay] / 1000.0; + float mod_depth = *params[par_depth] / 1000.0; + float fb = *params[par_fb]; + left.set_dry(dry); right.set_dry(dry); + left.set_wet(wet); right.set_wet(wet); + left.set_rate(rate); right.set_rate(rate); + left.set_min_delay(min_delay); right.set_min_delay(min_delay); + left.set_mod_depth(mod_depth); right.set_mod_depth(mod_depth); + left.set_fb(fb); right.set_fb(fb); + float r_phase = *params[par_stereo] * (1.f / 360.f); + clear_reset = false; + if (*params[par_reset] >= 0.5) { + clear_reset = true; + left.reset_phase(0.f); + right.reset_phase(r_phase); + } else { + if (fabs(r_phase - last_r_phase) > 0.0001f) { + right.phase = left.phase; + right.inc_phase(r_phase); + last_r_phase = r_phase; + } + } +} + +void flanger_audio_module::params_reset() +{ + if (clear_reset) { + *params[par_reset] = 0.f; + clear_reset = false; + } +} + +/////////////////////////////////////////////////////////////////////////////////////////////// + +phaser_audio_module::phaser_audio_module() +: left(MaxStages, x1vals[0], y1vals[0]) +, right(MaxStages, x1vals[1], y1vals[1]) +{ + is_active = false; +} + +void phaser_audio_module::set_sample_rate(uint32_t sr) +{ + srate = sr; + left.setup(sr); + right.setup(sr); +} + +void phaser_audio_module::activate() +{ + is_active = true; + left.reset(); + right.reset(); + last_r_phase = *params[par_stereo] * (1.f / 360.f); + left.reset_phase(0.f); + right.reset_phase(last_r_phase); +} + +void phaser_audio_module::deactivate() +{ + is_active = false; +} + +bool phaser_audio_module::get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const +{ + if (!is_active) + return false; + if (subindex < 2) + { + set_channel_color(context, subindex); + return ::get_graph(*this, subindex, data, points); + } + return false; +} + +float phaser_audio_module::freq_gain(int subindex, float freq, float srate) const +{ + return (subindex ? right : left).freq_gain(freq, srate); +} + +bool phaser_audio_module::get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const +{ + return get_freq_gridline(subindex, pos, vertical, legend, context); +} + +void phaser_audio_module::params_changed() +{ + float dry = *params[par_dryamount]; + float wet = *params[par_amount]; + float rate = *params[par_rate]; // 0.01*pow(1000.0f,*params[par_rate]); + float base_frq = *params[par_freq]; + float mod_depth = *params[par_depth]; + float fb = *params[par_fb]; + int stages = (int)*params[par_stages]; + left.set_dry(dry); right.set_dry(dry); + left.set_wet(wet); right.set_wet(wet); + left.set_rate(rate); right.set_rate(rate); + left.set_base_frq(base_frq); right.set_base_frq(base_frq); + left.set_mod_depth(mod_depth); right.set_mod_depth(mod_depth); + left.set_fb(fb); right.set_fb(fb); + left.set_stages(stages); right.set_stages(stages); + float r_phase = *params[par_stereo] * (1.f / 360.f); + clear_reset = false; + if (*params[par_reset] >= 0.5) { + clear_reset = true; + left.reset_phase(0.f); + right.reset_phase(r_phase); + } else { + if (fabs(r_phase - last_r_phase) > 0.0001f) { + right.phase = left.phase; + right.inc_phase(r_phase); + last_r_phase = r_phase; + } + } +} + +void phaser_audio_module::params_reset() +{ + if (clear_reset) { + *params[par_reset] = 0.f; + clear_reset = false; + } +} + +/////////////////////////////////////////////////////////////////////////////////////////////// + +rotary_speaker_audio_module::rotary_speaker_audio_module() +{ + mwhl_value = hold_value = 0.f; + phase_h = phase_l = 0.f; + aspeed_l = 1.f; + aspeed_h = 1.f; + dspeed = 0.f; +} + +void rotary_speaker_audio_module::set_sample_rate(uint32_t sr) +{ + srate = sr; + setup(); +} + +void rotary_speaker_audio_module::setup() +{ + crossover1l.set_lp_rbj(800.f, 0.7, (float)srate); + crossover1r.set_lp_rbj(800.f, 0.7, (float)srate); + crossover2l.set_hp_rbj(800.f, 0.7, (float)srate); + crossover2r.set_hp_rbj(800.f, 0.7, (float)srate); +} + +void rotary_speaker_audio_module::activate() +{ + phase_h = phase_l = 0.f; + maspeed_h = maspeed_l = 0.f; + setup(); +} + +void rotary_speaker_audio_module::deactivate() +{ +} + +void rotary_speaker_audio_module::control_change(int /*channel*/, int ctl, int val) +{ + if (vibrato_mode == 3 && ctl == 64) + { + hold_value = val / 127.f; + set_vibrato(); + return; + } + if (vibrato_mode == 4 && ctl == 1) + { + mwhl_value = val / 127.f; + set_vibrato(); + return; + } +} + +void rotary_speaker_audio_module::params_changed() +{ + set_vibrato(); +} + +void rotary_speaker_audio_module::set_vibrato() +{ + vibrato_mode = fastf2i_drm(*params[par_speed]); + // manual vibrato - do not recalculate speeds as they're not used anyway + if (vibrato_mode == 5) + return; + if (!vibrato_mode) + dspeed = -1; + else { + float speed = vibrato_mode - 1; + if (vibrato_mode == 3) + speed = hold_value; + if (vibrato_mode == 4) + speed = mwhl_value; + dspeed = (speed < 0.5f) ? 0 : 1; + } + update_speed(); +} + +/// Convert RPM speed to delta-phase +uint32_t rotary_speaker_audio_module::rpm2dphase(float rpm) +{ + return (uint32_t)((rpm / (60.0 * srate)) * (1 << 30)) << 2; +} + +/// Set delta-phase variables based on current calculated (and interpolated) RPM speed +void rotary_speaker_audio_module::update_speed() +{ + float speed_h = aspeed_h >= 0 ? (48 + (400-48) * aspeed_h) : (48 * (1 + aspeed_h)); + float speed_l = aspeed_l >= 0 ? 40 + (342-40) * aspeed_l : (40 * (1 + aspeed_l)); + dphase_h = rpm2dphase(speed_h); + dphase_l = rpm2dphase(speed_l); +} + +void rotary_speaker_audio_module::update_speed_manual(float delta) +{ + float ts = *params[par_treblespeed]; + float bs = *params[par_bassspeed]; + incr_towards(maspeed_h, ts, delta * 200, delta * 200); + incr_towards(maspeed_l, bs, delta * 200, delta * 200); + dphase_h = rpm2dphase(maspeed_h); + dphase_l = rpm2dphase(maspeed_l); +} + +/// map a ramp [int] to a sinusoid-like function [0, 65536] +static inline int pseudo_sine_scl(int counter) +{ + // premature optimization is a root of all evil; it can be done with integers only - but later :) + double v = counter * (1.0 / (65536.0 * 32768.0)); + return (int) (32768 + 32768 * (v - v*v*v) * (1.0 / 0.3849)); +} + +/// Increase or decrease aspeed towards raspeed, with required negative and positive rate +inline bool rotary_speaker_audio_module::incr_towards(float &aspeed, float raspeed, float delta_decc, float delta_acc) +{ + if (aspeed < raspeed) { + aspeed = std::min(raspeed, aspeed + delta_acc); + return true; + } + else if (aspeed > raspeed) + { + aspeed = std::max(raspeed, aspeed - delta_decc); + return true; + } + return false; +} + +uint32_t rotary_speaker_audio_module::process(uint32_t offset, uint32_t nsamples, uint32_t inputs_mask, uint32_t outputs_mask) +{ + if (true) + { + crossover2l.set_bp_rbj(2000.f, 0.7, (float)srate); + crossover2r.copy_coeffs(crossover2l); + damper1l.set_bp_rbj(1000.f*pow(4.0, *params[par_test]), 0.7, (float)srate); + damper1r.copy_coeffs(damper1l); + } + else + { + crossover2l.set_hp_rbj(800.f, 0.7, (float)srate); + crossover2r.copy_coeffs(crossover2l); + } + int shift = (int)(300000 * (*params[par_shift])), pdelta = (int)(300000 * (*params[par_spacing])); + int md = (int)(100 * (*params[par_moddepth])); + float mix = 0.5 * (1.0 - *params[par_micdistance]); + float mix2 = *params[par_reflection]; + float mix3 = mix2 * mix2; + float am_depth = *params[par_am_depth]; + for (unsigned int i = 0; i < nsamples; i++) { + float in_l = ins[0][i + offset], in_r = ins[1][i + offset]; + float in_mono = atan(0.5f * (in_l + in_r)); + + int xl = pseudo_sine_scl(phase_l), yl = pseudo_sine_scl(phase_l + 0x40000000); + int xh = pseudo_sine_scl(phase_h), yh = pseudo_sine_scl(phase_h + 0x40000000); + // printf("%d %d %d\n", shift, pdelta, shift + pdelta + 20 * xl); + meter_l = xl; + meter_h = xh; + // float out_hi_l = in_mono - delay.get_interp_1616(shift + md * xh) + delay.get_interp_1616(shift + md * 65536 + pdelta - md * yh) - delay.get_interp_1616(shift + md * 65536 + pdelta + pdelta - md * xh); + // float out_hi_r = in_mono + delay.get_interp_1616(shift + md * 65536 - md * yh) - delay.get_interp_1616(shift + pdelta + md * xh) + delay.get_interp_1616(shift + pdelta + pdelta + md * yh); + float fm_hi_l = delay.get_interp_1616(shift + md * xh) - mix2 * delay.get_interp_1616(shift + md * 65536 + pdelta - md * yh) + mix3 * delay.get_interp_1616(shift + md * 65536 + pdelta + pdelta - md * xh); + float fm_hi_r = delay.get_interp_1616(shift + md * 65536 - md * yh) - mix2 * delay.get_interp_1616(shift + pdelta + md * xh) + mix3 * delay.get_interp_1616(shift + pdelta + pdelta + md * yh); + float out_hi_l = lerp(in_mono, damper1l.process(fm_hi_l), lerp(0.5, xh * 1.0 / 65536.0, am_depth)); + float out_hi_r = lerp(in_mono, damper1r.process(fm_hi_r), lerp(0.5, yh * 1.0 / 65536.0, am_depth)); + + float out_lo_l = lerp(in_mono, delay.get_interp_1616(shift + (md * xl >> 2)), lerp(0.5, yl * 1.0 / 65536.0, am_depth)); // + delay.get_interp_1616(shift + md * 65536 + pdelta - md * yl); + float out_lo_r = lerp(in_mono, delay.get_interp_1616(shift + (md * yl >> 2)), lerp(0.5, xl * 1.0 / 65536.0, am_depth)); // + delay.get_interp_1616(shift + md * 65536 + pdelta - md * yl); + + out_hi_l = crossover2l.process(out_hi_l); // sanitize(out_hi_l); + out_hi_r = crossover2r.process(out_hi_r); // sanitize(out_hi_r); + out_lo_l = crossover1l.process(out_lo_l); // sanitize(out_lo_l); + out_lo_r = crossover1r.process(out_lo_r); // sanitize(out_lo_r); + + float out_l = out_hi_l + out_lo_l; + float out_r = out_hi_r + out_lo_r; + + float mic_l = out_l + mix * (out_r - out_l); + float mic_r = out_r + mix * (out_l - out_r); + + outs[0][i + offset] = mic_l; + outs[1][i + offset] = mic_r; + delay.put(in_mono); + phase_l += dphase_l; + phase_h += dphase_h; + } + crossover1l.sanitize(); + crossover1r.sanitize(); + crossover2l.sanitize(); + crossover2r.sanitize(); + damper1l.sanitize(); + damper1r.sanitize(); + float delta = nsamples * 1.0 / srate; + if (vibrato_mode == 5) + update_speed_manual(delta); + else + { + bool u1 = incr_towards(aspeed_l, dspeed, delta * 0.2, delta * 0.14); + bool u2 = incr_towards(aspeed_h, dspeed, delta, delta * 0.5); + if (u1 || u2) + set_vibrato(); + } + if(params[par_meter_l] != NULL) { + *params[par_meter_l] = (float)meter_l / 65536.0; + } + if(params[par_meter_h] != NULL) { + *params[par_meter_h] = (float)meter_h / 65536.0; + } + return outputs_mask; +} + +/////////////////////////////////////////////////////////////////////////////////////////////// + +multichorus_audio_module::multichorus_audio_module() +{ + is_active = false; + last_r_phase = -1; +} + +void multichorus_audio_module::activate() +{ + is_active = true; + params_changed(); +} + +void multichorus_audio_module::deactivate() +{ + is_active = false; +} + +void multichorus_audio_module::set_sample_rate(uint32_t sr) { + srate = sr; + left.setup(sr); + right.setup(sr); +} + +bool multichorus_audio_module::get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const +{ + if (!is_active) + return false; + int nvoices = (int)*params[par_voices]; + if (index == par_delay && subindex < 3) + { + if (subindex < 2) + set_channel_color(context, subindex); + else { + context->set_source_rgba(0.35, 0.4, 0.2); + context->set_line_width(1.0); + } + return ::get_graph(*this, subindex, data, points); + } + if (index == par_rate && subindex < nvoices) { + const sine_multi_lfo &lfo = left.lfo; + for (int i = 0; i < points; i++) { + float phase = i * 2 * M_PI / points; + // original -65536 to 65535 value + float orig = subindex * lfo.voice_offset + ((lfo.voice_depth >> (30-13)) * 65536.0 * (0.95 * sin(phase) + 1)/ 8192.0) - 65536; + // scale to -1..1 + data[i] = orig / 65536.0; + } + return true; + } + return false; +} + +bool multichorus_audio_module::get_dot(int index, int subindex, float &x, float &y, int &size, cairo_iface *context) const +{ + int voice = subindex >> 1; + int nvoices = (int)*params[par_voices]; + if ((index != par_rate && index != par_depth) || voice >= nvoices) + return false; + + float unit = (1 - *params[par_overlap]); + float scw = 1 + unit * (nvoices - 1); + set_channel_color(context, subindex); + const sine_multi_lfo &lfo = (subindex & 1 ? right : left).lfo; + if (index == par_rate) + { + x = (double)(lfo.phase + lfo.vphase * voice) / 4096.0; + y = 0.95 * sin(x * 2 * M_PI); + y = (voice * unit + (y + 1) / 2) / scw * 2 - 1; + } + else + { + double ph = (double)(lfo.phase + lfo.vphase * voice) / 4096.0; + x = 0.5 + 0.5 * sin(ph * 2 * M_PI); + y = subindex & 1 ? -0.75 : 0.75; + x = (voice * unit + x) / scw; + } + return true; +} + +bool multichorus_audio_module::get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const +{ + if (index == par_rate && !subindex) + { + pos = 0; + vertical = false; + return true; + } + if (index == par_delay) + return get_freq_gridline(subindex, pos, vertical, legend, context); + return false; +} + +float multichorus_audio_module::freq_gain(int subindex, float freq, float srate) const +{ + if (subindex == 2) + return *params[par_amount] * left.post.freq_gain(freq, srate); + return (subindex ? right : left).freq_gain(freq, srate); +} + +void multichorus_audio_module::params_changed() +{ + // delicious copy-pasta from flanger module - it'd be better to keep it common or something + float dry = *params[par_dryamount]; + float wet = *params[par_amount]; + float rate = *params[par_rate]; + float min_delay = *params[par_delay] / 1000.0; + float mod_depth = *params[par_depth] / 1000.0; + float overlap = *params[par_overlap]; + left.set_dry(dry); right.set_dry(dry); + left.set_wet(wet); right.set_wet(wet); + left.set_rate(rate); right.set_rate(rate); + left.set_min_delay(min_delay); right.set_min_delay(min_delay); + left.set_mod_depth(mod_depth); right.set_mod_depth(mod_depth); + int voices = (int)*params[par_voices]; + left.lfo.set_voices(voices); right.lfo.set_voices(voices); + left.lfo.set_overlap(overlap);right.lfo.set_overlap(overlap); + float vphase = *params[par_vphase] * (1.f / 360.f); + left.lfo.vphase = right.lfo.vphase = vphase * (4096 / std::max(voices - 1, 1)); + float r_phase = *params[par_stereo] * (1.f / 360.f); + if (fabs(r_phase - last_r_phase) > 0.0001f) { + right.lfo.phase = left.lfo.phase; + right.lfo.phase += chorus_phase(r_phase * 4096); + last_r_phase = r_phase; + } + left.post.f1.set_bp_rbj(*params[par_freq], *params[par_q], srate); + left.post.f2.set_bp_rbj(*params[par_freq2], *params[par_q], srate); + right.post.f1.copy_coeffs(left.post.f1); + right.post.f2.copy_coeffs(left.post.f2); +} + +uint32_t multichorus_audio_module::process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask) +{ + left.process(outs[0] + offset, ins[0] + offset, numsamples); + right.process(outs[1] + offset, ins[1] + offset, numsamples); + return outputs_mask; // XXXKF allow some delay after input going blank +} + +/// Pulsator by Markus Schmidt +/// +/// This module provides a couple +/// of different LFO's for modulating the level of a signal. +/////////////////////////////////////////////////////////////////////////////////////////////// + +pulsator_audio_module::pulsator_audio_module() +{ + is_active = false; + srate = 0; +// last_generation = 0; + clip_inL = 0.f; + clip_inR = 0.f; + clip_outL = 0.f; + clip_outR = 0.f; + meter_inL = 0.f; + meter_inR = 0.f; + meter_outL = 0.f; + meter_outR = 0.f; +} + +void pulsator_audio_module::activate() +{ + is_active = true; + lfoL.activate(); + lfoR.activate(); + params_changed(); +} +void pulsator_audio_module::deactivate() +{ + is_active = false; + lfoL.deactivate(); + lfoR.deactivate(); +} + +void pulsator_audio_module::params_changed() +{ + lfoL.set_params(*params[param_freq], *params[param_mode], 0.f, srate, *params[param_amount]); + lfoR.set_params(*params[param_freq], *params[param_mode], *params[param_offset], srate, *params[param_amount]); + clear_reset = false; + if (*params[param_reset] >= 0.5) { + clear_reset = true; + lfoL.set_phase(0.f); + lfoR.set_phase(0.f); + } +} + +void pulsator_audio_module::set_sample_rate(uint32_t sr) +{ + srate = sr; +} + +uint32_t pulsator_audio_module::process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask) +{ + bool bypass = *params[param_bypass] > 0.5f; + uint32_t samples = numsamples + offset; + if(bypass) { + // everything bypassed + while(offset < samples) { + outs[0][offset] = ins[0][offset]; + outs[1][offset] = ins[1][offset]; + ++offset; + } + // displays, too + clip_inL = 0.f; + clip_inR = 0.f; + clip_outL = 0.f; + clip_outR = 0.f; + meter_inL = 0.f; + meter_inR = 0.f; + meter_outL = 0.f; + meter_outR = 0.f; + + // LFO's should go on + lfoL.advance(numsamples); + lfoR.advance(numsamples); + + } else { + + clip_inL -= std::min(clip_inL, numsamples); + clip_inR -= std::min(clip_inR, numsamples); + clip_outL -= std::min(clip_outL, numsamples); + clip_outR -= std::min(clip_outR, numsamples); + meter_inL = 0.f; + meter_inR = 0.f; + meter_outL = 0.f; + meter_outR = 0.f; + + // process + while(offset < samples) { + // cycle through samples + float outL = 0.f; + float outR = 0.f; + float inL = ins[0][offset]; + float inR = ins[1][offset]; + // in level + inR *= *params[param_level_in]; + inL *= *params[param_level_in]; + + if(*params[param_mono] > 0.5) { + inL = (inL + inR) * 0.5; + inR = inL; + } + float procL = inL; + float procR = inR; + + procL *= (lfoL.get_value() * 0.5 + *params[param_amount] / 2); + procR *= (lfoR.get_value() * 0.5 + *params[param_amount] / 2); + + outL = procL + inL * (1 - *params[param_amount]); + outR = procR + inR * (1 - *params[param_amount]); + + outL *= *params[param_level_out]; + outR *= *params[param_level_out]; + + // send to output + outs[0][offset] = outL; + outs[1][offset] = outR; + + // clip LED's + if(inL > 1.f) { + clip_inL = srate >> 3; + } + if(inR > 1.f) { + clip_inR = srate >> 3; + } + if(outL > 1.f) { + clip_outL = srate >> 3; + } + if(outR > 1.f) { + clip_outR = srate >> 3; + } + // set up in / out meters + if(inL > meter_inL) { + meter_inL = inL; + } + if(inR > meter_inR) { + meter_inR = inR; + } + if(outL > meter_outL) { + meter_outL = outL; + } + if(outR > meter_outR) { + meter_outR = outR; + } + + // next sample + ++offset; + + // advance lfo's + lfoL.advance(1); + lfoR.advance(1); + } // cycle trough samples + } + // draw meters + SET_IF_CONNECTED(clip_inL) + SET_IF_CONNECTED(clip_inR) + SET_IF_CONNECTED(clip_outL) + SET_IF_CONNECTED(clip_outR) + SET_IF_CONNECTED(meter_inL) + SET_IF_CONNECTED(meter_inR) + SET_IF_CONNECTED(meter_outL) + SET_IF_CONNECTED(meter_outR) + // whatever has to be returned x) + return outputs_mask; +} + +bool pulsator_audio_module::get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const +{ + if (!is_active) { + return false; + } else if(index == param_freq) { + if(subindex == 0) { + context->set_source_rgba(0.35, 0.4, 0.2, 1); + return lfoL.get_graph(data, points, context); + } + if(subindex == 1) { + context->set_source_rgba(0.35, 0.4, 0.2, 0.5); + return lfoR.get_graph(data, points, context); + } + } + return false; +} + +bool pulsator_audio_module::get_dot(int index, int subindex, float &x, float &y, int &size, cairo_iface *context) const +{ + if (!is_active) { + return false; + } else if(index == param_freq) { + if(subindex == 0) { + context->set_source_rgba(0.35, 0.4, 0.2, 1); + return lfoL.get_dot(x, y, size, context); + } + if(subindex == 1) { + context->set_source_rgba(0.35, 0.4, 0.2, 0.5); + return lfoR.get_dot(x, y, size, context); + } + return false; + } + return false; +} + +bool pulsator_audio_module::get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const +{ + if (index == param_freq && !subindex) + { + pos = 0; + vertical = false; + return true; + } + return false; +} diff --git a/plugins/LadspaEffect/calf/src/monosynth.cpp b/plugins/LadspaEffect/calf/src/monosynth.cpp new file mode 100644 index 000000000..d8a0357bd --- /dev/null +++ b/plugins/LadspaEffect/calf/src/monosynth.cpp @@ -0,0 +1,802 @@ +/* Calf DSP Library + * Example audio modules - monosynth + * + * Copyright (C) 2001-2007 Krzysztof Foltman + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this program; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA + */ +#include +#include + +using namespace dsp; +using namespace calf_plugins; +using namespace std; + +float silence[4097]; + +monosynth_audio_module::monosynth_audio_module() +: mod_matrix_impl(mod_matrix_data, &mm_metadata) +, inertia_cutoff(1) +, inertia_pitchbend(1) +, inertia_pressure(64) +{ +} + +void monosynth_audio_module::activate() { + running = false; + output_pos = 0; + queue_note_on = -1; + inertia_pitchbend.set_now(1.f); + lfo_bend = 1.0; + modwheel_value = 0.f; + modwheel_value_int = 0; + inertia_cutoff.set_now(*params[par_cutoff]); + inertia_pressure.set_now(0); + filter.reset(); + filter2.reset(); + stack.clear(); + last_pwshift1 = last_pwshift2 = 0; + last_stretch1 = 65536; + queue_note_on_and_off = false; + prev_wave1 = -1; + prev_wave2 = -1; + wave1 = -1; + wave2 = -1; + queue_note_on = -1; + last_filter_type = -1; +} + +waveform_family *monosynth_audio_module::waves; + +void monosynth_audio_module::precalculate_waves(progress_report_iface *reporter) +{ + float data[1 << MONOSYNTH_WAVE_BITS]; + bandlimiter bl; + + if (waves) + return; + + static waveform_family waves_data[wave_count]; + waves = waves_data; + + enum { S = 1 << MONOSYNTH_WAVE_BITS, HS = S / 2, QS = S / 4, QS3 = 3 * QS }; + float iQS = 1.0 / QS; + + if (reporter) + reporter->report_progress(0, "Precalculating waveforms"); + + // yes these waves don't have really perfect 1/x spectrum because of aliasing + // (so what?) + for (int i = 0 ; i < HS; i++) + data[i] = (float)(i * 1.0 / HS), + data[i + HS] = (float)(i * 1.0 / HS - 1.0f); + waves[wave_saw].make(bl, data); + + // this one is dummy, fake and sham, we're using a difference of two sawtooths for square wave due to PWM + for (int i = 0 ; i < S; i++) + data[i] = (float)(i < HS ? -1.f : 1.f); + waves[wave_sqr].make(bl, data, 4); + + for (int i = 0 ; i < S; i++) + data[i] = (float)(i < (64 * S / 2048)? -1.f : 1.f); + waves[wave_pulse].make(bl, data); + + for (int i = 0 ; i < S; i++) + data[i] = (float)sin(i * M_PI / HS); + waves[wave_sine].make(bl, data); + + for (int i = 0 ; i < QS; i++) { + data[i] = i * iQS, + data[i + QS] = 1 - i * iQS, + data[i + HS] = - i * iQS, + data[i + QS3] = -1 + i * iQS; + } + waves[wave_triangle].make(bl, data); + + for (int i = 0, j = 1; i < S; i++) { + data[i] = -1 + j * 1.0 / HS; + if (i == j) + j *= 2; + } + waves[wave_varistep].make(bl, data); + + for (int i = 0; i < S; i++) { + data[i] = (min(1.f, (float)(i / 64.f))) * (1.0 - i * 1.0 / S) * (-1 + fmod (i * i * 8/ (S * S * 1.0), 2.0)); + } + waves[wave_skewsaw].make(bl, data); + for (int i = 0; i < S; i++) { + data[i] = (min(1.f, (float)(i / 64.f))) * (1.0 - i * 1.0 / S) * (fmod (i * i * 8/ (S * S * 1.0), 2.0) < 1.0 ? -1.0 : +1.0); + } + waves[wave_skewsqr].make(bl, data); + + if (reporter) + reporter->report_progress(50, "Precalculating waveforms"); + + for (int i = 0; i < S; i++) { + if (i < QS3) { + float p = i * 1.0 / QS3; + data[i] = sin(M_PI * p * p * p); + } else { + float p = (i - QS3 * 1.0) / QS; + data[i] = -0.5 * sin(3 * M_PI * p * p); + } + } + waves[wave_test1].make(bl, data); + for (int i = 0; i < S; i++) { + data[i] = exp(-i * 1.0 / HS) * sin(i * M_PI / HS) * cos(2 * M_PI * i / HS); + } + normalize_waveform(data, S); + waves[wave_test2].make(bl, data); + for (int i = 0; i < S; i++) { + //int ii = (i < HS) ? i : S - i; + int ii = HS; + data[i] = (ii * 1.0 / HS) * sin(i * 3 * M_PI / HS + 2 * M_PI * sin(M_PI / 4 + i * 4 * M_PI / HS)) * sin(i * 5 * M_PI / HS + 2 * M_PI * sin(M_PI / 8 + i * 6 * M_PI / HS)); + } + waves[wave_test3].make(bl, data); + for (int i = 0; i < S; i++) { + data[i] = sin(i * 2 * M_PI / HS + sin(i * 2 * M_PI / HS + 0.5 * M_PI * sin(i * 18 * M_PI / HS)) * sin(i * 1 * M_PI / HS + 0.5 * M_PI * sin(i * 11 * M_PI / HS))); + } + waves[wave_test4].make(bl, data); + for (int i = 0; i < S; i++) { + data[i] = sin(i * 2 * M_PI / HS + 0.2 * M_PI * sin(i * 13 * M_PI / HS) + 0.1 * M_PI * sin(i * 37 * M_PI / HS)) * sin(i * M_PI / HS + 0.2 * M_PI * sin(i * 15 * M_PI / HS)); + } + waves[wave_test5].make(bl, data); + for (int i = 0; i < S; i++) { + if (i < HS) + data[i] = sin(i * 2 * M_PI / HS); + else + if (i < 3 * S / 4) + data[i] = sin(i * 4 * M_PI / HS); + else + if (i < 7 * S / 8) + data[i] = sin(i * 8 * M_PI / HS); + else + data[i] = sin(i * 8 * M_PI / HS) * (S - i) / (S / 8); + } + waves[wave_test6].make(bl, data); + for (int i = 0; i < S; i++) { + int j = i >> (MONOSYNTH_WAVE_BITS - 11); + data[i] = (j ^ 0x1D0) * 1.0 / HS - 1; + } + waves[wave_test7].make(bl, data); + for (int i = 0; i < S; i++) { + int j = i >> (MONOSYNTH_WAVE_BITS - 11); + data[i] = -1 + 0.66 * (3 & ((j >> 8) ^ (j >> 10) ^ (j >> 6))); + } + waves[wave_test8].make(bl, data); + if (reporter) + reporter->report_progress(100, ""); + +} + +bool monosynth_audio_module::get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const +{ + monosynth_audio_module::precalculate_waves(NULL); + // printf("get_graph %d %p %d wave1=%d wave2=%d\n", index, data, points, wave1, wave2); + if (index == par_wave1 || index == par_wave2) { + if (subindex) + return false; + enum { S = 1 << MONOSYNTH_WAVE_BITS }; + float value = *params[index]; + int wave = dsp::clip(dsp::fastf2i_drm(value), 0, (int)wave_count - 1); + + uint32_t shift = index == par_wave1 ? last_pwshift1 : last_pwshift2; + if (!running) + shift = (int32_t)(0x78000000 * (*params[index == par_wave1 ? par_pw1 : par_pw2])); + int flag = (wave == wave_sqr); + + shift = (flag ? S/2 : 0) + (shift >> (32 - MONOSYNTH_WAVE_BITS)); + int sign = flag ? -1 : 1; + if (wave == wave_sqr) + wave = wave_saw; + float *waveform = waves[wave].original; + float rnd_start = 1 - *params[par_window1] * 0.5f; + float scl = rnd_start < 1.0 ? 1.f / (1 - rnd_start) : 0.f; + for (int i = 0; i < points; i++) + { + int pos = i * S / points; + float r = 1; + if (index == par_wave1) + { + float ph = i * 1.0 / points; + if (ph < 0.5f) + ph = 1.f - ph; + ph = (ph - rnd_start) * scl; + if (ph < 0) + ph = 0; + r = 1.0 - ph * ph; + pos = int(pos * 1.0 * last_stretch1 / 65536.0 ) % S; + } + data[i] = r * (sign * waveform[pos] + waveform[(pos + shift) & (S - 1)]) / (sign == -1 ? 1 : 2); + } + return true; + } + if (index == par_filtertype) { + if (!running) + return false; + if (subindex > (is_stereo_filter() ? 1 : 0)) + return false; + for (int i = 0; i < points; i++) + { + double freq = 20.0 * pow (20000.0 / 20.0, i * 1.0 / points); + + const dsp::biquad_d1_lerp &f = subindex ? filter2 : filter; + float level = f.freq_gain(freq, srate); + if (!is_stereo_filter()) + level *= filter2.freq_gain(freq, srate); + level *= fgain; + + data[i] = log(level) / log(1024.0) + 0.5; + } + return true; + } + return get_static_graph(index, subindex, *params[index], data, points, context); +} + +void monosynth_audio_module::calculate_buffer_oscs(float lfo1) +{ + int flag1 = (wave1 == wave_sqr); + int flag2 = (wave2 == wave_sqr); + + int32_t shift1 = last_pwshift1; + int32_t shift2 = last_pwshift2; + int32_t stretch1 = last_stretch1; + int32_t shift_target1 = (int32_t)(0x78000000 * dsp::clip11(*params[par_pw1] + lfo1 * *params[par_lfopw] + 0.01f * moddest[moddest_o1pw])); + int32_t shift_target2 = (int32_t)(0x78000000 * dsp::clip11(*params[par_pw2] + lfo1 * *params[par_lfopw] + 0.01f * moddest[moddest_o2pw])); + int32_t stretch_target1 = (int32_t)(65536 * dsp::clip(*params[par_stretch1] + 0.01f * moddest[moddest_o1stretch], 1.f, 16.f)); + int32_t shift_delta1 = ((shift_target1 >> 1) - (last_pwshift1 >> 1)) >> (step_shift - 1); + int32_t shift_delta2 = ((shift_target2 >> 1) - (last_pwshift2 >> 1)) >> (step_shift - 1); + int32_t stretch_delta1 = ((stretch_target1 >> 1) - (last_stretch1 >> 1)) >> (step_shift - 1); + last_pwshift1 = shift_target1; + last_pwshift2 = shift_target2; + last_stretch1 = stretch_target1; + lookup_waveforms(); + + shift1 += (flag1 << 31); + shift2 += (flag2 << 31); + float mix1 = 1 - 2 * flag1, mix2 = 1 - 2 * flag2; + + float new_xfade = dsp::clip(xfade + 0.01f * moddest[moddest_oscmix], 0.f, 1.f); + float cur_xfade = last_xfade; + float xfade_step = (new_xfade - cur_xfade) * (1.0 / step_size); + + float rnd_start = 1 - *params[par_window1] * 0.5f; + float scl = rnd_start < 1.0 ? 1.f / (1 - rnd_start) : 0.f; + + for (uint32_t i = 0; i < step_size; i++) + { + //buffer[i] = lerp(osc1.get_phaseshifted(shift1, mix1), osc2.get_phaseshifted(shift2, mix2), cur_xfade); + float o1phase = osc1.phase / (65536.0 * 65536.0); + if (o1phase < 0.5) + o1phase = 1 - o1phase; + o1phase = (o1phase - rnd_start) * scl; + if (o1phase < 0) + o1phase = 0; + float r = 1.0 - o1phase * o1phase; + buffer[i] = lerp(r * osc1.get_phasedist(stretch1, shift1, mix1), osc2.get_phaseshifted(shift2, mix2), cur_xfade); + osc1.advance(); + osc2.advance(); + shift1 += shift_delta1; + shift2 += shift_delta2; + stretch1 += stretch_delta1; + cur_xfade += xfade_step; + } + last_xfade = new_xfade; +} + +void monosynth_audio_module::calculate_buffer_ser() +{ + filter.big_step(1.0 / step_size); + filter2.big_step(1.0 / step_size); + for (uint32_t i = 0; i < step_size; i++) + { + float wave = buffer[i] * fgain; + wave = filter.process(wave); + wave = filter2.process(wave); + buffer[i] = wave; + fgain += fgain_delta; + } +} + +void monosynth_audio_module::calculate_buffer_single() +{ + filter.big_step(1.0 / step_size); + for (uint32_t i = 0; i < step_size; i++) + { + float wave = buffer[i] * fgain; + wave = filter.process(wave); + buffer[i] = wave; + fgain += fgain_delta; + } +} + +void monosynth_audio_module::calculate_buffer_stereo() +{ + filter.big_step(1.0 / step_size); + filter2.big_step(1.0 / step_size); + for (uint32_t i = 0; i < step_size; i++) + { + float wave1 = buffer[i] * fgain; + buffer[i] = fgain * filter.process(wave1); + buffer2[i] = fgain * filter2.process(wave1); + fgain += fgain_delta; + } +} + +void monosynth_audio_module::lookup_waveforms() +{ + osc1.waveform = waves[wave1 == wave_sqr ? wave_saw : wave1].get_level((uint32_t)(((uint64_t)osc1.phasedelta) * last_stretch1 >> 16)); + osc2.waveform = waves[wave2 == wave_sqr ? wave_saw : wave2].get_level(osc2.phasedelta); + if (!osc1.waveform) osc1.waveform = silence; + if (!osc2.waveform) osc2.waveform = silence; + prev_wave1 = wave1; + prev_wave2 = wave2; +} + +void monosynth_audio_module::delayed_note_on() +{ + force_fadeout = false; + fadeout.reset_soft(); + fadeout2.reset_soft(); + porta_time = 0.f; + start_freq = freq; + target_freq = freq = 440 * pow(2.0, (queue_note_on - 69) / 12.0); + velocity = queue_vel; + ampctl = 1.0 + (queue_vel - 1.0) * *params[par_vel2amp]; + fltctl = 1.0 + (queue_vel - 1.0) * *params[par_vel2filter]; + bool starting = false; + + if (!running) + { + starting = true; + if (legato >= 2) + porta_time = -1.f; + last_xfade = xfade; + osc1.reset(); + osc2.reset(); + filter.reset(); + filter2.reset(); + if (*params[par_lfo1trig] <= 0) + lfo1.reset(); + if (*params[par_lfo2trig] <= 0) + lfo2.reset(); + switch((int)*params[par_oscmode]) + { + case 1: + osc2.phase = 0x80000000; + break; + case 2: + osc2.phase = 0x40000000; + break; + case 3: + osc1.phase = osc2.phase = 0x40000000; + break; + case 4: + osc1.phase = 0x40000000; + osc2.phase = 0xC0000000; + break; + case 5: + // rand() is crap, but I don't have any better RNG in Calf yet + osc1.phase = rand() << 16; + osc2.phase = rand() << 16; + break; + default: + break; + } + running = true; + } + if (legato >= 2 && !gate) + porta_time = -1.f; + gate = true; + stopping = false; + if (starting || !(legato & 1) || envelope1.released()) + envelope1.note_on(); + if (starting || !(legato & 1) || envelope2.released()) + envelope2.note_on(); + envelope1.advance(); + envelope2.advance(); + queue_note_on = -1; + float modsrc[modsrc_count] = { + 1, + velocity, + inertia_pressure.get_last(), + modwheel_value, + (float)envelope1.value, + (float)envelope2.value, + (float)(0.5+0.5*lfo1.last), + (float)(0.5+0.5*lfo2.last) + }; + calculate_modmatrix(moddest, moddest_count, modsrc); + set_frequency(); + lookup_waveforms(); + + if (queue_note_on_and_off) + { + end_note(); + queue_note_on_and_off = false; + } +} + +void monosynth_audio_module::set_sample_rate(uint32_t sr) { + srate = sr; + crate = sr / step_size; + odcr = (float)(1.0 / crate); + fgain = 0.f; + fgain_delta = 0.f; + inertia_cutoff.ramp.set_length(crate / 30); // 1/30s + inertia_pitchbend.ramp.set_length(crate / 30); // 1/30s + master.set_sample_rate(sr); +} + +void monosynth_audio_module::calculate_step() +{ + if (queue_note_on != -1) + delayed_note_on(); + else + if (stopping || !running) + { + running = false; + envelope1.advance(); + envelope2.advance(); + lfo1.get(); + lfo2.get(); + float modsrc[modsrc_count] = { + 1, + velocity, + inertia_pressure.get_last(), + modwheel_value, + (float)envelope1.value, + (float)envelope2.value, + (float)(0.5+0.5*lfo1.last), + (float)(0.5+0.5*lfo2.last) + }; + calculate_modmatrix(moddest, moddest_count, modsrc); + last_stretch1 = (int32_t)(65536 * dsp::clip(*params[par_stretch1] + 0.01f * moddest[moddest_o1stretch], 1.f, 16.f)); + return; + } + lfo1.set_freq(*params[par_lforate], crate); + lfo2.set_freq(*params[par_lfo2rate], crate); + float porta_total_time = *params[par_portamento] * 0.001f; + + if (porta_total_time >= 0.00101f && porta_time >= 0) { + // XXXKF this is criminal, optimize! + float point = porta_time / porta_total_time; + if (point >= 1.0f) { + freq = target_freq; + porta_time = -1; + } else { + freq = start_freq + (target_freq - start_freq) * point; + // freq = start_freq * pow(target_freq / start_freq, point); + porta_time += odcr; + } + } + float lfov1 = lfo1.get() * std::min(1.0f, lfo_clock / *params[par_lfodelay]); + lfov1 = lfov1 * dsp::lerp(1.f, modwheel_value, *params[par_mwhl_lfo]); + float lfov2 = lfo2.get() * std::min(1.0f, lfo_clock / *params[par_lfo2delay]); + lfo_clock += odcr; + if (fabs(*params[par_lfopitch]) > small_value()) + lfo_bend = pow(2.0f, *params[par_lfopitch] * lfov1 * (1.f / 1200.0f)); + inertia_pitchbend.step(); + envelope1.advance(); + envelope2.advance(); + float env1 = envelope1.value, env2 = envelope2.value; + float aenv1 = envelope1.get_amp_value(), aenv2 = envelope2.get_amp_value(); + + // mod matrix + // this should be optimized heavily; I think I'll do it when MIDI in Ardour 3 gets stable :> + float modsrc[modsrc_count] = { + 1, + velocity, + inertia_pressure.get(), + modwheel_value, + (float)env1, + (float)env2, + (float)(0.5+0.5*lfov1), + (float)(0.5+0.5*lfov2) + }; + calculate_modmatrix(moddest, moddest_count, modsrc); + + set_frequency(); + inertia_cutoff.set_inertia(*params[par_cutoff]); + cutoff = inertia_cutoff.get() * pow(2.0f, (lfov1 * *params[par_lfofilter] + env1 * fltctl * *params[par_env1tocutoff] + env2 * fltctl * *params[par_env2tocutoff] + moddest[moddest_cutoff]) * (1.f / 1200.f)); + if (*params[par_keyfollow] > 0.01f) + cutoff *= pow(freq / 264.f, *params[par_keyfollow]); + cutoff = dsp::clip(cutoff , 10.f, 18000.f); + float resonance = *params[par_resonance]; + float e2r1 = *params[par_env1tores]; + resonance = resonance * (1 - e2r1) + (0.7 + (resonance - 0.7) * env1 * env1) * e2r1; + float e2r2 = *params[par_env2tores]; + resonance = resonance * (1 - e2r2) + (0.7 + (resonance - 0.7) * env2 * env2) * e2r2 + moddest[moddest_resonance]; + float cutoff2 = dsp::clip(cutoff * separation, 10.f, 18000.f); + float newfgain = 0.f; + if (filter_type != last_filter_type) + { + filter.y2 = filter.y1 = filter.x2 = filter.x1 = filter.y1; + filter2.y2 = filter2.y1 = filter2.x2 = filter2.x1 = filter2.y1; + last_filter_type = filter_type; + } + switch(filter_type) + { + case flt_lp12: + filter.set_lp_rbj(cutoff, resonance, srate); + filter2.set_null(); + newfgain = min(0.7f, 0.7f / resonance) * ampctl; + break; + case flt_hp12: + filter.set_hp_rbj(cutoff, resonance, srate); + filter2.set_null(); + newfgain = min(0.7f, 0.7f / resonance) * ampctl; + break; + case flt_lp24: + filter.set_lp_rbj(cutoff, resonance, srate); + filter2.set_lp_rbj(cutoff2, resonance, srate); + newfgain = min(0.5f, 0.5f / resonance) * ampctl; + break; + case flt_lpbr: + filter.set_lp_rbj(cutoff, resonance, srate); + filter2.set_br_rbj(cutoff2, 1.0 / resonance, srate); + newfgain = min(0.5f, 0.5f / resonance) * ampctl; + break; + case flt_hpbr: + filter.set_hp_rbj(cutoff, resonance, srate); + filter2.set_br_rbj(cutoff2, 1.0 / resonance, srate); + newfgain = min(0.5f, 0.5f / resonance) * ampctl; + break; + case flt_2lp12: + filter.set_lp_rbj(cutoff, resonance, srate); + filter2.set_lp_rbj(cutoff2, resonance, srate); + newfgain = min(0.7f, 0.7f / resonance) * ampctl; + break; + case flt_bp6: + filter.set_bp_rbj(cutoff, resonance, srate); + filter2.set_null(); + newfgain = ampctl; + break; + case flt_2bp6: + filter.set_bp_rbj(cutoff, resonance, srate); + filter2.set_bp_rbj(cutoff2, resonance, srate); + newfgain = ampctl; + break; + } + float e2a1 = *params[par_env1toamp]; + float e2a2 = *params[par_env2toamp]; + if (e2a1 > 0.f) + newfgain *= aenv1; + if (e2a2 > 0.f) + newfgain *= aenv2; + if (moddest[moddest_attenuation] != 0.f) + newfgain *= dsp::clip(1 - moddest[moddest_attenuation] * moddest[moddest_attenuation], 0.f, 1.f); + fgain_delta = (newfgain - fgain) * (1.0 / step_size); + calculate_buffer_oscs(lfov1); + lfo1.last = lfov1; + lfo2.last = lfov2; + switch(filter_type) + { + case flt_lp24: + case flt_lpbr: + case flt_hpbr: // Oomek's wish + calculate_buffer_ser(); + break; + case flt_lp12: + case flt_hp12: + case flt_bp6: + calculate_buffer_single(); + break; + case flt_2lp12: + case flt_2bp6: + calculate_buffer_stereo(); + break; + } + apply_fadeout(); +} + +void monosynth_audio_module::apply_fadeout() +{ + if (fadeout.undoing) + { + fadeout.process(buffer2, step_size); + if (is_stereo_filter()) + fadeout2.process(buffer2, step_size); + } + else + { + // stop the sound if the amplitude envelope is not running (if there's any) + bool aenv1_on = *params[par_env1toamp] > 0.f, aenv2_on = *params[par_env2toamp] > 0.f; + + bool do_fadeout = force_fadeout; + + // if there's no amplitude envelope at all, the fadeout starts at key release + if (!aenv1_on && !aenv2_on && !gate) + do_fadeout = true; + // if ENV1 modulates amplitude, the fadeout will start on ENV1 end too + if (aenv1_on && envelope1.state == adsr::STOP) + do_fadeout = true; + // if ENV2 modulates amplitude, the fadeout will start on ENV2 end too + if (aenv2_on && envelope2.state == adsr::STOP) + do_fadeout = true; + + if (do_fadeout || fadeout.undoing || fadeout2.undoing) + { + fadeout.process(buffer, step_size); + if (is_stereo_filter()) + fadeout2.process(buffer2, step_size); + if (fadeout.done) + stopping = true; + } + } +} + +void monosynth_audio_module::note_on(int /*channel*/, int note, int vel) +{ + queue_note_on = note; + queue_note_on_and_off = false; + last_key = note; + queue_vel = vel / 127.f; + stack.push(note); +} + +void monosynth_audio_module::note_off(int /*channel*/, int note, int vel) +{ + stack.pop(note); + if (note == queue_note_on) + { + queue_note_on_and_off = true; + return; + } + // If releasing the currently played note, try to get another one from note stack. + if (note == last_key) { + end_note(); + } +} + +void monosynth_audio_module::end_note() +{ + if (stack.count()) + { + int note; + last_key = note = stack.nth(stack.count() - 1); + start_freq = freq; + target_freq = freq = dsp::note_to_hz(note); + porta_time = 0; + set_frequency(); + if (!(legato & 1)) { + envelope1.note_on(); + envelope2.note_on(); + stopping = false; + running = true; + } + return; + } + gate = false; + envelope1.note_off(); + envelope2.note_off(); +} + +void monosynth_audio_module::channel_pressure(int /*channel*/, int value) +{ + inertia_pressure.set_inertia(value * (1.0 / 127.0)); +} + +void monosynth_audio_module::control_change(int /*channel*/, int controller, int value) +{ + switch(controller) + { + case 1: + modwheel_value_int = (modwheel_value_int & 127) | (value << 7); + modwheel_value = modwheel_value_int / 16383.0; + break; + case 33: + modwheel_value_int = (modwheel_value_int & (127 << 7)) | value; + modwheel_value = modwheel_value_int / 16383.0; + break; + case 120: // all sounds off + force_fadeout = true; + // fall through + case 123: // all notes off + gate = false; + queue_note_on = -1; + envelope1.note_off(); + envelope2.note_off(); + stack.clear(); + break; + } +} + +void monosynth_audio_module::deactivate() +{ + gate = false; + running = false; + stopping = false; + envelope1.reset(); + envelope2.reset(); + stack.clear(); +} + +void monosynth_audio_module::set_frequency() +{ + float detune_scaled = (detune - 1); // * log(freq / 440); + if (*params[par_scaledetune] > 0) + detune_scaled *= pow(20.0 / freq, (double)*params[par_scaledetune]); + float p1 = 1, p2 = 1; + if (moddest[moddest_o1detune] != 0) + p1 = pow(2.0, moddest[moddest_o1detune] * (1.0 / 1200.0)); + if (moddest[moddest_o2detune] != 0) + p2 = pow(2.0, moddest[moddest_o2detune] * (1.0 / 1200.0)); + osc1.set_freq(freq * (1 - detune_scaled) * p1 * inertia_pitchbend.get_last() * lfo_bend, srate); + osc2.set_freq(freq * (1 + detune_scaled) * p2 * inertia_pitchbend.get_last() * lfo_bend * xpose, srate); +} + + +void monosynth_audio_module::params_changed() +{ + float sf = 0.001f; + envelope1.set(*params[par_env1attack] * sf, *params[par_env1decay] * sf, std::min(0.999f, *params[par_env1sustain]), *params[par_env1release] * sf, srate / step_size, *params[par_env1fade] * sf); + envelope2.set(*params[par_env2attack] * sf, *params[par_env2decay] * sf, std::min(0.999f, *params[par_env2sustain]), *params[par_env2release] * sf, srate / step_size, *params[par_env2fade] * sf); + filter_type = dsp::fastf2i_drm(*params[par_filtertype]); + separation = pow(2.0, *params[par_cutoffsep] / 1200.0); + wave1 = dsp::clip(dsp::fastf2i_drm(*params[par_wave1]), 0, (int)wave_count - 1); + wave2 = dsp::clip(dsp::fastf2i_drm(*params[par_wave2]), 0, (int)wave_count - 1); + detune = pow(2.0, *params[par_detune] / 1200.0); + xpose = pow(2.0, *params[par_osc2xpose] / 12.0); + xfade = *params[par_oscmix]; + legato = dsp::fastf2i_drm(*params[par_legato]); + master.set_inertia(*params[par_master]); + if (running) + set_frequency(); + if (wave1 != prev_wave1 || wave2 != prev_wave2) + lookup_waveforms(); +} + + +uint32_t monosynth_audio_module::process(uint32_t offset, uint32_t nsamples, uint32_t inputs_mask, uint32_t outputs_mask) +{ + uint32_t op = offset; + uint32_t op_end = offset + nsamples; + int had_data = 0; + while(op < op_end) { + if (output_pos == 0) + calculate_step(); + if(op < op_end) { + uint32_t ip = output_pos; + uint32_t len = std::min(step_size - output_pos, op_end - op); + if (running) + { + had_data = 3; + if (is_stereo_filter()) + for(uint32_t i = 0 ; i < len; i++) { + float vol = master.get(); + outs[0][op + i] = buffer[ip + i] * vol; + outs[1][op + i] = buffer2[ip + i] * vol; + } + else + for(uint32_t i = 0 ; i < len; i++) + outs[0][op + i] = outs[1][op + i] = buffer[ip + i] * master.get(); + } + else + { + dsp::zero(&outs[0][op], len); + dsp::zero(&outs[1][op], len); + } + op += len; + output_pos += len; + if (output_pos == step_size) + output_pos = 0; + } + } + + return had_data; +} + diff --git a/plugins/LadspaEffect/calf/src/organ.cpp b/plugins/LadspaEffect/calf/src/organ.cpp new file mode 100644 index 000000000..fad15edb5 --- /dev/null +++ b/plugins/LadspaEffect/calf/src/organ.cpp @@ -0,0 +1,1095 @@ +/* Calf DSP Library + * Example audio modules - organ + * + * Copyright (C) 2001-2007 Krzysztof Foltman + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this program; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA + */ +#include + +#include +#include +#include + +using namespace std; +using namespace dsp; +using namespace calf_plugins; + +////////////////////////////////////////////////////////////////////////////////////////////////////////// + +organ_audio_module::organ_audio_module() +: drawbar_organ(&par_values) +{ + var_map_curve = "2\n0 1\n1 1\n"; // XXXKF hacky bugfix +} + +void organ_audio_module::activate() +{ + setup(srate); + panic_flag = false; +} + +void organ_audio_module::post_instantiate() +{ + dsp::organ_voice_base::precalculate_waves(progress_report); +} + + +uint32_t organ_audio_module::process(uint32_t offset, uint32_t nsamples, uint32_t inputs_mask, uint32_t outputs_mask) +{ + float *o[2] = { outs[0] + offset, outs[1] + offset }; + if (panic_flag) + { + control_change(120, 0); // stop all sounds + control_change(121, 0); // reset all controllers + panic_flag = false; + } + render_separate(o, nsamples); + return 3; +} + +void organ_audio_module::params_changed() { + for (int i = 0; i < param_count; i++) + ((float *)&par_values)[i] = *params[i]; + + unsigned int old_poly = polyphony_limit; + polyphony_limit = dsp::clip(dsp::fastf2i_drm(*params[par_polyphony]), 1, 32); + if (polyphony_limit < old_poly) + trim_voices(); + + update_params(); +} + +bool organ_audio_module::get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const +{ + if (index == par_master) { + organ_voice_base::precalculate_waves(progress_report); + if (subindex) + return false; + float *waveforms[9]; + int S[9], S2[9]; + enum { small_waves = organ_voice_base::wave_count_small}; + for (int i = 0; i < 9; i++) + { + int wave = dsp::clip((int)(parameters->waveforms[i]), 0, (int)organ_voice_base::wave_count - 1); + if (wave >= small_waves) + { + waveforms[i] = organ_voice_base::get_big_wave(wave - small_waves).original; + S[i] = ORGAN_BIG_WAVE_SIZE; + S2[i] = ORGAN_WAVE_SIZE / 64; + } + else + { + waveforms[i] = organ_voice_base::get_wave(wave).original; + S[i] = S2[i] = ORGAN_WAVE_SIZE; + } + } + for (int i = 0; i < points; i++) + { + float sum = 0.f; + for (int j = 0; j < 9; j++) + { + float shift = parameters->phase[j] * S[j] / 360.0; + sum += parameters->drawbars[j] * waveforms[j][int(parameters->harmonics[j] * i * S2[j] / points + shift) & (S[j] - 1)]; + } + data[i] = sum * 2 / (9 * 8); + } + return true; + } + return false; +} + +uint32_t organ_audio_module::message_run(const void *valid_inputs, void *output_ports) +{ + // silence a default printf (which is kind of a warning about unhandled message_run) + return 0; +} + + +//////////////////////////////////////////////////////////////////////////// + +organ_voice_base::small_wave_family (*organ_voice_base::waves)[organ_voice_base::wave_count_small]; +organ_voice_base::big_wave_family (*organ_voice_base::big_waves)[organ_voice_base::wave_count_big]; + +static void smoothen(bandlimiter &bl, float tmp[ORGAN_WAVE_SIZE]) +{ + bl.compute_spectrum(tmp); + for (int i = 1; i <= ORGAN_WAVE_SIZE / 2; i++) { + bl.spectrum[i] *= 1.0 / sqrt(i); + bl.spectrum[ORGAN_WAVE_SIZE - i] *= 1.0 / sqrt(i); + } + bl.compute_waveform(tmp); + normalize_waveform(tmp, ORGAN_WAVE_SIZE); +} + +static void phaseshift(bandlimiter &bl, float tmp[ORGAN_WAVE_SIZE]) +{ + bl.compute_spectrum(tmp); + for (int i = 1; i <= ORGAN_WAVE_SIZE / 2; i++) { + float frac = i * 2.0 / ORGAN_WAVE_SIZE; + float phase = M_PI / sqrt(frac) ; + complex shift = complex(cos(phase), sin(phase)); + bl.spectrum[i] *= shift; + bl.spectrum[ORGAN_WAVE_SIZE - i] *= conj(shift); + } + bl.compute_waveform(tmp); + normalize_waveform(tmp, ORGAN_WAVE_SIZE); +} + +static void padsynth(bandlimiter blSrc, bandlimiter &blDest, organ_voice_base::big_wave_family &result, int bwscale = 20, float bell_factor = 0, bool foldover = false) +{ + // kept in a vector to avoid putting large arrays on stack + vector >orig_spectrum; + orig_spectrum.resize(ORGAN_WAVE_SIZE / 2); + for (int i = 0; i < ORGAN_WAVE_SIZE / 2; i++) + { + orig_spectrum[i] = blSrc.spectrum[i]; +// printf("@%d = %f\n", i, abs(orig_spectrum[i])); + } + + int periods = (1 << ORGAN_BIG_WAVE_SHIFT) * ORGAN_BIG_WAVE_SIZE / ORGAN_WAVE_SIZE; + for (int i = 0; i <= ORGAN_BIG_WAVE_SIZE / 2; i++) { + blDest.spectrum[i] = 0; + } + int MAXHARM = (ORGAN_WAVE_SIZE >> (1 + ORGAN_BIG_WAVE_SHIFT)); + for (int i = 1; i <= MAXHARM; i++) { + //float esc = 0.25 * (1 + 0.5 * log(i)); + float esc = 0.5; + float amp = abs(blSrc.spectrum[i]); + // fade out starting from half + if (i >= MAXHARM / 2) { + float pos = (i - MAXHARM/2) * 1.0 / (MAXHARM / 2); + amp *= 1.0 - pos; + amp *= 1.0 - pos; + } + int bw = 1 + 20 * i; + float sum = 1; + int delta = 1; + if (bw > 20) delta = bw / 20; + for (int j = delta; j <= bw; j+=delta) + { + float p = j * 1.0 / bw; + sum += 2 * exp(-p * p * esc); + } + if (sum < 0.0001) + continue; + amp *= (ORGAN_BIG_WAVE_SIZE / ORGAN_WAVE_SIZE); + amp /= sum; + int orig = i * periods + bell_factor * cos(i); + if (orig > 0 && orig < ORGAN_BIG_WAVE_SIZE / 2) + blDest.spectrum[orig] += amp; + for (int j = delta; j <= bw; j += delta) + { + float p = j * 1.0 / bw; + float val = amp * exp(-p * p * esc); + int dist = j * bwscale / 40; + int pos = orig + dist; + if (pos < 1 || pos >= ORGAN_BIG_WAVE_SIZE / 2) + continue; + int pos2 = orig - dist; + if (pos2 < 1 || pos2 >= ORGAN_BIG_WAVE_SIZE / 2) + continue; + blDest.spectrum[pos] += val; + if (j) + blDest.spectrum[pos2] += val; + } + } + for (int i = 1; i <= ORGAN_BIG_WAVE_SIZE / 2; i++) { + float phase = M_PI * 2 * (rand() & 255) / 256; + complex shift = complex(cos(phase), sin(phase)); + blDest.spectrum[i] *= shift; +// printf("@%d = %f\n", i, abs(blDest.spectrum[i])); + + blDest.spectrum[ORGAN_BIG_WAVE_SIZE - i] = conj(blDest.spectrum[i]); + } + // same as above - put large array on heap to avoid stack overflow in ingen + vector tmp; + tmp.resize(ORGAN_BIG_WAVE_SIZE); + float *ptmp = &tmp.front(); + blDest.compute_waveform(ptmp); + normalize_waveform(ptmp, ORGAN_BIG_WAVE_SIZE); + blDest.compute_spectrum(ptmp); + + // limit is 1/2 of the number of harmonics of the original wave + result.make_from_spectrum(blDest, foldover, ORGAN_WAVE_SIZE >> (1 + ORGAN_BIG_WAVE_SHIFT)); + memcpy(result.original, result.begin()->second, sizeof(result.original)); + #if 0 + blDest.compute_waveform(result); + normalize_waveform(result, ORGAN_BIG_WAVE_SIZE); + result[ORGAN_BIG_WAVE_SIZE] = result[0]; + for (int i =0 ; ireport_progress(floor(progress / totalwaves), "Precalculating large waveforms"); } } while(0) + +void organ_voice_base::update_pitch() +{ + float phase = dsp::midi_note_to_phase(note, 100 * parameters->global_transpose + parameters->global_detune, sample_rate_ref); + dpphase.set((long int) (phase * parameters->percussion_harmonic * parameters->pitch_bend)); + moddphase.set((long int) (phase * parameters->percussion_fm_harmonic * parameters->pitch_bend)); +} + +void organ_voice_base::precalculate_waves(progress_report_iface *reporter) +{ + static bool inited = false; + if (!inited) + { + static organ_voice_base::small_wave_family waves[organ_voice_base::wave_count_small]; + static organ_voice_base::big_wave_family big_waves[organ_voice_base::wave_count_big]; + organ_voice_base::waves = &waves; + organ_voice_base::big_waves = &big_waves; + + float progress = 0.0; + int totalwaves = 1 + wave_count_big; + if (reporter) + reporter->report_progress(0, "Precalculating small waveforms"); + float tmp[ORGAN_WAVE_SIZE]; + static bandlimiter bl; + static bandlimiter blBig; + for (int i = 0; i < ORGAN_WAVE_SIZE; i++) + tmp[i] = sin(i * 2 * M_PI / ORGAN_WAVE_SIZE); + waves[wave_sine].make(bl, tmp); + for (int i = 0; i < ORGAN_WAVE_SIZE; i++) + tmp[i] = (i < (ORGAN_WAVE_SIZE / 16)) ? 1 : 0; + normalize_waveform(tmp, ORGAN_WAVE_SIZE); + waves[wave_pulse].make(bl, tmp); + for (int i = 0; i < ORGAN_WAVE_SIZE; i++) + tmp[i] = i < (ORGAN_WAVE_SIZE / 2) ? sin(i * 2 * 2 * M_PI / ORGAN_WAVE_SIZE) : 0; + waves[wave_sinepl1].make(bl, tmp); + for (int i = 0; i < ORGAN_WAVE_SIZE; i++) + tmp[i] = i < (ORGAN_WAVE_SIZE / 3) ? sin(i * 3 * 2 * M_PI / ORGAN_WAVE_SIZE) : 0; + waves[wave_sinepl2].make(bl, tmp); + for (int i = 0; i < ORGAN_WAVE_SIZE; i++) + tmp[i] = i < (ORGAN_WAVE_SIZE / 4) ? sin(i * 4 * 2 * M_PI / ORGAN_WAVE_SIZE) : 0; + waves[wave_sinepl3].make(bl, tmp); + for (int i = 0; i < ORGAN_WAVE_SIZE; i++) + tmp[i] = (i < (ORGAN_WAVE_SIZE / 2)) ? 1 : -1; + normalize_waveform(tmp, ORGAN_WAVE_SIZE); + waves[wave_sqr].make(bl, tmp); + for (int i = 0; i < ORGAN_WAVE_SIZE; i++) + tmp[i] = -1 + (i * 2.0 / ORGAN_WAVE_SIZE); + normalize_waveform(tmp, ORGAN_WAVE_SIZE); + waves[wave_saw].make(bl, tmp); + + for (int i = 0; i < ORGAN_WAVE_SIZE; i++) + tmp[i] = (i < (ORGAN_WAVE_SIZE / 2)) ? 1 : -1; + normalize_waveform(tmp, ORGAN_WAVE_SIZE); + smoothen(bl, tmp); + waves[wave_ssqr].make(bl, tmp); + + for (int i = 0; i < ORGAN_WAVE_SIZE; i++) + tmp[i] = -1 + (i * 2.0 / ORGAN_WAVE_SIZE); + normalize_waveform(tmp, ORGAN_WAVE_SIZE); + smoothen(bl, tmp); + waves[wave_ssaw].make(bl, tmp); + + for (int i = 0; i < ORGAN_WAVE_SIZE; i++) + tmp[i] = (i < (ORGAN_WAVE_SIZE / 16)) ? 1 : 0; + normalize_waveform(tmp, ORGAN_WAVE_SIZE); + smoothen(bl, tmp); + waves[wave_spls].make(bl, tmp); + for (int i = 0; i < ORGAN_WAVE_SIZE; i++) + tmp[i] = i < (ORGAN_WAVE_SIZE / 1.5) ? sin(i * 1.5 * 2 * M_PI / ORGAN_WAVE_SIZE) : 0; + normalize_waveform(tmp, ORGAN_WAVE_SIZE); + waves[wave_sinepl05].make(bl, tmp); + for (int i = 0; i < ORGAN_WAVE_SIZE; i++) + tmp[i] = i < (ORGAN_WAVE_SIZE / 1.5) ? (i < ORGAN_WAVE_SIZE / 3 ? -1 : +1) : 0; + normalize_waveform(tmp, ORGAN_WAVE_SIZE); + waves[wave_sqr05].make(bl, tmp); + for (int i = 0; i < ORGAN_WAVE_SIZE; i++) + tmp[i] = sin(i * M_PI / ORGAN_WAVE_SIZE); + normalize_waveform(tmp, ORGAN_WAVE_SIZE); + waves[wave_halfsin].make(bl, tmp); + for (int i = 0; i < ORGAN_WAVE_SIZE; i++) + tmp[i] = sin(i * 3 * M_PI / ORGAN_WAVE_SIZE); + normalize_waveform(tmp, ORGAN_WAVE_SIZE); + waves[wave_clvg].make(bl, tmp); + for (int i = 0; i < ORGAN_WAVE_SIZE; i++) + { + float ph = i * 2 * M_PI / ORGAN_WAVE_SIZE; + float fm = 0.3 * sin(6*ph) + 0.2 * sin(11*ph) + 0.2 * cos(17*ph) - 0.2 * cos(19*ph); + tmp[i] = sin(5*ph + fm) + 0.7 * cos(7*ph - fm); + } + normalize_waveform(tmp, ORGAN_WAVE_SIZE); + waves[wave_bell].make(bl, tmp, true); + for (int i = 0; i < ORGAN_WAVE_SIZE; i++) + { + float ph = i * 2 * M_PI / ORGAN_WAVE_SIZE; + float fm = 0.3 * sin(3*ph) + 0.3 * sin(11*ph) + 0.3 * cos(17*ph) - 0.3 * cos(19*ph) + 0.3 * cos(25*ph) - 0.3 * cos(31*ph) + 0.3 * cos(37*ph); + tmp[i] = sin(3*ph + fm) + cos(7*ph - fm); + } + normalize_waveform(tmp, ORGAN_WAVE_SIZE); + waves[wave_bell2].make(bl, tmp, true); + for (int i = 0; i < ORGAN_WAVE_SIZE; i++) + { + float ph = i * 2 * M_PI / ORGAN_WAVE_SIZE; + float fm = 0.5 * sin(3*ph) + 0.3 * sin(5*ph) + 0.3 * cos(6*ph) - 0.3 * cos(9*ph); + tmp[i] = sin(4*ph + fm) + cos(ph - fm); + } + normalize_waveform(tmp, ORGAN_WAVE_SIZE); + waves[wave_w1].make(bl, tmp); + for (int i = 0; i < ORGAN_WAVE_SIZE; i++) + { + float ph = i * 2 * M_PI / ORGAN_WAVE_SIZE; + tmp[i] = sin(ph) * sin(2 * ph) * sin(4 * ph) * sin(8 * ph); + } + normalize_waveform(tmp, ORGAN_WAVE_SIZE); + waves[wave_w2].make(bl, tmp); + for (int i = 0; i < ORGAN_WAVE_SIZE; i++) + { + float ph = i * 2 * M_PI / ORGAN_WAVE_SIZE; + tmp[i] = sin(ph) * sin(3 * ph) * sin(5 * ph) * sin(7 * ph) * sin(9 * ph); + } + normalize_waveform(tmp, ORGAN_WAVE_SIZE); + waves[wave_w3].make(bl, tmp); + for (int i = 0; i < ORGAN_WAVE_SIZE; i++) + { + float ph = i * 2 * M_PI / ORGAN_WAVE_SIZE; + tmp[i] = sin(ph + 2 * sin(ph + 2 * sin(ph))); + } + normalize_waveform(tmp, ORGAN_WAVE_SIZE); + waves[wave_w4].make(bl, tmp); + for (int i = 0; i < ORGAN_WAVE_SIZE; i++) + { + float ph = i * 2 * M_PI / ORGAN_WAVE_SIZE; + tmp[i] = ph * sin(ph); + } + normalize_waveform(tmp, ORGAN_WAVE_SIZE); + waves[wave_w5].make(bl, tmp); + for (int i = 0; i < ORGAN_WAVE_SIZE; i++) + { + float ph = i * 2 * M_PI / ORGAN_WAVE_SIZE; + tmp[i] = ph * sin(ph) + (2 * M_PI - ph) * sin(2 * ph); + } + normalize_waveform(tmp, ORGAN_WAVE_SIZE); + waves[wave_w6].make(bl, tmp); + for (int i = 0; i < ORGAN_WAVE_SIZE; i++) + { + float ph = i * 1.0 / ORGAN_WAVE_SIZE; + tmp[i] = exp(-ph * ph); + } + normalize_waveform(tmp, ORGAN_WAVE_SIZE); + waves[wave_w7].make(bl, tmp); + for (int i = 0; i < ORGAN_WAVE_SIZE; i++) + { + float ph = i * 1.0 / ORGAN_WAVE_SIZE; + tmp[i] = exp(-ph * sin(2 * M_PI * ph)); + } + normalize_waveform(tmp, ORGAN_WAVE_SIZE); + waves[wave_w8].make(bl, tmp); + for (int i = 0; i < ORGAN_WAVE_SIZE; i++) + { + float ph = i * 1.0 / ORGAN_WAVE_SIZE; + tmp[i] = sin(2 * M_PI * ph * ph); + } + normalize_waveform(tmp, ORGAN_WAVE_SIZE); + waves[wave_w9].make(bl, tmp); + + for (int i = 0; i < ORGAN_WAVE_SIZE; i++) + tmp[i] = -1 + (i * 2.0 / ORGAN_WAVE_SIZE); + normalize_waveform(tmp, ORGAN_WAVE_SIZE); + phaseshift(bl, tmp); + waves[wave_dsaw].make(bl, tmp); + + for (int i = 0; i < ORGAN_WAVE_SIZE; i++) + tmp[i] = (i < (ORGAN_WAVE_SIZE / 2)) ? 1 : -1; + normalize_waveform(tmp, ORGAN_WAVE_SIZE); + phaseshift(bl, tmp); + waves[wave_dsqr].make(bl, tmp); + + for (int i = 0; i < ORGAN_WAVE_SIZE; i++) + tmp[i] = (i < (ORGAN_WAVE_SIZE / 16)) ? 1 : 0; + normalize_waveform(tmp, ORGAN_WAVE_SIZE); + phaseshift(bl, tmp); + waves[wave_dpls].make(bl, tmp); + + LARGE_WAVEFORM_PROGRESS(); + for (int i = 0; i < ORGAN_WAVE_SIZE; i++) + tmp[i] = -1 + (i * 2.0 / ORGAN_WAVE_SIZE); + normalize_waveform(tmp, ORGAN_WAVE_SIZE); + bl.compute_spectrum(tmp); + padsynth(bl, blBig, big_waves[wave_strings - wave_count_small], 15); + + LARGE_WAVEFORM_PROGRESS(); + for (int i = 0; i < ORGAN_WAVE_SIZE; i++) + tmp[i] = -1 + (i * 2.0 / ORGAN_WAVE_SIZE); + normalize_waveform(tmp, ORGAN_WAVE_SIZE); + bl.compute_spectrum(tmp); + padsynth(bl, blBig, big_waves[wave_strings2 - wave_count_small], 40); + + LARGE_WAVEFORM_PROGRESS(); + for (int i = 0; i < ORGAN_WAVE_SIZE; i++) + tmp[i] = sin(i * 2 * M_PI / ORGAN_WAVE_SIZE); + normalize_waveform(tmp, ORGAN_WAVE_SIZE); + bl.compute_spectrum(tmp); + padsynth(bl, blBig, big_waves[wave_sinepad - wave_count_small], 20); + + LARGE_WAVEFORM_PROGRESS(); + for (int i = 0; i < ORGAN_WAVE_SIZE; i++) + { + float ph = i * 2 * M_PI / ORGAN_WAVE_SIZE; + float fm = 0.3 * sin(6*ph) + 0.2 * sin(11*ph) + 0.2 * cos(17*ph) - 0.2 * cos(19*ph); + tmp[i] = sin(5*ph + fm) + 0.7 * cos(7*ph - fm); + } + normalize_waveform(tmp, ORGAN_WAVE_SIZE); + bl.compute_spectrum(tmp); + padsynth(bl, blBig, big_waves[wave_bellpad - wave_count_small], 30, 30, true); + + LARGE_WAVEFORM_PROGRESS(); + for (int i = 0; i < ORGAN_WAVE_SIZE; i++) + { + float ph = i * 2 * M_PI / ORGAN_WAVE_SIZE; + float fm = 0.3 * sin(3*ph) + 0.2 * sin(4*ph) + 0.2 * cos(5*ph) - 0.2 * cos(6*ph); + tmp[i] = sin(2*ph + fm) + 0.7 * cos(3*ph - fm); + } + normalize_waveform(tmp, ORGAN_WAVE_SIZE); + bl.compute_spectrum(tmp); + padsynth(bl, blBig, big_waves[wave_space - wave_count_small], 30, 30); + + LARGE_WAVEFORM_PROGRESS(); + for (int i = 0; i < ORGAN_WAVE_SIZE; i++) + { + float ph = i * 2 * M_PI / ORGAN_WAVE_SIZE; + float fm = 0.5 * sin(ph) + 0.5 * sin(2*ph) + 0.5 * sin(3*ph); + tmp[i] = sin(ph + fm) + 0.5 * cos(7*ph - 2 * fm) + 0.25 * cos(13*ph - 4 * fm); + } + normalize_waveform(tmp, ORGAN_WAVE_SIZE); + bl.compute_spectrum(tmp); + padsynth(bl, blBig, big_waves[wave_choir - wave_count_small], 50, 10); + + LARGE_WAVEFORM_PROGRESS(); + for (int i = 0; i < ORGAN_WAVE_SIZE; i++) + { + float ph = i * 2 * M_PI / ORGAN_WAVE_SIZE; + float fm = sin(ph) ; + tmp[i] = sin(ph + fm) + 0.25 * cos(11*ph - 2 * fm) + 0.125 * cos(23*ph - 2 * fm) + 0.0625 * cos(49*ph - 2 * fm); + } + normalize_waveform(tmp, ORGAN_WAVE_SIZE); + bl.compute_spectrum(tmp); + padsynth(bl, blBig, big_waves[wave_choir2 - wave_count_small], 50, 10); + + LARGE_WAVEFORM_PROGRESS(); + for (int i = 0; i < ORGAN_WAVE_SIZE; i++) + { + float ph = i * 2 * M_PI / ORGAN_WAVE_SIZE; + float fm = sin(ph) ; + tmp[i] = sin(ph + 4 * fm) + 0.5 * sin(2 * ph + 4 * ph); + } + normalize_waveform(tmp, ORGAN_WAVE_SIZE); + bl.compute_spectrum(tmp); + padsynth(bl, blBig, big_waves[wave_choir3 - wave_count_small], 50, 10); + LARGE_WAVEFORM_PROGRESS(); + + inited = true; + } +} + +organ_voice_base::organ_voice_base(organ_parameters *_parameters, int &_sample_rate_ref, bool &_released_ref) +: parameters(_parameters) +, sample_rate_ref(_sample_rate_ref) +, released_ref(_released_ref) +{ + note = -1; +} + +void organ_voice_base::render_percussion_to(float (*buf)[2], int nsamples) +{ + if (note == -1) + return; + + if (!pamp.get_active()) + return; + if (parameters->percussion_level < small_value()) + return; + float level = parameters->percussion_level * 9; + static float zeros[ORGAN_WAVE_SIZE]; + // XXXKF the decay needs work! + double age_const = parameters->perc_decay_const; + double fm_age_const = parameters->perc_fm_decay_const; + int timbre = parameters->get_percussion_wave(); + if (timbre < 0 || timbre >= wave_count_small) + return; + int timbre2 = parameters->get_percussion_fm_wave(); + if (timbre2 < 0 || timbre2 >= wave_count_small) + timbre2 = wave_sine; + float *fmdata = (*waves)[timbre2].get_level(moddphase.get()); + if (!fmdata) + fmdata = zeros; + float *data = (*waves)[timbre].get_level(dpphase.get()); + if (!data) { + pamp.deactivate(); + return; + } + float s = parameters->percussion_stereo * ORGAN_WAVE_SIZE * (0.5 / 360.0); + for (int i = 0; i < nsamples; i++) { + float fm = wave(fmdata, modphase); + fm *= ORGAN_WAVE_SIZE * parameters->percussion_fm_depth * fm_amp.get(); + modphase += moddphase; + fm_amp.age_exp(fm_age_const, 1.0 / 32768.0); + + float lamp = level * pamp.get(); + buf[i][0] += lamp * wave(data, pphase + dsp::fixed_point(fm - s)); + buf[i][1] += lamp * wave(data, pphase + dsp::fixed_point(fm + s)); + if (released_ref) + pamp.age_lin(rel_age_const,0.0); + else + pamp.age_exp(age_const, 1.0 / 32768.0); + pphase += dpphase; + } +} + +void organ_voice_base::perc_reset() +{ + pphase = 0; + modphase = 0; + dpphase = 0; + moddphase = 0; + note = -1; +} + +////////////////////////////////////////////////////////////////////////////////////////////////////// + +void organ_vibrato::reset() +{ + for (int i = 0; i < VibratoSize; i++) + vibrato_x1[i][0] = vibrato_y1[i][0] = vibrato_x1[i][1] = vibrato_y1[i][1] = 0.f; + vibrato[0].a0 = vibrato[1].a0 = 0; + lfo_phase = 0.f; +} + +void organ_vibrato::process(organ_parameters *parameters, float (*data)[2], unsigned int len, float sample_rate) +{ + float lfo1 = lfo_phase < 0.5 ? 2 * lfo_phase : 2 - 2 * lfo_phase; + float lfo_phase2 = lfo_phase + parameters->lfo_phase * (1.0 / 360.0); + if (lfo_phase2 >= 1.0) + lfo_phase2 -= 1.0; + float lfo2 = lfo_phase2 < 0.5 ? 2 * lfo_phase2 : 2 - 2 * lfo_phase2; + lfo_phase += parameters->lfo_rate * len / sample_rate; + if (lfo_phase >= 1.0) + lfo_phase -= 1.0; + if (!len) + return; + float olda0[2] = {vibrato[0].a0, vibrato[1].a0}; + vibrato[0].set_ap(3000 + 7000 * parameters->lfo_amt * lfo1 * lfo1, sample_rate); + vibrato[1].set_ap(3000 + 7000 * parameters->lfo_amt * lfo2 * lfo2, sample_rate); + float ilen = 1.0 / len; + float deltaa0[2] = {(vibrato[0].a0 - olda0[0])*ilen, (vibrato[1].a0 - olda0[1])*ilen}; + + float vib_wet = parameters->lfo_wet; + for (int c = 0; c < 2; c++) + { + for (unsigned int i = 0; i < len; i++) + { + float v = data[i][c]; + float v0 = v; + float coeff = olda0[c] + deltaa0[c] * i; + for (int t = 0; t < VibratoSize; t++) + v = vibrato[c].process_ap(v, vibrato_x1[t][c], vibrato_y1[t][c], coeff); + + data[i][c] += (v - v0) * vib_wet; + } + for (int t = 0; t < VibratoSize; t++) + { + sanitize(vibrato_x1[t][c]); + sanitize(vibrato_y1[t][c]); + } + } +} + +void scanner_vibrato::reset() +{ + legacy.reset(); + for (int i = 0; i < ScannerSize; i++) + scanner[i].reset(); + lfo_phase = 0.f; +} + +void scanner_vibrato::process(organ_parameters *parameters, float (*data)[2], unsigned int len, float sample_rate) +{ + if (!len) + return; + + int vtype = (int)parameters->lfo_type; + if (!vtype || vtype > organ_enums::lfotype_cvfull) + { + legacy.process(parameters, data, len, sample_rate); + return; + } + + // I bet the original components of the line box had some tolerance, + // hence two different values of cutoff frequency + scanner[0].set_lp_rbj(4000, 0.707, sample_rate); + scanner[1].set_lp_rbj(4200, 0.707, sample_rate); + for (int t = 2; t < ScannerSize; t ++) + { + scanner[t].copy_coeffs(scanner[t & 1]); + } + + float lfo_phase2 = lfo_phase + parameters->lfo_phase * (1.0 / 360.0); + if (lfo_phase2 >= 1.0) + lfo_phase2 -= 1.0; + float vib_wet = parameters->lfo_wet; + float dphase = parameters->lfo_rate / sample_rate; + static const int v1[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 8, 8 }; + static const int v2[] = { 0, 1, 2, 4, 6, 8, 9, 10, 12 }; + static const int v3[] = { 0, 1, 3, 6, 11, 12, 15, 17, 18, 18, 18 }; + static const int vfull[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 18 }; + static const int *vtypes[] = { NULL, v1, v2, v3, vfull }; + const int *vib = vtypes[vtype]; + + float vibamt = 8 * parameters->lfo_amt; + if (vtype == organ_enums::lfotype_cvfull) + vibamt = 17 * parameters->lfo_amt; + for (unsigned int i = 0; i < len; i++) + { + float line[ScannerSize + 1]; + float v0 = (data[i][0] + data[i][1]) * 0.5; + + line[0] = v0; + for (int t = 0; t < ScannerSize; t++) + line[t + 1] = scanner[t].process(line[t]) * 1.03; + + float lfo1 = lfo_phase < 0.5 ? 2 * lfo_phase : 2 - 2 * lfo_phase; + float lfo2 = lfo_phase2 < 0.5 ? 2 * lfo_phase2 : 2 - 2 * lfo_phase2; + + float pos = vibamt * lfo1; + int ipos = (int)pos; + float vl = lerp(line[vib[ipos]], line[vib[ipos + 1]], pos - ipos); + + pos = vibamt * lfo2; + ipos = (int)pos; + float vr = lerp(line[vib[ipos]], line[vib[ipos + 1]], pos - ipos); + + lfo_phase += dphase; + if (lfo_phase >= 1.0) + lfo_phase -= 1.0; + lfo_phase2 += dphase; + if (lfo_phase2 >= 1.0) + lfo_phase2 -= 1.0; + + data[i][0] += (vl - v0) * vib_wet; + data[i][1] += (vr - v0) * vib_wet; + } + for (int t = 0; t < ScannerSize; t++) + { + scanner[t].sanitize(); + } +} +////////////////////////////////////////////////////////////////////////////////////////////////////// + +void organ_voice::update_pitch() +{ + organ_voice_base::update_pitch(); + dphase.set(dsp::midi_note_to_phase(note, 100 * parameters->global_transpose + parameters->global_detune, sample_rate) * inertia_pitchbend.get_last()); +} + +void organ_voice::render_block() { + if (note == -1) + return; + + dsp::zero(&output_buffer[0][0], Channels * BlockSize); + dsp::zero(&aux_buffers[1][0][0], 2 * Channels * BlockSize); + if (!amp.get_active()) + { + if (use_percussion()) + render_percussion_to(output_buffer, BlockSize); + return; + } + + inertia_pitchbend.set_inertia(parameters->pitch_bend); + inertia_pitchbend.step(); + update_pitch(); + dsp::fixed_point tphase, tdphase; + unsigned int foldvalue = parameters->foldvalue * inertia_pitchbend.get_last(); + int vibrato_mode = fastf2i_drm(parameters->lfo_mode); + for (int h = 0; h < 9; h++) + { + float amp = parameters->drawbars[h]; + if (amp < small_value()) + continue; + float *data; + dsp::fixed_point hm = dsp::fixed_point(parameters->multiplier[h]); + int waveid = (int)parameters->waveforms[h]; + if (waveid < 0 || waveid >= wave_count) + waveid = 0; + + uint32_t rate = (dphase * hm).get(); + if (waveid >= wave_count_small) + { + float *data = (*big_waves)[waveid - wave_count_small].get_level(rate >> (ORGAN_BIG_WAVE_BITS - ORGAN_WAVE_BITS + ORGAN_BIG_WAVE_SHIFT)); + if (!data) + continue; + hm.set(hm.get() >> ORGAN_BIG_WAVE_SHIFT); + dsp::fixed_point tphase, tdphase; + tphase.set(((phase * hm).get()) + parameters->phaseshift[h]); + tdphase.set(rate >> ORGAN_BIG_WAVE_SHIFT); + float ampl = amp * 0.5f * (1 - parameters->pan[h]); + float ampr = amp * 0.5f * (1 + parameters->pan[h]); + float (*out)[Channels] = aux_buffers[dsp::fastf2i_drm(parameters->routing[h])]; + + for (int i=0; i < (int)BlockSize; i++) { + float wv = big_wave(data, tphase); + out[i][0] += wv * ampl; + out[i][1] += wv * ampr; + tphase += tdphase; + } + } + else + { + unsigned int foldback = 0; + while (rate > foldvalue) + { + rate >>= 1; + foldback++; + } + hm.set(hm.get() >> foldback); + data = (*waves)[waveid].get_level(rate); + if (!data) + continue; + tphase.set((uint32_t)((phase * hm).get()) + parameters->phaseshift[h]); + tdphase.set((uint32_t)rate); + float ampl = amp * 0.5f * (1 - parameters->pan[h]); + float ampr = amp * 0.5f * (1 + parameters->pan[h]); + float (*out)[Channels] = aux_buffers[dsp::fastf2i_drm(parameters->routing[h])]; + + for (int i=0; i < (int)BlockSize; i++) { + float wv = wave(data, tphase); + out[i][0] += wv * ampl; + out[i][1] += wv * ampr; + tphase += tdphase; + } + } + } + + bool is_quad = parameters->quad_env >= 0.5f; + + expression.set_inertia(parameters->cutoff); + phase += dphase * BlockSize; + float escl[EnvCount], eval[EnvCount]; + for (int i = 0; i < EnvCount; i++) + escl[i] = (1.f + parameters->envs[i].velscale * (velocity - 1.f)); + + if (is_quad) + { + for (int i = 0; i < EnvCount; i++) + eval[i] = envs[i].value * envs[i].value * escl[i]; + } + else + { + for (int i = 0; i < EnvCount; i++) + eval[i] = envs[i].value * escl[i]; + } + for (int i = 0; i < FilterCount; i++) + { + float mod = parameters->filters[i].envmod[0] * eval[0] ; + mod += parameters->filters[i].keyf * 100 * (note - 60); + for (int j = 1; j < EnvCount; j++) + { + mod += parameters->filters[i].envmod[j] * eval[j]; + } + if (i) mod += expression.get() * 1200 * 4; + float fc = parameters->filters[i].cutoff * pow(2.0f, mod * (1.f / 1200.f)); + if (i == 0 && parameters->filter1_type >= 0.5f) + filterL[i].set_hp_rbj(dsp::clip(fc, 10, 18000), parameters->filters[i].resonance, sample_rate); + else + filterL[i].set_lp_rbj(dsp::clip(fc, 10, 18000), parameters->filters[i].resonance, sample_rate); + filterR[i].copy_coeffs(filterL[i]); + } + float amp_pre[ampctl_count - 1], amp_post[ampctl_count - 1]; + for (int i = 0; i < ampctl_count - 1; i++) + { + amp_pre[i] = 1.f; + amp_post[i] = 1.f; + } + bool any_running = false; + for (int i = 0; i < EnvCount; i++) + { + float pre = eval[i]; + envs[i].advance(); + int mode = fastf2i_drm(parameters->envs[i].ampctl); + if (!envs[i].stopped()) + any_running = true; + if (mode == ampctl_none) + continue; + float post = (is_quad ? envs[i].value : 1) * envs[i].value * escl[i]; + amp_pre[mode - 1] *= pre; + amp_post[mode - 1] *= post; + } + if (vibrato_mode >= lfomode_direct && vibrato_mode <= lfomode_filter2) + vibrato.process(parameters, aux_buffers[vibrato_mode - lfomode_direct], BlockSize, sample_rate); + if (!any_running) + finishing = true; + // calculate delta from pre and post + for (int i = 0; i < ampctl_count - 1; i++) + amp_post[i] = (amp_post[i] - amp_pre[i]) * (1.0 / BlockSize); + float a0 = amp_pre[0], a1 = amp_pre[1], a2 = amp_pre[2], a3 = amp_pre[3]; + float d0 = amp_post[0], d1 = amp_post[1], d2 = amp_post[2], d3 = amp_post[3]; + if (parameters->filter_chain >= 0.5f) + { + for (int i=0; i < (int) BlockSize; i++) { + output_buffer[i][0] = a3 * (a0 * output_buffer[i][0] + a2 * filterL[1].process(a1 * filterL[0].process(aux_buffers[1][i][0]) + aux_buffers[2][i][0])); + output_buffer[i][1] = a3 * (a0 * output_buffer[i][1] + a2 * filterR[1].process(a1 * filterR[0].process(aux_buffers[1][i][1]) + aux_buffers[2][i][1])); + a0 += d0, a1 += d1, a2 += d2, a3 += d3; + } + } + else + { + for (int i=0; i < (int) BlockSize; i++) { + output_buffer[i][0] = a3 * (a0 * output_buffer[i][0] + a1 * filterL[0].process(aux_buffers[1][i][0]) + a2 * filterL[1].process(aux_buffers[2][i][0])); + output_buffer[i][1] = a3 * (a0 * output_buffer[i][1] + a1 * filterR[0].process(aux_buffers[1][i][1]) + a2 * filterR[1].process(aux_buffers[2][i][1])); + a0 += d0, a1 += d1, a2 += d2, a3 += d3; + } + } + filterL[0].sanitize(); + filterR[0].sanitize(); + filterL[1].sanitize(); + filterR[1].sanitize(); + if (vibrato_mode == lfomode_voice) + vibrato.process(parameters, output_buffer, BlockSize, sample_rate); + + if (finishing) + { + for (int i = 0; i < (int) BlockSize; i++) { + output_buffer[i][0] *= amp.get(); + output_buffer[i][1] *= amp.get(); + amp.age_lin((1.0/44100.0)/0.03,0.0); + } + } + + if (use_percussion()) + render_percussion_to(output_buffer, BlockSize); + +} + +void organ_voice::note_on(int note, int vel) +{ + stolen = false; + finishing = false; + perc_released = false; + released = false; + reset(); + this->note = note; + const float sf = 0.001f; + for (int i = 0; i < EnvCount; i++) + { + organ_parameters::organ_env_parameters &p = parameters->envs[i]; + envs[i].set(sf * p.attack, sf * p.decay, p.sustain, sf * p.release, sample_rate / BlockSize); + envs[i].note_on(); + } + update_pitch(); + velocity = vel * 1.0 / 127.0; + amp.set(1.0f); + perc_note_on(note, vel); +} + +void organ_voice::note_off(int /* vel */) +{ + // reset age to 0 (because decay will turn from exponential to linear, necessary because of error cumulation prevention) + perc_released = true; + if (pamp.get_active()) + { + pamp.reinit(); + } + rel_age_const = pamp.get() * ((1.0/44100.0)/0.03); + for (int i = 0; i < EnvCount; i++) + envs[i].note_off(); +} + +void organ_voice::steal() +{ + perc_released = true; + finishing = true; + stolen = true; +} + +void organ_voice::reset() +{ + inertia_pitchbend.ramp.set_length(sample_rate / (BlockSize * 30)); // 1/30s + vibrato.reset(); + phase = 0; + for (int i = 0; i < FilterCount; i++) + { + filterL[i].reset(); + filterR[i].reset(); + } +} + +/////////////////////////////////////////////////////////////////////////////////////////////////// + +void drawbar_organ::update_params() +{ + parameters->perc_decay_const = dsp::decay::calc_exp_constant(1.0 / 1024.0, 0.001 * parameters->percussion_time * sample_rate); + parameters->perc_fm_decay_const = dsp::decay::calc_exp_constant(1.0 / 1024.0, 0.001 * parameters->percussion_fm_time * sample_rate); + for (int i = 0; i < 9; i++) + { + parameters->multiplier[i] = parameters->harmonics[i] * pow(2.0, parameters->detune[i] * (1.0 / 1200.0)); + parameters->phaseshift[i] = int(parameters->phase[i] * 65536 / 360) << 16; + } + double dphase = dsp::midi_note_to_phase((int)parameters->foldover, 0, sample_rate); + parameters->foldvalue = (int)(dphase); +} + +dsp::voice *drawbar_organ::alloc_voice() +{ + block_voice *v = new block_voice(); + v->parameters = parameters; + return v; +} + +void drawbar_organ::percussion_note_on(int note, int vel) +{ + percussion.perc_note_on(note, vel); +} + +void drawbar_organ::setup(int sr) +{ + basic_synth::setup(sr); + percussion.setup(sr); + parameters->cutoff = 0; + params_changed(); + global_vibrato.reset(); +} + +bool drawbar_organ::check_percussion() { + switch(dsp::fastf2i_drm(parameters->percussion_trigger)) + { + case organ_voice_base::perctrig_first: + return active_voices.empty(); + case organ_voice_base::perctrig_each: + default: + return true; + case organ_voice_base::perctrig_eachplus: + return !percussion.get_noticable(); + case organ_voice_base::perctrig_polyphonic: + return false; + } +} + +void drawbar_organ::pitch_bend(int amt) +{ + parameters->pitch_bend = pow(2.0, (amt * parameters->pitch_bend_range) / (1200.0 * 8192.0)); + for (list::iterator i = active_voices.begin(); i != active_voices.end(); i++) + { + organ_voice *v = dynamic_cast(*i); + v->update_pitch(); + } + percussion.update_pitch(); +} + +void organ_audio_module::execute(int cmd_no) +{ + switch(cmd_no) + { + case 0: + panic_flag = true; + break; + } +} + +void organ_voice_base::perc_note_on(int note, int vel) +{ + perc_reset(); + released_ref = false; + this->note = note; + if (parameters->percussion_level > 0) + pamp.set(1.0f + (vel - 127) * parameters->percussion_vel2amp / 127.0); + update_pitch(); + float (*kt)[2] = parameters->percussion_keytrack; + // assume last point (will be put there by padding) + fm_keytrack = kt[ORGAN_KEYTRACK_POINTS - 1][1]; + // yes binary search would be nice if we had more than those crappy 4 points + for (int i = 0; i < ORGAN_KEYTRACK_POINTS - 1; i++) + { + float &lower = kt[i][0], upper = kt[i + 1][0]; + if (note >= lower && note < upper) + { + fm_keytrack = kt[i][1] + (note - lower) * (kt[i + 1][1] - kt[i][1]) / (upper - lower); + break; + } + } + fm_amp.set(fm_keytrack * (1.0f + (vel - 127) * parameters->percussion_vel2fm / 127.0)); +} + +char *organ_audio_module::configure(const char *key, const char *value) +{ + if (!strcmp(key, "map_curve")) + { + if (!value) + value = "2\n0 1\n1 1\n"; + var_map_curve = value; + stringstream ss(value); + int i = 0; + float x = 0, y = 1; + if (*value) + { + int points; + ss >> points; + for (i = 0; i < points; i++) + { + static const int whites[] = { 0, 2, 4, 5, 7, 9, 11 }; + ss >> x >> y; + int wkey = (int)(x * 71); + x = whites[wkey % 7] + 12 * (wkey / 7); + parameters->percussion_keytrack[i][0] = x; + parameters->percussion_keytrack[i][1] = y; + // cout << "(" << x << ", " << y << ")" << endl; + } + } + // pad with constant Y + for (; i < ORGAN_KEYTRACK_POINTS; i++) { + parameters->percussion_keytrack[i][0] = x; + parameters->percussion_keytrack[i][1] = y; + } + return NULL; + } + cout << "Set unknown configure value " << key << " to " << value << endl; + return NULL; +} + +void organ_audio_module::send_configures(send_configure_iface *sci) +{ + sci->send_configure("map_curve", var_map_curve.c_str()); +} + +void organ_audio_module::deactivate() +{ + +} + +void drawbar_organ::render_separate(float *output[], int nsamples) +{ + float buf[MAX_SAMPLE_RUN][2]; + dsp::zero(&buf[0][0], 2 * nsamples); + basic_synth::render_to(buf, nsamples); + if (dsp::fastf2i_drm(parameters->lfo_mode) == organ_voice_base::lfomode_global) + { + for (int i = 0; i < nsamples; i += 64) + global_vibrato.process(parameters, buf + i, std::min(64, nsamples - i), sample_rate); + } + if (percussion.get_active()) + percussion.render_percussion_to(buf, nsamples); + float gain = parameters->master * (1.0 / 8); + eq_l.set(parameters->bass_freq, parameters->bass_gain, parameters->treble_freq, parameters->treble_gain, sample_rate); + eq_r.copy_coeffs(eq_l); + for (int i=0; i +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace calf_plugins; + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +#if USE_LADSPA + +ladspa_instance::ladspa_instance(audio_module_iface *_module, ladspa_plugin_metadata_set *_ladspa, int sample_rate) +{ + module = _module; + metadata = module->get_metadata_iface(); + ladspa = _ladspa; + + module->get_port_arrays(ins, outs, params); + + activate_flag = true; +#if USE_DSSI + feedback_sender = NULL; +#endif + + module->set_sample_rate(sample_rate); + module->post_instantiate(); +} + +float ladspa_instance::get_param_value(int param_no) +{ + // XXXKF hack + if (param_no >= ladspa->param_count) + return 0; + return *params[param_no]; +} + +void ladspa_instance::set_param_value(int param_no, float value) +{ + // XXXKF hack + if (param_no >= ladspa->param_count) + return; + *params[param_no] = value; +} + +bool ladspa_instance::activate_preset(int bank, int program) +{ + return false; +} + +/// LADSPA run function - does set sample rate / activate logic when it's run first time after activation +void ladspa_instance::run(unsigned long SampleCount) +{ + if (activate_flag) + { + module->activate(); + activate_flag = false; + } + module->params_changed(); + module->process_slice(0, SampleCount); +} + +#if USE_DSSI + +void ladspa_instance::run_synth(unsigned long SampleCount, snd_seq_event_t *Events, unsigned long EventCount) +{ + if (activate_flag) + { + module->activate(); + activate_flag = false; + } + module->params_changed(); + + uint32_t offset = 0; + for (uint32_t e = 0; e < EventCount; e++) + { + uint32_t timestamp = Events[e].time.tick; + if (timestamp != offset) + module->process_slice(offset, timestamp); + process_dssi_event(Events[e]); + offset = timestamp; + } + if (offset != SampleCount) + module->process_slice(offset, SampleCount); +} + +#endif + +char *ladspa_instance::configure(const char *key, const char *value) +{ +#if USE_DSSI_GUI + if (!strcmp(key, "OSC:FEEDBACK_URI")) + { + const line_graph_iface *lgi = dynamic_cast(metadata); + //if (!lgi) + // return NULL; + if (*value) + { + if (feedback_sender) { + delete feedback_sender; + feedback_sender = NULL; + } + feedback_sender = new dssi_feedback_sender(value, lgi); + feedback_sender->add_graphs(metadata->get_param_props(0), metadata->get_param_count()); + } + else + { + if (feedback_sender) { + delete feedback_sender; + feedback_sender = NULL; + } + } + return NULL; + } + else + if (!strcmp(key, "OSC:UPDATE")) + { + if (feedback_sender) + feedback_sender->update(); + return NULL; + } + else + if (!strcmp(key, "OSC:SEND_STATUS")) + { + if (!feedback_sender) + return NULL; + struct status_gatherer: public send_updates_iface + { + osc_inline_typed_strstream str; + void send_status(const char *key, const char *value) + { + str << key << value; + } + } sg; + int serial = atoi(value); + serial = module->send_status_updates(&sg, serial); + sg.str << (uint32_t)serial; + feedback_sender->client->send("/status_data", sg.str); + return NULL; + } + else +#endif + if (!strcmp(key, "ExecCommand")) + { + if (*value) + { + execute(atoi(value)); + } + return NULL; + } + return module->configure(key, value); +} + +template +ladspa_plugin_metadata_set ladspa_wrapper::output; + +#if USE_DSSI + +/// Utility function: handle MIDI event (only handles a subset in this version) +void ladspa_instance::process_dssi_event(snd_seq_event_t &event) +{ + switch(event.type) { + case SND_SEQ_EVENT_NOTEON: + module->note_on(event.data.note.channel, event.data.note.note, event.data.note.velocity); + break; + case SND_SEQ_EVENT_NOTEOFF: + module->note_off(event.data.note.channel, event.data.note.note, event.data.note.velocity); + break; + case SND_SEQ_EVENT_PGMCHANGE: + module->program_change(event.data.control.channel, event.data.control.value); + break; + case SND_SEQ_EVENT_CONTROLLER: + module->control_change(event.data.control.channel, event.data.control.param, event.data.control.value); + break; + case SND_SEQ_EVENT_PITCHBEND: + module->pitch_bend(event.data.control.channel, event.data.control.value); + break; + case SND_SEQ_EVENT_CHANPRESS: + module->channel_pressure(event.data.control.channel, event.data.control.value); + break; + } +} +#endif + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// LADSPA callbacks + +/// LADSPA activate function (note that at this moment the ports are not set) +static void cb_activate(LADSPA_Handle Instance) +{ + ((ladspa_instance *)(Instance))->activate_flag = true; +} + +/// LADSPA run function - does set sample rate / activate logic when it's run first time after activation +static void cb_run(LADSPA_Handle Instance, unsigned long SampleCount) { + ((ladspa_instance *)(Instance))->run(SampleCount); +} + +/// LADSPA port connection function +static void cb_connect(LADSPA_Handle Instance, unsigned long port, LADSPA_Data *DataLocation) +{ + ladspa_instance *const mod = (ladspa_instance *)Instance; + + int first_out = mod->ladspa->input_count; + int first_param = first_out + mod->ladspa->output_count; + int ladspa_port_count = first_param + mod->ladspa->param_count; + + if ((int)port < first_out) + mod->ins[port] = DataLocation; + else if ((int)port < first_param) + mod->outs[port - first_out] = DataLocation; + else if ((int)port < ladspa_port_count) { + int i = port - first_param; + mod->params[i] = DataLocation; + *mod->params[i] = mod->metadata->get_param_props(i)->def_value; + } +} + + +/// LADSPA deactivate function +static void cb_deactivate(LADSPA_Handle Instance) { + ((ladspa_instance *)(Instance))->module->deactivate(); +} + +/// LADSPA cleanup (delete instance) function +static void cb_cleanup(LADSPA_Handle Instance) { + delete ((ladspa_instance *)(Instance)); +} + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// DSSI callbacks + +#if USE_DSSI +/// DSSI "run synth" function, same as run() except it allows for event delivery +static void cb_run_synth(LADSPA_Handle Instance, unsigned long SampleCount, + snd_seq_event_t *Events, unsigned long EventCount) { + ((ladspa_instance *)(Instance))->run_synth(SampleCount, Events, EventCount); +} + +/// DSSI configure function (named properties) +static char *cb_configure(LADSPA_Handle Instance, + const char *Key, + const char *Value) +{ + return ((ladspa_instance *)(Instance))->configure(Key, Value); +} + +/// DSSI get program descriptor function; for 0, it returns the default program (from parameter properties table), for others, it uses global or user preset +static const DSSI_Program_Descriptor *cb_get_program(LADSPA_Handle Instance, unsigned long index) +{ + ladspa_plugin_metadata_set *ladspa = ((ladspa_instance *)(Instance))->ladspa; + if (index > ladspa->presets->size()) + return NULL; + if (index) + return &(*ladspa->preset_descs)[index - 1]; + return &ladspa->dssi_default_program; +} + +/// DSSI select program function; for 0, it sets the defaults, for others, it sets global or user preset +static void cb_select_program(LADSPA_Handle Instance, unsigned long Bank, unsigned long Program) +{ + ladspa_instance *mod = (ladspa_instance *)Instance; + ladspa_plugin_metadata_set *ladspa = mod->ladspa; + unsigned int no = (Bank << 7) + Program - 1; + // printf("no = %d presets = %p:%d\n", no, presets, presets->size()); + if (no == -1U) { + int rpc = ladspa->param_count; + for (int i =0 ; i < rpc; i++) + *mod->params[i] = mod->metadata->get_param_props(i)->def_value; + return; + } + if (no >= ladspa->presets->size()) + return; + plugin_preset &p = (*ladspa->presets)[no]; + // printf("activating preset %s\n", p.name.c_str()); + p.activate(mod); +} + +#endif + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +ladspa_plugin_metadata_set::ladspa_plugin_metadata_set() +{ + metadata = NULL; + memset(&descriptor, 0, sizeof(descriptor)); + +#if USE_DSSI + presets = NULL; + preset_descs = NULL; + memset(&descriptor_for_dssi, 0, sizeof(descriptor_for_dssi)); + memset(&dssi_descriptor, 0, sizeof(dssi_descriptor)); +#endif +} + +void ladspa_plugin_metadata_set::prepare(const plugin_metadata_iface *md, LADSPA_Handle (*cb_instantiate)(const struct _LADSPA_Descriptor * Descriptor, unsigned long sample_rate)) +{ + metadata = md; + + input_count = md->get_input_count(); + output_count = md->get_output_count(); + param_count = md->get_param_count(); // XXXKF ladspa_instance::real_param_count(); + + const ladspa_plugin_info &plugin_info = md->get_plugin_info(); + descriptor.UniqueID = plugin_info.unique_id; + descriptor.Label = plugin_info.label; + descriptor.Name = strdup((std::string(plugin_info.name) + " LADSPA").c_str()); + descriptor.Maker = plugin_info.maker; + descriptor.Copyright = plugin_info.copyright; + descriptor.Properties = md->is_rt_capable() ? LADSPA_PROPERTY_HARD_RT_CAPABLE : 0; + descriptor.PortCount = input_count + output_count + param_count; + descriptor.PortNames = new char *[descriptor.PortCount]; + descriptor.PortDescriptors = new LADSPA_PortDescriptor[descriptor.PortCount]; + descriptor.PortRangeHints = new LADSPA_PortRangeHint[descriptor.PortCount]; + int i; + for (i = 0; i < input_count + output_count; i++) + { + LADSPA_PortRangeHint &prh = ((LADSPA_PortRangeHint *)descriptor.PortRangeHints)[i]; + ((int *)descriptor.PortDescriptors)[i] = i < input_count ? LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO + : LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + prh.HintDescriptor = 0; + ((const char **)descriptor.PortNames)[i] = md->get_port_names()[i]; + } + for (; i < input_count + output_count + param_count; i++) + { + LADSPA_PortRangeHint &prh = ((LADSPA_PortRangeHint *)descriptor.PortRangeHints)[i]; + const parameter_properties &pp = *md->get_param_props(i - input_count - output_count); + ((int *)descriptor.PortDescriptors)[i] = + LADSPA_PORT_CONTROL | (pp.flags & PF_PROP_OUTPUT ? LADSPA_PORT_OUTPUT : LADSPA_PORT_INPUT); + prh.HintDescriptor = LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW; + ((const char **)descriptor.PortNames)[i] = pp.name; + prh.LowerBound = pp.min; + prh.UpperBound = pp.max; + switch(pp.flags & PF_TYPEMASK) { + case PF_BOOL: + prh.HintDescriptor |= LADSPA_HINT_TOGGLED; + prh.HintDescriptor &= ~(LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW); + break; + case PF_INT: + case PF_ENUM: + prh.HintDescriptor |= LADSPA_HINT_INTEGER; + break; + default: { + int defpt = (int)(100 * (pp.def_value - pp.min) / (pp.max - pp.min)); + if ((pp.flags & PF_SCALEMASK) == PF_SCALE_LOG) + defpt = (int)(100 * log(pp.def_value / pp.min) / log(pp.max / pp.min)); + if (defpt < 12) + prh.HintDescriptor |= LADSPA_HINT_DEFAULT_MINIMUM; + else if (defpt < 37) + prh.HintDescriptor |= LADSPA_HINT_DEFAULT_LOW; + else if (defpt < 63) + prh.HintDescriptor |= LADSPA_HINT_DEFAULT_MIDDLE; + else if (defpt < 88) + prh.HintDescriptor |= LADSPA_HINT_DEFAULT_HIGH; + else + prh.HintDescriptor |= LADSPA_HINT_DEFAULT_MAXIMUM; + } + } + if (pp.def_value == 0 || pp.def_value == 1 || pp.def_value == 100 || pp.def_value == 440 ) { + prh.HintDescriptor &= ~LADSPA_HINT_DEFAULT_MASK; + if (pp.def_value == 1) + prh.HintDescriptor |= LADSPA_HINT_DEFAULT_1; + else if (pp.def_value == 100) + prh.HintDescriptor |= LADSPA_HINT_DEFAULT_100; + else if (pp.def_value == 440) + prh.HintDescriptor |= LADSPA_HINT_DEFAULT_440; + else + prh.HintDescriptor |= LADSPA_HINT_DEFAULT_0; + } + switch(pp.flags & PF_SCALEMASK) { + case PF_SCALE_LOG: + prh.HintDescriptor |= LADSPA_HINT_LOGARITHMIC; + break; + } + } + descriptor.ImplementationData = this; + descriptor.instantiate = cb_instantiate; + descriptor.connect_port = cb_connect; + descriptor.activate = cb_activate; + descriptor.run = cb_run; + descriptor.run_adding = NULL; + descriptor.set_run_adding_gain = NULL; + descriptor.deactivate = cb_deactivate; + descriptor.cleanup = cb_cleanup; + prepare_dssi(); +} + +void ladspa_plugin_metadata_set::prepare_dssi() +{ +#if USE_DSSI + const ladspa_plugin_info &plugin_info = metadata->get_plugin_info(); + memcpy(&descriptor_for_dssi, &descriptor, sizeof(descriptor)); + descriptor_for_dssi.Name = strdup((std::string(plugin_info.name) + " DSSI").c_str()); + memset(&dssi_descriptor, 0, sizeof(dssi_descriptor)); + dssi_descriptor.DSSI_API_Version = 1; + dssi_descriptor.LADSPA_Plugin = &descriptor_for_dssi; + dssi_descriptor.configure = cb_configure; + dssi_descriptor.get_program = cb_get_program; + dssi_descriptor.select_program = cb_select_program; + if (metadata->get_midi()) + dssi_descriptor.run_synth = cb_run_synth; + + presets = new std::vector; + preset_descs = new std::vector; + + preset_list plist_tmp, plist; + plist.load_defaults(true); + plist_tmp.load_defaults(false); + plist.presets.insert(plist.presets.end(), plist_tmp.presets.begin(), plist_tmp.presets.end()); + + // XXXKF this assumes that plugin name in preset is case-insensitive equal to plugin label + // if I forget about this, I'll be in a deep trouble + dssi_default_program.Bank = 0; + dssi_default_program.Program = 0; + dssi_default_program.Name = "default"; + + int pos = 1; + for (unsigned int i = 0; i < plist.presets.size(); i++) + { + plugin_preset &pp = plist.presets[i]; + if (strcasecmp(pp.plugin.c_str(), descriptor.Label)) + continue; + DSSI_Program_Descriptor pd; + pd.Bank = pos >> 7; + pd.Program = pos++; + pd.Name = pp.name.c_str(); + preset_descs->push_back(pd); + presets->push_back(pp); + } +#endif +} + +ladspa_plugin_metadata_set::~ladspa_plugin_metadata_set() +{ + delete []descriptor.PortNames; + delete []descriptor.PortDescriptors; + delete []descriptor.PortRangeHints; +#if USE_DSSI + if (presets) + presets->clear(); + if (preset_descs) + preset_descs->clear(); + delete presets; + delete preset_descs; +#endif +} + +#endif + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +#if USE_LV2 +// instantiate descriptor templates +template LV2_Descriptor calf_plugins::lv2_wrapper::descriptor; +template LV2_Calf_Descriptor calf_plugins::lv2_wrapper::calf_descriptor; +template LV2_State_Interface calf_plugins::lv2_wrapper::state_iface; + +extern "C" { + +const LV2_Descriptor *lv2_descriptor(uint32_t index) +{ + #define PER_MODULE_ITEM(name, isSynth, jackname) if (!(index--)) return &lv2_wrapper::get().descriptor; + #include + return NULL; +} + +}; + +#endif + +#if USE_LADSPA +extern "C" { + +const LADSPA_Descriptor *ladspa_descriptor(unsigned long Index) +{ + #define PER_MODULE_ITEM(name, isSynth, jackname) if (!isSynth && !(Index--)) return &ladspa_wrapper::get().descriptor; + #include + return NULL; +} + +}; + +#if USE_DSSI +extern "C" { + +const DSSI_Descriptor *dssi_descriptor(unsigned long Index) +{ + #define PER_MODULE_ITEM(name, isSynth, jackname) if (!(Index--)) return &calf_plugins::ladspa_wrapper::get().dssi_descriptor; + #include + return NULL; +} + +}; +#endif + +#endif + +#if USE_JACK + +extern "C" { + +audio_module_iface *create_calf_plugin_by_name(const char *effect_name) +{ + #define PER_MODULE_ITEM(name, isSynth, jackname) if (!strcasecmp(effect_name, jackname)) return new name##_audio_module; + #include + return NULL; +} + +} + +#endif diff --git a/plugins/LadspaEffect/calf/src/synth.cpp b/plugins/LadspaEffect/calf/src/synth.cpp new file mode 100644 index 000000000..fcda18b22 --- /dev/null +++ b/plugins/LadspaEffect/calf/src/synth.cpp @@ -0,0 +1,220 @@ +/* Calf DSP Library + * Generic polyphonic synthesizer framework. + * + * Copyright (C) 2007 Krzysztof Foltman + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this program; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA + */ +#include + +using namespace dsp; +using namespace std; + +void basic_synth::kill_note(int note, int vel, bool just_one) +{ + for (list::iterator it = active_voices.begin(); it != active_voices.end(); it++) { + // preserve sostenuto notes + if ((*it)->get_current_note() == note && !(sostenuto && (*it)->sostenuto)) { + (*it)->note_off(vel); + if (just_one) + return; + } + } +} + +dsp::voice *basic_synth::give_voice() +{ + if (active_voices.size() >= polyphony_limit) + { + dsp::voice *stolen = steal_voice(); + if (stolen) + return stolen; + } + if (unused_voices.empty()) + return alloc_voice(); + else { + dsp::voice *v = unused_voices.top(); + unused_voices.pop(); + v->reset(); + return v; + } +} + +dsp::voice *basic_synth::steal_voice() +{ + std::list::iterator found = active_voices.end(); + float priority = 10000; + //int idx = 0; + for(std::list::iterator i = active_voices.begin(); i != active_voices.end(); i++) + { + //printf("Voice %d priority %f at %p\n", idx++, (*i)->get_priority(), *i); + if ((*i)->get_priority() < priority) + { + priority = (*i)->get_priority(); + found = i; + } + } + //printf("Found: %p\n\n", *found); + if (found == active_voices.end()) + return NULL; + + (*found)->steal(); + return NULL; +} + +void basic_synth::trim_voices() +{ + // count stealable voices + unsigned int count = 0; + for(std::list::iterator i = active_voices.begin(); i != active_voices.end(); i++) + { + if ((*i)->get_priority() < 10000) + count++; + } + // printf("Count=%d limit=%d\n", count, polyphony_limit); + // steal any voices above polyphony limit + if (count > polyphony_limit) { + for (unsigned int i = 0; i < count - polyphony_limit; i++) + steal_voice(); + } +} + +void basic_synth::note_on(int note, int vel) +{ + if (!vel) { + note_off(note, 0); + return; + } + bool perc = check_percussion(); + dsp::voice *v = give_voice(); + v->setup(sample_rate); + v->released = false; + v->sostenuto = false; + gate.set(note); + v->note_on(note, vel); + active_voices.push_back(v); + if (perc) { + percussion_note_on(note, vel); + } +} + +void basic_synth::note_off(int note, int vel) +{ + gate.reset(note); + if (!hold) + kill_note(note, vel, false); +} + +#define for_all_voices(iter) for (std::list::iterator iter = active_voices.begin(); iter != active_voices.end(); iter++) + +void basic_synth::on_pedal_release() +{ + for_all_voices(i) + { + int note = (*i)->get_current_note(); + if (note < 0 || note > 127) + continue; + bool still_held = gate[note]; + // sostenuto pedal released + if ((*i)->sostenuto && !sostenuto) + { + // mark note as non-sostenuto + (*i)->sostenuto = false; + // if key still pressed or hold pedal used, hold the note (as non-sostenuto so it can be released later by releasing the key or pedal) + // if key has been released and hold pedal is not depressed, release the note + if (!still_held && !hold) + (*i)->note_off(127); + } + else if (!hold && !still_held && !(*i)->released) + { + (*i)->released = true; + (*i)->note_off(127); + } + } +} + +void basic_synth::control_change(int ctl, int val) +{ + if (ctl == 64) { // HOLD controller + bool prev = hold; + hold = (val >= 64); + if (!hold && prev && !sostenuto) { + on_pedal_release(); + } + } + if (ctl == 66) { // SOSTENUTO controller + bool prev = sostenuto; + sostenuto = (val >= 64); + if (sostenuto && !prev) { + // SOSTENUTO was pressed - move all notes onto sustain stack + for_all_voices(i) { + (*i)->sostenuto = true; + } + } + if (!sostenuto && prev) { + // SOSTENUTO was released - release all keys which were previously held + on_pedal_release(); + } + } + if (ctl == 123 || ctl == 120) { // all notes off, all sounds off + if (ctl == 120) { // for "all sounds off", automatically release hold and sostenuto pedal + control_change(66, 0); + control_change(64, 0); + } + for_all_voices(i) + { + if (ctl == 123) + (*i)->note_off(127); + else + (*i)->steal(); + } + } + if (ctl == 121) { + control_change(1, 0); + control_change(7, 100); + control_change(10, 64); + control_change(11, 127); + // release hold..hold2 + for (int i = 64; i <= 69; i++) + control_change(i, 0); + } +} + +void basic_synth::render_to(float (*output)[2], int nsamples) +{ + // render voices, eliminate ones that aren't sounding anymore + for (list::iterator i = active_voices.begin(); i != active_voices.end();) { + dsp::voice *v = *i; + v->render_to(output, nsamples); + if (!v->get_active()) { + i = active_voices.erase(i); + unused_voices.push(v); + continue; + } + i++; + } +} + +basic_synth::~basic_synth() +{ + while(!unused_voices.empty()) { + delete unused_voices.top(); + unused_voices.pop(); + } + for (list::iterator i = active_voices.begin(); i != active_voices.end(); i++) + delete *i; +} + diff --git a/plugins/LadspaEffect/calf/src/utils.cpp b/plugins/LadspaEffect/calf/src/utils.cpp new file mode 100644 index 000000000..c1c3eaff2 --- /dev/null +++ b/plugins/LadspaEffect/calf/src/utils.cpp @@ -0,0 +1,156 @@ +/* Calf DSP Library + * Various utility functions. + * Copyright (C) 2007 Krzysztof Foltman + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this program; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA + */ +#include +#include +#include +#include +#include + +using namespace std; +using namespace osctl; + +namespace calf_utils { + +string encode_map(const dictionary &data) +{ + osctl::string_buffer sb; + osc_stream str(sb); + str << (uint32_t)data.size(); + for(dictionary::const_iterator i = data.begin(); i != data.end(); i++) + { + str << i->first << i->second; + } + return sb.data; +} + +void decode_map(dictionary &data, const string &src) +{ + osctl::string_buffer sb(src); + osc_stream str(sb); + uint32_t count = 0; + str >> count; + string tmp, tmp2; + data.clear(); + for (uint32_t i = 0; i < count; i++) + { + str >> tmp; + str >> tmp2; + data[tmp] = tmp2; + } +} + +std::string xml_escape(const std::string &src) +{ + string dest; + for (size_t i = 0; i < src.length(); i++) { + // XXXKF take care of string encoding + if (src[i] < 0 || src[i] == '"' || src[i] == '<' || src[i] == '>' || src[i] == '&') + dest += "&"+i2s((uint8_t)src[i])+";"; + else + dest += src[i]; + } + return dest; +} + +std::string to_xml_attr(const std::string &key, const std::string &value) +{ + return " " + key + "=\"" + xml_escape(value) + "\""; +} + +std::string load_file(const std::string &src) +{ + std::string str; + FILE *f = fopen(src.c_str(), "rb"); +#if 0 + if (!f) + throw file_exception(src); +#endif + while(!feof(f)) + { + char buffer[1024]; + size_t len = fread(buffer, 1, sizeof(buffer), f); +#if 0 + if (len < 0) + throw file_exception(src); +#endif + str += string(buffer, len); + } + fclose(f); + return str; +} + +std::string i2s(int value) +{ + char buf[32]; + sprintf(buf, "%d", value); + + return std::string(buf); +} + +std::string f2s(double value) +{ + stringstream ss; + ss << value; + return ss.str(); +} + +std::string ff2s(double value) +{ + string s = f2s(value); + if (s.find('.') == string::npos) + s += ".0"; + return s; +} + +std::string indent(const std::string &src, const std::string &indent) +{ + std::string dest; + size_t pos = 0; + do { + size_t epos = src.find("\n", pos); + if (epos == string::npos) + break; + dest += indent + src.substr(pos, epos - pos) + "\n"; + pos = epos + 1; + } while(pos < src.length()); + if (pos < src.length()) + dest += indent + src.substr(pos); + return dest; +} + +////////////////////////////////////////////////////////////////////////////////// + +file_exception::file_exception(const std::string &f) +: message(strerror(errno)) +, filename(f) +, container(filename + ":" + message) +{ + text = container.c_str(); +} + +file_exception::file_exception(const std::string &f, const std::string &t) +: message(t) +, filename(f) +, container(filename + ":" + message) +{ + text = container.c_str(); +} + +} diff --git a/plugins/LadspaEffect/calf/src/wavetable.cpp b/plugins/LadspaEffect/calf/src/wavetable.cpp new file mode 100644 index 000000000..271fc3ea7 --- /dev/null +++ b/plugins/LadspaEffect/calf/src/wavetable.cpp @@ -0,0 +1,552 @@ +/* Calf DSP Library + * Example audio modules - wavetable synthesizer + * + * Copyright (C) 2009 Krzysztof Foltman + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this program; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA + */ + +#include + +#if ENABLE_EXPERIMENTAL + +#include +#include +#include + +using namespace dsp; +using namespace calf_plugins; + +wavetable_voice::wavetable_voice() +{ + sample_rate = -1; +} + +void wavetable_voice::set_params_ptr(wavetable_audio_module *_parent, int _srate) +{ + parent = _parent; + params = parent->params; + sample_rate = _srate; +} + +void wavetable_voice::reset() +{ + note = -1; +} + +void wavetable_voice::note_on(int note, int vel) +{ + typedef wavetable_metadata md; + this->note = note; + velocity = vel / 127.0; + amp.set(1.0); + for (int i = 0; i < OscCount; i++) { + oscs[i].reset(); + oscs[i].set_freq(note_to_hz(note, 0), sample_rate); + last_oscshift[i] = 0; + } + int cr = sample_rate / BlockSize; + for (int i = 0; i < EnvCount; i++) { + envs[i].set(0.01, 0.1, 0.5, 1, cr); + envs[i].note_on(); + } + float modsrc[wavetable_metadata::modsrc_count] = { 1, velocity, parent->inertia_pressure.get_last(), parent->modwheel_value, envs[0].value, envs[1].value, envs[2].value}; + parent->calculate_modmatrix(moddest, md::moddest_count, modsrc); + calc_derived_dests(); + + float oscshift[2] = { moddest[md::moddest_o1shift], moddest[md::moddest_o2shift] }; + memcpy(last_oscshift, oscshift, sizeof(oscshift)); + memcpy(last_oscamp, cur_oscamp, sizeof(cur_oscamp)); +} + +void wavetable_voice::note_off(int vel) +{ + for (int i = 0; i < EnvCount; i++) + envs[i].note_off(); +} + +void wavetable_voice::steal() +{ +} + +void wavetable_voice::render_block() +{ + typedef wavetable_metadata md; + + const float step = 1.f / BlockSize; + + float s = 0.001; + float scl[EnvCount]; + int espc = md::par_eg2attack - md::par_eg1attack; + for (int j = 0; j < EnvCount; j++) { + int o = j*espc; + envs[j].set(*params[md::par_eg1attack + o] * s, *params[md::par_eg1decay + o] * s, *params[md::par_eg1sustain + o], *params[md::par_eg1release + o] * s, sample_rate / BlockSize, *params[md::par_eg1fade + o] * s); + scl[j] = dsp::lerp(1.f, velocity, *params[md::par_eg1velscl + o]);; + } + + for (int i = 0; i < EnvCount; i++) + envs[i].advance(); + + float modsrc[wavetable_metadata::modsrc_count] = { 1, velocity, parent->inertia_pressure.get_last(), parent->modwheel_value, envs[0].value, envs[1].value, envs[2].value}; + parent->calculate_modmatrix(moddest, md::moddest_count, modsrc); + calc_derived_dests(); + + int ospc = md::par_o2level - md::par_o1level; + for (int j = 0; j < OscCount; j++) { + oscs[j].tables = parent->tables[(int)*params[md::par_o1wave + j * ospc]]; + oscs[j].set_freq(note_to_hz(note, *params[md::par_o1transpose + j * ospc] * 100+ *params[md::par_o1detune + j * ospc] + moddest[md::moddest_o1detune]), sample_rate); + } + + float oscshift[2] = { moddest[md::moddest_o1shift], moddest[md::moddest_o2shift] }; + float osstep[2] = { (oscshift[0] - last_oscshift[0]) * step, (oscshift[1] - last_oscshift[1]) * step }; + float oastep[2] = { (cur_oscamp[0] - last_oscamp[0]) * step, (cur_oscamp[1] - last_oscamp[1]) * step }; + for (int i = 0; i < BlockSize; i++) { + float value = 0.f; + + for (int j = 0; j < OscCount; j++) { + float o = last_oscshift[j] * 0.01; + value += last_oscamp[j] * oscs[j].get(dsp::clip(fastf2i_drm((o + *params[md::par_o1offset + j * ospc]) * 127.0 * 256), 0, 127 * 256)); + last_oscshift[j] += osstep[j]; + last_oscamp[j] += oastep[j]; + } + + output_buffer[i][0] = output_buffer[i][1] = value; + } + if (envs[0].stopped()) + released = true; + memcpy(last_oscshift, oscshift, sizeof(oscshift)); + memcpy(last_oscamp, cur_oscamp, sizeof(cur_oscamp)); +} + +///////////////////////////////////////////////////////////////////////////////////////////////////// + +static inline float sincl(float x, float clip) +{ + if (fabs(x) > clip) + return 0; + return sin(M_PI * x); +} + +static inline float blip(float x, float center, float range) +{ + if (x < center - range || x > center + range) + return 0; + return 1 - fabs(x - center)/range; +} + +static void interpolate_wt(int16_t table[129][256], int step) +{ + for (int i = 0; i < 128; i++) + { + if (!(i % step)) + continue; + int prev = i - i % step; + int next = prev + step; + for (int j = 0; j < 256; j++) + { + table[i][j] = table[prev][j] + (i - prev) * (table[next][j] - table[prev][j]) / step; + } + } +} + +wavetable_audio_module::wavetable_audio_module() +: mod_matrix_impl(mod_matrix_data, &mm_metadata) +, inertia_cutoff(1) +, inertia_pitchbend(1) +, inertia_pressure(64) +{ + panic_flag = false; + modwheel_value = 0.; + for (int i = 0; i < 129; i += 8) + { + for (int j = 0; j < 256; j++) + { + float ph = j * 2 * M_PI / 256; + int harm = 1 + 2 * (i / 8); + float ii = i / 128.0; + float rezo1 = sin(harm * ph) * sin(ph); + float rezo2 = sin((harm+1) * ph) * sin(ph * 2); + float rezo3 = sin((harm+3) * ph) * sin(ph * 4); + float rezo = (rezo1 + rezo2 + rezo3) / 3; + float v = (sin (ph) + ii * ii * rezo) / 2; + tables[0][i][j] = 32767 * v; + } + } + interpolate_wt(tables[0], 8); + for (int i = 0; i < 129; i += 4) + { + for (int j = 0; j < 256; j++) + { + float ph = j * 2 * M_PI / 256; + int harm = 1 + (i / 4); + float ii = i / 128.0; + float h = sin(harm * ph); + float rezo1 = h * sin(ph); + float rezo2 = h * sin(ph * 2)/2; + float rezo3 = h * sin(ph * 3)/3; + float rezo4 = h * sin(ph * 4)/4; + float rezo5 = h * sin(ph * 5)/5; + float rezo = (rezo1 + rezo2 + rezo3 + rezo4 + rezo5) / 3; + float v = sin (ph + ii * rezo); + tables[1][i][j] = 32767 * v; + } + } + interpolate_wt(tables[1], 4); + for (int i = 0; i < 129; i++) + { + for (int j = 0; j < 256; j++) + { + float ph = j * 2 * M_PI / 256; + float ii = (i & ~3) / 128.0; + float ii2 = ((i & ~3) + 4) / 128.0; + float peak = (32 * ii); + float rezo1 = sin(floor(peak) * ph); + float rezo2 = sin(floor(peak + 1) * ph); + float widener = (0.5 + 0.3 * sin(ph) + 0.2 * sin (3 * ph)); + float v1 = 0.5 * sin (ph) + 0.5 * ii * ii * rezo1 * widener; + float v2 = 0.5 * sin (ph) + 0.5 * ii2 * ii2 * rezo2 * widener; + tables[wavetable_metadata::wt_rezo][i][j] = 32767 * lerp(v1, v2, (i & 3) / 4.0); + } + } + for (int i = 0; i < 129; i++) + { + for (int j = 0; j < 256; j++) + { + float ph = j * 2 * M_PI / 256; + float ii = i / 128.0; + float v = (sin(ph) + ii * sin(ph + 2 * ii * sin(ph)) + ii * ii * sin(ph + 6 * ii * ii * sin(6 * ph)) + ii * ii * ii * ii * sin(ph + 11 * ii * ii * ii * ii * sin(11 * ph))) / 4; + tables[wavetable_metadata::wt_metal][i][j] = 32767 * v; + } + } + for (int i = 0; i < 129; i++) + { + for (int j = 0; j < 256; j++) + { + float ph = j * 2 * M_PI / 256; + float ii = i / 128.0; + float v = (sin(ph) + ii * sin(ph - 3 * ii * sin(ph)) + ii * ii * sin(5 * ph - 5 * ii * ii * ii * ii * sin(11 * ph))) / 3; + tables[wavetable_metadata::wt_bell][i][j] = 32767 * v; + } + } + for (int i = 0; i < 129; i++) + { + for (int j = 0; j < 256; j++) + { + float ph = j * 2 * M_PI / 256; + float ii = i / 128.0; + //float v = (sin(ph) + ii * sin(ph + 2 * ii * sin(ph)) + ii * ii * sin(ph + 3 * ii * ii * sin(3 * ph)) + ii * ii * ii * sin(ph + 5 * ii * ii * ii * sin(5 * ph))) / 4; + float v = (sin(ph) + sin(ph - 3 * sin(ii * 5 - 2) * sin(ph)) + sin(ii * 4 - 1.3) * sin(5 * ph + 3 * ii * ii * sin(6 * ph))) / 3; + tables[wavetable_metadata::wt_blah][i][j] = 32767 * v; + } + } + for (int i = 0; i < 256; i++) + { + tables[wavetable_metadata::wt_pluck][128][i] = (i < 128) ? 32000 * fabs(sin(i / 32.0 * M_PI) * sin(i / 13.0 * M_PI) * sin(i / 19.0 * M_PI)) : 0; + } + for (int i = 127; i >= 0; i--) + { + int16_t *parent = tables[wavetable_metadata::wt_pluck][i + 1]; + float damp = 0.05; + for (int j = 0; j < 256; j++) + { + tables[wavetable_metadata::wt_pluck][i][j] = (1 - 2*damp) * parent[j] + damp * parent[(j+1)&255] + damp * parent[(j+2)&255];// + 0.1 * parent[(j-1)&255]+ 0.1 * parent[(j-2)&255]; + } + } + for (int i = 0; i < 129; i++) + { + for (int j = 0; j < 256; j++) + { + float ph = j / 128.0 - 1.0; + float ii = i / 128.0; + float v = sincl(ph * (1 + 15 * ii), 1); + tables[wavetable_metadata::wt_stretch][i][j] = 32767 * v; + } + } + for (int i = 0; i < 129; i++) + { + for (int j = 0; j < 256; j++) + { + float ph = j / 128.0 - 1.0; + float ii = i / 128.0; + float v = sincl(ph * (1 + 15 * ii), 4) * sincl(j / 256.0, 1); + tables[wavetable_metadata::wt_stretch2][i][j] = 32000 * v; + } + } + for (int i = 0; i < 129; i++) + { + for (int j = 0; j < 256; j++) + { + float ph = j / 128.0 - 1.0; + float ii = i / 128.0; + float w = sincl(ph * (1 + 15 * ii), 4); + float v = pow(w, 9) * sincl(j / 256.0, 1); + tables[wavetable_metadata::wt_hardsync][i][j] = 32000 * v; + } + } + for (int i = 0; i < 129; i++) + { + for (int j = 0; j < 256; j++) + { + float ph = j / 128.0 - 1.0; + float ii = i / 128.0; + float w = sincl(ph * (1 + 31 * ii), 3); + float v = pow(w, 5) * sincl(j / 256.0, 1); + tables[wavetable_metadata::wt_hardsync2][i][j] = 32000 * v; + } + } + for (int i = 0; i < 129; i++) + { + for (int j = 0; j < 256; j++) + { + float ph = j / 128.0 - 1.0; + float ii = i / 128.0; + float w = sincl(ph * ph * (1 + 15 * ii), 2); + float v = pow(w, 4) * sincl(j / 256.0, 1); + tables[wavetable_metadata::wt_softsync][i][j] = 32000 * v; + } + } + for (int i = 0; i < 129; i++) + { + for (int j = 0; j < 256; j++) + { + float ph = j * 2 * M_PI / 256; + float ii = i / 128.0; + float v = (sin(ph) + ii * sin(ph - 3 * ii * sin(ph)) + ii * ii * ii * sin(7 * ph - 2 * ii * ii * ii * ii * sin(13 * ph))) / 3; + tables[wavetable_metadata::wt_bell2][i][j] = 32767 * v; + } + } + for (int i = 0; i < 129; i++) + { + for (int j = 0; j < 256; j++) + { + float ph = j * 2 * M_PI / 256; + float ii = i / 128.0; + float v = (sin(ph) + ii * sin(ph - 3 * ii * sin(ph)) + ii * ii * ii * sin(9 * ph - ii * ii * sin(11 * ph))) / 3; + tables[wavetable_metadata::wt_bell3][i][j] = 32767 * v; + } + } + for (int i = 0; i < 129; i++) + { + for (int j = 0; j < 256; j++) + { + float ph = j * 2 * M_PI / 256; + float ii = i / 128.0; + float v = (sin(ph + ii * sin(ph - 3 * ii * sin(ph) + ii * ii * ii * sin(5 * ph - ii * ii * sin(7 * ph))))); + tables[wavetable_metadata::wt_tine][i][j] = 32767 * v; + } + } + for (int i = 0; i < 129; i++) + { + for (int j = 0; j < 256; j++) + { + float ph = j * 2 * M_PI / 256; + float ii = i / 128.0; + float v = (sin(ph + ii * sin(ph - 2 * ii * sin(ph) + ii * ii * ii * sin(3 * ph - ii * ii * sin(4 * ph))))); + tables[wavetable_metadata::wt_tine2][i][j] = 32767 * v; + } + } + for (int i = 0; i < 129; i++) + { + for (int j = 0; j < 256; j++) + { + float ph = j * 2 * M_PI / 256; + float ph2 = j / 128.0 - 1; + float ii = i / 128.0; + float w = sincl(ph2 * (1 + 7 * ii * ii), 4) * pow(sincl(j / 256.0, 1), 2); + float v = sin(ph + ii * sin(ph - 2 * ii * w)); + tables[wavetable_metadata::wt_clav][i][j] = 32767 * v; + } + } + for (int i = 0; i < 129; i++) + { + for (int j = 0; j < 256; j++) + { + float ph = j * 2 * M_PI / 256; + float ph2 = j / 128.0 - 1; + float ii = i / 128.0; + float w = sincl(ph2 * (1 + 7 * ii * ii), 6) * sincl(j / 256.0, 1); + float v = sin(ph + ii * sin(3 * ph - 2 * ii * w)); + tables[wavetable_metadata::wt_clav2][i][j] = 32767 * v; + } + } + /* + for (int i = 0; i < 129; i++) + { + for (int j = 0; j < 256; j++) + { + float ph = j * 2 * M_PI / 256; + float ph2 = j / 128.0 - 1; + float ii = i / 128.0; + float w = sincl(ph2 * (1 + 7 * ii * ii), 6) * pow(sincl(j / 256.0, 1), 1); + float v = sin(ph + ii * ii * ii * sin(3 * ph - ii * ii * ii * w)); + tables[wavetable_metadata::wt_gtr][i][j] = 32767 * v; + } + } + */ + for (int i = 0; i < 129; i++) + { + for (int j = 0; j < 256; j++) + { + float ph = j * 2 * M_PI / 256; + float ii = i / 128.0; + float ii2 = ii; + float w = pow(sincl(j / 256.0, 1), 1); + float v = sin(ph + ii2 * ii2 * ii2 * sin(3 * ph - ii2 * ii2 * ii2 * w * sin(ph + sin(3 * ph) + ii * sin(11 * ph) + ii * ii * sin(25 * ph)))); + tables[wavetable_metadata::wt_gtr][i][j] = 32767 * v; + } + } + for (int i = 0; i < 129; i++) + { + for (int j = 0; j < 256; j++) + { + float ph = j * 2 * M_PI / 256; + float ii = i / 128.0; + float ii2 = dsp::clip(ii - 0.5, 0.0, 1.0); + float w = pow(sincl(j / 256.0, 1), 1); + float v = sin(ph + ii * ii * ii * sin(3 * ph - ii * ii * ii * w * sin(ph + sin(3 * ph + ii2 * sin(13 * ph))))); + tables[wavetable_metadata::wt_gtr2][i][j] = 32767 * v; + } + } + for (int i = 0; i < 129; i++) + { + for (int j = 0; j < 256; j++) + { + float ph = j * 2 * M_PI / 256; + float ii = i / 128.0; + float ii2 = dsp::clip(2 * (ii - 0.5), 0.0, 1.0); + //float w = sincl(ph2 * (1 + 15 * ii2 * ii2), 4) * pow(sincl(j / 256.0, 1), 1); + float w = pow(sincl(j / 256.0, 1), 1); + float v = sin(ph + ii * sin(3 * ph - ii * w * sin(ph + sin(3 * ph + 0.5 * ii2 * sin(13 * ph + 0.5 * sin(4 * ph)))))); + tables[wavetable_metadata::wt_gtr3][i][j] = 32767 * v; + } + } + for (int i = 0; i < 129; i++) + { + for (int j = 0; j < 256; j++) + { + float ph = j * 2 * M_PI / 256; + float ii = i / 128.0; + float ii2 = dsp::clip(2 * (ii - 0.5), 0.0, 1.0); + //float w = sincl(ph2 * (1 + 15 * ii2 * ii2), 4) * pow(sincl(j / 256.0, 1), 1); + float w = pow(sincl(j / 256.0, 1), 1); + float v = sin(ph + ii * sin(3 * ph - ii * w * sin(2 * ph + sin(5 * ph + 0.5 * ii2 * sin(13 * ph + 0.5 * sin(4 * ph)))))); + tables[wavetable_metadata::wt_gtr4][i][j] = 32767 * v; + } + } + for (int i = 0; i < 129; i++) + { + for (int j = 0; j < 256; j++) + { + float ph = j * 2 * M_PI / 256; + float ii = i / 128.0; + float ii2 = dsp::clip((ii - 0.25)/0.75, 0.0, 1.0); + //float w = sincl(ph2 * (1 + 15 * ii2 * ii2), 4) * pow(sincl(j / 256.0, 1), 1); + float w = pow(sincl(j / 256.0, 1), 3); + float v = sin(ph + (ii + 0.05) * sin(3 * ph - 2 * ii * w * sin(5 * ph + sin(7 * ph + 0.5 * ii2 * sin(13 * ph + 0.5 * sin(11 * ph)))))); + tables[wavetable_metadata::wt_gtr5][i][j] = 32767 * v; + } + } + for (int i = 0; i < 129; i++) + { + for (int j = 0; j < 256; j++) + { + float ph = j * 2 * M_PI / 256; + float ii = i / 128.0; + float w = pow(sincl(2 * (j / 256.0), 2), 3); + float v = sin(ph + (ii + 0.05) * sin(7 * ph - 2 * ii * w * sin(11 * ph))); + tables[wavetable_metadata::wt_reed][i][j] = 32767 * v; + } + } + for (int i = 0; i < 129; i++) + { + for (int j = 0; j < 256; j++) + { + float ph = j * 2 * M_PI / 256; + float ii = i / 128.0; + float ii2 = dsp::clip((ii - 0.25)/0.75, 0.0, 1.0); + float ii3 = dsp::clip((ii - 0.5)/0.5, 0.0, 1.0); + float v = sin(ph + (ii + 0.05) * sin(ii * sin(2 * ph) - 2 * ii2 * sin(2 * ph + ii2 * sin(3 * ph)) + 3 * ii3 * sin(3 * ph))); + tables[wavetable_metadata::wt_reed2][i][j] = 32767 * v; + } + } + for (int i = 0; i < 129; i++) + { + for (int j = 0; j < 256; j++) + { + float ph = j * 2 * M_PI / 256; + float ii = i / 128.0; + float mod = 0; + for (int k = 0; k < 13; k++) + { + mod += blip(i, k * 10, 30) * sin (ph * (5 + 3 * k) + ii * cos(ph * (2 + 2 * k))); + } + float v = sin(ph + ii * mod); + tables[wavetable_metadata::wt_silver][i][j] = 32767 * v; + } + } + for (int i = 0; i < 129; i++) + { + for (int j = 0; j < 256; j++) + { + float ph = j * 2 * M_PI / 256; + float ii = i / 128.0; + float mod = 0; + for (int k = 0; k < 16; k++) + { + mod += 2 * blip(i, k * 8, k * 4 + 10) * cos (ph * (k + 1)); + } + float v = sin(ph + ii * mod); + tables[wavetable_metadata::wt_brass][i][j] = 32767 * v; + } + } + for (int i = 0; i < 129; i++) + { + for (int j = 0; j < 256; j++) + { + float ph = j * 2 * M_PI / 256; + float ii = i / 128.0; + float mod = 0; + for (int k = 0; k < 16; k++) + { + mod += 2 * blip(i, k * 8, 16) * cos (ph * (2 * k + 1)); + } + float v = (sin(ph + ii * mod) + ii * sin(2 * ph + ii * mod)) / 2; + tables[wavetable_metadata::wt_multi][i][j] = 32767 * v; + } + } + for (int i = 0; i < 129; i ++) + { + float h = 1 + i / 16.0; + for (int j = 0; j < 256; j++) + { + float ph = j * 2 * M_PI / 256; + float v = sin(ph), tv = 1; + for (int k = 1; k < 24; k++) { + float amp = blip(i, k * 6, 20) / k; + v += amp * sin((k + 1) * ph + h * sin(ph)); + tv += amp; + } + tables[wavetable_metadata::wt_multi2][i][j] = 32767 * v / tv; + } + } +} + +void wavetable_audio_module::channel_pressure(int /*channel*/, int value) +{ + inertia_pressure.set_inertia(value * (1.0 / 127.0)); +} + +#endif diff --git a/plugins/LadspaEffect/caps/Amp.cc b/plugins/LadspaEffect/caps/Amp.cc new file mode 100644 index 000000000..1d2a8a71b --- /dev/null +++ b/plugins/LadspaEffect/caps/Amp.cc @@ -0,0 +1,637 @@ +/* + Amp.cc + + Copyright 2003-7 + Tim Goetze + David Yeh (Tone Stack in TS models) + + http://quitte.de/dsp/ + + Tube amplifier models + +*/ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA or point your web browser to http://www.gnu.org. +*/ + +#include "basics.h" +#include + +#include "Amp.h" +#include "Descriptor.h" + +void +AmpStub::init (bool adjust_downsampler) +{ + dc_blocker.set_f (10. / fs); + + /* going a bit lower than nominal with fc */ + double f = .7 * M_PI / OVERSAMPLE; + + /* construct the upsampler filter kernel */ + DSP::sinc (f, up.c, FIR_SIZE); + DSP::kaiser (up.c, FIR_SIZE, 6.4); + + /* copy upsampler filter kernel for downsampler, make sum */ + double s = 0; + for (int i = 0; i < up.n; ++i) + down.c[i] = up.c[i], + s += up.c[i]; + + s = 1 / s; + + /* scale downsampler kernel for unity gain + correction for transfer */ + double t = adjust_downsampler ? + s / max (fabs (tube.clip[0].value), fabs (tube.clip[1].value)) : s; + + for (int i = 0; i < down.n; ++i) + down.c[i] *= t; + + /* scale upsampler kernel for unity gain */ + s *= OVERSAMPLE; + for (int i = 0; i < up.n; ++i) + up.c[i] *= s; +} + +/* //////////////////////////////////////////////////////////////////////// */ + +void +AmpIII::init() +{ + this->AmpStub::init (false); + + /* need to filter out dc before the power amp stage, which is running at + * the oversampled rate */ + dc_blocker.set_f (10. / (fs * OVERSAMPLE)); + + DSP::RBJ::LoShelve (200 / fs, .2, -3, filter.a, filter.b); +} + +template +void +AmpIII::one_cycle (int frames) +{ + sample_t * s = ports[0]; + + sample_t gain = getport(1); + sample_t temp = getport(2) * tube.scale; + + drive = getport(3) * .5; + i_drive = 1 / (1 - drive); + + sample_t * d = ports[4]; + + *ports[5] = OVERSAMPLE; + + double g = current.g; + + current.g = max (gain < 1 ? gain : exp2 (gain - 1), .000001); + current.g *= tube.scale / fabs (tube.transfer (temp)); + + /* recursive fade to prevent zipper noise from the 'gain' knob */ + if (g == 0) g = current.g; + + double one_over_n = frames > 0 ? 1. / frames : 1; + double gf = pow (current.g / g, one_over_n); + + for (int i = 0; i < frames; ++i) + { + register sample_t a = s[i]; + + a = g * tube.transfer (a * temp); + a = filter.process (a + normal); + + a = tube.transfer_clip (up.upsample (a)); + a = power_transfer (dc_blocker.process (a)); + + a = down.process (a); + + for (int o = 1; o < OVERSAMPLE; ++o) + down.store ( + power_transfer ( + dc_blocker.process ( + normal + tube.transfer_clip (up.pad (o))))); + + F (d, i, a, adding_gain); + + g *= gf; + } + + current.g = g; +} + +/* //////////////////////////////////////////////////////////////////////// */ + +PortInfo +AmpIII::port_info [] = +{ + { + "in", + INPUT | AUDIO, + {BOUNDED, -1, 1} + }, { + "gain", + INPUT | CONTROL, + {BOUNDED | DEFAULT_1, 0, 10} + }, { + "temperature", + INPUT | CONTROL, + {BOUNDED | DEFAULT_MID, 0.005, 1} + }, { + "drive", + INPUT | CONTROL, + {BOUNDED | DEFAULT_MAX, 0.0001, 1} /* ^2 gives the nice drive */ + }, { + "out", + OUTPUT | AUDIO, + {0} + }, { + "latency", + OUTPUT | CONTROL, + {0} + } +}; + +template <> void +Descriptor::setup() +{ + UniqueID = 1786; + Label = "AmpIII"; + Properties = HARD_RT; + + Name = CAPS "AmpIII - Tube amp"; + Maker = "Tim Goetze "; + Copyright = "GPL, 2002-7"; + + /* fill port info and vtable */ + autogen(); +} + +/* //////////////////////////////////////////////////////////////////////// */ + +void +AmpIV::init() +{ + this->AmpStub::init (false); + + /* need to filter out dc before the power amp stage, which is running at + * the oversampled rate */ + dc_blocker.set_f (10. / (fs * OVERSAMPLE)); + + tone.init (fs); +} + +template +void +AmpIV::one_cycle (int frames) +{ + double one_over_n = frames > 0 ? 1. / frames : 1; + + sample_t * s = ports[0]; + + sample_t gain = getport(1); + sample_t temp = getport(2) * tube.scale; + + tone.start_cycle (ports + 3, one_over_n); + + drive = getport(7) * .5; + i_drive = 1 / (1 - drive); + + sample_t * d = ports[8]; + + *ports[9] = OVERSAMPLE; + + double g = current.g; + + current.g = max (gain < 1 ? gain : exp2 (gain - 1), .000001); + current.g *= tube.scale / fabs (tube.transfer (temp)); + + /* recursive fade to prevent zipper noise from the 'gain' knob */ + if (g == 0) g = current.g; + + double gf = pow (current.g / g, one_over_n); + + for (int i = 0; i < frames; ++i) + { + register sample_t a = s[i] + normal; + + a = g * tube.transfer (a * temp); + a = tone.process (a); + + a = tube.transfer_clip (up.upsample (a)); + a = power_transfer (dc_blocker.process (a)); + + a = down.process (a); + + for (int o = 1; o < OVERSAMPLE; ++o) + down.store ( + power_transfer ( + dc_blocker.process ( + normal + tube.transfer_clip (up.pad (o))))); + + F (d, i, a, adding_gain); + + g *= gf; + } + + current.g = g; +} + +/* //////////////////////////////////////////////////////////////////////// */ + +PortInfo +AmpIV::port_info [] = +{ + { + "in", + INPUT | AUDIO, + {BOUNDED, -1, 1} + }, { + "gain", + INPUT | CONTROL, + {BOUNDED | DEFAULT_1, 0, 10} + }, { + "temperature", + INPUT | CONTROL, + {BOUNDED | DEFAULT_MID, 0.005, 1} + }, { + "bass", + INPUT | CONTROL, + {BOUNDED | DEFAULT_0, -20, 20} + }, { + "mid", + INPUT | CONTROL, + {BOUNDED | DEFAULT_0, -20, 20} + }, { + "treble", + INPUT | CONTROL, + {BOUNDED | DEFAULT_0, -20, 20} + }, { + "hi", + INPUT | CONTROL, + {BOUNDED | DEFAULT_0, -20, 20} + }, { + "drive", + INPUT | CONTROL, + {BOUNDED | DEFAULT_MAX, 0.0001, 1} /* ^2 gives the nice drive */ + }, { + "out", + OUTPUT | AUDIO, + {0} + }, { + "latency", + OUTPUT | CONTROL, + {0} + } +}; + +template <> void +Descriptor::setup() +{ + UniqueID = 1794; + Label = "AmpIV"; + Properties = HARD_RT; + + Name = CAPS "AmpIV - Tube amp + tone controls"; + Maker = "Tim Goetze "; + Copyright = "GPL, 2002-7"; + + /* fill port info and vtable */ + autogen(); +} + +/* //////////////////////////////////////////////////////////////////////// */ + +void +AmpV::init() +{ + this->AmpStub::init (false); + + /* need to filter out dc before the power amp stage, which is running at + * the oversampled rate */ + dc_blocker.set_f (10. / (fs * OVERSAMPLE)); + + DSP::RBJ::LoShelve (210. / fs, .2, -1, filter[0].a, filter[0].b); + DSP::RBJ::LoShelve (4200. / fs, 1.2, +6, filter[1].a, filter[1].b); + DSP::RBJ::LoShelve (420. / fs, .2, +2, filter[2].a, filter[2].b); + + /* power supply cap */ + for (int i = 0; i < 2; ++i) + DSP::RBJ::LP (10. / fs, .3, power_cap[i].a, power_cap[i].b); +} + +template +void +AmpV::one_cycle (int frames) +{ + sample_t * s = ports[0]; + + sample_t gain = getport(1); + + if (*ports[2] != cut) + { + cut = getport(2); + DSP::RBJ::LoShelve (210. / fs, .2, cut, filter[0].a, filter[0].b); + } + if (*ports[3] != tone) + { + tone = getport(3); + double f = tone * tone * 8400 + 420; + double q = tone * .4 + .2; + double db = tone * 2 + 2; + DSP::RBJ::LoShelve (f / fs, q, db, filter[2].a, filter[2].b); + } + + drive = getport(4) * .5; + i_drive = 1 / (1 - drive); + + #define MAX_WATTS port_info[5].range.UpperBound + sample_t sag = (MAX_WATTS - getport(5)) / MAX_WATTS; + sag = .6 * sag * sag; + + sample_t * d = ports[6]; + + *ports[7] = OVERSAMPLE; + + double g = current.g; + + current.g = max (gain < 1 ? gain : pow (20, gain - 1), .000001); + #if 0 + if (++_turn & 127) == 0) + fprintf (stderr, "supply = %.3f sag = %.3f\n", supply, sag); + #endif + + if (g == 0) g = current.g; + + /* recursive fade to prevent zipper noise from the 'gain' knob */ + double one_over_n = frames > 0 ? 1. / frames : 1; + double gf = pow (current.g / g, one_over_n); + + for (int i = 0; i < frames; ++i) + { + register sample_t a = s[i]; + register sample_t v = 3 - supply; + /* alternative curve: v = v * v * .1 + .1; */ + v = v * v * .06 + .46; + + a = filter[0].process (a + normal); + if (0) + a = filter[2].process (a); + + a = g * (a + supply * .001); + + a = v * tube.transfer_clip (up.upsample (a)); + a = power_transfer (dc_blocker.process (a)); + + a = down.process (a); + + a = filter[1].process (a - normal); + if (1) + a = filter[2].process (a + normal); + + { + for (int o = 1; o < OVERSAMPLE; ++o) + down.store ( + power_transfer ( + dc_blocker.process ( + normal + tube.transfer_clip ( + up.pad (o))))); + } + + F (d, i, a, adding_gain); + + /* integrate for an approximation of cumulative output power */ + supply += sag * fabs (a) + normal; + /* filter integrated power consumption */ + for (int j = 0; j < 2; ++j) + supply = 0.9 * (power_cap[j].process (supply)); + + g *= gf; + normal = -normal; + } + + current.g = g; +} + +/* //////////////////////////////////////////////////////////////////////// */ + +PortInfo +AmpV::port_info [] = +{ + { + "in", + INPUT | AUDIO, + {BOUNDED, -1, 1} + }, { + "gain", + INPUT | CONTROL, + {BOUNDED | DEFAULT_1, 0, 3} + }, { + "bass", + INPUT | CONTROL, + {BOUNDED | DEFAULT_0, -9, 9} + }, { + "tone", + INPUT | CONTROL, + {BOUNDED | DEFAULT_MIN, 0, 1} + }, { + "drive", + INPUT | CONTROL, + {BOUNDED | DEFAULT_HIGH, 0.0001, 1} /* ^2 gives the nice drive */ + }, { + "watts", + INPUT | CONTROL, + {BOUNDED | DEFAULT_MID, 5, 150} + }, { + "out", + OUTPUT | AUDIO, + {0} + }, { + "latency", + OUTPUT | CONTROL, + {0} + } +}; + +template <> void +Descriptor::setup() +{ + UniqueID = 2587; + Label = "AmpV"; + Properties = HARD_RT; + + Name = CAPS "AmpV - Tube amp"; + Maker = "Tim Goetze "; + Copyright = "GPL, 2002-7"; + + /* fill port info and vtable */ + autogen(); +} + +/* //////////////////////////////////////////////////////////////////////// */ + +void +AmpVTS::init() +{ + this->AmpStub::init (false); + + /* need to filter out dc before the power amp stage, which is running at + * the oversampled rate */ + dc_blocker.set_f (10. / (fs * OVERSAMPLE)); + + /* power supply capacitance */ + for (int i = 0; i < 2; ++i) + DSP::RBJ::LP (10. / fs, .3, power_cap[i].a, power_cap[i].b); + + tonestack.init (fs); +} + +template +void +AmpVTS::one_cycle (int frames) +{ + sample_t * s = ports[0]; + + tonestack.start_cycle (ports + 1, 2); + sample_t gain = getport(2); + + drive = getport(6) * .5; + i_drive = 1 / (1 - drive); + + sample_t sag = 1 - max (0.0001, min (1, getport(7))); + sag = .6 * sag * sag; /* map to log space makes slider better */ + + sample_t * d = ports[8]; + + *ports[9] = OVERSAMPLE; + + double g = current.g; + + if (gain < 1) + current.g = max (gain, .001); + else + { + gain -= 1; + gain *= gain; + current.g = pow (10, gain); + } + + /* recursive fade to prevent zipper noise from the 'gain' knob */ + double one_over_n = frames > 0 ? 1. / frames : 1; + double gf = pow (current.g / g, one_over_n); + + for (int i = 0; i < frames; ++i) + { + register double a = s[i]; + register double v = 3 - supply; + v = v * v * .06 + .46; + + a = tube.transfer (a); + a = tonestack.process (a + normal); + + a = g * (a + supply * .001); + + a = v * tube.transfer_clip (up.upsample (a)); + a = power_transfer (dc_blocker.process (a)); + + a = down.process (a); + + { + for (int o = 1; o < OVERSAMPLE; ++o) + down.store ( + power_transfer ( + dc_blocker.process ( + normal + tube.transfer_clip ( + up.pad (o))))); + } + + F (d, i, a, adding_gain); + + /* integrate for an approximation of cumulative output power */ + supply += sag * fabs (a) + normal; + /* filter integrated power consumption */ + for (int j = 0; j < 2; ++j) + supply = 0.9 * (power_cap[j].process (supply + normal)); + + g *= gf; + normal = -normal; + } + + current.g = g; +} + +/* //////////////////////////////////////////////////////////////////////// */ + +PortInfo +AmpVTS::port_info [] = +{ + { + "in", + INPUT | AUDIO, + {BOUNDED, -1, 1} + }, { + "model", + INPUT | CONTROL, + {BOUNDED | DEFAULT_0 | INTEGER, 0, 5} /* no way to set dyn at compile t */ + }, { + "gain", + INPUT | CONTROL, + {BOUNDED | DEFAULT_HIGH, 0, 3} + }, { + "bass", + INPUT | CONTROL, + {BOUNDED | DEFAULT_MID, 0, 1} + }, { + "mid", + INPUT | CONTROL, + {BOUNDED | DEFAULT_1, 0, 1} + }, { + "treble", + INPUT | CONTROL, + {BOUNDED | DEFAULT_HIGH, 0, 1} + }, { + "drive", + INPUT | CONTROL, + {BOUNDED | DEFAULT_LOW, 0.0001, 1} + }, { + "watts", + INPUT | CONTROL, + {BOUNDED | DEFAULT_HIGH, 0.0001, 1} + }, { + "out", + OUTPUT | AUDIO, + {0} + }, { + "latency", + OUTPUT | CONTROL, + {0} + } +}; + +template <> void +Descriptor::setup() +{ + UniqueID = 2592; + Label = "AmpVTS"; + Properties = HARD_RT; + + Name = CAPS "AmpVTS - Tube amp + Tone stack"; + Maker = "David Yeh & Tim Goetze "; + Copyright = "GPL, 2002-7"; + + /* fill port info and vtable */ + autogen(); +} diff --git a/plugins/LadspaEffect/caps/Amp.h b/plugins/LadspaEffect/caps/Amp.h new file mode 100644 index 000000000..e06f7128f --- /dev/null +++ b/plugins/LadspaEffect/caps/Amp.h @@ -0,0 +1,377 @@ +/* + Amp.h + + Copyright 2002-9 Tim Goetze + + http://quitte.de/dsp/ + + Oversampled tube amplifier emulation. + +*/ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA or point your web browser to http://www.gnu.org. +*/ + +#ifndef _AMP_H_ +#define _AMP_H_ + +#include "dsp/util.h" +#include "dsp/OnePole.h" +#include "dsp/BiQuad.h" +#include "dsp/TwelveAX7.h" +#include "dsp/Roessler.h" + +#include "dsp/FIR.h" +#include "dsp/sinc.h" +#include "dsp/windows.h" + +#include "dsp/RBJ.h" +#include "dsp/Eq.h" + +#include "dsp/ToneStack.h" + +class AmpStub +: public Plugin +{ + public: + DSP::TwelveAX7_3 tube; + + sample_t drive, i_drive; + + struct { + /* gain (remember current setting and fade to port setting in run) */ + double g; + /* should also do this for temperature to remove another potential + * source of zippering, but that would be overkill, at the cost of + * at least one pow() per block. */ + } current; + + /* input is hipass-filtered first */ + DSP::OnePoleHP dc_blocker; + + enum { + OVERSAMPLE = 8, + FIR_SIZE = 64, + }; + + /* antialias filters */ + DSP::FIRUpsampler up; + DSP::FIR down; + + AmpStub() + : up (FIR_SIZE, OVERSAMPLE), + down (FIR_SIZE, up.c) + { } + + void init (bool adjust_downsampler = false); + + inline sample_t power_transfer (sample_t a) + { + return i_drive * (a - drive * fabs (a) * a); + } +}; + +/* /////////////////////////////////////////////////////////////////////// */ + +class PreampIII +: public AmpStub +{ + public: + template + void one_cycle (int frames); + + DSP::BiQuad filter; + + public: + static PortInfo port_info[]; + + sample_t adding_gain; + + void init(); + void activate() + { + current.g = 1; + + filter.reset(); + up.reset(); + down.reset(); + dc_blocker.reset(); + } + + void run (int n) + { + one_cycle (n); + } + + void run_adding (int n) + { + one_cycle (n); + } +}; + +/* /////////////////////////////////////////////////////////////////////// */ + +class AmpIII +: public AmpStub +{ + public: + template + void one_cycle (int frames); + + DSP::BiQuad filter; + + public: + static PortInfo port_info[]; + + sample_t adding_gain; + + void init(); + void activate() + { + current.g = 1; + + up.reset(); + down.reset(); + dc_blocker.reset(); + filter.reset(); + } + + void run (int n) + { + one_cycle (n); + } + + void run_adding (int n) + { + one_cycle (n); + } +}; + +/* /////////////////////////////////////////////////////////////////////// */ + +typedef struct + {float center, Q, adjust;} +PreampBand; + +class ToneControls +{ + public: + sample_t eq_gain[4]; + DSP::Eq<4> eq; + static PreampBand bands[4]; + + public: + void init (double _fs); + void activate (sample_t **); + + inline void + start_cycle (sample_t ** ports, double one_over_n) + { + for (int i = 0; i < 4; ++i) + { + if (*ports[i] == eq_gain[i]) + { + eq.gf[i] = 1; + continue; + } + + eq_gain[i] = *ports [i]; + + double want = get_band_gain (i, eq_gain[i]); + eq.gf[i] = pow (want / eq.gain[i], one_over_n); + } + } + + double get_band_gain (int i, double g); + void set_band_gain (int i, float g); + + inline sample_t process (sample_t x) + { + return eq.process (x); + } +}; + +/* /////////////////////////////////////////////////////////////////////// */ + +class PreampIV +: public PreampIII +{ + public: + ToneControls tone; + + template + void one_cycle (int frames); + + public: + static PortInfo port_info[]; + + sample_t adding_gain; + + void init(); + void activate(); + + void run (int n) + { + one_cycle (n); + } + + void run_adding (int n) + { + one_cycle (n); + } +}; + +/* /////////////////////////////////////////////////////////////////////// */ + +class AmpIV +: public AmpStub +{ + public: + ToneControls tone; + + template + void one_cycle (int frames); + + public: + static PortInfo port_info[]; + + sample_t adding_gain; + + void init(); + void activate() + { + current.g = 1; + + tone.activate (ports + 3); + + up.reset(); + down.reset(); + dc_blocker.reset(); + } + + void run (int n) + { + one_cycle (n); + } + + void run_adding (int n) + { + one_cycle (n); + } +}; + +/* /////////////////////////////////////////////////////////////////////// */ + +class AmpV +: public AmpStub +{ + public: + template + void one_cycle (int frames); + + DSP::BiQuad filter[3]; + + sample_t cut, tone; + + /* supply voltage sag */ + sample_t supply; + DSP::BiQuad power_cap[2]; + + public: + static PortInfo port_info[]; + + sample_t adding_gain; + + void init(); + void activate() + { + current.g = 1; + + for (int i = 0; i < 2; ++i) + filter[i].reset(), + power_cap[i].reset(); + + up.reset(); + down.reset(); + dc_blocker.reset(); + + cut = 2; + supply = 0.; + + tone = -1; /* causes initialisation of the filter at first cycle */ + } + + void run (int n) + { + one_cycle (n); + } + + void run_adding (int n) + { + one_cycle (n); + } +}; + +/* /////////////////////////////////////////////////////////////////////// */ + +class AmpVTS +: public AmpStub +{ + public: + DSP::ToneStack tonestack; + + template + void one_cycle (int frames); + + sample_t cut, tone; + + /* supply voltage sag */ + sample_t supply; + DSP::BiQuad power_cap[2]; + + public: + static PortInfo port_info[]; + + sample_t adding_gain; + + void init(); + void activate() + { + current.g = 1; + + for (int i = 0; i < 2; ++i) + power_cap[i].reset(); + + up.reset(); + down.reset(); + dc_blocker.reset(); + + cut = 2; + supply = 0.; + } + + void run (int n) + { + one_cycle (n); + } + + void run_adding (int n) + { + one_cycle (n); + } +}; + +#endif /* _AMP_H_ */ diff --git a/plugins/LadspaEffect/caps/CHANGES b/plugins/LadspaEffect/caps/CHANGES new file mode 100644 index 000000000..19c915d70 --- /dev/null +++ b/plugins/LadspaEffect/caps/CHANGES @@ -0,0 +1,206 @@ +0.4.5 + * Narrower plugin added + * fixed 'configure.py' to work with python3 + * fixed Sin, Roessler and Lorenz gain smoothing on activation + +0.4.4 + +0.4.3 + * basics.h cleanup / comments + * minor Makefile cleanup + * comment cosmetics + * Eq and Eq2x2 per-band Q changed to 1.414 (= 1 octave) + * Eq lowest band default value fixed to read 0 + * Niclas' fix for the bessel function implemented + * uninitialised plugin states eliminated thanks to Damon + * linker options for OSX added to the Makefile + +0.4.2 + * fixed the 'model' port index for AmpVTS in the RDF generator + +0.4.1 + * cleaned up Eq.h and Eq.cc (many g++ versions choke on the unused code + there) + * changed -O3 to -O2 in the g++ invocation + +0.4.0 + * ToneStack plugins, by David Yeh + * AmpV + Tone stack plugin, employing David Yeh's fine work + * comment cosmetics + * Amp* denormal protection fixed (or is it, Dave? ;) + * minor code cleanup in Amp.cc + * caps.rdf updated with plugin categories (thanks to Paul Winkler) + * caps.rdf Cabinet* RDF preset labels renamed + * AutoWah plugin + * DSP::RMS reworked, may affect Compress plugin + * DSP::Eq reworked for double precision and denormal protection + * ./configure.py checks SSE availability + * in case of SSE math denormal flush to zero activated for all plugins + * all plugins renamed C* .. instead of CAPS: .. + * Eq modified to play nice with ardour + * Eq2x2 + * introduced the Plugin base class, collecting common traits (normal etc) + * getport() -- read access to control ports which is clamped to port bounds + and maps inf and nan to 0 as well + * all LADSPA_HINT_SAMPLE_RATE ports changed to *_LOGARITHMIC because + of broken implementations (no surprise given the vagueness of ladspa.h + regarding this matter) -- this means changed default parameters of the + affected ports, too + * VCO* "latency" output ports removed + * actual activate() call is deferred to first run() after activate() + in order to prevent inadvertent parameter smoothing sweeps during the first + block of audio after activation, this should fix all problems with ardour + (except those caused by denormals or invalid audio input) + * caps.rdf installed by 'make install' + * fixed a bug in tools/make-ps.py that caused the spectrum plots to + be inaccurate for multi-channel plugins + +0.3.0 + * TwelveAX7_3 changed to clip slightly early in the upper lobe + * Scape plugin added + * plugin names rewritten, prefixed with "CAPS:" + * new ChorusII, StereoChorusII plugins + * Chorus, StereoChorus relabeled, appended 'I' suffix + * new PhaserII plugin (great stuff if I may say so) + * Phaser relabeled, appended 'I' suffix + * new AmpV plugin, based on AmpIII, emulates compression and distortion + modulation through power supply shortcomings, plus lots of fine-tuning + and an additional biquad. We're getting there! + * all Preamp and Amp models fitted with a new 12AX7 model, linear + interpolation of a sample table obtained from spice simulation + +0.2.4 + * feedback default reverted to 0 for the Chorus units + * fixed Cabinet to switch to correct gain at 'model' control change + * fixed 'model' control in Cabinet to work with a broader range of hosts + * Cabinet name changed to CabinetI + * CabinetII plugin: Cabinet with 32nd order IIR filters, more fidelity + to the original frequency responses, supplied coefficients for 4 of the + most used sample rates + * applied the gcc-4 enabling patch + * SweepVF renamed to SweepVFI + * new SweepVFII plugin, variant of SweepVFI with Q modulated by a + second Lorenz fractal + * dsp/exp2 dumped in favour of libm's exp2(3) + +0.2.3 + * StereoChorus denormal protection made functional + (Thanks again to S. Savolainen) + * Phaser denormal protected + +0.2.2 + * Build was _not_ fixed for g++-4.0. + * AmpIV gain control restored to operate as expected + * Chorus/StereoChorus denormal protection (thanks to S. Savolainen) + * a few cosmetic changes elsewhere + +0.2.1 + * Build fixed for g++-4.0, PPC and AMD64 + (Thanks to Niklas Werner, Andreas Jochens and Mario Lang) + * Reverb.* cosmetics + * AmpIV tone controls moved to after initial tube transfer + +0.2.0 + * denormal protection for Preamp*, Amp* + * Capitalized plugin Names + * PDF now lists audio in- and outputs as well as control inputs, only + gives average CPU rating + * AmpIV: PreampIV + power amp stage + * Plate2x2: Plate with 2-in, 2-out audio routing + * Plate damping and bandwidth controls changed to map to filter fc, fixes + behaviour in hosts that handle the log hint incorrectly + +0.1.13 + * AmpIII activate() resets the boost filter + +0.1.12 + * PreampIV band controls fixed to operate as expected + +0.1.11 + * amps changed back to old tube model :) but new temp & gain behaviour stays + * SweepVF, AmpIII default value adjustments + +0.1.10 + * HRTF recursion runs in doubles + * Cabinet recursion runs in doubles for much clearer sound + * all amps fitted with a common tube voltage mapping, dsp/TwelveAX7.h + * all amps: temperature and gain controls changed slightly + * all amps declared in one common Amp.h + * Pan echo fixed to be filtered independent of sample rate + * Cabinet cosmetics and activate() from port values fix + * SweepVF fixed to activate() from the current control settings + * rid all *amp* plugins of the initial hi-pass, not needed anymore + * PreampIII and AmpIII more authentic with an rbj lo-shelve, +6 dB > 1.2 kHz + as hinted by circuit analysis + * something_random() removed, stdlib for random generation + +0.1.9 + * Pan plugin + * 'make depend' instead of 'make dep', uses $(CC) -MM instead of 'makedepend' + * *Chorus, AmpIII, Plate defaults changed + * *Chorus optimizations, reintroduces funny zipper noise when 'feedback' is + non-zero and 't' is changed + * experimental HRTF plugin + * Plate 'blend' goes all the way to wet output only + * dsp/White offers a get_31() method for reduced number of bitshifts needed + * *Chorus delay line tapping changed to employ cubic interpolation, sounds + better + * SweepVF modulation mix algorithm changed to clamp if over-fed, makes + for wider sweeps + +0.1.8 + * all oversampling plugins use Kaiser windows instead of Blackman-Harris, + for much better performance + * SweepVF modulation range slightly increased + * Cabinet filter loop cosmetics (slight speedup) + * new AmpIII Plugin: Preamp plus power amp emulation + * lowered NOISE_FLOOR (equals 'renormal' number) + +0.1.7 + * connect ports to lower bound on instantiate() + * Plate delay line lengths raised, sound changed + * Eq activate() fixed to initialize from the current settings + * Preamp* cutoff reverted to 0.1.3 setting, thanks to Ben Saylor for + testing + * old IIR-based Preamp cleaned from the sources + * zipper-noise in *Chorus units for t changes with feedback > 0 eliminated + * all plugin constructor code moved to init() calls + +0.1.6 + * SweepVF modulation mix algorithm changed to maintain proportion, not + absolute value if x + y + z > 1, for better control + * create $(DEST) directory on make install, pointed out by Daniel James + +0.1.5 + * fixed delay line length miscalculation in ModLattice + +0.1.4 + * SweepVF modulation source can be mixed now + * latency port for VCO* + * Lorenz and Roessler get x, y, z mixing knobs + * PreampIV eq bands slightly tuned and coefficients moved into common struct + * Preamp*, VCO* downsampler filter cutoff lowered + * Clip downsampler filter cutoff lowered + * nonsensical audio output bounds removed + * simplified VCO* implementation + * JVRev rewritten for code clarity (funny enough, it also got quicker) + * fixed JVRev to reset its history on activate() + * added purpose, copyright and licensing information to all (i think) files. + * HACKING file + * CHANGES file + +0.1.3 + * fixed all compilation problems with gcc 3.3, with the patient help + of the lad mailing list community + * dsp/Eq.h SSE assembler code had to go (gcc > 3 doesn't like multi-line + asm, and efficiency and even reliability go down if we allow gcc to + intersperse its 'optimization' code with our asm) + +0.1.2 + * fixed more compilation problems with gcc >= 3.0 + +0.1.1 + * tried to (but didn't really) fix compilation problem with ladspa.h + +0.1.0 + * initial release diff --git a/plugins/LadspaEffect/caps/CMakeLists.txt b/plugins/LadspaEffect/caps/CMakeLists.txt new file mode 100644 index 000000000..4576a5c4a --- /dev/null +++ b/plugins/LadspaEffect/caps/CMakeLists.txt @@ -0,0 +1,21 @@ +INCLUDE_DIRECTORIES("${CMAKE_SOURCE_DIR}/include") +FILE(GLOB SOURCES *.cc) +ADD_LIBRARY(caps MODULE ${SOURCES}) +INSTALL(TARGETS caps LIBRARY DESTINATION "${PLUGIN_DIR}/ladspa") +IF(LMMS_BUILD_WIN64) +ADD_DEFINITIONS(-DLMMS_BUILD_WIN64) +ENDIF(LMMS_BUILD_WIN64) +SET_TARGET_PROPERTIES(caps PROPERTIES PREFIX "") +SET_TARGET_PROPERTIES(caps PROPERTIES COMPILE_FLAGS "-O2 -funroll-loops -Wno-write-strings") + +IF(LMMS_BUILD_WIN32) + ADD_CUSTOM_COMMAND(TARGET caps POST_BUILD COMMAND "${STRIP}" "\"${CMAKE_CURRENT_BINARY_DIR}/caps.dll\"") +ENDIF(LMMS_BUILD_WIN32) +IF(NOT LMMS_BUILD_APPLE) + SET_TARGET_PROPERTIES(caps PROPERTIES LINK_FLAGS "${LINK_FLAGS} -shared -Wl,-no-undefined") +ENDIF(NOT LMMS_BUILD_APPLE) + +IF(LMMS_BUILD_LINUX) + SET_TARGET_PROPERTIES(caps PROPERTIES LINK_FLAGS "${LINK_FLAGS} -nostartfiles") +ENDIF(LMMS_BUILD_LINUX) + diff --git a/plugins/LadspaEffect/caps/Cabinet-Models32.h b/plugins/LadspaEffect/caps/Cabinet-Models32.h new file mode 100644 index 000000000..3f317ae6a --- /dev/null +++ b/plugins/LadspaEffect/caps/Cabinet-Models32.h @@ -0,0 +1,235 @@ +/* + Cabinet-Models32.h + + Copyright 2005 Tim Goetze + + http://quitte.de/dsp/ + + Coefficients for 32nd order IIR filters modeling the frequency + responses of a few select instrument amplifier speaker boxes. +*/ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA or point your web browser to http://www.gnu.org. +*/ + +Model32 +CabinetII::models44100 [] = { + { + 1, /* identity */ + {1}, + {0}, + 0.2500 + }, + { + 32, /* matchless_off */ + {0.751133877447, 0.476665652568, 0.232649157621, 0.073490164573, -0.0520549100755, -0.121257530713, -0.100197130001, -0.0412212505538, 0.0304188276576, 0.0756296082021, 0.0339966964433, -0.0188218345374, -0.0138445066369, 0.0213454687998, 0.0509702380835, 0.0734535180348, 0.0423999627069, 0.0153810625747, 0.0251173605116, 0.0231247294211, 0.0118254107717, 0.0397159715652, 0.0509631315658, 0.0289647310658, -0.0151415828019, -0.0678734405803, -0.093244908543, -0.066522401653, -0.0390777734265, -0.0206522167345, -0.0140462622686, -0.000367155236373}, + {0.0, 0.582601584085, 0.179375009603, -0.0310635155569, -0.115346798496, -0.0929627102659, -0.00905181962865, 0.0529760132518, 0.0660791287878, 0.0264313110774, -0.0527906709163, -0.0832644831913, -0.047761487157, -0.00525089678838, 0.00920853658047, 0.00160221988302, -0.036921883774, -0.0508637181262, -0.0369139574948, -0.0297884797081, -0.0131892593004, 0.0328205903451, 0.0532522735819, 0.0434869096278, 0.0171966303505, -0.0117058173799, -0.0222005420711, -0.00885326183421, -0.00467956865215, -0.0017726627279, -0.00860012741033, -0.046231460458}, + 0.1088 + }, + { + 32, /* matchless_on */ + {0.737841828858, 0.460204992853, 0.280744637086, 0.0935206597339, -0.0705817082991, -0.156854249167, -0.144106172504, -0.0685499381158, 0.00620304241081, 0.0610934722291, 0.0465273895752, -0.0126452119054, -0.0649026246806, -0.0713209874063, -0.0596110923629, -0.0415373874755, -0.0389721881465, -0.0284327312853, -0.0109349222879, 0.0222033554026, 0.0552410801, 0.0896637673103, 0.106570641198, 0.122226072209, 0.115856033255, 0.0801435470104, 0.0100505511461, -0.0489360304782, -0.0829690212741, -0.0887089006669, -0.0886065785655, -0.0469811200837}, + {0.0, 0.611100232423, 0.191219480026, -0.0831423854754, -0.193756321128, -0.162103938394, -0.0633420329893, 0.0168905353821, 0.0319336623225, 0.00544046343502, -0.0450052997134, -0.0655650754908, -0.0385274002732, 0.0140346387674, 0.0381359817338, 0.0270741530904, -0.00985978537582, -0.0339616898786, -0.039510862758, -0.0234251294011, -0.00577196250278, 0.00602171273173, -0.0012115688049, -0.00850899153196, -0.0195544970682, -0.0235059343611, -0.0181958065493, 0.00619896262657, 0.0223536984999, 0.0126908937718, -0.0260364491855, -0.048766780312}, + 0.1398 + }, + { + 32, /* superchamp */ + {0.764583545976, 0.538738620869, 0.179425189777, -0.0185116138637, -0.155373227876, -0.162444114313, -0.0955812737534, -0.0527583372679, 0.0109899803101, 0.027210394773, -0.0177057767782, -0.03205717291, -0.0483168565776, -0.00731185525588, 0.0552452873245, 0.075576957847, 0.0442457880974, -0.0118721835978, -0.0177888197761, 0.0351775943888, 0.0348792107809, 0.0127082443141, -0.0055147874283, -0.025538492041, -0.0266140723472, -0.00351312980821, -0.00705954101235, -0.0071756277097, -0.0073123807337, 0.00388589850911, 0.00920641143732, 0.00675123073573}, + {0.0, 0.60762891993, 0.0804538514268, -0.139045714146, -0.188318237239, -0.102850850916, -0.014327283229, 0.0095126479685, 0.00675439266545, -0.0369566468812, -0.0735379197498, -0.0464884257152, -0.00652653570483, 0.0460655599383, 0.0503985731174, -5.63018161884e-05, -0.0506993010893, -0.0519236737825, 0.00601034157191, 0.0565585753845, 0.0271235886591, -0.0124334855533, -0.0275977294885, -0.0178167665585, 0.0128169339437, 0.0370635121992, 0.0234037648427, 0.00539790260771, -0.0105614779717, -0.00455010484908, 0.0101491481873, 0.0220600470141}, + 0.1771 + }, + { + 32, /* fender_68 */ + {0.952578805555, 0.423653323267, -0.299325586902, -0.181365977098, -0.00917621972835, -0.106211820702, -0.144312857058, -0.0664525836173, -0.0308777018884, -0.0289677657295, 0.06172127279, 0.0700934900581, 0.00309908907112, -0.00891983996273, -0.0687746247517, -0.0146407179784, 0.0264920122813, 0.0134951652977, 0.0480259959669, 0.021152058087, -0.0229395195318, 0.00306616207055, 0.015377268642, -0.0166969251715, -0.0472474005373, -0.0257631159809, -0.0298364749235, -0.0359529903186, -0.0228763062676, -0.0190698276841, -0.0481625561196, -0.024778494842}, + {0.0, 0.373287747089, -0.379113471957, -0.162638822705, -0.0309789534425, -0.113942084113, -0.0746182251996, 0.00371088736605, -0.0311272559258, -0.0641468114835, -0.01820597504, -0.0106553201186, -0.0025754233332, 0.00779983208005, -0.0133002473609, 0.0474101909397, 0.0302769494631, -0.0206219756872, 0.00091004302278, 0.00989883124397, -0.00095818764248, -0.00710510898183, -0.0103772680579, 0.00636775505307, 0.0172954284337, 0.00560785607672, -0.00550757886611, 0.0349170637518, 0.033667260855, 0.0263631580776, 0.110816169944, 0.0551965257177}, + 0.5267 + }, + { + 32, /* marshall */ + {0.632136921276, 0.487520501766, 0.267166936676, 0.0328329910029, -0.124746548218, -0.175922403211, -0.134056005594, -0.0275494615733, 0.0707349518645, 0.112423870345, 0.0758114749041, 0.0139250983739, -0.0210142361937, -0.00193163235992, 0.0197248569676, 0.0206461311409, -0.00897578938148, -0.0306233925441, -0.041776582616, -0.0398244883075, -0.0328395317644, -0.0101508675516, 0.00636535089023, 0.0217430701187, 0.0223553033142, 0.0237782685683, 0.0278909244449, 0.0469073547267, 0.0509466858461, 0.0336174039295, 0.0028829896058, 0.0114245696423}, + {0.0, 0.618938053184, 0.180052941443, -0.1028119852, -0.19233134457, -0.14303971742, -0.0450998045919, 0.0341843500162, 0.0465086637485, 0.0071435730282, -0.0461779135605, -0.059013077843, -0.0284397368519, 0.0187689538251, 0.0341298347311, 0.0244703904826, 0.00720524642447, 0.00991307420138, 0.018738094495, 0.0275442994126, 0.0299092523536, 0.0339721143791, 0.0270175082759, 0.0151058732685, -0.00751060215331, -0.0236467101096, -0.0272347092017, -0.00812409176413, 0.0141531255726, 0.0270163512016, 0.00208457244433, -0.0784208903527}, + 0.1132 + }, + { + 32, /* mesa */ + {0.462494284717, 0.393585742058, 0.303328992303, 0.181503108654, 0.0629173541037, -0.020681232006, -0.0571885284376, -0.0467796891544, -0.0276756897046, -0.00892844543715, 0.00204563746045, 0.0115134879366, 0.00106846505647, -0.0149439761237, -0.0330954690659, -0.0337794782369, -0.0276991983671, -0.0190072253549, -0.0324525139664, -0.0630355306227, -0.0999209480709, -0.111933999507, -0.110645947594, -0.092891889065, -0.0692697576821, -0.0450776510962, -0.0392851148349, -0.035324392499, -0.035403719608, -0.0376283525137, -0.0612971281858, -0.0900100571873}, + {0.0, 0.56035020932, 0.29343466934, 0.0772363317707, -0.0530744622425, -0.0885361452358, -0.0589180077997, -0.00257855932105, 0.0334935643243, 0.0442328268628, 0.0294583386742, 0.00717959220156, -0.0175320543891, -0.0208128084726, -0.00373790944406, 0.0334761867029, 0.0627006023834, 0.0700861323961, 0.0416727224516, -0.000637024095321, -0.0357094622237, -0.0404012923223, -0.0285442599547, -0.00354190734239, 0.0184796761008, 0.0306524756002, 0.0181509660649, -0.00687913029057, -0.0393242377083, -0.0550286859069, -0.0375235630652, 0.0471541139774}, + 0.2500 + }, + { + 32, /* pro_jr */ + {0.734249445521, 0.491537503216, 0.337459965314, 0.176462147927, 0.0276390917692, -0.0644515999868, -0.0972401016684, -0.0803985996088, -0.0428685363211, -0.0140919517701, -0.0337409328059, -0.0478897322188, -0.0362288411405, -0.0130597902066, -0.00582049410513, 0.0022469159791, -0.00964075940401, -0.0380828738621, -0.0763568061844, -0.089961400489, -0.0952731732008, -0.0895604973654, -0.101346765163, -0.119569610891, -0.128233125318, -0.109253322153, -0.0821678710293, -0.041620049917, -0.0245690004857, -0.0219634796685, -0.0419014341928, -0.0651369005252}, + {0.0, 0.663188793345, 0.270439727768, 0.0190336508265, -0.0946822703696, -0.0888520332756, -0.0267575060227, 0.03588910806, 0.0599594346375, 0.041850528867, -0.00632721029526, -0.0244115687714, -0.0103162286821, 0.0119858957112, 0.0197992179523, 0.0238625339809, 0.0142267453341, 0.00296440492823, -0.00543873217766, -0.00014858213959, -0.00196572770138, -0.00750279035903, -0.0243069229182, -0.0285801812939, -0.0100437887585, 0.0259127459737, 0.0475587872734, 0.0497287926166, 0.0189008750066, -0.0156259358581, -0.0395277285226, -0.0325403937133}, + 0.2500 + }, +}; + +Model32 +CabinetII::models48000 [] = { + { + 1, /* identity */ + {1}, + {0}, + 0.2500 + }, + { + 32, /* matchless_off */ + {0.751616859768, 0.455477674067, 0.236301148417, 0.0831041136969, -0.0271403780165, -0.100856772665, -0.105648770896, -0.0532306291781, 0.00532168244437, 0.0769562829624, 0.0998339309568, 0.0558038693299, -0.00395884124382, -0.0114310936324, -0.00035476064153, 0.0174339944264, 0.0326924241347, 0.0270873548662, -0.00429020715999, 0.00156163927912, 0.0110729521074, -0.00355947960002, -0.0197465530354, -0.00226491671692, 0.000562585645118, -0.0113374627036, -0.0395530054938, -0.0773637715714, -0.110300349197, -0.102242460538, -0.0802708342222, -0.0368542661019}, + {0.0, 0.573363683971, 0.199471497847, -0.0100987131104, -0.10105055289, -0.104899707204, -0.0453437303875, 0.0227558858103, 0.0494210617945, 0.0469948522053, -0.000869801014908, -0.060632162889, -0.078080719406, -0.036500327, 0.00169111404144, 0.0161416041893, 0.00446588199593, -0.0256497606161, -0.052007235054, -0.0329954828689, -0.00846672300472, 0.00503287700528, 0.0225460696732, 0.0488769816297, 0.0448900330347, 0.0265213842101, 0.00867720983291, 0.00309440217249, 0.0106055108636, 0.0271743998844, 0.00790666559882, -0.0494793375024}, + 0.0972 + }, + { + 32, /* matchless_on */ + {0.736752793274, 0.42789796886, 0.276149514408, 0.115820415827, -0.0320628697966, -0.121795204879, -0.142828258933, -0.0859958693575, -0.0176210080708, 0.0507262077785, 0.0760681727953, 0.0516030677135, -0.0156690595908, -0.0681826247693, -0.0944163538419, -0.0902627133447, -0.0823076517005, -0.0734934090705, -0.0692943287136, -0.0513490885216, -0.0305887683924, 0.00285704997857, 0.0369925466712, 0.0764037770343, 0.103822670992, 0.130505051247, 0.126189167018, 0.0870288516942, 0.00607091602923, -0.0716539223465, -0.122336223951, -0.107802803871}, + {0.0, 0.60867772822, 0.226828570484, -0.0393069664502, -0.171393086666, -0.174192716258, -0.103361484389, -0.0132853346158, 0.028065787663, 0.0276791758057, -0.0093177316362, -0.0469821632045, -0.0621330892865, -0.0326281391326, 0.00952584471493, 0.0391305970452, 0.0343547401694, 0.0103991548433, -0.0167038490391, -0.0239538249183, -0.0200522931237, -0.00619037145571, 0.00112030880301, 0.00379111038519, -0.00425737141588, -0.00510101082859, -0.00618382168232, 0.00222622566288, 0.012234432496, 0.0240659559777, 0.00806553945799, -0.0500627523652}, + 0.1292 + }, + { + 32, /* superchamp */ + {0.736144077022, 0.533697136818, 0.208223243775, 0.0105446749467, -0.115112852124, -0.167784888349, -0.118309369108, -0.0686796829989, -0.0320689348914, 0.0293577338735, 0.0228074058112, -0.00942321170451, -0.0247236206138, -0.0382275338893, -0.0220962904251, 0.0369265390908, 0.0652234781224, 0.0625494411772, 0.0203218939615, -0.0130049534934, 0.00776964355966, 0.0408524993227, 0.0187403995074, -0.00323676614764, -0.011729909669, -0.0146182789026, -0.00520348014418, 0.0251718299467, 0.0292350516935, 0.0265773340322, 0.0181154887123, 0.00421057480694}, + {0.0, 0.610899704338, 0.116614493347, -0.107102211172, -0.17045907835, -0.125900190491, -0.0364778545046, 0.00268191730596, 0.00393059621292, -0.00442930148683, -0.0496456084728, -0.0641110080937, -0.0380451267687, -0.00269939732468, 0.0336320714582, 0.0473822399663, 0.00672982206906, -0.0376868259805, -0.0574242984978, -0.0235397064668, 0.0375124576452, 0.0561991090538, 0.0137707473486, -0.019313535496, -0.0308393757193, -0.0231851781013, -0.000359955230619, 0.0224262684571, 0.0140137052508, 0.000784652753983, -0.00886431320574, 0.00520310404507}, + 0.1627 + }, + { + 32, /* fender_68 */ + {0.940499002611, 0.474406048513, -0.234027864276, -0.245068743132, -0.0275886925241, -0.0375353084644, -0.116020540053, -0.0788142311793, -0.0192628993487, -0.0208031874862, -0.036274591111, 0.0274443468203, 0.0248807593189, -0.00647753415313, 0.0123263590476, -0.0207149994271, -0.0169433327912, 0.0367748568855, 0.0157152144192, 0.0219763333967, 0.0220500063178, -0.0236599648747, -0.028051497911, 0.0300390624893, 0.0503387731847, 0.0200944005064, -0.0199651438354, -0.0189512878551, -0.0341641453641, -0.0429368448753, -0.00172415323758, 0.0187773541719}, + {0.0, 0.438339721191, -0.314663980515, -0.200197131305, -0.0199447108206, -0.0806444850114, -0.112178302737, -0.0407327776523, -0.0162859630428, -0.04823028022, -0.0411406583855, 0.0181605305425, 0.0182296926714, 0.0118833391549, 0.00393162532115, -0.0208012980893, 0.0236552029021, 0.0440436249244, -0.015760708804, -0.00800215008051, 0.0264390446392, 0.0224755303713, -0.00488388416495, -0.0302927869543, -0.0389708286652, -0.0213138828272, -0.0196593434643, -0.0250837259433, -0.0171306364105, -0.00247139702561, -0.0442683480699, 0.00104076341183}, + 0.4976 + }, + { + 32, /* marshall */ + {0.632432814914, 0.466340577796, 0.289928964438, 0.0873773815151, -0.0637714745665, -0.134210611966, -0.135503699906, -0.0734327294692, 0.00792058229369, 0.0760927054439, 0.0890306791735, 0.0595619591479, 0.00922265898468, -0.00784921065447, 0.00721708132165, 0.0350086110935, 0.0376247852781, 0.0202910905225, -0.00870656585895, -0.0201433438279, -0.0279367587019, -0.0245180701261, -0.0152282108474, 0.00828831561931, 0.026894267099, 0.0460507228179, 0.0479724909309, 0.0409446830643, 0.0201085872414, 0.00561387003945, -0.00753169056058, 0.000986659484038}, + {0.0, 0.594136919296, 0.201493775156, -0.0716153113375, -0.180702317671, -0.160390621032, -0.0826806167453, 0.000697581661664, 0.0397029332137, 0.0299147550153, -0.0177304803895, -0.0570701545448, -0.0652412298089, -0.0298128518083, 0.0124560081161, 0.0355161884622, 0.0255626596849, 0.00762986123778, -0.00431800264305, 0.00420452150537, 0.0150803653129, 0.0291131391488, 0.0359312991789, 0.0364212054952, 0.0203516393338, 0.0022141464642, -0.0149317465975, -0.0121651677123, 0.00704936522966, 0.0353605810957, 0.0322793623201, -0.0307481566657}, + 0.0996 + }, + { + 32, /* mesa */ + {0.495930895017, 0.376476419856, 0.303586589503, 0.197845120631, 0.0899987258287, 0.00535662962566, -0.0475751298521, -0.0519576953746, -0.0376515865627, -0.0168652310379, -0.00508935920432, 0.00888673824726, 0.0109356809664, 0.00654236486877, -0.0122417367265, -0.0265484743045, -0.0339837870474, -0.0233241554396, -0.0127914848925, -0.00515836827508, -0.0209864779144, -0.0475368628257, -0.0782299905969, -0.0909360283527, -0.0983527406681, -0.0938199589393, -0.0898861541372, -0.0810532718198, -0.0815503996776, -0.0796236089322, -0.0749972587191, -0.0599151413182}, + {0.0, 0.534078389658, 0.294930996327, 0.0991032789063, -0.0272295349878, -0.0770236019127, -0.0705005212384, -0.0257307535864, 0.0146092582685, 0.0379865150974, 0.0359872042115, 0.0230902724993, -0.000725294921074, -0.0174606095957, -0.0236682462783, -0.00669570447944, 0.021362472642, 0.0512331674592, 0.0584309807453, 0.044407663655, 0.00900197651083, -0.0217065441135, -0.037007819832, -0.0257650758221, -0.00590170187955, 0.0194528583388, 0.0320489572473, 0.030386820278, 0.00581345215134, -0.02347217653, -0.0472400829369, -0.0430772235107}, + 0.2500 + }, + { + 32, /* pro_jr */ + {0.767221028694, 0.44461349725, 0.324943328323, 0.187583401624, 0.0585707039826, -0.036895934974, -0.0893306767021, -0.0935390488322, -0.0758668196298, -0.0408583447944, -0.0309741335777, -0.0417509830741, -0.0550681782871, -0.0417048932451, -0.0295194484972, -0.0177059350466, -0.0189517349534, -0.0180093708399, -0.0336546809637, -0.0511188019942, -0.0648908298083, -0.0619349722444, -0.058573104994, -0.0470621645996, -0.0597723312001, -0.0855574645731, -0.109611426273, -0.113648127167, -0.112000636381, -0.0909222239483, -0.0727424833493, -0.0362189061166}, + {0.0, 0.62970643913, 0.293410547935, 0.0578415012725, -0.0672697168081, -0.094466063484, -0.0596589574295, 0.000648321788151, 0.0432524054305, 0.0596811813862, 0.0366985835211, 0.0035102339371, -0.0156226319473, -0.00793362884142, 0.00010974226424, 0.00946937446156, 0.012432810986, 0.0166353982569, 0.00885441580212, 0.00176491241101, -0.00465797946213, -0.00706780418692, -0.0169292031721, -0.0217285491491, -0.0298358684941, -0.0214136482558, 0.00603804801211, 0.0432427970473, 0.0585065590431, 0.0472784452715, -0.00622503195681, -0.0778508047032}, + 0.2500 + }, +}; + +Model32 +CabinetII::models88200 [] = { + { + 1, /* identity */ + {1}, + {0}, + 0.2500 + }, + { + 32, /* matchless_off */ + {0.581241782856, 0.351127495653, 0.293447498861, 0.203644809011, 0.122868019886, 0.0798136296596, 0.0627344813847, 0.0582949053671, 0.0495483041303, 0.0432630437098, 0.040778980166, 0.0502959955879, 0.06102889964, 0.0717641907075, 0.0748815766238, 0.0800912666293, 0.0851573668252, 0.0920643205477, 0.0863975575062, 0.0672325976358, 0.0316956083124, -0.00434276880274, -0.0353531287352, -0.0497775530225, -0.0549729489782, -0.0523697171754, -0.0527017492312, -0.0496529350336, -0.0432932459975, -0.02532771672, -0.00704167237723, 0.0048594343372}, + {0.0, 0.527351085198, 0.306902134941, 0.121666659808, -0.000869395618695, -0.0590060725486, -0.0800321294614, -0.0812161497866, -0.0756902882293, -0.0586480829698, -0.035146960319, -0.00693669578546, 0.0137459416267, 0.0260709477944, 0.027142282904, 0.0255107789641, 0.0184912445046, 0.00787311464383, -0.012080806249, -0.0326630439808, -0.0479929895538, -0.0449384101923, -0.0257392906728, 0.00611234738181, 0.0331632616028, 0.0482685642726, 0.0424761053987, 0.0227984734932, -0.00689764194843, -0.0338856201523, -0.0506606159856, -0.036511204766}, + 0.0505 + }, + { + 32, /* matchless_on */ + {0.754229081317, 0.28992460445, 0.25506113675, 0.205825249671, 0.149736304722, 0.0965453802519, 0.043937905171, 0.000434005345846, -0.0380077969732, -0.0648440473691, -0.0820185458195, -0.0804769096126, -0.067903181347, -0.0457545818062, -0.024506391213, 0.000276698483466, 0.0227732012504, 0.0462273060245, 0.0612627993168, 0.0704402843546, 0.0668070265589, 0.0560526861609, 0.0360109823522, 0.0171596012087, -0.00254977646019, -0.0169995310247, -0.0326802854744, -0.0431803638863, -0.0527933574758, -0.0537365642607, -0.0484658084207, -0.0264410770067}, + {0.0, 0.473323278291, 0.304447812378, 0.156758267418, 0.0407417557578, -0.0375541115795, -0.084174169143, -0.0995647273704, -0.0953485009639, -0.0745284443813, -0.047611748504, -0.0160860230858, 0.00812108121932, 0.022520582633, 0.0218183858734, 0.0139436350809, -0.000684654971314, -0.0149097687302, -0.0306604197839, -0.0406022715147, -0.0468128179642, -0.0432623683601, -0.0334406989274, -0.0143890226248, 0.00558711901527, 0.0240338814196, 0.0313772357088, 0.0288551286613, 0.0119537593072, -0.0137695197232, -0.0487934292115, -0.0830489298052}, + 0.0977 + }, + { + 32, /* superchamp */ + {0.564442248694, 0.417375378841, 0.328112930961, 0.184087902524, 0.0606877879374, -0.000888211396509, -0.0240417949471, -0.0386494407725, -0.0623924578122, -0.077697122496, -0.0771755477917, -0.0625887925073, -0.0567602691995, -0.0606788148043, -0.0653972735044, -0.0482177616776, -0.0134706312764, 0.0255178539984, 0.0454519306153, 0.0488386058553, 0.040370247527, 0.0309888915369, 0.0118591255626, -0.0166655766779, -0.0524886753799, -0.0735764853592, -0.0712539506456, -0.0409275497673, 2.56200623182e-05, 0.0407426819337, 0.0605288133085, 0.045387360314}, + {0.0, 0.58401876341, 0.301866612426, 0.0749234792796, -0.0512250579262, -0.0884380547633, -0.0859341509964, -0.0715039798048, -0.0533786975427, -0.0228940420774, 0.00895370138835, 0.029234699873, 0.0249642271923, 0.00815472752255, -0.00852123193886, -0.013874697166, -0.0177655062032, -0.0244009337209, -0.0348366549323, -0.0341041586519, -0.0199202543104, 0.0049040564053, 0.0228786117828, 0.0307412470467, 0.0270357914745, 0.0202102683028, 0.00600213627849, -0.0132416519396, -0.035306113292, -0.0400865958576, -0.0122081055945, 0.061547236583}, + 0.0940 + }, + { + 32, /* fender_68 */ + {0.636561915308, 0.539655264394, 0.306940867236, -0.00798666364572, -0.2010016693, -0.196429989976, -0.0871390659769, 0.0058320328314, 0.0205797064122, -0.0137249327682, -0.0511542488948, -0.0559233911299, -0.0365269209833, -0.00933607201861, 0.00259528983031, 0.000820508580746, -0.014655020786, -0.0298656923381, -0.0363760565053, -0.0164103072662, 0.0180980103038, 0.0427307277871, 0.0289045601723, -0.00365819240342, -0.0221033761769, -0.00613002097262, 0.0137359639094, 0.0126374765575, -0.0109039821774, -0.022164851067, -0.00644276895272, 0.0406179316828}, + {0.0, 0.660098640191, 0.135995579965, -0.18643602906, -0.21362553946, -0.0765656086032, 0.0304158765248, 0.0317377501315, -0.0306547118834, -0.0742288333657, -0.0716640946732, -0.0400798411024, -0.016998894935, -0.0119106601837, -0.0209707717803, -0.0285105267284, -0.033043355156, -0.03016836978, -0.0235112391223, -0.0121431367424, -0.0083970652792, -0.0121227777881, -0.0179437299751, -0.0103936611338, 0.000810102779011, -0.000708784846704, -0.0234941025684, -0.0371015701952, -0.0180247391719, 0.0220761118738, 0.0243771530897, -0.0421517051891}, + 0.2672 + }, + { + 32, /* marshall */ + {0.487781223472, 0.313482625917, 0.286350463893, 0.224656866466, 0.146402144474, 0.0763559834141, 0.0205530599391, -0.0145817074955, -0.0366424375139, -0.0445785898927, -0.0458160857045, -0.037336889106, -0.0251791786851, -0.00575399966305, 0.0148942739024, 0.0391750282507, 0.0589388969198, 0.0752812491289, 0.0811254049966, 0.0801917939348, 0.0685526132261, 0.0533549680139, 0.0342811257343, 0.0215399491933, 0.0147049499229, 0.0198301270011, 0.030982725155, 0.0503002628087, 0.0693130546132, 0.0867905978395, 0.0881891739024, 0.0641468491285}, + {0.0, 0.51943795847, 0.326729354403, 0.149229797985, 0.0109767104297, -0.0732768493116, -0.111088974509, -0.110789539541, -0.0898934114003, -0.0564578047856, -0.0231004313356, 0.0069673688738, 0.0254240918116, 0.0337510299271, 0.0282514883492, 0.0147089116391, -0.00647743824673, -0.0269028751263, -0.0446349197143, -0.0510564142456, -0.0478791675617, -0.0324832722564, -0.0121393859238, 0.0104982033447, 0.0241412382054, 0.026038551433, 0.00994372364326, -0.0158545375622, -0.0436236854665, -0.0537883431888, -0.032574614307, 0.0387767610956}, + 0.0666 + }, + { + 32, /* mesa */ + {0.800744790951, 0.174351736281, 0.162047205857, 0.138794638546, 0.105850412073, 0.0723656260485, 0.0365740092219, 0.00431957094182, -0.0274260159266, -0.052813754463, -0.0747002681782, -0.0875980404567, -0.0959206315285, -0.0964326627017, -0.0951211930444, -0.0890916136798, -0.0839336477818, -0.0759587618493, -0.0699911420952, -0.0618103150195, -0.0562569921852, -0.0497246788081, -0.0474425366429, -0.045118852226, -0.0466084665482, -0.0466183009403, -0.048518031551, -0.0465434705359, -0.0436608634155, -0.0338725172886, -0.0202008830722, 0.0028064387038}, + {0.0, 0.348283848037, 0.278266186344, 0.208315992656, 0.142238507639, 0.0877418515218, 0.0426721771028, 0.0101211230173, -0.0142620082039, -0.0279206093939, -0.0353541175487, -0.0344380562925, -0.030780249931, -0.0230674032021, -0.016830370528, -0.00961683532214, -0.00530786189015, -0.000225073976316, 0.00276994164541, 0.00775476255757, 0.0114020240885, 0.0168731013913, 0.0203623771917, 0.0249313385656, 0.0267810408235, 0.0287888955038, 0.026286558388, 0.0210452426156, 0.00782753651909, -0.0119982689793, -0.0444362907999, -0.0880582917654}, + 0.2500 + }, + { + 32, /* pro_jr */ + {0.909835294941, 0.237116967883, 0.220493213781, 0.188296175986, 0.145804855731, 0.1035213914, 0.0593519550104, 0.018535542445, -0.0211984146917, -0.0519769598497, -0.0754321013216, -0.0869433378891, -0.0920887014799, -0.087865027182, -0.0792907797887, -0.0637463287733, -0.0482713945314, -0.0325419993651, -0.0236382913314, -0.0187673840883, -0.0211003792763, -0.0242608362201, -0.0299312006336, -0.032972160693, -0.038384284548, -0.0433373155719, -0.0522438990617, -0.0598215574684, -0.0680342990137, -0.0706075753658, -0.0696540637908, -0.0592163425206}, + {0.0, 0.437589362895, 0.316542061632, 0.204591087565, 0.109610647885, 0.0395709089276, -0.0101168883103, -0.0392507441308, -0.0536854447628, -0.0525994961208, -0.0429181531663, -0.0263178649123, -0.0108114446263, 0.00361113168474, 0.0124368978113, 0.0183164472387, 0.0173632458965, 0.0133080282174, 0.00451776800884, -0.0027292732446, -0.0084152300302, -0.00649797485834, 0.000343904158769, 0.0135853277076, 0.0260015642816, 0.0368350330248, 0.0397116093504, 0.035854103932, 0.0201173890247, -0.00598389310382, -0.0479894271495, -0.10412912505}, + 0.2500 + }, +}; + +Model32 +CabinetII::models96000 [] = { + { + 1, /* identity */ + {1}, + {0}, + 0.2500 + }, + { + 32, /* matchless_off */ + {0.576442585125, 0.306361432085, 0.256653772545, 0.177316081395, 0.0989986029973, 0.0501811139283, 0.0263950297254, 0.0211066378234, 0.0164669956215, 0.0145939695187, 0.0131915301884, 0.0224302343035, 0.0359395096833, 0.0545608587271, 0.0665798797365, 0.0764638706987, 0.0822020713116, 0.0937583388117, 0.104705110174, 0.114731370205, 0.110211793209, 0.0934363192015, 0.0618719406527, 0.0288732783262, -0.00358352145982, -0.0259155247732, -0.0441021836484, -0.0555310772717, -0.0670712283056, -0.0677576234809, -0.0520883036287, -0.00170675690763}, + {0.0, 0.508669145362, 0.322479739387, 0.156892646838, 0.035020841423, -0.0347440829067, -0.0701806136041, -0.0825008530376, -0.0845801358275, -0.0733688333095, -0.0530323023958, -0.0234536559399, 0.00360324038712, 0.0244342060698, 0.0314240125922, 0.0309189326677, 0.0230090442585, 0.0145937492998, 0.00103582471628, -0.0152025378362, -0.0363464186106, -0.0511215757185, -0.0557855361088, -0.0408742372067, -0.0130066718085, 0.023938151261, 0.0530188010691, 0.0671220652663, 0.0540529792683, 0.0164681954699, -0.0469180610472, -0.125461903689}, + 0.0494 + }, + { + 32, /* matchless_on */ + {0.941618036526, 0.239866043796, 0.218739659026, 0.1855624175, 0.143119285622, 0.098285134927, 0.049823345838, 0.00491072985196, -0.0372254815054, -0.0706502777402, -0.0969381684649, -0.109632530255, -0.11098328422, -0.0987132407502, -0.080379871629, -0.0559715185867, -0.0315381582245, -0.00496109501612, 0.0171690268626, 0.0357166271116, 0.0446464487104, 0.0469813895302, 0.0390401137056, 0.0262125456401, 0.00716840214371, -0.0108017316884, -0.028794724005, -0.0413800680682, -0.0514241182155, -0.0535943709963, -0.0501288491812, -0.0356807796594}, + {0.0, 0.436259688495, 0.303343311728, 0.180401443304, 0.0755768977826, -0.00298141418929, -0.057401860201, -0.0849229021135, -0.0921029201246, -0.0808710238831, -0.0601563297725, -0.031853887802, -0.00462566662184, 0.0189321520075, 0.0307568282097, 0.0327103981415, 0.0234112049746, 0.00941773902223, -0.00880302596543, -0.024628145492, -0.0377321989901, -0.0420727660837, -0.0390726798885, -0.0257996845469, -0.00726121684029, 0.0160981879938, 0.0352540092546, 0.0464046029779, 0.0397882340227, 0.0142875216435, -0.0354360590043, -0.105598440048}, + 0.0651 + }, + { + 32, /* superchamp */ + {0.598483659576, 0.392119614921, 0.324128816827, 0.207253363884, 0.0944270102152, 0.0269672658419, -0.00338080597527, -0.0154386943775, -0.0337854523788, -0.0528375781544, -0.0668037964282, -0.0644824272507, -0.0581122839458, -0.053620685433, -0.05941095465, -0.0599621297144, -0.0476930600655, -0.0143047492128, 0.0237480623761, 0.0559779339589, 0.0689887990541, 0.0713731354487, 0.0647181254244, 0.0560812069922, 0.0357682629483, 0.00706245212017, -0.0286615791021, -0.052644819201, -0.0590210498647, -0.041747604451, -0.0168191702228, 0.00465326173164}, + {0.0, 0.555306548005, 0.304384349565, 0.0955876011242, -0.032790937176, -0.0803585769889, -0.0834509085546, -0.069736664388, -0.0558345347225, -0.0359974911327, -0.012046069248, 0.0128302949846, 0.0234882264814, 0.0187166685281, 0.00137741738003, -0.0128825824672, -0.0213054248788, -0.0224842024484, -0.0275110748888, -0.0335451251688, -0.0384673765875, -0.0306779974376, -0.0133415017904, 0.00900611383706, 0.0222626768741, 0.0253127037082, 0.0166771042914, 0.00577574428968, -0.00773567900765, -0.0175688399329, -0.021338142267, -0.00199213694503}, + 0.0903 + }, + { + 32, /* fender_68 */ + {0.61042243584, 0.519167522444, 0.338455322638, 0.0598120788559, -0.155008295955, -0.209996385603, -0.142681005045, -0.0444570079209, 0.00529240289956, 7.6909429568e-05, -0.03354602127, -0.0535687744411, -0.049519403779, -0.0238846177015, -0.000920606029846, 0.010434338433, 0.002228774067, -0.0140907683377, -0.035872619499, -0.0481212880009, -0.0457673542097, -0.0191076772359, 0.0133771714316, 0.0322386165839, 0.0178556687427, -0.0095701287891, -0.0237842865664, -0.00484822472333, 0.0227424513401, 0.0316309750773, 0.00586735474858, -0.0235815475244}, + {0.0, 0.658865798836, 0.184872779539, -0.137135473027, -0.210003150161, -0.108221769211, 0.0110221508749, 0.0526622948184, 0.0145697157163, -0.0398151102571, -0.0659793146563, -0.0534131399862, -0.0284152189248, -0.0091286709165, -0.00636536651116, -0.00986403078301, -0.0155052371976, -0.0165973690878, -0.018011376701, -0.0154898840826, -0.0109104131649, -0.00195757926804, 0.00204116721073, 0.00157889259535, -0.00328499795407, -0.00244356007769, -0.00227606009504, -0.00603112779608, -0.0173439459505, -0.0176299504059, -0.00210293292278, 0.00864548631897}, + 0.2359 + }, + { + 32, /* marshall */ + {0.519039714244, 0.28397066065, 0.263752501402, 0.216763224092, 0.153202060875, 0.093498887372, 0.0418092813984, 0.00649080672527, -0.0187685887985, -0.0313725205166, -0.0386046242494, -0.0368255569808, -0.0319398932261, -0.0190867195417, -0.00429792893597, 0.0171895051396, 0.038509421914, 0.0625518463058, 0.0812007261611, 0.0971807963934, 0.10334087256, 0.104223746243, 0.0947810421376, 0.0820175331544, 0.0638964900287, 0.049888405421, 0.0379912291508, 0.0353343445924, 0.036271348736, 0.0455456726476, 0.0571810093304, 0.0753869660867}, + {0.0, 0.495552580909, 0.326384725738, 0.167649233033, 0.0373913746446, -0.049802990613, -0.0971841927371, -0.108389008817, -0.0971430950292, -0.0702481334571, -0.0402478232447, -0.00995144228925, 0.0120995492915, 0.0263638891687, 0.0284733804008, 0.0226883648689, 0.00733748451124, -0.0103570201666, -0.0304762029918, -0.0447374261541, -0.0534169560389, -0.0509721172171, -0.0411315716449, -0.0225994268992, -0.00306083571223, 0.0162408742504, 0.0258967736277, 0.0250750690024, 0.00862389563333, -0.0164131934788, -0.0455336929843, -0.0629205840552}, + 0.0663 + }, + { + 32, /* mesa */ + {0.816556812848, 0.150293117891, 0.141795487793, 0.124839522537, 0.099196755702, 0.0723627786971, 0.0428519140057, 0.0161310830227, -0.0110923701697, -0.034007587359, -0.0554568663798, -0.070468417213, -0.0823376819593, -0.0871844200317, -0.0898440433576, -0.0874713568897, -0.0851052646307, -0.0795934648554, -0.075427699709, -0.0687589148326, -0.0639930873009, -0.0572185996408, -0.0529180674694, -0.0475806410473, -0.0456514163291, -0.0429752541034, -0.0432519558816, -0.0416267292155, -0.0408422393067, -0.0352236824279, -0.0269876908459, -0.0103181623672}, + {0.0, 0.324884890574, 0.268628249933, 0.210962607294, 0.15379956812, 0.104238396719, 0.0608732030517, 0.0272239220101, -0.000475953058616, -0.019347999351, -0.0332735025431, -0.039418716712, -0.0418327023679, -0.0385575041649, -0.0342524288567, -0.0267537524134, -0.0202714386094, -0.0115967221036, -0.00421419915726, 0.0052675530631, 0.0133773574491, 0.0230906449798, 0.0303465968119, 0.0374618799867, 0.0402738707573, 0.0409671902591, 0.0352080031286, 0.0253938319794, 0.0070273986645, -0.0175302180141, -0.0528396401673, -0.0967034944448}, + 0.2500 + }, + { + 32, /* pro_jr */ + {0.925365759135, 0.205121186223, 0.193282167511, 0.170964672217, 0.139026712618, 0.10615970874, 0.0712170483592, 0.0387785989803, 0.00565122246474, -0.022529589284, -0.0474765753603, -0.0638195347354, -0.0750789855745, -0.0781013105481, -0.0774023301337, -0.0698851353181, -0.0601759362765, -0.0460666153988, -0.033417255906, -0.0207620686126, -0.0136627961657, -0.008873845834, -0.00924040700271, -0.00959897299234, -0.0122760927684, -0.0134131792383, -0.0169861222268, -0.0197237904964, -0.0247929394164, -0.0274056341581, -0.0290372582108, -0.0230858292646}, + {0.0, 0.384047660947, 0.296120799911, 0.212432468703, 0.136561707438, 0.0758675413252, 0.0277844248084, -0.00596868040294, -0.0302987351926, -0.0432929213814, -0.0490562834943, -0.0462652470517, -0.0403753213236, -0.030690892845, -0.022025662253, -0.0121577019191, -0.00457323646437, 0.00324370289428, 0.00777535572758, 0.0119010287281, 0.0130997070818, 0.0155933691883, 0.0177344547654, 0.023362610354, 0.028693981754, 0.0347549373256, 0.0352150834795, 0.0303066390313, 0.0145055938776, -0.0110543984149, -0.0508137742561, -0.102480420772}, + 0.2500 + }, +}; + diff --git a/plugins/LadspaEffect/caps/Cabinet.cc b/plugins/LadspaEffect/caps/Cabinet.cc new file mode 100644 index 000000000..e28b94538 --- /dev/null +++ b/plugins/LadspaEffect/caps/Cabinet.cc @@ -0,0 +1,304 @@ +/* + Cabinet.cc + + Copyright 2002-7 Tim Goetze + + http://quitte.de/dsp/ + + CabinetI - 16th order IIR filters modeled after various impulse responses + from Steve Harris' 'imp' plugin. Limited to 44.1 kHz sample rate. + + CabinetII - 32nd order IIR filters modeled after the same impulse responses + using a different algorithm. Versions for 44.1 / 48 / 88.2 / 96 kHz sample + rates, switched at runtime. +*/ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA or point your web browser to http://www.gnu.org. +*/ + +#include "basics.h" + +#include "Cabinet.h" +#include "Descriptor.h" + +Model16 +CabinetI::models [] = +{ + { + 1, /* identity */ + {1}, + {0}, + 1, + }, { + 16, /* unmatched, off-axis */ + {0.44334744339382504, 0.49764265352620912, 0.19936863766114088, 0.0038388115609433826, -0.072080744430548876, -0.092589757815768933, -0.023760971045285254, 0.058929802988203807, 0.11073296313735595, 0.14389046518738619, 0.052981055774577353, -0.11817321919764193, -0.22957467728465422, -0.26301284181138151, -0.25586853638823448, -0.10768194462289554}, + {0.0, 0.71138736215182674, 0.19571088506350195, -0.086897678126924227, -0.18344238266155902, -0.13338660100611671, -0.017424587504494098, 0.062014975470330351, 0.077979014877680469, 0.039134631327482176, -0.046646061538403727, -0.040653480351542266, 0.068462230153713749, 0.14313162261479676, 0.058844200671679531, -0.17878548463526983}, + 1 / 4.4, + }, { + 16, /* unmatched */ + {0.58952373363852417, 0.43625942509584309, 0.235412203403113, 0.048252951521505258, -0.1002076253350956, -0.14467958356216026, -0.074304873528329402, 0.060945557247412331, 0.15959845551788171, 0.20970924189636411, 0.15361368007229703, 0.025339061869183478, -0.11824836967489599, -0.19384403813690479, -0.19295873693806628, -0.058904754435169508}, + {0.0, 0.6596380198994729, 0.20825670531468143, -0.10508784276271754, -0.24698905246649294, -0.21519418569376192, -0.10057489587096909, -0.006175810942624007, -0.0019249936836196989, -0.045827268144865707, -0.10184708094147235, -0.09177820187618313, -0.017740067693127175, 0.058828573780348989, 0.010559807576350673, -0.19412688465216324}, + 1 / 5.7, + }, { + 16, /* superchamp */ + {0.5335550129666069, 0.61768496153556829, 0.2080126894040209, -0.0067283013134491337, -0.10433152421155355, -0.16159936513841233, -0.10593018443866807, -0.091854930675998661, 0.0023550324496513643, 0.14327516190088724, 0.14688292534697539, 0.089539872443625601, -0.053854769352683005, -0.15693904535289377, -0.083502230074838577, 0.0090113128614708465}, + {0.0, 0.67745858591653696, 0.044802106922746734, -0.1932642251200547, -0.18922360327572652, -0.052980570047914469, 0.020446992577988904, -0.028951451474818618, -0.085212072485126716, -0.12241212382510525, -0.089259371449674357, 0.010469056928395087, 0.049019357277555603, 0.037212453438250505, -0.046374612934843573, -0.045133341919937828}, + 1 / 4.0, + }, { + 16, /* fender-vibrolux-68 */ + {0.68447985102464837, 0.61538710771230021, -0.28804707230137599, -0.23656583372846893, 0.083100874242250655, -0.027792816938813913, 0.055558334440593965, 0.044458161718059774, -0.25467542393376252, -0.33660492613760157, -0.024663941486403884, 0.1172751972420942, -0.021832135450802759, 0.21440383631745469, 0.20828506390107443, -0.10289957687018361}, + {0.0, 0.50968169360260451, -0.48159141882733714, -0.10856607456906017, -0.026802006374108955, -0.24967309940249552, -0.21422424792787859, 0.019271890369619571, 0.08065394481240884, -0.061665636719946543, 0.031613782215493547, 0.069574436103950893, -0.07180222507768147, -0.14447996563879059, 0.012044815820150268, -0.0073237976200291044}, + 1 / 2.0, + }, { + 16, /* marshall */ + {0.38455665328113242, 0.50304089890302783, 0.33653970418909934, 0.085604896315814846, -0.070239383452479598, -0.10479060878654689, -0.060150883776583335, 0.030121882977878822, 0.12441775056532201, 0.18287316824579156, 0.17035705141865287, 0.10315414401519916, 0.036357097566567576, 0.024474446155666255, 0.042359967009557103, 0.059946316626725109}, + {0.0, 0.68167571829534335, 0.16877527811114035, -0.17427551663276897, -0.25780056810728452, -0.16065744581310681, -0.032007062964857856, 0.033882840656718101, -0.0038880045892747792, -0.084876415098991506, -0.13865107122780057, -0.10073571899064113, -0.013199668806255366, 0.038170305284592504, -0.026492576852036546, -0.12667775510054707}, + 1 / 4.2, + } +}; + +/* //////////////////////////////////////////////////////////////////////// */ + +void +CabinetI::init() +{ + h = 0; + model = 0; +} + +void +CabinetI::switch_model (int m) +{ + if (m < 0) m = 0; + else if (m > 5) m = 5; + + model = m; + + n = models[m].n; + a = models[m].a; + b = models[m].b; + + gain = models[m].gain * DSP::db2lin (getport(2)); + + memset (x, 0, sizeof (x)); + memset (y, 0, sizeof (y)); +} + +void +CabinetI::activate() +{ + switch_model ((int) getport(1)); + gain = models[model].gain * DSP::db2lin (getport(2)); +} + +template +void +CabinetI::one_cycle (int frames) +{ + sample_t * s = ports[0]; + + int m = (int) getport (1); + if (m != model) switch_model (m); + + sample_t g = models[model].gain * DSP::db2lin (getport(2)); + double gf = pow (g / gain, 1 / (double) frames); + + sample_t * d = ports[3]; + + for (int i = 0; i < frames; ++i) + { + register cabinet_float out = s[i] + normal; + + x[h] = out; + + out *= a[0]; + + for (int j = 1, z = h - 1; j < n; --z, ++j) + { + z &= 15; + out += a[j] * x[z]; + out += b[j] * y[z]; + } + + y[h] = out; + + h = (h + 1) & 15; + + F (d, i, gain * out, adding_gain); + gain *= gf; + } +} + +/* //////////////////////////////////////////////////////////////////////// */ + +PortInfo +CabinetI::port_info [] = +{ + { + "in", + INPUT | AUDIO, + {BOUNDED, -1, 1} + }, { + "model", + INPUT | CONTROL, + {BOUNDED | INTEGER | DEFAULT_1, 0, 5} + }, { + "gain (dB)", + INPUT | CONTROL, + {BOUNDED | DEFAULT_0, -24, 24} + }, { + "out", + OUTPUT | AUDIO, + {0} + } +}; + +/* //////////////////////////////////////////////////////////////////////// */ + +template <> void +Descriptor::setup() +{ + UniqueID = 1766; + Label = "CabinetI"; + Properties = HARD_RT; + + Name = CAPS "CabinetI - Loudspeaker cabinet emulation"; + Maker = "Tim Goetze "; + Copyright = "GPL, 2002-7"; + + /* fill port info and vtable */ + autogen(); +} + +/* CabinetII ////////////////////////////////////////////////////////////// */ + +#include "Cabinet-Models32.h" + +void +CabinetII::init() +{ + if (fs < 46000) + models = models44100; + else if (fs < 72000) + models = models48000; + else if (fs < 92000) + models = models88200; + else + models = models96000; + + h = 0; + model = 0; +} + +void +CabinetII::switch_model (int m) +{ + model = m; + + n = models[m].n; + a = models[m].a; + b = models[m].b; + + gain = models[m].gain * DSP::db2lin (getport(2)); + + memset (x, 0, sizeof (x)); + memset (y, 0, sizeof (y)); +} + +void +CabinetII::activate() +{ + switch_model ((int) getport(1)); +} + +template +void +CabinetII::one_cycle (int frames) +{ + sample_t * s = ports[0]; + + int m = (int) getport (1); + if (m != model) switch_model (m); + + sample_t g = models[model].gain * DSP::db2lin (getport(2)); + double gf = pow (g / gain, 1 / (double) frames); + sample_t * d = ports[3]; + + for (int i = 0; i < frames; ++i) + { + register cabinet_float out = s[i] + normal; + + x[h] = out; + + out *= a[0]; + + for (int j = 1, z = h - 1; j < n; --z, ++j) + { + z &= 31; + out += a[j] * x[z]; + out += b[j] * y[z]; + } + + y[h] = out; + + h = (h + 1) & 31; + + F (d, i, gain * out, adding_gain); + gain *= gf; + } +} + +/* //////////////////////////////////////////////////////////////////////// */ + +PortInfo +CabinetII::port_info [] = +{ + { + "in", + INPUT | AUDIO, + {BOUNDED, -1, 1} + }, { + "model", + INPUT | CONTROL, + {BOUNDED | INTEGER | DEFAULT_1, 0, 7} + }, { + "gain (dB)", + INPUT | CONTROL, + {BOUNDED | DEFAULT_0, -24, 24} + }, { + "out", + OUTPUT | AUDIO, + {0} + } +}; + +/* //////////////////////////////////////////////////////////////////////// */ + +template <> void +Descriptor::setup() +{ + UniqueID = 2581; + Label = "CabinetII"; + Properties = HARD_RT; + + Name = CAPS "CabinetII - Refined loudspeaker cabinet emulation"; + Maker = "Tim Goetze "; + Copyright = "GPL, 2002-7"; + + /* fill port info and vtable */ + autogen(); +} + diff --git a/plugins/LadspaEffect/caps/Cabinet.h b/plugins/LadspaEffect/caps/Cabinet.h new file mode 100644 index 000000000..4b6f1957d --- /dev/null +++ b/plugins/LadspaEffect/caps/Cabinet.h @@ -0,0 +1,135 @@ +/* + Cabinet.h + + Copyright 2002-5 Tim Goetze + + http://quitte.de/dsp/ + + CabinetI - 16th order IIR filters modeled after various impulse responses + from Steve Harris' 'imp' plugin. Limited to 44.1 kHz sample rate. + + CabinetII - 32nd order IIR filters modeled after the same impulse responses + using a different algorithm. Versions for 44.1 / 48 / 88.2 / 96 kHz sample + rates, switched at runtime. +*/ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA or point your web browser to http://www.gnu.org. +*/ + +#ifndef _CABINET_H_ +#define _CABINET_H_ + +#include "dsp/util.h" + +/* cabinet_float sets the data type used for the IIR history and thus the + * computing precision. doubles tend to make the sound more vivid and lively. + * You can squeeze out a few extra cycles by making this 'float' if needed. + * Be warned though that CabinetII has not been tested with 32-bit floats and + * might become unstable due to the lower computing precision. */ +typedef double cabinet_float; + +typedef struct { + int n; + cabinet_float a[16], b[16]; + float gain; +} Model16; + +typedef struct { + int n; + cabinet_float a[32], b[32]; + float gain; +} Model32; + +class CabinetI +: public Plugin +{ + public: + sample_t gain; + static Model16 models []; + + int model; + void switch_model (int m); + + int n, h; + cabinet_float * a, * b; + cabinet_float x[16], y[16]; + + template + void one_cycle (int frames); + + public: + static PortInfo port_info []; + + void init(); + + void activate(); + + void run (int n) + { + one_cycle (n); + } + + void run_adding (int n) + { + one_cycle (n); + } +}; + +/* Second version with 32nd order filters precalculated for + * 44.1 / 48 / 88.2 / 96 kHz sample rates */ + +class CabinetII +: public Plugin +{ + public: + sample_t gain; + + static Model32 models44100 []; + static Model32 models48000 []; + static Model32 models88200 []; + static Model32 models96000 []; + + Model32 * models; + int model; + void switch_model (int m); + + int n, h; + cabinet_float * a, * b; + cabinet_float x[32], y[32]; + + template + void one_cycle (int frames); + + public: + static PortInfo port_info []; + + sample_t adding_gain; + + void init(); + void activate(); + + void run (int n) + { + one_cycle (n); + } + + void run_adding (int n) + { + one_cycle (n); + } +}; + +#endif /* _CABINET_H_ */ diff --git a/plugins/LadspaEffect/caps/Chorus.cc b/plugins/LadspaEffect/caps/Chorus.cc new file mode 100644 index 000000000..cf3afe4a8 --- /dev/null +++ b/plugins/LadspaEffect/caps/Chorus.cc @@ -0,0 +1,506 @@ +/* + Chorus.cc + + Copyright 2004-7 Tim Goetze + + http://quitte.de/dsp/ + + mono and mono-to-stereo chorus units. + +*/ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA or point your web browser to http://www.gnu.org. +*/ + +#include "basics.h" + +#include "Chorus.h" +#include "Descriptor.h" + +template +void +ChorusI::one_cycle (int frames) +{ + sample_t * s = ports[0]; + + double one_over_n = 1 / (double) frames; + double ms = .001 * fs; + + double t = time; + time = getport(1) * ms; + double dt = (time - t) * one_over_n; + + double w = width; + width = getport(2) * ms; + /* clamp, or we need future samples from the delay line */ + if (width >= t - 3) width = t - 3; + double dw = (width - w) * one_over_n; + + if (rate != *ports[3]) + lfo.set_f (max (rate = getport(3), .000001), fs, lfo.get_phase()); + + double blend = getport(4); + double ff = getport(5); + double fb = getport(6); + + sample_t * d = ports[7]; + + DSP::FPTruncateMode truncate; + + for (int i = 0; i < frames; ++i) + { + sample_t x = s[i]; + + /* truncate the feedback tap to integer, better quality for less + * cycles (just a bit of zipper when changing 't', but it does sound + * interesting) */ + int ti; + fistp (t, ti); + x -= fb * delay[ti]; + + delay.put (x + normal); + +# if 0 + /* allpass delay sounds a little cleaner for a chorus + * but sucks big time when flanging. */ + x = blend * x + ff * tap.get (delay, t + w * lfo.get()); +# elif 0 + /* linear interpolation */ + x = blend * x + ff * delay.get_at (t + w * lfo.get()); +# else + /* cubic interpolation */ + x = blend * x + ff * delay.get_cubic (t + w * lfo.get()); +# endif + + F (d, i, x, adding_gain); + + t += dt; + w += dw; + } +} + +/* //////////////////////////////////////////////////////////////////////// */ + +PortInfo +ChorusI::port_info [] = +{ + { + "in", + INPUT | AUDIO, + {BOUNDED, -1, 1} + }, { + "t (ms)", + INPUT | CONTROL, + {BOUNDED | LOG | DEFAULT_LOW, 2.5, 40} + }, { + "width (ms)", + INPUT | CONTROL, + {BOUNDED | DEFAULT_1, .5, 10} + }, { + "rate (Hz)", + INPUT | CONTROL, + {BOUNDED | DEFAULT_LOW, 0, 5} + }, { + "blend", + INPUT | CONTROL, + {BOUNDED | DEFAULT_1, 0, 1} + }, { + "feedforward", + INPUT | CONTROL, + {BOUNDED | DEFAULT_LOW, 0, 1} + }, { + "feedback", + INPUT | CONTROL, + {BOUNDED | DEFAULT_0, 0, 1} + }, { + "out", + OUTPUT | AUDIO, + {0} + } +}; + +template <> void +Descriptor::setup() +{ + UniqueID = 1767; + Label = "ChorusI"; + Properties = HARD_RT; + + Name = CAPS "ChorusI - Mono chorus/flanger"; + Maker = "Tim Goetze "; + Copyright = "GPL, 2004-7"; + + /* fill port info and vtable */ + autogen(); +} + +/* //////////////////////////////////////////////////////////////////////// */ + +template +void +StereoChorusI::one_cycle (int frames) +{ + sample_t * s = ports[0]; + + double one_over_n = 1 / (double) frames; + double ms = .001 * fs; + + double t = time; + time = getport(1) * ms; + double dt = (time - t) * one_over_n; + + double w = width; + width = getport(2) * ms; + /* clamp, or we need future samples from the delay line */ + if (width >= t - 1) width = t - 1; + double dw = (width - w) * one_over_n; + + if (rate != *ports[3] && phase != *ports[4]) + { + rate = getport(3); + phase = getport(4); + double phi = left.lfo.get_phase(); + left.lfo.set_f (max (rate, .000001), fs, phi); + right.lfo.set_f (max (rate, .000001), fs, phi + phase * M_PI); + } + + double blend = getport(5); + double ff = getport(6); + double fb = getport(7); + + sample_t * dl = ports[8]; + sample_t * dr = ports[9]; + + /* to go sure (on i386) that the fistp instruction does the right thing + * when looking up fractional sample indices */ + DSP::FPTruncateMode truncate; + + for (int i = 0; i < frames; ++i) + { + sample_t x = s[i]; + + /* truncate the feedback tap to integer, better quality for less + * cycles (just a bit of zipper when changing 't', but it does sound + * interesting) */ + int ti; + fistp (t, ti); + x -= fb * delay[ti]; + + delay.put (x + normal); + + sample_t l = blend * x + ff * delay.get_cubic (t + w * left.lfo.get()); + sample_t r = blend * x + ff * delay.get_cubic (t + w * right.lfo.get()); + + F (dl, i, l, adding_gain); + F (dr, i, r, adding_gain); + + t += dt; + w += dw; + } +} + +/* //////////////////////////////////////////////////////////////////////// */ + +PortInfo +StereoChorusI::port_info [] = +{ + { + "in", + INPUT | AUDIO, + {BOUNDED, -1, 1} + }, { + "t (ms)", + INPUT | CONTROL, + {BOUNDED | DEFAULT_MIN, 2.5, 40} + }, { + "width (ms)", + INPUT | CONTROL, + {BOUNDED | DEFAULT_1, .5, 10} + }, { + "rate (Hz)", + INPUT | CONTROL, + {BOUNDED | DEFAULT_LOW, 0, 5} + }, { + "phase", + INPUT | CONTROL, + {BOUNDED | DEFAULT_MAX, 0, 1} + }, { + "blend", + INPUT | CONTROL, + {BOUNDED | DEFAULT_1, 0, 1} + }, { + "feedforward", + INPUT | CONTROL, + {BOUNDED | DEFAULT_LOW, 0, 1} + }, { + "feedback", + INPUT | CONTROL, + {BOUNDED | DEFAULT_0, 0, 1} + }, { + "out:l", + OUTPUT | AUDIO, + {0} + }, { + "out:r", + OUTPUT | AUDIO, + {0} + } +}; + +template <> void +Descriptor::setup() +{ + UniqueID = 1768; + Label = "StereoChorusI"; + Properties = HARD_RT; + + Name = CAPS "StereoChorusI - Stereo chorus/flanger"; + Maker = "Tim Goetze "; + Copyright = "GPL, 2004-7"; + + /* fill port info and vtable */ + autogen(); +} + +/* //////////////////////////////////////////////////////////////////////// */ + +template +void +ChorusII::one_cycle (int frames) +{ + sample_t * s = ports[0]; + + double one_over_n = 1 / (double) frames; + double ms = .001 * fs; + + double t = time; + time = getport(1) * ms; + double dt = (time - t) * one_over_n; + + double w = width; + width = getport(2) * ms; + /* clamp, or we need future samples from the delay line */ + if (width >= t - 3) width = t - 3; + double dw = (width - w) * one_over_n; + + if (rate != *ports[3]) + set_rate (*ports[3]); + + double blend = getport(4); + double ff = getport(5); + double fb = getport(6); + + sample_t * d = ports[7]; + + DSP::FPTruncateMode truncate; + + for (int i = 0; i < frames; ++i) + { + sample_t x = s[i]; + + x -= fb * delay.get_cubic (t); + + delay.put (filter.process (x + normal)); + + double a = 0; + for (int j = 0; j < Taps; ++j) + a += taps[j].get (delay, t, w); + + x = blend * x + ff * a; + + F (d, i, x, adding_gain); + + t += dt; + w += dw; + } +} + +/* //////////////////////////////////////////////////////////////////////// */ + +PortInfo +ChorusII::port_info [] = +{ + { + "in", + INPUT | AUDIO, + {BOUNDED, -1, 1} + }, { + "t (ms)", + INPUT | CONTROL, + {BOUNDED | LOG | DEFAULT_LOW, 2.5, 40} + }, { + "width (ms)", + INPUT | CONTROL, + {BOUNDED | DEFAULT_1, .5, 10} + }, { + "rate", + INPUT | CONTROL, + {BOUNDED | DEFAULT_LOW, 0, 1} + }, { + "blend", + INPUT | CONTROL, + {BOUNDED | DEFAULT_1, 0, 1} + }, { + "feedforward", + INPUT | CONTROL, + {BOUNDED | DEFAULT_LOW, 0, 1} + }, { + "feedback", + INPUT | CONTROL, + {BOUNDED | DEFAULT_0, 0, 1} + }, { + "out", + OUTPUT | AUDIO, + {0} + } +}; + +template <> void +Descriptor::setup() +{ + UniqueID = 2583; + Label = "ChorusII"; + Properties = HARD_RT; + + Name = CAPS "ChorusII - Mono chorus/flanger modulated by a fractal"; + Maker = "Tim Goetze "; + Copyright = "GPL, 2004-7"; + + /* fill port info and vtable */ + autogen(); +} + +/* //////////////////////////////////////////////////////////////////////// */ + +template +void +StereoChorusII::one_cycle (int frames) +{ + sample_t * s = ports[0]; + + double one_over_n = 1 / (double) frames; + double ms = .001 * fs; + + double t = time; + time = getport(1) * ms; + double dt = (time - t) * one_over_n; + + double w = width; + width = getport(2) * ms; + /* clamp, or we need future samples from the delay line */ + if (width >= t - 1) width = t - 1; + double dw = (width - w) * one_over_n; + + set_rate (*ports[3]); + + double blend = getport(4); + double ff = getport(5); + double fb = getport(6); + + sample_t * dl = ports[7]; + sample_t * dr = ports[8]; + + /* to go sure (on i386) that the fistp instruction does the right thing + * when looking up fractional sample indices */ + DSP::FPTruncateMode truncate; + + for (int i = 0; i < frames; ++i) + { + sample_t x = s[i]; + + /* truncate the feedback tap to integer, better quality for less + * cycles (just a bit of zipper when changing 't', but it does sound + * interesting) */ + int ti; + fistp (t, ti); + x -= fb * delay[ti]; + + delay.put (x + normal); + + double m; + m = left.lfo_lp.process (left.fractal.get()); + sample_t l = blend * x + ff * delay.get_cubic (t + w * m); + m = right.lfo_lp.process (right.fractal.get()); + sample_t r = blend * x + ff * delay.get_cubic (t + w * m); + + F (dl, i, l, adding_gain); + F (dr, i, r, adding_gain); + + t += dt; + w += dw; + } +} + +/* //////////////////////////////////////////////////////////////////////// */ + +PortInfo +StereoChorusII::port_info [] = +{ + { + "in", + INPUT | AUDIO, + {BOUNDED, -1, 1} + }, { + "t (ms)", + INPUT | CONTROL, + {BOUNDED | DEFAULT_LOW, 2.5, 40} + }, { + "width (ms)", + INPUT | CONTROL, + {BOUNDED | DEFAULT_LOW, .5, 10} + }, { + "rate", + INPUT | CONTROL, + {BOUNDED | DEFAULT_LOW, 0, 1} + }, { + "blend", + INPUT | CONTROL, + {BOUNDED | DEFAULT_1, 0, 1} + }, { + "feedforward", + INPUT | CONTROL, + {BOUNDED | DEFAULT_MID, 0, 1} + }, { + "feedback", + INPUT | CONTROL, + {BOUNDED | DEFAULT_0, 0, 1} + }, { + "out:l", + OUTPUT | AUDIO, + {0} + }, { + "out:r", + OUTPUT | AUDIO, + {0} + } +}; + +template <> void +Descriptor::setup() +{ + UniqueID = 2584; + Label = "StereoChorusII"; + Properties = HARD_RT; + + Name = CAPS "StereoChorusII - Stereo chorus/flanger modulated by a fractal"; + Maker = "Tim Goetze "; + Copyright = "GPL, 2004-7"; + + /* fill port info and vtable */ + autogen(); +} + + diff --git a/plugins/LadspaEffect/caps/Chorus.h b/plugins/LadspaEffect/caps/Chorus.h new file mode 100644 index 000000000..03ed256ec --- /dev/null +++ b/plugins/LadspaEffect/caps/Chorus.h @@ -0,0 +1,301 @@ +/* + Chorus.h + + Copyright 2004-5 Tim Goetze + + http://quitte.de/dsp/ + + mono and stereo chorus/flanger units, traditional designs and some + differentiated a bit further. + +*/ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA or point your web browser to http://www.gnu.org. +*/ + +#ifndef _CHORUS_H_ +#define _CHORUS_H_ + +#include "dsp/Sine.h" +#include "dsp/Roessler.h" +#include "dsp/Lorenz.h" +#include "dsp/Delay.h" +#include "dsp/OnePole.h" +#include "dsp/BiQuad.h" +#include "dsp/RBJ.h" + +class ChorusStub +: public Plugin +{ + public: + sample_t time, width, rate; +}; + +class ChorusI +: public ChorusStub +{ + public: + DSP::Sine lfo; + DSP::Delay delay; + DSP::DelayTapA tap; + + template + void one_cycle (int frames); + + public: + static PortInfo port_info []; + + void init() + { + rate = .15; + delay.init ((int) (.040 * fs)); + } + + void activate() + { + time = 0; + width = 0; + + rate = *ports[3]; + + delay.reset(); + tap.reset(); + + lfo.set_f (rate, fs, 0); + } + + void run (int n) + { + one_cycle (n); + } + + void run_adding (int n) + { + one_cycle (n); + } +}; + +class StereoChorusI +: public ChorusStub +{ + public: + sample_t rate; + sample_t phase; + + DSP::Delay delay; + + struct { + DSP::Sine lfo; + DSP::DelayTapA tap; + } left, right; + + template + void one_cycle (int frames); + + public: + static PortInfo port_info []; + + void init() + { + rate = .15; + phase = .5; /* pi */ + + delay.init ((int) (.040 * fs)); + } + + void activate() + { + time = 0; + width = 0; + + delay.reset(); + + left.tap.reset(); + right.tap.reset(); + + left.lfo.set_f (rate, fs, 0); + right.lfo.set_f (rate, fs, phase * M_PI); + } + + void run (int n) + { + one_cycle (n); + } + + void run_adding (int n) + { + one_cycle (n); + } +}; + +/* //////////////////////////////////////////////////////////////////////// */ + +#define FRACTAL_RATE 0.02 + +/* fractally modulated Chorus units */ + +class FracTap +{ + public: + DSP::Lorenz f1; + DSP::Roessler f2; + DSP::OnePoleLP lp; + + void init (double fs) + { + lp.set_f (30. / fs); + f1.init (.001, frandom()); + f2.init (.001, frandom()); + } + + void set_rate (sample_t r) + { + f1.set_rate (r * FRACTAL_RATE); + f2.set_rate (3.3 * r * FRACTAL_RATE); + } + + /* t = time, w = width, should inline nicely */ + sample_t get (DSP::Delay & d, double t, double w) + { + double m = lp.process (f1.get() + .3 * f2.get()); + return d.get_cubic (t + w * m); + } +}; + +class ChorusII +: public ChorusStub +{ + public: + enum { + Taps = 1 + }; + + FracTap taps[Taps]; + DSP::BiQuad filter; + DSP::Delay delay; + + template + void one_cycle (int frames); + + void set_rate (sample_t r) + { + rate = r; + for (int i = 0; i < Taps; ++i) + { + taps[i].set_rate (rate * (i * FRACTAL_RATE) / Taps); + // fprintf (stderr, "[%d] %.3f\n", i, (rate * (i * FRACTAL_RATE) / Taps)); + } + } + + public: + static PortInfo port_info []; + + void init() + { + delay.init ((int) (.040 * fs)); + for (int i = 0; i < Taps; ++i) + taps[i].init (fs); + DSP::RBJ::HiShelve (1000. / fs, 1., 6, filter.a, filter.b); + } + + void activate() + { + time = 0; + width = 0; + + set_rate (*ports[3]); + + delay.reset(); + filter.reset(); + } + + void run (int n) + { + one_cycle (n); + } + + void run_adding (int n) + { + one_cycle (n); + } +}; + +class StereoChorusII +: public ChorusStub +{ + public: + sample_t rate; + sample_t phase; + + DSP::Delay delay; + + struct { + DSP::Roessler fractal; + DSP::OnePoleLP lfo_lp; + DSP::DelayTapA tap; + } left, right; + + template + void one_cycle (int frames); + + void set_rate (sample_t r) + { + rate = r; + left.fractal.set_rate (rate * FRACTAL_RATE); + right.fractal.set_rate (rate * FRACTAL_RATE); + left.lfo_lp.set_f (3. / fs); + right.lfo_lp.set_f (3. / fs); + } + + public: + static PortInfo port_info []; + sample_t adding_gain; + + void init() + { + phase = .5; /* pi */ + + delay.init ((int) (.040 * fs)); + + left.fractal.init (.001, frandom()); + right.fractal.init (.001, frandom()); + } + + void activate() + { + time = 0; + width = 0; + + delay.reset(); + + left.tap.reset(); + right.tap.reset(); + + set_rate (*ports[3]); + } + + void run (int n) + { + one_cycle (n); + } + + void run_adding (int n) + { + one_cycle (n); + } +}; + +#endif /* _CHORUS_H_ */ diff --git a/plugins/LadspaEffect/caps/Click.cc b/plugins/LadspaEffect/caps/Click.cc new file mode 100644 index 000000000..d862c55f4 --- /dev/null +++ b/plugins/LadspaEffect/caps/Click.cc @@ -0,0 +1,233 @@ +/* + Click.cc + + Copyright 2002-7 Tim Goetze + + http://quitte.de/dsp/ + + Plugins playing a sound snippet in regular intervals. + +*/ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA or point your web browser to http://www.gnu.org. +*/ + +#include "basics.h" + +#include "waves/click.h" +#include "waves/money.h" + +#include "Click.h" +#include "Descriptor.h" + +void +ClickStub::init (float * _wave, int _N) +{ + wave = _wave; + N = _N; + bpm = -1; +} + +template +void +ClickStub::one_cycle (int frames) +{ + bpm = getport(0); + sample_t gain = getport(1) * *ports[1]; + lp.set (1 - *ports[2]); + + sample_t * d = ports[3]; + + while (frames) + { + if (period == 0) + { + period = (int) (fs * 60 / bpm); + played = 0; + } + + int n = min (frames, period); + + if (played < N) + { + n = min (n, N - played); + + for (int i = 0; i < n; ++i) + { + sample_t x = gain * wave [played + i] + normal; + F (d, i, lp.process (x), adding_gain); + normal = -normal; + } + + played += n; + } + else + { + for (int i = 0; i < n; ++i) + { + F (d, i, lp.process (normal), adding_gain); + normal = -normal; + } + } + + period -= n; + frames -= n; + d += n; + } +} + +/* //////////////////////////////////////////////////////////////////////// */ + +PortInfo +ClickStub::port_info [] = +{ + { + "bpm", + INPUT | CONTROL, + {BOUNDED | DEFAULT_LOW, 4, 244} + }, { + "volume", + INPUT | CONTROL, + {BOUNDED | DEFAULT_MID, 0, 1} + }, { + "damping", + INPUT | CONTROL, + {BOUNDED | DEFAULT_HIGH, 0, 1} + }, { + "out", + OUTPUT | AUDIO, + {0} + } +}; + +/* //////////////////////////////////////////////////////////////////////// */ + +#define LENGTH(W) ((int) (sizeof (W) / sizeof (float))) + +void +Click::init() +{ + this->ClickStub::init (click, LENGTH (click)); +} + +template <> void +Descriptor::setup() +{ + UniqueID = 1769; + Label = "Click"; + Properties = HARD_RT; + + Name = CAPS "Click - Metronome"; + Maker = "Tim Goetze "; + Copyright = "GPL, 2004-7"; + + /* fill port info and vtable */ + autogen(); +} + +/* //////////////////////////////////////////////////////////////////////// */ + +PortInfo +CEO::port_info [] = +{ + { + "mpm", + INPUT | CONTROL, + {BOUNDED | DEFAULT_HIGH, 4, 244} + }, { + "volume", + INPUT | CONTROL, + {BOUNDED | DEFAULT_MID, 0, 1} + }, { + "damping", + INPUT | CONTROL, + {BOUNDED | DEFAULT_MIN, 0, 1} + }, { + "out", + OUTPUT | AUDIO, + {0} + } +}; + +void +CEO::init() +{ + this->ClickStub::init (money, LENGTH (money)); +} + +template <> void +Descriptor::setup() +{ + UniqueID = 1770; + Label = "CEO"; + Properties = HARD_RT; + + Name = CAPS "CEO - Chief Executive Oscillator"; + Maker = "Tim Goetze "; + Copyright = "GPL, 2004-7"; + + /* fill port info and vtable */ + autogen(); +} + +/* //////////////////////////////////////////////////////////////////////// */ + +float dirac [] = { 1, }; + +PortInfo +Dirac::port_info [] = +{ + { + "ppm", + INPUT | CONTROL, + {BOUNDED | DEFAULT_MIN, 30, 60} + }, { + "volume", + INPUT | CONTROL, + {BOUNDED | DEFAULT_0, 0, 1} + }, { + "damping", + INPUT | CONTROL, + {BOUNDED | DEFAULT_0, 0, 1} + }, { + "out", + OUTPUT | AUDIO, + {0} + } +}; + +void +Dirac::init() +{ + this->ClickStub::init (dirac, LENGTH (dirac)); +} + +template <> void +Descriptor::setup() +{ + UniqueID = 2585; + Label = "Dirac"; + Properties = HARD_RT; + + Name = CAPS "Dirac - One-sample impulse generator"; + Maker = "Tim Goetze "; + Copyright = "GPL, 2004-7"; + + /* fill port info and vtable */ + autogen(); +} + + diff --git a/plugins/LadspaEffect/caps/Click.h b/plugins/LadspaEffect/caps/Click.h new file mode 100644 index 000000000..feb5bc7a5 --- /dev/null +++ b/plugins/LadspaEffect/caps/Click.h @@ -0,0 +1,98 @@ +/* + Click.h + + Copyright 2004-5 Tim Goetze + + http://quitte.de/dsp/ + + units perpetually repeating a recorded sample. + +*/ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA or point your web browser to http://www.gnu.org. +*/ + +#ifndef _CLICK_H_ +#define _CLICK_H_ + +#include "dsp/OnePole.h" +#include "dsp/util.h" + +class ClickStub +: public Plugin +{ + public: + sample_t bpm; + + float * wave; + int N; /* number of samples in wave */ + + DSP::OnePoleLP lp; + + int period; /* frames remaining in period */ + int played; /* frames played from sample */ + + template + void one_cycle (int frames); + + public: + static PortInfo port_info []; + + void init (float * _wave, int _N); + + void activate() + { + played = 0; + period = 0; + } + + void run (int n) + { + one_cycle (n); + } + + void run_adding (int n) + { + one_cycle (n); + } +}; + +class Click +: public ClickStub +{ + public: + void init(); +}; + +class CEO +: public ClickStub +{ + public: + void init(); + + static PortInfo port_info []; +}; + +class Dirac +: public ClickStub +{ + public: + void init(); + + static PortInfo port_info []; +}; + +#endif /* _CLICK_H_ */ diff --git a/plugins/LadspaEffect/caps/Clip.cc b/plugins/LadspaEffect/caps/Clip.cc new file mode 100644 index 000000000..20349144b --- /dev/null +++ b/plugins/LadspaEffect/caps/Clip.cc @@ -0,0 +1,148 @@ +/* + Clip.cc + + Copyright 2003-7 Tim Goetze + + http://quitte.de/dsp/ + + simple oversampled hard clipper + +*/ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA or point your web browser to http://www.gnu.org. +*/ + +#include "basics.h" + +#include "Clip.h" +#include "Descriptor.h" + +void +Clip::init() +{ + gain = 1; + + threshold[0] = -.9; + threshold[1] = +.9; + + /* going a bit lower than nominal with fc */ + double f = .5 * M_PI / OVERSAMPLE; + + /* construct the upsampler filter kernel */ + DSP::sinc (f, up.c, FIR_SIZE); + DSP::kaiser (up.c, FIR_SIZE, 6.4); + + /* copy upsampler filter kernel for downsampler, make sum */ + double s = 0; + for (int i = 0; i < up.n; ++i) + down.c[i] = up.c[i], + s += up.c[i]; + + /* scale downsampler kernel for unity gain */ + s = 1 / s; + for (int i = 0; i < down.n; ++i) + down.c[i] *= s; + + /* scale upsampler kernel for unity gain */ + s *= OVERSAMPLE; + for (int i = 0; i < up.n; ++i) + up.c[i] *= s; +} + +inline sample_t +Clip::clip (sample_t a) +{ + if (a < threshold[0]) + return threshold[0]; + if (a > threshold[1]) + return threshold[1]; + return a; +} + +template +void +Clip::one_cycle (int frames) +{ + sample_t * s = ports[0]; + + double g = getport (1); + double gf; + if (g == gain_db) + gf = 1; + else + { + gain_db = g; + sample_t g = DSP::db2lin (gain_db); + gf = pow (g / gain, 1 / (double) frames); + } + + sample_t * d = ports[2]; + *ports[3] = OVERSAMPLE; + + for (int i = 0; i < frames; ++i) + { + register sample_t a = gain * s[i]; + + a = down.process (clip (up.upsample (a))); + + for (int o = 1; o < OVERSAMPLE; ++o) + down.store (clip (up.pad (o))); + + F (d, i, a, adding_gain); + + gain *= gf; + } +} + +/* //////////////////////////////////////////////////////////////////////// */ + +PortInfo +Clip::port_info [] = +{ + { + "in", + INPUT | AUDIO, + {BOUNDED, -1, 1} + }, { + "gain (dB)", + INPUT | CONTROL, + {BOUNDED | DEFAULT_1, -72, 72} + }, { + "out", + OUTPUT | AUDIO, + {0} + }, { + "latency", + OUTPUT | CONTROL, + {0} + } +}; + +template <> void +Descriptor::setup() +{ + UniqueID = 1771; + Label = "Clip"; + Properties = HARD_RT; + + Name = CAPS "Clip - Hard clipper, 8x oversampled"; + Maker = "Tim Goetze "; + Copyright = "GPL, 2003-7"; + + /* fill port info and vtable */ + autogen(); +} + diff --git a/plugins/LadspaEffect/caps/Clip.h b/plugins/LadspaEffect/caps/Clip.h new file mode 100644 index 000000000..1be21bc3b --- /dev/null +++ b/plugins/LadspaEffect/caps/Clip.h @@ -0,0 +1,87 @@ +/* + Clip.h + + Copyright 2004-5 Tim Goetze + + http://quitte.de/dsp/ + + oversampled hard ('diode', 'transistor', sometimes 'op-amp') clipper. + +*/ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA or point your web browser to http://www.gnu.org. +*/ + +#ifndef _CLIP_H_ +#define _CLIP_H_ + +#include "dsp/util.h" +#include "dsp/FIR.h" +#include "dsp/sinc.h" +#include "dsp/windows.h" + +class Clip +: public Plugin +{ + public: + sample_t gain, gain_db; + + sample_t threshold[2]; + + enum { + OVERSAMPLE = 8, + FIR_SIZE = 64, + }; + + /* antialias filters */ + DSP::FIRUpsampler up; + DSP::FIR down; + + template + void one_cycle (int frames); + + inline sample_t clip (sample_t x); + + public: + static PortInfo port_info[]; + + Clip() + : up (FIR_SIZE, OVERSAMPLE), + down (FIR_SIZE) + { } + + void init(); + + void activate() + { + up.reset(); + down.reset(); + gain_db = *ports[1]; + gain = DSP::db2lin (gain_db); + } + + void run (int n) + { + one_cycle (n); + } + + void run_adding (int n) + { + one_cycle (n); + } +}; + +#endif /* _CLIP_H_ */ diff --git a/plugins/LadspaEffect/caps/Compress.cc b/plugins/LadspaEffect/caps/Compress.cc new file mode 100644 index 000000000..3d9725a64 --- /dev/null +++ b/plugins/LadspaEffect/caps/Compress.cc @@ -0,0 +1,153 @@ +/* + Compress.cc + + Copyright 2004-7 Tim Goetze + + http://quitte.de/dsp/ + + mono compressor suitable for solo instruments. adaptation of Steve + Harris' 'sc1' unit, with minor tweaks: table lookup for attack and + release time to frames mapping replaced with exp. port order changed. +*/ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA or point your web browser to http://www.gnu.org. +*/ + +#include "basics.h" + +#include "Compress.h" +#include "Descriptor.h" + +template +void +Compress::one_cycle (int frames) +{ + sample_t * s = ports[0]; + + sample_t range = DSP::db2lin (getport(1)); + sample_t ratio = (*ports[2] - 1) / getport(2); + + /* sc1 has lookup tables here, and they're only 40 % used (400 ms/1 s). + * thus, sc1's attack/release controls are a bit coarse due to truncation + * error. calling exp() once per cycle doesn't seem too expensive. + * + * besides, i have a suspicion that the attack and release parameters + * don't work like they should. if they, as the code suggests, control + * an exponential envelope fade, pow (.5, n_frames) or something like + * that seems more appropriate. so ... + * + * TODO: check whether these parameters work like they should, try pow() + */ + double ga = exp (-1 / (fs * getport(3))); + double gr = exp (-1 / (fs * getport(4))); + + sample_t threshold = getport(5); + sample_t knee = getport(6); + + sample_t * d = ports[7]; + + sample_t knee0 = DSP::db2lin (threshold - knee); + sample_t knee1 = DSP::db2lin (threshold + knee); + + sample_t ef_a = ga * .25; + sample_t ef_ai = 1 - ef_a; + + for (int i = 0; i < frames; ++i) + { + sum += s[i] * s[i]; + + if (amp > env) + env = env * ga + amp * (1 - ga); + else + env = env * gr + amp * (1 - gr); + + if ((count++ & 3) == 3) + { + amp = rms.process (sum * .25); + sum = 0; + + if (env < knee0) + gain_t = 1; + else if (env < knee1) + { + float x = -(threshold - knee - DSP::lin2db (env)) / knee; + gain_t = DSP::db2lin (-knee * ratio * x * x * 0.25f); + } + else + gain_t = DSP::db2lin ((threshold - DSP::lin2db (env)) * ratio); + } + + gain = gain * ef_a + gain_t * ef_ai; + + F (d, i, s[i] * gain * range, adding_gain); + } +} + +/* //////////////////////////////////////////////////////////////////////// */ + +PortInfo +Compress::port_info [] = +{ + { + "in", + INPUT | AUDIO, + {BOUNDED, -1, 1} + }, { + "gain (dB)", + INPUT | CONTROL, + {BOUNDED | DEFAULT_LOW, 0, 24} + }, { + "ratio (1:n)", + INPUT | CONTROL, + {BOUNDED | DEFAULT_MIN, 1, 10} + }, { + "attack (s)", + INPUT | CONTROL, + {BOUNDED | DEFAULT_MIN, .001, 1} + }, { + "release (s)", + INPUT | CONTROL, + {BOUNDED | DEFAULT_MID, .001, 1} + }, { + "threshold (dB)", + INPUT | CONTROL, + {BOUNDED | DEFAULT_0, -30, 400} + }, { + "knee radius (dB)", + INPUT | CONTROL, + {BOUNDED | DEFAULT_LOW, 1, 10} + }, { + "out", + OUTPUT | AUDIO, + {0} + } +}; + +template <> void +Descriptor::setup() +{ + UniqueID = 1772; + Label = "Compress"; + Properties = HARD_RT; + + Name = CAPS "Compress - Mono compressor"; + Maker = "Tim Goetze , Steve Harris "; + Copyright = "GPL, 2004-7"; + + /* fill port info and vtable */ + autogen(); +} + diff --git a/plugins/LadspaEffect/caps/Compress.h b/plugins/LadspaEffect/caps/Compress.h new file mode 100644 index 000000000..2bd722c7e --- /dev/null +++ b/plugins/LadspaEffect/caps/Compress.h @@ -0,0 +1,78 @@ +/* + Compress.h + + Copyright 2004-5 Tim Goetze , Steve Harris + + http://quitte.de/dsp/ + + mono compressor. + +*/ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA or point your web browser to http://www.gnu.org. +*/ + +#ifndef _COMPRESS_H_ +#define _COMPRESS_H_ + +#include "dsp/RMS.h" +#include "dsp/util.h" + +class Compress +: public Plugin +{ + public: + double fs; + sample_t f; + + DSP::RMS rms; + sample_t sum, amp, env, gain, gain_t; + + int count; + + template + void one_cycle (int frames); + + public: + static PortInfo port_info []; + + void init() {} + void activate() + { + rms.reset(); + + sum = 0; + count = 0; + + amp = 0; + env = 0; + + gain = 0; + gain_t = 0; + } + + void run (int n) + { + one_cycle (n); + } + + void run_adding (int n) + { + one_cycle (n); + } +}; + +#endif /* _COMPRESS_H_ */ diff --git a/plugins/LadspaEffect/caps/Descriptor.h b/plugins/LadspaEffect/caps/Descriptor.h new file mode 100644 index 000000000..12c5d1c88 --- /dev/null +++ b/plugins/LadspaEffect/caps/Descriptor.h @@ -0,0 +1,222 @@ +/* + Descriptor.h + + Copyright 2004-10 Tim Goetze + + http://quitte.de/dsp/ + + Creating a LADSPA_Descriptor for a CAPS plugin via a C++ template, + saving a virtual function call compared to the usual method used + for C++ plugins in a C context. + + Descriptor

expects P to declare some common methods, like init(), + activate() etc, plus a static port_info[] and LADSPA_Data * ports[] + and adding_gain. (P should derive from Plugin, too.) + +*/ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA or point your web browser to http://www.gnu.org. +*/ + +#ifndef _DESCRIPTOR_H_ +#define _DESCRIPTOR_H_ + +#ifdef __SSE__ +#include +#endif +#ifdef __SSE3__ +#include +#endif + +/* common stub for Descriptor makes it possible to delete() without special- + * casing for every plugin class. + */ +class DescriptorStub +: public LADSPA_Descriptor +{ + public: + DescriptorStub() + { + PortCount = 0; + } + + ~DescriptorStub() + { + if (PortCount) + { + delete [] PortNames; + delete [] PortDescriptors; + delete [] PortRangeHints; + } + } +}; + +inline void +processor_specific_denormal_measures() +{ + #ifdef __SSE3__ + /* this one works reliably on a 6600 Core2 */ + _MM_SET_DENORMALS_ZERO_MODE (_MM_DENORMALS_ZERO_ON); + #endif + + #ifdef __SSE__ + /* this one doesn't ... */ + _MM_SET_FLUSH_ZERO_MODE (_MM_FLUSH_ZERO_ON); + #endif +} + +template +class Descriptor +: public DescriptorStub +{ + public: + LADSPA_PortRangeHint * ranges; + + public: + Descriptor() { setup(); } + void setup(); + + void autogen() + { + PortCount = (sizeof (T::port_info) / sizeof (PortInfo)); + + /* unroll PortInfo members */ + const char ** names = new const char * [PortCount]; + LADSPA_PortDescriptor * desc = new LADSPA_PortDescriptor [PortCount]; + ranges = new LADSPA_PortRangeHint [PortCount]; + + /* could also assign directly but const_cast is ugly. */ + for (int i = 0; i < (int) PortCount; ++i) + { + names[i] = T::port_info[i].name; + desc[i] = T::port_info[i].descriptor; + ranges[i] = T::port_info[i].range; + } + + PortNames = names; + PortDescriptors = desc; + PortRangeHints = ranges; + + /* LADSPA_Descriptor vtable entries */ + instantiate = _instantiate; + connect_port = _connect_port; + activate = _activate; + run = _run; + run_adding = _run_adding; + set_run_adding_gain = _set_run_adding_gain; + deactivate = 0; + cleanup = _cleanup; + } + + static LADSPA_Handle _instantiate ( + const struct _LADSPA_Descriptor * d, ulong fs) + { + T * plugin = new T(); + int n = (int) d->PortCount; + + LADSPA_PortRangeHint * ranges = ((Descriptor *) d)->ranges; + plugin->ranges = ranges; + + plugin->ports = new sample_t * [n]; + + /* connect to lower bound as a safety measure */ + for (int i = 0; i < n; ++i) + plugin->ports[i] = &(ranges[i].LowerBound); + + plugin->fs = fs; + plugin->normal = NOISE_FLOOR; + plugin->init(); + + return plugin; + } + + static void _connect_port (LADSPA_Handle h, ulong i, LADSPA_Data * p) + { + ((T *) h)->ports[i] = p; + } + + static void _activate (LADSPA_Handle h) + { + T * plugin = (T *) h; + + plugin->first_run = 1; + + /* since none of the plugins do any RT-critical work in + * activate(), it's safe to defer the actual call to the + * plugin's activate() method for the first run() after + * the host called in here. + * + * It's the simplest way to prevent a parameter smoothing sweep + * in the first audio block after activation. + plugin->activate(); + */ + } + + static void _run (LADSPA_Handle h, ulong n) + { + T * plugin = (T *) h; + + /* We don't reset the processor flags later, it's true. */ + processor_specific_denormal_measures(); + + /* If this is the first audio block after activation, + * initialize the plugin from the current set of parameters. */ + if (plugin->first_run) + { + plugin->activate(); + plugin->first_run = 0; + } + + plugin->run (n); + plugin->normal = -plugin->normal; + } + + static void _run_adding (LADSPA_Handle h, ulong n) + { + T * plugin = (T *) h; + + /* We don't reset the processor flags later, it's true. */ + processor_specific_denormal_measures(); + + /* If this is the first audio block after activation, + * initialize the plugin from the current set of parameters. */ + if (plugin->first_run) + { + plugin->activate(); + plugin->first_run = 0; + } + + plugin->run_adding (n); + plugin->normal = -plugin->normal; + } + + static void _set_run_adding_gain (LADSPA_Handle h, LADSPA_Data g) + { + T * plugin = (T *) h; + + plugin->adding_gain = g; + } + + static void _cleanup (LADSPA_Handle h) + { + T * plugin = (T *) h; + + delete [] plugin->ports; + delete plugin; + } +}; + +#endif /* _DESCRIPTOR_H_ */ diff --git a/plugins/LadspaEffect/caps/Eq.cc b/plugins/LadspaEffect/caps/Eq.cc new file mode 100644 index 000000000..dabd1b183 --- /dev/null +++ b/plugins/LadspaEffect/caps/Eq.cc @@ -0,0 +1,335 @@ +/* + Eq.cc + + Copyright 2002-7 Tim Goetze + + http://quitte.de/dsp/ + + 10-band octave-spread equalizer. + +*/ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA or point your web browser to http://www.gnu.org. +*/ + +#include "basics.h" +#include + +#include "Eq.h" +#include "Descriptor.h" + +/* slight adjustments to gain to keep response optimally flat at + * 0 dB gain in all bands */ +inline static double +adjust_gain (int i, double g) +{ + static float adjust[] = { + 0.69238604707174034, 0.67282771124180096, + 0.67215187672467813, 0.65768648447259315, + 0.65988083755898952, 0.66359580101701909, + 0.66485139160960427, 0.65890297086039662, + 0.6493229390740376, 0.82305724539749325 + }; + + return g * adjust[i]; +} + +#define Q 1.414 + +void +Eq::init() +{ + eq.init (fs, Q); +} + +void +Eq::activate() +{ + for (int i = 0; i < 10; ++i) + { + gain[i] = getport (1 + i); + eq.gain[i] = adjust_gain (i, DSP::db2lin (gain[i])); + eq.gf[i] = 1; + } +} + +template +void +Eq::one_cycle (int frames) +{ + sample_t * s = ports[0]; + + /* evaluate band gain changes and compute recursion factor to prevent + * zipper noise */ + double one_over_n = frames > 0 ? 1. / frames : 1; + + for (int i = 0; i < 10; ++i) + { + sample_t g = getport (1 + i); + if (g == gain[i]) + { + /* no gain factoring */ + eq.gf[i] = 1; + continue; + } + gain[i] = g; + + double want = adjust_gain (i, DSP::db2lin (g)); + eq.gf[i] = pow (want / eq.gain[i], one_over_n); + } + + sample_t * d = ports[11]; + + for (int i = 0; i < frames; ++i) + { + sample_t x = s[i]; + x = eq.process (x); + F (d, i, x, adding_gain); + } + + eq.normal = -normal; + eq.flush_0(); +} + +/* //////////////////////////////////////////////////////////////////////// */ + +PortInfo +Eq::port_info [] = +{ + { + "in", + INPUT | AUDIO, + {0, -1, 1} + }, { + "31 Hz", + INPUT | CONTROL, + {BOUNDED | DEFAULT_0, -48, 24} + }, { + "63 Hz", + INPUT | CONTROL, + {BOUNDED | DEFAULT_0, -48, 24} + }, { + "125 Hz", + INPUT | CONTROL, + {BOUNDED | DEFAULT_0, -48, 24} + }, { + "250 Hz", + INPUT | CONTROL, + {BOUNDED | DEFAULT_0, -48, 24} + }, { + "500 Hz", + INPUT | CONTROL, + {BOUNDED | DEFAULT_0, -48, 24} + }, { + "1 kHz", + INPUT | CONTROL, + {BOUNDED | DEFAULT_0, -48, 24} + }, { + "2 kHz", + INPUT | CONTROL, + {BOUNDED | DEFAULT_0, -48, 24} + }, { + "4 kHz", + INPUT | CONTROL, + {BOUNDED | DEFAULT_0, -48, 24} + }, { + "8 kHz", + INPUT | CONTROL, + {BOUNDED | DEFAULT_0, -48, 24} + }, { + "16 kHz", + INPUT | CONTROL, + {BOUNDED | DEFAULT_0, -48, 24} + }, { + "out", + OUTPUT | AUDIO, + {0} + } +}; + +template <> void +Descriptor::setup() +{ + UniqueID = 1773; + Label = "Eq"; + Properties = HARD_RT; + + Name = CAPS "Eq - 10-band equalizer"; + Maker = "Tim Goetze "; + Copyright = "GPL, 2004-7"; + + /* fill port info and vtable */ + autogen(); +} + +/* //////////////////////////////////////////////////////////////////////// */ + +void +Eq2x2::init() +{ + for (int c = 0; c < 2; ++c) + eq[c].init (fs, Q); +} + +void +Eq2x2::activate() +{ + /* Fetch current parameter settings so we won't sweep band gains in the + * first block to process. + */ + for (int i = 0; i < 10; ++i) + { + gain[i] = getport (2 + i); + double a = adjust_gain (i, DSP::db2lin (gain[i])); + for (int c = 0; c < 2; ++c) + eq[c].gf[i] = 1, + eq[c].gain[i] = a; + } +} + +template +void +Eq2x2::one_cycle (int frames) +{ + /* evaluate band gain changes and compute recursion factor to prevent + * zipper noise */ + double one_over_n = frames > 0 ? 1. / frames : 1; + + for (int i = 0; i < 10; ++i) + { + double a; + + if (*ports [2 + i] == gain[i]) + /* still same value, no gain fade */ + a = 1; + else + { + gain[i] = getport (2 + i); + + /* prepare factor for logarithmic gain fade */ + a = adjust_gain (i, DSP::db2lin (gain[i])); + a = pow (a / eq[0].gain[i], one_over_n); + } + + for (int c = 0; c < 2; ++c) + eq[c].gf[i] = a; + } + + for (int c = 0; c < 2; ++c) + { + sample_t + * s = ports[c], + * d = ports[12 + c]; + + for (int i = 0; i < frames; ++i) + { + sample_t x = s[i]; + x = eq[c].process (x); + F (d, i, x, adding_gain); + } + } + + /* flip 'renormal' values */ + for (int c = 0; c < 2; ++c) + { + eq[c].normal = normal; + eq[c].flush_0(); + } +} + +PortInfo +Eq2x2::port_info [] = +{ + { + "in:l", + INPUT | AUDIO, + {0, -1, 1} + }, { + "in:r", + INPUT | AUDIO, + {0, -1, 1} + }, { + "31 Hz", + INPUT | CONTROL, + {BOUNDED | DEFAULT_0, -48, 24} + }, { + "63 Hz", + INPUT | CONTROL, + {BOUNDED | DEFAULT_0, -48, 24} + }, { + "125 Hz", + INPUT | CONTROL, + {BOUNDED | DEFAULT_0, -48, 24} + }, { + "250 Hz", + INPUT | CONTROL, + {BOUNDED | DEFAULT_0, -48, 24} + }, { + "500 Hz", + INPUT | CONTROL, + {BOUNDED | DEFAULT_0, -48, 24} + }, { + "1 kHz", + INPUT | CONTROL, + {BOUNDED | DEFAULT_0, -48, 24} + }, { + "2 kHz", + INPUT | CONTROL, + {BOUNDED | DEFAULT_0, -48, 24} + }, { + "4 kHz", + INPUT | CONTROL, + {BOUNDED | DEFAULT_0, -48, 24} + }, { + "8 kHz", + INPUT | CONTROL, + {BOUNDED | DEFAULT_0, -48, 24} + }, { + "16 kHz", + INPUT | CONTROL, + {BOUNDED | DEFAULT_0, -48, 24} + }, { + "out:l", + OUTPUT | AUDIO, + {0} + }, { + "out:r", + OUTPUT | AUDIO, + {0} + } +}; + +template <> void +Descriptor::setup() +{ + UniqueID = 2594; + Label = "Eq2x2"; + Properties = HARD_RT; + + Name = CAPS "Eq2x2 - stereo 10-band equalizer"; + Maker = "Tim Goetze "; + Copyright = "GPL, 2004-7"; + + /* fill port info and vtable */ + autogen(); +} + +/* //////////////////////////////////////////////////////////////////////// */ + +/* + todo: parametric -- 20-400, 60-1k, 150-2.5k, 500-8k, 1k-20k + bandwidth 0-2 octaves + */ diff --git a/plugins/LadspaEffect/caps/Eq.h b/plugins/LadspaEffect/caps/Eq.h new file mode 100644 index 000000000..3532b958f --- /dev/null +++ b/plugins/LadspaEffect/caps/Eq.h @@ -0,0 +1,93 @@ +/* + Eq.h + + Copyright 2004-5 Tim Goetze + + http://quitte.de/dsp/ + + equalizer circuit using recursive filtering. + +*/ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA or point your web browser to http://www.gnu.org. +*/ + +#ifndef _EQ_H_ +#define _EQ_H_ + +#include "dsp/util.h" +#include "dsp/Eq.h" +#include "dsp/BiQuad.h" +#include "dsp/RBJ.h" + +class Eq +: public Plugin +{ + public: + sample_t gain[10]; + DSP::Eq<10> eq; + + int block; + enum { BlockSize = 64 }; + + template + void one_cycle (int frames); + + public: + static PortInfo port_info []; + + void init(); + void activate(); + + void run (int n) + { + one_cycle (n); + } + + void run_adding (int n) + { + one_cycle (n); + } +}; + +class Eq2x2 +: public Plugin +{ + public: + sample_t gain[10]; + DSP::Eq<10> eq[2]; + + template + void one_cycle (int frames); + + public: + static PortInfo port_info []; + + void init(); + void activate(); + + void run (int n) + { + one_cycle (n); + } + + void run_adding (int n) + { + one_cycle (n); + } +}; + +#endif /* _EQ_H_ */ diff --git a/plugins/LadspaEffect/caps/HRTF.cc b/plugins/LadspaEffect/caps/HRTF.cc new file mode 100644 index 000000000..70190b699 --- /dev/null +++ b/plugins/LadspaEffect/caps/HRTF.cc @@ -0,0 +1,148 @@ +/* + HRTF.cc + + Copyright 2002-7 Tim Goetze + + http://quitte.de/dsp/ + + high-order IIR filtering modeled after HRTF impulse responses + +*/ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA or point your web browser to http://www.gnu.org. +*/ + +#include "basics.h" + +#include "HRTF.h" +#include "Descriptor.h" + +#include "elev0.h" + +/* //////////////////////////////////////////////////////////////////////// */ + +void +HRTF::init() +{ + h = 0; +} + +void +HRTF::set_pan (int p) +{ + n = 31; + + pan = p; + + if (p >= 0) + { + left.a = elev0[p].left.a; + left.b = elev0[p].left.b; + right.a = elev0[p].right.a; + right.b = elev0[p].right.b; + } + else + { + p = -p; + left.a = elev0[p].right.a; + left.b = elev0[p].right.b; + right.a = elev0[p].left.a; + right.b = elev0[p].left.b; + } + + memset (left.y, 0, sizeof (left.y)); + memset (right.y, 0, sizeof (right.y)); +} + +template +void +HRTF::one_cycle (int frames) +{ + sample_t * s = ports[0]; + + int p = (int) getport(1); + if (p != pan) set_pan (p); + + sample_t * dl = ports[2]; + sample_t * dr = ports[3]; + + double l, r; + + for (int i = 0; i < frames; ++i) + { + x[h] = l = r = s[i] + normal; + + l *= left.a[0]; + r *= right.a[0]; + + for (int j = 1, z = h - 1; j < n; --z, ++j) + { + z &= 31; + l += left.a[j] * x[z]; + l += left.b[j] * left.y[z]; + r += right.a[j] * x[z]; + r += right.b[j] * right.y[z]; + } + + left.y[h] = l; + right.y[h] = r; + + h = (h + 1) & 31; + + F (dl, i, l, adding_gain); + F (dr, i, r, adding_gain); + } +} + +/* //////////////////////////////////////////////////////////////////////// */ + +PortInfo +HRTF::port_info [] = +{ + { + "in", + INPUT | AUDIO, + {BOUNDED, -1, 1} + }, { + "pan", + INPUT | CONTROL, + {BOUNDED | INTEGER | DEFAULT_0, -36, 36} + }, { + "out:l", + OUTPUT | AUDIO, + {0} + }, { + "out:r", + OUTPUT | AUDIO, + {0} + } +}; + +template <> void +Descriptor::setup() +{ + UniqueID = 1787; + Label = "HRTF"; + Properties = HARD_RT; + + Name = CAPS "HRTF - Head-related transfer function at elevation 0"; + Maker = "Tim Goetze "; + Copyright = "GPL, 2004-7"; + + /* fill port info and vtable */ + autogen(); +} + diff --git a/plugins/LadspaEffect/caps/HRTF.h b/plugins/LadspaEffect/caps/HRTF.h new file mode 100644 index 000000000..c2a5f4a77 --- /dev/null +++ b/plugins/LadspaEffect/caps/HRTF.h @@ -0,0 +1,72 @@ +/* + HRTF.h + + Copyright 2002-5 Tim Goetze + + http://quitte.de/dsp/ + + IIR filtering based on HRTF data sets + +*/ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA or point your web browser to http://www.gnu.org. +*/ + +#ifndef _HRTF_H_ +#define _HRTF_H_ + +#include "dsp/util.h" + +class HRTF +: public Plugin +{ + public: + int pan; + int n, h; + + double x[32]; + + struct { + double * a, * b; + double y[32]; + } left, right; + + void set_pan (int p); + + template + void one_cycle (int frames); + + public: + static PortInfo port_info []; + + void init(); + void activate() + { + set_pan ((int) *ports[1]); + } + + void run (int n) + { + one_cycle (n); + } + + void run_adding (int n) + { + one_cycle (n); + } +}; + +#endif /* _HRTF_H_ */ diff --git a/plugins/LadspaEffect/caps/Lorenz.cc b/plugins/LadspaEffect/caps/Lorenz.cc new file mode 100644 index 000000000..95d74619a --- /dev/null +++ b/plugins/LadspaEffect/caps/Lorenz.cc @@ -0,0 +1,114 @@ +/* + Lorenz.cc + + Copyright 2002-11 Tim Goetze + + http://quitte.de/dsp/ + + the sound of a Lorenz attractor. + +*/ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA or point your web browser to http://www.gnu.org. +*/ + +#include + +#include "basics.h" + +#include "Lorenz.h" +#include "Descriptor.h" + +void +Lorenz::init() +{ + lorenz.init (h = .001, 0.1 * frandom()); + gain = 0; +} + +template +void +Lorenz::one_cycle (int frames) +{ + lorenz.set_rate (*ports[0]); + + double g = (gain == *ports[4]) ? + 1 : pow (getport(4) / gain, 1. / (double) frames); + + sample_t * d = ports[5]; + + sample_t x, sx = getport(1), sy = getport(2), sz = getport(3); + + for (int i = 0; i < frames; ++i) + { + lorenz.step(); + + x = sx * lorenz.get_x() + sy * lorenz.get_y() + sz * lorenz.get_z(); + + F (d, i, gain * x, adding_gain); + gain *= g; + } + + gain = getport(4); +} + +/* //////////////////////////////////////////////////////////////////////// */ + +PortInfo +Lorenz::port_info [] = +{ + { + "h", + INPUT | CONTROL, + {BOUNDED | DEFAULT_LOW, 0, 1} + }, { + "x", + INPUT | CONTROL, + {BOUNDED | DEFAULT_1, 0, 1} + }, { + "y", + INPUT | CONTROL, + {BOUNDED | DEFAULT_0, 0, 1} + }, { + "z", + INPUT | CONTROL, + {BOUNDED | DEFAULT_0, 0, 1} + }, { + "volume", + INPUT | CONTROL, + {BOUNDED | DEFAULT_MID, MIN_GAIN, 1} + }, { + "out", + OUTPUT | AUDIO, + {0} + } +}; + +template <> void +Descriptor::setup() +{ + UniqueID = 1774; + Label = "Lorenz"; + Properties = HARD_RT; + + Name = CAPS "Lorenz - The sound of a Lorenz attractor"; + Maker = "Tim Goetze "; + Copyright = "GPL, 2004-7"; + + /* fill port info and vtable */ + autogen(); +} + diff --git a/plugins/LadspaEffect/caps/Lorenz.h b/plugins/LadspaEffect/caps/Lorenz.h new file mode 100644 index 000000000..6407f923e --- /dev/null +++ b/plugins/LadspaEffect/caps/Lorenz.h @@ -0,0 +1,62 @@ +/* + Lorenz.h + + Copyright 2004-11 Tim Goetze + + http://quitte.de/dsp/ + + turns the state of a Lorenz fractal into sound. + +*/ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA or point your web browser to http://www.gnu.org. +*/ + +#ifndef _LORENZ_H_ +#define _LORENZ_H_ + +#include "dsp/Lorenz.h" + +class Lorenz +: public Plugin +{ + public: + sample_t h, gain; + + DSP::Lorenz lorenz; + + template + void one_cycle (int frames); + + public: + static PortInfo port_info []; + + void init(); + void activate() + { gain = getport(4); } + + void run (int n) + { + one_cycle (n); + } + + void run_adding (int n) + { + one_cycle (n); + } +}; + +#endif /* _LORENZ_H_ */ diff --git a/plugins/LadspaEffect/caps/Pan.cc b/plugins/LadspaEffect/caps/Pan.cc new file mode 100644 index 000000000..0449f616b --- /dev/null +++ b/plugins/LadspaEffect/caps/Pan.cc @@ -0,0 +1,251 @@ +/* + Pan.cc + + Copyright 2002-11 Tim Goetze + + http://quitte.de/dsp/ + + panorama with width control, + stereo image width reduction + +*/ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA or point your web browser to http://www.gnu.org. +*/ + +#include "basics.h" + +#include "Pan.h" +#include "Descriptor.h" + +void +Pan::init() +{ + delay.init ((int) (.040 * fs)); +} + +void +Pan::activate() +{ + delay.reset(); + tap.reset (400 / fs); + set_pan (getport (1)); +} + +inline void +Pan::set_pan (sample_t p) +{ + pan = p; + + double phi = (pan + 1) * M_PI * .25; + + gain_l = cos (phi); + gain_r = sin (phi); +} + +template +void +Pan::one_cycle (int frames) +{ + sample_t * s = ports[0]; + + if (pan != *ports[1]) + set_pan (getport(1)); + + sample_t g = getport(2); + sample_t + width_l = g * gain_r, + width_r = g * gain_l; + + tap.t = (int) (getport(3) * fs * .001); + + bool mono = getport(4); + + sample_t * dl = ports[5]; + sample_t * dr = ports[6]; + + sample_t x, xt; + + if (mono) for (int i = 0; i < frames; ++i) + { + x = s[i]; + + xt = tap.get (delay); + + delay.put (x + normal); + + x = (gain_l * x + gain_r * x + width_l * xt + width_r * xt) * .5; + + F (dl, i, x, adding_gain); + F (dr, i, x, adding_gain); + + normal = -normal; + } + else /* stereo */ for (int i = 0; i < frames; ++i) + { + x = s[i]; + + xt = tap.get (delay); + + delay.put (x + normal); + + F (dl, i, gain_l * x + width_l * xt, adding_gain); + F (dr, i, gain_r * x + width_r * xt, adding_gain); + + normal = -normal; + } +} + +/* //////////////////////////////////////////////////////////////////////// */ + +PortInfo +Pan::port_info [] = +{ + { + "in", + INPUT | AUDIO, + {0} + }, { + "pan", + INPUT | CONTROL, + {BOUNDED | DEFAULT_0, -1, 1} + }, { + "width", + INPUT | CONTROL, + {BOUNDED | DEFAULT_0, 0, 1} + }, { + "t", + INPUT | CONTROL, + {BOUNDED | DEFAULT_LOW, 0.1, 40} + }, { + "mono", + INPUT | CONTROL, + {BOUNDED | DEFAULT_0 | INTEGER | TOGGLE, 0, 1} + }, { + "out:l", + OUTPUT | AUDIO, + {0} + }, { + "out:r", + OUTPUT | AUDIO, + {0} + } +}; + +template <> void +Descriptor::setup() +{ + UniqueID = 1788; + Label = "Pan"; + Properties = HARD_RT; + + Name = CAPS "Pan - Pan and width"; + Maker = "Tim Goetze "; + Copyright = "GPL, 2004-7"; + + /* fill port info and vtable */ + autogen(); +} + +/* //////////////////////////////////////////////////////////////////////// */ + +void +Narrower::init() +{ +} + +void +Narrower::activate() +{ +} + +template +void +Narrower::one_cycle (int frames) +{ + sample_t * sl = ports[0]; + sample_t * sr = ports[1]; + + if (strength != *ports[2]) + strength = *ports[2]; + + sample_t * dl = ports[3]; + sample_t * dr = ports[4]; + + double xl, xr, m; + double dry = 1 - strength, wet = strength; + + for (int i = 0; i < frames; ++i) + { + xl = sl[i]; + xr = sr[i]; + + m = wet * (xl + xr) * .5; + + xl *= dry; + xr *= dry; + + xl += m; + xr += m; + + F (dl, i, xl, adding_gain); + F (dr, i, xr, adding_gain); + } +} + +/* //////////////////////////////////////////////////////////////////////// */ + +PortInfo +Narrower::port_info [] = +{ + { + "in:l", + INPUT | AUDIO, + {0} + }, { + "in:r", + INPUT | AUDIO, + {0} + }, { + "strength", + INPUT | CONTROL, + {BOUNDED | DEFAULT_LOW, 0, 1} + }, { + "out:l", + OUTPUT | AUDIO, + {0} + }, { + "out:r", + OUTPUT | AUDIO, + {0} + } +}; + +template <> void +Descriptor::setup() +{ + UniqueID = 2595; + Label = "Narrower"; + Properties = HARD_RT; + + Name = CAPS "Narrower - Stereo image width reduction"; + Maker = "Tim Goetze "; + Copyright = "GPL, 2011"; + + /* fill port info and vtable */ + autogen(); +} + diff --git a/plugins/LadspaEffect/caps/Pan.h b/plugins/LadspaEffect/caps/Pan.h new file mode 100644 index 000000000..469ccb192 --- /dev/null +++ b/plugins/LadspaEffect/caps/Pan.h @@ -0,0 +1,114 @@ +/* + Pan.h + + Copyright 2004-11 Tim Goetze + + http://quitte.de/dsp/ + + panorama with width control, + stereo image width reduction + +*/ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA or point your web browser to http://www.gnu.org. +*/ + +#ifndef _PAN_H_ +#define _PAN_H_ + +#include "dsp/Delay.h" +#include "dsp/OnePole.h" + +class PanTap +{ + public: + int t; + DSP::OnePoleLP damper; + + sample_t get (DSP::Delay & delay) + { + return damper.process (delay[t]); + } + + void reset (double c) + { + damper.set_f (c); + damper.reset(); + } +}; + +class Pan +: public Plugin +{ + public: + sample_t pan; + + sample_t gain_l, gain_r; + + DSP::Delay delay; + PanTap tap; + + template + void one_cycle (int frames); + + inline void set_pan (sample_t); + + public: + static PortInfo port_info []; + + void init(); + void activate(); + + void run (int n) + { + one_cycle (n); + } + + void run_adding (int n) + { + one_cycle (n); + } +}; + +/* stereo width reduction */ +class Narrower +: public Plugin +{ + public: + sample_t strength; + + template + void one_cycle (int frames); + + public: + static PortInfo port_info []; + + void init(); + void activate(); + + void run (int n) + { + one_cycle (n); + } + + void run_adding (int n) + { + one_cycle (n); + } + +}; + +#endif /* _PAN_H_ */ diff --git a/plugins/LadspaEffect/caps/Phaser.cc b/plugins/LadspaEffect/caps/Phaser.cc new file mode 100644 index 000000000..b0116b448 --- /dev/null +++ b/plugins/LadspaEffect/caps/Phaser.cc @@ -0,0 +1,231 @@ +/* + Phaser.cc + + Copyright 2002-7 Tim Goetze + + http://quitte.de/dsp/ + + One simple mono phaser, 6 all-pass lines, the usual controls. + + Another unit in the same vein with the filter modulation controlled by + a Lorenz fractal. + +*/ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA or point your web browser to http://www.gnu.org. +*/ + +#include "basics.h" + +#include "Phaser.h" +#include "Descriptor.h" + +template +void +PhaserI::one_cycle (int frames) +{ + sample_t * s = ports[0]; + + if (rate != *ports[1]) + { + rate = getport(1); + lfo.set_f (max (.001, rate * (double) blocksize), fs, lfo.get_phase()); + } + + double depth = getport(2); + double spread = 1 + getport(3); + double fb = getport(4); + + sample_t * dst = ports[5]; + + while (frames) + { + if (remain == 0) remain = 32; + + int n = min (remain, frames); + + double d = delay.bottom + delay.range * (1. - fabs (lfo.get())); + + for (int j = 5; j >= 0; --j) + { + ap[j].set (d); + d *= spread; + } + + for (int i = 0; i < n; ++i) + { + sample_t x = s[i]; + sample_t y = x + y0 * fb + normal; + + for (int j = 5; j >= 0; --j) + y = ap[j].process (y); + + y0 = y; + + F (dst, i, x + y * depth, adding_gain); + } + + s += n; + dst += n; + frames -= n; + remain -= n; + } +} + +/* //////////////////////////////////////////////////////////////////////// */ + +PortInfo +PhaserI::port_info [] = +{ + { + "in", + INPUT | AUDIO, + {BOUNDED, -1, 1} + }, { + "rate (Hz)", + INPUT | CONTROL, + {BOUNDED | DEFAULT_1, 0, 10} + }, { + "depth", + INPUT | CONTROL, + {BOUNDED | DEFAULT_HIGH, 0, 1} + }, { + "spread", + INPUT | CONTROL, + {BOUNDED | DEFAULT_LOW, 0, M_PI} + }, { + "feedback", + INPUT | CONTROL, + {BOUNDED | DEFAULT_HIGH, 0, .999} + }, { + "out", + OUTPUT | AUDIO, + {0} + } +}; + +template <> void +Descriptor::setup() +{ + UniqueID = 1775; + Label = "PhaserI"; + Properties = HARD_RT; + + Name = CAPS "PhaserI - Mono phaser"; + Maker = "Tim Goetze "; + Copyright = "GPL, 2002-7"; + + /* fill port info and vtable */ + autogen(); +} + +/* //////////////////////////////////////////////////////////////////////// */ + +template +void +PhaserII::one_cycle (int frames) +{ + sample_t * s = ports[0]; + + lorenz.set_rate (getport(1) * .08); + + double depth = getport(2); + double spread = 1 + getport(3); + double fb = getport(4); + + sample_t * dst = ports[5]; + + while (frames) + { + if (remain == 0) remain = 32; + + int n = min (remain, frames); + + double d = delay.bottom + delay.range * (.3 * lorenz.get()); + + for (int j = 5; j >= 0; --j) + { + ap[j].set (d); + d *= spread; + } + + for (int i = 0; i < n; ++i) + { + sample_t x = s[i]; + sample_t y = x + y0 * fb + normal; + + for (int j = 5; j >= 0; --j) + y = ap[j].process (y); + + y0 = y; + + F (dst, i, x + y * depth, adding_gain); + } + + s += n; + dst += n; + frames -= n; + remain -= n; + } +} + +/* //////////////////////////////////////////////////////////////////////// */ + +PortInfo +PhaserII::port_info [] = +{ + { + "in", + INPUT | AUDIO, + {BOUNDED, -1, 1} + }, { + "rate", + INPUT | CONTROL, + {BOUNDED | DEFAULT_LOW, 0, 1} + }, { + "depth", + INPUT | CONTROL, + {BOUNDED | DEFAULT_HIGH, 0, 1} + }, { + "spread", + INPUT | CONTROL, + {BOUNDED | DEFAULT_LOW, 0, M_PI * .5} + }, { + "feedback", + INPUT | CONTROL, + {BOUNDED | DEFAULT_HIGH, 0, .999} + }, { + "out", + OUTPUT | AUDIO, + {0} + } +}; + +template <> void +Descriptor::setup() +{ + UniqueID = 2586; + Label = "PhaserII"; + Properties = HARD_RT; + + Name = CAPS "PhaserII - Mono phaser modulated by a Lorenz fractal"; + Maker = "Tim Goetze "; + Copyright = "GPL, 2002-7"; + + /* fill port info and vtable */ + autogen(); +} + diff --git a/plugins/LadspaEffect/caps/Phaser.h b/plugins/LadspaEffect/caps/Phaser.h new file mode 100644 index 000000000..c79b93053 --- /dev/null +++ b/plugins/LadspaEffect/caps/Phaser.h @@ -0,0 +1,164 @@ +/* + Phaser.h + + Copyright 2002-5 Tim Goetze + + http://quitte.de/dsp/ + + Standard and fractal-modulated phaser units. + +*/ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA or point your web browser to http://www.gnu.org. +*/ + +#ifndef _PHASER_H_ +#define _PHASER_H_ + +#include "dsp/Sine.h" +#include "dsp/Lorenz.h" +#include "dsp/Delay.h" + +/* all-pass as used by the phaser. */ +class PhaserAP +{ + public: + sample_t a, m; + + PhaserAP() + { + a = m = 0.; + } + + void set (double delay) + { + a = (1 - delay) / (1 + delay); + } + + sample_t process (sample_t x) + { + register sample_t y = -a * x + m; + m = a * y + x; + + return y; + } +}; + +class PhaserI +: public Plugin +{ + public: + PhaserAP ap[6]; + DSP::Sine lfo; + + sample_t rate; + sample_t y0; + + struct { + double bottom, range; + } delay; + + template + void one_cycle (int frames); + + int blocksize, remain; + + public: + static PortInfo port_info []; + + void init() + { + blocksize = 32; + } + + void activate() + { + y0 = 0.; + remain = 0; + + delay.bottom = 400. / fs; + delay.range = 2200. / fs; + + rate = -1; /* force lfo reset in one_cycle() */ + } + + void run (int n) + { + one_cycle (n); + } + + void run_adding (int n) + { + one_cycle (n); + } +}; + +/* same as above, but filter sweep is controlled by a Lorenz fractal */ + +class PhaserII +: public Plugin +{ + public: + double fs; + + PhaserAP ap[6]; + DSP::Lorenz lorenz; + + sample_t rate; + sample_t y0; + + struct { + double bottom, range; + } delay; + + template + void one_cycle (int frames); + + int blocksize, remain; + + public: + static PortInfo port_info []; + + void init() + { + blocksize = 32; + lorenz.init(); + } + + void activate() + { + y0 = 0.; + remain = 0; + + delay.bottom = 400. / fs; + delay.range = 2200. / fs; + + rate = -1; /* force lfo reset in one_cycle() */ + } + + void run (int n) + { + one_cycle (n); + } + + void run_adding (int n) + { + one_cycle (n); + } +}; + + +#endif /* _PHASER_H_ */ diff --git a/plugins/LadspaEffect/caps/Preamp.cc b/plugins/LadspaEffect/caps/Preamp.cc new file mode 100644 index 000000000..3a1b903c8 --- /dev/null +++ b/plugins/LadspaEffect/caps/Preamp.cc @@ -0,0 +1,244 @@ +/* + Preamp.cc + + Copyright 2003-7 Tim Goetze + + http://quitte.de/dsp/ + + Loosely 12AX7-based tube preamp model with 8x oversampling. +*/ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA or point your web browser to http://www.gnu.org. +*/ + +#include "basics.h" +#include + +#include "Amp.h" +#include "Descriptor.h" + +void +PreampIII::init() +{ + this->AmpStub::init(); + + DSP::RBJ::LoShelve (200 / fs, .2, -6, filter.a, filter.b); +} + +template +void +PreampIII::one_cycle (int frames) +{ + sample_t * s = ports[0]; + sample_t gain = getport(1); + sample_t temp = getport(2) * tube.scale; + sample_t * d = ports[3]; + *ports[4] = OVERSAMPLE; + + double g = current.g; + + current.g = max (gain < 1 ? gain : exp2 (gain - 1), .000001); + /* correction for attenuated first transfer */ + current.g *= tube.scale / fabs (tube.transfer (temp)); + + if (g == 0) g = current.g; + + /* recursive fade to prevent zipper noise from the 'gain' knob */ + double one_over_n = frames > 0 ? 1. / frames : 1; + double gf = pow (current.g / g, one_over_n); + + for (int i = 0; i < frames; ++i) + { + register sample_t a = s[i] + normal; + + a = g * tube.transfer (a * temp); + a = filter.process (a); + a = down.process (tube.transfer_clip (up.upsample (a))); + + for (int o = 1; o < OVERSAMPLE; ++o) + down.store (tube.transfer_clip (up.pad (o))); + + F (d, i, dc_blocker.process (a), adding_gain); + + g *= gf; + } + + current.g = g; +} + +/* //////////////////////////////////////////////////////////////////////// */ + +PortInfo +PreampIII::port_info [] = +{ + { + "in", + INPUT | AUDIO, + {BOUNDED, -1, 1} + }, { + "gain", + INPUT | CONTROL, + {BOUNDED | DEFAULT_1, 0, 10} + }, { + "temperature", + INPUT | CONTROL, + {BOUNDED | DEFAULT_LOW, 0.005, 1} + }, { + "out", + OUTPUT | AUDIO, + {0} + }, { + "latency", + OUTPUT | CONTROL, + {0} + } +}; + +template <> void +Descriptor::setup() +{ + UniqueID = 1776; + Label = "PreampIII"; + Properties = HARD_RT; + + Name = CAPS "PreampIII - Tube preamp emulation"; + Maker = "Tim Goetze "; + Copyright = "GPL, 2002-7"; + + /* fill port info and vtable */ + autogen(); +} + +/* //////////////////////////////////////////////////////////////////////// */ + +void +PreampIV::init() +{ + this->AmpStub::init(); + tone.init (fs); +} + +void +PreampIV::activate() +{ + this->PreampIII::activate(); + + tone.activate (ports + 3); +} + +template +void +PreampIV::one_cycle (int frames) +{ + double one_over_n = frames > 0 ? 1. / frames : 1; + + sample_t * s = ports[0]; + sample_t gain = getport(1); + sample_t temp = getport(2) * tube.scale; + + tone.start_cycle (ports + 3, one_over_n); + + sample_t * d = ports[7]; + *ports[8] = OVERSAMPLE; + + double g = current.g; + + current.g = max (gain < 1 ? gain : exp2 (gain - 1), .000001); + current.g *= tube.scale / fabs (tube.transfer (temp)); + + if (g == 0) g = current.g; + + /* recursive fade to prevent zipper noise from the 'gain' knob */ + double gf = pow (current.g / g, one_over_n); + + for (int i = 0; i < frames; ++i) + { + register sample_t a = tone.process (s[i] + normal); + + a = g * tube.transfer (a * temp); + + a = down.process (tube.transfer_clip (up.upsample (a))); + + for (int o = 1; o < OVERSAMPLE; ++o) + down.store (tube.transfer_clip (up.pad (o))); + + F (d, i, dc_blocker.process (a), adding_gain); + + g *= gf; + } + + current.g = g; +} + +/* //////////////////////////////////////////////////////////////////////// */ + +PortInfo +PreampIV::port_info [] = +{ + { + "in", + INPUT | AUDIO, + {BOUNDED, -1, 1} + }, { + "gain", + INPUT | CONTROL, + {BOUNDED | DEFAULT_1, 0, 10} + }, { + "temperature", + INPUT | CONTROL, + {BOUNDED | DEFAULT_MID, 0.005, 1} + }, { + "bass", + INPUT | CONTROL, + {BOUNDED | DEFAULT_0, -20, 20} + }, { + "mid", + INPUT | CONTROL, + {BOUNDED | DEFAULT_0, -20, 20} + }, { + "treble", + INPUT | CONTROL, + {BOUNDED | DEFAULT_0, -20, 20} + }, { + "hi", + INPUT | CONTROL, + {BOUNDED | DEFAULT_0, -20, 20} + }, { + "out", + OUTPUT | AUDIO, + {0} + }, { + "latency", + OUTPUT | CONTROL, + {0} + } +}; + +template <> void +Descriptor::setup() +{ + UniqueID = 1777; + Label = "PreampIV"; + Properties = HARD_RT; + + Name = CAPS "PreampIV - Tube preamp emulation + tone controls"; + Maker = "Tim Goetze "; + Copyright = "GPL, 2002-7"; + + /* fill port info and vtable */ + autogen(); +} + diff --git a/plugins/LadspaEffect/caps/README b/plugins/LadspaEffect/caps/README new file mode 100644 index 000000000..58fc72ec8 --- /dev/null +++ b/plugins/LadspaEffect/caps/README @@ -0,0 +1,7 @@ +This is CAPS, the C Audio Plugin Suite +====================================== + +For all questions, please be referred to the HTML documentation of +this software package in the file 'caps.html', also available from + +http://quitte.de/dsp/caps.html diff --git a/plugins/LadspaEffect/caps/README.ardour b/plugins/LadspaEffect/caps/README.ardour new file mode 100644 index 000000000..fcfa8e683 --- /dev/null +++ b/plugins/LadspaEffect/caps/README.ardour @@ -0,0 +1,41 @@ + +Ardour Users: Notice and WARNING +================================ + +ALL the plugins in caps have been renamed as of caps-0.3.0. While this is +clearly within the bounds of the LADSPA specification, ardour will fail to +load caps plugins from earlier releases referenced in your existing session +files should you install caps-0.3.0 over a previous release. + +As a quick workaround, you can install caps with + +# make alt-install + +which will install the plugins as 'caps-ng.so', leaving your existing +installation of caps intact so you can manually update your sessions within +ardour to use the latest versions of the caps plugins. + +The downside is you're now stuck with two implementations of identical +plugins, and some hosts will (quite sensibly) complain about this. So after +you're done updating your ardour sessions, installing caps under its rightful +name of 'caps.so' is a good idea. + +As an alternative, you can also run a search-and-replace on your ardour +session files. I'll be happy to help you there should you require +assistance, just drop me a mail. + + +RDF metadata +============ + +Pete Leigh has graciously provided a RDF file that refines the user interface +of the Cabinet and SweepVF plugins within ardour (adding labels to the SweepVF +filter modes and the Cabinet speaker models to be precise). I have dabbled +with these files so if they fail to work for you, it's all my fault. + +You should be able install the file on your system with + +# make rdf-install + +but be warned that I have set this up blindly. Tell me if it works for you. + diff --git a/plugins/LadspaEffect/caps/README.dist b/plugins/LadspaEffect/caps/README.dist new file mode 100644 index 000000000..0f6d75b65 --- /dev/null +++ b/plugins/LadspaEffect/caps/README.dist @@ -0,0 +1,18 @@ + +Distribution Notice for the caps audio plugin suite +=================================================== + +If you intend to package caps for redistribution PLEASE include the html +and pdf documentation files, and make clear to your users that they exist +and where to find them. + +caps 0.3 Notice and WARNING +=========================== + +The 0.3 release has relabelled the SweepVF, Cabinet, Chorus, StereoChorus +and Phaser plugins (appending an 'I' to their label to be precise). +Unfortunately, this might break some hosts' session files. Sorry about that. + +Ardour users are well-advised to read the file 'README.ardour' in this +directory before installing caps 0.3.0. + diff --git a/plugins/LadspaEffect/caps/Reverb.cc b/plugins/LadspaEffect/caps/Reverb.cc new file mode 100644 index 000000000..9061daaf5 --- /dev/null +++ b/plugins/LadspaEffect/caps/Reverb.cc @@ -0,0 +1,495 @@ +/* + Reverb.cc + + Copyright 2002-7 Tim Goetze + + http://quitte.de/dsp/ + + three reverb units: JVRev, Plate and Plate2x2. + + the former is a rewrite of STK's JVRev, a traditional design. + + original comment: + + This is based on some of the famous + Stanford CCRMA reverbs (NRev, KipRev) + all based on the Chowning/Moorer/ + Schroeder reverberators, which use + networks of simple allpass and comb + delay filters. + + the algorithm is mostly unchanged in this implementation; the delay + line lengths have been fiddled with to make the stereo field more + evenly weighted, and denormal protection has been added. + + the latter two are based on the circuit discussed in Jon Dattorro's + september 1997 JAES paper on effect design (part 1: reverb & filters). +*/ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA or point your web browser to http://www.gnu.org. +*/ + +#include "basics.h" + +#include "Reverb.h" +#include "Descriptor.h" + +int +JVRev::default_length[9] = { +#if 1 /* slightly modified, tg */ + 1777, 1847, 1993, 2137, 389, 127, 43, 211, 209 +#else + 4799, 4999, 5399, 5801, 1051, 337, 113, 573, 487 +#endif +}; + +void +JVRev::init() +{ + memcpy (length, default_length, sizeof (length)); + + if (fs != 44100) + { + double s = fs / 44100.; + + for (int i = 0; i < 9; ++i) + { + int v = (int) (s * length[i]); + v |= 1; + while (!DSP::isprime (v)) + v += 2; + length[i] = v; + } + } + + for (int i = 0; i < 4; ++i) + comb[i].init (length[i]); + + for (int i = 0; i < 3; ++i) + allpass[i].init (length[i+4]); + + left.init (length[7]); + right.init (length[8]); + + /* such a simple number, but i couldn't find a better one. */ + apc = .7; +} + +void +JVRev::set_t60 (sample_t t) +{ + t60 = t; + + t = max (.00001, t); + + for (int i = 0; i < 4; ++i) + comb[i].c = pow (10, (-3 * length[i] / (t * fs))); +} + +void +JVRev::activate() +{ + for (int i = 0; i < 3; ++i) + allpass[i].reset(); + + for (int i = 0; i < 4; ++i) + comb[i].reset(); + + left.reset(); + right.reset(); + + set_t60 (getport(1)); +} + +template +void +JVRev::one_cycle (int frames) +{ + sample_t * s = ports[0]; + + if (t60 != *ports[1]) + set_t60 (getport(1)); + + double wet = getport(2), dry = 1 - wet; + + sample_t * dl = ports[3]; + sample_t * dr = ports[4]; + + for (int i = 0; i < frames; ++i) + { + sample_t x = s[i], a = x + normal; + + x *= dry; + + /* diffusors */ + a = allpass[0].process (a, -apc); + a = allpass[1].process (a, -apc); + a = allpass[2].process (a, -apc); + + /* tank */ + sample_t t = 0; + a -= normal; + + for (int j = 0; j < 4; ++j) + t += comb[j].process (a); + + F (dl, i, x + wet * left.putget (t), adding_gain); + F (dr, i, x + wet * right.putget (t), adding_gain); + } +} + +/* //////////////////////////////////////////////////////////////////////// */ + +PortInfo +JVRev::port_info [] = +{ + { + "in", + INPUT | AUDIO, + {BOUNDED, -1, 1} + }, { + "t60 (s)", + INPUT | CONTROL, + {BOUNDED | DEFAULT_MID, 0, 4.6} + }, { + "blend", + INPUT | CONTROL, + {BOUNDED | DEFAULT_LOW, 0, .28} + }, { + "out:l", + OUTPUT | AUDIO, + {0} + }, { + "out:r", + OUTPUT | AUDIO, + {0} + } +}; + +template <> void +Descriptor::setup() +{ + UniqueID = 1778; + Label = "JVRev"; + Properties = HARD_RT; + + Name = CAPS "JVRev - Stanford-style reverb from STK"; + Maker = "Tim Goetze "; + Copyright = "GPL, 2004-7"; + + /* fill port info and vtable */ + autogen(); +} + +/* //////////////////////////////////////////////////////////////////////// */ + +void +PlateStub::init() +{ + f_lfo = -1; + +# define L(i) ((int) (l[i] * fs)) + static float l[] = { + 0.004771345048889486, 0.0035953092974026408, + 0.01273478713752898, 0.0093074829474816042, + 0.022579886428547427, 0.030509727495715868, + 0.14962534861059779, 0.060481838647894894, 0.12499579987231611, + 0.14169550754342933, 0.089244313027116023, 0.10628003091293972 + }; + + /* lh */ + input.lattice[0].init (L(0)); + input.lattice[1].init (L(1)); + + /* rh */ + input.lattice[2].init (L(2)); + input.lattice[3].init (L(3)); + + /* modulated, width about 12 samples @ 44.1 */ + tank.mlattice[0].init (L(4), (int) (0.00040322707570310132 * fs)); + tank.mlattice[1].init (L(5), (int) (0.00040322707570310132 * fs)); + + /* lh */ + tank.delay[0].init (L(6)); + tank.lattice[0].init (L(7)); + tank.delay[1].init (L(8)); + + /* rh */ + tank.delay[2].init (L(9)); + tank.lattice[1].init (L(10)); + tank.delay[3].init (L(11)); +# undef L + +# define T(i) ((int) (t[i] * fs)) + static float t[] = { + 0.0089378717113000241, 0.099929437854910791, 0.064278754074123853, + 0.067067638856221232, 0.066866032727394914, 0.006283391015086859, + 0.01186116057928161, 0.12187090487550822, 0.041262054366452743, + 0.089815530392123921, 0.070931756325392295, 0.011256342192802662 + }; + + for (int i = 0; i < 12; ++i) + tank.taps[i] = T(i); +# undef T + + /* tuned for soft attack, ambience */ + indiff1 = .742; + indiff2 = .712; + + dediff1 = .723; + dediff2 = .729; +} + +inline void +PlateStub::process (sample_t x, sample_t decay, sample_t * _xl, sample_t * _xr) +{ + x = input.bandwidth.process (x); + + /* lh */ + x = input.lattice[0].process (x, indiff1); + x = input.lattice[1].process (x, indiff1); + + /* rh */ + x = input.lattice[2].process (x, indiff2); + x = input.lattice[3].process (x, indiff2); + + /* summation point */ + register sample_t xl = x + decay * tank.delay[3].get(); + register sample_t xr = x + decay * tank.delay[1].get(); + + /* lh */ + xl = tank.mlattice[0].process (xl, dediff1); + xl = tank.delay[0].putget (xl); + xl = tank.damping[0].process (xl); + xl *= decay; + xl = tank.lattice[0].process (xl, dediff2); + tank.delay[1].put (xl); + + /* rh */ + xr = tank.mlattice[1].process (xr, dediff1); + xr = tank.delay[2].putget (xr); + xr = tank.damping[1].process (xr); + xr *= decay; + xr = tank.lattice[1].process (xr, dediff2); + tank.delay[3].put (xr); + + /* gather output */ + xl = .6 * tank.delay[2] [tank.taps[0]]; + xl += .6 * tank.delay[2] [tank.taps[1]]; + xl -= .6 * tank.lattice[1] [tank.taps[2]]; + xl += .6 * tank.delay[3] [tank.taps[3]]; + xl -= .6 * tank.delay[0] [tank.taps[4]]; + xl += .6 * tank.lattice[0] [tank.taps[5]]; + + xr = .6 * tank.delay[0] [tank.taps[6]]; + xr += .6 * tank.delay[0] [tank.taps[7]]; + xr -= .6 * tank.lattice[0] [tank.taps[8]]; + xr += .6 * tank.delay[1] [tank.taps[9]]; + xr -= .6 * tank.delay[2] [tank.taps[10]]; + xr += .6 * tank.lattice[1] [tank.taps[11]]; + + *_xl = xl; + *_xr = xr; +} + +/* //////////////////////////////////////////////////////////////////////// */ + +template +void +Plate::one_cycle (int frames) +{ + sample_t * s = ports[0]; + + input.bandwidth.set (exp (-M_PI * (1. - getport(1)))); + + sample_t decay = getport(2); + + double damp = exp (-M_PI * getport(3)); + tank.damping[0].set (damp); + tank.damping[1].set (damp); + + sample_t blend = getport(4), dry = 1 - blend; + + sample_t * dl = ports[5]; + sample_t * dr = ports[6]; + + /* the modulated lattices interpolate, which needs truncated float */ + DSP::FPTruncateMode _truncate; + + for (int i = 0; i < frames; ++i) + { + normal = -normal; + sample_t x = s[i] + normal; + + sample_t xl, xr; + + PlateStub::process (x, decay, &xl, &xr); + + x = dry * s[i]; + + F (dl, i, x + blend * xl, adding_gain); + F (dr, i, x + blend * xr, adding_gain); + } +} + +/* //////////////////////////////////////////////////////////////////////// */ + +PortInfo +Plate::port_info [] = +{ + { + "in", + INPUT | AUDIO, + {BOUNDED, -1, 1} + }, { + "bandwidth", + INPUT | CONTROL, + {BOUNDED | DEFAULT_MID, 0.005, .999} /* .9995 */ + }, { + "tail", + INPUT | CONTROL, + {BOUNDED | DEFAULT_MID, 0, .749} /* .5 */ + }, { + "damping", + INPUT | CONTROL, + {BOUNDED | DEFAULT_LOW, .0005, 1} /* .0005 */ + }, { + "blend", + INPUT | CONTROL, + {BOUNDED | DEFAULT_LOW, 0, 1} + }, { + "out:l", + OUTPUT | AUDIO, + {0} + }, { + "out:r", + OUTPUT | AUDIO, + {0} + } +}; + +template <> void +Descriptor::setup() +{ + UniqueID = 1779; + Label = "Plate"; + Properties = HARD_RT; + + Name = CAPS "Plate - Versatile plate reverb"; + Maker = "Tim Goetze "; + Copyright = "GPL, 2004-7"; + + /* fill port info and vtable */ + autogen(); +} + +/* //////////////////////////////////////////////////////////////////////// */ + +template +void +Plate2x2::one_cycle (int frames) +{ + sample_t * sl = ports[0]; + sample_t * sr = ports[1]; + + input.bandwidth.set (exp (-M_PI * (1. - getport(2)))); + + sample_t decay = getport(3); + + double damp = exp (-M_PI * getport(4)); + tank.damping[0].set (damp); + tank.damping[1].set (damp); + + sample_t blend = getport(5), dry = 1 - blend; + + sample_t * dl = ports[6]; + sample_t * dr = ports[7]; + + /* the modulated lattices interpolate, which needs truncated float */ + DSP::FPTruncateMode _truncate; + + for (int i = 0; i < frames; ++i) + { + normal = -normal; + sample_t x = (sl[i] + sr[i] + normal) * .5; + + sample_t xl, xr; + PlateStub::process (x, decay, &xl, &xr); + + xl = blend * xl + dry * sl[i]; + xr = blend * xr + dry * sr[i]; + + F (dl, i, xl, adding_gain); + F (dr, i, xr, adding_gain); + } +} + +/* //////////////////////////////////////////////////////////////////////// */ + +PortInfo +Plate2x2::port_info [] = +{ + { + "in:l", + INPUT | AUDIO, + {BOUNDED, -1, 1} + }, { + "in:r", + INPUT | AUDIO, + {BOUNDED, -1, 1} + }, { + "bandwidth", + INPUT | CONTROL, + {BOUNDED | DEFAULT_MID, 0.005, .999} /* .9995 */ + }, { + "tail", + INPUT | CONTROL, + {BOUNDED | DEFAULT_MID, 0, .749} /* .5 */ + }, { + "damping", + INPUT | CONTROL, + {BOUNDED | DEFAULT_LOW, .0005, 1} /* .0005 */ + }, { + "blend", + INPUT | CONTROL, + {BOUNDED | DEFAULT_LOW, 0, 1} + }, { + "out:l", + OUTPUT | AUDIO, + {0} + }, { + "out:r", + OUTPUT | AUDIO, + {0} + } +}; + +template <> void +Descriptor::setup() +{ + UniqueID = 1795; + Label = "Plate2x2"; + Properties = HARD_RT; + + Name = CAPS "Plate2x2 - Versatile plate reverb, stereo inputs"; + Maker = "Tim Goetze "; + Copyright = "GPL, 2004-7"; + + /* fill port info and vtable */ + autogen(); +} + + diff --git a/plugins/LadspaEffect/caps/Reverb.h b/plugins/LadspaEffect/caps/Reverb.h new file mode 100644 index 000000000..568f1c558 --- /dev/null +++ b/plugins/LadspaEffect/caps/Reverb.h @@ -0,0 +1,255 @@ +/* + Reverb.h + + Copyright 2002-5 Tim Goetze + + http://quitte.de/dsp/ + + two reverb units: JVRev and Plate. + + the former is a rewrite of STK's JVRev, a traditional design. + + original comment: + + This is based on some of the famous + Stanford CCRMA reverbs (NRev, KipRev) + all based on the Chowning/Moorer/ + Schroeder reverberators, which use + networks of simple allpass and comb + delay filters. + + (STK is an effort of Gary Scavone). + + the algorithm is mostly unchanged in this implementation; the delay + line lengths have been fiddled with to make the stereo field more + evenly weighted, and denormal protection has been added. + + the Plate reverb is based on the circuit discussed in Jon Dattorro's + september 1997 JAES paper on effect design (part 1: reverb & filters). +*/ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA or point your web browser to http://www.gnu.org. +*/ + +#ifndef _REVERB_H_ +#define _REVERB_H_ + +#include + +#include "dsp/Delay.h" +#include "dsp/OnePole.h" +#include "dsp/Sine.h" +#include "dsp/util.h" + +/* both reverbs use this */ +class Lattice +: public DSP::Delay +{ + public: + inline sample_t + process (sample_t x, double d) + { + sample_t y = get(); + x -= d * y; + put (x); + return d * x + y; + } +}; + +/* helper for JVRev */ +class JVComb +: public DSP::Delay +{ + public: + float c; + + inline sample_t + process (sample_t x) + { + x += c * get(); + put (x); + return x; + } +}; + +class JVRev +: public Plugin +{ + public: + static int default_length[9]; + sample_t t60; + + Lattice allpass [3]; + JVComb comb[4]; + + DSP::Delay left, right; + + double apc; + + template + void one_cycle (int frames); + + int length [9]; + + void set_t60 (sample_t t); + + public: + static PortInfo port_info []; + + void init(); + void activate(); + + void run (int n) + { + one_cycle (n); + } + + void run_adding (int n) + { + one_cycle (n); + } +}; + +/* /////////////////////////////////////////////////////////////////////// */ + +class ModLattice +{ + public: + float n0, width; + + DSP::Delay delay; + DSP::Sine lfo; + DSP::DelayTapA tap; + + void init (int n, int w) + { + n0 = n; + width = w; + delay.init (n + w); + } + + void reset() + { + delay.reset(); + tap.reset(); + } + + inline sample_t + process (sample_t x, double d) + { + /* TODO: try all-pass interpolation */ + sample_t y = delay.get_at (n0 + width * lfo.get()); + x += d * y; + delay.put (x); + return y - d * x; /* note sign */ + } +}; + +class PlateStub +: public Plugin +{ + public: + sample_t f_lfo; + + sample_t indiff1, indiff2, dediff1, dediff2; + + struct { + DSP::OnePoleLP bandwidth; + Lattice lattice[4]; + } input; + + struct { + ModLattice mlattice[2]; + Lattice lattice[2]; + DSP::Delay delay[4]; + DSP::OnePoleLP damping[2]; + int taps[12]; + } tank; + + public: + void init(); + void activate() + { + input.bandwidth.reset(); + + for (int i = 0; i < 4; ++i) + { + input.lattice[i].reset(); + tank.delay[i].reset(); + } + + for (int i = 0; i < 2; ++i) + { + tank.mlattice[i].reset(); + tank.lattice[i].reset(); + tank.damping[i].reset(); + } + + tank.mlattice[0].lfo.set_f (1.2, fs, 0); + tank.mlattice[1].lfo.set_f (1.2, fs, .5 * M_PI); + } + + inline void process (sample_t x, sample_t decay, + sample_t * xl, sample_t * xr); +}; + +/* /////////////////////////////////////////////////////////////////////// */ + +class Plate +: public PlateStub +{ + public: + template + void one_cycle (int frames); + + public: + static PortInfo port_info []; + + void run (int n) + { + one_cycle (n); + } + + void run_adding (int n) + { + one_cycle (n); + } +}; + +/* /////////////////////////////////////////////////////////////////////// */ + +class Plate2x2 +: public PlateStub +{ + public: + template + void one_cycle (int frames); + + public: + static PortInfo port_info []; + + void run (int n) + { + one_cycle (n); + } + + void run_adding (int n) + { + one_cycle (n); + } +}; + +#endif /* _REVERB_H_ */ diff --git a/plugins/LadspaEffect/caps/Roessler.cc b/plugins/LadspaEffect/caps/Roessler.cc new file mode 100644 index 000000000..b82a620b7 --- /dev/null +++ b/plugins/LadspaEffect/caps/Roessler.cc @@ -0,0 +1,120 @@ +/* + Roessler.cc + + Copyright 2002-11 Tim Goetze + + http://quitte.de/dsp/ + + the sound of a Roessler attractor. + +*/ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA or point your web browser to http://www.gnu.org. +*/ + +#include + +#include "basics.h" + +#include "Roessler.h" +#include "Descriptor.h" + +void +Roessler::init() +{ + roessler.init (h = .001, frandom()); + gain = 0; +} + +template +void +Roessler::one_cycle (int frames) +{ + roessler.set_rate (getport(0)); + + double g = (gain == getport(4)) ? + 1 : pow (getport(4) / gain, 1. / (double) frames); + + sample_t * d = ports[5]; + + sample_t x, + sx = .043 * getport(1), + sy = .051 * getport(2), + sz = .018 * getport(3); + + for (int i = 0; i < frames; ++i) + { + roessler.get(); + + x = + sx * (roessler.get_x() - .515) + + sy * (roessler.get_y() + 2.577) + + sz * (roessler.get_z() - 2.578); + + F (d, i, gain * x, adding_gain); + gain *= g; + } + + gain = getport(4); +} + +/* //////////////////////////////////////////////////////////////////////// */ + +PortInfo +Roessler::port_info [] = +{ + { + "h", + INPUT | CONTROL, + {BOUNDED | DEFAULT_LOW, 0, 1} + }, { + "x", + INPUT | CONTROL, + {BOUNDED | DEFAULT_1, 0, 1} + }, { + "y", + INPUT | CONTROL, + {BOUNDED | DEFAULT_MID, 0, 1} + }, { + "z", + INPUT | CONTROL, + {BOUNDED | DEFAULT_0, 0, 1} + }, { + "volume", + INPUT | CONTROL, + {BOUNDED | DEFAULT_MID, MIN_GAIN, 1} + }, { + "out", + OUTPUT | AUDIO, + {0} + } +}; + +template <> void +Descriptor::setup() +{ + UniqueID = 1780; + Label = "Roessler"; + Properties = HARD_RT; + + Name = CAPS "Roessler - The sound of a Roessler attractor"; + Maker = "Tim Goetze "; + Copyright = "GPL, 2004-7"; + + /* fill port info and vtable */ + autogen(); +} + diff --git a/plugins/LadspaEffect/caps/Roessler.h b/plugins/LadspaEffect/caps/Roessler.h new file mode 100644 index 000000000..897ad1fde --- /dev/null +++ b/plugins/LadspaEffect/caps/Roessler.h @@ -0,0 +1,64 @@ +/* + Roessler.h + + Copyright 2004-11 Tim Goetze + + http://quitte.de/dsp/ + + turns a Roessler fractal into sound. + +*/ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA or point your web browser to http://www.gnu.org. +*/ + +#ifndef _ROESSLER_H_ +#define _ROESSLER_H_ + +#include "dsp/Roessler.h" + +class Roessler +: public Plugin +{ + public: + sample_t h, gain; + + DSP::Roessler roessler; + + template + void one_cycle (int frames); + + public: + static PortInfo port_info []; + + sample_t adding_gain; + + void init(); + void activate() + { gain = getport(4); } + + void run (int n) + { + one_cycle (n); + } + + void run_adding (int n) + { + one_cycle (n); + } +}; + +#endif /* _ROESSLER_H_ */ diff --git a/plugins/LadspaEffect/caps/Scape.cc b/plugins/LadspaEffect/caps/Scape.cc new file mode 100644 index 000000000..be9e5a879 --- /dev/null +++ b/plugins/LadspaEffect/caps/Scape.cc @@ -0,0 +1,205 @@ +/* + Scape.cc + + Copyright 2004-7 Tim Goetze + + http://quitte.de/dsp/ + +*/ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA or point your web browser to http://www.gnu.org. +*/ + +#include "basics.h" + +#include "Scape.h" +#include "Descriptor.h" + +void +Scape::activate() +{ + time = 0; + fb = 0; + + for (int i = 0; i < 4; ++i) + svf[i].reset(), + svf[i].set_out (SVF::Band), + hipass[i].set_f (250. / fs); + svf[3].set_out (SVF::Low), + + delay.reset(); + period = 0; +} + +static double +dividers [] = { + 1 /* 0 sentinel */, + 1, 0.5, 0.66666666666666666667, 0.75 +}; + +float +frandom2() +{ + float f = frandom(); + return f * f * f; +} + +template +void +Scape::one_cycle (int frames) +{ + sample_t * s = ports[0]; + + // double one_over_n = 1 / (double) frames; + + /* delay times */ + double t1 = fs * 60. / getport(1); + int div = (int) getport(2); + double t2 = t1 * dividers[div]; + + fb = getport(3); + + double dry = getport(4); + dry = dry * dry; + double blend = getport(5); + + sample_t * dl = ports[6]; + sample_t * dr = ports[7]; + + DSP::FPTruncateMode truncate; + + while (frames) + { + /* flip 'renormal' addition constant */ + normal = -normal; + + /* retune filters */ + if (period <= 1) + { + period = t2 * .5; + float f, q; + + f = frandom2(); + svf[0].set_f_Q (300 + 300 * f / fs, .3); + svf[3].set_f_Q (300 + 600 * 2 * f / fs, .6); + + f = frandom2(); + q = f; + svf[1].set_f_Q (400 + 2400 * f / fs, q); + q = 1 - f; + svf[2].set_f_Q (400 + 2400 * f / fs, q); + } + + int n = min ((int) period, frames); + if (n < 1) + { + /* not reached */ + #ifdef DEBUG + fprintf (stderr, "Scape: %d - %d/%d frames, t2 = %.3f?!?\n", (int) period, n, frames, t2); + #endif + return; + } + + /* sample loop */ + for (int i = 0; i < n; ++i) + { + sample_t x = s[i] + normal; + + sample_t x1 = delay.get_at (t1); + sample_t x2 = delay.get_at (t2); + + delay.put (x + fb * x1 + normal); + x = dry * x + .2 * svf[0].process (x) + .6 * svf[3].process(x); + + x1 = svf[1].process (x1 - normal); + x2 = svf[2].process (x2 - normal); + + x1 = hipass[1].process (x1); + x2 = hipass[2].process (x2); + + sample_t x1l, x1r, x2l, x2r; + x1l = fabs (lfo[0].get()); + x1r = 1 - x1l; + x2r = fabs (lfo[1].get()); + x2l = 1 - x2r; + + F (dl, i, x + blend * (x1 * x1l + x2 * x2l), adding_gain); + F (dr, i, x + blend * (x2 * x2r + x1 * x1r), adding_gain); + } + + frames -= n; + period -= n; + s += n; + dl += n; + dr += n; + } +} + +/* //////////////////////////////////////////////////////////////////////// */ + +PortInfo +Scape::port_info [] = +{ + { + "in", + INPUT | AUDIO, + {BOUNDED, -1, 1} + }, { + "bpm", + INPUT | CONTROL, + {BOUNDED | DEFAULT_LOW, 30, 240} + }, { + "divider", + INPUT | CONTROL, + {BOUNDED | INTEGER | DEFAULT_MIN, 2, 4} + }, { + "feedback", + INPUT | CONTROL, + {BOUNDED | DEFAULT_LOW, 0, 1} + }, { + "dry", + INPUT | CONTROL, + {BOUNDED | DEFAULT_LOW, 0, 1} + }, { + "blend", + INPUT | CONTROL, + {BOUNDED | DEFAULT_HIGH, 0, 1} + }, { + "out:l", + OUTPUT | AUDIO, + {0} + }, { + "out:r", + OUTPUT | AUDIO, + {0} + } +}; + +template <> void +Descriptor::setup() +{ + UniqueID = 2588; + Label = "Scape"; + Properties = HARD_RT; + + Name = CAPS "Scape - Stereo delay + Filters"; + Maker = "Tim Goetze "; + Copyright = "GPL, 2004-7"; + + /* fill port info and vtable */ + autogen(); +} + diff --git a/plugins/LadspaEffect/caps/Scape.h b/plugins/LadspaEffect/caps/Scape.h new file mode 100644 index 000000000..25cca9a1e --- /dev/null +++ b/plugins/LadspaEffect/caps/Scape.h @@ -0,0 +1,79 @@ +/* + Scape.h + + Copyright 2004-5 Tim Goetze + + http://quitte.de/dsp/ + +*/ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA or point your web browser to http://www.gnu.org. +*/ + +#ifndef _SCAPE_H_ +#define _SCAPE_H_ + +#include "dsp/Sine.h" +#include "dsp/Roessler.h" +#include "dsp/Lorenz.h" +#include "dsp/Delay.h" +#include "dsp/OnePole.h" +#include "dsp/BiQuad.h" +#include "dsp/RBJ.h" +#include "dsp/SVF.h" + +typedef DSP::SVF<1> SVF; + +class Scape +: public Plugin +{ + public: + sample_t time, fb; + double period; + + DSP::Lorenz lfo[2]; + DSP::Delay delay; + SVF svf[4]; + DSP::OnePoleHP hipass[4]; + + template + void one_cycle (int frames); + + public: + static PortInfo port_info []; + + void init() + { + delay.init ((int) (2.01 * fs)); /* two seconds = 30 bpm + */ + for (int i = 0; i < 2; ++i) + lfo[i].init(), + lfo[i].set_rate (.00000001 * fs); + } + + void activate(); + + void run (int n) + { + one_cycle (n); + } + + void run_adding (int n) + { + one_cycle (n); + } +}; + +#endif /* _SCAPE_H_ */ diff --git a/plugins/LadspaEffect/caps/Sin.cc b/plugins/LadspaEffect/caps/Sin.cc new file mode 100644 index 000000000..150ddf88b --- /dev/null +++ b/plugins/LadspaEffect/caps/Sin.cc @@ -0,0 +1,95 @@ +/* + Sin.cc + + Copyright 2002-7 Tim Goetze + + http://quitte.de/dsp/ + + simple sin() generator. + +*/ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA or point your web browser to http://www.gnu.org. +*/ + +#include "basics.h" + +#include "Sin.h" +#include "Descriptor.h" + +void +Sin::init() +{ + sin.set_f (f = .005, fs, 0); + gain = 0; +} + +template +void +Sin::one_cycle (int frames) +{ + if (f != *ports[0]) + sin.set_f (f = getport(0), fs, sin.get_phase()); + + double g = (gain == *ports[1]) ? + 1 : pow (getport(1) / gain, 1. / (double) frames); + + sample_t * d = ports[2]; + + for (int i = 0; i < frames; ++i) + { + F (d, i, gain * sin.get(), adding_gain); + gain *= g; + } + + gain = getport(1); +} + +/* //////////////////////////////////////////////////////////////////////// */ + +PortInfo +Sin::port_info [] = +{ + { + "f", + INPUT | CONTROL, + {BOUNDED | LOG | DEFAULT_100, 0.0001, 20000} + }, { + "volume", + INPUT | CONTROL, + {BOUNDED | DEFAULT_MID, MIN_GAIN, 1} + }, { + "out", + OUTPUT | AUDIO, + {0} + } +}; + +template <> void +Descriptor::setup() +{ + UniqueID = 1781; + Label = "Sin"; + Properties = HARD_RT; + + Name = CAPS "Sin - Sine wave generator"; + Maker = "Tim Goetze "; + Copyright = "GPL, 2004-7"; + + /* fill port info and vtable */ + autogen(); +} + diff --git a/plugins/LadspaEffect/caps/Sin.h b/plugins/LadspaEffect/caps/Sin.h new file mode 100644 index 000000000..fd540aa4d --- /dev/null +++ b/plugins/LadspaEffect/caps/Sin.h @@ -0,0 +1,62 @@ +/* + Sin.h + + Copyright 2004-11 Tim Goetze + + http://quitte.de/dsp/ + + sin() generator. + +*/ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA or point your web browser to http://www.gnu.org. +*/ + +#ifndef _SIN_H_ +#define _SIN_H_ + +#include "dsp/Sine.h" + +class Sin +: public Plugin +{ + public: + sample_t f, gain; + + DSP::Sine sin; + + template + void one_cycle (int frames); + + public: + static PortInfo port_info []; + + void init(); + void activate() + { gain = getport(1); } + + void run (int n) + { + one_cycle (n); + } + + void run_adding (int n) + { + one_cycle (n); + } +}; + +#endif /* _SIN_H_ */ diff --git a/plugins/LadspaEffect/caps/SweepVF.cc b/plugins/LadspaEffect/caps/SweepVF.cc new file mode 100644 index 000000000..95921c258 --- /dev/null +++ b/plugins/LadspaEffect/caps/SweepVF.cc @@ -0,0 +1,458 @@ +/* + SweepVF.cc + + Copyright 2002-7 Tim Goetze + + http://quitte.de/dsp/ + + SweepVFI, a lorenz fractal modulating the cutoff frequency of a + state-variable (ladder) filter. + + SweepVFII, the same with Q being modulated by a second fractal. + +*/ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA or point your web browser to http://www.gnu.org. +*/ + +#include "basics.h" + +#include "SweepVF.h" +#include "Descriptor.h" + +#include "dsp/RBJ.h" + +void +SweepVFI::init() +{ + f = .1; + Q = .1; + lorenz.init(); +} + +void +SweepVFI::activate() +{ + svf.reset(); + svf.set_f_Q (f = getport(1) / fs, Q = getport(2)); +} + +template +void +SweepVFI::one_cycle (int frames) +{ + sample_t * s = ports[0]; + + int blocks = frames / BLOCK_SIZE; + if (frames & (BLOCK_SIZE - 1)) + ++blocks; + + double one_over_blocks = 1 / (double) blocks; + /* cheesy linear interpolation for f, works well though. */ + double df = (getport(1) / fs - f) * one_over_blocks; + double dQ = (getport(2) - Q) * one_over_blocks; + + svf.set_out ((int) getport(3)); + + lorenz.set_rate (getport(7)); + + sample_t * d = ports[8]; + + while (frames) + { + lorenz.step(); + + double modulation = + getport(4) * lorenz.get_x() + + getport(5) * lorenz.get_y() + + getport(6) * lorenz.get_z(); + + double scale = getport(4) + getport(5) + getport(6); + + modulation *= scale * f; + svf.set_f_Q (max (.001, f + modulation), Q); + + int n = min (frames, BLOCK_SIZE); + + for (int i = 0; i < n; ++i) + F (d, i, svf.process (s[i] + normal), adding_gain); + + s += n; + d += n; + frames -= n; + + f += df; + Q += dQ; + } + + f = getport(1) / fs; + Q = getport(2); +} + +/* //////////////////////////////////////////////////////////////////////// */ + +PortInfo +SweepVFI::port_info [] = +{ + { + "in", + INPUT | AUDIO, + {0, 0, 0} + }, { + "f", + INPUT | CONTROL, + {BOUNDED | LOG | DEFAULT_LOW, 83, 3383} + }, { + "Q", + INPUT | CONTROL, + {BOUNDED | DEFAULT_MID, 0.001, .999} + }, { + "mode", + INPUT | CONTROL, + {BOUNDED | DEFAULT_1 | INTEGER, 0, 1} /* only lo and band make sense */ + }, { + "depth:x", + INPUT | CONTROL, + {BOUNDED | DEFAULT_LOW, 0, 1} + }, { + "depth:y", + INPUT | CONTROL, + {BOUNDED | DEFAULT_MID, 0, 1} + }, { + "depth:z", + INPUT | CONTROL, + {BOUNDED | DEFAULT_MAX, 0, 1} + }, { + "h", + INPUT | CONTROL, + {BOUNDED | DEFAULT_LOW, 0.001, 1} /* .039 */ + }, { + "out", + OUTPUT | AUDIO, + {0} + } +}; + +template <> void +Descriptor::setup() +{ + UniqueID = 1782; + Label = "SweepVFI"; + Properties = HARD_RT; + + Name = CAPS "SweepVFI - Resonant filter swept by a Lorenz fractal"; + Maker = "Tim Goetze "; + Copyright = "GPL, 2004-7"; + + /* fill port info and vtable */ + autogen(); +} + +/* //////////////////////////////////////////////////////////////////////// */ + +void +SweepVFII::init() +{ + f = .1; + Q = .1; + lorenz1.init(); + lorenz2.init(); +} + +void +SweepVFII::activate() +{ + svf.reset(); + svf.set_f_Q (f = getport(1) / fs, Q = getport(2)); +} + +template +void +SweepVFII::one_cycle (int frames) +{ + sample_t * s = ports[0]; + + int blocks = frames / BLOCK_SIZE; + if (frames & (BLOCK_SIZE - 1)) + ++blocks; + + double one_over_blocks = 1 / (double) blocks; + /* cheesy linear interpolation for f, works well though. */ + double df = (getport(1) / fs - f) * one_over_blocks; + double dQ = (getport(2) - Q) * one_over_blocks; + + svf.set_out ((int) getport(3)); + + lorenz1.set_rate (getport(7)); + lorenz2.set_rate (getport(11)); + + sample_t * d = ports[12]; + + while (frames) + { + /* f modulation */ + lorenz1.step(); + + double modulation1 = + getport(4) * lorenz1.get_x() + + getport(5) * lorenz1.get_y() + + getport(6) * lorenz1.get_z(); + + double scale1 = getport(4) + getport(5) + getport(6); + + modulation1 *= scale1 * f; + + /* Q modulation */ + lorenz2.step(); + + double modulation2 = + getport(8) * lorenz2.get_x() + + getport(9) * lorenz2.get_y() + + getport(10) * lorenz2.get_z(); + + double scale2 = getport(8) + getport(9) + getport(10); + + /* enforce Q limit */ + double q = Q + (modulation2 * scale2 * Q); + q = min (0.96, max (q, 0)); + + svf.set_f_Q (max (.001, f + modulation1), q); + + int n = min (frames, BLOCK_SIZE); + + for (int i = 0; i < n; ++i) + F (d, i, svf.process (s[i] + normal), adding_gain); + + s += n; + d += n; + frames -= n; + + f += df; + Q += dQ; + } + + f = getport(1) / fs; + Q = getport(2); +} + +/* //////////////////////////////////////////////////////////////////////// */ + +PortInfo +SweepVFII::port_info [] = +{ + { + "in", + INPUT | AUDIO, + {0, 0, 0} + }, { + "f", + INPUT | CONTROL, + {BOUNDED | LOG | DEFAULT_LOW, 83, 3383} + }, { + "Q", + INPUT | CONTROL, + {BOUNDED | DEFAULT_MID, 0.001, .999} + }, { + "mode", + INPUT | CONTROL, + {BOUNDED | DEFAULT_1 | INTEGER, 0, 1} /* only lo and band make sense */ + }, { + "f:depth:x", + INPUT | CONTROL, + {BOUNDED | DEFAULT_LOW, 0, 1} + }, { + "f:depth:y", + INPUT | CONTROL, + {BOUNDED | DEFAULT_MID, 0, 1} + }, { + "f:depth:z", + INPUT | CONTROL, + {BOUNDED | DEFAULT_MAX, 0, 1} + }, { + "f:h", + INPUT | CONTROL, + {BOUNDED | DEFAULT_LOW, 0.001, 1} /* .039 */ + }, { + "Q:depth:x", + INPUT | CONTROL, + {BOUNDED | DEFAULT_LOW, 0, 1} + }, { + "Q:depth:y", + INPUT | CONTROL, + {BOUNDED | DEFAULT_MID, 0, 1} + }, { + "Q:depth:z", + INPUT | CONTROL, + {BOUNDED | DEFAULT_MAX, 0, 1} + }, { + "Q:h", + INPUT | CONTROL, + {BOUNDED | DEFAULT_LOW, 0.001, 1} /* .039 */ + }, { + "out", + OUTPUT | AUDIO, + {0} + } +}; + +template <> void +Descriptor::setup() +{ + UniqueID = 2582; + Label = "SweepVFII"; + Properties = HARD_RT; + + Name = CAPS "SweepVFII - Resonant filter, f and Q swept by a Lorenz fractal"; + Maker = "Tim Goetze "; + Copyright = "GPL, 2004-7"; + + /* fill port info and vtable */ + autogen(); +} + +/* //////////////////////////////////////////////////////////////////////// */ + +void +AutoWah::init() +{ + f = 800 / fs; + Q = .5; +} + +void +AutoWah::activate() +{ + svf.reset(); + svf.set_f_Q (f = getport(1) / fs, Q = getport(2)); + svf.set_out (DSP::SVF<1>::Band); + + /* hi-passing input for envelope RMS calculation */ + hp.set_f (250. / fs); + + /* smoothing the envelope at 20 Hz */ + DSP::RBJ::LP (20. * BLOCK_SIZE / fs, .6, filter.a, filter.b); + + rms.reset(); + hp.reset(); + filter.reset(); +} + +template +void +AutoWah::one_cycle (int frames) +{ + sample_t * s = ports[0]; + + int blocks = frames / BLOCK_SIZE; + if (frames & (BLOCK_SIZE - 1)) + ++blocks; + + double one_over_blocks = 1 / (double) blocks; + /* cheesy linear interpolation for f, works well though. */ + double df = (getport(1) / fs - f) * one_over_blocks; + double dQ = (getport(2) - Q) * one_over_blocks; + + double scale = getport(3); + + sample_t * d = ports[4]; + + while (frames) + { + double m = rms.rms(); + + m = filter.process (m + normal); + + /* Leaving debug output in your code is cheesy! */ + /* + static int _turn = 0; + if (_turn++ % 100 == 0) + fprintf (stderr, "%.4f\n", m); + */ + + m *= scale * .08; + svf.set_f_Q (max (.001, f + m), Q); + + int n = min (frames, BLOCK_SIZE); + + for (int i = 0; i < n; ++i) + { + sample_t x = s[i] + normal; + /* A stacked SVF in bandpass mode is rather quiet, which is + * compensated here */ + F (d, i, 2 * svf.process (x), adding_gain); + /* for envelope calculation, prefer high f content */ + x = hp.process (x); + rms.store (x * x); + } + + s += n; + d += n; + frames -= n; + + f += df; + Q += dQ; + + normal = -normal; + } + + f = getport(1) / fs; + Q = getport(2); +} + +/* //////////////////////////////////////////////////////////////////////// */ + +PortInfo +AutoWah::port_info [] = +{ + { + "in", + INPUT | AUDIO, + {0, 0, 0} + }, { + "f", + INPUT | CONTROL, + {BOUNDED | LOG | DEFAULT_LOW, 43, 933} + }, { + "Q", + INPUT | CONTROL, + {BOUNDED | DEFAULT_LOW, 0.001, .999} + }, { + "depth", + INPUT | CONTROL, + {BOUNDED | DEFAULT_MID, 0, 1} + }, { + "out", + OUTPUT | AUDIO, + {0} + } +}; + +template <> void +Descriptor::setup() +{ + UniqueID = 2593; + Label = "AutoWah"; + Properties = HARD_RT; + + Name = CAPS "AutoWah - Resonant envelope-following filter"; + Maker = "Tim Goetze "; + Copyright = "GPL, 2004-7"; + + /* fill port info and vtable */ + autogen(); +} + + diff --git a/plugins/LadspaEffect/caps/SweepVF.h b/plugins/LadspaEffect/caps/SweepVF.h new file mode 100644 index 000000000..f25a0008b --- /dev/null +++ b/plugins/LadspaEffect/caps/SweepVF.h @@ -0,0 +1,160 @@ +/* + SweepVF.h + + Copyright 2004-7 Tim Goetze + + http://quitte.de/dsp/ + + SweepVFI, a lorenz fractal modulating the cutoff frequency of a + state-variable (ladder) filter. + + SweepVFII, the same with Q being modulated by a second fractal. + + AutoWah, SVF being modulated by 'instant' amplitude (envelope). + +*/ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA or point your web browser to http://www.gnu.org. +*/ + +#ifndef _SWEEP_VF_H_ +#define _SWEEP_VF_H_ + +#include "dsp/SVF.h" + +#include "dsp/Lorenz.h" +#include "dsp/Roessler.h" + +#include "dsp/RMS.h" +#include "dsp/BiQuad.h" +#include "dsp/OnePole.h" + +class SweepVFI +: public Plugin +{ + public: + double fs; + + /* svf parameters */ + sample_t f, Q; + + /* needs to be a power of two */ + enum { + BLOCK_SIZE = 32 + }; + + DSP::StackedSVF<1,2> svf; + DSP::Lorenz lorenz; + + template + void one_cycle (int frames); + + public: + static PortInfo port_info []; + + void init(); + void activate(); + + void run (int n) + { + one_cycle (n); + } + + void run_adding (int n) + { + one_cycle (n); + } +}; + +class SweepVFII +: public Plugin +{ + public: + /* svf parameters */ + sample_t f, Q; + + /* needs to be a power of two */ + enum { + BLOCK_SIZE = 32 + }; + + DSP::StackedSVF<1,2> svf; + DSP::Lorenz lorenz1; + DSP::Lorenz lorenz2; + + template + void one_cycle (int frames); + + public: + static PortInfo port_info []; + + void init(); + void activate(); + + void run (int n) + { + one_cycle (n); + } + + void run_adding (int n) + { + one_cycle (n); + } +}; + +/* //////////////////////////////////////////////////////////////////////// */ + +class AutoWah +: public Plugin +{ + public: + double fs; + + /* svf parameters */ + sample_t f, Q; + + /* needs to be a power of two */ + enum { + BLOCK_SIZE = 32 + }; + + DSP::StackedSVF<1,2> svf; + DSP::RMS rms; + + DSP::BiQuad filter; + DSP::OnePoleHP hp; + + template + void one_cycle (int frames); + + public: + static PortInfo port_info []; + + void init(); + void activate(); + + void run (int n) + { + one_cycle (n); + } + + void run_adding (int n) + { + one_cycle (n); + } +}; + +#endif /* _SWEEP_VF_H_ */ diff --git a/plugins/LadspaEffect/caps/ToneControls.cc b/plugins/LadspaEffect/caps/ToneControls.cc new file mode 100644 index 000000000..1c08d22d5 --- /dev/null +++ b/plugins/LadspaEffect/caps/ToneControls.cc @@ -0,0 +1,73 @@ +/* + ToneControls.cc + + Copyright 2004-7 Tim Goetze + + http://quitte.de/dsp/ + + 4-way Eq for amplifier emulation plugins +*/ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA or point your web browser to http://www.gnu.org. +*/ + +#include "basics.h" +#include + +#include "Amp.h" + +PreampBand +ToneControls::bands[] = +{ + /* f, Q, g */ + { 80, 1.20, 1.61}, + { 300, 1.10, 1.10}, + {1200, 1.14, 1.07}, + {4800, .80, 1.06} +}; + +void +ToneControls::init (double fs) +{ + for (int i = 0; i < 4; ++i) + eq.init_band (i, 2 * bands[i].center * M_PI / fs, bands[i].Q); +} + +double +ToneControls::get_band_gain (int i, double g) +{ + return bands[i].adjust * DSP::db2lin (g); +} + +void +ToneControls::set_band_gain (int i, float g) +{ + /* sorry, _ != . but hardly readable -- the difference is between local + * buffered value and actual Eq band gain */ + eq_gain[i] = g; + eq.gain[i] = get_band_gain (i, g); +} + +void +ToneControls::activate (sample_t ** ports) +{ + for (int i = 0; i < 4; ++i) + set_band_gain (i, *ports[i]); + + eq.reset(); +} + + diff --git a/plugins/LadspaEffect/caps/ToneStack.cc b/plugins/LadspaEffect/caps/ToneStack.cc new file mode 100644 index 000000000..4005f1851 --- /dev/null +++ b/plugins/LadspaEffect/caps/ToneStack.cc @@ -0,0 +1,195 @@ +/* + ToneStack.cc + + Copyright 2006-7 + David Yeh + Tim Goetze (cosmetics) + + Tone Stack emulation. +* +*/ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA or point your web browser to http://www.gnu.org. +*/ + +#include "basics.h" + +#include "ToneStack.h" +#include "Descriptor.h" + +#include "dsp/tonestack/ks_tab.h" +#include "dsp/tonestack/vs_tab.h" + +DSP::TSParameters +DSP::ToneStack::presets[] = { + /* for convenience, temporarily define k and MOhms as well as nF and pF */ + #define k * 1000 + #define M * 1000000 + #define nF * 1e-9 + #define pF * 1e-12 + /* parameter order is R1 - R4, C1 - C3 */ + /* { 250000, 1000000, 25000, 56000, 0.25e-9, 20e-9, 20e-9 }, DY */ + /* Fender */ + {250 k, 1 M, 25 k, 56 k, 250 pF, 20 nF, 20 nF}, /* 59 Bassman 5F6-A */ + {250 k, 250 k, 10 k, 100 k, 120 pF, 100 nF, 47 nF}, /* 69 Twin Reverb AA270 */ + {250 k, 250 k, 4.8 k, 100 k, 250 pF, 100 nF, 47 nF}, /* 64 Princeton AA1164 */ + /* Marshall */ + {220 k, 1 M, 22 k, 33 k, 470 pF, 22 nF, 22 nF}, /* 59/81 JCM-800 Lead 100 2203 */ + /* R4 is a 10 k fixed + 100 k pot in series actually */ + {250 k, 1 M, 25 k, 56 k, 500 pF, 22 nF, 22 nF}, /* 81 2000 Lead */ + + #if 0 + {220 k, 1 M, 22 k, 33 k, 470 pF, 22 nF, 22 nF}, /* 90 JCM-900 Master 2100 (same as JCM-800) */ + {250 k, 1 M, 25 k, 33 k, 500 pF, 22 nF, 22 nF}, /* 67 Major Lead 200 */ + {250 k, 250 k, 25 k, 56 k, 250 pF, 47 nF, 47 nF}, /* undated M2199 30W solid state */ + #endif + /* Vox -- R3 is fixed (circuit differs anyway) */ + {1 M, 1 M, 10 k, 100 k, 50 pF, 22 nF, 22 nF}, /* 59/86 AC-30 */ + #undef k + #undef M + #undef nF + #undef pF +}; + +int DSP::ToneStack::n_presets = TS_N_PRESETS; + +void +ToneStack::activate() +{ + tonestack.activate (ports + 2); +} + +template +void +ToneStack::one_cycle (int frames) +{ + sample_t * s = ports[0]; + tonestack.start_cycle (ports + 1); + sample_t * d = ports[5]; + + for (int i = 0; i < frames; ++i) + { + register sample_t a = s[i]; + a = tonestack.process (a + normal); + F (d, i, a, adding_gain); + } +} + + +PortInfo +ToneStack::port_info [] = +{ + { + "in", + INPUT | AUDIO, + {BOUNDED, -1, 1} + }, { + "model", + INPUT | CONTROL, + {BOUNDED | DEFAULT_0 | INTEGER, 0, TS_N_PRESETS - 1} + }, { + "bass", + INPUT | CONTROL, + {BOUNDED | DEFAULT_MID, 0, 1} + }, { + "mid", + INPUT | CONTROL, + {BOUNDED | DEFAULT_MID, 0, 1} + }, { + "treble", + INPUT | CONTROL, + {BOUNDED | DEFAULT_MID, 0, 1} + }, { + "out", + OUTPUT | AUDIO, + {0} + } +}; + +template <> void +Descriptor::setup() +{ + UniqueID = 2589; + Label = "ToneStack"; + Properties = HARD_RT; + + Name = CAPS "ToneStack - Tone stack emulation"; + Maker = "David Yeh "; + Copyright = "GPL, 2006-7"; + + /* fill port info and vtable */ + autogen(); +} + +/* //////////////////////////////////////////////////////////////////////// */ + +template +void +ToneStackLT::one_cycle (int frames) +{ + sample_t * s = ports[0]; + tonestack.updatecoefs (ports + 1); + sample_t * d = ports[4]; + + for (int i = 0; i < frames; ++i) + { + register sample_t a = s[i]; + a = tonestack.process (a + normal); + F (d, i, a, adding_gain); + } +} + +PortInfo +ToneStackLT::port_info [] = +{ + { + "in", + INPUT | AUDIO, + {BOUNDED, -1, 1} + }, { + "bass", + INPUT | CONTROL, + {BOUNDED | DEFAULT_MID, 0, 1} + }, { + "mid", + INPUT | CONTROL, + {BOUNDED | DEFAULT_MID, 0, 1} + }, { + "treble", + INPUT | CONTROL, + {BOUNDED | DEFAULT_MID, 0, 1} + }, { + "out", + OUTPUT | AUDIO, + {0} + } +}; + +template <> void +Descriptor::setup() +{ + UniqueID = 2590; + Label = "ToneStackLT"; + Properties = HARD_RT; + + Name = CAPS "ToneStackLT - Tone stack emulation, lattice filter 44.1"; + Maker = "David Yeh "; + Copyright = "GPL, 2006-7"; + + /* fill port info and vtable */ + autogen(); +} + diff --git a/plugins/LadspaEffect/caps/ToneStack.h b/plugins/LadspaEffect/caps/ToneStack.h new file mode 100644 index 000000000..f98a0a0d6 --- /dev/null +++ b/plugins/LadspaEffect/caps/ToneStack.h @@ -0,0 +1,98 @@ +/* + ToneStack.h + + Copyright 2006-7 + David Yeh + Tim Goetze (cosmetics) + + Tone Stack emulation. + +*/ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA or point your web browser to http://www.gnu.org. +*/ + +#ifndef _TONESTACK_H_ +#define _TONESTACK_H_ + +#include "dsp/util.h" +#include "dsp/windows.h" +#include "dsp/ToneStack.h" + +class ToneStack +: public Plugin +{ + private: + DSP::ToneStack tonestack; + + template + void one_cycle (int frames); + + public: + static PortInfo port_info []; + + void init() + { + tonestack.init (fs); + } + + void activate(); + + void run (int n) + { + one_cycle (n); + } + + void run_adding (int n) + { + one_cycle (n); + } +}; + +/* /////////////////////////////////////////////////////////////////////// */ + +class ToneStackLT +: public Plugin +{ + private: + DSP::ToneStackLT tonestack; + + template + void one_cycle (int frames); + + public: + static PortInfo port_info []; + + void init() + { + tonestack.init (fs); + } + + void activate() + { tonestack.activate (ports + 1); } + + void run (int n) + { + one_cycle (n); + } + + void run_adding (int n) + { + one_cycle (n); + } +}; + +#endif /* _TONESTACK_H_ */ diff --git a/plugins/LadspaEffect/caps/VCO.cc b/plugins/LadspaEffect/caps/VCO.cc new file mode 100644 index 000000000..45bb6a9c9 --- /dev/null +++ b/plugins/LadspaEffect/caps/VCO.cc @@ -0,0 +1,242 @@ +/* + VCO.cc + + Copyright 2004-7 Tim Goetze + + http://quitte.de/dsp/ + + an oversampled triangle/saw/square oscillator, and a combination of two + such oscillators with hard sync. + + TODO: optimize for phase clamping like this: + phi -= floor (phi); +*/ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA or point your web browser to http://www.gnu.org. +*/ + +#include "basics.h" + +#include "VCO.h" +#include "Descriptor.h" + +void +VCOs::init() +{ + /* going a fair bit lower than nominal with fc because the filter + * rolloff is not as steep as we might like it to be. */ + double f = .5 * M_PI / OVERSAMPLE; + + /* construct the downsampler filter kernel */ + DSP::sinc (f, down.c, FIR_SIZE); + DSP::kaiser (down.c, FIR_SIZE, 6.4); + + /* normalize downsampler filter gain */ + double s = 0; + for (int i = 0; i < down.n; ++i) + s += down.c[i]; + + /* scale downsampler kernel */ + s = 1 / s; + for (int i = 0; i < down.n; ++i) + down.c[i] *= s; +} + +template +void +VCOs::one_cycle (int frames) +{ + vco.set_f (getport(0), OVERSAMPLE * fs); + vco.set_saw_square (getport(1), getport(2)); + + double g = (gain == *ports[3]) ? + 1 : pow (getport(3) / gain, 1. / (double) frames); + + sample_t * d = ports[4]; + + for (int i = 0; i < frames; ++i) + { + F (d, i, gain * down.process (vco.get()), adding_gain); + + for (int o = 1; o < OVERSAMPLE; ++o) + down.store (vco.get()); + + gain *= g; + } + + gain = getport(3); +} + +/* //////////////////////////////////////////////////////////////////////// */ + +PortInfo +VCOs::port_info [] = +{ + { + "f", + INPUT | CONTROL, + {BOUNDED | LOG | DEFAULT_100, 1, 5751} + }, { + "tri .. saw", + INPUT | CONTROL, + {BOUNDED | DEFAULT_0, 0, 1} + }, { + "~ .. square", + INPUT | CONTROL, + {BOUNDED | DEFAULT_0, 0, 1} + }, { + "volume", + INPUT | CONTROL, + {BOUNDED | DEFAULT_MID, MIN_GAIN, 1} + }, { + "out", + OUTPUT | AUDIO, + {0} + } +}; + +template <> void +Descriptor::setup() +{ + UniqueID = 1783; + Label = "VCOs"; + Properties = HARD_RT; + + Name = CAPS "VCOs - Virtual 'analogue' oscillator"; + Maker = "Tim Goetze "; + Copyright = "GPL, 2004-7"; + + /* fill port info and vtable */ + autogen(); +} + +/* //////////////////////////////////////////////////////////////////////// */ + +void +VCOd::init() +{ + /* going a fair bit lower than nominal with fc because the filter + * rolloff is not as steep as we might like it to be. */ + double f = .5 * M_PI / OVERSAMPLE; + + /* construct the downsampler filter kernel */ + DSP::sinc (f, down.c, FIR_SIZE); + DSP::kaiser (down.c, FIR_SIZE, 6.4); + + /* normalize downsampler filter gain */ + double s = 0; + for (int i = 0; i < down.n; ++i) + s += down.c[i]; + + /* scale downsampler kernel */ + s = 1 / s; + for (int i = 0; i < down.n; ++i) + down.c[i] *= s; +} + +template +void +VCOd::one_cycle (int frames) +{ + vco.set_f (getport(0), OVERSAMPLE * fs, getport(5)); + + vco.vco[0].set_saw_square (getport(1), getport(2)); + vco.vco[1].set_saw_square (getport(3), getport(4)); + + vco.set_sync (getport(6)); + vco.set_blend (getport(7)); + + double g = (gain == *ports[8]) ? + 1 : pow (getport(8) / gain, 1. / (double) frames); + + sample_t * d = ports[9]; + + for (int i = 0; i < frames; ++i) + { + F (d, i, gain * down.process (vco.get()), adding_gain); + + for (int o = 1; o < OVERSAMPLE; ++o) + down.store (vco.get()); + + gain *= g; + } + + gain = getport(8); +} + +/* //////////////////////////////////////////////////////////////////////// */ + +PortInfo +VCOd::port_info [] = +{ + { + "f", + INPUT | CONTROL, + {BOUNDED | LOG | DEFAULT_100, 1, 5751} + }, { + "1: tri .. saw", + INPUT | CONTROL, + {BOUNDED | DEFAULT_0, 0, 1} + }, { + "1: ~ .. square", + INPUT | CONTROL, + {BOUNDED | DEFAULT_0, 0, 1} + }, { + "2: tri .. saw", + INPUT | CONTROL, + {BOUNDED | DEFAULT_0, 0, 1} + }, { + "2: ~ .. square", + INPUT | CONTROL, + {BOUNDED | DEFAULT_0, 0, 1} + }, { + "2: tune", + INPUT | CONTROL, + {BOUNDED | DEFAULT_0, -12, 12} + }, { + "sync", + INPUT | CONTROL, + {BOUNDED | DEFAULT_0, 0, 1} + }, { + "blend", + INPUT | CONTROL, + {BOUNDED | DEFAULT_HIGH, -1, 1} + }, { + "volume", + INPUT | CONTROL, + {BOUNDED | DEFAULT_MID, MIN_GAIN, 1} + }, { + "out", + OUTPUT | AUDIO, + {0} + } +}; + +template <> void +Descriptor::setup() +{ + UniqueID = 1784; + Label = "VCOd"; + Properties = HARD_RT; + + Name = CAPS "VCOd - Double VCO with detune and hard sync options"; + Maker = "Tim Goetze "; + Copyright = "GPL, 2004-7"; + + /* fill port info and vtable */ + autogen(); +} + diff --git a/plugins/LadspaEffect/caps/VCO.h b/plugins/LadspaEffect/caps/VCO.h new file mode 100644 index 000000000..c6b06f378 --- /dev/null +++ b/plugins/LadspaEffect/caps/VCO.h @@ -0,0 +1,134 @@ +/* + VCO.h + + Copyright 2004-5 Tim Goetze + + http://quitte.de/dsp/ + + an oversampled triangle/saw/square oscillator, and a combination of two + such oscillators with hard sync. + +*/ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA or point your web browser to http://www.gnu.org. +*/ + +#ifndef _VCO_H_ +#define _VCO_H_ + +#include "dsp/util.h" +#include "dsp/VCO.h" + +#include "dsp/FIR.h" +#include "dsp/sinc.h" +#include "dsp/windows.h" + +class VCOs +: public Plugin +{ + public: + sample_t f, gain; + + /* ok to just change these as you please, 4/32 works ok, sortof. */ + enum { + OVERSAMPLE = 8, + FIR_SIZE = 64, + }; + + DSP::TriSawSquare vco; + + /* downsampling filter */ + DSP::FIR down; + + template + void one_cycle (int frames); + + public: + static PortInfo port_info[]; + + VCOs() + : down (FIR_SIZE) + { } + + void init(); + void activate() + { + gain = *ports[3]; + down.reset(); + vco.reset(); + } + + void run (int n) + { + one_cycle (n); + } + + void run_adding (int n) + { + one_cycle (n); + } +}; + +/* //////////////////////////////////////////////////////////////////////// */ + +class VCOd +: public Plugin +{ + public: + double fs; + sample_t f, gain; + + /* ok to just change these as you please, 4/32 works ok, sortof. */ + enum { + OVERSAMPLE = 8, + FIR_SIZE = 64, + }; + + DSP::VCO2 vco; + + /* downsampling filter */ + DSP::FIR down; + + template + void one_cycle (int frames); + + public: + static PortInfo port_info[]; + + VCOd() + : down (FIR_SIZE) + { } + + void init(); + void activate() + { + gain = *ports[8]; + down.reset(); + vco.reset(); + } + + void run (int n) + { + one_cycle (n); + } + + void run_adding (int n) + { + one_cycle (n); + } +}; + +#endif /* _VCO_H_ */ diff --git a/plugins/LadspaEffect/caps/White.cc b/plugins/LadspaEffect/caps/White.cc new file mode 100644 index 000000000..28b2c3643 --- /dev/null +++ b/plugins/LadspaEffect/caps/White.cc @@ -0,0 +1,81 @@ +/* + White.cc + + Copyright 2004-7 Tim Goetze + + http://quitte.de/dsp/ + + white noise generation. + +*/ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA or point your web browser to http://www.gnu.org. +*/ + +#include "basics.h" + +#include "White.h" +#include "Descriptor.h" + +template +void +White::one_cycle (int frames) +{ + double g = (gain == *ports[0]) ? + 1 : pow (getport(0) / gain, 1. / (double) frames); + + sample_t * d = ports[1]; + + for (int i = 0; i < frames; ++i) + { + F (d, i, gain * white.get(), adding_gain); + gain *= g; + } + + gain = getport(0); +} + +/* //////////////////////////////////////////////////////////////////////// */ + +PortInfo +White::port_info [] = +{ + { + "volume", + INPUT | CONTROL, + {BOUNDED | DEFAULT_MID, MIN_GAIN, 1} + }, { + "out", + OUTPUT | AUDIO, + {0} + } +}; + +template <> void +Descriptor::setup() +{ + UniqueID = 1785; + Label = "White"; + Properties = HARD_RT; + + Name = CAPS "White - White noise generator"; + Maker = "Tim Goetze "; + Copyright = "GPL, 2004-7"; + + /* fill port info and vtable */ + autogen(); +} + diff --git a/plugins/LadspaEffect/caps/White.h b/plugins/LadspaEffect/caps/White.h new file mode 100644 index 000000000..5633599e8 --- /dev/null +++ b/plugins/LadspaEffect/caps/White.h @@ -0,0 +1,62 @@ +/* + White.h + + Copyright 2004-5 Tim Goetze + + http://quitte.de/dsp/ + + white noise generator. + +*/ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA or point your web browser to http://www.gnu.org. +*/ + +#ifndef _WHITE_H_ +#define _WHITE_H_ + +#include "dsp/White.h" + +class White +: public Plugin +{ + public: + sample_t gain; + + DSP::White white; + + template + void one_cycle (int frames); + + public: + static PortInfo port_info []; + + void init() {} + void activate() + { gain = getport(0); } + + void run (int n) + { + one_cycle (n); + } + + void run_adding (int n) + { + one_cycle (n); + } +}; + +#endif /* _WHITE_H_ */ diff --git a/plugins/LadspaEffect/caps/basics.h b/plugins/LadspaEffect/caps/basics.h new file mode 100644 index 000000000..df24e8c05 --- /dev/null +++ b/plugins/LadspaEffect/caps/basics.h @@ -0,0 +1,199 @@ +/* + basics.h + + Copyright 2004-9 Tim Goetze + + http://quitte.de/dsp/ + + common constants, typedefs, utility functions + and simplified LADSPA #defines. + +*/ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA or point your web browser to http://www.gnu.org. +*/ + +#ifndef _BASICS_H_ +#define _BASICS_H_ + +#define _GNU_SOURCE 1 +#define _USE_GNU 1 + +/* unlocking some standard math calls. */ +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 +#define _ISOC99_SOURCE 1 +#define _ISOC9X_SOURCE 1 + +#include +#include + +#include + +#include +#include +#include + +#include + +/* reducing LADSPA_DEFINES_WITH_LOTS_OF_CHARACTERS_REALLY verbosity */ +#define BOUNDED (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE) +#define INTEGER LADSPA_HINT_INTEGER +#define LOG LADSPA_HINT_LOGARITHMIC +#define TOGGLE LADSPA_HINT_TOGGLED + +#define DEFAULT_0 LADSPA_HINT_DEFAULT_0 +#define DEFAULT_1 LADSPA_HINT_DEFAULT_1 +#define DEFAULT_100 LADSPA_HINT_DEFAULT_100 +#define DEFAULT_440 LADSPA_HINT_DEFAULT_440 +#define DEFAULT_MIN LADSPA_HINT_DEFAULT_MINIMUM +#define DEFAULT_LOW LADSPA_HINT_DEFAULT_LOW +#define DEFAULT_MID LADSPA_HINT_DEFAULT_MIDDLE +#define DEFAULT_HIGH LADSPA_HINT_DEFAULT_HIGH +#define DEFAULT_MAX LADSPA_HINT_DEFAULT_MAXIMUM + +#define INPUT LADSPA_PORT_INPUT +#define OUTPUT LADSPA_PORT_OUTPUT +#define AUDIO LADSPA_PORT_AUDIO +#define CONTROL LADSPA_PORT_CONTROL + +#define HARD_RT LADSPA_PROPERTY_HARD_RT_CAPABLE + +#define TEN_TO_THE_SIXTH 1000000 + +#define MIN_GAIN .000001 /* -120 dB */ + +/* smallest non-denormal 32 bit IEEE float is 1.18×10-38 */ +#define NOISE_FLOOR .00000000000005 /* -266 dB */ + +typedef int8_t int8; +typedef uint8_t uint8; +typedef int16_t int16; +typedef uint16_t uint16; +typedef int32_t int32; +typedef uint32_t uint32; +typedef int64_t int64; +typedef uint64_t uint64; + +typedef struct { + const char * name; + LADSPA_PortDescriptor descriptor; + LADSPA_PortRangeHint range; +} PortInfo; + +typedef LADSPA_Data sample_t; +typedef unsigned long ulong; + +/* flavours for sample store functions run() and run_adding() */ +typedef void (*sample_func_t) (sample_t *, int, sample_t, sample_t); + +inline void +store_func (sample_t * s, int i, sample_t x, sample_t gain) +{ + s[i] = x; +} + +inline void +adding_func (sample_t * s, int i, sample_t x, sample_t gain) +{ + s[i] += gain * x; +} + +#ifndef max + +template +X min (X x, Y y) +{ + return x < y ? x : (X) y; +} + +template +X max (X x, Y y) +{ + return x > y ? x : (X) y; +} + +#endif /* ! max */ + +template +T clamp (T value, T lower, T upper) +{ + if (value < lower) return lower; + if (value > upper) return upper; + return value; +} + +static inline float +frandom() +{ + return (float) rand() / (float) RAND_MAX; +} + +/* NB: also true if 0 */ +inline bool +is_denormal (float & f) +{ + int32 i = *((int32 *) &f); + return ((i & 0x7f800000) == 0); +} + +/* todo: not sure if this double version is correct, actually ... */ +inline bool +is_denormal (double & f) +{ + int64 i = *((int64 *) &f); + return ((i & 0x7fe0000000000000ll) == 0); +} + +#ifdef __i386__ + #define TRAP asm ("int $3;") +#else + #define TRAP +#endif + +/* //////////////////////////////////////////////////////////////////////// */ + +#define CAPS "C* " + +class Plugin { + public: + double fs; /* sample rate */ + double adding_gain; /* for run_adding() */ + + int first_run; /* 1st block after activate(), do no parameter smoothing */ + sample_t normal; /* renormal constant */ + + sample_t ** ports; + LADSPA_PortRangeHint * ranges; /* for getport() below */ + + public: + /* get port value, mapping inf or nan to 0 */ + inline sample_t getport_unclamped (int i) + { + sample_t v = *ports[i]; + return (isinf (v) || isnan(v)) ? 0 : v; + } + + /* get port value and clamp to port range */ + inline sample_t getport (int i) + { + LADSPA_PortRangeHint & r = ranges[i]; + sample_t v = getport_unclamped (i); + return clamp (v, r.LowerBound, r.UpperBound); + } +}; + +#endif /* _BASICS_H_ */ diff --git a/plugins/LadspaEffect/caps/caps.html b/plugins/LadspaEffect/caps/caps.html new file mode 100644 index 000000000..329886a00 --- /dev/null +++ b/plugins/LadspaEffect/caps/caps.html @@ -0,0 +1,1715 @@ + + + The CAPS Audio Plugin Suite + + + + +

+
+ +

The CAPS Audio Plugin Suite

+ + + + + + + + + + + +
+ Release 0.4.5 + + http://quitte.de/dsp/caps.html + + Tim Goetze +
+ March 26, 2011 + tim@quitte.de +
+ + + +  
+ +

Front Matter

+

+ CAPS, the C* Audio Plugin Suite, is a collection of + refined LADSPA audio plugins capable of (and mainly + intended for) realtime operation. The suite includes DSP units emulating + instrument amplifiers, stomp-box classics, + versatile 'virtual analogue' oscillators, + fractal oscillation, reverb, equalization and more. +

+

+ My favourite user's quote: + “... if your amps beat your plugins, they + are *very good* amps.. ;-)” – Thanks, Pete! +

+

+ Most of the suite is of my own invention, + while some plugins are rewrites of + existing designs, included for + excellence or interest. + Inspiring code was authored by + (in no particular order): + Andrew Simper, Perry Cook, Gary Scavone, + Steve Harris, Richard Dobson, Bram de Jong, + Robert Bristow-Johnson and others. +

+

+ The ToneStack plugins and the + tone controls of the AmpVTS unit + have been designed and implemented by + David Yeh at + CCRMA. +

+

+ Invaluable suggestions, bug hunting and fixing and + numerous patient reminders + of the sorry state of affairs + have been graciously + provided by (among others and in no particular order) + Sampo Savolainen, Damon Chaplin, Paul Winkler and Niclas Wretström. +

+

+ All of CAPS is free software and distributed + in source code. +

+  
+ +
* What's with the C?
+

+ So what does the C in the name stand for? Honestly, I don't know. +

+

+ Complete? Not yet.
+ C as in the programming language? The source is C++.
+ Crap? Heaven forbid!
+ Cute? Why not ...
+ Common? Not bad either.
+ C, the latin numeral for one-hundred? Some more to go, but I + like the idea. +

+

+ I've got it! C as in The Caps Audio Plugin Suite! + A classic. +

+ +  
+ +

Download

+

+ CAPS is distributed under the + GNU General Public License. Other licensing terms + can be arranged if you wish, please feel free to contact me. +

+ +
No Guarantee
+

+ While I have bred all the plugins in the suite with the greatest care, + there is no guarantee + that they will all retain perfect manners under all possible + circumstances. Take, for example, the Lorenz + plugin, which models + a fractal system. How am I to guarantee its + output will never go out of range, if people far more knowledgeable + about this fractal than me assert its unpredictable behaviour? +

+ +

+ This collection is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +

+ +

+ Download the latest release + here, it is caps_0.4.5.tar.gz (772 kB). +

+ +  
+ +

Installation

+ +

+ Provided you run Linux, + installation is simply: +

+ +
+$ tar xvfz caps_0.4.5.tar.gz 
+$ cd caps-0.4.5 
+$ ./configure.py
+$ make
+$ su
+# make install
+ +

+ The configure.py step is optional on Linux but recommended + for optimum performance. +

+

+ You should now be able use the plugins from the collection + in any LADSPA-aware host program, + like the wonderful pd with + the plugin~ + external, + the inimitable jack-rack, + the impressive ardour, + the versatile ecasound, + the classic snd, + and numerous other applications large and small. +

+ +

+ You don't run Linux? Why not + downgrade now? +

+ +
OSX
+

+ configure.py should detect an OSX build and prepare the + relevant flags for Apple's different-thinking ld + implementation. + Mind you, this is untested by me and + not guaranteed to actually work. If it does, please + tell me. Thanks! +

+ +
Troubleshooting
+

+ With no external dependencies, compiling CAPS + should rarely fail on a Linux box. If it + does on your machine, please send the output of the make + command so we can try and fix the problem. +

+ +
Bugs
+

+ If any of the plugins in the suite do not work with your host program + of choice, or don't work as advertised, please + send a bug report. +

+ +  
+ +

What You Should Know

+ +
Parameter Smoothing
+

+ To prevent zipper noise, many plugin control inputs are subject + to internal parameter smoothing where the effort seems justified. + This is achieved by sweeping parameters internal to the plugin. + The duration of this sweep will vary with the audio system setup. + For realtime use and most known LADSPA hosts it is equal to the audio + block size (in jackd terms: the "frames per period"). +

+ +
Sample Rate
+

+ The CAPS plugins are designed to be used at + sample rates of 44.1 kHz or higher. Operation at lower sample rates + is generally possible but untested. + Especially the resonant filters in the + SweepVFI, + SweepVFII, + AutoWah and + Scape plugins can self-oscillate out of + bounds at low sample rates and high filter cutoff frequency settings. + It is a wise idea to do some silent test runs testing + the entire parameter range to see if + the plugin works as expected before relying on its operation at + sample rates below 44.1 kHz. +

+

+ In the plugin listing, for every unit you'll see a note like + All sample rates. This means that the plugin should sound the + same no matter what sample rate it is run at. If it doesn't, holler at + me. + A note like 44.1 kHz only means you + can still run the plugin at other sample rates without having to fear + for your life, but the sonic experience may differ from what is + advertised. +

+

+ Usage at sample rates of 176 kHz or higher may cause problems with some + plugins. We recommend not exceeding 100 kHz for all applications. +

+ +
Realtime Use
+

+ All of the plugins in the suite are hard-realtime capable. In some + cases, parameter smoothing will take a marginal number of + extra CPU cycles when a control value is changed, as well as when the + plugin is starting or resuming operation. +

+ +
In-Place and Mixing/Replacing Operation
+

+ All of the plugins in the suite support any combination of in-place, + mixing and replacing operation. +

+ +
Denormals
+

+ Denormal numbers + (wikipedia) + are the bane of DSP on common computer systems because they seriously + slow down computing speed. In CAPS, various approaches are employed to + prevent this problem from arising. Most of the plugins add an inaudible + signal (-266 dB) at the Nyquist + (wikipedia) + or at a fixed lower frequency which keeps calculations out of the critical + zone around zero. In addition, if you run configure.py prior + to building CAPS, SSE extensions will be employed to aid in this task if + they are available on the build system. +

+ +
I'd love to hear from you. Really!
+

+ You like something about CAPS? Don't like it? + Either way, tell me – otherwise + I'll never be able to improve it! +

+ +
Known Bugs and Limitations
+
    +
  • + CPU usage figures, if given, may be inaccurate or even off by an + order of magnitude. +
  • +
  • + 8x oversampling consumes a lot of CPU power. +
  • +
  • + Since version 0.4.0, CAPS cannot be compiled with gcc 2.95 any more. +
  • +
  • + Processing blocks larger than 231 - 1 aren't supported. +
  • +
  • + Old jack-rack host versions have some crazy ideas about the + default control parameters of the CAPS plugins – they're all + over the place. +
  • +
  • + Sample rates in excess of 100 kHz may cause some plugins to develop + problems. +
  • +
  • + The White plugin + actually produces a slightly purplish signal despite the rather + boastful claims of signal purity made elsewhere. +
  • +
+ +  
+

Give me a Guitar Setup Already!

+ +

+ Start your guitar signal chain with an + AmpVTS, followed by a + CabinetII and finish with a + Plate reverb. + Season to taste, done. +

+ Additional effects like + chorus, + phaser or + auto wah would drop in right before or right after + the Cabinet (I usually prefer the latter). +

+ +  
+ +

The Plugins

+ +

Generic

+ +

Eq

+

+ A ten-band, octave-spread equalizer. Based on a traditional analogue + design and about as faithful as digital IIR filtering allows. + Individual band filters are 6 dB / octave. +

+

+ All sample rates (bands beyond Nyquist are disabled). +

+
    +
  • 31 Hz, 63 Hz, 125 Hz, 250 Hz, 500 Hz, 1 kHz, 2 kHz, 4 kHz, 8 kHz, 16 kHz
  • + control the gain in dB for the respective band.

    +
+ +

Eq2x2

+

+ By popular demand, a stereo-in, stereo-out version of the + Eq unit. + Same controls as Eq. +

+ +

Compress

+ +

+ A mono compressor, based on the SC1 design by + Steve Harris (in other words, a ripoff) + with minor tweaks. Be + careful with the gain and ratio controls, the output signal can easily + exceed 0 dB. +

+

+ All sample rates. +

+
    +
  • gain (dB)

    + controls the maximum gain applied by the unit.

  • +
  • ratio (1:n)

    + controls the overall gain.

  • +
  • attack (s)

    + controls the speed at which the circuit acts on a rising input signal + envelope.

  • +
  • release (s)

    + controls the speed at which the circuit acts on a decaying input signal + envelope.

  • +
  • threshold (dB)

    + sets the envelope level that the compressor starts acting at.

  • +
  • knee radius (dB)

    + controls the softness of the transition between unaltered and + compressed signal.

  • +
+ +

Pan

+

+ Places a monaural source in the stereo field. For some extra spicing, + the unit can also add a low-pass filtered echo at the far + ends of the stereo field to make the signal sound 'wider' (recreating + the old doubling effect with a twist). You can + (and should!) control the loudness and timing of the echo; what's best + depends largely on the source signal. +

+

+ No parameter smoothing. +

+

+ All sample rates. +

+
    +
  • pan

    + position

  • +
  • width

    + echo volume

  • +
  • t

    + delay in milliseconds

  • +
  • mono

    + if non-zero, causes the unit to mix the stereo output back down to mono + and output that (on both outbound ports). + The purpose is to check for mono + compatibility of the output.

  • +
+ +

Narrower

+

+ Reduces the width of a stereophonic signal. + Very useful for headphone listeners. +

+

+ No parameter smoothing. +

+

+ All sample rates. +

+
    +
  • strength

    + amount of width reduction

  • +
+ + +

Emulation

+ +

PreampIII

+

+ One further step in the evolution of my + tube preamplifier emulation. This one + uses conventional polyphase FIR filters for 8x oversampling, + which helps make the unit sound a good deal cleaner than the + IIR-based predecessor. +

+

+ The first steps towards this unit were based on a spice model + of the preamplifier circuit in a Fender 5F4 design ('Super' tube amp, + a close relative of the famed 'Bassman', which is the ancestor of the + Marshall lineage). Further evolution was + based on measurements of my 'Super 60' (mid-1980s) amp and, of course, + personal preference. + The plugin offers a softer kind of preamp clipping + than the actual circuit, though it can be made to clip as harsh as the + original thing if given enough gain. +

+

+ A word of caution: at high 'temperature' settings, an input + signal peaking above 0 dB can drive + the first 'tube' stage into hard clipping. Since this stage of the + circuit is run at the nominal sample rate, aliasing and thus sound + quality degradation will occur. + Do not overdrive the input, instead use the 'gain' knob for + harsh distortion, it offers more than enough of it. This applies to all + Preamp and Amp units. +

+

All sample rates.

+
    +
  • gain

    + controls the level of saturation. For a balanced (0 dB max.) + input signal, + hard clipping will not occur below a gain value of 1. +

  • +
  • temperature

    + emulates the level of the input signal, thus how much the first + preamplifier tube will colour the signal. + The effect is very subtle.

  • +
+ +

PreampIV

+

+ A variation on PreampIII with added tone controls + before the clipping stage. The tone controls have the same + flaws as their analog counterparts (phase cancellation at high band + gains). But exactly because they are not linear-phase, they are quite + useful in altering the distortion characteristics of the circuit. +

+

All sample rates.

+

+ Same parameters as PreampIII, plus the following + (all in dB units): +

+
    +
  • bass

    + 80 Hz band

  • +
  • mid

    + 300 Hz band

  • +
  • treble

    + 1200 Hz band

  • +
  • hi

    + 4800 Hz band

  • +
+ +

ToneStack

+

+ A close model of the tone stack of a traditional instrument + amplifier (of Fender origin), designed and implemented by David Yeh, + discussed in [2] + (see his project page at CCRMA). +

+ This is the 'procedural' implementation which uses a direct form II filter, + adapts to the actual sample rate and offers the choice of model + from a selection of several classic tone stacks. + (The AC-30 is a crude approximation for which David isn't to blame. I + simply dropped in the parameters although the circuit doesn't + match the one David modeled.) +

+

All sample rates.

+
    +
  • model

    + 0 - '59 Bassman
    + 1 - '69 Twin Reverb
    + 2 - '64 Princeton
    + 3 - '59/'81 JCM 800
    + 4 - '78 Club & Country
    + 5 - '59/'86 AC-30 of sorts +

  • +
  • bass
  • +
  • mid
  • +
  • treble
  • +
+ +

ToneStackLT

+

+ This version of David Yeh's ToneStack replaces + the procedural approach and direct form II filter + with a lattice filter and operation on + precalculated simulation data. It's a fixed implementation of the + '59 Bassman model. +

+

44.1 kHz

+
    +
  • bass
  • +
  • mid
  • +
  • treble
  • +
+ + +

AmpIII

+

+ A PreampIII circuit plus a tube power amplifier + emulation giving that smooth drive. +

+

+ We recommend you use AmpVTS instead. +

+

All sample rates.

+

+ Same controls as PreampIII, plus: +

+
    +
  • drive

    + controls the 'master volume' of the circuit, i.e. how much + coloring and compression the emulated power amplifier produces.

  • +
+ +

AmpIV

+

+ A PreampIV with the same output amp stage + emulation that AmpIII employs. Controls are the + same as on PreampIV, plus the 'drive' inherited + from AmpIII. +

+

+ We recommend you use AmpVTS instead. +

+

All sample rates.

+ +

AmpV

+

+ This circuit is loosely based on the AmpIII design. + The preamplifier stage has been augmented and tuned + to provide a warmer frequency response as well as slightly different + clipping characteristics. But more significantly, AmpV emulates the + shortcomings of an unregulated power supply and their effect on the + total gain of the circuit, the operating point of the tubes and the + clipping response. +

+ AmpV's forte is a mellow sound at the transition from clean to rough, + at lowish 'gain' settings and moderate 'watts'. +

+

+ We recommend you use AmpVTS instead. +

+

All sample rates.

+
    +
  • gain

    + controls the amount of edge added in the preamplifier stage. The + parameter mapping has been optimized for fine control in the clean to + medium-rough range. +

  • +
  • bass

    + controls the attenuation or amplification of low frequencies + before the preamp tube (the value is expressed in dB). + Technically, a low-shelving equalizer filter. +

  • +
  • tone

    + controls post-preamplifier circuit filtering. At the zero setting, + the effect is turned off. At its maximum, there is some resonance + quite high in the spectrum. +

  • +
  • drive

    + controls power-amplification stage saturation, which gives a fair bit + of warmth and some compression. +

  • +
  • watts

    + controls how capable the emulated power supply is. At its minimum + setting, the effects of supply voltage modulation are + the most pronounced. + At the maximum setting, they are effectively removed (which is + recommended for high-'gain' setups). +

  • +
+ +

AmpVTS

+

+ An AmpV with the tone controls replaced with + the fine ToneStack by David Yeh. And a ton of + other modifications (most notably the availability of an extra 28 dB + of gain). +

+

All sample rates.

+ + +

CabinetI

+ +

+ A collection of filters emulating the frequency response + of various guitar combo amps or speaker cabinets, using the + method outlined + here. +

+

+ You'll find a more exact, but also a lot more cycle-hungry and + latency-inflicting rendering of + these responses in + Steve Harris' collection, from which + they were borrowed. +

+

+ We recommend you use the successor unit CabinetII + instead. +

+

+ 44.1 kHz (48 kHz gives a slightly different, but still usable frequency response.) +

+
    +
  • model

    + 0 - identity filter (what goes in, goes out).
    + 1 - 'unmatched', as I still like to call it. A Matchless Chieftain.
    + 2 - the same, but the recording was taken with the microphone on-axis.
    + 3 - Superchamp (a Fender, isn't it?)
    + 4 - Fender Vibrolux 68
    + 5 - Marshall 'Plexi' +

  • +
  • gain (dB)

    + volume control.

  • +
+ +

CabinetII

+ +

+ A refined version of CabinetI. + This version offers a much more + faithful rendering of the original speaker cabinet frequency responses + due to a modified filter approximation, double the filter order and + (limited) adaptability to sample rate. +

+ Unlike conventional impulse response emulators who rely on brute-force + convolution, FFT-based algorithms or the patent-encumbered zero-latency + variant of the latter, the Cabinet units employ IIR filters for + truly resonant behaviour. As a result, their sound is more lively. +

+ Same controls as CabinetI. +

+

+ 44.1, 48, 88.2 and 96 kHz (nearest match chosen at runtime) +
+

+ +

Clip

+

+ A spin-off of the PreampIII effort. + 8x oversampled hard clipping (sometimes called 'diode' or + 'transistor' clipping). + The clip threshold is fixed at -1 dB (overshoot + from the up- and downsampling filters could exceed 0 dB were the threshold + higher). +

+

+ All sample rates. +

+
    +
  • gain (dB)

    + controls pre-clipping amplification.

  • +
+ +

Effects

+ +

ChorusI

+ +

+ Mono version, with a feedback circuit. The parameter range suits more + subtle effects as well as all-out flanging. Modifying the 't' parameter + when 'feedback' is non-zero will cause zipper noise. +

+

+ All sample rates. +

+
    +
  • t (ms)

    + delay time.

  • +
  • width (ms)

    + controls the amount of pitch change.

  • +
  • rate (Hz)

    + the speed of the pitch modulation.

  • +
  • blend

    + the amount of dry and fed-back signal in the output.

  • +
  • feedforward

    + amount of modulated signal in the output.

  • +
  • feedback

    + amount of signal with fixed delay in the modulation input.

  • +
+ +

StereoChorusI

+ +

+ Two ChorusI circuits in parallel, + sharing the same input (and delay + line). Same parameters as the mono version, plus one. +

+

+ All sample rates. +

+
    +
  • phase
  • + controls the relation of the two LFOs. 0 means in-phase, 0.5 is + quadrature, and 1 is anti-phase.

    + +
+ +

ChorusII

+ +

+ A variation on the ChorusI unit; this one employs + a Roessler fractal to steer the signal modulation, resulting in less + predictable and thus more interesting sound. +

+

+ All sample rates. +

+
    +
  • t (ms)

    + delay time.

  • +
  • width (ms)

    + controls the amount of pitch change.

  • +
  • rate

    + the speed of the pitch modulation.

  • +
  • blend

    + the amount of dry and fed-back signal in the output.

  • +
  • feedforward

    + amount of modulated signal in the output.

  • +
  • feedback

    + amount of signal with fixed delay in the modulation input.

  • +
+ +

StereoChorusII

+ +

+ Two ChorusII circuits in parallel, + sharing the same input (and delay + line). Same parameters as the mono version. +

+

+ All sample rates. +

+ +

PhaserI

+ +

+ Nothing out of the ordinary, just a phaser like I like to have them. + A phaser unit works by sweeping notches in the frequency response; this one + has six comb filters, for six notches. +

+

+ All sample rates. +

+
    +
  • rate (Hz)

    + controls the speed of the modulation.

  • +
  • depth

    + the strength of the effect.

  • +
  • spread

    + the distance of the notched frequency bands.

  • +
  • feedback

    + controls the amount of resonance.

  • +
+ +

PhaserII

+ +

+ A variation of the PhaserI circuit which relies + on a Lorenz fractal for the modulation source, improving hugely on + output sound variation. +

+

+ All sample rates. +

+
    +
  • rate

    + controls the speed of the modulation.

  • +
  • depth

    + the strength of the effect.

  • +
  • spread

    + the distance of the notched frequency bands.

  • +
  • feedback

    + controls the amount of resonance.

  • +
+ +

SweepVFI

+ +

+ A resonant filter whose cutoff frequency is swept by a + Lorenz fractal. With the default parameters + (moderate Q, cutoff around 800 Hz and band pass mode) + it makes a nice Wah effect if you lower the 'h' parameter by a fair amount. +

+

+ Another idea is to set it to very high Q and frequency in low pass mode + and filter some noise, for synthetic bird chirping (high h value) + or theremin-like sounds (low h, lower frequency). +

+

+ Please note that the most useful settings for the 'h' parameter + are very low, around 0.01 - 0.09. Unfortunately there's no way + to provide a default setting as low as this without compromising + the range of the control. +

+

+ And be careful, high Q resonance can peak at up to +18 dB. +

+

+ All sample rates (modulation rate and character are sample rate dependent). +

+
    +
  • f

    + cutoff frequency (band center for band pass filtering).

  • +
  • Q

    + filter resonance.

  • +
  • mode

    + 0 - low pass
    + 1 - band pass

  • +
  • depth:x
  • +
  • depth:y
  • +
  • depth:z

    + control how the modulation is mixed from the state of the attractor.

  • +
  • h

    + step size of the fractal.

  • +
+ +

SweepVFII

+ +

+ A variation on SweepVFI, + with the filter Q (bandwidth/resonance) + modulated by a second Lorenz fractal. +

+

+ Please note that the most useful settings for the 'h' parameter + are very low, around 0.01 - 0.09. Unfortunately there's no way + to provide a default setting as low as this without compromising + the range of the control. +

+

+ And be careful, high Q resonance can peak at up to +18 dB. +

+

+ All sample rates (modulation rate and character are sample rate dependent). +

+
    +
  • f

    + cutoff frequency (band center for band pass filtering).

  • +
  • Q

    + filter resonance.

  • +
  • mode

    + 0 - low pass
    + 1 - band pass

  • +
  • f:depth:x
  • +
  • f:depth:y
  • +
  • f:depth:z

    + control how the filter cutoff modulation is mixed + from the state of the attractor.

  • +
  • f:h

    + step size of the fractal modulating the cutoff.

  • +
  • Q:depth:x
  • +
  • Q:depth:y
  • +
  • Q:depth:z

    + control how the filter Q modulation is mixed + from the state of the attractor.

  • +
  • Q:h

    + step size of the fractal modulating filter Q.

  • +
+ +

AutoWah

+

+ The same resonant filter as used by the SweepVFI + and SweepVFII units, the difference being that + the filter is hard-wired for bandpass operation and + the band centre frequency is modulated by an envelope-following circuit. + In short, an effect commonly known and esteemed as an automatic wah, + or AutoWah. Probably most useful with instruments allowing fine control over + dynamics at all times. +

+

+ Be careful with the Q parameter, high resonance can peak at up to +18 dB. +

+

+ All sample rates (modulation rate and character may be sample rate dependent). +

+
    +
  • f

    + filter band centre frequency.

  • +
  • Q

    + resonance.

  • +
  • depth

    + strength of the modulation.

  • +
+ + +

Scape

+ +

+ This plugin will generate quite expansive soundscapes from even the + most modest input signals. +

+

+ Technically, 'Scape' is a + stereo delay, with the panning of the echo modulated by a pair of + fractals. + The delay times are adjustable through + a 'bpm' knob, augmented by a beat division parameter. + The input as well as the delayed signals are processed by a + collection of resonant filters, with frequency and cutoff modulated + in sync to the current tempo. +

+

+ All sample rates. +

+
    +
  • bpm

    + beats per minute.

  • +
  • divider

    + controls whether the groove is ternary or binary.

  • +
  • feedback

    + controls the length of the delay tail.

  • +
  • dry

    + the amount of dry signal mixed to the outputs.

  • +
  • blend

    + the amount of wet signal mixed to the outputs.

  • +
+ + + +

Generators

+ +

VCOs

+ +

+ An oscillator capable of producing the standard + triangle, sawtooth and square waveforms of analog fame, + and almost any conceivable blend + thereof. 8x oversampled, thus needs a lot of cycles. Sorry about that, + but you don't get the flexibility and fat sound for free. +

+

+ About the morphing controls: +

+
    +
  • For a triangle wave, set both tri .. saw and + ~ .. square to 0 (this is the default setting).
  • +
  • To morph into a sawtooth, pull up tri .. saw.
  • +
  • For a square wave instead, pull up ~ .. square. When + the value reaches 1, tri .. saw fully controls the pulse + width.
  • +
+

+ For a more intuitive approach, thinking of both controls + in terms of 'dull .. sharp' for a start + can't hurt. +

+

+ All sample rates. +

+
    +
  • f

    + the frequency.

  • +
  • tri .. saw

    + controls the morph between triangle and sawtooth, and the pulse + width of square oscillation.

  • +
  • ~ .. square

    + controls the morph between triangle/sawtooth and square wave.

  • +
  • volume
  • +
+ +

VCOd

+ +

+ A combination of two VCOs units. + The second oscillator + offers a separate tuning knob. It can also be made + to 'hard sync' + to the first unit, which means that when the first has completed + a wave cycle, the second is forced to restart its wave cycle + together with the first. +

+

+ All sample rates. +

+
    +
  • f

    + the frequency.

  • +
  • 1: tri .. saw
  • +
  • 1: ~ .. square

    + waveform morph controls for the first oscillator.

  • +
  • 2: tri .. saw
  • +
  • 2: ~ .. square

    + waveform morph controls for the second oscillator.

  • +
  • 2: tune

    + controls the interval between the two oscillator frequencies, in + units of (fractional) semitones.

  • +
  • sync

    + if non-zero, puts the second oscillator into 'hard sync' mode, and + determines the forced-restart offset into its wave cycle.

  • +
  • blend

    + controls how the waveforms from the two oscillators are mixed. + A value of 0 means only oscillator one is heard, a value of either + 1 or -1 tilts the balance fully towards oscillator two. The sign + of the blend value determines if the signals are added or + subtracted.

  • +
  • volume
  • +
+ +

CEO

+ +

+ The Chief Executive Oscillator forever repeats the word 'money'. +

+

+ 44.1 kHz. +

+
    +
  • mpm

    + moneys per minute.

  • +
  • volume
  • +
  • damping

    + moderates the CEO.

  • +
+ +

Sin

+ +

+ The old friend, indispensable for testing and tuning. +

+

+ All sample rates. +

+
    +
  • f

    + the frequency.

  • +
  • volume
  • +
+ +

White

+ +

+ White noise (actually slightly pinkish, sorry). +

+

+ All sample rates. +

+
    +
  • volume
  • +
+ +

Lorenz

+ +

+ A Lorenz attractor is a fractal system. It produces a very + own character of noisz that will hardly repeat in the course of your + lifetime. +

+

+ Sound varies with sample rate. +

+
    +
  • h

    + controls the step size of the state progression, and, indirectly, the + perceived frequency of the sound.

  • +
  • x
  • +
  • y
  • +
  • z

    + control how the signal is mixed from the state of the attractor.

  • +
  • volume
  • +
+

+ For more information on the + Lorenz and Roessler attractors, visit + Paul Bourke's resourceful site. +

+ +

Roessler

+ +

+ Another fractal system. This one lends itself + particularly well to sweeping the 'h' parameter. +

+

+ Sound varies with sample rate. +

+
    +
  • h

    + controls the step size of the state progression.

  • +
  • x
  • +
  • y
  • +
  • z

    + control how the signal is mixed from the state of the attractor.

  • +
  • volume
  • +
+

+ For more information on the + Lorenz and Roessler attractors, visit + Paul Bourke's resourceful site. +

+ +

Reverb

+ +

JVRev

+ +

+ A traditional Chowning/Moorer/Schroeder reverb. It sounds quite good + for a reverberation unit with such a comparatively small footprint + (I still remember the times when your average personal computer wasn't + even capable of computing this in realtime). A quite + straight-forward rewrite of a unit found in + CCRMA's + STK (Synthesis Toolkit), + with minor tweaks. +

+

+ All sample rates. +

+
    +
  • t60 (s)

    + controls the time until the reverb tail is supposed to fade + to -60 dB.

  • +
  • blend

    + controls dry/wet mixing ratio.

  • +
+ +

Plate

+ +

+ A reverberation unit based on the design discussed + in [1]. + Unlike the reference, the unit employs cubic instead of + allpass interpolation to modulate the reverb 'tank' delay lines. +

+

+ All sample rates. +

+
    +
  • bandwidth

    + controls damping of the input signal before it enters the + delay circuits.

  • +
  • tail

    + controls the length of the reverb tail.

  • +
  • damping

    + controls attenuation of high frequency components within the reverb 'tank' + (decay stage).

  • +
  • blend

    + dry/wet mixing ratio (default should be 1/8, not 1/4).

  • +
+ +

Plate2x2

+ +

+ By popular demand, a stereo-in, stereo-out version of the + Plate reverb unit. Same controls, same sound. +

+

+ All sample rates. +

+ +

Others

+ +

Click

+ +

+ A sample-accurate metronome. Timing is exact at any sample rate, but + the pitch of the click (being a recorded sample) will vary. (The click + also lends well for testing reverb plugins.) +

+

+ 44.1 kHz. +

+
    +
  • bpm

    + beats per minute.

  • +
  • volume
  • +
  • damping

    + controls the softness of the click sound.

  • +
+ +

Dirac

+ +

+ This plugin produces periodic impulses of exactly one sample width + (as long as the 'damping' control is left at the default 0 setting). + It's probably only useful for testing and basic impulse response + retrieval; don't use this plugin if you don't know what you're doing, + your amplification hardware and speakers will thank you. + The 'volume' control defaults to silent output to spare you nasty + surprises. +

+

+ All sample rates. +

+
    +
  • ppm

    + pulses per minute.

  • +
  • volume
  • +
  • damping
  • +
+ +

HRTF

+ +

+ Applying the head-related transfer function to a signal makes it appear + to come from a specific direction in space. This plugin applies the + HRTF with custom-shaped IIR filters. + Tell me how it works for you (you should + have pretty good headphones to get the full effect). +

+

+ The HRTF impulse response data has been collected and prepared + by MIT's Media Lab. +

+

+ This unit only utilizes the 0-elevation set (sound source is level + with the listener). +

+

+ 44.1 kHz. +

+
    +
  • pan

    + The position, in integer steps. Some noteworthy settings: +

      +
    • + 0 = in front
    • +
    • +18 = left,
    • +
    • -18 = right, and
    • +
    • -36 = +36 = behind the listener.
    • +
    +
  • +
+ +  
+ +

Appendix

+ +

Plugin Data Sheets

+ +

+ The CAPS data sheets collect the following information from + the plugins: +

+
    +
  • the plugin ID
  • +
  • normalized sample output from the plugin + with default parameter settings + (in the filter case, this is an impulse response)
  • +
  • a frequency magnitude plot for the sample output
  • +
  • estimated CPU usage on my box (usually wildly inaccurate)
  • +
  • latency information if applicable
  • +
  • audio routing information
  • +
  • the control inputs on the plugin
  • +
+

+ You can fetch the data sheet compilation + here, it is caps-0.4.5.pdf (287 kB). +

+ +

Changelog

+ +
+0.4.5
+  * Narrower plugin added
+  * fixed 'configure.py' to work with python3
+  * fixed Sin, Roessler and Lorenz gain smoothing on activation
+
+0.4.4
+  
+0.4.3
+  * basics.h cleanup / comments
+  * minor Makefile cleanup
+  * comment cosmetics
+  * Eq and Eq2x2 per-band Q changed to 1.414 (= 1 octave)
+  * Eq lowest band default value fixed to read 0
+  * Niclas' fix for the bessel function implemented
+  * uninitialised plugin states eliminated thanks to Damon
+  * linker options for OSX added to the Makefile
+
+0.4.2
+  * fixed the 'model' port index for AmpVTS in the RDF generator
+
+0.4.1
+  * cleaned up Eq.h and Eq.cc (many g++ versions choke on the unused code
+    there)
+  * changed -O3 to -O2 in the g++ invocation
+
+0.4.0
+  * ToneStack plugins, by David Yeh
+  * AmpV + Tone stack plugin, employing David Yeh's fine work
+  * comment cosmetics
+  * Amp* denormal protection fixed (or is it, Dave? ;)
+  * minor code cleanup in Amp.cc
+  * caps.rdf updated with plugin categories (thanks to Paul Winkler)
+  * caps.rdf Cabinet* RDF preset labels renamed
+  * AutoWah plugin
+  * DSP::RMS reworked, may affect Compress plugin
+  * DSP::Eq reworked for double precision and denormal protection
+  * ./configure.py checks SSE availability
+  * in case of SSE math denormal flush to zero activated for all plugins
+  * all plugins renamed C* .. instead of CAPS: ..
+  * Eq modified to play nice with ardour 
+  * Eq2x2
+  * introduced the Plugin base class, collecting common traits (normal etc)
+  * getport() -- read access to control ports which is clamped to port bounds
+    and maps inf and nan to 0 as well
+  * all LADSPA_HINT_SAMPLE_RATE ports changed to *_LOGARITHMIC because
+    of broken implementations (no surprise given the vagueness of ladspa.h
+    regarding this matter) -- this means changed default parameters of the 
+    affected ports, too
+  * VCO* "latency" output ports removed
+  * actual activate() call is deferred to first run() after activate() 
+    in order to prevent inadvertent parameter smoothing sweeps during the first 
+    block  of audio after activation, this should fix all problems with ardour
+    (except those caused by denormals or invalid audio input)
+  * caps.rdf installed by 'make install'
+  * fixed a bug in tools/make-ps.py that caused the spectrum plots to 
+    be inaccurate for multi-channel plugins
+
+0.3.0
+  * TwelveAX7_3 changed to clip slightly early in the upper lobe
+  * Scape plugin added
+  * plugin names rewritten, prefixed with "CAPS:"
+  * new ChorusII, StereoChorusII plugins
+  * Chorus, StereoChorus relabeled, appended 'I' suffix
+  * new PhaserII plugin (great stuff if I may say so)
+  * Phaser relabeled, appended 'I' suffix
+  * new AmpV plugin, based on AmpIII, emulates compression and distortion
+    modulation through power supply shortcomings, plus lots of fine-tuning
+    and an additional biquad. We're getting there!
+  * all Preamp and Amp models fitted with a new 12AX7 model, linear
+    interpolation of a sample table obtained from spice simulation
+
+0.2.4
+  * feedback default reverted to 0 for the Chorus units
+  * fixed Cabinet to switch to correct gain at 'model' control change
+  * fixed 'model' control in Cabinet to work with a broader range of hosts
+  * Cabinet name changed to CabinetI
+  * CabinetII plugin: Cabinet with 32nd order IIR filters, more fidelity
+    to the original frequency responses, supplied coefficients for 4 of the
+    most used sample rates
+  * applied the gcc-4 enabling patch
+  * SweepVF renamed to SweepVFI
+  * new SweepVFII plugin, variant of SweepVFI with Q modulated by a 
+    second Lorenz fractal
+  * dsp/exp2 dumped in favour of libm's exp2(3)
+
+0.2.3
+  * StereoChorus denormal protection made functional 
+    (Thanks again to S. Savolainen)
+  * Phaser denormal protected
+  
+0.2.2
+  * Build was _not_ fixed for g++-4.0.
+  * AmpIV gain control restored to operate as expected
+  * Chorus/StereoChorus denormal protection (thanks to S. Savolainen)
+  * a few cosmetic changes elsewhere
+  
+0.2.1
+  * Build fixed for g++-4.0, PPC and AMD64 
+    (Thanks to Niklas Werner, Andreas Jochens and Mario Lang)
+  * Reverb.* cosmetics
+  * AmpIV tone controls moved to after initial tube transfer
+
+0.2.0
+  * denormal protection for Preamp*, Amp*
+  * Capitalized plugin Names
+  * PDF now lists audio in- and outputs as well as control inputs, only
+    gives average CPU rating
+  * AmpIV: PreampIV + power amp stage
+  * Plate2x2: Plate with 2-in, 2-out audio routing
+  * Plate damping and bandwidth controls changed to map to filter fc, fixes
+    behaviour in hosts that handle the log hint incorrectly
+
+0.1.13
+  * AmpIII activate() resets the boost filter
+
+0.1.12
+  * PreampIV band controls fixed to operate as expected
+
+0.1.11
+  * amps changed back to old tube model :) but new temp & gain behaviour stays
+  * SweepVF, AmpIII default value adjustments
+
+0.1.10
+  * HRTF recursion runs in doubles
+  * Cabinet recursion runs in doubles for much clearer sound
+  * all amps fitted with a common tube voltage mapping, dsp/TwelveAX7.h
+  * all amps: temperature and gain controls changed slightly
+  * all amps declared in one common Amp.h
+  * Pan echo fixed to be filtered independent of sample rate
+  * Cabinet cosmetics and activate() from port values fix
+  * SweepVF fixed to activate() from the current control settings
+  * rid all *amp* plugins of the initial hi-pass, not needed anymore
+  * PreampIII and AmpIII more authentic with an rbj lo-shelve, +6 dB > 1.2 kHz
+    as hinted by circuit analysis
+  * something_random() removed, stdlib for random generation
+
+0.1.9
+  * Pan plugin
+  * 'make depend' instead of 'make dep', uses $(CC) -MM instead of 'makedepend'
+  * *Chorus, AmpIII, Plate defaults changed
+  * *Chorus optimizations, reintroduces funny zipper noise when 'feedback' is
+    non-zero and 't' is changed
+  * experimental HRTF plugin
+  * Plate 'blend' goes all the way to wet output only
+  * dsp/White offers a get_31() method for reduced number of bitshifts needed
+  * *Chorus delay line tapping changed to employ cubic interpolation, sounds
+    better
+  * SweepVF modulation mix algorithm changed to clamp if over-fed, makes
+    for wider sweeps
+  
+0.1.8
+  * all oversampling plugins use Kaiser windows instead of Blackman-Harris,
+    for much better performance
+  * SweepVF modulation range slightly increased
+  * Cabinet filter loop cosmetics (slight speedup)
+  * new AmpIII Plugin: Preamp plus power amp emulation
+  * lowered NOISE_FLOOR (equals 'renormal' number)
+  
+0.1.7
+  * connect ports to lower bound on instantiate()
+  * Plate delay line lengths raised, sound changed
+  * Eq activate() fixed to initialize from the current settings
+  * Preamp* cutoff reverted to 0.1.3 setting, thanks to Ben Saylor for
+    testing
+  * old IIR-based Preamp cleaned from the sources
+  * zipper-noise in *Chorus units for t changes with feedback > 0 eliminated
+  * all plugin constructor code moved to init() calls
+
+0.1.6
+  * SweepVF modulation mix algorithm changed to maintain proportion, not
+    absolute value if x + y + z > 1, for better control
+  * create $(DEST) directory on make install, pointed out by Daniel James
+
+0.1.5
+  * fixed delay line length miscalculation in ModLattice
+
+0.1.4
+  * SweepVF modulation source can be mixed now
+  * latency port for VCO*
+  * Lorenz and Roessler get x, y, z mixing knobs
+  * PreampIV eq bands slightly tuned and coefficients moved into common struct
+  * Preamp*, VCO* downsampler filter cutoff lowered
+  * Clip downsampler filter cutoff lowered 
+  * nonsensical audio output bounds removed
+  * simplified VCO* implementation
+  * JVRev rewritten for code clarity (funny enough, it also got quicker)
+  * fixed JVRev to reset its history on activate()
+  * added purpose, copyright and licensing information to all (i think) files.
+  * HACKING file
+  * CHANGES file
+  
+0.1.3
+  * fixed all compilation problems with gcc 3.3, with the patient help
+    of the lad mailing list community
+  * dsp/Eq.h SSE assembler code had to go (gcc > 3 doesn't like multi-line 
+    asm, and efficiency and even reliability go down if we allow gcc to 
+    intersperse its 'optimization' code with our asm)
+  
+0.1.2
+  * fixed more compilation problems with gcc >= 3.0
+  
+0.1.1
+  * tried to (but didn't really) fix compilation problem with ladspa.h
+  
+0.1.0
+  * initial release
+	
+ + + +
+  
+ +
+ tim@quitte.de, March 26 2011. +
+ + diff --git a/plugins/LadspaEffect/caps/caps.rdf b/plugins/LadspaEffect/caps/caps.rdf new file mode 100644 index 000000000..dbcfcc566 --- /dev/null +++ b/plugins/LadspaEffect/caps/caps.rdf @@ -0,0 +1,447 @@ + + + + + + + ] +> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/LadspaEffect/caps/configure.py b/plugins/LadspaEffect/caps/configure.py new file mode 100755 index 000000000..227a1328f --- /dev/null +++ b/plugins/LadspaEffect/caps/configure.py @@ -0,0 +1,30 @@ +#! /usr/bin/env python +import os + +CFLAGS = [] +OSX_LDFLAGS = "-bundle -undefined suppress -flat_namespace" + +def we_have_sse(): + try: return 'sse' in open ('/proc/cpuinfo').read().split() + except: return 0 +def we_have_ssse3(): + try: return 'ssse3' in open ('/proc/cpuinfo').read().split() + except: return 0 + +def we_think_so_different_dude(): + try: return 'Darwin' == os.popen ('uname -s').read().strip() + except: return 0 + +def store(): + f = open ('defines.make', 'w') + f.write ("_CFLAGS=" + ' '.join (CFLAGS) + "\n") + if we_think_so_different_dude(): + f.write ("_LDFLAGS=" + OSX_LDFLAGS + "\n") + f.write ("STRIP = echo\n") + +if __name__ == '__main__': + if we_have_sse(): + CFLAGS += ('-msse', '-mfpmath=sse') + if we_have_ssse3(): + CFLAGS += ('-msse3',) + store() diff --git a/plugins/LadspaEffect/caps/dsp/BiQuad.h b/plugins/LadspaEffect/caps/dsp/BiQuad.h new file mode 100644 index 000000000..c56272022 --- /dev/null +++ b/plugins/LadspaEffect/caps/dsp/BiQuad.h @@ -0,0 +1,165 @@ +/* + dsp/BiQuad.h + + Copyright 2003-7 Tim Goetze + + http://quitte.de/dsp/ + + Bi-quad IIR filter. + +*/ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA or point your web browser to http://www.gnu.org. +*/ + +#ifndef _DSP_BI_QUAD_H_ +#define _DSP_BI_QUAD_H_ + +namespace DSP { + +class BiQuad +{ + public: + /* coefficients */ + sample_t a[3], b[3]; + + /* history */ + int h; + sample_t x[2], y[2]; + + BiQuad() + { + unity(); + reset(); + } + + void unity() + { + a[0] = 1; + a[1] = a[2] = b[0] = b[1] = b[2] = 0; + } + + void copy (BiQuad & bq) + { + for (int i = 0; i < 3; ++i) + a[i] = bq.a[i], + b[i] = bq.b[i]; + } + + void reset() + { + h = 0; + + x[0] = x[1] = + y[0] = y[1] = 0.; + } + + /* denormal zapping */ + void flush_0() + { + for (int i = 0; i < 2; ++i) + if (is_denormal (y[i])) + y[i] = 0; + } + + inline sample_t process (sample_t s) + { + register int z = h; + + register sample_t r = s * a[0]; + + r += a[1] * x[z]; + r += b[1] * y[z]; + + z ^= 1; + r += a[2] * x[z]; + r += b[2] * y[z]; + + y[z] = r; + x[z] = s; + + h = z; + + return r; + } + + /* Following are additional methods for using the biquad to filter an + * upsampled signal with 0 padding -- some terms reduce to 0 in this + * case */ + inline sample_t process_0_1() + { + register int z = h; + + register sample_t r = 0; + + r += a[1] * x[z]; + r += b[1] * y[z]; + + z ^= 1; + r += a[2] * x[z]; + r += b[2] * y[z]; + + y[z] = r; + x[z] = 0; + + h = z; + + return r; + } + + inline sample_t process_0_2() + { + register int z = h; + + register sample_t r = 0; + + r += b[1] * y[z]; + + z ^= 1; + r += a[2] * x[z]; + r += b[2] * y[z]; + + y[z] = r; + x[z] = 0; + + h = z; + + return r; + } + + inline sample_t process_0_3() + { + register int z = h; + + register sample_t r = 0; + + r += b[1] * y[z]; + + z ^= 1; + r += b[2] * y[z]; + + y[z] = r; + x[z] = 0; + + h = z; + + return r; + } +}; + +} /* namespace DSP */ + +#endif /* _DSP_BI_QUAD_H_ */ diff --git a/plugins/LadspaEffect/caps/dsp/Delay.h b/plugins/LadspaEffect/caps/dsp/Delay.h new file mode 100644 index 000000000..a9aa517ec --- /dev/null +++ b/plugins/LadspaEffect/caps/dsp/Delay.h @@ -0,0 +1,171 @@ +/* + dsp/Delay.h + + Copyright 2003-4, 2010 Tim Goetze + + http://quitte.de/dsp/ + + delay lines with fractional (linear or cubic interpolation) lookup + and an allpass interpolating tap (which needs more work). + + delay line storage is aligned to powers of two for simplified wrapping + checks (no conditional or modulo, binary and suffices instead). + +*/ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA or point your web browser to http://www.gnu.org. +*/ + +#ifndef _DSP_DELAY_H_ +#define _DSP_DELAY_H_ + +#include "util.h" +#include "FPTruncateMode.h" + +namespace DSP { + +class Delay +{ + public: + int size; + sample_t * data; + int read, write; + + Delay() + { + read = write = 0; + data = 0; + } + + ~Delay() + { + if (data) free (data); + } + + void init (int n) + { + size = next_power_of_2 (n); + data = (sample_t *) calloc (sizeof (sample_t), size); + size -= 1; + write = n; + } + + void reset() + { + memset (data, 0, (size + 1) * sizeof (sample_t)); + } + + sample_t & + operator [] (int i) + { + return data [(write - i) & size]; + } + + inline void + put (sample_t x) + { + data [write] = x; + write = (write + 1) & size; + } + + inline sample_t + get() + { + sample_t x = data [read]; + read = (read + 1) & size; + return x; + } + + inline sample_t + putget (sample_t x) + { + put (x); + return get(); + } + + /* fractional lookup, linear interpolation */ + inline sample_t + get_at (float f) + { + int n; + fistp (f, n); /* read: i = (int) f; relies on FPTruncateMode */ + f -= n; + + return (1 - f) * (*this) [n] + f * (*this) [n + 1]; + } + + /* fractional lookup, cubic interpolation */ + inline sample_t + get_cubic (float f) + { + int n; + fistp (f, n); /* see FPTruncateMode */ + f -= n; + + sample_t x_1 = (*this) [n - 1]; + sample_t x0 = (*this) [n]; + sample_t x1 = (*this) [n + 1]; + sample_t x2 = (*this) [n + 2]; + + /* sample_t (32bit) quicker than double here */ + register sample_t a = + (3 * (x0 - x1) - x_1 + x2) * .5; + register sample_t b = + 2 * x1 + x_1 - (5 * x0 + x2) * .5; + register sample_t c = + (x1 - x_1) * .5; + + return x0 + (((a * f) + b) * f + c) * f; + } +}; + +/* allpass variant */ + +class DelayTapA +{ + public: + sample_t x1, y1; + + DelayTapA() + { + reset(); + } + + void reset() + { + x1 = y1 = 0; + } + + sample_t get (Delay & d, float f) + { + int n; + fistp (f, n); /* read: n = (int) f; relies on FPTruncateMode */ + f -= n; + if (0 && f < .5) + f += 1, + n -= 1; + + sample_t x = d[n]; + f = (1 - f) / (1 + f); + y1 = x1 + f * x - f * y1; + x1 = x; + return y1; + } +}; + +}; /* namespace DSP */ + +#endif /* _DSP_DELAY_H_ */ diff --git a/plugins/LadspaEffect/caps/dsp/Eq.h b/plugins/LadspaEffect/caps/dsp/Eq.h new file mode 100644 index 000000000..92639e8a1 --- /dev/null +++ b/plugins/LadspaEffect/caps/dsp/Eq.h @@ -0,0 +1,158 @@ +/* + Eq.h + + Copyright 2004-7 Tim Goetze + + http://quitte.de/dsp/ + + Equalizer circuit using recursive filtering. + Based on a motorola paper implementing a similar circuit on a DSP56001. + +*/ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA or point your web browser to http://www.gnu.org. +*/ + +#ifndef _DSP_EQ_H_ +#define _DSP_EQ_H_ + +namespace DSP { + +/* A single bandpass as used by the Eq, expressed as a biquad. Like all + * band-pass filters I know of, the filter works with a FIR coefficient of 0 + * for x[-1], so a generic biquad isn't the optimum implementation. + * + * This routine isn't used anywhere, just here for testing purposes. + */ +template +void +_BP (double fc, double Q, T * ca, T * cb) +{ + double theta = 2 * fc * M_PI; + + double + b = (Q - theta * .5) / (2 * Q + theta), + a = (.5 - b) / 2, + c = (.5 + b) * cos (theta); + + ca[0] = 2 * a; + ca[1] = 0; + ca[2] = -2 * a; + + cb[0] = 0; + cb[1] = 2 * c; + cb[2] = -2 * b; +} + +template +class Eq +{ + public: + /* recursion coefficients, 3 per band */ + eq_sample __attribute__ ((aligned)) a[Bands], b[Bands], c[Bands]; + /* past outputs, 2 per band */ + eq_sample __attribute__ ((aligned)) y[2][Bands]; + /* current gain and recursion factor, each 1 per band = 2 */ + eq_sample __attribute__ ((aligned)) gain[Bands], gf[Bands]; + /* input history */ + eq_sample x[2]; + /* history index */ + int h; + + eq_sample normal; + + Eq() + { + h = 0; + normal = NOISE_FLOOR; + } + + void reset() + { + for (int z = 0; z < 2; ++z) + { + memset( y[z], 0, Bands*sizeof( eq_sample ) ); + x[z] = 0; + } + } + + void init (double fs, double Q) + { + double f = 31.25; + int i = 0; + + for (i = 0; i < Bands && f < fs / 2; ++i, f *= 2) + init_band (i, 2 * f * M_PI / fs, Q); + /* just in case, zero the remaining coefficients */ + for ( ; i < Bands; ++i) + zero_band (i); + + reset(); + } + + void init_band (int i, double theta, double Q) + { + b[i] = (Q - theta * .5) / (2 * Q + theta); + a[i] = (.5 - b[i]) / 2; + c[i] = (.5 + b[i]) * cos (theta); + /* fprintf (stderr, "%02d %f %f %f\n", i, a[i], b[i], c[i]); */ + gain[i] = 1; + gf[i] = 1; + } + + void zero_band (int i) + { + a[i] = b[i] = c[i] = 0; + } + + /* per-band recursion: + * y = 2 * (a * (x - x[-2]) + c * y[-1] - b * y[-2]) + */ + eq_sample process (eq_sample s) + { + int z1 = h, z2 = h ^ 1; + + eq_sample * y1 = y[z1]; + eq_sample * y2 = y[z2]; + + eq_sample x_x2 = s - x[z2]; + eq_sample r = 0; + + for (int i = 0; i < Bands; ++i) + { + y2[i] = normal + 2 * (a[i] * x_x2 + c[i] * y1[i] - b[i] * y2[i]); + r += gain[i] * y2[i]; + gain[i] *= gf[i]; + } + + x[z2] = s; + h = z2; + + return r; + } + + /* zap denormals in history */ + void flush_0() + { + for (int i = 0; i < Bands; ++i) + if (is_denormal (y[0][i])) + y[0][i] = 0; + } +}; + +} /* namespace DSP */ + +#endif /* _DSP_EQ_H_ */ diff --git a/plugins/LadspaEffect/caps/dsp/FIR.h b/plugins/LadspaEffect/caps/dsp/FIR.h new file mode 100644 index 000000000..8cb69ef0f --- /dev/null +++ b/plugins/LadspaEffect/caps/dsp/FIR.h @@ -0,0 +1,252 @@ +/* + dsp/FIR.h + + Copyright 2003-10 Tim Goetze + + http://quitte.de/dsp/ + + finite impulse response filters, with options for up- and down-sampling. + +*/ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA or point your web browser to http://www.gnu.org. +*/ + +#ifndef _FIR_H_ +#define _FIR_H_ + +#include "util.h" + +namespace DSP { + +/* brute-force FIR filter with downsampling method (decimating). + * + * CAVEAT: constructing it from another FIR makes the filter share the other's + * kernel data set. IOW, the other FIR must be valid throughout the lifetime + * of this instance. + */ +class FIR +{ + public: + /* kernel length, history length - 1 */ + int n, m; + + /* coefficients, history */ + sample_t * c, * x; + bool borrowed_kernel; + + /* history index */ + int h; + + FIR (int N) + { + c = 0; + init (N); + } + + FIR (FIR & fir) + { + c = fir.c; + init (fir.n); + } + + FIR (int n, sample_t * kernel) + { + c = 0; + init (n); + memcpy (c, kernel, n * sizeof (*c)); + } + + ~FIR() + { + if (!borrowed_kernel) + free (c); + free (x); + } + + void init (int N) + { + n = N; + + /* keeping history size a power of 2 makes it possible to wrap the + * history pointer by & instead of %, saving a few cpu cycles. */ + m = next_power_of_2 (n); + + if (c) + borrowed_kernel = true; + else + borrowed_kernel = false, + c = (sample_t *) malloc (n * sizeof (sample_t)); + + x = (sample_t *) malloc (m * sizeof (sample_t)); + + m -= 1; + + reset(); + } + + void reset() + { + h = 0; + memset (x, 0, n * sizeof (sample_t)); + } + + /* TODO: write an SSE-enabled version */ + inline sample_t process (sample_t s) + { + x[h] = s; + + s *= c[0]; + + for (int Z = 1, z = h - 1; Z < n; --z, ++Z) + s += c[Z] * x[z & m]; + + h = (h + 1) & m; + + return s; + } + + /* Z is the time, in samples, since the last non-zero sample. + * OVER is the oversampling factor. just here for documentation, use + * a FIRUpsampler instead. + */ + template + inline sample_t upsample (sample_t s) + { + x[h] = s; + + s = 0; + + /* for the interpolation, iterate over the history in z ^ -OVER + * steps -- all the samples between are 0. + */ + for (int j = Z, z = h - Z; j < n; --z, j += OVER) + s += c[j] * x[z & m]; + + h = (h + 1) & m; + + return s; + } + + /* used in downsampling */ + inline void store (sample_t s) + { + x[h] = s; + h = (h + 1) & m; + } +}; + +/* close relative of FIR, but distinct enough to not justify inheritance. + * + * the difference to the FIR is the shorter history length. don't need + * to clutter the d-cache with interleaved 0s. + * + * however, an initial test shows this to be a fraction *slower* than a + * complete FIR for N = 32, OVER = 4. + */ +class FIRUpsampler +{ + public: + /* kernel length, history length - 1 */ + int n, m; + + /* oversampling ratio */ + int over; + + /* coefficients, history */ + sample_t * c, * x; + + /* history index */ + int h; + + FIRUpsampler (int _n, int _over) + { + c = x = 0; + init (_n, _over); + } + + FIRUpsampler (FIR & fir, int _over) + { + c = x = 0; + init (fir.n, _over); + memcpy (c, fir.c, n * sizeof (sample_t)); + } + + ~FIRUpsampler() + { + if (c) free (c); + if (x) free (x); + } + + void init (int _n, int _over) + { + /* oversampling ratio must be multiple of FIR kernel length */ + // assert (_n % _over == 0); + + n = _n; + over = _over; + + /* like FIR, keep the history buffer a power of 2; additionally, + * compress and don't store the 0 samples inbetween. + */ + m = next_power_of_2 ((n + over - 1) / over); + + c = (sample_t *) malloc (n * sizeof (sample_t)); + x = (sample_t *) malloc (m * sizeof (sample_t)); + + m -= 1; + + reset(); + } + + void reset() + { + h = 0; + memset (x, 0, (m + 1) * sizeof (sample_t)); + } + + /* upsample the given sample */ + inline sample_t upsample (sample_t s) + { + x[h] = s; + + s = 0; + + for (int Z = 0, z = h; Z < n; --z, Z += over) + s += c[Z] * x[z & m]; + + h = (h + 1) & m; + + return s; + } + + /* upsample a zero sample (interleaving), Z being the time, in samples, + * since the last non-0 sample. */ + inline sample_t pad (int Z) + { + sample_t s = 0; + + for (int z = h - 1; Z < n; --z, Z += over) + s += c[Z] * x[z & m]; + + return s; + } + +}; + +}; /* namespace DSP */ + +#endif /* _FIR_H_ */ diff --git a/plugins/LadspaEffect/caps/dsp/FPTruncateMode.h b/plugins/LadspaEffect/caps/dsp/FPTruncateMode.h new file mode 100644 index 000000000..354d062be --- /dev/null +++ b/plugins/LadspaEffect/caps/dsp/FPTruncateMode.h @@ -0,0 +1,56 @@ +/* Copyright 2001-4 tim goetze -- see 'COPYING'. */ + +/* Sets the FP rounding mode to 'truncate' in the constructor + * and loads the previous FP conrol word in the destructor. + * + * By directly using the machine instruction to convert float to int + * we avoid the performance hit that loading the control word twice for + * every (int) cast causes on i386. + * + * On other architectures this is a no-op. + */ + +#ifndef _DSP_FP_TRUNCATE_MODE_H_ +#define _DSP_FP_TRUNCATE_MODE_H_ + +#ifdef __i386__ + #define fstcw(i) \ + __asm__ __volatile__ ("fstcw %0" : "=m" (i)) + + #define fldcw(i) \ + __asm__ __volatile__ ("fldcw %0" : : "m" (i)) + + /* gcc chokes on __volatile__ sometimes. */ + #define fistp(f,i) \ + __asm__ ("fistpl %0" : "=m" (i) : "t" (f) : "st") +#else /* ! __i386__ */ + #define fstcw(i) + #define fldcw(i) + + #define fistp(f,i) \ + i = (int) f +#endif + +namespace DSP { + +class FPTruncateMode +{ + public: + int cw0, cw1; /* fp control word */ + + FPTruncateMode() + { + fstcw (cw0); + cw1 = cw0 | 0xC00; + fldcw (cw1); + } + + ~FPTruncateMode() + { + fldcw (cw0); + } +}; + +} /* namespace DSP */ + +#endif /* _DSP_FP_TRUNCATE_MODE_H_ */ diff --git a/plugins/LadspaEffect/caps/dsp/LatFilt.h b/plugins/LadspaEffect/caps/dsp/LatFilt.h new file mode 100644 index 000000000..0ba4d0999 --- /dev/null +++ b/plugins/LadspaEffect/caps/dsp/LatFilt.h @@ -0,0 +1,102 @@ +/* + LatFilt.h + + Copyright 2006 David Yeh + + Lattice digital filter. + Assumes order of b = order of a. + Assumes a0 = 1. + +*/ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA or point your web browser to http://www.gnu.org. +*/ + +#ifndef _DSP_LatFilt_H_ +#define _DSP_LatFilt_H_ + +namespace DSP { + +// ORDER is the highest power of s in the transfer function +template +class LatFilt +{ + public: + double vcoef[ORDER+1]; + double kcoef[ORDER]; + double state[ORDER]; + double y; + + // fade factors + double vf[ORDER+1]; + double kf[ORDER]; + + + void reset() + { + for (int i = 0; i < ORDER; i++) { + state[i] = 0; // zero state + vf[i] = 1; // reset fade factor + kf[i] = 1; + } + vf[ORDER] = 1; + y = 0; + } + + void init (double fs) + { + reset(); + clearcoefs(); + } + + void clearcoefs() { + for (int i=0; i< ORDER; i++) { + vcoef[i] = 0; + kcoef[i] = 0; + } + vcoef[ORDER] = 0; + } + + sample_t process (sample_t s) { + double tmp; + + int i = ORDER-1; + tmp = -kcoef[i]*state[i] + s; + y = vcoef[i+1]*(state[i] + kcoef[i]*tmp); + + for (i = ORDER-2; i >= 0; i--) { + tmp = -kcoef[i]*state[i] + tmp; + state[i+1] = kcoef[i]*tmp + state[i]; + y = y + vcoef[i+1]*state[i+1]; + } + state[0] = tmp; + y = y + vcoef[0]*tmp; + + return (sample_t) y; + } + + inline void set_vi(double coef, int i) { + vcoef[i] = coef; + } + + inline void set_ki(double coef, int i) { + kcoef[i] = coef; + } +}; + +} /* namespace DSP */ + +#endif /* _DSP_LatFilt_H_ */ diff --git a/plugins/LadspaEffect/caps/dsp/Lorenz.h b/plugins/LadspaEffect/caps/dsp/Lorenz.h new file mode 100644 index 000000000..bb57a7cc3 --- /dev/null +++ b/plugins/LadspaEffect/caps/dsp/Lorenz.h @@ -0,0 +1,108 @@ +/* + dsp/Lorenz.h + + Copyright 2001-4 Tim Goetze + + http://quitte.de/dsp/ + + Lorenz fractal. + +*/ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA or point your web browser to http://www.gnu.org. +*/ + +#ifndef _DSP_LORENZ_H_ +#define _DSP_LORENZ_H_ + +namespace DSP { + +class Lorenz +{ + public: + double x[2], y[2], z[2]; + double h, a, b, c; + int I; + + public: + Lorenz() + { + h = 0.001; + a = 10.0; + b = 28.0; + c = 8.0 / 3.0; + } + + /* rate is normalized (0 .. 1) */ + void set_rate (double r) + { + h = max (.0000001, r * .015); + } + + void init (double _h = .001, double seed = .0) + { + I = 0; + + x[0] = .1 + seed - frandom() * .1; + y[0] = 0; + z[0] = 0; + + /* progress quickly to get a 'stable' system */ + h = .001; + + int n = 10000 + min ((int) (10000 * seed), 10000); + for (int i = 0; i < n; ++i) + step(); + + h = _h; + } + + sample_t get() + { + step(); + return .5 * get_y() + get_z(); + } + + void step() + { + int J = I ^ 1; + + x[J] = x[I] + h * a * (y[I] - x[I]); + y[J] = y[I] + h * (x[I] * (b - z[I]) - y[I]); + z[J] = z[I] + h * (x[I] * y[I] - c * z[I]); + + I = J; + } + + double get_x() + { + return .024 * (x[I] - .172); + } + + double get_y() + { + return .018 * (y[I] - .172); + } + + double get_z() + { + return .019 * (z[I] - 25.43); + } +}; + +} /* namespace DSP */ + +#endif /* _DSP_LORENZ_H_ */ diff --git a/plugins/LadspaEffect/caps/dsp/OnePole.h b/plugins/LadspaEffect/caps/dsp/OnePole.h new file mode 100644 index 000000000..9a3178053 --- /dev/null +++ b/plugins/LadspaEffect/caps/dsp/OnePole.h @@ -0,0 +1,124 @@ +/* + dsp/OnePole.h + + Copyright 2003-7 Tim Goetze + + http://quitte.de/dsp/ + + one pole (or one zero, or one zero, one pole) hi- and lo-pass filters. + +*/ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA or point your web browser to http://www.gnu.org. +*/ + +#ifndef _ONE_POLE_H_ +#define _ONE_POLE_H_ + +namespace DSP { + +class OnePoleLP +{ + public: + sample_t a0, b1, y1; + + OnePoleLP (double d = 1.) + { + set (d); + y1 = 0.; + } + + inline void reset() + { + y1 = 0.; + } + + inline void set_f (double fc) + { + set (exp (-2 * M_PI * fc)); + } + + inline void set (double d) + { + a0 = (sample_t) d; + b1 = (sample_t) 1. - d; + } + + inline sample_t process (sample_t x) + { + return y1 = a0 * x + b1 * y1; + } + + inline void decay (double d) + { + a0 *= d; + b1 = 1. - a0; + } + + /* clear denormal numbers in history */ + void flush_0() + { + if (is_denormal (y1)) + y1 = 0; + } +}; + +class OnePoleHP +{ + public: + sample_t a0, a1, b1, x1, y1; + + OnePoleHP (double d = 1.) + { + set (d); + x1 = y1 = 0.; + } + + void set_f (double f) + { + set (exp (-2 * M_PI * f)); + } + + inline void set (double d) + { + a0 = (sample_t) ((1. + d) / 2.); + a1 = (sample_t) ((1. + d) / -2.); + b1 = d; + } + + inline sample_t process (sample_t x) + { + y1 = a0 * x + a1 * x1 + b1 * y1; + x1 = x; + return y1; + } + + void reset() + { + x1 = y1 = 0; + } + + /* clear denormal numbers in history */ + void flush_0() + { + if (is_denormal (y1)) + y1 = 0; + } +}; + +} /* namespace DSP */ + +#endif /* _ONE_POLE_H_ */ diff --git a/plugins/LadspaEffect/caps/dsp/RBJ.h b/plugins/LadspaEffect/caps/dsp/RBJ.h new file mode 100644 index 000000000..0a1db6b39 --- /dev/null +++ b/plugins/LadspaEffect/caps/dsp/RBJ.h @@ -0,0 +1,294 @@ +/* + dsp/RBJ.h + + Copyright + 1998 Robert Bristow-Johnson + 2004-10 Tim Goetze + + biquad prototypes according to the eq cookbook. easy-to-use, nice, + predictable filters. thanks rbj! +*/ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA or point your web browser to http://www.gnu.org. +*/ + +#ifndef _DSP_RBJ_H_ +#define _DSP_RBJ_H_ + +#include "BiQuad.h" + +namespace DSP { +namespace RBJ { + +/* base class, prepares common parameters */ +class RBJ +{ + public: + double Q, alpha, sin, cos; + double a[3], b[3]; + + public: + RBJ (double f, double _Q) + { + Q = _Q; + + double w = 2 * M_PI * f; + + sin = ::sin (w); + cos = ::cos (w); + + alpha = sin / (2 * Q); + } + + /* templated so we can set double and float coefficients from the same + * piece of code */ + template + void make_direct_I (T * ca, T * cb) + { + double a0i = 1 / a[0]; + + ca[0] = b[0] * a0i; + ca[1] = b[1] * a0i; + ca[2] = b[2] * a0i; + + /* our bi-quad implementation /adds/ b[i] * y[i] so we need to + * toggle the sign for the b[] coefficients. + */ + cb[0] = 0; + cb[1] = -a[1] * a0i; + cb[2] = -a[2] * a0i; + } +}; + +/* now the individual prototypes. + * set-up is not optimal, i.e. does a lot of operations twice for readability. + */ +class LP +: public RBJ +{ + public: + LP (double f, double Q, BiQuad & bq) : RBJ (f, Q) + { ab (bq.a, bq.b); } + + template + LP (double f, double Q, T * ca, T * cb) : RBJ (f, Q) + { ab (ca, cb); } + + template + void ab (T * ca, T * cb) + { + b[0] = (1 - cos) * .5; + b[1] = (1 - cos); + b[2] = (1 - cos) * .5; + + a[0] = 1 + alpha; + a[1] = -2 * cos; + a[2] = 1 - alpha; + + make_direct_I (ca, cb); + } +}; + +class BP +: public RBJ +{ + public: + BP (double f, double Q, BiQuad & bq) : RBJ (f, Q) + { ab (bq.a, bq.b); } + + template + BP (double f, double Q, T * ca, T * cb) : RBJ (f, Q) + { ab (ca, cb); } + + template + void ab (T * ca, T * cb) + { + b[0] = Q * alpha; + b[1] = 0; + b[2] = -Q * alpha; + + a[0] = 1 + alpha; + a[1] = -2 * cos; + a[2] = 1 - alpha; + + make_direct_I (ca, cb); + } +}; + +class HP +: public RBJ +{ + public: + HP (double f, double Q, BiQuad & bq) : RBJ (f, Q) + { ab (bq.a, bq.b); } + + template + HP (double f, double Q, T * ca, T * cb) : RBJ (f, Q) + { ab (ca, cb); } + + template + void ab (T * ca, T * cb) + { + b[0] = (1 + cos) * .5; + b[1] = -(1 + cos); + b[2] = (1 + cos) * .5; + + a[0] = 1 + alpha; + a[1] = -2 * cos; + a[2] = 1 - alpha; + + make_direct_I (ca, cb); + } +}; + +class Notch +: public RBJ +{ + public: + Notch (double f, double Q, BiQuad & bq) : RBJ (f, Q) + { ab (bq.a, bq.b); } + + template + Notch (double f, double Q, T * ca, T * cb) : RBJ (f, Q) + { ab (ca, cb); } + + template + void ab (T * ca, T * cb) + { + b[0] = 1; + b[1] = -2 * cos; + b[2] = 1; + + a[0] = 1 + alpha; + a[1] = -2 * cos; + a[2] = 1 - alpha; + + make_direct_I (ca, cb); + } +}; + +/* shelving and peaking dept. ////////////////////////////////////////////// */ + +class PeakShelve +: public RBJ +{ + public: + double A, beta; + + public: + PeakShelve (double f, double Q, double dB) + : RBJ (f, Q) + { + A = pow (10, dB * .025); + double S = Q; /* slope */ + beta = sqrt ((A * A + 1) / S - (A - 1) * (A - 1)); + } +}; + +class LoShelve +: public PeakShelve +{ + public: + LoShelve (double f, double Q, double dB, BiQuad & bq) + : PeakShelve (f, Q, dB) + { ab (bq.a, bq.b); } + + template + LoShelve (double f, double Q, double dB, T * ca, T * cb) + : PeakShelve (f, Q, dB) + { ab (ca, cb); } + + template + void ab (T * ca, T * cb) + { + double Ap1 = A + 1, Am1 = A - 1; + double beta_sin = beta * sin; + + b[0] = A * (Ap1 - Am1 * cos + beta_sin); + b[1] = 2 * A * (Am1 - Ap1 * cos); + b[2] = A * (Ap1 - Am1 * cos - beta_sin); + + a[0] = Ap1 + Am1 * cos + beta_sin; + a[1] = -2 * (Am1 + Ap1 * cos); + a[2] = Ap1 + Am1 * cos - beta_sin; + + make_direct_I (ca, cb); + } +}; + +class PeakingEQ +: public PeakShelve +{ + public: + PeakingEQ (double f, double Q, double dB, BiQuad & bq) + : PeakShelve (f, Q, dB) + { ab (bq.a, bq.b); } + + template + PeakingEQ (double f, double Q, double dB, T * ca, T * cb) + : PeakShelve (f, Q, dB) + { ab (ca, cb); } + + template + void ab (T * ca, T * cb) + { + b[0] = 1 + alpha * A; + b[1] = -2 * cos; + b[2] = 1 - alpha * A; + + a[0] = 1 + alpha / A; + a[1] = -2 * cos; + a[2] = 1 - alpha / A; + + make_direct_I (ca, cb); + } +}; + +class HiShelve +: public PeakShelve +{ + public: + HiShelve (double f, double Q, double dB, BiQuad & bq) + : PeakShelve (f, Q, dB) + { ab (bq.a, bq.b); } + + template + HiShelve (double f, double Q, double dB, T * ca, T * cb) + : PeakShelve (f, Q, dB) + { ab (ca, cb); } + + template + void ab (T * ca, T * cb) + { + double Ap1 = A + 1, Am1 = A - 1; + double beta_sin = beta * sin; + + b[0] = A * (Ap1 + Am1 * cos + beta_sin); + b[1] = -2 * A * (Am1 + Ap1 * cos); + b[2] = A * (Ap1 + Am1 * cos - beta_sin); + + a[0] = Ap1 - Am1 * cos + beta_sin; + a[1] = 2 * (Am1 - Ap1 * cos); + a[2] = Ap1 - Am1 * cos - beta_sin; + + make_direct_I (ca, cb); + } +}; + +} /* ~namespace RBJ */ +} /* ~namespace DSP */ + +#endif /* _DSP_RBJ_H_ */ diff --git a/plugins/LadspaEffect/caps/dsp/RMS.h b/plugins/LadspaEffect/caps/dsp/RMS.h new file mode 100644 index 000000000..3b7806729 --- /dev/null +++ b/plugins/LadspaEffect/caps/dsp/RMS.h @@ -0,0 +1,77 @@ +/* + dsp/RMS.h + + Copyright 2004 Tim Goetze + + http://quitte.de/dsp/ + + root-mean-square accumulator. + +*/ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA or point your web browser to http://www.gnu.org. +*/ + +#ifndef _DSP_RMS_H_ +#define _DSP_RMS_H_ + +namespace DSP { + +class RMS +{ + protected: + sample_t buffer[64]; + int write; + + public: + double sum; + + RMS() + { + write = 0; + reset(); + } + + void reset() + { + sum = 0.; + memset (buffer, 0, sizeof (buffer)); + } + + /* caution: pass in the *squared* sample value */ + void store (sample_t x) + { + sum -= buffer[write]; + sum += (buffer[write] = x); + write = (write + 1) & 63; + } + + sample_t process (sample_t x) + { + store (x); + return rms(); + } + + sample_t rms() + { + /* fabs it before sqrt, just in case ... */ + return sqrt (fabs (sum) / 64); + } +}; + +} /* namespace DSP */ + +#endif /* _DSP_RMS_H_ */ diff --git a/plugins/LadspaEffect/caps/dsp/Roessler.h b/plugins/LadspaEffect/caps/dsp/Roessler.h new file mode 100644 index 000000000..e4ec86303 --- /dev/null +++ b/plugins/LadspaEffect/caps/dsp/Roessler.h @@ -0,0 +1,100 @@ +/* + dsp/Roessler.h + + Copyright 2003-4 Tim Goetze + + http://quitte.de/dsp/ + + Roessler fractal. + +*/ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA or point your web browser to http://www.gnu.org. +*/ + +#ifndef _DSP_ROESSLER_H_ +#define _DSP_ROESSLER_H_ + +namespace DSP { + +class Roessler +{ + public: + double x[2], y[2], z[2]; + double h, a, b, c; + int I; + + public: + Roessler() + { + h = 0.001; + a = .2; + b = .2; + c = 5.7; + } + + /* rate is normalized (0 .. 1) */ + void set_rate (double r) + { + h = max (.000001, r * .096); + } + + void init (double _h = .001, double seed = .0) + { + h = _h; + + I = 0; + + x[0] = .0001 + .0001 * seed; + y[0] = .0001; + z[0] = .0001; + + for (int i = 0; i < 5000; ++i) + get(); + } + + sample_t get() + { + int J = I ^ 1; + + x[J] = x[I] + h * (- y[I] - z[I]); + y[J] = y[I] + h * (x[I] + a * y[I]); + z[J] = z[I] + h * (b + z[I] * (x[I] - c)); + + I = J; + + return x[I] * .01725 + z[I] * .015; + } + + double get_x() + { + return x[I]; + } + + double get_y() + { + return y[I]; + } + + double get_z() + { + return z[I]; + } +}; + +} /* namespace DSP */ + +#endif /* _DSP_ROESSLER_H_ */ diff --git a/plugins/LadspaEffect/caps/dsp/SVF.h b/plugins/LadspaEffect/caps/dsp/SVF.h new file mode 100644 index 000000000..ccd5734ab --- /dev/null +++ b/plugins/LadspaEffect/caps/dsp/SVF.h @@ -0,0 +1,190 @@ +/* + dsp/SVF.h + + Copyright 2002-4 Tim Goetze + + http://quitte.de/dsp/ + + ladder filter in Chamberlin topology. supports largely independent + f and Q adjustments and sweeps. + +*/ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA or point your web browser to http://www.gnu.org. +*/ +/* + inspired by this music-dsp entry: + + State Variable Filter (Double Sampled, Stable) + Type : 2 Pole Low, High, Band, Notch and Peaking + References :Posted by Andrew Simper + + Notes : + Thanks to Laurent de Soras for the stability limit + and Steffan Diedrichsen for the correct notch output. + + Code : + input = input buffer; + output = output buffer; + fs = sampling frequency; + fc = cutoff frequency normally something like: + 440.0*pow(2.0, (midi_note - 69.0)/12.0); + res = resonance 0 to 1; + drive = internal distortion 0 to 0.1 + freq = MIN(0.25, 2.0*sin(PI*fc/(fs*2))); // the fs*2 is because it's double sampled + damp = MIN(2.0*(1.0 - pow(res, 0.25)), MIN(2.0, 2.0/freq - freq*0.5)); + notch = notch output + low = low pass output + high = high pass output + band = band pass output + peak = peaking output = low - high + -- + double sampled svf loop: + for (i=0; i +class SVF +{ + protected: + /* loop parameters */ + sample_t f, q, qnorm; + + /* outputs (peak and notch left out) */ + sample_t lo, band, hi; + sample_t * out; + + public: + /* the type of filtering to do. */ + enum { + Low = 0, + Band = 1, + High = 2 + }; + + SVF() + { + set_out (Low); + set_f_Q (.1, .1); + } + + void reset() + { + hi = band = lo = 0; + } + + void set_f_Q (double fc, double Q) + { + /* this is a very tight limit */ + f = min (.25, 2 * sin (M_PI * fc / OVERSAMPLE)); + + q = 2 * cos (pow (Q, .1) * M_PI * .5); + q = min (q, min (2., 2 / f - f * .5)); + qnorm = sqrt (fabs (q) / 2. + .001); + } + + void set_out (int o) + { + if (o == Low) + out = &lo; + else if (o == Band) + out = &band; + else + out = &hi; + } + + void one_cycle (sample_t * s, int frames) + { + for (int i = 0; i < frames; ++i) + s[i] = process (s[i]); + } + + sample_t process (sample_t x) + { + x = qnorm * x; + + for (int pass = 0; pass < OVERSAMPLE; ++pass) + { + hi = x - lo - q * band; + band += f * hi; + lo += f * band; + + /* zero-padding, not 0th order holding. */ + x = 0; + } + + /* peak and notch outputs don't belong in the loop, put them + * here (best in a template) if needed. */ + + return *out; + } +}; + +template +class StackedSVF +{ + public: + SVF svf [STACKED]; + + void reset() + { + for (int i = 0; i < STACKED; ++i) + svf[i].reset(); + } + + void set_out (int out) + { + for (int i = 0; i < STACKED; ++i) + svf[i].set_out (out); + } + + void set_f_Q (double f, double Q) + { + for (int i = 0; i < STACKED; ++i) + svf[i].set_f_Q (f, Q); + } + + sample_t process (sample_t x) + { + for (int i = 0; i < STACKED; ++i) + x = svf[i].process (x); + + return x; + } +}; + +} /* namespace DSP */ + +#endif /* _DSP_SVF_H_ */ diff --git a/plugins/LadspaEffect/caps/dsp/Sine.h b/plugins/LadspaEffect/caps/dsp/Sine.h new file mode 100644 index 000000000..a54c66161 --- /dev/null +++ b/plugins/LadspaEffect/caps/dsp/Sine.h @@ -0,0 +1,95 @@ +/* + dsp/Sine.h + + Copyright 2003-4 Tim Goetze + + http://quitte.de/dsp/ + + direct form I recursive sin() generator. + +*/ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA or point your web browser to http://www.gnu.org. +*/ + +#ifndef _DSP_SINE_H_ +#define _DSP_SINE_H_ + +namespace DSP { + +class Sine +{ + protected: + int z; + double y[2]; + double b; + + public: + Sine() + { + b = 0; + y[0] = y[1] = 0; + z = 0; + } + + Sine (double f, double fs, double phase) + { + set_f (f, fs, phase); + } + + Sine (double omega, double phase = 0.) + { + set_f (omega, phase); + } + + inline void set_f (double f, double fs, double phase) + { + set_f (f * M_PI / fs, phase); + } + + inline void set_f (double w, double phase) + { + b = 2 * cos (w); + y[0] = sin (phase - w); + y[1] = sin (phase - w * 2); + z = 0; + } + + /* advance and return 1 sample */ + inline double get() + { + register double s = b * y[z]; + z ^= 1; + s -= y[z]; + return y[z] = s; + } + + double get_phase() + { + double x0 = y[z], x1 = b * y[z] - y[z^1]; + double phi = asin (x0); + + /* slope is falling, we're into the 2nd half. */ + if (x1 < x0) + return M_PI - phi; + + return phi; + } +}; + +} /* namespace DSP */ + +#endif /* _DSP_SINE_H_ */ diff --git a/plugins/LadspaEffect/caps/dsp/TDFII.h b/plugins/LadspaEffect/caps/dsp/TDFII.h new file mode 100644 index 000000000..0252bc47a --- /dev/null +++ b/plugins/LadspaEffect/caps/dsp/TDFII.h @@ -0,0 +1,80 @@ +/* + TDFII.h + + Copyright 2006-7 + David Yeh (implementation) + Tim Goetze (cosmetics) + + transposed Direct Form II digital filter. + Assumes order of b = order of a. + Assumes a0 = 1. + +*/ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA or point your web browser to http://www.gnu.org. +*/ + +#ifndef _DSP_TDFII_H_ +#define _DSP_TDFII_H_ + +namespace DSP { + +// ORDER is the highest power of s in the transfer function +template +class TDFII +{ + public: + double a[Order + 1]; + double b[Order + 1]; + double h[Order + 1]; + + void reset() + { + for (int i = 0; i <= Order; ++i) + h[i] = 0; // zero state + } + + void init (double fs) + { + reset(); + clear(); + } + + void clear() + { + for (int i=0; i<= Order; i++) + a[i] = b[i] = 1; + } + + /* per-band recursion: + * y = 2 * (a * (x - x[-2]) + c * y[-1] - b * y[-2]) + */ + sample_t process (sample_t s) + { + double y = h[0] + b[0] * s; + + for (int i = 1; i < Order; ++i) + h[i - 1] = h[i] + b[i] * s - a[i] * y; + + h[Order - 1] = b[Order] * s - a[Order] * y; + + return (sample_t) y; + } +}; + +} /* namespace DSP */ + +#endif /* _DSP_TDFII_H_ */ diff --git a/plugins/LadspaEffect/caps/dsp/ToneStack.h b/plugins/LadspaEffect/caps/dsp/ToneStack.h new file mode 100644 index 000000000..ef85d2057 --- /dev/null +++ b/plugins/LadspaEffect/caps/dsp/ToneStack.h @@ -0,0 +1,266 @@ +/* + ToneStack.h + + Copyright 2006-9 + David Yeh (implementation) + Tim Goetze (cosmetics) + + Tone Stack emulation. + +*/ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA or point your web browser to http://www.gnu.org. +*/ + +#ifndef _DSP_TONESTACK_H_ +#define _DSP_TONESTACK_H_ + +#include "util.h" +#include "windows.h" +#include "TDFII.h" +#include "LatFilt.h" +#include "tonestack/tables.h" + +namespace DSP { + +typedef struct { + double R1, R2, R3, R4; + double C1, C2, C3; +} TSParameters; + +#define TS_N_PRESETS (sizeof (DSP::ToneStack::presets) / \ + sizeof (DSP::TSParameters)) + +class ToneStack +{ + private: + enum { Order = 3 }; + + double c; // BT coef + + double b1t, b1m, b1l, b1d, + b2t, b2m2, b2m, b2l, b2lm, b2d, + b3lm, b3m2, b3m, b3t, b3tm, b3tl, + a0, a1d, a1m, a1l, a2m, a2lm, a2m2, a2l, a2d, + a3lm, a3m2, a3m, a3l, a3d; // intermediate calculations + + struct { + double b1; + double b2; + double b3; + double a1; + double a2; + double a3; + } acoef; // analog coefficients + + // digital coefficients + double dcoef_a[Order + 1]; + double dcoef_b[Order + 1]; + double af[Order + 1]; + double bf[Order + 1]; + + double fs; + TDFII filter; + + public: + int model; + + static TSParameters presets[]; /* in ../ToneStack.cc */ + static int n_presets; + + ToneStack() + { + model = -1; + setparams (presets[0]); + } + + void init (double _fs) + { + c = 2 * _fs; + } + + void activate (sample_t ** ports) + { + filter.reset(); + } + + /* pass in pointer to ports and relative index of first eq band control */ + void start_cycle (sample_t ** ports, int bassindex = 1) + { + int m = clamp ((int) *ports[0], 0, n_presets - 1); + if (m != model) + { + model = m; + setparams (presets[model]); + filter.reset(); + } + updatecoefs (ports + bassindex); + } + + + void setparams (TSParameters & p) + { + double R1 = p.R1, R2 = p.R2, R3 = p.R3, R4 = p.R4; + double C1 = p.C1, C2 = p.C2, C3 = p.C3; + + b1t = C1*R1; + b1m = C3*R3; + b1l = C1*R2 + C2*R2; + b1d = C1*R3 + C2*R3; + b2t = C1*C2*R1*R4 + C1*C3*R1*R4; + b2m2 = -(C1*C3*R3*R3 + C2*C3*R3*R3); + b2m = C1*C3*R1*R3 + C1*C3*R3*R3 + C2*C3*R3*R3; + b2l = C1*C2*R1*R2 + C1*C2*R2*R4 + C1*C3*R2*R4; + b2lm = C1*C3*R2*R3 + C2*C3*R2*R3; + b2d = C1*C2*R1*R3 + C1*C2*R3*R4 + C1*C3*R3*R4; + b3lm = C1*C2*C3*R1*R2*R3 + C1*C2*C3*R2*R3*R4; + b3m2 = -(C1*C2*C3*R1*R3*R3 + C1*C2*C3*R3*R3*R4); + b3m = C1*C2*C3*R1*R3*R3 + C1*C2*C3*R3*R3*R4; + b3t = C1*C2*C3*R1*R3*R4; + b3tm = -b3t; + b3tl = C1*C2*C3*R1*R2*R4; + a0 = 1; + a1d = C1*R1 + C1*R3 + C2*R3 + C2*R4 + C3*R4; + a1m = C3*R3; + a1l = C1*R2 + C2*R2; + a2m = C1*C3*R1*R3 - C2*C3*R3*R4 + C1*C3*R3*R3 + C2*C3*R3*R3; + a2lm = C1*C3*R2*R3 + C2*C3*R2*R3; + a2m2 = -(C1*C3*R3*R3 + C2*C3*R3*R3); + a2l = C1*C2*R2*R4 + C1*C2*R1*R2 + C1*C3*R2*R4 + C2*C3*R2*R4; + a2d = C1*C2*R1*R4 + C1*C3*R1*R4 + C1*C2*R3*R4 + + C1*C2*R1*R3 + C1*C3*R3*R4 + C2*C3*R3*R4; + a3lm = C1*C2*C3*R1*R2*R3 + C1*C2*C3*R2*R3*R4; + a3m2 = -(C1*C2*C3*R1*R3*R3 + C1*C2*C3*R3*R3*R4); + a3m = C1*C2*C3*R3*R3*R4 + C1*C2*C3*R1*R3*R3 - C1*C2*C3*R1*R3*R4; + a3l = C1*C2*C3*R1*R2*R4; + a3d = C1*C2*C3*R1*R3*R4; + + filter.reset(); + } + + inline void updatecoefs (sample_t ** ports) + { + /* range checks on input */ + double b = clamp (*ports[0], 0, 1); + double m = clamp (*ports[1], 0, 1); + double t = clamp (*ports[2], 0, 1); + + m = (m - 1) * 3.5; + m = pow (10, m); + + acoef.a1 = a1d + m*a1m + b*a1l; + acoef.a2 = m*a2m + b*m*a2lm + m*m*a2m2 + b*a2l + a2d; + acoef.a3 = b*m*a3lm + m*m*a3m2 + m*a3m + b*a3l + a3d; + dcoef_a[0] = -1 - acoef.a1*c - acoef.a2*c*c - acoef.a3*c*c*c; // sets scale + dcoef_a[1] = -3 - acoef.a1*c + acoef.a2*c*c + 3*acoef.a3*c*c*c; + dcoef_a[2] = -3 + acoef.a1*c + acoef.a2*c*c - 3*acoef.a3*c*c*c; + dcoef_a[3] = -1 + acoef.a1*c - acoef.a2*c*c + acoef.a3*c*c*c; + + acoef.b1 = t*b1t + m*b1m + b*b1l + b1d; + acoef.b2 = t*b2t + m*m*b2m2 + m*b2m + b*b2l + b*m*b2lm + b2d; + acoef.b3 = b*m*b3lm + m*m*b3m2 + m*b3m + t*b3t + t*m*b3tm + t*b*b3tl; + dcoef_b[0] = - acoef.b1*c - acoef.b2*c*c - acoef.b3*c*c*c; + dcoef_b[1] = - acoef.b1*c + acoef.b2*c*c + 3*acoef.b3*c*c*c; + dcoef_b[2] = acoef.b1*c + acoef.b2*c*c - 3*acoef.b3*c*c*c; + dcoef_b[3] = acoef.b1*c - acoef.b2*c*c + acoef.b3*c*c*c; + + for (int i=1; i<=3; ++i) + filter.a[i] = dcoef_a[i] / dcoef_a[0]; + + for (int i=0; i<=3; ++i) + filter.b[i] = dcoef_b[i] / dcoef_a[0]; + } + + // actualy do the DFII filtering, one sample at a time + inline sample_t process (sample_t x) + { + return filter.process (x); + } +}; + +/* /////////////////////////////////////////////////////////////////////// */ + +/* + hardcode this, known size memory blocks + extern double* KS; // 25 x 25 x 3 + extern double* VS; // 25 x 25 x 25 x 4 + extern double KS[NSTEPS][NSTEPS][TSORDER]; //[bass][mid][coefs] + extern double VS[NSTEPS][NSTEPS][NSTEPS][TSORDER+1]; //[bass][mid][treb][coefs] + */ + +class ToneStackLT +{ + private: + enum { Order = 3, Steps = 25 }; + + // digital coefficients + double *kcoef; + double *vcoef; + double af [Order + 1]; + double bf [Order + 1]; + + double fs; + LatFilt filter; + + public: + ToneStackLT() + { + setparams (250000, 1000000, 25000, 56000, 0.25e-9, 20e-9, 20e-9); + } + + void init (double _fs) + { } + + void activate (sample_t ** ports) + { + filter.reset(); + } + + void setparams + (double R1, double R2, double R3, double R4, + double C1, double C2, double C3) { + } + + void updatecoefs (sample_t ** ports) + { + double b = min (Steps - 1, max (*ports[0] * (Steps - 1), 0)); + double m = min (Steps - 1, max (*ports[1] * (Steps - 1), 0)); + double t = min (Steps - 1, max (*ports[2] * (Steps - 1), 0)); + + int bi = (int) b; + int mi = (int) m; + int ti = (int) t; + + kcoef = DSP::ToneStackKS + (mi * Steps + bi) * Order; + vcoef = DSP::ToneStackVS + ((mi * Steps + bi) * Steps + ti) * (Order + 1); + + for (int i = 0; i < Order; ++i) + filter.set_ki (kcoef[i], i); + + for (int i = 0; i < Order + 1; ++i) + filter.set_vi (vcoef[i], i); + } + + // actualy do the DFII filtering, one sample at a time + inline sample_t process (sample_t x) + { + return filter.process (x); + } +}; + +} /* namespace DSP */ + +#endif /* _DSP_TONESTACK_H_ */ diff --git a/plugins/LadspaEffect/caps/dsp/TwelveAX7.h b/plugins/LadspaEffect/caps/dsp/TwelveAX7.h new file mode 100644 index 000000000..a4e9d7e7f --- /dev/null +++ b/plugins/LadspaEffect/caps/dsp/TwelveAX7.h @@ -0,0 +1,240 @@ +/* + dsp/TwelveAX7.h + + Copyright 2003-6 Tim Goetze + + http://quitte.de/dsp/ + + collection of approximations of the 12AX7 voltage transfer function +*/ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA or point your web browser to http://www.gnu.org. +*/ + +#ifndef _DSP_TWELVE_AX_7_H_ +#define _DSP_TWELVE_AX_7_H_ + +namespace DSP { + +#include "r12ax7.h" + +typedef sample_t tube_sample; + +/* this is the original tube model from caps < 0.1.9 or preamp.so, put + * back into use in 0.1.11; the replacement (below) is too strong in + * odd-order harmonics at the expense of even-order. it has to sound + * good: it took a good deal of fiddling to get the coefficients right. + */ +class TwelveAX7 +{ + public: + tube_sample b, c, d; + + struct { + tube_sample threshold, value; + } clip[2]; + + /* amplitude at which clipping starts */ + tube_sample scale; + + public: + TwelveAX7() + { + /* transfer polynomial parameters */ + b = -0.79618574210627535; + c = -0.21108555430962023; + d = +0.38944033523200522; + + set_clips(); + + scale = min (fabs (clip[0].threshold), fabs (clip[1].threshold)); + } + + inline tube_sample transfer (tube_sample a) + { + return a * (b + a * (c + a * d)); + } + + inline tube_sample transfer_clip (tube_sample a) + { + if (a <= clip[0].threshold) + return clip[0].value; + if (a >= clip[1].threshold) + return clip[1].value; + return transfer (a); + } + + inline double get_root (double sign) + { + /* only once, no need to optimize */ + return + (-2*c + sign * sqrt ((2*c) * (2*c) - 4 * (3 * d * b))) / (6 * d); + } + + inline void set_clips() + { + /* find 0 crossings in the derived, this is where we'll clip */ + double x0 = get_root (-1); + double x1 = get_root (+1); + + clip[0].value = transfer (x0); + clip[1].value = transfer (x1); + + clip[0].threshold = x0; + clip[1].threshold = x1; + } +}; + +/* reworked model. higher order (than 3) polynomials make little sense; + * sonically the difference is minim, and the cycle count increases + * dramatically. + */ +class TwelveAX7_2 +{ + public: + tube_sample b, c, d; + + struct { + tube_sample threshold, value; + } clip[2]; + + tube_sample scale; + + public: + TwelveAX7_2() + { + /* transfer polynomial parameters, made with gnuplot::fit() */ + b = -1.08150605597883; + c = -0.262760944760536; + d = 0.445770802765903; + + static double x[2] = {-.52, +.98}; + + for (int i = 0; i < 2; ++i) + clip[i].threshold = x[i], + clip[i].value = transfer (x[i]); + + scale = min (fabs (clip[0].threshold), fabs (clip[1].threshold)); + } + + inline tube_sample transfer (tube_sample a) + { + return a * (b + a * (c + a * d)); + } + + inline tube_sample transfer_clip (tube_sample a) + { + if (a <= clip[0].threshold) + return clip[0].value; + if (a >= clip[1].threshold) + return clip[1].value; + return transfer (a); + } +}; + +/* third model relies on linear interpolation based on the transfer function + * as calculated from a spice model. + */ +class TwelveAX7_3 +{ + public: + tube_sample b, c, d; + + struct { + tube_sample threshold, value; + } clip[2]; + + tube_sample scale; + + public: + TwelveAX7_3() + { + static double x[2] = + { + (double) r12AX7::Zero / + ((double) r12AX7::Samples - (double) r12AX7::Zero), + 1 + }; + + for (int i = 0; i < 2; ++i) + clip[i].threshold = x[i], + clip[i].value = transfer (x[i]); + + scale = min (fabs (clip[0].threshold), fabs (clip[1].threshold)); + } + + inline tube_sample transfer (tube_sample a) + { + a = r12AX7::Zero + a * (r12AX7::Samples - r12AX7::Zero); + if (a <= 0) + return r12AX7::v2v[0]; + if (a >= r12AX7::Samples - 1) + return r12AX7::v2v [r12AX7::Samples - 1]; + + /* linear interpolation from sampled function */ + register int i = lrintf (a); + a -= i; + + return (r12AX7::v2v [i] * (1.f - a) + r12AX7::v2v [i + 1] * a); + } + + inline tube_sample transfer_clip (tube_sample a) + { + return transfer (a); + } +}; + +/* experimental */ +class NoTwelveAX7 +{ + public: + struct { + tube_sample threshold, value; + } clip[2]; + + /* amplitude at which clipping starts */ + tube_sample scale; + + public: + NoTwelveAX7() + { + static double x[2] = { -1, 1 }; + + for (int i = 0; i < 2; ++i) + clip[i].threshold = x[i], + clip[i].value = transfer (x[i]); + + scale = min (fabs (clip[0].threshold), fabs (clip[1].threshold)); + } + + inline tube_sample transfer (tube_sample a) + { + return 0.5469181606780 * (pow (1 - a, 1.5) - 1); + } + + inline tube_sample transfer_clip (tube_sample a) + { + if (a <= clip[0].threshold) + return clip[0].value; + if (a >= clip[1].threshold) + return clip[1].value; + return transfer (a); + } +}; + +} /* namespace DSP */ + +#endif /* _DSP_TWELVE_AX_7_H_ */ diff --git a/plugins/LadspaEffect/caps/dsp/VCO.h b/plugins/LadspaEffect/caps/dsp/VCO.h new file mode 100644 index 000000000..d5b5347f1 --- /dev/null +++ b/plugins/LadspaEffect/caps/dsp/VCO.h @@ -0,0 +1,225 @@ +/* + dsp/VCO.h + + Copyright 2004, 2010 Tim Goetze + + oscillators for triangle/sawtooth/square waves, and a combination + for detuning and hard sync. + + NB: these oscillators are *not* bandlimited. oversample if needed. + + */ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA or point your web browser to http://www.gnu.org. +*/ + + +#ifndef _DSP_VCO_H_ +#define _DSP_VCO_H_ + +namespace DSP { + +/* variable triangle to sawtooth generator. you can use two of these to + * generate a square, but we prefer the integrated solution below. + */ +class TriSaw +{ + public: + /* doubles for maximum stability */ + double phase, inc; + + double tri, tri1, tri2; + + public: + TriSaw() + { + phase = 0; + tri = .5; + } + + inline void set_f (double f, double fs) + { + set_inc (f / fs); + } + + inline void set_inc (double i) + { + inc = i; + } + + /* 0: triangle, 1: saw */ + inline void set_saw (double t) + { + tri = .5 + .5 * t; + tri1 = 2. / tri; + tri2 = 2. / (1 - tri); + } + + /* advance and return 1 sample. + * many conditionals, but quicker than a solution based on fmod() + */ + inline float get() + { + phase += inc; + + /* the good thing is that tri is always > .5, which implies + * that this first conditional is true more often than not. */ + if (phase <= tri) + return -1 + phase * tri1; + if (phase < 1) + return 1 - (phase - tri) * tri2; + + phase -= 1; + return -1 + phase * tri1; + } +}; + +/* variable triangle to sawtooth to square generator */ +class TriSawSquare +{ + public: + /* doubles for maximum stability, using floats here increases + * cycle need on my athlon */ + double phase, inc; + double * sync; + + float sync_phase; + + /* using doubles here increases cycle need significantly */ + float square_i; + float tri, tri1, tri2; + float st1, st2; + + public: + TriSawSquare() + { + reset(); + } + + void reset() + { + phase = 0; + sync = &phase; + sync_phase = 0; + set_saw_square (.5, .5); + } + + inline void set_f (double f, double fs) + { + set_inc (f / fs); + } + + inline void set_inc (double i) + { + inc = i; + } + + inline void set_sync (TriSawSquare & tss, float p) + { + sync = &tss.phase; + sync_phase = p; + } + + /* t = 0: tri - 1: saw, + * s = 0: tri/saw - 1: square + */ + inline void set_saw_square (float t, float s) + { + tri = .5 + .5 * t; + square_i = 1 - s; + + float si2 = 2 * square_i; + float one_m_t = 1 - tri; + + tri1 = si2 / tri; + tri2 = si2 / one_m_t; + + st1 = s * one_m_t; + st2 = s * tri; + } + + /* advance and return 1 sample. + * many branching instructions but on this intel chip faster than + * a version using floor() to keep the phase within [0..1]. + */ + inline float get() + { + phase += inc; + + if (phase <= tri) + first_half: + /* raw version: + return (1 - square) * (-1 + phase * 2 / tri) - square * (1 - tri); + */ + return -square_i + phase * tri1 - st1; + + if (phase < 1) + /* raw version: + return (1 - square) * (1 - (phase - tri) * 2 / (1 - tri)) + square * tri; + */ + return square_i - (phase - tri) * tri2 + st2; + + phase -= 1; + *sync = phase + sync_phase; + goto first_half; + } +}; + +class VCO2 +{ + public: + TriSawSquare vco[2]; + float blend, i_blend; + + public: + VCO2() + { + set_blend (.5); + } + + void reset() + { + set_blend (.5); + vco[0].reset(); + vco[1].reset(); + } + + void set_f (double f, double fs, double detune) + { + vco[0].set_f (f, fs); + vco[1].set_f (f * pow (2, detune / 12.), fs); + } + + inline void set_blend (float b) + { + blend = b; + i_blend = 1 - fabs (b); + } + + inline void set_sync (float sync) + { + vco[0].set_sync (sync ? vco[1] : vco[0], sync); + } + + inline float get() + { + return vco[0].get() * blend + vco[1].get() * i_blend; + } +}; + +} /* namespace DSP */ + +#endif /* _DSP_VCO_H_ */ diff --git a/plugins/LadspaEffect/caps/dsp/White.h b/plugins/LadspaEffect/caps/dsp/White.h new file mode 100644 index 000000000..1a9fe6ea7 --- /dev/null +++ b/plugins/LadspaEffect/caps/dsp/White.h @@ -0,0 +1,82 @@ +/* + dsp/White.h + + Copyright 2004 Tim Goetze + + simple white noise generator, based on Jon Dattorro's 3/2002 JAES + paper. quite an elegant design; consumes next to no CPU on a processor + providing a decent binary shift operator. most of all, no random() calls. + +*/ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA or point your web browser to http://www.gnu.org. +*/ + +#ifndef _DSP_WHITE_H_ +#define _DSP_WHITE_H_ + +namespace DSP { + +/* after initializing, call either get() or get_31() to get a sample, don't + * mix them. (get_31 output goes out of range if called after get()). + */ +class White +{ + public: + uint32 b; + + White() + { + b = 0x1fff7777; + } + + void init (float f) + { + b = (uint32) (f * (float) 0x1fff7777); + } + + sample_t abs() + { + return fabs (get()); + } + + /* 32-bit version */ + sample_t get() + { +# define BIT(y) ((b << (31 - y)) & 0x80000000) + + b = ((BIT (28) ^ BIT (27) ^ BIT (1) ^ BIT (0))) | (b >> 1); + return (4.6566128730773926e-10 * (sample_t) b) - 1; + +# undef BIT + } + + /* 31-bit version, at least 6 instructions less / sample. probably only + * pays off on a processor not providing a decent binary shift. */ + sample_t get_31() + { +# define BIT(y) ((b << (30 - y)) & 0x40000000) + + b = ((BIT (3) ^ BIT (0))) | (b >> 1); + return (9.3132257461547852e-10 * (sample_t) b) - 1; + +# undef BIT + } +}; + +} /* namespace DSP */ + +#endif /* _DSP_WHITE_H_ */ diff --git a/plugins/LadspaEffect/caps/dsp/r12ax7.h b/plugins/LadspaEffect/caps/dsp/r12ax7.h new file mode 100644 index 000000000..2398f9a62 --- /dev/null +++ b/plugins/LadspaEffect/caps/dsp/r12ax7.h @@ -0,0 +1,459 @@ +/* + dsp/r12ax7.h + + Copyright 2003-5 Tim Goetze + + http://quitte.de/dsp/ + + 12AX7 voltage transfer function, sampled from a spice simulation + running a simple preamp net with a 12ax7 model graciously provided + by duncanamps.com . + + */ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA or point your web browser to http://www.gnu.org. +*/ + +#ifndef _DSP_R_12_AX_7_H_ +#define _DSP_R_12_AX_7_H_ + +namespace r12AX7 { + +enum { Zero = 566, Samples = 1668, }; + +static float v2v[] = { + 0.277279436588, 0.277249097824, 0.277187168598, 0.277105689049, + 0.277008116245, 0.276897609234, 0.276775300503, 0.276642978191, + 0.276501119137, 0.276351094246, 0.276193082333, 0.276027917862, + 0.275855839252, 0.275678634644, 0.275495171547, 0.275305449963, + 0.275109887123, 0.274909138680, 0.274703323841, 0.274492740631, + 0.274277567863, 0.274058103561, 0.273834228516, 0.273606359959, + 0.273374497890, 0.273138821125, 0.272899389267, 0.272656440735, + 0.272409796715, 0.272159934044, 0.271906614304, 0.271650075912, + 0.271390438080, 0.271127700806, 0.270861923695, 0.270593225956, + 0.270321667194, 0.270047247410, 0.269770205021, 0.269490361214, + 0.269207894802, 0.268922865391, 0.268635272980, 0.268345177174, + 0.268052697182, 0.267757713795, 0.267460465431, 0.267160952091, + 0.266858994961, 0.266555011272, 0.266248643398, 0.265940189362, + 0.265629589558, 0.265316963196, 0.265002191067, 0.264685392380, + 0.264366567135, 0.264045774937, 0.263723075390, 0.263398468494, + 0.263071894646, 0.262743532658, 0.262413203716, 0.262081146240, + 0.261747241020, 0.261411607265, 0.261074185371, 0.260735154152, + 0.260394215584, 0.260051786900, 0.259707629681, 0.259361803532, + 0.259014308453, 0.258665204048, 0.258314549923, 0.257962286472, + 0.257608532906, 0.257253229618, 0.256896317005, 0.256537973881, + 0.256178140640, 0.255816757679, 0.255454003811, 0.255089759827, + 0.254724085331, 0.254356980324, 0.253988444805, 0.253618597984, + 0.253247320652, 0.252874732018, 0.252500772476, 0.252125442028, + 0.251748800278, 0.251370847225, 0.250991582870, 0.250611066818, + 0.250229299068, 0.249846160412, 0.249461889267, 0.249076247215, + 0.248689472675, 0.248301327229, 0.247912168503, 0.247521698475, + 0.247129976749, 0.246737182140, 0.246343135834, 0.245947897434, + 0.245551586151, 0.245154082775, 0.244755446911, 0.244355678558, + 0.243954837322, 0.243552863598, 0.243149697781, 0.242745578289, + 0.242340266705, 0.241933882236, 0.241526484489, 0.241117894650, + 0.240708351135, 0.240297734737, 0.239886105061, 0.239473402500, + 0.239059746265, 0.238644957542, 0.238229274750, 0.237812399864, + 0.237394690514, 0.236975908279, 0.236556172371, 0.236135542393, + 0.235713779926, 0.235291123390, 0.234867513180, 0.234442949295, + 0.234017431736, 0.233590960503, 0.233163535595, 0.232735216618, + 0.232305943966, 0.231875777245, 0.231444656849, 0.231012642384, + 0.230579853058, 0.230145990849, 0.229711294174, 0.229275703430, + 0.228839278221, 0.228401958942, 0.227963745594, 0.227524638176, + 0.227084696293, 0.226643919945, 0.226202249527, 0.225759744644, + 0.225316464901, 0.224872291088, 0.224427282810, 0.223981380463, + 0.223534762859, 0.223087251186, 0.222638964653, 0.222189962864, + 0.221740007401, 0.221289336681, 0.220837771893, 0.220385491848, + 0.219932436943, 0.219478607178, 0.219023883343, 0.218568444252, + 0.218112349510, 0.217655301094, 0.217197597027, 0.216739118099, + 0.216279804707, 0.215819895267, 0.215359091759, 0.214897632599, + 0.214435338974, 0.213972389698, 0.213508665562, 0.213044166565, + 0.212579071522, 0.212113201618, 0.211646556854, 0.211179137230, + 0.210711181164, 0.210242390633, 0.209772944450, 0.209302783012, + 0.208831906319, 0.208360373974, 0.207888066769, 0.207415163517, + 0.206941485405, 0.206467092037, 0.205992162228, 0.205516517162, + 0.205040097237, 0.204563021660, 0.204085409641, 0.203607022762, + 0.203128039837, 0.202648282051, 0.202167987823, 0.201686978340, + 0.201205253601, 0.200723052025, 0.200240015984, 0.199756443501, + 0.199272215366, 0.198787331581, 0.198301851749, 0.197815716267, + 0.197328925133, 0.196841537952, 0.196353554726, 0.195864915848, + 0.195375621319, 0.194885730743, 0.194395244122, 0.193904161453, + 0.193412423134, 0.192920088768, 0.192427158356, 0.191933691502, + 0.191439509392, 0.190944850445, 0.190449535847, 0.189953625202, + 0.189457118511, 0.188960015774, 0.188462376595, 0.187964081764, + 0.187465250492, 0.186965823174, 0.186465859413, 0.185965299606, + 0.185464143753, 0.184962451458, 0.184460222721, 0.183957397938, + 0.183453977108, 0.182949960232, 0.182445406914, 0.181940436363, + 0.181434750557, 0.180928587914, 0.180421829224, 0.179914534092, + 0.179406702518, 0.178898334503, 0.178389430046, 0.177879989147, + 0.177369952202, 0.176859438419, 0.176348328590, 0.175836741924, + 0.175324618816, 0.174811959267, 0.174298763275, 0.173785090446, + 0.173270881176, 0.172756135464, 0.172240853310, 0.171725094318, + 0.171208739281, 0.170691967010, 0.170174598694, 0.169656693935, + 0.169138371944, 0.168619513512, 0.168100118637, 0.167580246925, + 0.167059898376, 0.166539072990, 0.166017711163, 0.165495812893, + 0.164973437786, 0.164450585842, 0.163927257061, 0.163403451443, + 0.162879049778, 0.162354290485, 0.161828994751, 0.161303222179, + 0.160776913166, 0.160250246525, 0.159723043442, 0.159195303917, + 0.158667147160, 0.158138513565, 0.157609403133, 0.157079756260, + 0.156549692154, 0.156019270420, 0.155488193035, 0.154956758022, + 0.154424905777, 0.153892517090, 0.153359651566, 0.152826309204, + 0.152292609215, 0.151758432388, 0.151223719120, 0.150688648224, + 0.150153040886, 0.149617075920, 0.149080574512, 0.148543596268, + 0.148006320000, 0.147468507290, 0.146930217743, 0.146391570568, + 0.145852446556, 0.145312905312, 0.144772827625, 0.144232392311, + 0.143691599369, 0.143150269985, 0.142608463764, 0.142066359520, + 0.141523718834, 0.140980720520, 0.140437245369, 0.139893352985, + 0.139349043369, 0.138804316521, 0.138259172440, 0.137713611126, + 0.137167632580, 0.136621177197, 0.136074364185, 0.135527133942, + 0.134979486465, 0.134431421757, 0.133882939816, 0.133334040642, + 0.132784724236, 0.132234990597, 0.131684958935, 0.131134390831, + 0.130583465099, 0.130032181740, 0.129480421543, 0.128928303719, + 0.128375828266, 0.127822816372, 0.127269506454, 0.126715779305, + 0.126161694527, 0.125607132912, 0.125052213669, 0.124496996403, + 0.123941242695, 0.123385190964, 0.122828722000, 0.122271895409, + 0.121714651585, 0.121156990528, 0.120598971844, 0.120040595531, + 0.119481861591, 0.118922710419, 0.118363082409, 0.117803215981, + 0.117242932320, 0.116682231426, 0.116121232510, 0.115559816360, + 0.114997982979, 0.114435851574, 0.113873243332, 0.113310396671, + 0.112747073174, 0.112183392048, 0.111619412899, 0.111055016518, + 0.110490322113, 0.109925150871, 0.109359681606, 0.108793854713, + 0.108227670193, 0.107661128044, 0.107094168663, 0.106526911259, + 0.105959236622, 0.105391263962, 0.104822933674, 0.104254245758, + 0.103685200214, 0.103115737438, 0.102545976639, 0.101975917816, + 0.101405382156, 0.100834667683, 0.100263476372, 0.099691987038, + 0.099120140076, 0.098547875881, 0.097975373268, 0.097402453423, + 0.096829295158, 0.096255660057, 0.095681726933, 0.095107495785, + 0.094532907009, 0.093957960606, 0.093382716179, 0.092807114124, + 0.092231214046, 0.091654956341, 0.091078281403, 0.090501308441, + 0.089924037457, 0.089346468449, 0.088768541813, 0.088190257549, + 0.087611675262, 0.087032735348, 0.086453497410, 0.085873961449, + 0.085294008255, 0.084713757038, 0.084133267403, 0.083552420139, + 0.082971215248, 0.082389712334, 0.081807851791, 0.081225633621, + 0.080643236637, 0.080060362816, 0.079477250576, 0.078893840313, + 0.078310132027, 0.077726066113, 0.077141702175, 0.076556980610, + 0.075971961021, 0.075386703014, 0.074801087379, 0.074215173721, + 0.073628902435, 0.073042333126, 0.072455525398, 0.071868300438, + 0.071280896664, 0.070693075657, 0.070105016232, 0.069516658783, + 0.068927943707, 0.068338930607, 0.067749619484, 0.067160010338, + 0.066570162773, 0.065979957581, 0.065389454365, 0.064798653126, + 0.064207553864, 0.063616216183, 0.063024461269, 0.062432527542, + 0.061840236187, 0.061247646809, 0.060654759407, 0.060061693192, + 0.059468209743, 0.058874547482, 0.058280467987, 0.057686150074, + 0.057091534138, 0.056496620178, 0.055901467800, 0.055306017399, + 0.054710209370, 0.054114162922, 0.053517878056, 0.052921295166, + 0.052324414253, 0.051727175713, 0.051129758358, 0.050532042980, + 0.049934029579, 0.049335718155, 0.048737108707, 0.048138201237, + 0.047539114952, 0.046939730644, 0.046340048313, 0.045740067959, + 0.045139789581, 0.044539213181, 0.043938457966, 0.043337404728, + 0.042736113071, 0.042134463787, 0.041532635689, 0.040930390358, + 0.040328025818, 0.039725303650, 0.039122343063, 0.038519084454, + 0.037915587425, 0.037311792374, 0.036707758904, 0.036103487015, + 0.035498917103, 0.034894108772, 0.034289002419, 0.033683657646, + 0.033078014851, 0.032472133636, 0.031866014004, 0.031259536743, + 0.030652880669, 0.030045926571, 0.029438734055, 0.028831362724, + 0.028223633766, 0.027615666389, 0.027007460594, 0.026398956776, + 0.025790274143, 0.025181293488, 0.024572074413, 0.023962497711, + 0.023352801800, 0.022742748260, 0.022132515907, 0.021522045135, + 0.020911276340, 0.020300269127, 0.019689023495, 0.019077539444, + 0.018465697765, 0.017853736877, 0.017241477966, 0.016628980637, + 0.016016244888, 0.015403211117, 0.014789998531, 0.014176487923, + 0.013562798500, 0.012948811054, 0.012334585190, 0.011720120907, + 0.011105477810, 0.010490477085, 0.009875297546, 0.009259879589, + 0.008644223213, 0.008028268814, 0.007412135601, 0.006795823574, + 0.006179153919, 0.005562305450, 0.004945218563, 0.004327833652, + 0.003710269928, 0.003092467785, 0.002474486828, 0.001856148243, + 0.001237690449, 0.000618994236, 0.000000000000, -0.000619232655, + -0.001238644123, -0.001858353615, -0.002478241920, -0.003098428249, + -0.003718733788, -0.004339277744, -0.004960119724, -0.005581140518, + -0.006202459335, -0.006823956966, -0.007445693016, -0.008067667484, + -0.008689820766, -0.009312212467, -0.009934842587, -0.010557651520, + -0.011180758476, -0.011804044247, -0.012427628040, -0.013051390648, + -0.013675332069, -0.014299511909, -0.014923930168, -0.015548527241, + -0.016173422337, -0.016798496246, -0.017423748970, -0.018049240112, + -0.018674969673, -0.019300937653, -0.019927084446, -0.020553469658, + -0.021180033684, -0.021806895733, -0.022433876991, -0.023061156273, + -0.023688614368, -0.024316251278, -0.024944126606, -0.025572240353, + -0.026200532913, -0.026829063892, -0.027457773685, -0.028086721897, + -0.028715848923, -0.029345214367, -0.029974758625, -0.030604541302, + -0.031234562397, -0.031864762306, -0.032495141029, -0.033125758171, + -0.033756554127, -0.034387588501, -0.035018861294, -0.035650253296, + -0.036281883717, -0.036913752556, -0.037545800209, -0.038178086281, + -0.038810491562, -0.039443194866, -0.040076017380, -0.040709137917, + -0.041342377663, -0.041975855827, -0.042609512806, -0.043243408203, + -0.043877482414, -0.044511735439, -0.045146226883, -0.045780897141, + -0.046415746212, -0.047050774097, -0.047686040401, -0.048321545124, + -0.048957169056, -0.049593031406, -0.050229072571, -0.050865292549, + -0.051501750946, -0.052138388157, -0.052775204182, -0.053412258625, + -0.054049432278, -0.054686844349, -0.055324435234, -0.055962264538, + -0.056600213051, -0.057238399982, -0.057876765728, -0.058515310287, + -0.059154093266, -0.059792995453, -0.060432136059, -0.061071455479, + -0.061710953712, -0.062350630760, -0.062990486622, -0.063630580902, + -0.064270794392, -0.064911246300, -0.065551877022, -0.066192686558, + -0.066833674908, -0.067474842072, -0.068116247654, -0.068757772446, + -0.069399535656, -0.070041418076, -0.070683538914, -0.071325838566, + -0.071968257427, -0.072610914707, -0.073253750801, -0.073896765709, + -0.074539959431, -0.075183331966, -0.075826883316, -0.076470613480, + -0.077114522457, -0.077758610249, -0.078402876854, -0.079047322273, + -0.079691946507, -0.080336749554, -0.080981731415, -0.081626832485, + -0.082272171974, -0.082917690277, -0.083563387394, -0.084209203720, + -0.084855258465, -0.085501432419, -0.086147844791, -0.086794376373, + -0.087441086769, -0.088088035583, -0.088735103607, -0.089382350445, + -0.090029716492, -0.090677320957, -0.091325104237, -0.091973006725, + -0.092621147633, -0.093269407749, -0.093917787075, -0.094566464424, + -0.095215201378, -0.095864176750, -0.096513271332, -0.097162544727, + -0.097811996937, -0.098461627960, -0.099111437798, -0.099761366844, + -0.100411474705, -0.101061761379, -0.101712167263, -0.102362811565, + -0.103013575077, -0.103664517403, -0.104315698147, -0.104966938496, + -0.105618357658, -0.106269955635, -0.106921732426, -0.107573628426, + -0.108225762844, -0.108877956867, -0.109530389309, -0.110182940960, + -0.110835671425, -0.111488580704, -0.112141609192, -0.112794876099, + -0.113448202610, -0.114101707935, -0.114755392075, -0.115409255028, + -0.116063296795, -0.116717457771, -0.117371797562, -0.118026256561, + -0.118680894375, -0.119335711002, -0.119990646839, -0.120645701885, + -0.121300995350, -0.121956408024, -0.122611939907, -0.123267710209, + -0.123923599720, -0.124579608440, -0.125235795975, -0.125892102718, + -0.126548647881, -0.127205252647, -0.127862036228, -0.128518998623, + -0.129176080227, -0.129833400249, -0.130490779877, -0.131148338318, + -0.131806015968, -0.132463872433, -0.133121848106, -0.133780062199, + -0.134438335896, -0.135096788406, -0.135755360126, -0.136414170265, + -0.137073040009, -0.137732088566, -0.138391256332, -0.139050662518, + -0.139710128307, -0.140369713306, -0.141029477119, -0.141689419746, + -0.142349541187, -0.143009781837, -0.143670141697, -0.144330620766, + -0.144991278648, -0.145652055740, -0.146312952042, -0.146974027157, + -0.147635281086, -0.148296654224, -0.148958146572, -0.149619817734, + -0.150281608105, -0.150943517685, -0.151605606079, -0.152267873287, + -0.152930200100, -0.153592705727, -0.154255390167, -0.154918134212, + -0.155581057072, -0.156244099140, -0.156907320023, -0.157570660114, + -0.158234119415, -0.158897757530, -0.159561455250, -0.160225391388, + -0.160889446735, -0.161553561687, -0.162217855453, -0.162882328033, + -0.163546860218, -0.164211571217, -0.164876461029, -0.165541410446, + -0.166206538677, -0.166871786118, -0.167537152767, -0.168202698231, + -0.168868362904, -0.169534146786, -0.170200049877, -0.170866131783, + -0.171532273293, -0.172198593616, -0.172865033150, -0.173531651497, + -0.174198389053, -0.174865186214, -0.175532162189, -0.176199316978, + -0.176866531372, -0.177533924580, -0.178201436996, -0.178869009018, + -0.179536819458, -0.180204689503, -0.180872738361, -0.181540846825, + -0.182209134102, -0.182877540588, -0.183546066284, -0.184214711189, + -0.184883534908, -0.185552418232, -0.186221480370, -0.186890661716, + -0.187559902668, -0.188229382038, -0.188898921013, -0.189568579197, + -0.190238356590, -0.190908312798, -0.191578388214, -0.192248523235, + -0.192918837070, -0.193589210510, -0.194259762764, -0.194930493832, + -0.195601284504, -0.196272194386, -0.196943223476, -0.197614312172, + -0.198285639286, -0.198957026005, -0.199628591537, -0.200300216675, + -0.200972020626, -0.201643884182, -0.202315866947, -0.202988028526, + -0.203660309315, -0.204332649708, -0.205005109310, -0.205677747726, + -0.206350505352, -0.207023322582, -0.207696318626, -0.208369374275, + -0.209042608738, -0.209715902805, -0.210389316082, -0.211062908173, + -0.211736559868, -0.212410390377, -0.213084280491, -0.213758289814, + -0.214432477951, -0.215106725693, -0.215781092644, -0.216455549002, + -0.217130184174, -0.217804878950, -0.218479722738, -0.219154685736, + -0.219829738140, -0.220504909754, -0.221180200577, -0.221855610609, + -0.222531110048, -0.223206758499, -0.223882496357, -0.224558383226, + -0.225234329700, -0.225910425186, -0.226586610079, -0.227262884378, + -0.227939307690, -0.228615850210, -0.229292482138, -0.229969263077, + -0.230646073818, -0.231323093176, -0.232000142336, -0.232677340508, + -0.233354657888, -0.234032064676, -0.234709590673, -0.235387206078, + -0.236064910889, -0.236742764711, -0.237420737743, -0.238098770380, + -0.238776952028, -0.239455252886, -0.240133613348, -0.240812093019, + -0.241490721703, -0.242169409990, -0.242848247290, -0.243527114391, + -0.244206160307, -0.244885295630, -0.245564520359, -0.246243864298, + -0.246923267841, -0.247602820396, -0.248282492161, -0.248962253332, + -0.249642103910, -0.250322073698, -0.251002162695, -0.251682341099, + -0.252362608910, -0.253042995930, -0.253723442554, -0.254404038191, + -0.255084723234, -0.255765527487, -0.256446391344, -0.257127404213, + -0.257808506489, -0.258489698172, -0.259170979261, -0.259852379560, + -0.260533869267, -0.261215478182, -0.261897146702, -0.262578964233, + -0.263260871172, -0.263942837715, -0.264624953270, -0.265307158232, + -0.265989482403, -0.266671866179, -0.267354339361, -0.268036931753, + -0.268719583750, -0.269402414560, -0.270085275173, -0.270768254995, + -0.271451354027, -0.272134482861, -0.272817790508, -0.273501127958, + -0.274184614420, -0.274868160486, -0.275552004576, -0.276246696711, + -0.276955842972, -0.277676463127, -0.278406113386, -0.279142975807, + -0.279885530472, -0.280632615089, -0.281383335590, -0.282136917114, + -0.282892853022, -0.283650636673, -0.284409940243, -0.285170495510, + -0.285932064056, -0.286694467068, -0.287457615137, -0.288221299648, + -0.288985580206, -0.289750248194, -0.290515333414, -0.291280776262, + -0.292046546936, -0.292812615633, -0.293578982353, -0.294345587492, + -0.295112460852, -0.295879513025, -0.296646833420, -0.297414392233, + -0.298182129860, -0.298950135708, -0.299718320370, -0.300486743450, + -0.301255315542, -0.302024126053, -0.302793115377, -0.303562343121, + -0.304331749678, -0.305101364851, -0.305871158838, -0.306641131639, + -0.307411372662, -0.308181732893, -0.308952361345, -0.309723138809, + -0.310494124889, -0.311265289783, -0.312036663294, -0.312808215618, + -0.313580006361, -0.314351975918, -0.315124064684, -0.315896451473, + -0.316668987274, -0.317441672087, -0.318214595318, -0.318987697363, + -0.319761008024, -0.320534497499, -0.321308195591, -0.322082072496, + -0.322856098413, -0.323630332947, -0.324404805899, -0.325179398060, + -0.325954228640, -0.326729238033, -0.327504426241, -0.328279823065, + -0.329055398703, -0.329831123352, -0.330607086420, -0.331383198500, + -0.332159548998, -0.332936048508, -0.333712756634, -0.334489613771, + -0.335266709328, -0.336043953896, -0.336821347475, -0.337598979473, + -0.338376790285, -0.339154779911, -0.339932948351, -0.340703547001, + -0.341460168362, -0.342204123735, -0.342936009169, -0.343656539917, + -0.344366520643, -0.345066785812, -0.345758140087, -0.346441298723, + -0.347117066383, -0.347785979509, -0.348448574543, -0.349105387926, + -0.349756926298, -0.350403457880, -0.351045399904, -0.351682960987, + -0.352316498756, -0.352946251631, -0.353572368622, -0.354195058346, + -0.354814529419, -0.355430841446, -0.356044232845, -0.356654793024, + -0.357262581587, -0.357867747545, -0.358470380306, -0.359070599079, + -0.359668403864, -0.360263943672, -0.360857278109, -0.361448466778, + -0.362037539482, -0.362624615431, -0.363209664822, -0.363792806864, + -0.364374041557, -0.364953458309, -0.365531116724, -0.366106957197, + -0.366681158543, -0.367253661156, -0.367824524641, -0.368393778801, + -0.368961453438, -0.369527608156, -0.370092272758, -0.370655417442, + -0.371217161417, -0.371777445078, -0.372336328030, -0.372893840075, + -0.373450040817, -0.374004870653, -0.374558418989, -0.375110656023, + -0.375661671162, -0.376211434603, -0.376759976149, -0.377307295799, + -0.377853453159, -0.378398448229, -0.378942251205, -0.379484951496, + -0.380026549101, -0.380567044020, -0.381106466055, -0.381644785404, + -0.382182061672, -0.382718294859, -0.383253514767, -0.383787691593, + -0.384320884943, -0.384853094816, -0.385384321213, -0.385914593935, + -0.386443912983, -0.386972278357, -0.387499719858, -0.388026237488, + -0.388551831245, -0.389076471329, -0.389600366354, -0.390123337507, + -0.390645444393, -0.391166716814, -0.391687124968, -0.392206668854, + -0.392725408077, -0.393243283033, -0.393760412931, -0.394276678562, + -0.394792169333, -0.395306885242, -0.395820796490, -0.396333962679, + -0.396846383810, -0.397358000278, -0.397868901491, -0.398379057646, + -0.398888468742, -0.399397134781, -0.399905115366, -0.400412350893, + -0.400918900967, -0.401424735785, -0.401929885149, -0.402434349060, + -0.402938157320, -0.403441250324, -0.403943657875, -0.404445439577, + -0.404946535826, -0.405447006226, -0.405946820974, -0.406445980072, + -0.406944513321, -0.407442390919, -0.407939672470, -0.408436328173, + -0.408932358027, -0.409427791834, -0.409922599792, -0.410416811705, + -0.410910427570, -0.411403477192, -0.411895900965, -0.412387788296, + -0.412879049778, -0.413369774818, -0.413859903812, -0.414349466562, + -0.414838492870, -0.415326923132, -0.415814846754, -0.416302174330, + -0.416788995266, -0.417275249958, -0.417760968208, -0.418246179819, + -0.418730825186, -0.419214993715, -0.419698596001, -0.420181691647, + -0.420664280653, -0.421146333218, -0.421627908945, -0.422108948231, + -0.422589510679, -0.423069566488, -0.423549115658, -0.424028217793, + -0.424506783485, -0.424984872341, -0.425462514162, -0.425939619541, + -0.426416277885, -0.426892489195, -0.427368193865, -0.427843451500, + -0.428318232298, -0.428792566061, -0.429266452789, -0.429739862680, + -0.430212795734, -0.430685311556, -0.431157380342, -0.431629002094, + -0.432100176811, -0.432570904493, -0.433041214943, -0.433511078358, + -0.433980494738, -0.434449523687, -0.434918075800, -0.435386240482, + -0.435853987932, -0.436321288347, -0.436788171530, -0.437254667282, + -0.437720745802, -0.438186407089, -0.438651651144, -0.439116477966, + -0.439580917358, -0.440044969320, -0.440508633852, -0.440971851349, + -0.441434711218, -0.441897183657, -0.442359238863, -0.442820936441, + -0.443282216787, -0.443743109703, -0.444203674793, -0.444663792849, + -0.445123583078, -0.445582956076, -0.446041971445, -0.446500629187, + -0.446958899498, -0.447416782379, -0.447874337435, -0.448331505060, + -0.448788315058, -0.449244767427, -0.449700862169, -0.450156599283, + -0.450611978769, -0.451067000628, -0.451521664858, -0.451975971460, + -0.452429950237, -0.452883571386, -0.453336834908, -0.453789770603, + -0.454242378473, -0.454694598913, -0.455146521330, -0.455598086119, + -0.456049323082, -0.456500232220, -0.456950783730, -0.457401037216, + -0.457850933075, -0.458300501108, -0.458749771118, -0.459198683500, + -0.459647268057, -0.460095554590, -0.460543513298, -0.460991144180, + -0.461438477039, -0.461885482073, -0.462332129478, -0.462778508663, + -0.463224560022, -0.463670313358, -0.464115768671, -0.464560896158, + -0.465005695820, -0.465450197458, -0.465894401073, -0.466338336468, + -0.466781944036, -0.467225223780, -0.467668235302, -0.468110918999, + -0.468553334475, -0.468995451927, -0.469437271357, -0.469878792763, + -0.470320016146, -0.470760941505, -0.471201598644, -0.471641957760, + -0.472082048655, -0.472521811724, -0.472961336374, -0.473400533199, + -0.473839461803, -0.474278151989, -0.474716484547, -0.475154578686, + -0.475592404604, -0.476029932499, -0.476467192173, -0.476904183626, + -0.477340877056, -0.477777302265, -0.478213489056, -0.478649377823, + -0.479084998369, -0.479520380497, -0.479955434799, -0.480390250683, + -0.480824828148, -0.481259107590, -0.481693148613, -0.482126891613, + -0.482560396194, -0.482993602753, -0.483426630497, -0.483859330416, + -0.484291791916, -0.484723985195, -0.485155940056, -0.485587626696, + -0.486019074917, -0.486450254917, -0.486881166697, -0.487311840057, + -0.487742304802, -0.488172471523, -0.488602399826, -0.489032089710, + -0.489461481571, -0.489890694618, -0.490319639444, -0.490748345852, + -0.491176784039, -0.491604983807, -0.492032945156, -0.492460697889, + -0.492888182402, -0.493315428495, -0.493742465973, -0.494169205427, + -0.494595766068, -0.495022058487, -0.495448112488, -0.495873928070, + -0.496299535036, -0.496724903584, -0.497150033712, -0.497574925423, + -0.497999608517, -0.498424023390, -0.498848229647, -0.499272227287, + -0.499695956707, -0.500119447708, -0.500542759895, -0.500965833664, + -0.501388669014, -0.501811325550, -0.502233743668, -0.502655923367, + -0.503077864647, -0.503499567509, -0.503921091557, -0.504342377186, + -0.504763484001, -0.505184292793, -0.505604982376, -0.506025373936, + -0.506445586681, -0.506865620613, -0.507285356522, -0.507704913616, + -0.508124232292, -0.508543372154, -0.508962333202, -0.509381055832, + -0.509799540043, -0.510217785835, -0.510635912418, -0.511053800583, + -0.511471390724, -0.511888861656, -0.512306094170, -0.512723147869, + -0.513139963150, -0.513556599617, -0.513972997665, -0.514389276505, + -0.514805316925, -0.515221118927, -0.515636682510, -0.516052126884, + -0.516467332840, -0.516882300377, -0.517297148705, -0.517711758614, + -0.518126130104, -0.518540382385, -0.518954396248, -0.519368171692, + -0.519781827927, -0.520195245743, -0.520608425140, -0.521021485329, + -0.521434307098, -0.521846950054, -0.522259414196, -0.522671699524, + -0.523083746433, -0.523495614529, -0.523907303810, -0.524318814278, + -0.524730086327, -0.525141239166, -0.525552153587, -0.525962889194, + -0.526373445988, -0.526783823967, -0.527194023132, -0.527603983879, + -0.528013765812, -0.528423428535, -0.528832852840, -0.529242098331, + -0.529651165009, -0.530060052872, -0.530468702316, -0.530877232552, + -0.531285583973, -0.531693756580, -0.532101750374, -0.532509565353, + -0.532917141914, -0.533324599266, -0.533731818199, -0.534138917923, + -0.534545779228, -0.534952521324, -0.535359084606, -0.535765469074, + -0.536171674728, -0.536577701569, -0.536983489990, -0.537389159203, + -0.537794649601, -0.538200020790, -0.538605153561, -0.539010107517, + -0.539414882660, -0.539819538593, -0.540224015713, -0.540628314018, + -0.541032433510, -0.541436374187, -0.541840136051, -0.542243719101, + -0.542647182941, -0.543050467968, -0.543453574181, -0.543856501579, + -0.544259250164, -0.544661879539, -0.545064270496, -0.545466542244, + -0.545868635178, -0.546270608902, -0.546672344208, -0.547073960304, + -0.547475457191, -0.547876715660, -0.548277854919, -0.548678755760, + -0.549079537392, -0.549480199814, -0.549880683422, -0.550280988216, + -0.550681114197, -0.551081120968, -0.551480948925, -0.551880598068, + -0.552280128002, -0.552679419518, -0.553078651428, -0.553477704525, + -0.553876519203, -0.554275274277, -0.554673850536, -0.555072247982, + -0.555470466614, -0.555868566036, -0.556266546249, -0.556664288044, + -0.557061910629, -0.557459414005, -0.557856678963, -0.558253884315, + -0.558650851250, -0.559047758579, -0.559444427490, -0.559840977192, + -0.560237407684, -0.560633659363, -0.561029732227, -0.561425685883, + -0.561821460724, -0.562217116356, -0.562612652779, -0.563007950783, + -0.563403189182, -0.563798189163, -0.564193129539, -0.564587831497, + -0.564982473850, -0.565376937389, -0.565771222115, -0.566165387630, + -0.566559433937, -0.566953301430, -0.567346990108, -0.567740559578, + -0.568134009838, -0.568527281284, -0.568920433521, -0.569313466549, + -0.569706320763, -0.570098996162, -0.570491552353, -0.570883989334, + -0.571276307106, -0.571668446064, -0.572060406208, -0.572452306747, + -0.572843968868, -0.573235571384, -0.573626995087, -0.574018299580, + -0.574409425259, -0.574800431728, -0.575191318989, -0.575582027435, + -0.575972676277, -0.576363086700, -0.576753377914, -0.577143609524, + -0.577533602715, -0.577923536301, -0.578313291073, -0.578702926636, + -0.579092383385, -0.579481780529, -0.579870998859, -0.580260038376, + -0.580649018288, -0.581037819386, -0.581426501274, -0.581815004349, + -0.582203447819, -0.582591712475, -0.582979857922, -0.583367824554, + -0.583755731583, -0.584143459797, -0.584531068802, -0.584918558598, + -0.585305869579, -0.585693120956, -0.586080193520, -0.586467146873, + -0.586853921413, -0.587240576744, -0.587627172470, -0.588013589382, + -0.588399887085, -0.588786005974, -0.589172065258, -0.589557945728, + -0.589943766594, -0.590329408646, -0.590714871883, -0.591100275517, + -0.591485500336, -0.591870665550, -0.592255651951, -0.592640519142, + -0.593025267124, -0.593409895897, -0.593794405460, -0.594178795815, + -0.594563007355, -0.594947099686, -0.595331132412, -0.595714986324, + -0.596098721027, -0.596482336521, -0.596865832806, -0.597249209881, + -0.597632408142, -0.598015546799, -0.598398566246, -0.598781406879, + -0.599164128304, -0.599546790123, -0.599929273129, -0.600311636925, + -0.600693881512, -0.601076066494, -0.601458072662, -0.601839959621, + -0.602221727371, -0.602603375912, -0.602984905243, -0.603366315365, + -0.603747546673, -0.604128718376, -0.604509770870, -0.604890704155, + -0.605271518230, -0.605652213097, -0.606032729149, -0.606413185596, + -0.606793522835, -0.607173740864, -0.607553839684, -0.607933819294, + -0.608313679695, -0.608693420887, -0.609073042870, -0.609452545643, +}; + +} /* namespace r12AX7 */ + +#endif /* _DSP_R_12_AX_7_H_ */ diff --git a/plugins/LadspaEffect/caps/dsp/sinc.h b/plugins/LadspaEffect/caps/dsp/sinc.h new file mode 100644 index 000000000..b002f234d --- /dev/null +++ b/plugins/LadspaEffect/caps/dsp/sinc.h @@ -0,0 +1,58 @@ +/* + dsp/sinc.h + + Copyright 2003-4 Tim Goetze + + http://quitte.de/dsp/ + + computes the sinc function: sin (x * pi) / (x * pi). + +*/ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA or point your web browser to http://www.gnu.org. +*/ + +#ifndef _SINC_H_ +#define _SINC_H_ + +#include "Sine.h" + +namespace DSP { + +/* sample sinc() with step size omega into s[], centered around s + n / 2 */ + +inline void +sinc (double omega, sample_t * s, int n) +{ + /* initial phase */ + double phi = (n / 2) * -omega; + + Sine sine (omega, phi); + + for (int i = 0; i < n; ++i, phi += omega) + { + double sin_phi = sine.get(); + + if (fabs (phi) < 0.000000001) + s[i] = 1.; + else + s[i] = sin_phi / phi; + } +} + +}; /* namespace DSP */ + +#endif /* _SINC_H_ */ diff --git a/plugins/LadspaEffect/caps/dsp/tonestack/ks_tab.h b/plugins/LadspaEffect/caps/dsp/tonestack/ks_tab.h new file mode 100644 index 000000000..19fc79d60 --- /dev/null +++ b/plugins/LadspaEffect/caps/dsp/tonestack/ks_tab.h @@ -0,0 +1,663 @@ +/* + ks_tab.h + + Copyright 2006 David Yeh + + http://quitte.de/dsp/ + + Tone Stack emulation coefficient table for lattice filter. + +*/ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA or point your web browser to http://www.gnu.org. +*/ + +#ifndef _KS_TAB_H_ +#define _KS_TAB_H_ + +namespace DSP { + +double ToneStackKS[] = { + -0.999655160907038,0.980127109825519,-0.614914419461634, + -0.999656568120978,0.980206907765841,-0.615188716843305, + -0.999658517676675,0.980317236486758,-0.615568128036899, + -0.999661208271173,0.98046907704722,-0.616090612857295, + -0.999664902023365,0.980676730894581,-0.616805748794314, + -0.999669936365576,0.980958270564762,-0.617776442867139, + -0.999676730565233,0.981335546377295,-0.619079214371838, + -0.999685778922586,0.981833264634174,-0.620801399623313, + -0.999697618702198,0.982476493745153,-0.623033027158334, + -0.999712758774516,0.983286007325851,-0.625851163451736, + -0.99973155988367,0.984271440446054,-0.629296281256582, + -0.999754076003002,0.98542354941219,-0.633344581005633, + -0.999779899796788,0.986708608367483,-0.637886397587646, + -0.999808088604521,0.988068846787513,-0.642724617436751, + -0.999837246275279,0.989431147988487,-0.647602282731862, + -0.999865773984939,0.990721953717012,-0.652254061004993, + -0.999892205612632,0.991882358316473,-0.656461274207081, + -0.999915487257858,0.992877246278541,-0.660087773487817, + -0.999935097854328,0.993696153431228,-0.663086394317218, + -0.999951003603908,0.994347891380557,-0.665481748921572, + -0.999963513493909,0.994852827640871,-0.667343004256292, + -0.999973116451418,0.995235942818388,-0.668758405977034, + -0.999980351396071,0.995522046602486,-0.669817209794174, + -0.99998572581668,0.995733179766024,-0.670599558951996, + -0.999989676414453,0.995887625130919,-0.671172389008809, + -0.99964958032362,0.979587583563023,-0.613841200571614, + -0.99965105886229,0.979673968717358,-0.614139015327499, + -0.99965310654599,0.979793345129979,-0.614550764884576, + -0.999655931261197,0.979957524247093,-0.615117419836355, + -0.999659806674729,0.980181839664558,-0.615892331666542, + -0.99966508402413,0.980485578112938,-0.616942906326338, + -0.999672197810492,0.980891896855617,-0.618350616306868, + -0.999681656900824,0.981426699112155,-0.620207543319113, + -0.999694008538874,0.982115787972737,-0.622607053883059, + -0.999709761087518,0.982979722321469,-0.625626413960214, + -0.999729257452251,0.984026477862534,-0.629301273863883, + -0.999752511640623,0.985243474991385,-0.633596859040439, + -0.999779056061162,0.98659232792421,-0.638387182556479, + -0.999807879344237,0.988010325656004,-0.643456796374595, + -0.999837527771197,0.989420506822037,-0.648533280922821, + -0.999866374253003,0.990747568499188,-0.653342756744767, + -0.999892960043297,0.991933070692341,-0.657666017256545, + -0.999916265897791,0.992943874252478,-0.661372461014463, + -0.999935816364322,0.993772030018927,-0.66442324414345, + -0.999951619581897,0.994428658432513,-0.666851256235163, + -0.999964015160231,0.994935885870011,-0.668732389522373, + -0.99997351033002,0.995319870362579,-0.67015970170105, + -0.999980652603298,0.995606135693424,-0.671225609758467, + -0.999985951820482,0.995817121286393,-0.672012217707519, + -0.999989843684551,0.995971315456801,-0.672587633075114, + -0.999643378423064,0.978985881492609,-0.612500740824184, + -0.999644936096075,0.979079752094198,-0.612825144699971, + -0.99964709260153,0.979209402031235,-0.613273429777593, + -0.999650065958286,0.979387576553966,-0.613889937311562, + -0.999654142524417,0.97963076347191,-0.614732221861648, + -0.99965968863373,0.97995959552602,-0.615872659651328, + -0.999667155309705,0.980398657679706,-0.617398123146777, + -0.999677066975389,0.980975122632538,-0.619405738241327, + -0.999689981074653,0.98171549955349,-0.621992177692255, + -0.999706404340016,0.982639946893981,-0.625234340260081, + -0.999726658923252,0.983754410258249,-0.629161826247319, + -0.999750714237359,0.985042459195097,-0.633727095084122, + -0.999778037042399,0.986460516399503,-0.638785891235472, + -0.999807542776699,0.9879405525597,-0.644102932677235, + -0.999837718122031,0.989401653230246,-0.649389757433484, + -0.999866908526907,0.990766919256306,-0.654364321488812, + -0.999893665267437,0.991978663173791,-0.658807867477182, + -0.999917006727609,0.993006014704747,-0.662596430819353, + -0.999936505324055,0.993843761495685,-0.665700368324747, + -0.999952212433419,0.994505470936323,-0.668161425658953, + -0.999964498892951,0.995015103003389,-0.670062547781078, + -0.999973890491138,0.995400030001749,-0.671501769244335, + -0.99998094346516,0.995686507256172,-0.672574743431766, + -0.9999861701193,0.995897381317078,-0.673365566060677, + -0.999990005274817,0.996051350521398,-0.673943527635947, + -0.999636497864097,0.978314250888013,-0.610868507178806, + -0.999638143609638,0.978416674858248,-0.611223133119698, + -0.999640421166529,0.978558054130414,-0.611712912678915, + -0.999643559753541,0.97875218877719,-0.612385977311627, + -0.999647859706568,0.979016862349941,-0.61330458074876, + -0.999653703893894,0.97937420403329,-0.614546606917925, + -0.999661561270341,0.979850359871836,-0.616204823882976, + -0.999671972845482,0.980473843383251,-0.618381706324296, + -0.99968550637702,0.981271816955761,-0.621177132648703, + -0.999702665524369,0.982263799418809,-0.624666899863223, + -0.999723748225852,0.983453256531511,-0.628873069633944, + -0.999748673996069,0.984819306197574,-0.63373324602853, + -0.99977683795445,0.98631258435924,-0.639082719486578, + -0.999807077565093,0.987859347100283,-0.644664781960943, + -0.999837817970182,0.989374645543676,-0.650174417628097, + -0.999867378328761,0.990780183969698,-0.655321967566108, + -0.999894323021703,0.992019364405147,-0.659890277895962, + -0.999917711372098,0.993063913192047,-0.663763240841613, + -0.999937166122597,0.993911596229206,-0.66692136936033, + -0.999952783288071,0.994578575143569,-0.669415879976423, + -0.999964965581412,0.995090721972347,-0.671337112690936, + -0.999974257618683,0.995476661471914,-0.672788249221993, + -0.999981224498276,0.995763398345879,-0.673868256393632, + -0.999986381097967,0.995974194795217,-0.674663253284672, + -0.999990161468935,0.996127963642263,-0.675243724730679, + -0.999628871599216,0.977563340625174,-0.608914428430414, + -0.999630615705312,0.977675597836713,-0.609303604497054, + -0.999633028378567,0.977830449102962,-0.609840779838346, + -0.999636351252157,0.978042891841267,-0.610578368059795, + -0.999640900093703,0.978332170312435,-0.611583898461033, + -0.999647075913584,0.978722082369623,-0.612941377384029, + -0.999655367140044,0.979240482054698,-0.614750017497272, + -0.999666332434044,0.979917290534043,-0.617117944354921, + -0.999680549835182,0.98078023709284,-0.62014804531906, + -0.999698518090521,0.981847892980184,-0.623914065384914, + -0.999720506814374,0.98312069692929,-0.628428717414309, + -0.999746379537056,0.9845726129935,-0.633612307993453, + -0.999775453078932,0.986147824972144,-0.639277222192053, + -0.999806481847782,0.987766463858197,-0.64514365014005, + -0.999837827653051,0.989339503078404,-0.650889614066351, + -0.999867784981983,0.990787512735525,-0.656218595909368, + -0.999894934895781,0.992055379434954,-0.660916404977201, + -0.999918381339343,0.993117793337578,-0.664876156724425, + -0.999937800054862,0.993975761434163,-0.668089558173762, + -0.999953333200393,0.99464819664376,-0.670617950121693, + -0.999965416056239,0.995162965417149,-0.672559425593145, + -0.999974612351636,0.995549984512892,-0.674022489490217, + -0.999981496185304,0.995837026254415,-0.675109501099312, + -0.999986585116092,0.996047777075045,-0.675908635241351, + -0.999990312531913,0.996201368691033,-0.676491582768135, + -0.999620420975775,0.976721799513297,-0.606601635017253, + -0.999622275355999,0.97684543733367,-0.607030558569431, + -0.999624839418341,0.977015864707194,-0.6076222077637, + -0.999628368599035,0.97724944539608,-0.608433858852205, + -0.999633195747874,0.977567077732237,-0.609538989890021, + -0.999639741820149,0.977994425988304,-0.611028434870471, + -0.999648516406429,0.978561213224713,-0.61300845746645, + -0.999660096906448,0.979298825518745,-0.615593120493524, + -0.999675071412884,0.980235426548642,-0.618887989909175, + -0.999693931427662,0.981388243122174,-0.622963529987665, + -0.999716913349402,0.982754019087567,-0.627820896963069, + -0.999743817730573,0.984300742606826,-0.633360240188853, + -0.999773875694897,0.985965403475005,-0.639368293929638, + -0.999805753219434,0.987661589920051,-0.64554040334027, + -0.999837747205987,0.989296206939276,-0.651537368871066, + -0.999868129620919,0.990789029644207,-0.657056822841524, + -0.999895502342668,0.992086891864035,-0.661889136757108, + -0.999919018029778,0.993167859006729,-0.66593818034046, + -0.999938408329249,0.994036465317501,-0.669207982776834, + -0.999953863156006,0.994714542470667,-0.671770703919781, + -0.999965851094207,0.995232037757674,-0.673732564308737, + -0.999974955287586,0.995620200909204,-0.675207573989099, + -0.999981758977838,0.995907590527414,-0.676301565758894, + -0.999986782510092,0.996118325926393,-0.677104803288624, + -0.999990458711745,0.996271762077857,-0.677690195455546, + -0.999611053343317,0.975775743039613,-0.603884796825947, + -0.999613031883562,0.975912650295233,-0.604359763835632, + -0.999615766283421,0.976101218495051,-0.6050144497913, + -0.999619527378512,0.976359379624739,-0.6059116832352, + -0.999624666982958,0.976709914051601,-0.607131681527055, + -0.999631628025413,0.977180580098539,-0.60877291769307, + -0.999640943108211,0.977803144860867,-0.610949372866091, + -0.999653209460591,0.978610499278102,-0.613781297332705, + -0.999669024734094,0.979631045031147,-0.617376419553776, + -0.99968887023538,0.980880152002991,-0.621800333065081, + -0.999712943314506,0.982350051181377,-0.627039935806544, + -0.999740973496636,0.984001791228723,-0.632971865481303, + -0.999772097994155,0.985764344142541,-0.639354138465182, + -0.999804888706456,0.987544341427899,-0.645855471952423, + -0.999837576362628,0.989244700363806,-0.652119392113297, + -0.999868413198854,0.990784834346404,-0.657839003408275, + -0.99989602668777,0.992114065717222,-0.662811117640661, + -0.99991962274449,0.993214296218098,-0.666952074995355, + -0.999938992074364,0.994093898965587,-0.670279453607488, + -0.999954374077029,0.994777802955718,-0.672876971494188, + -0.999966271422507,0.995298127015559,-0.674859368596826, + -0.999975286986133,0.995687496286005,-0.676346348241333, + -0.999982013298656,0.99597527473925,-0.677447299868145, + -0.99998697359497,0.996186023293375,-0.67825460983632, + -0.999990600240577,0.99633932449768,-0.678842417373446, + -0.999600659011736,0.974708035989579,-0.600707907614531, + -0.999602778010854,0.974860542895886,-0.601236618584895, + -0.999605704965998,0.975070410914491,-0.601964799208377, + -0.999609727957629,0.975357383329951,-0.602961655657006, + -0.999615219921094,0.975746392931787,-0.604315078325081, + -0.999622648047905,0.976267554594276,-0.606132115041143, + -0.999632569975118,0.976954867084367,-0.608535190817401, + -0.999645603825713,0.977842737024011,-0.61165092590881, + -0.999662355958282,0.978959518964467,-0.615588436744899, + -0.999683293758011,0.980318062023894,-0.6204063845804, + -0.999708568554593,0.981905078819314,-0.626074091503736, + -0.999737829566184,0.983673547947443,-0.63244074347204, + -0.99977011098019,0.985543514350578,-0.639232225924571, + -0.99980388473604,0.987414259071501,-0.646088848833459, + -0.999837314552659,0.989184888620582,-0.652637096558166, + -0.999868636494754,0.990775003339118,-0.658567251678203, + -0.999896509137097,0.992137047075131,-0.663684770297548, + -0.999920196692532,0.993257274825996,-0.667920387749179, + -0.999939552345391,0.99414823800866,-0.671306565983005, + -0.999954866827104,0.994838153363176,-0.673939367784046, + -0.999966677722521,0.995361406421881,-0.675942462717049, + -0.999975607971746,0.995752041693706,-0.677441441950547, + -0.99998225954412,0.996040248059161,-0.678549336835372, + -0.99998715866607,0.996251036846146,-0.679360690995204, + -0.9999907373361,0.996404222471088,-0.679950886641583, + -0.999589107344937,0.973497312875968,-0.597001294754147, + -0.999591386080871,0.973668328230434,-0.597593268842574, + -0.99959453183983,0.973903432400324,-0.598407851047308, + -0.999598852093593,0.974224475166901,-0.599521620766309, + -0.999604743382784,0.974658864441676,-0.601031250906323, + -0.999612699753767,0.97523937456658,-0.603053445209834, + -0.99962330608542,0.97600243259764,-0.605719853677987, + -0.999637202386439,0.976983924442916,-0.609163532904264, + -0.999655002388357,0.978211748419904,-0.613493851909141, + -0.999677154847819,0.979695369509032,-0.61875985885503, + -0.99970375671817,0.981414741216281,-0.624909211111447, + -0.999734366195928,0.983313445338257,-0.631759010565249, + -0.999767904348015,0.985301605206536,-0.638999236073545, + -0.99980273709838,0.987270802414969,-0.646240081512932, + -0.999836960897071,0.989116638466047,-0.653091609034812, + -0.999868800118624,0.990759590999243,-0.659243458364673, + -0.999896950784494,0.992155965496688,-0.664512315028276, + -0.999920740997713,0.993296950004936,-0.668845469230266, + -0.999940090129518,0.994199644092504,-0.672291720044044, + -0.99995534221587,0.994895755336471,-0.674960312547262, + -0.999967070633483,0.995422035839287,-0.676984275473309, + -0.999975918736602,0.9958139950097,-0.678495289077025, + -0.99998249808615,0.996102666636638,-0.679610114082481, + -0.999987338000502,0.996313521353591,-0.680425486697752, + -0.999990870202646,0.996466609707338,-0.681018045054702, + -0.999576241686749,0.972116617749095,-0.592677524712023, + -0.99957870315305,0.97230982067096,-0.593344669475996, + -0.999582098983777,0.972575129825707,-0.594261769514429, + -0.999586758554847,0.972936863320769,-0.595513988772127, + -0.999593104888038,0.97342529174051,-0.597208109144451, + -0.999601661826924,0.974076198024372,-0.599471740073253, + -0.999613043888958,0.974928635484012,-0.602446577711838, + -0.999627913819039,0.97601985787081,-0.606271990784749, + -0.999646890735495,0.977376723720224,-0.611055959085039, + -0.999670398812179,0.979004185472482,-0.616834417946938, + -0.999698470581005,0.980873900666029,-0.623528301373912, + -0.999730560827483,0.982918498660264,-0.630917179784869, + -0.999765466341961,0.985037108077224,-0.638650985611181, + -0.999801440901162,0.987113342915257,-0.646308258106163, + -0.999836514200741,0.989039777153926,-0.653483778621958, + -0.99986890451577,0.990738630386345,-0.659869306066888, + -0.999897352618159,0.992170935258235,-0.665295786916716, + -0.999921256704574,0.993333463562061,-0.669729491261027, + -0.999940606351128,0.994248266182805,-0.673237138510218, + -0.999955801003116,0.994950758180636,-0.675942048171054, + -0.999967450755683,0.99548016302305,-0.677987058060857, + -0.999976219742873,0.995873502181361,-0.679510145713319, + -0.999982729274098,0.99616267482996,-0.680631890943183, + -0.999987511858705,0.996373619900609,-0.681451258613912, + -0.999990999032129,0.996526628313089,-0.682046156011673, + -0.99956187268433,0.970531479526377,-0.587625703122706, + -0.999564544561613,0.970751592835626,-0.588383112630484, + -0.999568228052843,0.971053471010611,-0.589423118267952, + -0.99957327740021,0.971464348435104,-0.590840956059624, + -0.999580145454236,0.972017826647422,-0.592755112731153, + -0.999589389203159,0.972753097820726,-0.595305546336125, + -0.999601655385005,0.973712026201297,-0.59864482915026, + -0.999617630085655,0.97493300368958,-0.602918212146777, + -0.99963793493872,0.976441017872316,-0.608229928386846, + -0.999662961985651,0.978235025410733,-0.614598209635963, + -0.999692667221772,0.980276477231159,-0.621910984287905, + -0.999726387678802,0.982485230710179,-0.62990389083695, + -0.999762783587337,0.984748286160729,-0.638182336737736, + -0.999799990515491,0.986941155449722,-0.646291986463415, + -0.9998359729422,0.988954090981809,-0.653814181774226, + -0.999868949969855,0.990712133831788,-0.660446282379072, + -0.999897715526312,0.992182056431122,-0.666037051039227, + -0.999921744783971,0.99336694509957,-0.670574462569404, + -0.999941101876438,0.994294241723863,-0.674144882521851, + -0.999956243902449,0.995003300002107,-0.676886655565201, + -0.999967818653287,0.99553592474197,-0.678952899992532, + -0.999976511425167,0.995930698330922,-0.680488106036015, + -0.999982953436508,0.996220406298199,-0.681616764634929, + -0.999987680485395,0.996431464970127,-0.682440106138711, + -0.999991124005049,0.996584409866817,-0.683037320515038, + -0.999545769372832,0.968697129881683,-0.581703389413761, + -0.999548685330482,0.968950318756053,-0.582570485078089, + -0.999552702131166,0.969297052285561,-0.583759569216554, + -0.999558202401447,0.969768041680857,-0.585377795072816, + -0.999565672738884,0.970400788413801,-0.587557285815401, + -0.99957570708997,0.971238349112145,-0.590452006519345, + -0.999588987158165,0.972325543365669,-0.594226183799786, + -0.999606222572019,0.973701485409508,-0.59903003585127, + -0.999628033400377,0.97538810561202,-0.604960671497707, + -0.999654769948043,0.977376402599708,-0.612012563238519, + -0.999686297011813,0.979615237602125,-0.620032803668798, + -0.999721817252862,0.982009578441646,-0.62870559790186, + -0.999759840891314,0.984433140013485,-0.637587083446276, + -0.999798379512054,0.986753408121981,-0.646189365889778, + -0.999835335260595,0.988859323349258,-0.654083124451187, + -0.999868936604779,0.990680093327157,-0.660975691075208, + -0.999898040302297,0.992189415816235,-0.666737815961683, + -0.99992220613798,0.99339751304594,-0.671382242820988, + -0.999941577517616,0.994337697670144,-0.675016865803864, + -0.999956671584689,0.995053508724011,-0.677796068374459, + -0.999968174857054,0.995589447776921,-0.679883743341079, + -0.999976794192393,0.995985708739766,-0.681431116570944, + -0.999983170882486,0.996275984974083,-0.682566684542184, + -0.999987844111017,0.996487179407059,-0.683393980689551, + -0.999991245291239,0.996640076376014,-0.683993491478984, + -0.999527647068028,0.966554383008803,-0.574724879596308, + -0.999530848539975,0.966848851405444,-0.575727078537408, + -0.99953525472567,0.967251434416085,-0.57709940504731, + -0.999541280848263,0.967797029601554,-0.578963243130562, + -0.999549451864263,0.968527732682652,-0.581466703366014, + -0.999560403023074,0.969490971729293,-0.584779644783603, + -0.999574853846751,0.970734576829317,-0.589078562311174, + -0.999593537066634,0.972297674431688,-0.59451695807115, + -0.999617065445341,0.974197436159595,-0.601179970724196, + -0.999645735282156,0.97641428827226,-0.609030274548682, + -0.999679302369117,0.978881522835187,-0.617864335613826, + -0.99971681574429,0.981486776171256,-0.62730617857504, + -0.999756621007015,0.98408936563692,-0.636857810951617, + -0.999796600586004,0.986549150056454,-0.645997950543695, + -0.99983459893934,0.988755172290888,-0.654290641249287, + -0.999868864385614,0.990642480721143,-0.661458661540686, + -0.999898327649026,0.992193087751127,-0.66739964572281, + -0.999922641604418,0.9934252755721,-0.672154555174154, + -0.999942034036786,0.994378751406568,-0.675854867355025, + -0.999957084680973,0.995101502992542,-0.678672085713889, + -0.999968519866798,0.995640849812384,-0.68078139550167, + -0.999977068429707,0.996038649727251,-0.682340988976285, + -0.999983381903268,0.996329525932602,-0.683483465015717, + -0.999988002952587,0.996540877278988,-0.684314698518073, + -0.99999136305069,0.996693741131828,-0.684916486550783, + -0.999507150598248,0.964023361778569,-0.566443805631269, + -0.999510689256673,0.964370271326711,-0.567615024684631, + -0.999515554615236,0.964843610477965,-0.569216045936927, + -0.999522199580942,0.965483372059577,-0.571385418568372, + -0.999531192926903,0.966337094760156,-0.574290114034592, + -0.999543216143162,0.967457120290353,-0.578117988726243, + -0.999559029420708,0.968894166267862,-0.583058050119345, + -0.999579387147137,0.970686191408446,-0.589264179491485, + -0.999604886734295,0.972843149467847,-0.596802560696606, + -0.999635754725745,0.975331385211999,-0.605593323611265, + -0.999671616210287,0.978064893520965,-0.615370037541993, + -0.999711344319248,0.980911208410932,-0.625686441819605, + -0.999753104353326,0.983714303325128,-0.635985722329208, + -0.999794645469085,0.986327296819486,-0.645714703351608, + -0.999833761386482,0.988641287435787,-0.654436491473955, + -0.999868733118323,0.990599247730616,-0.661896156590664, + -0.999898578182872,0.992193134802953,-0.66802397047431, + -0.99992305196103,0.993450331406395,-0.672892997532942, + -0.999942472149362,0.994417511571143,-0.676660542838115, + -0.999957483785679,0.995147392987777,-0.679516383603064, + -0.999968854153534,0.995690240234068,-0.681647540650936, + -0.999977334500213,0.99608962943699,-0.683219411520137, + -0.999983586773378,0.99638113616817,-0.684368796864731, + -0.999988157214811,0.996592664646218,-0.685203952213579, + -0.999991477434319,0.996745509473735,-0.685807999622806, + -0.999483830537178,0.96099363273767,-0.556526558132353, + -0.999487771824971,0.961408567503047,-0.557913085833148, + -0.99949318453032,0.961973392338345,-0.559804618374626, + -0.999500565445448,0.962734373879405,-0.562360637123727, + -0.99951053364941,0.963745527570854,-0.565770491848824, + -0.999523822447645,0.965064639052157,-0.570242285359762, + -0.999541235335364,0.96674484954275,-0.575977037252997, + -0.999563545337433,0.968821009537295,-0.583124143295505, + -0.999591323245939,0.971292265484483,-0.59172069161267, + -0.999624705516342,0.974106135226471,-0.601629796724883, + -0.999663160011883,0.977152661845667,-0.612506744011134, + -0.999705358236516,0.980276222869867,-0.623823505106148, + -0.999749268681416,0.983304874940093,-0.634960424679979, + -0.999792504826671,0.98608661301415,-0.645335938947312, + -0.999832819611289,0.988517266330941,-0.654520152023392, + -0.999868542448472,0.990550325768389,-0.662288978786769, + -0.999898792436992,0.992189608358322,-0.668612095924406, + -0.999923437929053,0.993472770560181,-0.673599052648918, + -0.999942892527405,0.994454078791728,-0.67743543482306, + -0.999957869458855,0.995191281150468,-0.680330525251589, + -0.999969178161553,0.995737720843995,-0.682483750055223, + -0.999977592746505,0.996138748541774,-0.684067959405521, + -0.999983785751949,0.996430915291374,-0.685224257694965, + -0.999988307090768,0.996642640252181,-0.686063321051298, + -0.999991588584531,0.996795479475092,-0.686669611188537, + -0.999457108562801,0.957308100330452,-0.544510348254195, + -0.999461536891738,0.957813496974774,-0.546177043093093, + -0.999467610348739,0.958499509739162,-0.548445349392839, + -0.99947587724496,0.959420224561283,-0.551500575623861, + -0.999487014706649,0.96063737454455,-0.555558738396518, + -0.999501814057202,0.962214593042568,-0.560850379360616, + -0.999521124121701,0.964206335982036,-0.567586594383798, + -0.999545731079106,0.966641151433838,-0.575904240780955, + -0.99957616326672,0.969502075922418,-0.585796443590518, + -0.999612440645105,0.97271133966764,-0.597049671898101, + -0.999653841360903,0.97612926634827,-0.609221678375412, + -0.999698805768044,0.979573890622481,-0.621690000135093, + -0.999745088676003,0.98285750656369,-0.633769664809452, + -0.999790168137297,0.985825691481262,-0.644857253738139, + -0.999831770196654,0.988382650050448,-0.654540806884388, + -0.999868291858835,0.990495625586984,-0.662637775338392, + -0.999898970864313,0.99218254911945,-0.669165211711007, + -0.999923800176717,0.993492674974405,-0.674274097203207, + -0.999943295802393,0.99448854634705,-0.678180982015034, + -0.999958242228691,0.995233262834796,-0.681115970328253, + -0.999969492310313,0.995783386502816,-0.683291491360672, + -0.9999778434921,0.996186100876788,-0.684888104075612, + -0.999983979083579,0.996478956154855,-0.686051321225753, + -0.999988452762854,0.996690896143604,-0.686894280318611, + -0.999991696635762,0.996843742558989,-0.687502797675764, + -0.99942622519677,0.95273551376525,-0.52973445342276, + -0.999431251888513,0.953364890065364,-0.531775078248324, + -0.999438135127102,0.954216205818819,-0.534544256478421, + -0.999447484232229,0.955353409604379,-0.538259555819354, + -0.999460043610956,0.956847382797287,-0.543168806764506, + -0.999476669294355,0.958767617957035,-0.549526631433258, + -0.999498256120107,0.961167548841825,-0.557549533893376, + -0.999525594039106,0.96406411345337,-0.567348498477478, + -0.99955914655047,0.967416296772765,-0.578850629984727, + -0.999598782612736,0.971112205090269,-0.591738948908515, + -0.999643550828683,0.974975424245401,-0.605449790438815, + -0.999691626863873,0.978794695326964,-0.619253051210138, + -0.999740535476891,0.982368032503499,-0.632399001290434, + -0.999787623551576,0.985542928393217,-0.644273440690982, + -0.999830609266859,0.988236917993668,-0.654497332961353, + -0.999867980665878,0.990435036734623,-0.662943041651411, + -0.999899113839826,0.992171987514358,-0.669684398813115, + -0.99992413932228,0.993510119095966,-0.674919409982818, + -0.999943682568059,0.994521000760791,-0.678898527582435, + -0.999958602593663,0.995273426895692,-0.681874083329038, + -0.999969796996008,0.995827325707849,-0.684072136980539, + -0.999978087042701,0.996231774009489,-0.685681221614805, + -0.999984166999591,0.996525345416597,-0.686851365701776, + -0.999988594403447,0.996737518228668,-0.687698209735077, + -0.99999180171517,0.996890384052486,-0.68830893987291, + -0.999390157426463,0.946920942804295,-0.51122226313308, + -0.999395933441802,0.947726692929812,-0.513777573628096, + -0.999403827648663,0.948811777610072,-0.51723281658354, + -0.999414522275239,0.950252708159809,-0.521846337183872, + -0.999428839936587,0.952130988141452,-0.527903696028361, + -0.999447708094207,0.954520972605718,-0.535683534220698, + -0.999472065554197,0.957470350228495,-0.545397862094965, + -0.999502690391198,0.960975483022857,-0.557109508368084, + -0.999539949364454,0.964959236107952,-0.570646385943978, + -0.999583515091451,0.969263514061787,-0.585551315111654, + -0.999632157937203,0.973666963417248,-0.601110139814965, + -0.999683751487941,0.977927125893571,-0.616472948214351, + -0.999735576101922,0.981831575297115,-0.630831395552119, + -0.999784857726637,0.985236493339534,-0.643578385785915, + -0.999829332450153,0.988079481753197,-0.65438828186954, + -0.999867608015024,0.990368426816476,-0.663205123565136, + -0.999899221662683,0.992157944027575,-0.670170636093868, + -0.999924455936773,0.99352517039157,-0.675536179250677, + -0.999944053382784,0.994551522336392,-0.679589326684972, + -0.999958951024577,0.995311856218264,-0.682606141144479, + -0.999970092593324,0.995869621114249,-0.684826971680466, + -0.999978323687495,0.996275849753412,-0.686448600346481, + -0.999984349718736,0.996570164047781,-0.687625681500497, + -0.99998873217569,0.996782586780245,-0.68847640106736, + -0.999991903942978,0.996935483686355,-0.689089330549666, + -0.999347481117801,0.939290459494334,-0.487467495756698, + -0.999354218814845,0.940359291937983,-0.490758827061018, + -0.999363405293717,0.94179042102576,-0.495189208987614, + -0.99937581067759,0.943676400697521,-0.501069025782312, + -0.999392348372638,0.946110332967342,-0.508727587294775, + -0.999414022815505,0.949167962851339,-0.518463101634253, + -0.999441809315305,0.952881721565543,-0.530462948663941, + -0.999476448137069,0.957211904308363,-0.544703949914482, + -0.999518163390315,0.962026671148328,-0.560864218500752, + -0.999566371599233,0.9671054278198,-0.578296052160285, + -0.999619505889223,0.972173183572955,-0.596100902764443, + -0.999675097525905,0.976957135851488,-0.613301403710775, + -0.999730172747202,0.981242394512128,-0.629046698844639, + -0.999781855631441,0.984904293259831,-0.64276494225858, + -0.999827934835346,0.987909677906738,-0.654211857218486, + -0.999867172874756,0.990295640550794,-0.663424218297065, + -0.999899294557703,0.992140429456527,-0.670624806055411, + -0.999924750546524,0.99353788980571,-0.676125509396204, + -0.999944408771816,0.994580185639227,-0.680254553289513, + -0.999959287966352,0.99534862819584,-0.683313339914276, + -0.999970379456712,0.995910350005688,-0.685557199449765, + -0.999978553700145,0.996318404632234,-0.687191447715675, + -0.99998452744805,0.996613487791505,-0.688375478023611, + -0.999988866233908,0.996826176890439,-0.689230065027467, + -0.999992003433048,0.996979116046436,-0.689845181360383, + -0.99929612221311,0.92885164154965,-0.456019541351542, + -0.999304136012349,0.930338079224207,-0.460415923605211, + -0.999315027665755,0.932312945848239,-0.466298906238068, + -0.99932967386815,0.934888870826995,-0.474045380275375, + -0.999349092121395,0.938169262151671,-0.484032087617024, + -0.999374365071002,0.942221624043521,-0.496561507953729, + -0.999406486153652,0.947043569031187,-0.511755566566498, + -0.999446114575041,0.952531828519665,-0.529439310857211, + -0.999493265137843,0.95847104464828,-0.549062847224271, + -0.999547019807701,0.964557081761264,-0.56972004770415, + -0.999605404586501,0.970454509503382,-0.590292352063801, + -0.999665568129688,0.975867415739172,-0.609679235305811, + -0.999724281933513,0.980593694544417,-0.627021003888902, + -0.999778600317221,0.984543928761683,-0.641824777683263, + -0.999826410921627,0.987726759554179,-0.653965886787326, + -0.999866674029357,0.990216498606079,-0.663600374094058, + -0.999899332676593,0.992119445097779,-0.671047699874178, + -0.999925023635529,0.99354833216856,-0.676688426942388, + -0.99994474922943,0.994607059931934,-0.680895306350511, + -0.999959613839686,0.995383815162353,-0.683996801246194, + -0.999970657921832,0.99594958472018,-0.686263949735904, + -0.999978777339898,0.996359510299634,-0.687910896533956, + -0.999984700383703,0.996655387577793,-0.689101889949892, + -0.999988996724424,0.996868358881836,-0.689960337531757, + -0.999992100293264,0.997021350982018,-0.690577629107776, + -0.999232852507766,0.913727519036899,-0.412606853125446, + -0.999242645398387,0.915935956793934,-0.41877234970756, + -0.999255893862801,0.918837586526089,-0.426956504255908, + -0.999273602979233,0.922567693783475,-0.437619185024585, + -0.999296904214589,0.927230536454782,-0.451177895602595, + -0.999326946918226,0.932859625501621,-0.467896904643251, + -0.999364701514127,0.939375916610792,-0.487748118687341, + -0.999410673041913,0.946562446165056,-0.510287421562708, + -0.999464570104078,0.95407637777001,-0.534615408125632, + -0.999525039284739,0.961506490361475,-0.559480266158481, + -0.999589621231223,0.968459052306018,-0.583516782465201, + -0.999655048311424,0.97463639862061,-0.605533240844905, + -0.999717853458056,0.979877377924312,-0.62472581872234, + -0.999775072645767,0.984152640941173,-0.640748187551763, + -0.999824754560624,0.987529886381108,-0.653647788844286, + -0.999866110070261,0.990130796201362,-0.663733488567256, + -0.999899336098702,0.992094982866248,-0.671440021774989, + -0.999925275647391,0.993556546558814,-0.677225885975937, + -0.999945075220809,0.994632209568016,-0.681512615422448, + -0.999959929042703,0.99541748478404,-0.684657577866916, + -0.999970928306749,0.995987393035966,-0.686948283109992, + -0.99997899485255,0.996399233919776,-0.688608010654417, + -0.999984868711673,0.996695929899694,-0.689805982917444, + -0.999989123785848,0.996909198680171,-0.690668285388792, + -0.99999219462584,0.997062253975925,-0.691287741435037, + -0.999152077060728,0.889889548444139,-0.349061088286487, + -0.999164564481812,0.893512362357241,-0.358321392850279, + -0.999181328175061,0.89819090051193,-0.370471779013374, + -0.999203519013022,0.904073370874581,-0.386063949868755, + -0.999232372094478,0.911225741593758,-0.405512187944769, + -0.999269054494269,0.919575847587998,-0.428928148710386, + -0.999314422562479,0.928873757841218,-0.455951377537584, + -0.999368702795487,0.938696629074492,-0.485653574382402, + -0.999431161107827,0.948513477384418,-0.516600823762431, + -0.999499889019962,0.957794017950755,-0.547100205403036, + -0.999571867439423,0.966117436282565,-0.575553712340007, + -0.999643400523047,0.973236877263828,-0.600771919790487, + -0.999710829097846,0.979083725305741,-0.622127004150167, + -0.999771250966691,0.983727246264749,-0.639523867161234, + -0.999822958889432,0.987318112980124,-0.653254531680796, + -0.999865479385908,0.990038301447359,-0.663823305665926, + -0.999899304831475,0.992067025349649,-0.67180239279328, + -0.999925506987289,0.993562576625782,-0.677738773058922, + -0.999945387183711,0.994655694348136,-0.682107445763671, + -0.999960233952359,0.995449700414856,-0.685296658764391, + -0.999971190912995,0.996023838521735,-0.687611196422924, + -0.999979206471127,0.996437638512654,-0.689283790136547, + -0.999985032608414,0.996735177154657,-0.690488758695185, + -0.999989247549769,0.996948758152623,-0.691354911475921, + -0.999992286527841,0.997101886480435,-0.691976522006297, + -0.999042007259475,0.846839476355646,-0.247562606935731, + -0.999059310027056,0.853850930614133,-0.262993110426348, + -0.99908215215834,0.862634865772264,-0.282874416523585, + -0.999111791350179,0.873267701688246,-0.307799227855353, + -0.999149460274721,0.885615899778428,-0.337997269244, + -0.999196176211498,0.89928385557361,-0.373105577817442, + -0.999252479946996,0.913630787322957,-0.412017325303364, + -0.999318122840983,0.927874730147937,-0.452924609459096, + -0.9993917698708,0.941254666200446,-0.493608708966554, + -0.999470858355026,0.953184064404172,-0.531898307960971, + -0.999551781187113,0.963334777927113,-0.566107560700536, + -0.999630458843132,0.971634043939743,-0.595279512665676, + -0.999703140993037,0.978200975484896,-0.619183392925497, + -0.999767110732338,0.983264056319206,-0.638138631171118, + -0.999821016253149,0.987090375099302,-0.652782585207141, + -0.999864780149848,0.989938753401259,-0.663869411221801, + -0.999899238810493,0.992035545799555,-0.672135353966679, + -0.999925718023562,0.993566460874601,-0.678227911673286, + -0.999945685530231,0.99467756984301,-0.682680702983936, + -0.999960528925675,0.995480521419424,-0.685914973874208, + -0.999971446026693,0.996058980854992,-0.688253627504821, + -0.999979412416931,0.996474783268042,-0.689939175953683, + -0.999985192241392,0.996773187954865,-0.69115115989633, + -0.999989368141114,0.996987095415323,-0.692021159457422, + -0.999992376091346,0.997140306222664,-0.692644915228308, + -0.998865086928174,0.745924580066976,-0.0604141480564288, + -0.998895487231205,0.764873649745473,-0.0910755754690588, + -0.998933409668284,0.787060755596958,-0.129313938502959, + -0.998979684019541,0.81184986561543,-0.175344827159791, + -0.99903493644843,0.83813626350615,-0.228455101442363, + -0.999099521125361,0.864509230253996,-0.286815983154912, + -0.999173362695985,0.889538052977561,-0.347607059890004, + -0.999255664139382,0.912066866492635,-0.407502232575221, + -0.999344565973438,0.931397810612656,-0.463365245732482, + -0.99943698944938,0.94731384445106,-0.512864721985471, + -0.999528900858466,0.959977803907794,-0.554772924977228, + -0.999616021217074,0.969782650772129,-0.588907534659359, + -0.999694709613298,0.977214767105395,-0.615844974558559, + -0.999762624036077,0.982758778214894,-0.636577066889482, + -0.999818918115288,0.986845473409128,-0.652227863178924, + -0.999864010307122,0.989831859802084,-0.663871226969659, + -0.999899137899114,0.992000508059639,-0.672439368989748, + -0.999925909089307,0.993568232917785,-0.6786940662434, + -0.999945970648199,0.994697887686373,-0.68323323728191, + -0.999960814301116,0.995510003466929,-0.686513398356392, + -0.99997169391947,0.996092876111869,-0.688876459454257, + -0.999979612900072,0.996510723831304,-0.690575054289614, + -0.999985347769733,0.996810017409768,-0.69179407428053, + -0.999989485678529,0.997024265113336,-0.69266791809088, + -0.999992463403904,0.997177567482597,-0.693293810560046, + -0.998168670041896,0.234202002930654,0.397757295018613, + -0.998398779709349,0.385186319412462,0.309863134853804, + -0.998576095338357,0.517988723723858,0.208214440973434, + -0.998719357216826,0.629703569518859,0.096222948116353, + -0.998842476527936,0.720203330951345,-0.0207601551784617, + -0.998955556213729,0.791300079843907,-0.136348134920346, + -0.999065378019792,0.845813571958666,-0.24445016793907, + -0.999175567184225,0.88683389735994,-0.340477179725281, + -0.999286737933873,0.917262868364474,-0.421953754912466, + -0.999396947303236,0.939594279052761,-0.488436998558289, + -0.999502626750312,0.955853286353504,-0.540978607500742, + -0.999599838919708,0.967622793392235,-0.581462483326913, + -0.999685441175006,0.976107385917766,-0.612050478470221, + -0.999757759055763,0.982206390023536,-0.634821102862626, + -0.999816654953809,0.986582054280449,-0.651585654275972, + -0.999863167558551,0.989717294446952,-0.663828002921204, + -0.999899001887773,0.991961866430869,-0.672714826358979, + -0.999926080483689,0.993567921696033,-0.679137945776486, + -0.999946242902525,0.994716695840987,-0.683765847313538, + -0.999961090399614,0.995538198798929,-0.687092756503707, + -0.999971934849436,0.996125577031366,-0.689480524558436, + -0.999979808120392,0.996545512563991,-0.691192260465585, + -0.999985499344625,0.996845717383694,-0.692418338685915, + -0.999989600274749,0.997060318675938,-0.693296025163123, + -0.999992548548667,0.997213721346586,-0.693924046451602 +}; + +} /* namespace DSP */ + +#endif /* _KS_TAB_H_ */ diff --git a/plugins/LadspaEffect/caps/dsp/tonestack/tables.h b/plugins/LadspaEffect/caps/dsp/tonestack/tables.h new file mode 100644 index 000000000..bbfbd94e2 --- /dev/null +++ b/plugins/LadspaEffect/caps/dsp/tonestack/tables.h @@ -0,0 +1,38 @@ +/* + ks_tab.h + + Copyright 2006 David Yeh + + http://quitte.de/dsp/ + + Tone Stack emulation coefficient table for lattice filter. + +*/ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA or point your web browser to http://www.gnu.org. +*/ + +#ifndef _TS_TABLES_H_ +#define _TS_TABLES_H_ + +namespace DSP { + +extern double ToneStackKS[]; +extern double ToneStackVS[]; + +} /* namespace DSP */ + +#endif /* _TS_TABLES_H_ */ diff --git a/plugins/LadspaEffect/caps/dsp/tonestack/vs_tab.h b/plugins/LadspaEffect/caps/dsp/tonestack/vs_tab.h new file mode 100644 index 000000000..b266ee71a --- /dev/null +++ b/plugins/LadspaEffect/caps/dsp/tonestack/vs_tab.h @@ -0,0 +1,15664 @@ +/* + vs_tab.h + + Copyright 2006 David Yeh + + http://quitte.de/dsp/ + + Tone Stack emulation coefficient table for lattice filter. + +*/ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA or point your web browser to http://www.gnu.org. +*/ + + +#ifndef _VS_TAB_H_ +#define _VS_TAB_H_ + +namespace DSP { + +double ToneStackVS[] = { + -9.45385446026598e-06,-0.00655412425867525,0.0132200144354443,0.0102188726276126, + -1.24191436832038e-05,-0.00586705925752717,0.0294688298274704,-0.0216003374232777, + -1.53844329061348e-05,-0.00517999425637911,0.0457176452194964,-0.053419547474168, + -1.83497221290796e-05,-0.00449292925523104,0.0619664606115225,-0.0852387575250582, + -2.13150113519966e-05,-0.00380586425408297,0.0782152760035486,-0.117057967575949, + -2.42803005748859e-05,-0.00311879925293479,0.0944640913955747,-0.148877177626839, + -2.72455897978585e-05,-0.00243173425178678,0.110712906787601,-0.180696387677729, + -3.02108790207201e-05,-0.00174466925063865,0.126961722179627,-0.212515597728619, + -3.31761682436094e-05,-0.00105760424949042,0.143210537571653,-0.24433480777951, + -3.61414574664987e-05,-0.000370539248342183,0.159459352963679,-0.2761540178304, + -3.9106746689721e-05,0.000316525752805275,0.175708168355705,-0.30797322788129, + -4.20720359125548e-05,0.0010035907539534,0.191956983747731,-0.339792437932181, + -4.50373251356662e-05,0.00169065575510152,0.208205799139757,-0.371611647983071, + -4.80026143581114e-05,0.00237772075625009,0.224454614531783,-0.403430858033961, + -5.09679035813893e-05,0.00306478575739821,0.24070342992381,-0.435250068084851, + -5.3933192804112e-05,0.00375185075854612,0.256952245315835,-0.467069278135742, + -5.68984820269458e-05,0.00443891575969446,0.273201060707862,-0.498888488186632, + -5.98637712498906e-05,0.00512598076084236,0.289449876099888,-0.530707698237522, + -6.28290604727244e-05,0.00581304576199071,0.305698691491914,-0.562526908288412, + -6.57943496960023e-05,0.00650011076313839,0.32194750688394,-0.594346118339303, + -6.87596389189471e-05,0.00718717576428629,0.338196322275966,-0.626165328390193, + -7.17249281420029e-05,0.00787424076543397,0.354445137667992,-0.657984538441083, + -7.46902173648367e-05,0.00856130576658254,0.370693953060018,-0.689803748491973, + -7.76555065876705e-05,0.00924837076773066,0.386942768452044,-0.721622958542864, + -8.06207958105043e-05,0.00993543576887879,0.40319158384407,-0.753442168593754, + -9.41939857081013e-06,-0.00655319504622455,0.0132268917091642,0.0102210248142172, + -1.23601628603601e-05,-0.00586780948081826,0.0294548118993129,-0.0216122564867453, + -1.53009271499499e-05,-0.00518242391541199,0.0456827320894617,-0.0534455377877077, + -1.82416914396022e-05,-0.00449703835000587,0.0619106522796104,-0.0852788190886702, + -2.11824557291018e-05,-0.0038116527845995,0.0781385724697592,-0.117112100389633, + -2.41232200187957e-05,-0.00312626721919329,0.094366492659908,-0.148945381690595, + -2.70639843083231e-05,-0.00244088165378709,0.110594412850057,-0.180778662991558, + -3.00047485976007e-05,-0.00175549608838033,0.126822333040206,-0.21261194429252, + -3.29455128875722e-05,-0.00107011052297457,0.143050253230354,-0.244445225593482, + -3.58862771771551e-05,-0.000384724957568361,0.159278173420503,-0.276278506894445, + -3.8827041466738e-05,0.000300660607837733,0.175506093610652,-0.308111788195407, + -4.17678057565429e-05,0.000986046173243826,0.191734013800801,-0.33994506949637, + -4.47085700459038e-05,0.00167143173865036,0.207961933990949,-0.371778350797332, + -4.76493343355422e-05,0.00235681730405624,0.224189854181098,-0.403611632098295, + -5.05900986250696e-05,0.00304220286946277,0.240417774371247,-0.435444913399257, + -5.35308629144859e-05,0.00372758843486909,0.256645694561396,-0.46727819470022, + -5.64716272042354e-05,0.00441297400027518,0.272873614751544,-0.499111476001182, + -5.94123914935407e-05,0.00509835956568172,0.289101534941693,-0.530944757302145, + -6.23531557831791e-05,0.00578374513108781,0.305329455131842,-0.562778038603107, + -6.52939200728175e-05,0.00646913069649413,0.32155737532199,-0.594611319904069, + -6.8234684362567e-05,0.00715451626190022,0.337785295512139,-0.626444601205032, + -7.11754486519833e-05,0.00783990182730676,0.354013215702288,-0.658277882505994, + -7.41162129419548e-05,0.00852528739271241,0.370241135892437,-0.690111163806957, + -7.70569772319263e-05,0.00921067295811806,0.386469056082585,-0.721944445107919, + -7.99977415204545e-05,0.00989605852352593,0.402696976272735,-0.753777726408882, + -9.37160003060961e-06,-0.00655190758967857,0.0132364072721412,0.0102240017427008, + -1.22785730753069e-05,-0.00586885694194833,0.0294354064091315,-0.0216287430680944, + -1.51855461200251e-05,-0.00518580629421808,0.0456344055461219,-0.0534814878788896, + -1.80925191646669e-05,-0.00450275564648778,0.0618334046831123,-0.0853342326896848, + -2.09994922094614e-05,-0.00381970499875756,0.0780324038201028,-0.11718697750048, + -2.3906465254131e-05,-0.00313665435102717,0.0942314029570933,-0.149039722311275, + -2.68134382989116e-05,-0.00245360370329706,0.110430402094084,-0.18089246712207, + -2.97204113434146e-05,-0.0017705530555665,0.126629401231074,-0.212745211932866, + -3.26273843883063e-05,-0.00108750240783662,0.142828400368064,-0.244597956743661, + -3.55343574329758e-05,-0.000404451760106284,0.159027399505055,-0.276450701554456, + -3.84413304777564e-05,0.000278598887623938,0.175226398642045,-0.308303446365251, + -4.1348303522426e-05,0.000961649535354159,0.191425397779036,-0.340156191176046, + -4.42552765669846e-05,0.0016447001830846,0.207624396916026,-0.372008935986842, + -4.71622496115987e-05,0.00232775083081505,0.223823396053016,-0.403861680797637, + -5.00692226566013e-05,0.0030108014785446,0.240022395190006,-0.435714425608432, + -5.29761957012154e-05,0.00369385212627549,0.256221394326997,-0.467567170419227, + -5.58831687457184e-05,0.00437690277400571,0.272420393463988,-0.499419915230022, + -5.87901417908876e-05,0.00505995342173526,0.288619392600978,-0.531272660040818, + -6.16971148355017e-05,0.00574300406946571,0.304818391737968,-0.563125404851613, + -6.46040878798937e-05,0.00642605471719659,0.321017390874959,-0.594978149662408, + -6.75110609249518e-05,0.00710910536492637,0.337216390011949,-0.626830894473203, + -7.04180339694549e-05,0.00779215601265681,0.35341538914894,-0.658683639283998, + -7.33250070134028e-05,0.0084752066603877,0.36961438828593,-0.690536384094793, + -7.62319800590161e-05,0.0091582573081177,0.385813387422921,-0.722389128905589, + -7.91389531040743e-05,0.00984130795584681,0.40201238655991,-0.754241873716384, + -9.30551244646138e-06,-0.00655013053761504,0.0132495164937455,0.0102281012526002, + -1.21662034849382e-05,-0.00587031791026438,0.0294086533311691,-0.0216514466378377, + -1.5026894523415e-05,-0.00519050528291368,0.0455677901685926,-0.0535309945282756, + -1.78875855619126e-05,-0.00451069265556314,0.0617269270060161,-0.0854105424187135, + -2.07482766004519e-05,-0.00383088002821247,0.0778860638434397,-0.117290090309151, + -2.36089676389495e-05,-0.00315106740086191,0.0940452006808631,-0.149169638199589, + -2.64696586773916e-05,-0.00247125477351118,0.110204337518287,-0.181049186090027, + -2.93303497158059e-05,-0.00179144214616056,0.12636347435571,-0.212928733980465, + -3.21910407543036e-05,-0.00111162951880983,0.142522611193134,-0.244808281870903, + -3.50517317928567e-05,-0.000431816891459214,0.158681748030557,-0.276687829761341, + -3.79124228314653e-05,0.000247995735891182,0.174840884867981,-0.308567377651779, + -4.07731138695744e-05,0.000927808363242466,0.191000021705405,-0.340446925542217, + -4.36338049084051e-05,0.00160762099059264,0.207159158542828,-0.372326473432655, + -4.64944959466806e-05,0.00228743361794348,0.223318295380251,-0.404206021323093, + -4.93551869851228e-05,0.0029672462452941,0.239477432217675,-0.436085569213531, + -5.22158780237314e-05,0.00364705887264472,0.255636569055099,-0.467965117103969, + -5.50765690616739e-05,0.00432687149999578,0.271795705892522,-0.499844664994407, + -5.79372601006156e-05,0.00500668412734617,0.287954842729946,-0.531724212884844, + -6.07979511390022e-05,0.00568649675469701,0.304113979567369,-0.563603760775282, + -6.36586421778329e-05,0.00636630938204696,0.320273116404793,-0.59548330866572, + -6.65193332161085e-05,0.00704612200939803,0.336432253242216,-0.627362856556158, + -6.93800242546061e-05,0.00772593463674864,0.35259139007964,-0.659242404446596, + -7.22407152924376e-05,0.00840574726410015,0.368750526917063,-0.691121952337034, + -7.51014063312683e-05,0.00908555989145032,0.384909663754487,-0.723001500227472, + -7.79620973696549e-05,0.00976537251880094,0.40106880059191,-0.75488104811791, + -9.21455795741509e-06,-0.00654769054013065,0.0132674694997489,0.01023371233782, + -1.20123774072986e-05,-0.00587235235406242,0.0293719796792397,-0.0216825214901362, + -1.48101968571318e-05,-0.00519701416799415,0.0454764898587305,-0.0535987553180923, + -1.76080163070691e-05,-0.00452167598192593,0.0615810000382213,-0.0855149891460485, + -2.04058357570203e-05,-0.0038463377958578,0.0776855102177121,-0.117431222974005, + -2.32036552068604e-05,-0.0031709996097895,0.0937900203972029,-0.149347456801961, + -2.60014746567283e-05,-0.00249566142372137,0.109894530576694,-0.181263690629917, + -2.87992941066517e-05,-0.00182032323765302,0.125999040756185,-0.213179924457873, + -3.15971135562698e-05,-0.00114498505158456,0.142103550935675,-0.245096158285829, + -3.4394933006443e-05,-0.000469646865516538,0.158208061115166,-0.277012392113785, + -3.71927524563387e-05,0.000205691320551926,0.174312571294657,-0.308928625941742, + -3.99905719063454e-05,0.000881029506619724,0.190417081474148,-0.340844859769698, + -4.27883913557969e-05,0.00155636769268885,0.206521591653639,-0.372761093597654, + -4.55862108061367e-05,0.00223170587875599,0.222626101833129,-0.40467732742561, + -4.83840302557548e-05,0.00290704406482489,0.23873061201262,-0.436593561253566, + -5.11818497057615e-05,0.00358238225089269,0.254835122192111,-0.468509795081522, + -5.39796691556571e-05,0.00425772043696138,0.270939632371602,-0.500426028909479, + -5.67774886057748e-05,0.00493305862302873,0.287044142551092,-0.532342262737435, + -5.95753080553374e-05,0.00560839680909742,0.303148652730583,-0.564258496565391, + -6.2373127505011e-05,0.00628373499516632,0.319253162910074,-0.596174730393347, + -6.51709469547956e-05,0.00695907318123457,0.335357673089565,-0.628090964221303, + -6.79687664046913e-05,0.00763441136730281,0.351462183269056,-0.660007198049259, + -7.07665858552531e-05,0.00830974955337016,0.367566693448546,-0.691923431877215, + -7.35644053048157e-05,0.00898508773943885,0.383671203628037,-0.723839665705172, + -7.63622247547113e-05,0.00966042592550664,0.399775713807528,-0.755755899533128, + -9.0901720242835e-06,-0.00654436433726225,0.0132918568674893,0.0102413285781499, + -1.18035387460871e-05,-0.00587517815686124,0.0293220966544303,-0.0217247011281304, + -1.45169054678873e-05,-0.00520599197646027,0.0453523364413711,-0.0536907308344107, + -1.72302721896667e-05,-0.00453680579605925,0.061382576228312,-0.0856567605406909, + -1.99436389114738e-05,-0.00386761961565824,0.077412816015253,-0.117622790246971, + -2.26570056333086e-05,-0.00319843343525739,0.0934430558021937,-0.149588819953251, + -2.53703723551435e-05,-0.00252924725485637,0.109473295589135,-0.181554849659532, + -2.80837390769784e-05,-0.00186006107445547,0.125503535376076,-0.213520879365812, + -3.07971057986745e-05,-0.00119087489405445,0.141533775163016,-0.245486909072092, + -3.35104725203705e-05,-0.000521688713653212,0.157564014949957,-0.277452938778373, + -3.62238392423997e-05,0.00014749746674747,0.173594254736898,-0.309418968484653, + -3.89372059641513e-05,0.000816683647148375,0.189624494523839,-0.341384998190933, + -4.16505726857919e-05,0.00148586982754972,0.20565473431078,-0.373351027897213, + -4.43639394076545e-05,0.00215505600795085,0.221684974097721,-0.405317057603494, + -4.70773061294061e-05,0.00282424218835153,0.237715213884662,-0.437283087309774, + -4.97906728511577e-05,0.00349342836875288,0.253745453671603,-0.469249117016054, + -5.25040395730203e-05,0.00416261454915356,0.269775693458544,-0.501215146722335, + -5.52174062947719e-05,0.00483180072955491,0.285805933245485,-0.533181176428615, + -5.79307730167455e-05,0.00550098690995537,0.301836173032425,-0.565147206134895, + -6.06441397383861e-05,0.00617017309035606,0.317866412819366,-0.597113235841175, + -6.33575064603598e-05,0.00683935927075741,0.333896652606307,-0.629079265547456, + -6.60708731822224e-05,0.00750854545115809,0.349926892393248,-0.661045295253736, + -6.87842399037519e-05,0.00817773163155922,0.365957132180188,-0.693011324960016, + -7.14976066260586e-05,0.0088469178119599,0.38198737196713,-0.724977354666296, + -7.42109733471441e-05,0.00951610399236191,0.398017611754071,-0.756943384372577, + -8.92153915172701e-06,-0.00653987441482468,0.013324621159271,0.0102515503577533, + -1.15231835207535e-05,-0.00587908717616796,0.0292549605824841,-0.021781310550188, + -1.41248278898304e-05,-0.00521829993751122,0.0451853000056971,-0.0538141714581293, + -1.67264722587823e-05,-0.00455751269885435,0.0611156394289102,-0.0858470323660706, + -1.93281166278592e-05,-0.0038967254601977,0.0770459788521232,-0.117879893274012, + -2.1929760996936e-05,-0.003235938221541,0.0929763182753361,-0.149912754181953, + -2.45314053658185e-05,-0.00257515098288408,0.108906657698549,-0.181945615089894, + -2.71330497349509e-05,-0.00191436374422738,0.124836997121762,-0.213978475997836, + -2.97346941040555e-05,-0.00125357650557101,0.140767336544975,-0.246011336905777, + -3.23363384731046e-05,-0.000592789266914084,0.156697675968188,-0.278044197813718, + -3.49379828420981e-05,6.79979717426171e-05,0.172628015391401,-0.31007705872166, + -3.75396272110917e-05,0.00072878521039943,0.188558354814614,-0.342109919629601, + -4.01412715799743e-05,0.00138957244905646,0.204488694237827,-0.374142780537542, + -4.27429159494674e-05,0.00205035968771239,0.22041903366104,-0.406175641445483, + -4.5344560318239e-05,0.00271114692636965,0.236349373084253,-0.438208502353425, + -4.79462046875101e-05,0.00337193416502601,0.252279712507466,-0.470241363261366, + -5.05478490560041e-05,0.00403272140368327,0.268210051930679,-0.502274224169307, + -5.31494934248311e-05,0.0046935086423403,0.284140391353892,-0.534307085077249, + -5.57511377943243e-05,0.00535429588099645,0.300070730777105,-0.56633994598519, + -5.83527821632623e-05,0.00601508311965326,0.316001070200318,-0.598372806893131, + -6.09544265320894e-05,0.00667587035831074,0.331931409623532,-0.630405667801072, + -6.35560709016936e-05,0.00733665759696622,0.347861749046744,-0.662438528709014, + -6.61577152706316e-05,0.00799744483562348,0.363792088469957,-0.694471389616955, + -6.87593596394587e-05,0.00865823207428029,0.379722427893171,-0.726504250524896, + -7.13610040086188e-05,0.00931901931293666,0.395652767316383,-0.758537111432838, + -8.69560363404333e-06,-0.00653389357768309,0.0133679932546893,0.0102650629330693, + -1.1152452480033e-05,-0.00588445970216538,0.0291658802327748,-0.0218561447873589, + -1.36093013259897e-05,-0.00523502582664756,0.0449637672108603,-0.0539773525077871, + -1.60661501719533e-05,-0.00458559195112979,0.0607616541889458,-0.0860985602282153, + -1.85229990179725e-05,-0.0039361580756121,0.0765595411670313,-0.118219767948644, + -2.09798478638945e-05,-0.00328672420009424,0.0923574281451169,-0.150340975669072, + -2.34366967097333e-05,-0.00263729032457627,0.108155315123202,-0.1824621833895, + -2.58935455558218e-05,-0.00198785644905874,0.123953202101288,-0.214583391109928, + -2.83503944018548e-05,-0.00133842257354089,0.139751089079374,-0.246704598830356, + -3.08072432478879e-05,-0.000688988698023363,0.155548976057459,-0.278825806550785, + -3.32640920938099e-05,-3.95548225053943e-05,0.171346863035544,-0.310947014271213, + -3.57209409400649e-05,0.000609879053012019,0.18714475001363,-0.343068221991641, + -3.81777897856539e-05,0.0012593129285301,0.202942636991715,-0.375189429712069, + -4.06346386317979e-05,0.00190874680404773,0.218740523969801,-0.407310637432497, + -4.30914874776089e-05,0.00255818067956581,0.234538410947887,-0.439431845152926, + -4.55483363235309e-05,0.00320761455508323,0.250336297925972,-0.471553052873354, + -4.8005185169453e-05,0.00385704843060108,0.266134184904057,-0.503674260593782, + -5.0462034015486e-05,0.00450648230611894,0.281932071882143,-0.53579546831421, + -5.2918882861519e-05,0.0051559161816368,0.297729958860229,-0.567916676034638, + -5.53757317078851e-05,0.00580535005715377,0.313527845838314,-0.600037883755067, + -5.78325805538071e-05,0.00645478393267185,0.329325732816399,-0.632159091475495, + -6.02894293996181e-05,0.00710421780819015,0.345123619794485,-0.664280299195923, + -6.27462782459842e-05,0.00775365168370667,0.36092150677257,-0.696401506916351, + -6.52031270920173e-05,0.00840308555922498,0.376719393750656,-0.72852271463678, + -6.76599759376062e-05,0.00905251943474328,0.392517280728742,-0.760643922357208, + -8.3976552870263e-06,-0.00652606653885501,0.0134242963979835,0.0102825726841942, + -1.0671874045888e-05,-0.00589176903631011,0.029049889087214,-0.0219531158559996, + -1.29460928047914e-05,-0.0052574715337653,0.0446754817764445,-0.0541888043961935, + -1.52203115635907e-05,-0.00462317403122031,0.060301074465675,-0.0864244929363873, + -1.74945303223761e-05,-0.0039888765286753,0.0759266671549055,-0.118660181476581, + -1.97687490813003e-05,-0.00335457902613046,0.091552259844136,-0.150895870016775, + -2.2042967840058e-05,-0.0027202815235855,0.107177852533366,-0.183131558556969, + -2.43171865989544e-05,-0.00208598402104065,0.122803445222597,-0.215367247097163, + -2.65914053579897e-05,-0.00145168651849592,0.138429037911827,-0.247602935637357, + -2.88656241165808e-05,-0.000817389015950853,0.154054630601058,-0.27983862417755, + -3.11398428753384e-05,-0.000183091513405786,0.169680223290288,-0.312074312717744, + -3.34140616344847e-05,0.000451205989138836,0.185305815979519,-0.344310001257938, + -3.56882803931313e-05,0.00108550349168413,0.200931408668749,-0.376545689798132, + -3.7962499152e-05,0.00171980099422875,0.21655700135798,-0.408781378338326, + -4.02367179110907e-05,0.00235409849677359,0.23218259404721,-0.44101706687852, + -4.25109366696264e-05,0.00298839599931844,0.24780818673644,-0.473252755418713, + -4.47851554288281e-05,0.00362269350186306,0.263433779425671,-0.505488443958907, + -4.70593741874747e-05,0.00425699100440813,0.279059372114901,-0.537724132499101, + -4.93335929462324e-05,0.00489128850695342,0.294684964804132,-0.569959821039295, + -5.16078117052121e-05,0.00552558600949804,0.310310557493362,-0.602195509579489, + -5.38820304641918e-05,0.00615988351204289,0.325936150182593,-0.634431198119683, + -5.61562492230605e-05,0.00679418101458751,0.341561742871823,-0.666666886659877, + -5.84304679815961e-05,0.00742847851713302,0.357187335561054,-0.69890257520007, + -6.07046867409089e-05,0.00806277601967764,0.372812928250285,-0.731138263740264, + -6.29789054994445e-05,0.00869707352222271,0.388438520939515,-0.763373952280458, + -8.01288922574507e-06,-0.00651605811818941,0.0134955599712367,0.0103046842885544, + -1.00647415169075e-05,-0.00590156051043475,0.0289025106675619,-0.0220755725310754, + -1.21165938081064e-05,-0.00528706290268011,0.0443094613638871,-0.0544558293507052, + -1.41684460992636e-05,-0.00467256529492538,0.0597164120602123,-0.0868360861703351, + -1.62202983903792e-05,-0.00405806768717071,0.0751233627565375,-0.119216342989965, + -1.82721506816752e-05,-0.0034435700794162,0.0905303134528626,-0.151596599809595, + -2.03240029728324e-05,-0.00282907247166142,0.105937264149188,-0.183976856629224, + -2.23758552639897e-05,-0.00221457486390686,0.121344214845513,-0.216357113448854, + -2.44277075554522e-05,-0.00160007725615263,0.136751165541838,-0.248737370268484, + -2.64795598463041e-05,-0.000985579648397295,0.152158116238164,-0.281117627088114, + -2.85314121376001e-05,-0.000371082040642845,0.167565066934489,-0.313497883907744, + -3.05832644285076e-05,0.000243415567112271,0.182972017630814,-0.345878140727373, + -3.26351167200811e-05,0.000857913174866054,0.198378968327139,-0.378258397547003, + -3.46869690107665e-05,0.00147241078262139,0.213785919023464,-0.410638654366633, + -3.67388213020625e-05,0.00208690839037606,0.22919286971979,-0.443018911186263, + -3.87906735930255e-05,0.00270140599813096,0.244599820416115,-0.475399168005893, + -4.08425258842104e-05,0.00331590360588563,0.26000677111244,-0.507779424825523, + -4.28943781759505e-05,0.00393040121363963,0.275413721808765,-0.540159681645152, + -4.49462304674686e-05,0.00454489882139342,0.29082067250509,-0.572539938464782, + -4.69980827583205e-05,0.00515939642914853,0.306227623201415,-0.604920195284412, + -4.90499350497275e-05,0.0057738940369032,0.321634573897741,-0.637300452104042, + -5.11017873406905e-05,0.00638839164465788,0.337041524594066,-0.669680708923672, + -5.31536396312093e-05,0.00700288925241388,0.352448475290392,-0.702060965743301, + -5.52054919231715e-05,0.00761738686016722,0.367855425986716,-0.734441222562931, + -5.72573442142454e-05,0.00823188446792233,0.383262376683042,-0.766821479382561, + -7.52930152583819e-06,-0.00650363431344411,0.013582925522093,0.0103317153026516, + -9.32223570344892e-06,-0.00591438229124575,0.0287209743777398,-0.0222252734779792, + -1.11151698810596e-05,-0.00532513026904735,0.0438590232333866,-0.0547822622586099, + -1.29081040586843e-05,-0.00473587824684896,0.0589970720890334,-0.0873392510392406, + -1.47010382363366e-05,-0.00414662622465067,0.0741351209446801,-0.119896239819871, + -1.6493972413878e-05,-0.00355737420245217,0.089273169800327,-0.152453228600502, + -1.82869065915581e-05,-0.002968122180254,0.104411218655974,-0.185010217381133, + -2.00798407690717e-05,-0.00237887015805549,0.11954926751162,-0.217567206161764, + -2.18727749466407e-05,-0.00178961813585721,0.134687316367267,-0.250124194942394, + -2.36657091243209e-05,-0.0012003661136587,0.149825365222914,-0.282681183723025, + -2.54586433019455e-05,-0.000611114091460196,0.164963414078561,-0.315238172503656, + -2.72515774794035e-05,-2.18620692618021e-05,0.180101462934208,-0.347795161284287, + -2.90445116573057e-05,0.000567389952936148,0.195239511789854,-0.380352150064917, + -3.08374458347638e-05,0.00115664197513499,0.210377560645501,-0.412909138845548, + -3.26303800124439e-05,0.00174589399733294,0.225515609501148,-0.445466127626179, + -3.44233141897909e-05,0.00233514601953178,0.240653658356795,-0.478023116406809, + -3.62162483674711e-05,0.00292439804172973,0.255791707212441,-0.51058010518744, + -3.80091825449291e-05,0.00351365006392879,0.270929756068088,-0.543137093968071, + -3.98021167228313e-05,0.00410290208612651,0.286067804923735,-0.575694082748702, + -4.15950509007335e-05,0.00469215410832424,0.301205853779381,-0.608251071529333, + -4.33879850779695e-05,0.00528140613052308,0.316343902635028,-0.640808060309963, + -4.51809192555386e-05,0.00587065815272148,0.331481951490675,-0.673365049090594, + -4.69738534332187e-05,0.00645991017492031,0.346620000346322,-0.705922037871225, + -4.87667876102327e-05,0.0070491621971196,0.361758049201969,-0.738479026651855, + -5.05597217874687e-05,0.00763841421931799,0.376896098057616,-0.771036015432486, + -6.94191090454613e-06,-0.00648876962972663,0.0136859348298208,0.0103634789907996, + -8.44945441232786e-06,-0.00593064844059443,0.0285057295183049,-0.0224011845324374, + -9.95699792012694e-06,-0.00537252725146228,0.0433255242067889,-0.0551658480556743, + -1.14645414278775e-05,-0.00481440606233002,0.058145318895273,-0.0879305115789112, + -1.29720849357529e-05,-0.0042562848731979,0.072965113583757,-0.120695175102148, + -1.44796284435034e-05,-0.00369816368406561,0.0877849082722411,-0.153459838625385, + -1.59871719514204e-05,-0.00314004249493371,0.102604702960725,-0.186224502148622, + -1.74947154590321e-05,-0.00258192130580115,0.117424497649209,-0.218989165671859, + -1.90022589668382e-05,-0.00202380011666892,0.132244292337693,-0.251753829195096, + -2.05098024746442e-05,-0.00146567892753702,0.147064087026177,-0.284518492718333, + -2.20173459823392e-05,-0.000907557738404785,0.161883881714661,-0.31728315624157, + -2.35248894902007e-05,-0.00034943654927222,0.176703676403146,-0.350047819764807, + -2.50324329980067e-05,0.00020868463985968,0.191523471091629,-0.382812483288044, + -2.65399765057572e-05,0.000766805828992023,0.206343265780114,-0.41557714681128, + -2.80475200135077e-05,0.00132492701812392,0.221163060468597,-0.448341810334518, + -2.95550635217579e-05,0.00188304820725582,0.235982855157082,-0.481106473857754, + -3.10626070293418e-05,0.00244116939638794,0.250802649845565,-0.513871137380991, + -3.25701505368148e-05,0.00299929058552095,0.26562244453405,-0.546635800904228, + -3.40776940450649e-05,0.00355741177465219,0.280442239222533,-0.579400464427465, + -3.55852375527599e-05,0.00411553296378475,0.295262033911018,-0.612165127950702, + -3.70927810602328e-05,0.00467365415291665,0.310081828599501,-0.644929791473939, + -3.86003245683719e-05,0.00523177534204899,0.324901623287986,-0.677694454997176, + -4.01078680751787e-05,0.00578989653118223,0.33972141797647,-0.710459118520413, + -4.16154115836509e-05,0.00634801772031368,0.354541212664954,-0.74322378204365, + -4.31229550911238e-05,0.00690613890944647,0.369361007353438,-0.775988445566887, + -6.25744233416145e-06,-0.00647175054085835,0.0138019486649254,0.0103991149008061, + -7.47014513666905e-06,-0.00595044294930479,0.0282617694880461,-0.0225985404086382, + -8.68284793918705e-06,-0.00542913535775125,0.0427215903111668,-0.0555961957180824, + -9.89555074168424e-06,-0.00490782776619769,0.0571814111342875,-0.0885938510275267, + -1.11082535440843e-05,-0.00438652017464386,0.0716412319574083,-0.121591506336971, + -1.23209563467896e-05,-0.00386521258309058,0.0861010527805289,-0.154589161646415, + -1.35336591492452e-05,-0.00334390499153692,0.10056087360365,-0.187586816955859, + -1.47463619518118e-05,-0.00282259739998358,0.11502069442677,-0.220584472265304, + -1.59590647544339e-05,-0.00230128980843014,0.129480515249891,-0.253582127574748, + -1.71717675567229e-05,-0.00177998221687636,0.143940336073011,-0.286579782884192, + -1.8384470359234e-05,-0.0012586746253227,0.158400156896132,-0.319577438193636, + -1.95971731619116e-05,-0.000737367033769365,0.172859977719253,-0.352575093503081, + -2.08098759644781e-05,-0.00021605944221581,0.187319798542374,-0.385572748812525, + -2.20225787666006e-05,0.000305248149338189,0.201779619365494,-0.418570404121969, + -2.32352815692227e-05,0.000826555740891521,0.216239440188615,-0.451568059431413, + -2.44479843719558e-05,0.00134786333244508,0.230699261011736,-0.484565714740858, + -2.56606871742449e-05,0.00186917092399863,0.245159081834856,-0.517563370050302, + -2.68733899767559e-05,0.00239047851555263,0.259618902657977,-0.550561025359746, + -2.8086092779267e-05,0.00291178610710552,0.274078723481097,-0.58355868066919, + -2.92987955821111e-05,0.00343309369865907,0.288538544304218,-0.616556335978635, + -3.05114983847332e-05,0.00395440129021241,0.302998365127339,-0.649553991288079, + -3.17242011863561e-05,0.00447570888176729,0.31745818595046,-0.682551646597523, + -3.29369039892002e-05,0.00499701647331996,0.33191800677358,-0.715549301906967, + -3.41496067919334e-05,0.00551832406487396,0.346377827596702,-0.748546957216412, + -3.53623095941114e-05,0.00603963165642796,0.360837648419822,-0.781544612525856, + -5.49750577741662e-06,-0.00645322180163136,0.0139260535767921,0.0104370764441712, + -6.42707927860781e-06,-0.00597333040810041,0.0279990091067501,-0.0228087759169046, + -7.35665277980246e-06,-0.00549343901456942,0.0420719646367081,-0.0560546282779804, + -8.28622628097631e-06,-0.00501354762103851,0.0561449201666661,-0.0893004806390561, + -9.21579978216402e-06,-0.00453365622750751,0.0702178756966241,-0.122546333000132, + -1.01453732834489e-05,-0.00405376483397657,0.0842908312265822,-0.155792185361208, + -1.10749467846227e-05,-0.00357387344044569,0.0983637867565402,-0.189038037722283, + -1.20045202858798e-05,-0.00309398204691469,0.112436742286498,-0.222283890083359, + -1.29340937870537e-05,-0.0026140906533838,0.126509697816456,-0.255529742444435, + -1.3863667288283e-05,-0.0021341992598527,0.140582653346414,-0.288775594805511, + -1.47932407890683e-05,-0.00165430786632137,0.154655608876372,-0.322021447166586, + -1.57228142906307e-05,-0.00117441647279093,0.16872856440633,-0.355267299527662, + -1.66523877918601e-05,-0.000694525079260044,0.182801519936288,-0.388513151888738, + -1.75819612930894e-05,-0.000214633685728938,0.196874475466246,-0.421759004249814, + -1.85115347942633e-05,0.000265257707802169,0.210947430996204,-0.455004856610889, + -1.94411082952151e-05,0.000745149101333054,0.225020386526162,-0.488250708971965, + -2.0370681796722e-05,0.00122504049486372,0.23909334205612,-0.521496561333041, + -2.13002552978958e-05,0.00170493188839482,0.253166297586078,-0.554742413694117, + -2.22298287995137e-05,0.00218482328192504,0.267239253116036,-0.587988266055192, + -2.31594023003545e-05,0.00266471467545659,0.281312208645994,-0.621234118416268, + -2.40889758015284e-05,0.0031446060689877,0.295385164175952,-0.654479970777344, + -2.50185493027022e-05,0.00362449746251858,0.30945811970591,-0.68772582313842, + -2.59481228042091e-05,0.00410438885604991,0.323531075235869,-0.720971675499495, + -2.68776963047168e-05,0.0045842802495808,0.337604030765826,-0.754217527860571, + -2.78072698055576e-05,0.00506417164311257,0.351676986295785,-0.787463380221647, + -4.69784619103707e-06,-0.0064341244487738,0.0140517132106779,0.0104753474836021, + -5.37602596115128e-06,-0.00599828914833316,0.0277310997761066,-0.0230207254509178, + -6.05420573124293e-06,-0.00556245384789256,0.0414104863415353,-0.0565167983854377, + -6.73238550133459e-06,-0.00512661854745189,0.055089872906964,-0.0900128713199576, + -7.41056527139849e-06,-0.00469078324701117,0.0687692594723927,-0.123508944254477, + -8.08874504160118e-06,-0.00425494794657066,0.0824486460378213,-0.157005017188997, + -8.76692481163732e-06,-0.00381911264613,0.09612803260325,-0.190501090123517, + -9.44510458161796e-06,-0.00338327734568933,0.109807419168679,-0.223997163058037, + -1.01232843517374e-05,-0.00294744204524844,0.123486805734108,-0.257493235992557, + -1.08014641220233e-05,-0.0025116067448081,0.137166192299536,-0.290989308927077, + -1.14796438921427e-05,-0.00207577144436755,0.150845578864965,-0.324485381861597, + -1.21578236620956e-05,-0.00163993614392677,0.164524965430393,-0.357981454796117, + -1.28360034322705e-05,-0.00120410084348621,0.178204351995822,-0.391477527730637, + -1.35141832023344e-05,-0.000768265543045654,0.191883738561251,-0.424973600665156, + -1.41923629719543e-05,-0.000332430242603987,0.20556312512668,-0.458469673599677, + -1.48705427427398e-05,0.000103405057835682,0.219242511692108,-0.491965746534196, + -1.55487225127482e-05,0.000539240358276238,0.232921898257537,-0.525461819468717, + -1.62269022826456e-05,0.000975075658717017,0.246601284822966,-0.558957892403236, + -1.6905082053098e-05,0.00141091095915735,0.260280671388394,-0.592453965337756, + -1.75832618231064e-05,0.00184674625959835,0.273960057953823,-0.625950038272276, + -1.82614415930038e-05,0.00228258156003891,0.287639444519251,-0.659446111206796, + -1.89396213633453e-05,0.00271841686047924,0.30131883108468,-0.692942184141316, + -1.96178011332426e-05,0.00315425216092047,0.314998217650109,-0.726438257075836, + -2.0295980903362e-05,0.0035900874613608,0.328677604215537,-0.759934330010356, + -2.09741606734815e-05,0.00402592276180158,0.342356990780966,-0.793430402944876, + -3.90250082043207e-06,-0.00641552001996264,0.0141720613176397,0.01051184617282, + -4.37448407007712e-06,-0.0060238585272803,0.0274727850268507,-0.0232228595002366, + -4.8464673197135e-06,-0.00563219703459794,0.0407735087360618,-0.0569575651732933, + -5.318450569336e-06,-0.00524053554191556,0.0540742324452729,-0.0906922708463499, + -5.79043381904176e-06,-0.00484887404923323,0.067374956154484,-0.124426976519407, + -6.26241706871977e-06,-0.00445721255655085,0.0806756798636952,-0.158161682192463, + -6.73440031839778e-06,-0.00406555106386863,0.0939764035729062,-0.19189638786552, + -7.20638356799252e-06,-0.00367388957118608,0.107277127282117,-0.225631093538576, + -7.67836681758727e-06,-0.00328222807850376,0.120577850991328,-0.259365799211633, + -8.1503500671265e-06,-0.00289056658582132,0.13387857470054,-0.29310050488469, + -8.62233331710982e-06,-0.00249890509313921,0.147179298409751,-0.326835210557746, + -9.09431656642701e-06,-0.00210724360045633,0.160480022118962,-0.360569916230803, + -9.56629981629931e-06,-0.00171558210777478,0.173780745828172,-0.39430462190386, + -1.00382830660051e-05,-0.00132392061509212,0.187081469537384,-0.428039327576916, + -1.05102663158219e-05,-0.00093225912241035,0.200382193246595,-0.461774033249973, + -1.09822495653056e-05,-0.00054059762972769,0.213682916955806,-0.495508738923029, + -1.14542328149003e-05,-0.000148936137044808,0.226983640665017,-0.529243444596086, + -1.19262160646061e-05,0.000242725355637186,0.240284364374228,-0.562978150269143, + -1.23981993140898e-05,0.000634386848319846,0.253585088083439,-0.596712855942199, + -1.28701825636846e-05,0.00102604834100251,0.266885811792651,-0.630447561615256, + -1.33421658133903e-05,0.00141770983368428,0.280186535501861,-0.664182267288313, + -1.38141490630961e-05,0.00180937132636672,0.293487259211072,-0.697916972961369, + -1.42861323125798e-05,0.00220103281904915,0.306787982920284,-0.731651678634426, + -1.47581155621745e-05,0.00259269431173204,0.320088706629495,-0.765386384307482, + -1.52300988118803e-05,0.00298435580441403,0.333389430338706,-0.799121089980539, + -3.15450593771707e-06,-0.00639836367314161,0.0142813348790851,0.0105448567245102, + -3.46966136174215e-06,-0.00604847237755808,0.0272367924321802,-0.0234056758321753, + -3.78481678578457e-06,-0.00569858108197457,0.0401922499852753,-0.0573562083888607, + -4.09997220975067e-06,-0.00534868978639097,0.0531477075383705,-0.0913067409455462, + -4.41512763380003e-06,-0.00499879849080748,0.0661031650914656,-0.125257273502232, + -4.73028305778e-06,-0.00464890719522393,0.0790586226445607,-0.159207806058917, + -5.04543848189876e-06,-0.00429901589964066,0.0920140801976557,-0.193158338615603, + -5.36059390598975e-06,-0.00394912460405705,0.104969537750751,-0.227108871172288, + -5.6757493298587e-06,-0.00359923330847345,0.117924995303846,-0.261059403728973, + -5.99090475406072e-06,-0.00324934201289007,0.130880452856941,-0.295009936285659, + -6.30606017787416e-06,-0.00289945071730635,0.143835910410036,-0.328960468842344, + -6.62121560207618e-06,-0.00254955942172308,0.156791367963131,-0.36291100139903, + -6.93637102644473e-06,-0.00219966812614003,0.169746825516226,-0.396861533955715, + -7.25152645009164e-06,-0.00184977683055632,0.182702283069321,-0.430812066512401, + -7.56668187429366e-06,-0.0014998855349726,0.195657740622417,-0.464762599069086, + -7.8818372976075e-06,-0.00114999423938844,0.208613198175512,-0.498713131625771, + -8.19699272203156e-06,-0.000800102943805614,0.221568655728607,-0.532663664182457, + -8.51214814623358e-06,-0.000450211648221899,0.234524113281702,-0.566614196739142, + -8.82730357021355e-06,-0.000100320352638184,0.247479570834797,-0.600564729295828, + -9.14245899419353e-06,0.00024957094294531,0.260435028387892,-0.634515261852513, + -9.45761441828452e-06,0.000599462238529025,0.273390485940988,-0.668465794409199, + -9.77276984193143e-06,0.000949353534112074,0.286345943494082,-0.702416326965884, + -1.00879252662445e-05,0.00129924482969601,0.299301401047178,-0.736366859522569, + -1.04030806905575e-05,0.00164913612527906,0.312256858600273,-0.770317392079255, + -1.07182361138713e-05,0.00199902742086389,0.325212316153368,-0.80426792463594, + -2.48707302702086e-06,-0.00638332336523917,0.0143758510640176,0.010573310890299, + -2.6907122829406e-06,-0.00607082502746692,0.0270315710667872,-0.0235632583611409, + -2.89435153885687e-06,-0.00575832668969467,0.0396872910695568,-0.0576998276125807, + -3.09799079484252e-06,-0.00544582835192253,0.0523430110723264,-0.0918363968640206, + -3.30163005066164e-06,-0.00513333001415006,0.0649987310750962,-0.12597296611546, + -3.50526930659179e-06,-0.00482083167637792,0.0776544510778657,-0.1601095353669, + -3.70890856268846e-06,-0.00450833333860579,0.0903101710806353,-0.19424610461834, + -3.91254781845207e-06,-0.00419583500083331,0.102965891083405,-0.22838267386978, + -4.11618707457651e-06,-0.00388333666306151,0.115621611086174,-0.26251924312122, + -4.31982633031236e-06,-0.00357083832528893,0.128277331088944,-0.29665581237266, + -4.52346558621475e-06,-0.00325833998751657,0.140933051091714,-0.330792381624099, + -4.72710484206162e-06,-0.00294584164974432,0.153588771094483,-0.364928950875539, + -4.93074409807503e-06,-0.00263334331197229,0.166244491097253,-0.399065520126979, + -5.13438335397742e-06,-0.00232084497420004,0.178900211100022,-0.433202089378419, + -5.33802260993532e-06,-0.00200834663642757,0.191555931102792,-0.467338658629859, + -5.54166186605975e-06,-0.00169584829865554,0.204211651105562,-0.501475227881299, + -5.74530112196214e-06,-0.0013833499608833,0.216867371108332,-0.535611797132738, + -5.94894037775351e-06,-0.00107085162311127,0.229523091111101,-0.569748366384178, + -6.15257963398896e-06,-0.00075835328533902,0.242178811113871,-0.603884935635618, + -6.3562188901134e-06,-0.000445854947567215,0.25483453111664,-0.638021504887058, + -6.55985814479454e-06,-0.000133356609793189,0.26749025111941,-0.672158074138498, + -6.76349740114102e-06,0.000179141727978838,0.28014597112218,-0.706294643389937, + -6.96713665748749e-06,0.000491640065749976,0.292801691124949,-0.740431212641378, + -7.17077591305681e-06,0.000804138403522892,0.305457411127719,-0.774567781892817, + -7.37441516918125e-06,0.00111663674129536,0.318113131130489,-0.808704351144257, + -1.91880374737774e-06,-0.00637071049791407,0.0144542306593313,0.010596838608799, + -2.04745307910009e-06,-0.00609010333634319,0.0268606205517252,-0.0236935576434862, + -2.17610241076693e-06,-0.00580949617477219,0.039267010444119,-0.0579839538957713, + -2.30475174253786e-06,-0.00552888901320142,0.0516734003365128,-0.0922743501480565, + -2.43340107419776e-06,-0.00524828185163051,0.0640797902289066,-0.126564746400342, + -2.56205040591317e-06,-0.00496767469005954,0.0764861801213005,-0.160855142652627, + -2.69069973776737e-06,-0.00468706752848891,0.0888925700136942,-0.195145538904912, + -2.81934906937176e-06,-0.00440646036691783,0.101298959906088,-0.229435935157197, + -2.94799840105942e-06,-0.00412585320534686,0.113705349798482,-0.263726331409482, + -3.07664773291361e-06,-0.00384524604377612,0.126111739690876,-0.298016727661768, + -3.20529706449024e-06,-0.00356463888220526,0.138518129583269,-0.332307123914053, + -3.33394639612239e-06,-0.00328403172063418,0.150924519475663,-0.366597520166338, + -3.46259572781005e-06,-0.00300342455906311,0.163330909368057,-0.400887916418623, + -3.59124505938668e-06,-0.00272281739749203,0.175737299260451,-0.435178312670908, + -3.71989439118536e-06,-0.00244221023592117,0.188143689152845,-0.469468708923193, + -3.84854372315058e-06,-0.00216160307435098,0.200550079045239,-0.503759105175478, + -3.9771930546717e-06,-0.00188099591277968,0.212956468937633,-0.538049501427764, + -4.10584238630385e-06,-0.0016003887512086,0.225362858830026,-0.572339897680049, + -4.23449171838008e-06,-0.00131978158963819,0.23776924872242,-0.606630293932334, + -4.36314105001223e-06,-0.00103917442806711,0.250175638614814,-0.640920690184619, + -4.49179038197745e-06,-0.000758567266496257,0.262582028507208,-0.675211086436904, + -4.62043971394266e-06,-0.000477960104926289,0.274988418399601,-0.70950148268919, + -4.74908904568583e-06,-0.000197352943354989,0.287394808291995,-0.743791878941474, + -4.8777383764298e-06,8.32542182171991e-05,0.29980119818439,-0.778082275193759, + -5.00638770906114e-06,0.000363861379786723,0.312207588076783,-0.812372671446045, + -1.45389860190144e-06,-0.00636052006542933,0.0145169897682612,0.0106156329919655, + -1.5342204134558e-06,-0.00610602135183713,0.0267232423360384,-0.0237976431560157, + -1.61454222499802e-06,-0.00585152263824487,0.0389294949038155,-0.0582109193039968, + -1.69486403653329e-06,-0.00559702392465261,0.0511357474715926,-0.092624195451978, + -1.77518584815184e-06,-0.00534252521106054,0.0633420000393697,-0.127037471599959, + -1.85550765968712e-06,-0.0050880264974682,0.0755482526071469,-0.16145074774794, + -1.93582947105586e-06,-0.00483352778387569,0.0877545051749241,-0.195864023895922, + -2.01615128270216e-06,-0.00457902907028362,0.0999607577427012,-0.230277300043903, + -2.09647309451499e-06,-0.00432453035669189,0.112167010310478,-0.264690576191884, + -2.17679490566169e-06,-0.00407003164309883,0.124373262878256,-0.299103852339865, + -2.25711671741902e-06,-0.00381553292950687,0.136579515446033,-0.333517128487846, + -2.33743852889878e-06,-0.00356103421591469,0.14878576801381,-0.367930404635827, + -2.41776034054508e-06,-0.00330653550232296,0.160992020581586,-0.402343680783809, + -2.49808215185832e-06,-0.00305203678873034,0.173198273149364,-0.43675695693179, + -2.57840396378217e-06,-0.00279753807513861,0.185404525717141,-0.471170233079771, + -2.65872577520643e-06,-0.00254303936154598,0.197610778284918,-0.505583509227752, + -2.73904758663068e-06,-0.00228854064795381,0.209817030852695,-0.539996785375733, + -2.81936939827698e-06,-0.00203404193436163,0.222023283420472,-0.574410061523714, + -2.89969120970124e-06,-0.00177954322076901,0.23422953598825,-0.608823337671696, + -2.98001302112549e-06,-0.00152504450717683,0.246435788556027,-0.643236613819677, + -3.06033483299384e-06,-0.00127054579358532,0.258642041123804,-0.677649889967658, + -3.14065664452912e-06,-0.00101604707999314,0.27084829369158,-0.712063166115639, + -3.22097845628644e-06,-0.000761548366400522,0.283054546259358,-0.74647644226362, + -3.30130026793274e-06,-0.000507049652809233,0.295260798827135,-0.780889718411602, + -3.38162207935699e-06,-0.000252550939216167,0.307467051394912,-0.815302994559583, + -1.08578119911891e-06,-0.00635253118688859,0.0145658460555481,0.0106302367361743, + -1.13584146603507e-06,-0.00611870810443864,0.0266159930967423,-0.0238785204153202, + -1.18590173298072e-06,-0.00588488502198872,0.0386661401379365,-0.0583872775668148, + -1.235961999968e-06,-0.00565106193953885,0.0507162871791307,-0.0928960347183094, + -1.28602226689978e-06,-0.00541723885708889,0.0627664342203249,-0.127404791869804, + -1.33608253385931e-06,-0.00518341577463888,0.0748165812615192,-0.161913549021298, + -1.38614280068006e-06,-0.00494959269218886,0.0868667283027134,-0.196422306172793, + -1.43620306752856e-06,-0.00471576960973885,0.0989168753439076,-0.230931063324288, + -1.48626333462687e-06,-0.00448194652728928,0.110967022385102,-0.265439820475782, + -1.53632360161415e-06,-0.00424812344483938,0.123017169426296,-0.299948577627277, + -1.58638386832388e-06,-0.00401430036238914,0.13506731646749,-0.334457334778771, + -1.63644413542219e-06,-0.00378047727993924,0.147117463508684,-0.368966091930266, + -1.68650440246498e-06,-0.00354665419748956,0.159167610549878,-0.40347484908176, + -1.73656466923022e-06,-0.00331283111503944,0.171217757591073,-0.437983606233255, + -1.78662493610648e-06,-0.00307900803258931,0.183267904632267,-0.472492363384749, + -1.83668520314928e-06,-0.00284518495013963,0.195318051673461,-0.507001120536244, + -1.88674546974799e-06,-0.00261136186768929,0.207368198714655,-0.541509877687739, + -1.93680573701283e-06,-0.00237753878523961,0.21941834575585,-0.576018634839233, + -1.98686600383358e-06,-0.00214371570278971,0.231468492797044,-0.610527391990728, + -2.03692627120944e-06,-0.00190989262034003,0.243518639838238,-0.645036149142222, + -2.08698653780814e-06,-0.0016760695378899,0.255568786879432,-0.679544906293717, + -2.13704680429583e-06,-0.00144224645543956,0.267618933920626,-0.714053663445211, + -2.18710707189373e-06,-0.00120842337299054,0.27966908096182,-0.748562420596706, + -2.23716733871449e-06,-0.000974600290540639,0.291719228003014,-0.783071177748201, + -2.28722760542421e-06,-0.000740777208089849,0.303769375044209,-0.817579934899695, + -8.01749084474931e-07,-0.00634641460551702,0.0146030522148104,0.0106413422327158, + -8.33154617373155e-07,-0.0061285421207572,0.026534140588,-0.0239400239660976, + -8.64560150290461e-07,-0.0059106696359974,0.0384652289611896,-0.058521390164911, + -8.95965683117561e-07,-0.00569279715123744,0.0503963173343792,-0.0931027563637243, + -9.27371216069561e-07,-0.00547492466647775,0.0623274057075687,-0.127684122562538, + -9.58776749049317e-07,-0.00525705218171801,0.0742584940807582,-0.162265488761351, + -9.90182281696006e-07,-0.00503917969695777,0.086189582453948,-0.196846854960164, + -1.02158781478678e-06,-0.00482130721219831,0.0981206708271374,-0.231428221158978, + -1.05299334757225e-06,-0.00460343472743818,0.110051759200327,-0.266009587357791, + -1.08439888063527e-06,-0.00438556224267872,0.121982847573517,-0.300590953556605, + -1.11580441347625e-06,-0.00416768975791881,0.133913935946706,-0.335172319755418, + -1.14720994603967e-06,-0.00394981727315846,0.145845024319896,-0.369753685954231, + -1.1786154791027e-06,-0.00373194478839878,0.157776112693085,-0.404335052153045, + -1.21002101216572e-06,-0.00351407230363954,0.169707201066275,-0.438916418351858, + -1.24142654478465e-06,-0.00329619981887919,0.181638289439465,-0.473497784550671, + -1.2728320779587e-06,-0.00307832733411972,0.193569377812654,-0.508079150749485, + -1.3042376109107e-06,-0.00286045484935982,0.205500466185844,-0.542660516948298, + -1.33564314341861e-06,-0.00264258236459969,0.217431554559033,-0.577241883147111, + -1.36704867637061e-06,-0.00242470987983978,0.229362642932223,-0.611823249345925, + -1.39845420954465e-06,-0.00220683739508032,0.241293731305412,-0.646404615544738, + -1.42985974205256e-06,-0.00198896491031997,0.253224819678602,-0.680985981743551, + -1.46126527522661e-06,-0.00177109242556028,0.265155908051792,-0.715567347942365, + -1.49267080773452e-06,-0.00155321994080015,0.277086996424981,-0.750148714141178, + -1.52407634146368e-06,-0.00133534745604136,0.289018084798171,-0.784730080339991, + -1.5554818745267e-06,-0.00111747497128167,0.30094917317136,-0.819311446538805, + -5.86931568026181e-07,-0.00634181563994453,0.0146309146236483,0.0106496497979511, + -6.06883570793137e-07,-0.00613600384126378,0.0264727438866888,-0.0239860322430245, + -6.2683557355836e-07,-0.00593019204258308,0.0383145731497292,-0.0586217142840001, + -6.46787576316643e-07,-0.00572438024390237,0.0501564024127696,-0.0932573963249758, + -6.66739579130438e-07,-0.00551856844522158,0.0619982316758101,-0.127893078365951, + -6.86691581791576e-07,-0.00531275664654074,0.0738400609388505,-0.162528760406927, + -7.06643584563738e-07,-0.00510694484786001,0.085681890201891,-0.197164442447903, + -7.26595587474677e-07,-0.00490113304917938,0.0975237194649314,-0.231800124488878, + -7.46547590246838e-07,-0.00469532125049865,0.109365548727972,-0.266435806529854, + -7.66499592796954e-07,-0.0044895094518177,0.121207377991012,-0.301071488570829, + -7.86451595680138e-07,-0.00428369765313708,0.133049207254053,-0.335707170611805, + -8.06403598618832e-07,-0.00407788585445656,0.144891036517093,-0.370342852652781, + -8.26355601335482e-07,-0.00387207405577561,0.156732865780134,-0.404978534693756, + -8.46307603830088e-07,-0.00366626225709465,0.168574695043174,-0.439614216734732, + -8.66259606935316e-07,-0.00346045045841414,0.180416524306215,-0.474249898775708, + -8.86211609540943e-07,-0.00325463865973341,0.192258353569255,-0.508885580816683, + -9.06163611924526e-07,-0.00304882686105201,0.204100182832296,-0.543521262857659, + -9.2611561530731e-07,-0.00284301506237239,0.215942012095335,-0.578156944898634, + -9.46067617912938e-07,-0.00263720326369166,0.227783841358376,-0.61279262693961, + -9.66019620407543e-07,-0.00243139146501004,0.239625670621417,-0.647428308980586, + -9.85971624234416e-07,-0.00222557966633108,0.251467499884457,-0.682063991021561, + -1.00592362628493e-06,-0.00201976786764924,0.263309329147497,-0.716699673062537, + -1.02587562866852e-06,-0.00181395606896784,0.275151158410538,-0.751335355103513, + -1.04582763171823e-06,-0.00160814427028777,0.286992987673578,-0.785971037144488, + -1.06577963476795e-06,-0.00140233247160682,0.298834816936619,-0.820606719185464, + -4.26900618001602e-07,-0.00633840459239337,0.0146515186331716,0.0106557882501934, + -4.39781620190094e-07,-0.00614157522153411,0.0264272865338625,-0.0240200277161461, + -4.52662622371647e-07,-0.00594474585067487,0.0382030544345534,-0.0586958436824856, + -4.65543624594833e-07,-0.00574791647981565,0.0499788223352442,-0.093371659648825, + -4.78424626804141e-07,-0.00555108710895635,0.0617545902359352,-0.128047475615164, + -4.9130562901345e-07,-0.00535425773809706,0.0735303581366261,-0.162723291581504, + -5.04186631056225e-07,-0.00515742836723765,0.085306126037317,-0.197399107547843, + -5.17067633265533e-07,-0.00496059899637835,0.0970818939380079,-0.232074923514183, + -5.29948635419331e-07,-0.00476376962551905,0.108857661838699,-0.266750739480522, + -5.4282963768415e-07,-0.00456694025466009,0.12063342973939,-0.301426555446862, + -5.55710639671414e-07,-0.00437011088380057,0.13240919764008,-0.336102371413201, + -5.68591641880722e-07,-0.00417328151294116,0.144184965540771,-0.370778187379541, + -5.81472643867986e-07,-0.00397645214208131,0.155960733441463,-0.40545400334588, + -5.94353646410362e-07,-0.00377962277122301,0.167736501342153,-0.44012981931222, + -6.07234648897226e-07,-0.00358279340036405,0.179512269242844,-0.474805635278559, + -6.20115650717956e-07,-0.0033859640295042,0.191288037143535,-0.509481451244898, + -6.32996653093798e-07,-0.00318913465864501,0.203063805044226,-0.544157267211238, + -6.45877655136573e-07,-0.00299230528778582,0.214839572944917,-0.578833083177577, + -6.58758658067526e-07,-0.0027954759169273,0.226615340845607,-0.613508899143917, + -6.7163965955519e-07,-0.00259864654606745,0.238391108746298,-0.648184715110256, + -6.84520662264099e-07,-0.00240181717520871,0.250166876646989,-0.682860531076596, + -6.97401664084829e-07,-0.00220498780434886,0.26194264454768,-0.717536347042935, + -7.10282666016582e-07,-0.00200815843348945,0.273718412448371,-0.752212163009275, + -7.23163668614468e-07,-0.00181132906263048,0.285494180349062,-0.786887978975615, + -7.36044670879288e-07,-0.00161449969177152,0.297269948249753,-0.821563794941954, + -3.09019888160983e-07,-0.00633590010679615,0.0146666136241614,0.0106602827778752, + -3.17480487545263e-07,-0.0061456857691984,0.0263939537572725,-0.0240449189409974, + -3.25941086926074e-07,-0.00595547143160066,0.0381212938903837,-0.0587501206598701, + -3.34401686341579e-07,-0.005765257094003,0.0498486340234948,-0.0934553223787428, + -3.42862285673817e-07,-0.00557504275640514,0.061575974156606,-0.128160524097615, + -3.51322885255856e-07,-0.00538482841880761,0.0733033142897171,-0.162865725816488, + -3.59783484560339e-07,-0.0051946140812098,0.0850306544228283,-0.197570927535361, + -3.68244083837066e-07,-0.00500439974361189,0.0967579945559395,-0.232276129254233, + -3.76704683280327e-07,-0.00481418540601419,0.108485334689051,-0.266981330973106, + -3.85165282723587e-07,-0.00462397106841672,0.120212674822162,-0.301686532691979, + -3.93625882055826e-07,-0.00443375673081881,0.131940014955273,-0.336391734410851, + -4.02086481221531e-07,-0.00424354239322056,0.143667355088384,-0.371096936129724, + -4.10547080831325e-07,-0.00405332805562342,0.155394695221495,-0.405802137848597, + -4.19007680385608e-07,-0.00386311371802539,0.167122035354607,-0.440507339567469, + -4.27468279773358e-07,-0.00367289938042781,0.178849375487718,-0.475212541286342, + -4.35928879327641e-07,-0.00348268504283045,0.190576715620828,-0.509917743005214, + -4.44389478770901e-07,-0.00329247070523264,0.20230405575394,-0.544622944724087, + -4.52850077770073e-07,-0.00310225636763461,0.214031395887051,-0.57932814644296, + -4.613106775464e-07,-0.00291204203003748,0.225758736020162,-0.614033348161833, + -4.69771276545572e-07,-0.00272182769243856,0.237486076153274,-0.648738549880705, + -4.78231875988833e-07,-0.00253161335484098,0.249213416286385,-0.683443751599578, + -4.86692475432093e-07,-0.00234139901724317,0.260940756419496,-0.718148953318451, + -4.95153074764332e-07,-0.00215118467964581,0.272668096552607,-0.752854155037323, + -5.03613673874526e-07,-0.00196097034204756,0.284395436685718,-0.787559356756195, + -5.12074273428809e-07,-0.0017707560044502,0.296122776818829,-0.822264558475068, + -1.41195823768342e-05,-0.0066893430151478,0.025440415439077,-0.00442004566760469, + -1.7169243624951e-05,-0.00600675280697524,0.0414703510037193,-0.0354395098086673, + -2.02189048730678e-05,-0.0053241625988027,0.0575002865683616,-0.0664589739497299, + -2.32685661212539e-05,-0.00464157239063018,0.0735302221330039,-0.0974784380907926, + -2.6318227369343e-05,-0.00395898218245755,0.0895601576976463,-0.128497902231855, + -2.93678886174598e-05,-0.00327639197428509,0.105590093262288,-0.159517366372918, + -3.24175498653823e-05,-0.00259380176611212,0.121620028826931,-0.19053683051398, + -3.54672111138044e-05,-0.00191121155794005,0.137649964391573,-0.221556294655043, + -3.85168723618934e-05,-0.00122862134976742,0.153679899956215,-0.252575758796106, + -4.15665336098714e-05,-0.000546031141594794,0.169709835520858,-0.283595222937168, + -4.46161948580714e-05,0.000136559066577835,0.1857397710855,-0.314614687078231, + -4.7665856106105e-05,0.000819149274750464,0.201769706650142,-0.345634151219294, + -5.07155173544716e-05,0.00150173948292287,0.217799642214785,-0.376653615360356, + -5.37651786025606e-05,0.00218432969109505,0.233829577779427,-0.407673079501419, + -5.68148398503165e-05,0.00286691989926813,0.249859513344069,-0.438692543642481, + -5.98645010989607e-05,0.00354951010744053,0.265889448908712,-0.469712007783544, + -6.29141623466056e-05,0.00423210031561339,0.281919384473354,-0.500731471924607, + -6.59638235951387e-05,0.00491469052378535,0.297949320037996,-0.531750936065669, + -6.90134848431168e-05,0.00559728073195842,0.313979255602639,-0.562770400206732, + -7.20631460909837e-05,0.00627987094013061,0.33000919116728,-0.593789864347795, + -7.51128073391838e-05,0.00696246114830368,0.346039126731923,-0.624809328488857, + -7.81624685877169e-05,0.00764505135647564,0.362069062296565,-0.65582879262992, + -8.12121298358059e-05,0.00832764156464849,0.378098997861208,-0.686848256770982, + -8.42617910836729e-05,0.0090102317728209,0.39412893342585,-0.717867720912045, + -8.7311452331762e-05,0.00969282198099375,0.410158868990493,-0.748887185053108, + -1.40610073333589e-05,-0.00668638968518565,0.0254398211250674,-0.00442471458540301, + -1.70844765248895e-05,-0.00600551598731253,0.0414476775710687,-0.035459099814681, + -2.01079457164133e-05,-0.00532464228943946,0.05745553401707,-0.066493485043959, + -2.31314149080064e-05,-0.00464376859156634,0.0734633904630713,-0.097527870273237, + -2.61548840995163e-05,-0.00396289489369323,0.0894712469090727,-0.128562255502515, + -2.91783532910816e-05,-0.00328202119582033,0.105479103355074,-0.159596640731793, + -3.22018224826748e-05,-0.00260114749794726,0.121486959801075,-0.190631025961071, + -3.52252916742124e-05,-0.00192027380007431,0.137494816247076,-0.221665411190349, + -3.82487608656112e-05,-0.0012394001022008,0.153502672693078,-0.252699796419627, + -4.12722300570656e-05,-0.00055852640432752,0.169510529139079,-0.283734181648905, + -4.4295699248742e-05,0.000122347293545211,0.18551838558508,-0.314768566878183, + -4.73191684401408e-05,0.000803220991418607,0.201526242031082,-0.345802952107461, + -5.03426376317062e-05,0.00148409468929134,0.217534098477083,-0.376837337336739, + -5.33661068234936e-05,0.00216496838716429,0.233541954923084,-0.407871722566017, + -5.6389576014948e-05,0.00284584208503746,0.249549811369085,-0.438906107795295, + -5.94130452066244e-05,0.00352671578291042,0.265557667815087,-0.469940493024573, + -6.24365143978567e-05,0.00420758948078381,0.281565524261088,-0.500974878253851, + -6.54599835895331e-05,0.00488846317865677,0.297573380707089,-0.532009263483129, + -6.84834527810985e-05,0.00556933687653038,0.313581237153091,-0.563043648712407, + -7.15069219722198e-05,0.00625021057440334,0.329589093599092,-0.594078033941685, + -7.45303911640072e-05,0.00693108427227607,0.345596950045093,-0.625112419170963, + -7.75538603551285e-05,0.00761195797014969,0.361604806491094,-0.656146804400241, + -8.0577329547582e-05,0.00829283166802153,0.377612662937095,-0.687181189629519, + -8.36007987393694e-05,0.0089737053658947,0.393620519383097,-0.718215574858797, + -8.66242679299356e-05,0.00965457906376921,0.409628375829099,-0.749249960088075, + -1.39798650033995e-05,-0.00668230991677934,0.0254389927688464,-0.00443116968810527, + -1.69672664514647e-05,-0.00600382301715574,0.0414163019668647,-0.0354861843567995, + -1.99546678995577e-05,-0.00532533611753216,0.0573936111648831,-0.0665411990254936, + -2.29420693475813e-05,-0.00464684921790859,0.0733709203629014,-0.0975962136941878, + -2.5929470795466e-05,-0.00396836231828462,0.08934822956092,-0.128651228362882, + -2.89168722435451e-05,-0.0032898754186611,0.105325538758938,-0.159706243031576, + -3.19042736915964e-05,-0.00261138851903753,0.121302847956957,-0.19076125770027, + -3.48916751397033e-05,-0.00193290161941406,0.137280157154975,-0.221816272368965, + -3.7879076587588e-05,-0.00125441471979015,0.153257466352994,-0.252871287037659, + -4.08664780357504e-05,-0.000575927820166688,0.169234775551012,-0.283926301706353, + -4.38538794837462e-05,0.000102559079456999,0.18521208474903,-0.314981316375047, + -4.68412809319085e-05,0.000781045979080464,0.201189393947049,-0.346036331043741, + -4.98286823799043e-05,0.00145953287870415,0.217166703145067,-0.377091345712435, + -5.28160838279002e-05,0.00213801977832784,0.233144012343085,-0.40814636038113, + -5.58034852756739e-05,0.00281650667795197,0.249121321541104,-0.439201375049824, + -5.87908867240028e-05,0.00349499357757521,0.265098630739122,-0.470256389718518, + -6.17782881719986e-05,0.00417348047719868,0.281075939937141,-0.501311404387212, + -6.47656896201054e-05,0.00485196737682236,0.297053249135159,-0.532366419055906, + -6.77530910681012e-05,0.00553045427644605,0.313030558333177,-0.563421433724601, + -7.07404925162081e-05,0.00620894117606952,0.329007867531196,-0.594476448393295, + -7.37278939644259e-05,0.00688742807569298,0.344985176729214,-0.625531463061989, + -7.67152954114225e-05,0.00756591497531778,0.360962485927233,-0.656586477730683, + -7.97026968605286e-05,0.00824440187494035,0.376939795125251,-0.687641492399377, + -8.26900983079693e-05,0.00892288877456471,0.39291710432327,-0.718696507068071, + -8.56774997564091e-05,0.00960137567418817,0.408894413521288,-0.749751521736766, + -1.38678946849796e-05,-0.00667670177047548,0.0254378401061605,-0.00444005328214347, + -1.68059349148764e-05,-0.00600152543255097,0.0413730693088682,-0.0355234584464598, + -1.9743975144787e-05,-0.00532634909462648,0.057308298511576,-0.0666068636107761, + -2.26820153746976e-05,-0.00465117275670196,0.0732435277142837,-0.0976902687750925, + -2.56200556044694e-05,-0.00397599641877727,0.0891787569169916,-0.128773673939409, + -2.85580958342968e-05,-0.00330082008085264,0.105113986119699,-0.159857079103725, + -3.1496136064374e-05,-0.00262564374292829,0.121049215322407,-0.190940484268042, + -3.44341762942291e-05,-0.00195046740500393,0.136984444525115,-0.222023889432358, + -3.73722165241119e-05,-0.00127529106707902,0.152919673727823,-0.253107294596674, + -4.03102567537728e-05,-0.000600114729154333,0.168854902930531,-0.284190699760991, + -4.32482969839887e-05,7.50616087696887e-05,0.184790132133238,-0.315274104925307, + -4.6186337213816e-05,0.000750237946694376,0.200725361335946,-0.346357510089623, + -4.91243774436434e-05,0.00142541428461884,0.216660590538653,-0.37744091525394, + -5.20624176734152e-05,0.00210059062254353,0.232595819741361,-0.408524320418256, + -5.50004579031871e-05,0.00277576696046822,0.248531048944069,-0.439607725582572, + -5.79384981336251e-05,0.00345094329839224,0.264466278146777,-0.470691130746889, + -6.08765383636189e-05,0.00412611963631648,0.280401507349484,-0.501774535911205, + -6.38145785933908e-05,0.00480129597424139,0.296336736552192,-0.532857941075521, + -6.67526188231626e-05,0.00547647231216586,0.3122719657549,-0.563941346239838, + -6.96906590524904e-05,0.00615164865009121,0.328207194957608,-0.595024751404154, + -7.26286992830394e-05,0.00682682498801501,0.344142424160316,-0.62610815656847, + -7.55667395130333e-05,0.00750200132593903,0.360077653363023,-0.657191561732787, + -7.85047797425831e-05,0.00817717766386439,0.376012882565731,-0.688274966897103, + -8.14428199723549e-05,0.00885235400178885,0.391948111768439,-0.719358372061419, + -8.43808602027929e-05,0.00952753033971243,0.407883340971146,-0.750441777225736, + -1.37142059711895e-05,-0.00666904468042966,0.0254362400625622,-0.00445220177231932, + -1.65852639968794e-05,-0.00599844402853861,0.0413138481253304,-0.0355744314997202, + -1.94563220225624e-05,-0.00532784337664755,0.0571914561880986,-0.066696661227121, + -2.23273800482593e-05,-0.00465724272475654,0.0730690642508667,-0.0978188909545219, + -2.51984380738868e-05,-0.00398664207286542,0.088946672313635,-0.128941120681923, + -2.80694960997918e-05,-0.00331604142097464,0.104824280376403,-0.160063350409323, + -3.09405541254748e-05,-0.00264544076908357,0.120701888439171,-0.191185580136724, + -3.38116121509913e-05,-0.00197484011719229,0.136579496501939,-0.222307809864125, + -3.66826701768685e-05,-0.00130423946530156,0.152457104564708,-0.253430039591526, + -3.95537282024128e-05,-0.000633638813410164,0.168334712627476,-0.284552269318927, + -4.24247862281235e-05,3.69618384810089e-05,0.184212320690244,-0.315674499046328, + -4.52958442538898e-05,0.000707562490371627,0.200089928753012,-0.346796728773729, + -4.81669022798226e-05,0.00137816314226247,0.21596753681578,-0.377918958501129, + -5.10379603049227e-05,0.0020487637941542,0.231845144878549,-0.40904118822853, + -5.39090183308e-05,0.00271936444604526,0.247722752941317,-0.440163417955931, + -5.67800763565662e-05,0.0033899650979361,0.263600361004085,-0.471285647683332, + -5.96511343823325e-05,0.00406056574982716,0.279477969066853,-0.502407877410733, + -6.25221924084318e-05,0.00473116640171733,0.295355577129621,-0.533530107138134, + -6.53932504333099e-05,0.00540176705360973,0.31123318519239,-0.564652336865534, + -6.82643084587431e-05,0.00607236770550101,0.327110793255158,-0.595774566592935, + -7.11353664847314e-05,0.00674296835739163,0.342988401317926,-0.626896796320336, + -7.40064245108307e-05,0.00741356900928247,0.358866009380694,-0.658019026047737, + -7.68774825360419e-05,0.00808416966117376,0.374743617443462,-0.689141255775138, + -7.97485405619192e-05,0.00875477031306504,0.390621225506231,-0.720263485502539, + -8.26195985879075e-05,0.00942537096495499,0.406498833568998,-0.75138571522994, + -1.35047929589946e-05,-0.00665868614607887,0.0254340270066494,-0.00446867189890189, + -1.628600905626e-05,-0.00599437827861751,0.0412333760583813,-0.0356435374237771, + -1.90672251536017e-05,-0.0053300704111563,0.0570327251101131,-0.0668184029486523, + -2.18484412508324e-05,-0.00466576254369488,0.072832074161845,-0.0979932684735275, + -2.46296573481464e-05,-0.00400145467623347,0.088631423213577,-0.129168133998403, + -2.74108734453771e-05,-0.00333714680877217,0.104430772265309,-0.160342999523278, + -3.01920895427188e-05,-0.00267283894131087,0.120230121317041,-0.191517865048153, + -3.29733056401715e-05,-0.00200853107384968,0.136029470368773,-0.222692730573028, + -3.57545217374855e-05,-0.00134422320638861,0.151828819420504,-0.253867596097903, + -3.85357378346329e-05,-0.000679915338926751,0.167628168472236,-0.285042461622779, + -4.13169539318359e-05,-1.56074714656729e-05,0.183427517523968,-0.316217327147654, + -4.40981700290943e-05,0.000648700395995849,0.1992268665757,-0.347392192672529, + -4.68793861265193e-05,0.00131300826345693,0.215026215627432,-0.378567058197404, + -4.96606022235557e-05,0.00197731613091889,0.230825564679164,-0.409741923722279, + -5.24418183209807e-05,0.00264162399837975,0.246624913730896,-0.440916789247155, + -5.52230344184057e-05,0.00330593186584105,0.262424262782628,-0.47209165477203, + -5.80042505153866e-05,0.00397023973330324,0.27822361183436,-0.503266520296905, + -6.07854666132557e-05,0.00463454760076343,0.294022960886091,-0.53444138582178, + -6.35666827105696e-05,0.00529885546822473,0.309822309937823,-0.565616251346655, + -6.63478988076616e-05,0.00596316333568603,0.325621658989555,-0.596791116871531, + -6.91291149048645e-05,0.00662747120314799,0.341421008041287,-0.627965982396406, + -7.19103310020675e-05,0.00729177907060885,0.357220357093019,-0.659140847921281, + -7.46915470986043e-05,0.00795608693807148,0.373019706144751,-0.690315713446156, + -7.74727631960292e-05,0.00862039480553278,0.388819055196483,-0.721490578971031, + -8.02539792941204e-05,0.00928470267299319,0.404618404248215,-0.752665444495907, + -1.32222791387193e-05,-0.00664484683601915,0.0254309825651138,-0.00449074092689025, + -1.58848799419603e-05,-0.00598913227789127,0.0411252163116373,-0.0357361354110802, + -1.85474807451458e-05,-0.00533341771976331,0.0568194500581608,-0.0669815298952701, + -2.12100815484562e-05,-0.00467770316163546,0.0725136838046843,-0.09822692437946, + -2.38726823516833e-05,-0.00402198860350761,0.0882079175512078,-0.12947231886365, + -2.65352831548549e-05,-0.0033662740453797,0.103902151297731,-0.16071771334784, + -2.91978839583318e-05,-0.00271055948725207,0.119596385044255,-0.19196310783203, + -3.18604847614479e-05,-0.002054844929124,0.135290618790778,-0.22320850231622, + -3.45230855645084e-05,-0.00139913037099604,0.150984852537302,-0.25445389680041, + -3.71856863680686e-05,-0.000743415812868298,0.166679086283825,-0.2856992912846, + -3.98482871712402e-05,-8.77012547404465e-05,0.182373320030349,-0.316944685768789, + -4.25108879745228e-05,0.000568013303387405,0.198067553776872,-0.348190080252979, + -4.51734887774724e-05,0.0012237278615157,0.213761787523396,-0.379435474737169, + -4.78360895808105e-05,0.00187944241964377,0.229456021269919,-0.410680869221359, + -5.04986903840932e-05,0.00253515697777118,0.245150255016443,-0.441926263705549, + -5.31612911873758e-05,0.00319087153589903,0.260844488762966,-0.473171658189739, + -5.58238919908804e-05,0.00384658609402688,0.27653872250949,-0.504417052673929, + -5.848649279383e-05,0.00450230065215518,0.292232956256013,-0.535662447158119, + -6.11490935971126e-05,0.00515801521028281,0.307927190002537,-0.566907841642309, + -6.38116944001732e-05,0.00581372976841088,0.32362142374906,-0.598153236126499, + -6.64742952038999e-05,0.00646944432653784,0.339315657495583,-0.629398630610689, + -6.91368960070715e-05,0.00712515888466614,0.355009891242107,-0.660644025094879, + -7.179949680991e-05,0.00778087344279488,0.370704124988631,-0.691889419579068, + -7.44620976130816e-05,0.00843658800092273,0.386398358735154,-0.723134814063259, + -7.71246984168084e-05,0.00909230255904969,0.402092592481677,-0.754380208547449, + -1.28462280215083e-05,-0.00662666231581905,0.0254268280857261,-0.00451985244472586, + -1.53555079866613e-05,-0.00598256610710396,0.040981960292534,-0.035858282519704, + -1.78647879517796e-05,-0.00533846989838876,0.056537092499342,-0.0671967125946821, + -2.03740679169673e-05,-0.00469437368967363,0.07209222470615,-0.0985351426696602, + -2.28833478820578e-05,-0.00405027748095849,0.0876473569129579,-0.129873572744638, + -2.53926278471761e-05,-0.00340618127224324,0.103202489119766,-0.161212002819616, + -2.79019078123222e-05,-0.00276208506352815,0.118757621326574,-0.192550432894595, + -3.04111877774682e-05,-0.00211798885481307,0.134312753533382,-0.223888862969573, + -3.29204677426698e-05,-0.0014738926460981,0.14986788574019,-0.255227293044551, + -3.54297477078158e-05,-0.00082979643738279,0.165423017946998,-0.286565723119529, + -3.79390276729064e-05,-0.000185700228667818,0.180978150153805,-0.317904153194507, + -4.04483076382189e-05,0.000458395980047488,0.196533282360614,-0.349242583269485, + -4.29575876030874e-05,0.00110249218876279,0.212088414567422,-0.380581013344463, + -4.54668675681225e-05,0.00174658839747832,0.22764354677423,-0.411919443419441, + -4.79761475332685e-05,0.00239068460619341,0.243198678981038,-0.443257873494419, + -5.04854274983035e-05,0.00303478081490871,0.258753811187846,-0.474596303569398, + -5.29947074638937e-05,0.00367887702362291,0.274308943394653,-0.505934733644376, + -5.55039874291507e-05,0.00432297323233799,0.289864075601461,-0.537273163719354, + -5.80132673939637e-05,0.00496706944105396,0.30541920780827,-0.568611593794332, + -6.05225473595539e-05,0.00561116564976794,0.320974340015077,-0.59995002386931, + -6.30318273241448e-05,0.00625526185848413,0.336529472221885,-0.631288453944288, + -6.55411072892909e-05,0.00689935806719921,0.352084604428693,-0.662626884019266, + -6.805038725477e-05,0.00754345427591385,0.367639736635501,-0.693965314094244, + -7.05596672194719e-05,0.00818755048462938,0.383194868842309,-0.725303744169222, + -7.30689471843959e-05,0.00883164669334491,0.398750001049117,-0.756642174244201, + -1.23545201799261e-05,-0.00660328428945223,0.0254212263169582,-0.00455747018312831, + -1.46710909880721e-05,-0.00597467811814334,0.0407958664774927,-0.0360161203213869, + -1.69876617961834e-05,-0.00534607194683445,0.0561705066380271,-0.0674747704596454, + -1.9304232604378e-05,-0.00471746577552562,0.0715451467985616,-0.0989334205979039, + -2.16208034123921e-05,-0.00408885960421657,0.0869197869590962,-0.130392070736163, + -2.39373742207949e-05,-0.00346025343290801,0.10229442711963,-0.161850720874421, + -2.62539450287536e-05,-0.00283164726159879,0.117669067280165,-0.19330937101268, + -2.85705158369343e-05,-0.0022030410902899,0.1330437074407,-0.224768021150938, + -3.0887086645115e-05,-0.00157443491898113,0.148418347601234,-0.256226671289197, + -3.32036574531291e-05,-0.000945828747672128,0.163792987761769,-0.287685321427455, + -3.55202282615874e-05,-0.000317222576363463,0.179167627922303,-0.319143971565714, + -3.78367990695461e-05,0.000311383594945314,0.194542268082837,-0.350602621703972, + -4.01533698776158e-05,0.000939989766254312,0.209916908243372,-0.382061271842231, + -4.24699406857409e-05,0.00156859593756331,0.225291548403906,-0.413519921980489, + -4.47865114940882e-05,0.00219720210887209,0.240666188564441,-0.444978572118748, + -4.71030823021579e-05,0.00282580828018109,0.256040828724975,-0.476437222257007, + -4.94196531105606e-05,0.0034544144514892,0.271415468885509,-0.507895872395265, + -5.17362239182972e-05,0.00408302062279886,0.286790109046044,-0.539354522533524, + -5.40527947264779e-05,0.00471162679410742,0.302164749206578,-0.570813172671782, + -5.63693655348807e-05,0.00534023296541619,0.317539389367113,-0.602271822810041, + -5.86859363428394e-05,0.00596883913672563,0.332914029527648,-0.633730472948299, + -6.10025071510201e-05,0.00659744530803419,0.348288669688182,-0.665189123086558, + -6.33190779590898e-05,0.00722605147934319,0.363663309848717,-0.696647773224816, + -6.56356487673815e-05,0.0078546576506513,0.37903795000925,-0.728106423363075, + -6.79522195753401e-05,0.00848326382196074,0.394412590169785,-0.759565073501333, + -1.17263788682875e-05,-0.0065740595809894,0.0254138036221959,-0.00460480546026015, + -1.38093612328249e-05,-0.00596570964058377,0.0405601316434969,-0.0362147313065718, + -1.58923435974595e-05,-0.00535735970017825,0.0557064596647978,-0.0678246571528835, + -1.79753259620108e-05,-0.0047490097597726,0.0708527876860989,-0.0994345829991951, + -2.00583083265204e-05,-0.00414065981936701,0.0859991157073998,-0.131044508845507, + -2.21412906912244e-05,-0.00353230987896158,0.101145443728701,-0.162654434691818, + -2.4224273055623e-05,-0.00292395993855565,0.116291771750002,-0.19426436053813, + -2.63072554202992e-05,-0.00231560999815028,0.131438099771303,-0.225874286384442, + -2.83902377847811e-05,-0.00170726005774446,0.146584427792604,-0.257484212230754, + -3.04732201495406e-05,-0.00109891011733931,0.161730755813905,-0.289094138077065, + -3.25562025137449e-05,-0.000490560176933164,0.176877083835206,-0.320704063923377, + -3.46391848783933e-05,0.000117789763472542,0.192023411856507,-0.352313989769688, + -3.67221672432083e-05,0.000726139703877804,0.207169739877808,-0.383923915616, + -3.88051496077457e-05,0.00133448964428373,0.222316067899109,-0.415533841462312, + -4.08881319722276e-05,0.00194283958468899,0.23746239592041,-0.447143767308623, + -4.29711143367095e-05,0.00255118952509426,0.252608723941711,-0.478753693154935, + -4.50540967011914e-05,0.00315953946550018,0.267755051963012,-0.510363619001247, + -4.71370790660064e-05,0.00376788940590567,0.282901379984313,-0.541973544847558, + -4.92200614303773e-05,0.00437623934631159,0.298047708005614,-0.57358347069387, + -5.13030437946371e-05,0.00498458928671774,0.313194036026915,-0.605193396540182, + -5.33860261595631e-05,0.00559293922712278,0.328340364048216,-0.636803322386493, + -5.54690085237119e-05,0.00620128916752893,0.343486692069517,-0.668413248232805, + -5.755199088886e-05,0.00680963910793331,0.358633020090817,-0.700023174079117, + -5.96349732528978e-05,0.0074179890483399,0.373779348112119,-0.731633099925428, + -6.17179556178238e-05,0.00802633898874472,0.388925676133419,-0.76324302577174, + -1.09474054983544e-05,-0.00653878010131805,0.0254042073544089,-0.00466241717516525, + -1.27599238548132e-05,-0.00595623538196288,0.0402708604933348,-0.0364564605231058, + -1.45724422112303e-05,-0.00537369066260773,0.0551375136322606,-0.0682505038710463, + -1.63849605677169e-05,-0.00479114594325258,0.0700041667711865,-0.100044547218987, + -1.81974789241202e-05,-0.00420860122389743,0.0848708199101124,-0.131838590566927, + -2.00099972804679e-05,-0.00362605650454217,0.0997374730490382,-0.163632633914868, + -2.18225156371488e-05,-0.00304351178518736,0.114604126187964,-0.195426677262808, + -2.36350339934965e-05,-0.00246096706583199,0.12947077932689,-0.227220720610749, + -2.54475523502884e-05,-0.00187842234647728,0.144337432465816,-0.259014763958689, + -2.72600707062476e-05,-0.00129587762712147,0.159204085604742,-0.29080880730663, + -2.90725890629839e-05,-0.000713332907766873,0.174070738743667,-0.32260285065457, + -3.08851074194982e-05,-0.000130788188411612,0.188937391882594,-0.354396894002511, + -3.2697625775735e-05,0.000451756530943648,0.203804045021519,-0.386190937350451, + -3.45101441320828e-05,0.00103430125029913,0.218670698160445,-0.417984980698392, + -3.63226624888746e-05,0.0016168459696535,0.233537351299371,-0.449779024046332, + -3.81351808449448e-05,0.00219939068900921,0.248404004438297,-0.481573067394273, + -3.99476992012371e-05,0.00278193540836491,0.263270657577223,-0.513367110742213, + -4.17602175583065e-05,0.00336448012771906,0.278137310716149,-0.545161154090154, + -4.35727359147098e-05,0.00394702484707432,0.293003963855075,-0.576955197438094, + -4.5385254270891e-05,0.00452956956643025,0.307870616994001,-0.608749240786035, + -4.71977726274053e-05,0.00511211428578484,0.322737270132926,-0.640543284133975, + -4.90102909841417e-05,0.00569465900513944,0.337603923271852,-0.672337327481916, + -5.08228093404339e-05,0.00627720372449492,0.352470576410778,-0.704131370829856, + -5.26353276962821e-05,0.00685974844385084,0.367337229549704,-0.735925414177797, + -5.44478460527964e-05,0.00744229316320588,0.38220388268863,-0.767719457525737, + -1.00161865496037e-05,-0.00649794593372762,0.0253922078414258,-0.00472976015830734, + -1.15326006883271e-05,-0.00594717025762809,0.0399294456681986,-0.0367390205298823, + -1.30490148270573e-05,-0.00539639458152857,0.0544666834949714,-0.0687482809014573, + -1.4565428965746e-05,-0.00484561890542889,0.0690039213217444,-0.100757541273032, + -1.60818431044207e-05,-0.00429484322932938,0.0835411591485172,-0.132766801644607, + -1.7598257243151e-05,-0.00374406755322987,0.09807839697529,-0.164776062016182, + -1.9114671381798e-05,-0.00319329187713024,0.112615634802063,-0.196785322387757, + -2.06310855205283e-05,-0.00264251620103073,0.127152872628836,-0.228794582759332, + -2.21474996593418e-05,-0.00209174052493133,0.141690110455608,-0.260803843130907, + -2.36639137978778e-05,-0.00154096484883137,0.156227348282381,-0.292813103502482, + -2.51803279370244e-05,-0.000990189172732636,0.170764586109154,-0.324822363874057, + -2.66967420757824e-05,-0.00043941349663279,0.185301823935927,-0.356831624245632, + -2.82131562143184e-05,0.000111362179466834,0.1998390617627,-0.388840884617207, + -2.97295703528544e-05,0.000662137855566236,0.214376299589472,-0.420850144988782, + -3.12459844914459e-05,0.0012129135316663,0.228913537416246,-0.452859405360357, + -3.27623986304815e-05,0.00176368920776548,0.243450775243018,-0.484868665731932, + -3.4278812769184e-05,0.00231446488386511,0.257988013069791,-0.516877926103507, + -3.57952269074424e-05,0.00286524055996518,0.272525250896564,-0.548887186475082, + -3.7311641046589e-05,0.00341601623606391,0.287062488723337,-0.580896446846657, + -3.88280551850695e-05,0.00396679191216376,0.30159972655011,-0.612905707218232, + -4.0344469323772e-05,0.00451756758826338,0.316136964376883,-0.644914967589807, + -4.18608834625855e-05,0.00506834326436278,0.330674202203655,-0.676924227961382, + -4.33772976018432e-05,0.00561911894046174,0.345211440030428,-0.708933488332957, + -4.48937117402126e-05,0.00616989461656203,0.359748677857201,-0.740942748704532, + -4.641012587836e-05,0.00672067029266188,0.374285915683974,-0.772952009076107, + -8.95061131261227e-06,-0.00645292424524583,0.0253778317728423,-0.00480485928043545, + -1.01635120729332e-05,-0.00593962074851551,0.0395445359692769,-0.0370541240116016, + -1.1376412833275e-05,-0.00542631725178516,0.0537112401657115,-0.0693033887427677, + -1.25893135936028e-05,-0.00491301375505498,0.0678779443621459,-0.101552653473934, + -1.38022143539307e-05,-0.00439971025832459,0.0820446485585806,-0.1338019182051, + -1.50151151142308e-05,-0.00388640676159435,0.0962113527550151,-0.166051182936266, + -1.62280158744754e-05,-0.00337310326486384,0.11037805695145,-0.198300447667432, + -1.74409166347478e-05,-0.00285979976813344,0.124544761147884,-0.230549712398598, + -1.86538173950757e-05,-0.00234649627140304,0.138711465344319,-0.262798977129764, + -1.98667181555701e-05,-0.00183319277467298,0.152878169540754,-0.295048241860931, + -2.10796189158424e-05,-0.00131988927794269,0.167044873737188,-0.327297506592097, + -2.22925196765034e-05,-0.000806585781212732,0.181211577933623,-0.359546771323263, + -2.35054204364982e-05,-0.000293282284481888,0.195378282130057,-0.391796036054429, + -2.47183211967705e-05,0.000220021212248733,0.209544986326492,-0.424045300785595, + -2.59312219570429e-05,0.000733324708978689,0.223711690522926,-0.456294565516761, + -2.71441227174263e-05,0.00124662820570909,0.237878394719361,-0.488543830247927, + -2.83570234775876e-05,0.00175993170243949,0.252045098915796,-0.520793094979093, + -2.95699242383041e-05,0.00227323519916922,0.26621180311223,-0.55304235971026, + -3.07828249982434e-05,0.00278653869590006,0.280378507308665,-0.585291624441425, + -3.19957257587378e-05,0.00329984219263024,0.294545211505099,-0.617540889172592, + -3.3208626518455e-05,0.00381314568936153,0.308711915701534,-0.649790153903758, + -3.44215272796156e-05,0.00432644918609038,0.322878619897968,-0.682039418634924, + -3.5634428040221e-05,0.004839752682821,0.337045324094403,-0.71428868336609, + -3.68473288002713e-05,0.00535305617955117,0.351212028290838,-0.746537948097256, + -3.80602295600996e-05,0.00586635967628224,0.365378732487272,-0.778787212828422, + -7.79067106557868e-06,-0.0064058714063689,0.025361475361132,-0.00488433690778027, + -8.71464295375268e-06,-0.00593457731235156,0.0391323924974063,-0.0373875989762279, + -9.63861484193362e-06,-0.00546328321833428,0.0529033096336805,-0.0698908610446755, + -1.05625867301007e-05,-0.00499198912431692,0.0666742267699548,-0.102394123113123, + -1.14865586183788e-05,-0.00452069503029973,0.080445143906229,-0.134897385181571, + -1.24105305066013e-05,-0.00404940093628248,0.0942160610425033,-0.167400647250018, + -1.33345023948239e-05,-0.00357810684226534,0.107986978178777,-0.199903909318466, + -1.425847428288e-05,-0.00310681274824776,0.121757895315052,-0.232407171386914, + -1.5182446171158e-05,-0.00263551865423051,0.135528812451326,-0.264910433455361, + -1.61064180592141e-05,-0.00216422456021326,0.1492997295876,-0.297413695523809, + -1.70303899476587e-05,-0.00169293046619612,0.163070646723875,-0.329916957592256, + -1.79543618354927e-05,-0.00122163637217843,0.176841563860149,-0.362420219660704, + -1.88783337238818e-05,-0.000750342278161398,0.190612480996423,-0.394923481729152, + -1.98023056120489e-05,-0.000279048184144148,0.204383398132697,-0.427426743797599, + -2.07262775000494e-05,0.000192245909873323,0.218154315268972,-0.459930005866047, + -2.1650249388494e-05,0.000663540003890573,0.231925232405246,-0.492433267934494, + -2.25742212766056e-05,0.00113483409790782,0.24569614954152,-0.524936530002942, + -2.34981931649392e-05,0.00160612819192507,0.259467066677795,-0.55743979207139, + -2.44221650530507e-05,0.00207742228594276,0.273237983814069,-0.589943054139837, + -2.53461369410513e-05,0.00254871637996024,0.287008900950343,-0.622446316208285, + -2.62701088294959e-05,0.00302001047397704,0.300779818086617,-0.654949578276732, + -2.71940807173854e-05,0.00349130456799474,0.314550735222892,-0.68745284034518, + -2.8118052605941e-05,0.0039625986620111,0.328321652359165,-0.719956102413627, + -2.90420244946077e-05,0.0044338927560279,0.34209256949544,-0.752459364482075, + -2.9965996381498e-05,0.00490518685004737,0.355863486631715,-0.784962626550523, + -6.5946658991331e-06,-0.00635936840938081,0.0253439198651874,-0.0049639222493114, + -7.26444071441623e-06,-0.00593256992546679,0.0387147523091504,-0.0377215258917449, + -7.93421552977569e-06,-0.00550577144155279,0.0520855847531134,-0.0704791295341784, + -8.60399034513515e-06,-0.00507897295763887,0.0654564171970763,-0.103236733176612, + -9.27376516038358e-06,-0.00465217447372474,0.0788272496410394,-0.135994336819045, + -9.94353997574304e-06,-0.00422537598981076,0.0921980820850024,-0.168751940461479, + -1.06133147909082e-05,-0.00379857750589652,0.105568914528965,-0.201509544103912, + -1.12830896062954e-05,-0.00337177902198249,0.118939746972929,-0.234267147746346, + -1.19528644214606e-05,-0.00294498053806846,0.132310579416891,-0.267024751388779, + -1.26226392370699e-05,-0.00251818205415477,0.145681411860854,-0.299782355031213, + -1.32924140519575e-05,-0.00209138357024008,0.159052244304818,-0.332539958673646, + -1.39621888672892e-05,-0.00166458508632639,0.17242307674878,-0.36529756231608, + -1.46319636827874e-05,-0.00123778660241269,0.185793909192743,-0.398055165958513, + -1.53017384983412e-05,-0.000810988118499001,0.199164741636706,-0.430812769600947, + -1.59715133133398e-05,-0.000384189634584198,0.21253557408067,-0.46357037324338, + -1.6641288128505e-05,4.26088493301613e-05,0.225906406524633,-0.496327976885814, + -1.73110629441142e-05,0.000469407333243632,0.239277238968595,-0.529085580528247, + -1.79808377592794e-05,0.000896205817158213,0.252648071412559,-0.561843184170681, + -1.86506125744446e-05,0.00132300430107213,0.266018903856521,-0.594600787813114, + -1.93203873900538e-05,0.0017498027849856,0.279389736300484,-0.627358391455548, + -1.9990162205108e-05,0.00217660126889951,0.292760568744447,-0.660115995097981, + -2.06599370204952e-05,0.00260339975281365,0.30613140118841,-0.692873598740415, + -2.13297118358824e-05,0.00303019823672823,0.319502233632374,-0.725631202382848, + -2.19994866508255e-05,0.00345699672064237,0.332873066076336,-0.758388806025282, + -2.26692614664348e-05,0.00388379520455562,0.346243898520299,-0.791146409667715, + -5.42848221371517e-06,-0.00631587937051781,0.0253262013124811,-0.00503932162701836, + -5.89167125854273e-06,-0.00593348347584252,0.0383145203489413,-0.0380378891961575, + -6.35486030345356e-06,-0.00555108758116729,0.0513028393854015,-0.0710364567652966, + -6.81804934832275e-06,-0.00516869168649192,0.0642911584218618,-0.104035024334436, + -7.28123839308092e-06,-0.0047862957918165,0.077279477458322,-0.137033591903575, + -7.74442743795012e-06,-0.00440389989714118,0.0902677964947822,-0.170032159472714, + -8.20761648270829e-06,-0.00402150400246581,0.103256115531242,-0.203030727041853, + -8.67080552768851e-06,-0.00363910810779067,0.116244434567703,-0.236029294610992, + -9.13399457264097e-06,-0.00325671221311541,0.129232753604163,-0.269027862180131, + -9.59718361726036e-06,-0.00287431631844004,0.142221072640623,-0.30202642974927, + -1.00603726622683e-05,-0.00249192042376456,0.155209391677083,-0.335024997318409, + -1.05235617069432e-05,-0.00210952452908897,0.168197710713544,-0.368023564887548, + -1.09867507520067e-05,-0.00172712863441449,0.181186029750003,-0.401022132456688, + -1.14499397967927e-05,-0.0013447327397389,0.194174348786464,-0.434020700025827, + -1.19131288415231e-05,-0.000962336845063305,0.207162667822924,-0.467019267594965, + -1.23763178869751e-05,-0.000579940950389046,0.220150986859384,-0.500017835164105, + -1.28395069310949e-05,-0.000197545055712345,0.233139305895845,-0.533016402733244, + -1.3302695976547e-05,0.000184850838962136,0.246127624932305,-0.566014970302383, + -1.37658850213329e-05,0.000567246733637727,0.259115943968765,-0.599013537871522, + -1.42290740656748e-05,0.000949642628313319,0.272104263005225,-0.632012105440661, + -1.46922631107937e-05,0.00133203852298847,0.285092582041685,-0.6650106730098, + -1.51554521554687e-05,0.00171443441766428,0.298080901078146,-0.698009240578939, + -1.56186412004766e-05,0.00209683031233876,0.311069220114605,-0.731007808148078, + -1.60818302453736e-05,0.00247922620701457,0.324057539151066,-0.764006375717217, + -1.65450192899375e-05,0.00286162210168994,0.337045858187526,-0.797004943286357, + -4.35168288635823e-06,-0.00627725978127903,0.0253093718361411,-0.00510709848344121, + -4.65912107407151e-06,-0.00593664760446716,0.0379509645294384,-0.0383222696633804, + -4.9665592617848e-06,-0.0055960354276553,0.0505925572227357,-0.0715374408433196, + -5.27399744956747e-06,-0.00525542325084344,0.063234149916033,-0.104752612023259, + -5.58143563716973e-06,-0.00491481107403152,0.0758757426093302,-0.137967783203198, + -5.8888738248275e-06,-0.00457419889721944,0.0885173353026277,-0.171182954383137, + -6.19631201270732e-06,-0.00423358672040774,0.101158927995925,-0.204398125563076, + -6.50375020028182e-06,-0.00389297454359561,0.113800520689222,-0.237613296743015, + -6.81118838780082e-06,-0.00355236236678358,0.12644211338252,-0.270828467922955, + -7.11862657587492e-06,-0.00321175018997222,0.139083706075817,-0.304043639102894, + -7.4260647633384e-06,-0.00287113801316008,0.151725298769114,-0.337258810282833, + -7.73350295113495e-06,-0.00253052583634816,0.164366891462411,-0.370473981462772, + -8.0409411389315e-06,-0.00218991365953647,0.177008484155709,-0.403689152642711, + -8.34837932661703e-06,-0.00184930148272455,0.189650076849006,-0.43690432382265, + -8.6558175145246e-06,-0.00150868930591286,0.202291669542303,-0.47011949500259, + -8.96325570232115e-06,-0.00116807712910094,0.214933262235601,-0.503334666182529, + -9.27069388945156e-06,-0.000827464952288359,0.227574854928898,-0.536549837362468, + -9.57813207735914e-06,-0.000486852775476443,0.240216447622196,-0.569765008542407, + -9.88557026537773e-06,-0.000146240598665193,0.252858040315493,-0.602980179722347, + -1.01930084526192e-05,0.00019437157814739,0.26549963300879,-0.636195350902285, + -1.05004466407488e-05,0.000534983754958418,0.278141225702087,-0.669410522082225, + -1.08078848281012e-05,0.000875595931770778,0.290782818395384,-0.702625693262164, + -1.11153230156757e-05,0.00121620810858269,0.303424411088682,-0.735840864442103, + -1.14227612030282e-05,0.0015568202853955,0.316066003781979,-0.769056035622042, + -1.17301993911578e-05,0.00189743246220653,0.328707596475276,-0.802271206801981, + -3.40627984006525e-06,-0.0062445074647781,0.0252942634384722,-0.00516520534647556, + -3.60385146050413e-06,-0.00594112973499392,0.0376364252876892,-0.0385660764394793, + -3.80142308087361e-06,-0.00563775200520966,0.0499785871369062,-0.071966947532483, + -3.99899470115983e-06,-0.00533437427542527,0.0623207489861233,-0.105367818625487, + -4.19656632158483e-06,-0.00503099654564115,0.0746629108353402,-0.13876868971849, + -4.39413794198207e-06,-0.00472761881585693,0.0870050726845572,-0.172169560811494, + -4.59170956237931e-06,-0.00442424108607264,0.0993472345337743,-0.205570431904498, + -4.78928118274879e-06,-0.00412086335628836,0.111689396382991,-0.238971302997502, + -4.98685280320155e-06,-0.00381748562650441,0.124031558232208,-0.272372174090505, + -5.18442442343225e-06,-0.00351410789671969,0.136373720081425,-0.305773045183509, + -5.38199604410705e-06,-0.00321073016693596,0.148715881930642,-0.339173916276513, + -5.57956766444878e-06,-0.00290735243715168,0.161058043779859,-0.372574787369516, + -5.77713928479051e-06,-0.00260397470736717,0.173400205629076,-0.40597565846252, + -5.97471090513224e-06,-0.00230059697758289,0.185742367478293,-0.439376529555524, + -6.1722825256405e-06,-0.00199721924779883,0.19808452932751,-0.472777400648527, + -6.36985414592672e-06,-0.00169384151801499,0.210426691176727,-0.506178271741531, + -6.56742576654601e-06,-0.00139046378823049,0.222768853025944,-0.539579142834535, + -6.76499738661018e-06,-0.00108708605844576,0.235111014875162,-0.572980013927539, + -6.96256900734049e-06,-0.000783708328662369,0.247453176724378,-0.606380885020543, + -7.16014062729364e-06,-0.000480330598877199,0.259795338573596,-0.639781756113546, + -7.35771224813497e-06,-0.000176952869093583,0.272137500422812,-0.67318262720655, + -7.55528386786608e-06,0.000126424860691365,0.28447966227203,-0.706583498299553, + -7.75285548837434e-06,0.00042980259047587,0.296821824121247,-0.739984369392557, + -7.95042710954874e-06,0.000733180320258597,0.309163985970463,-0.773385240485561, + -8.14799872972394e-06,0.0010365580500431,0.32150614781968,-0.806786111578565, + -2.61224921833947e-06,-0.00621779686777803,0.0252813566324146,-0.00521303325079621, + -2.73646024999408e-06,-0.00594604662143827,0.0373755508193538,-0.0387667544067805, + -2.86067128163481e-06,-0.00567429637509842,0.0494697450062931,-0.0723204755627647, + -2.98488231320615e-06,-0.00540254612875862,0.0615639391932323,-0.105874196718749, + -3.10909334491627e-06,-0.00513079588241888,0.0736581333801715,-0.139427917874733, + -3.23330437662639e-06,-0.0048590456360792,0.0857523275671107,-0.172981639030717, + -3.35751540811446e-06,-0.00458729538973934,0.0978465217540498,-0.206535360186702, + -3.48172643993561e-06,-0.0043155451433996,0.109940715940989,-0.240089081342686, + -3.60593747134041e-06,-0.00404379489705942,0.122034910127929,-0.27364280249867, + -3.73014850296727e-06,-0.0037720446507199,0.134129104314868,-0.307196523654654, + -3.85435953470514e-06,-0.00350029440438004,0.146223298501807,-0.340750244810639, + -3.97857056655404e-06,-0.00322854415804064,0.158317492688746,-0.374303965966623, + -4.10278159795885e-06,-0.00295679391170056,0.170411686875685,-0.407857687122607, + -4.22699262947468e-06,-0.00268504366536071,0.182505881062625,-0.441411408278591, + -4.35120366115704e-06,-0.00241329341902108,0.194600075249564,-0.474965129434575, + -4.47541469283941e-06,-0.002141543172681,0.206694269436503,-0.50851885059056, + -4.59962572441075e-06,-0.00186979292634115,0.218788463623443,-0.542072571746544, + -4.72383675642618e-06,-0.00159804268000197,0.230882657810381,-0.575626292902528, + -4.8480477878865e-06,-0.00132629243366189,0.242976851997321,-0.609180014058512, + -4.97225881934682e-06,-0.00105454218732204,0.25507104618426,-0.642733735214497, + -5.09646985102918e-06,-0.000782791940982186,0.267165240371199,-0.676287456370481, + -5.22068088304461e-06,-0.000511041694642778,0.279259434558139,-0.709841177526465, + -5.34489191461596e-06,-0.000239291448302481,0.291353628745078,-0.743394898682449, + -5.46910294585423e-06,3.24587980369273e-05,0.303447822932017,-0.776948619838434, + -5.59331397842477e-06,0.000304209044375447,0.315542017118955,-0.810502340994418, + -1.96980984534106e-06,-0.00619669904589003,0.025270780592608,-0.00525109781491041, + -2.04703023620745e-06,-0.00595075304648801,0.0371666545363841,-0.0389264670151655, + -2.12425062715016e-06,-0.00570480704708615,0.0490625284801601,-0.0726018362154206, + -2.20147101809287e-06,-0.00545886104768428,0.0609584024239361,-0.106277205415676, + -2.27869140900783e-06,-0.00521291504828231,0.0728542763677122,-0.139952574615931, + -2.35591179981176e-06,-0.00496696904888028,0.0847501503114882,-0.173627943816186, + -2.43313219064345e-06,-0.0047210230494783,0.0966460242552643,-0.207303313016441, + -2.51035258169718e-06,-0.00447507705007644,0.10854189819904,-0.240978682216696, + -2.58757297250112e-06,-0.00422913105067457,0.120437772142816,-0.274654051416951, + -2.66479336330505e-06,-0.00398318505127215,0.132333646086593,-0.308329420617206, + -2.74201375422001e-06,-0.0037372390518704,0.144229520030369,-0.342004789817462, + -2.81923414541252e-06,-0.00349129305246887,0.156125393974144,-0.375680159017717, + -2.89645453616094e-06,-0.00324534705306645,0.168021267917921,-0.409355528217972, + -2.97367492702039e-06,-0.0029994010536647,0.179917141861697,-0.443030897418227, + -3.05089531793534e-06,-0.00275345505426272,0.191813015805473,-0.476706266618482, + -3.12811570890581e-06,-0.00250750905486097,0.203708889749249,-0.510381635818737, + -3.20533609965423e-06,-0.00226156305545877,0.215604763693025,-0.544057005018992, + -3.28255649084674e-06,-0.00201561705605724,0.227500637636801,-0.577732374219247, + -3.35977688170619e-06,-0.00176967105665504,0.239396511580577,-0.611407743419502, + -3.43699727312075e-06,-0.00152372505725396,0.251292385524353,-0.645083112619757, + -3.51421766364712e-06,-0.00127777905785154,0.263188259468129,-0.678758481820013, + -3.59143805461759e-06,-0.00103183305844956,0.275084133411905,-0.712433851020268, + -3.66865844536601e-06,-0.000785887059047585,0.286980007355681,-0.746109220220523, + -3.74587883600341e-06,-0.000539941059645166,0.298875881299457,-0.779784589420778, + -3.82309922664081e-06,-0.000293995060242747,0.310771755243234,-0.813459958621033, + -1.46554387259884e-06,-0.00618045097756702,0.0252624014483386,-0.00528058882068535, + -1.51349218004138e-06,-0.0059548832993663,0.0370040323170038,-0.0390502063923481, + -1.56144048751861e-06,-0.00572931562116558,0.048745663185669,-0.0728198239640108, + -1.60938879489869e-06,-0.00550374794296482,0.0604872940543341,-0.106589441535674, + -1.65733710233429e-06,-0.00527818026476412,0.0722289249229993,-0.140359059107336, + -1.70528540979764e-06,-0.00505261258656331,0.0839705557916645,-0.174128676678999, + -1.75323371737202e-06,-0.00482704490836272,0.0957121866603297,-0.207898294250662, + -1.80118202458557e-06,-0.00460147723016169,0.107453817528995,-0.241667911822324, + -1.8491303321877e-06,-0.00437590955196132,0.11919544839766,-0.275437529393987, + -1.89707863951227e-06,-0.0041503418737604,0.130937079266325,-0.30920714696565, + -1.94502694689236e-06,-0.00392477419555948,0.14267871013499,-0.342976764537313, + -1.99297525438347e-06,-0.00369920651735889,0.154420341003656,-0.376746382108975, + -2.04092356187457e-06,-0.00347363883915808,0.166161971872321,-0.410515999680638, + -2.08887186942119e-06,-0.00324807116095749,0.177903602740986,-0.444285617252301, + -2.13682017669026e-06,-0.00302250348275668,0.189645233609651,-0.478055234823964, + -2.18476848423688e-06,-0.00279693580455631,0.201386864478316,-0.511824852395626, + -2.23271679145043e-06,-0.00257136812635483,0.213128495346982,-0.545594469967289, + -2.28066509888603e-06,-0.00234580044815402,0.224870126215647,-0.579364087538952, + -2.32861340643264e-06,-0.00212023276995388,0.236611757084312,-0.613133705110615, + -2.37656171397926e-06,-0.00189466509175329,0.248353387952977,-0.646903322682277, + -2.42451002163691e-06,-0.00166909741355248,0.260095018821642,-0.68067294025394, + -2.47245832851739e-06,-0.00144352973535122,0.271836649690307,-0.714442557825603, + -2.52040663661912e-06,-0.0012179620571513,0.283578280558972,-0.748212175397266, + -2.56835494349961e-06,-0.000992394378949157,0.295319911427638,-0.781981792968928, + -2.61630325071316e-06,-0.000766826700748346,0.307061542296303,-0.815751410540591, + -1.07906766994709e-06,-0.00616817972183895,0.0252559358611204,-0.00530296515732785, + -1.10905105556169e-06,-0.00595829925679961,0.0368801897736026,-0.0391440937958805, + -1.13903444118324e-06,-0.00574841879176025,0.0485044436860849,-0.0729852224344332, + -1.16901782679091e-06,-0.00553853832672085,0.0601286975985671,-0.106826351072986, + -1.19900121237082e-06,-0.00532865786168146,0.0717529515110493,-0.140667479711539, + -1.22898459806176e-06,-0.00511877739664213,0.0833772054235316,-0.174508608350091, + -1.25896798369718e-06,-0.0049088969316029,0.0950014593360137,-0.208349736988644, + -1.2889513690828e-06,-0.00469901646656312,0.106625713248496,-0.242190865627196, + -1.31893475469047e-06,-0.00448913600152401,0.118249967160978,-0.276031994265749, + -1.34891814052018e-06,-0.00427925553648456,0.129874221073461,-0.309873122904302, + -1.37890152596132e-06,-0.00406937507144534,0.141498474985942,-0.343714251542855, + -1.40888491145796e-06,-0.00385949460640567,0.153122728898425,-0.377555380181407, + -1.43886829717665e-06,-0.00364961414136622,0.164746982810907,-0.41139650881996, + -1.46885168289534e-06,-0.00343973367632699,0.176371236723389,-0.445237637458512, + -1.49883506850301e-06,-0.00322985321128777,0.187995490635872,-0.479078766097065, + -1.52881845383313e-06,-0.0030199727462481,0.199619744548354,-0.512919894735618, + -1.55880183982937e-06,-0.0028100922812091,0.211243998460836,-0.546761023374171, + -1.58878522515948e-06,-0.00260021181616921,0.222868252373319,-0.580602152012723, + -1.61876861060062e-06,-0.00239033135112976,0.234492506285801,-0.614443280651276, + -1.64875199659686e-06,-0.00218045088609076,0.246116760198283,-0.648284409289828, + -1.67873538248209e-06,-0.00197057042105175,0.257741014110765,-0.682125537928381, + -1.70871876747913e-06,-0.00176068995601186,0.269365268023247,-0.715966666566934, + -1.73870215314231e-06,-0.0015508094909733,0.280989521935729,-0.749807795205486, + -1.76868553858345e-06,-0.00134092902593297,0.292613775848212,-0.783648923844039, + -1.79866892446867e-06,-0.00113104856089352,0.304238029760694,-0.817490052482591, + -7.88248433407357e-07,-0.00615904771366496,0.0252510466753871,-0.00531967566949122, + -8.07243923386936e-07,-0.00596100914560357,0.036787450125136,-0.039214208338032, + -8.26239413387331e-07,-0.00576297057754227,0.0483238535748849,-0.0731087410065727, + -8.45234903401604e-07,-0.00556493200948088,0.0598602570246339,-0.107003273675114, + -8.64230393471388e-07,-0.00536689344141961,0.0713966604743828,-0.140897806343654, + -8.83225883541172e-07,-0.00516885487335828,0.0829330639241318,-0.174792339012195, + -9.02221373333401e-07,-0.00497081630529672,0.0944694673738807,-0.208686871680736, + -9.21216863458696e-07,-0.0047727777372355,0.10600587082363,-0.242581404349277, + -9.40212353084391e-07,-0.00457473916917361,0.117542274273379,-0.276475937017817, + -9.5920784337622e-07,-0.00437670060111273,0.129078677723128,-0.310370469686358, + -9.78203333334982e-07,-0.00417866203305128,0.140615081172876,-0.344265002354899, + -9.97198822960677e-07,-0.00398062346498929,0.152151484622626,-0.37815953502344, + -1.01619431336353e-06,-0.00378258489692884,0.163687888072374,-0.41205406769198, + -1.03518980326678e-06,-0.00358454632886684,0.175224291522124,-0.445948600360521, + -1.05418529317003e-06,-0.00338650776080596,0.186760694971872,-0.479843133029062, + -1.07318078323981e-06,-0.00318846919274463,0.198297098421621,-0.513737665697602, + -1.09217627308755e-06,-0.00299043062468285,0.20983350187137,-0.547632198366143, + -1.11117176337938e-06,-0.00279239205662174,0.221369905321119,-0.581526731034684, + -1.13016725333814e-06,-0.00259435348856041,0.232906308770868,-0.615421263703225, + -1.14916274340793e-06,-0.00239631492049908,0.244442712220617,-0.649315796371766, + -1.16815823325567e-06,-0.0021982763524373,0.255979115670366,-0.683210329040306, + -1.18715372310341e-06,-0.00200023778437552,0.267515519120115,-0.717104861708847, + -1.2061492137283e-06,-0.00180219921631553,0.279051922569864,-0.750999394377388, + -1.22514470346502e-06,-0.00160416064825331,0.290588326019613,-0.784893927045929, + -1.24414019331276e-06,-0.00140612208019197,0.302124729469362,-0.818788459714469, + -5.72414513677622e-07,-0.00615232617215074,0.0252474053070923,-0.00533200752270217, + -5.84649016172056e-07,-0.00596309611677742,0.03671887135759,-0.0392659507522268, + -5.96883518652613e-07,-0.00577386606140412,0.0481903374080877,-0.0731998939817515, + -6.09118021105415e-07,-0.00558463600603071,0.0596618034585855,-0.107133837211276, + -6.21352523516583e-07,-0.00539540595065729,0.0711332695090832,-0.141067780440801, + -6.33587025927751e-07,-0.00520617589528383,0.082604735559581,-0.175001723670325, + -6.45821528366675e-07,-0.00501694583991041,0.0940762016100787,-0.20893566689985, + -6.58056031055398e-07,-0.00482771578453745,0.105547667660576,-0.242869610129375, + -6.70290533466567e-07,-0.00463848572916414,0.117019133711074,-0.276803553358899, + -6.82525035988757e-07,-0.00444925567379073,0.128490599761572,-0.310737496588424, + -6.94759538344414e-07,-0.00426002561841732,0.139962065812069,-0.344671439817949, + -7.06994040811093e-07,-0.00407079556304368,0.151433531862567,-0.378605383047473, + -7.19228543555328e-07,-0.00388156550767071,0.162904997913065,-0.412539326276998, + -7.31463045577918e-07,-0.00369233545229686,0.174376463963563,-0.446473269506523, + -7.43697548211131e-07,-0.00350310539692367,0.18584793001406,-0.480407212736047, + -7.55932050955366e-07,-0.0033138753415507,0.197319396064558,-0.514341155965572, + -7.68166553588578e-07,-0.00312464528617751,0.208790862115056,-0.548275099195097, + -7.80401055888724e-07,-0.00293541523080409,0.220262328165553,-0.582209042424621, + -7.92635558299892e-07,-0.00274618517543068,0.231733794216051,-0.616142985654146, + -8.04870060489016e-07,-0.0025569551200566,0.243205260266549,-0.65007692888367, + -8.17104562900184e-07,-0.00236772506468386,0.254676726317046,-0.684010872113195, + -8.29339065866463e-07,-0.00217849500931067,0.266148192367544,-0.71794481534272, + -8.41573567944565e-07,-0.00198926495393748,0.277619658418041,-0.751878758572245, + -8.53808070133688e-07,-0.00180003489856295,0.28909112446854,-0.78581270180177, + -8.66042573099968e-07,-0.00161080484319065,0.300562590519037,-0.819746645031294, + -4.13869175520942e-07,-0.0061474187365574,0.0252447236841371,-0.00534102845601091, + -4.21889341600812e-07,-0.00596466965806236,0.0366686298337597,-0.0393038010947261, + -4.29909507757009e-07,-0.00578192057956745,0.0480925359833822,-0.0732665737334412, + -4.3792967382994e-07,-0.00559917150107236,0.0595164421330048,-0.107229346372156, + -4.45949840027771e-07,-0.00541642242257745,0.0709403482826274,-0.141192119010872, + -4.53970006031312e-07,-0.00523367334408242,0.0823642544322499,-0.175154891649587, + -4.61990172090365e-07,-0.00505092426558718,0.0937881605818727,-0.209117664288302, + -4.70010338315952e-07,-0.00486817518709237,0.105212066731495,-0.243080436927017, + -4.78030504458271e-07,-0.00468542610859746,0.116635972881118,-0.277043209565732, + -4.8605067054508e-07,-0.00450267703010254,0.12805987903074,-0.311005982204447, + -4.94070836298821e-07,-0.00431992795160707,0.139483785180363,-0.344968754843162, + -5.0209100238563e-07,-0.00413717887311194,0.150907691329985,-0.378931527481877, + -5.10111168861016e-07,-0.00395442979461746,0.162331597479608,-0.412894300120593, + -5.18131334836802e-07,-0.00377168071612233,0.17375550362923,-0.446857072759308, + -5.26151501145655e-07,-0.00358893163762763,0.185179409778853,-0.480819845398023, + -5.34171667232464e-07,-0.0034061825591325,0.196603315928475,-0.514782618036738, + -5.4219183320825e-07,-0.00322343348063736,0.208027222078098,-0.548745390675453, + -5.50211999628125e-07,-0.00304068440214289,0.219451128227721,-0.582708163314168, + -5.58232165936978e-07,-0.0028579353236482,0.230875034377343,-0.616670935952883, + -5.66252330913564e-07,-0.00267518624515128,0.242298940526966,-0.650633708591598, + -5.74272497333439e-07,-0.00249243716665681,0.253722846676589,-0.684596481230314, + -5.82292663975359e-07,-0.00230968808816279,0.265146752826211,-0.718559253869029, + -5.90312829396034e-07,-0.00212693900966698,0.276570658975833,-0.752522026507744, + -5.98332995704887e-07,-0.00194418993117251,0.287994565125456,-0.786484799146459, + -6.06353162346807e-07,-0.0017614408526776,0.299418471275079,-0.820447571785174, + -1.88214363341863e-05,-0.00685505252793257,0.0372352849382559,-0.0183293921652007, + -2.19693087145506e-05,-0.00617600832893198,0.053071722954117,-0.0485726429861822, + -2.51171810948525e-05,-0.00549696412993123,0.0689081609699782,-0.0788158938071636, + -2.82650534750573e-05,-0.00481791993093039,0.0847445989858394,-0.109059144628145, + -3.14129258554563e-05,-0.00413887573192984,0.100581037001701,-0.139302395449127, + -3.45607982356055e-05,-0.00345983153292906,0.116417475017562,-0.169545646270108, + -3.77086706160323e-05,-0.00278078733392839,0.132253913033423,-0.199788897091089, + -4.08565429965146e-05,-0.00210174313492795,0.148090351049284,-0.230032147912071, + -4.40044153765529e-05,-0.00142269893592695,0.163926789065145,-0.260275398733052, + -4.71522877570352e-05,-0.000743654736926391,0.179763227081006,-0.290518649554034, + -5.03001601370734e-05,-6.46105379251694e-05,0.195599665096868,-0.320761900375015, + -5.34480325177777e-05,0.000614433661074942,0.211436103112729,-0.351005151195997, + -5.65959048976494e-05,0.00129347786007616,0.22727254112859,-0.381248402016978, + -5.97437772780762e-05,0.00197252205907672,0.243108979144451,-0.41149165283796, + -6.28916496586696e-05,0.00265156625807705,0.258945417160312,-0.441734903658941, + -6.60395220386523e-05,0.00333061045707805,0.274781855176173,-0.471978154479923, + -6.91873944190791e-05,0.00400965465607883,0.290618293192035,-0.502221405300904, + -7.23352667991728e-05,0.00468869885507983,0.306454731207896,-0.532464656121886, + -7.54831391794886e-05,0.00536774305408039,0.322291169223757,-0.562707906942867, + -7.86310115603595e-05,0.00604678725308005,0.338127607239618,-0.592951157763849, + -8.17788839406752e-05,0.00672583145208128,0.353964045255479,-0.62319440858483, + -8.49267563204359e-05,0.0074048756510825,0.369800483271341,-0.653437659405811, + -8.80746287010847e-05,0.00808391985008283,0.385636921287202,-0.683680910226793, + -9.12225010808454e-05,0.00876296404908405,0.401473359303063,-0.713924161047774, + -9.43703734609391e-05,0.00944200824808528,0.417309797318924,-0.744167411868756, + -1.87366418219342e-05,-0.00684975478369067,0.0372263427390231,-0.0183417609263533, + -2.18564035990298e-05,-0.00617246373150038,0.0530393725162785,-0.0486008942974748, + -2.49761653760283e-05,-0.00549517267930999,0.0688524022935339,-0.0788600276685963, + -2.80959271531378e-05,-0.00481788162711977,0.0846654320707892,-0.109119161039718, + -3.12156889302473e-05,-0.00414059057492955,0.100478461848044,-0.139378294410839, + -3.4335450707107e-05,-0.00346329952273894,0.1162914916253,-0.169637427781961, + -3.7455212484383e-05,-0.00278600847054877,0.132104521402555,-0.199896561153082, + -4.05749742612982e-05,-0.00210871741835839,0.147917551179811,-0.230155694524204, + -4.36947360384354e-05,-0.00143142636616844,0.163730580957066,-0.260414827895325, + -4.68144978154617e-05,-0.000754135313977833,0.179543610734321,-0.290673961266447, + -4.99342595923769e-05,-7.68442617873344e-05,0.195356640511577,-0.320933094637568, + -5.30540213692365e-05,0.000600446790403275,0.211169670288832,-0.35119222800869, + -5.61737831464293e-05,0.00127773784259322,0.226982700066087,-0.381451361379811, + -5.9293544923622e-05,0.00195502889478383,0.242795729843343,-0.411710494750933, + -6.24133067010924e-05,0.00263231994697355,0.258608759620598,-0.441969628122054, + -6.55330684780076e-05,0.00330961099916349,0.274421789397853,-0.472228761493176, + -6.86528302548117e-05,0.00398690205135432,0.290234819175109,-0.502487894864297, + -7.1772592031949e-05,0.00466419310354449,0.306047848952364,-0.532747028235419, + -7.48923538085311e-05,0.00534148415573532,0.32186087872962,-0.56300616160654, + -7.80121155858904e-05,0.00601877520792549,0.337673908506875,-0.593265294977662, + -8.11318773628056e-05,0.00669606626011587,0.35348693828413,-0.623524428348783, + -8.42516391402759e-05,0.00737335731230582,0.369299968061386,-0.653783561719905, + -8.73714009170801e-05,0.0080506483644962,0.385112997838641,-0.684042695091026, + -9.04911626937732e-05,0.00872793941668748,0.400926027615897,-0.714301828462148, + -9.36109244710215e-05,0.00940523046887742,0.416739057393152,-0.744560961833269, + -1.86192833677642e-05,-0.00684244467215672,0.0372139665350253,-0.0183588529880309, + -2.17003591440612e-05,-0.00616759190513824,0.0529946244144051,-0.0486399340322654, + -2.47814349203651e-05,-0.00549273913811976,0.0687752822937849,-0.0789210150764998, + -2.78625106967523e-05,-0.00481788637110131,0.0845559401731646,-0.109202096120734, + -3.09435864731256e-05,-0.00414303360408297,0.100336598052544,-0.139483177164969, + -3.40246622494156e-05,-0.00346818083706446,0.116117255931924,-0.169764258209203, + -3.71057380255668e-05,-0.00279332807004573,0.131897913811304,-0.200045339253438, + -4.01868138019124e-05,-0.00211847530302745,0.147678571690684,-0.230326420297672, + -4.32678895783689e-05,-0.00144362253600905,0.163459229570063,-0.260607501341907, + -4.63489653548255e-05,-0.000768769768990873,0.179239887449443,-0.290888582386141, + -4.943004113106e-05,-9.39170019722546e-05,0.195020545328823,-0.321169663430376, + -5.2511116907128e-05,0.000580935765046586,0.210801203208203,-0.35145074447461, + -5.55921926835845e-05,0.00125578853206476,0.226581861087582,-0.381731825518845, + -5.86732684600966e-05,0.00193064129908316,0.242362518966962,-0.412012906563079, + -6.17543442361645e-05,0.00260549406610155,0.258143176846342,-0.442293987607314, + -6.48354200128987e-05,0.00328034683311951,0.273923834725721,-0.472575068651548, + -6.79164957891887e-05,0.00395519960013813,0.289704492605101,-0.502856149695783, + -7.09975715654787e-05,0.00463005236715697,0.305485150484481,-0.533137230740017, + -7.40786473417687e-05,0.00530490513417536,0.321265808363861,-0.563418311784251, + -7.71597231180587e-05,0.00597975790119376,0.337046466243241,-0.593699392828486, + -8.02407988945708e-05,0.00665461066821216,0.352827124122621,-0.62398047387272, + -8.33218746706388e-05,0.007329463435231,0.368607782002,-0.654261554916955, + -8.64029504470398e-05,0.00800431620224895,0.38438843988138,-0.684542635961189, + -8.94840262234409e-05,0.00867916896926735,0.40016909776076,-0.714823717005424, + -9.2565102000064e-05,0.0093540217362853,0.415949755640139,-0.745104798049659, + -1.84575372020879e-05,-0.00683241166888501,0.0371969096452189,-0.0183823589785741, + -2.1485713185318e-05,-0.00616094185344759,0.0529330010553548,-0.0486936237306827, + -2.45138891684926e-05,-0.00548947203801003,0.0686690924654907,-0.0790048884827912, + -2.75420651517089e-05,-0.00481800222257261,0.0844051838756265,-0.1093161532349, + -3.05702411349806e-05,-0.00414653240713514,0.100141275285762,-0.139627417987008, + -3.35984171181691e-05,-0.00347506259169783,0.115877366695898,-0.169938682739117, + -3.66265931014409e-05,-0.0028035927762603,0.131613458106034,-0.200249947491225, + -3.96547690846294e-05,-0.00213212296082288,0.14734954951617,-0.230561212243334, + -4.26829450678734e-05,-0.00146065314538546,0.163085640926306,-0.260872476995442, + -4.57111210511729e-05,-0.000789183329947929,0.178821732336442,-0.291183741747551, + -4.87392970341394e-05,-0.000117713514510065,0.194557823746578,-0.321495006499659, + -5.17674730172724e-05,0.000553756300927244,0.210293915156713,-0.351806271251768, + -5.47956490006829e-05,0.00122522611636455,0.226030006566849,-0.382117536003877, + -5.78238249840379e-05,0.00189669593180186,0.241766097976985,-0.412428800755985, + -6.08520009670599e-05,0.00256816574723939,0.257502189387121,-0.442740065508094, + -6.38801769502484e-05,0.00323963556267715,0.273238280797257,-0.473051330260202, + -6.69083529335479e-05,0.00391110537811445,0.288974372207393,-0.503362595012311, + -6.99365289167364e-05,0.00458257519355176,0.304710463617528,-0.533673859764419, + -7.29647048999249e-05,0.00525404500898952,0.320446555027665,-0.563985124516528, + -7.59928808832244e-05,0.00592551482442705,0.3361826464378,-0.594296389268636, + -7.90210568660799e-05,0.0065969846398648,0.351918737847936,-0.624607654020745, + -8.20492328499345e-05,0.00726845445530122,0.367654829258072,-0.654918918772853, + -8.5077408833345e-05,0.00793992427073809,0.383390920668207,-0.685230183524962, + -8.81055848157564e-05,0.00861139408617717,0.399127012078344,-0.71554144827707, + -9.11337607991669e-05,0.00928286390161448,0.41486310348848,-0.745852713029179, + -1.82359026973528e-05,-0.0068187423677884,0.0371735380238382,-0.0184144733187535, + -2.11923778945938e-05,-0.00615194997760457,0.0528486543261413,-0.0487669756379732, + -2.4148853091821e-05,-0.00548515758742074,0.0685237706284444,-0.0791194779571929, + -2.71053282892286e-05,-0.00481836519723722,0.0841988869307474,-0.109471980276413, + -3.00618034866085e-05,-0.00415157280705358,0.0998740032330505,-0.139824482595632, + -3.30182786838773e-05,-0.00348478041686973,0.115549119535354,-0.170176984914852, + -3.59747538810629e-05,-0.00281798802668609,0.131224235837657,-0.200529487234072, + -3.89312290784427e-05,-0.00215119563650235,0.14689935213996,-0.230881989553292, + -4.18877042758226e-05,-0.00148440324631871,0.162574468442263,-0.261234491872511, + -4.48441794729804e-05,-0.000817610856134965,0.178249584744566,-0.291586994191731, + -4.78006546705267e-05,-0.000150818465951552,0.193924701046869,-0.321939496510951, + -5.0757129867629e-05,0.000515973924232638,0.209599817349172,-0.35229199883017, + -5.37136050651754e-05,0.00118276631441594,0.225274933651475,-0.38264450114939, + -5.66700802620557e-05,0.00184955870460035,0.240950049953778,-0.41299700346861, + -5.96265554598796e-05,0.00251635109478343,0.256625166256081,-0.443349505787829, + -6.25830306567599e-05,0.0031831434849674,0.272300282558384,-0.473702008107049, + -6.55395058540842e-05,0.00384993587515092,0.287975398860687,-0.504054510426269, + -6.84959810511865e-05,0.00451672826533511,0.30365051516299,-0.534407012745489, + -7.14524562486218e-05,0.00518352065551841,0.319325631465293,-0.564759515064708, + -7.44089314462792e-05,0.00585031304570194,0.335000747767596,-0.595112017383928, + -7.73654066436036e-05,0.00651710543588546,0.350675864069899,-0.625464519703148, + -8.03218818407059e-05,0.00718389782606943,0.366350980372202,-0.655817022022367, + -8.32783570380302e-05,0.00785069021625295,0.382026096674505,-0.686169524341587, + -8.62348322353546e-05,0.00851748260643692,0.397701212976808,-0.716522026660807, + -8.91913074322348e-05,0.00918427499662089,0.413376329279111,-0.746874528980027, + -1.79346047260026e-05,-0.00680030432163194,0.0371417678314268,-0.0184579555447157, + -2.07950609872887e-05,-0.00613994738454396,0.0527341638745772,-0.0488662927713706, + -2.36555172485886e-05,-0.005479590447456,0.0683265599177277,-0.0792746299980255, + -2.65159735098608e-05,-0.00481923351036806,0.0839189559608781,-0.10968296722468, + -2.93764297711607e-05,-0.00415887657328007,0.0995113520040287,-0.140091304451335, + -3.22368860323219e-05,-0.00349851963619197,0.115103748047179,-0.17049964167799, + -3.50973422939549e-05,-0.00283816269910442,0.130696144090329,-0.200907978904645, + -3.79577985551438e-05,-0.00217780576201632,0.14628854013348,-0.2313163161313, + -4.08182548163882e-05,-0.00151744882492832,0.16188093617663,-0.261724653357955, + -4.36787110777992e-05,-0.000857091887840555,0.177473332219781,-0.29213299058461, + -4.65391673391546e-05,-0.000196734950752564,0.193065728262931,-0.322541327811265, + -4.9399623600177e-05,0.000463621986335871,0.208658124306082,-0.35294966503792, + -5.2260079861588e-05,0.00112397892342342,0.224250520349232,-0.383358002264575, + -5.512053612311e-05,0.00178433586051119,0.239842916392383,-0.413766339491229, + -5.79809923841879e-05,0.0024446927975994,0.255435312435533,-0.444174676717884, + -6.08414486454878e-05,0.00310504973468717,0.271027708478684,-0.474583013944539, + -6.37019049071208e-05,0.00376540667177472,0.286620104521834,-0.504991351171194, + -6.65623611679766e-05,0.0044257636088636,0.302212500564985,-0.535399688397849, + -6.94228174293876e-05,0.00508612054595137,0.317804896608135,-0.565808025624504, + -7.22832736904655e-05,0.00574647748303958,0.333397292651286,-0.596216362851159, + -7.51437299522095e-05,0.00640683442012691,0.348989688694436,-0.626624700077814, + -7.80041862128433e-05,0.00706719135721556,0.364582084737586,-0.657033037304469, + -8.08646424746984e-05,0.00772754829430289,0.380174480780737,-0.687441374531124, + -8.37250987359983e-05,0.00838790523139066,0.395766876823887,-0.717849711757778, + -8.65855549972983e-05,0.00904826216847932,0.411359272867038,-0.748258048984433, + -1.75293962865336e-05,-0.00677576723881289,0.0370990460173373,-0.0185161179004411, + -2.02633523189166e-05,-0.00612420253475468,0.0525805047211186,-0.0489991405802043, + -2.29973083512441e-05,-0.0054726378306964,0.0680619634249,-0.0794821632599674, + -2.57312643835717e-05,-0.00482107312663815,0.0835434221286812,-0.109965185939731, + -2.84652204158575e-05,-0.00416950842257968,0.0990248808324627,-0.140448208619494, + -3.11991764481434e-05,-0.00351794371852143,0.114506339536244,-0.170931231299257, + -3.39331324807346e-05,-0.0028663790144634,0.129987798240025,-0.20141425397902, + -3.66670885128539e-05,-0.00221481431040504,0.145469256943807,-0.231897276658783, + -3.94010445453619e-05,-0.00156324960634668,0.160950715647588,-0.262380299338546, + -4.21350005775367e-05,-0.000911684902288434,0.176432174351369,-0.29286332201831, + -4.48689566101002e-05,-0.000260120198230407,0.19191363305515,-0.323346344698073, + -4.76029126424415e-05,0.000391444505827732,0.207395091758932,-0.353829367377836, + -5.03368686746164e-05,0.00104300920988654,0.222876550462713,-0.384312390057599, + -5.30708247066247e-05,0.00169457391394512,0.238358009166495,-0.414795412737362, + -5.58047807394102e-05,0.00234613861800304,0.253839467870276,-0.445278435417126, + -5.85387367717516e-05,0.00299770332206117,0.269320926574057,-0.475761458096889, + -6.1272692804204e-05,0.00364926802611931,0.284802385277839,-0.506244480776652, + -6.40066488362123e-05,0.00430083273017789,0.30028384398162,-0.536727503456415, + -6.67406048686647e-05,0.00495239743423603,0.315765302685401,-0.567210526136178, + -6.94745609011171e-05,0.00560396213829417,0.331246761389183,-0.597693548815941, + -7.22085169332365e-05,0.00625552684235275,0.346728220092964,-0.628176571495704, + -7.4942472966022e-05,0.00690709154641045,0.362209678796745,-0.658659594175468, + -7.76764289983634e-05,0.00755865625046859,0.377691137500526,-0.689142616855231, + -8.04103850307047e-05,0.00821022095452673,0.393172596204307,-0.719625639534994, + -8.31443410631572e-05,0.00886178565858531,0.408654054908089,-0.750108662214757, + -1.69922629897207e-05,-0.00674369450186987,0.0370424276515967,-0.0185926635691099, + -1.9563170846032e-05,-0.0061040222919802,0.0523773798652408,-0.0491739774524651, + -2.21340787024266e-05,-0.00546435008209067,0.0677123320788847,-0.0797552913358204, + -2.47049865587934e-05,-0.00482467787220103,0.0830472842925288,-0.110336605219176, + -2.72758944151186e-05,-0.00418500566231128,0.0983822365061729,-0.140917919102531, + -2.9846802271416e-05,-0.0035453334524217,0.113717188719817,-0.171499232985886, + -3.24177101278522e-05,-0.002905661242532,0.129052140933461,-0.202080546869242, + -3.49886179841774e-05,-0.00226598903264241,0.144387093147105,-0.232661860752597, + -3.75595258406691e-05,-0.00162631682275294,0.159722045360749,-0.263243174635952, + -4.01304336968833e-05,-0.000986644612863241,0.175056997574393,-0.293824488519308, + -4.27013415530975e-05,-0.000346972402973433,0.190391949788037,-0.324405802402663, + -4.52722494096447e-05,0.000292699806916152,0.205726902001681,-0.354987116286018, + -4.78431572659699e-05,0.000932372016805516,0.221061854215325,-0.385568430169373, + -5.04140651225171e-05,0.00157204422669488,0.236396806428969,-0.416149744052729, + -5.29849729786758e-05,0.00221171643658491,0.251731758642613,-0.446731057936084, + -5.55558808349454e-05,0.00285138864647472,0.267066710856257,-0.477312371819439, + -5.81267886915482e-05,0.00349106085636408,0.282401663069901,-0.507893685702795, + -6.06976965478179e-05,0.00413073306625367,0.297736615283545,-0.53847499958615, + -6.32686044041986e-05,0.00477040527614325,0.313071567497189,-0.569056313469505, + -6.58395122608013e-05,0.00541007748603284,0.328406519710833,-0.599637627352861, + -6.8410420117071e-05,0.0060497496959222,0.343741471924477,-0.630218941236216, + -7.09813279733407e-05,0.00668942190581268,0.359076424138122,-0.660800255119571, + -7.35522358296103e-05,0.00732909411570182,0.374411376351766,-0.691381569002926, + -7.612314368588e-05,0.00796876632559185,0.38974632856541,-0.721962882886282, + -7.86940515423717e-05,0.00860843853548099,0.405081280779054,-0.752544196769637, + -1.62937396231272e-05,-0.0067027433278069,0.0369688261835577,-0.018691278456884, + -1.86604746705704e-05,-0.00607893113012178,0.0521141854907746,-0.0493992223139529, + -2.10272097180136e-05,-0.00545511893243666,0.0672595447979915,-0.0801071661710218, + -2.33939447654985e-05,-0.00483130673475157,0.0824049041052085,-0.110815110028091, + -2.57606798129972e-05,-0.00420749453706659,0.0975502634124253,-0.14152305388516, + -2.81274148602184e-05,-0.00358368233938122,0.112695622719642,-0.172230997742229, + -3.04941499078559e-05,-0.0029598701416963,0.127840982026859,-0.202938941599298, + -3.28608849553547e-05,-0.00233605794401126,0.142986341334076,-0.233646885456367, + -3.52276200029089e-05,-0.00171224574632622,0.158131700641293,-0.264354829313435, + -3.75943550502411e-05,-0.00108843354864108,0.17327705994851,-0.295062773170504, + -3.99610900979064e-05,-0.000464621350956262,0.188422419255727,-0.325770717027573, + -4.23278251451276e-05,0.000159190846729551,0.203567778562944,-0.356478660884642, + -4.46945601925153e-05,0.000783003044414032,0.21871313787016,-0.387186604741711, + -4.70612952400695e-05,0.0014068152420994,0.233858497177378,-0.41789454859878, + -4.94280302876238e-05,0.00203062743978433,0.249003856484594,-0.448602492455849, + -5.17947653349005e-05,0.0026544396374697,0.264149215791811,-0.479310436312918, + -5.41615003825102e-05,0.00327825183515484,0.279294575099029,-0.510018380169987, + -5.6528235430342e-05,0.00390206403283933,0.294439934406245,-0.540726324027056, + -5.88949704776187e-05,0.00452587623052447,0.309585293713462,-0.571434267884125, + -6.12617055247844e-05,0.00514968842821051,0.324730653020679,-0.602142211741194, + -6.36284405725052e-05,0.00577350062589455,0.339876012327896,-0.632850155598263, + -6.5995175620337e-05,0.00639731282357925,0.355021371635113,-0.663558099455332, + -6.83619106673916e-05,0.00702112502126484,0.37016673094233,-0.6942660433124, + -7.07286457145573e-05,0.00764493721895088,0.385312090249547,-0.724973987169469, + -7.3095380762167e-05,0.00826874941663558,0.400457449556764,-0.755681931026538, + -1.54075864325573e-05,-0.00665199721018116,0.0368755166188757,-0.0188148945336712, + -1.75280170387065e-05,-0.00604892369816176,0.0517818705359336,-0.0496815720354004, + -1.96484476449321e-05,-0.00544585018614246,0.0666882244529914,-0.0805482495371296, + -2.17688782510328e-05,-0.00484277667412297,0.0815945783700494,-0.111414927038859, + -2.3889308857189e-05,-0.00423970316210354,0.0965009322871072,-0.142281604540588, + -2.60097394632897e-05,-0.00363662965008404,0.111407286204165,-0.173148282042317, + -2.81301700693071e-05,-0.00303355613806455,0.126313640121223,-0.204014959544047, + -3.02506006756298e-05,-0.00243048262604539,0.141219994038281,-0.234881637045776, + -3.23710312818415e-05,-0.00182740911402601,0.156126347955339,-0.265748314547505, + -3.44914618879977e-05,-0.00122433560200674,0.171032701872396,-0.296614992049234, + -3.66118924940428e-05,-0.000621262089987029,0.185939055789454,-0.327481669550963, + -3.87323231005321e-05,-1.81885779682034e-05,0.200845409706512,-0.358348347052693, + -4.08527537067993e-05,0.000584884934051288,0.21575176362357,-0.389215024554422, + -4.29731843128445e-05,0.00118795844607056,0.230658117540628,-0.420081702056151, + -4.50936149192227e-05,0.00179103195808961,0.245564471457685,-0.450948379557881, + -4.72140455248793e-05,0.00239410547010954,0.260470825374743,-0.48181505705961, + -4.9334476131091e-05,0.00299717898212926,0.275377179291802,-0.512681734561339, + -5.14549067375247e-05,0.00360025249414808,0.290283533208859,-0.543548412063068, + -5.35753373431813e-05,0.00420332600616824,0.305189887125918,-0.574415089564797, + -5.56957679497261e-05,0.00480639951818684,0.320096241042975,-0.605281767066527, + -5.78161985562708e-05,0.00540947303020634,0.335002594960033,-0.636148444568256, + -5.99366291622605e-05,0.00601254654222538,0.349908948877091,-0.667015122069985, + -6.20570597681391e-05,0.00661562005424532,0.364815302794149,-0.697881799571714, + -6.41774903740178e-05,0.00721869356626526,0.379721656711207,-0.728748477073443, + -6.62979209800074e-05,0.0078217670782843,0.394628010628264,-0.759615154575173, + -1.43181155143612e-05,-0.00659140106304036,0.0367609212111324,-0.018964640389785, + -1.61550505929503e-05,-0.00601472995701616,0.0513757431305874,-0.0500236044138784, + -1.79919856715394e-05,-0.00543805885099197,0.0659905650500425,-0.0810825684379719, + -1.98289207502811e-05,-0.00486138774496792,0.0806053869694975,-0.112141532462065, + -2.1665855828884e-05,-0.00428471663894381,0.0952202088889524,-0.143200496486159, + -2.35027909075425e-05,-0.0037080455329197,0.109835030808407,-0.174259460510252, + -2.53397259862287e-05,-0.00313137442689571,0.124449852727862,-0.205318424534346, + -2.71766610647206e-05,-0.00255470332087127,0.139064674647318,-0.236377388558439, + -2.90135961433236e-05,-0.00197803221484727,0.153679496566772,-0.267436352582533, + -3.0850531222204e-05,-0.00140136110882327,0.168294318486227,-0.298495316606626, + -3.2687466300918e-05,-0.000824690002799278,0.182909140405682,-0.329554280630719, + -3.45244013796875e-05,-0.000248018896775504,0.197523962325137,-0.360613244654813, + -3.63613364581794e-05,0.000328652209249158,0.212138784244593,-0.391672208678906, + -3.81982715365048e-05,0.000905323315273376,0.226753606164047,-0.422731172703, + -4.00352066155518e-05,0.00148199442129715,0.241368428083502,-0.453790136727093, + -4.18721416935997e-05,0.00205866552732226,0.255983250002958,-0.484849100751187, + -4.37090767724246e-05,0.00263533663334559,0.270598071922412,-0.51590806477528, + -4.55460118512496e-05,0.00321200773937003,0.285212893841868,-0.546967028799374, + -4.73829469300746e-05,0.00378867884539424,0.299827715761323,-0.578025992823467, + -4.92198820079004e-05,0.00436534995141891,0.314442537680778,-0.60908495684756, + -5.10568170869474e-05,0.00494202105744268,0.329057359600233,-0.640143920871654, + -5.28937521658834e-05,0.00551869216346601,0.343672181519687,-0.671202884895747, + -5.47306872443754e-05,0.00609536326949067,0.358287003439143,-0.702261848919841, + -5.65676223228673e-05,0.00667203437551445,0.372901825358597,-0.733320812943934, + -5.84045574021363e-05,0.00724870548153778,0.387516647278052,-0.764379776968028, + -1.30291705836005e-05,-0.00652217453444938,0.0366255656968742,-0.0191387034144726, + -1.45579484050751e-05,-0.00597795876668852,0.0508987517815769,-0.050421179290967, + -1.60867262264802e-05,-0.00543374299892763,0.0651719378662797,-0.0817036551674614, + -1.76155040479409e-05,-0.00488952723116676,0.0794451239509824,-0.112986131043956, + -1.91442818693044e-05,-0.00434531146340589,0.0937183100356851,-0.14426860692045, + -2.06730596907512e-05,-0.00380109569564491,0.107991496120388,-0.175551082796945, + -2.22018375121702e-05,-0.00325687992788404,0.122264682205091,-0.206833558673439, + -2.37306153336725e-05,-0.0027126641601235,0.136537868289793,-0.238116034549934, + -2.52593931549527e-05,-0.00216844839236219,0.150811054374496,-0.269398510426428, + -2.67881709765105e-05,-0.00162423262460143,0.165084240459199,-0.300680986302922, + -2.83169487977908e-05,-0.00108001685684034,0.179357426543902,-0.331963462179417, + -2.98457266190155e-05,-0.000535801089079246,0.193630612628604,-0.363245938055911, + -3.13745044409064e-05,8.41467868095691e-06,0.207903798713307,-0.394528413932406, + -3.29032822621311e-05,0.00055263044644227,0.22217698479801,-0.4258108898089, + -3.44320600835779e-05,0.00109684621420314,0.236450170882713,-0.457093365685395, + -3.59608379052467e-05,0.00164106198196357,0.250723356967415,-0.488375841561889, + -3.74896157261384e-05,0.0021852777497251,0.264996543052118,-0.519658317438383, + -3.90183935481403e-05,0.00272949351748553,0.279269729136821,-0.550940793314878, + -4.05471713694761e-05,0.00327370928524617,0.293542915221523,-0.582223269191372, + -4.20759491905898e-05,0.00381792505300815,0.307816101306227,-0.613505745067867, + -4.36047270119255e-05,0.0043621408207688,0.322089287390929,-0.644788220944361, + -4.51335048340384e-05,0.00490635658852812,0.336362473475631,-0.676070696820856, + -4.66622826553742e-05,0.00545057235628965,0.350635659560334,-0.70735317269735, + -4.81910604762659e-05,0.00599478812405119,0.364908845645038,-0.738635648573844, + -4.97198382976016e-05,0.00653900389181183,0.37918203172974,-0.769918124450339, + -1.1571773419268e-05,-0.00644698744831899,0.0364728765592646,-0.0193315834815309, + -1.27872832081238e-05,-0.00594095685927656,0.0503640259712118,-0.0508617339066942, + -1.40027929969727e-05,-0.00543492627023401,0.064255175383159,-0.0823918843318574, + -1.52183027858632e-05,-0.00492889568119159,0.0781463247951061,-0.113922034757021, + -1.64338125747676e-05,-0.00442286509214906,0.0920374742070534,-0.145452185182184, + -1.76493223636442e-05,-0.00391683450310665,0.105928623619001,-0.176982335607347, + -1.88648321524654e-05,-0.00341080391406423,0.119819773030948,-0.208512486032511, + -2.0080341941342e-05,-0.00290477332502181,0.133710922442895,-0.240042636457674, + -2.12958517299411e-05,-0.00239874273597895,0.147602071854842,-0.271572786882837, + -2.25113615188732e-05,-0.00189271214693632,0.161493221266789,-0.303102937308, + -2.37268713078054e-05,-0.00138668155789423,0.175384370678736,-0.334633087733164, + -2.4942381096793e-05,-0.000880650968851926,0.189275520090683,-0.366163238158327, + -2.61578908855586e-05,-0.000374620379809176,0.203166669502631,-0.39769338858349, + -2.73734006746573e-05,0.000131410209233129,0.217057818914578,-0.429223539008653, + -2.85889104632009e-05,0.000637440798275879,0.230948968326525,-0.460753689433817, + -2.9804420252133e-05,0.00114347138731841,0.244840117738472,-0.49228383985898, + -3.10199300408431e-05,0.00164950197636071,0.258731267150419,-0.523813990284143, + -3.22354398297753e-05,0.00215553256540324,0.272622416562367,-0.555344140709307, + -3.34509496190405e-05,0.00266156315444532,0.286513565974314,-0.58687429113447, + -3.46664594077506e-05,0.00316759374348763,0.300404715386261,-0.618404441559633, + -3.58819691965717e-05,0.00367362433253016,0.314295864798208,-0.649934591984797, + -3.70974789849488e-05,0.00417965492157357,0.328187014210156,-0.68146474240996, + -3.83129887741029e-05,0.00468568551061566,0.342078163622102,-0.712994892835123, + -3.95284985629241e-05,0.00519171609965774,0.355969313034049,-0.744525043260286, + -4.07440083520783e-05,0.00569774668869982,0.369860462445996,-0.77605519368545, + -1.00059536845415e-05,-0.00636969301938656,0.0363093321376009,-0.019534309837596, + -1.09259525469946e-05,-0.00590631936602409,0.0497950121854411,-0.0513247782909903, + -1.18459514094615e-05,-0.00544294571266168,0.0632806922332813,-0.0831152467443846, + -1.27659502718869e-05,-0.00497957205929911,0.0767663722811217,-0.114905715197779, + -1.36859491342844e-05,-0.00451619840593664,0.0902520523289619,-0.146696183651173, + -1.46059479967098e-05,-0.00405282475257407,0.103737732376802,-0.178486652104568, + -1.55259468589963e-05,-0.00358945109921138,0.117223412424643,-0.210277120557962, + -1.64459457215882e-05,-0.00312607744584914,0.130709092472483,-0.242067589011356, + -1.7365944583958e-05,-0.00266270379248645,0.144194772520323,-0.273858057464751, + -1.82859434463278e-05,-0.0021993301391241,0.157680452568163,-0.305648525918145, + -1.92059423088642e-05,-0.00173595648576153,0.171166132616004,-0.337438994371539, + -2.01259411712895e-05,-0.00127258283239917,0.184651812663844,-0.369229462824934, + -2.10459400337148e-05,-0.000809209179036596,0.198137492711684,-0.401019931278328, + -2.19659388960847e-05,-0.000345835525674243,0.211623172759524,-0.432810399731722, + -2.28859377583435e-05,0.000117538127688555,0.225108852807365,-0.464600868185117, + -2.38059366209908e-05,0.00058091178105113,0.238594532855205,-0.496391336638511, + -2.47259354831941e-05,0.00104428543441371,0.252080212903045,-0.528181805091905, + -2.56459343456195e-05,0.00150765908777606,0.265565892950885,-0.5599722735453, + -2.65659332080448e-05,0.00197103274113841,0.279051572998726,-0.591762741998694, + -2.74859320706922e-05,0.00243440639450099,0.292537253046566,-0.623553210452088, + -2.84059309331175e-05,0.00289778004786356,0.306022933094406,-0.655343678905482, + -2.93259297952098e-05,0.00336115370122636,0.319508613142247,-0.687134147358877, + -3.02459286580792e-05,0.00382452735458827,0.332994293190087,-0.718924615812271, + -3.11659275201714e-05,0.00428790100795151,0.346479973237928,-0.750715084265666, + -3.20859263820417e-05,0.00475127466131431,0.359965653285768,-0.78250555271906, + -8.41328971042804e-06,-0.00629460181127853,0.0361436069563478,-0.0197358841021053, + -9.07577024131245e-06,-0.00587621167600946,0.0492221281791086,-0.0517851911993628, + -9.73825077225932e-06,-0.00545782154074048,0.0623006494018693,-0.0838344982966202, + -1.04007313031229e-05,-0.00503943140547136,0.0753791706246301,-0.115883805393878, + -1.10632118339726e-05,-0.00462104127020224,0.0884576918473909,-0.147933112491135, + -1.17256923649889e-05,-0.00420265113493334,0.101536213070152,-0.179982419588393, + -1.23881728957831e-05,-0.003784260999664,0.114614734292913,-0.21203172668565, + -1.30506534267161e-05,-0.00336587086439522,0.127693255515673,-0.244081033782908, + -1.37131339577046e-05,-0.00294748072912598,0.140771776738434,-0.276130340880165, + -1.4375614488582e-05,-0.00252909059385709,0.153850297961195,-0.308179647977422, + -1.5038095019293e-05,-0.00211070045858786,0.166928819183955,-0.34022895507468, + -1.57005755503925e-05,-0.00169231032331907,0.180007340406716,-0.372278262171937, + -1.63630560812145e-05,-0.00127392018804984,0.193085861629477,-0.404327569269195, + -1.70255366120364e-05,-0.000855530052780828,0.206164382852238,-0.436376876366452, + -1.76880171428584e-05,-0.000437139917511375,0.219242904074999,-0.46842618346371, + -1.83504976737359e-05,-1.87497822421445e-05,0.23232142529776,-0.500475490560967, + -1.90129782047244e-05,0.000399640353026864,0.245399946520521,-0.532524797658224, + -1.96754587356018e-05,0.000818030488295651,0.258478467743281,-0.564574104755482, + -2.03379392664793e-05,0.00123642062356466,0.271556988966042,-0.596623411852739, + -2.10004197976899e-05,0.00165481075883323,0.284635510188802,-0.628672718949997, + -2.16629003289004e-05,0.00207320089410246,0.297714031411563,-0.660722026047254, + -2.23253808592228e-05,0.00249159102937169,0.310792552634324,-0.692771333144512, + -2.29878613902113e-05,0.00290998116464047,0.323871073857084,-0.724820640241769, + -2.36503419210887e-05,0.0033283712999097,0.336949595079845,-0.756869947339027, + -2.43128224518552e-05,0.00374676143517894,0.350028116302606,-0.788919254436284, + -6.88102790130651e-06,-0.00622555647263549,0.0359848381938962,-0.0199255525963224, + -7.33620228605958e-06,-0.00585183735802305,0.0486766125121778,-0.0522184103072765, + -7.79137667081264e-06,-0.00547811824341055,0.0613683868304594,-0.0845112680182306, + -8.24655105557959e-06,-0.00510439912879818,0.0740601611487409,-0.116804125729185, + -8.70172544048531e-06,-0.00473068001418586,0.0867519354670224,-0.149096983440139, + -9.15689982494694e-06,-0.00435696089957305,0.0994437097853041,-0.181389841151093, + -9.61207420974164e-06,-0.00398324178496057,0.112135484103586,-0.213682698862047, + -1.00672485945363e-05,-0.00360952267034831,0.124827258421867,-0.245975556573001, + -1.05224229794421e-05,-0.00323580355573583,0.137519032740149,-0.278268414283955, + -1.09775973639037e-05,-0.00286208444112312,0.15021080705843,-0.310561271994909, + -1.14327717486429e-05,-0.00248836532651064,0.162902581376712,-0.342854129705864, + -1.18879461337706e-05,-0.00211464621189883,0.175594355694993,-0.375146987416818, + -1.23431205184543e-05,-0.00174092709728568,0.188286130013275,-0.407439845127772, + -1.27982949030825e-05,-0.00136720798267342,0.200977904331557,-0.439732702838726, + -1.32534692879327e-05,-0.000993488868061165,0.213669678649838,-0.47202556054968, + -1.37086436725609e-05,-0.000619769753448685,0.22636145296812,-0.504318418260634, + -1.41638180575221e-05,-0.000246050638836204,0.239053227286401,-0.536611275971588, + -1.46189924420392e-05,0.000127668475776277,0.251745001604683,-0.568904133682543, + -1.50741668264454e-05,0.000501387590389424,0.264436775922965,-0.601196991393496, + -1.55293412116286e-05,0.00087510670500146,0.277128550241246,-0.633489849104451, + -1.59845155963678e-05,0.0012488258196135,0.289820324559527,-0.665782706815405, + -1.64396899813291e-05,0.00162254493422598,0.302512098877809,-0.698075564526359, + -1.68948643654021e-05,0.00199626404883935,0.315203873196091,-0.730368422237313, + -1.73500387500303e-05,0.00236998316345183,0.327895647514373,-0.762661279948267, + -1.78052131355466e-05,0.00274370227806386,0.340587421832654,-0.794954137659221, + -5.48380948876825e-06,-0.00616520542924962,0.035840695691782,-0.0200949746134528, + -5.78409060808527e-06,-0.00583331493506042,0.0481840256868369,-0.0526053847250636, + -6.08437172744392e-06,-0.00550142444087132,0.0605273556818919,-0.0851157948366744, + -6.38465284680256e-06,-0.00516953394668218,0.0728706856769468,-0.117626204948285, + -6.68493396607794e-06,-0.00483764345249293,0.0852140156720018,-0.150136615059896, + -6.98521508551986e-06,-0.00450575295830391,0.0975573456670566,-0.182647025171507, + -7.28549620487851e-06,-0.00417386246411477,0.109900675662112,-0.215157435283117, + -7.58577732407062e-06,-0.00384197196992553,0.122244005657167,-0.247667845394728, + -7.8860584435958e-06,-0.00351008147573639,0.134587335652221,-0.280178255506339, + -8.18633956262138e-06,-0.00317819098154692,0.146930665647277,-0.31268866561795, + -8.48662068242412e-06,-0.00284630048735846,0.159273995642331,-0.34519907572956, + -8.78690180161623e-06,-0.0025144099931691,0.171617325637386,-0.377709485841171, + -9.08718292080835e-06,-0.00218251949897974,0.183960655632441,-0.410219895952782, + -9.38746404033353e-06,-0.0018506290047906,0.196303985627496,-0.442730306064393, + -9.68774515963666e-06,-0.00151873851060169,0.208647315622551,-0.475240716176004, + -9.98802627905082e-06,-0.00118684801641233,0.220990645617606,-0.507751126287614, + -1.0288307398687e-05,-0.000854957522223643,0.233333975612661,-0.540261536399225, + -1.0588588517213e-05,-0.000523067028033619,0.245677305607716,-0.572771946510836, + -1.08888696364051e-05,-0.000191176533844262,0.258020635602771,-0.605282356622447, + -1.11891507565964e-05,0.000140713960343763,0.270363965597825,-0.637792766734057, + -1.14894318752334e-05,0.000472604454534231,0.282707295592881,-0.670303176845668, + -1.17897129946476e-05,0.000804494948722922,0.295050625587936,-0.702813586957279, + -1.20899941137287e-05,0.0011363854429125,0.307393955582991,-0.73532399706889, + -1.23902752335869e-05,0.00146827593710119,0.319737285578046,-0.7678344071805, + -1.2690556352668e-05,0.00180016643129033,0.3320806155731,-0.800344817292111, + -4.27063925444865e-06,-0.0061147390656839,0.035716069660084,-0.0202394236739863, + -4.46254755315234e-06,-0.0058199496928541,0.0477600945300585,-0.0529353187681507, + -4.65445585189073e-06,-0.00552516032002431,0.059804119400033,-0.0856312138623151, + -4.84636415046258e-06,-0.00523037094719436,0.0718481442700076,-0.11832710895648, + -5.03827244932586e-06,-0.00493558157436491,0.0838921691399819,-0.151023004050644, + -5.23018074807813e-06,-0.00464079220153513,0.0959361940099564,-0.183718899144808, + -5.42208904669161e-06,-0.00434600282870512,0.107980218879931,-0.216414794238973, + -5.61399734533286e-06,-0.00405121345587545,0.120024243749905,-0.249110689333137, + -5.80590564419614e-06,-0.00375642408304577,0.13206826861988,-0.281806584427302, + -5.99781394272636e-06,-0.00346163471021566,0.144112293489855,-0.314502479521466, + -6.18972224153413e-06,-0.00316684533738609,0.156156318359829,-0.347198374615631, + -6.38163054023089e-06,-0.00287205596455631,0.168200343229803,-0.379894269709795, + -6.57353883909417e-06,-0.00257726659172652,0.180244368099778,-0.412590164803959, + -6.7654471376799e-06,-0.00228247721889674,0.192288392969752,-0.445286059898124, + -6.95735543632114e-06,-0.00198768784606673,0.204332417839727,-0.477981954992288, + -7.14926373490687e-06,-0.00169289847323717,0.216376442709701,-0.510677850086453, + -7.34117203382567e-06,-0.00139810910040739,0.228420467579676,-0.543373745180617, + -7.53308033230038e-06,-0.00110331972757738,0.24046449244965,-0.576069640274782, + -7.72498863088611e-06,-0.00080853035474715,0.252508517319625,-0.608765535368946, + -7.91689692991593e-06,-0.00051374098191781,0.2645525421896,-0.64146143046311, + -8.1088052287237e-06,-0.000218951609087803,0.276596567059574,-0.674157325557275, + -8.30071352786454e-06,7.58377637408714e-05,0.288640591929548,-0.706853220651439, + -8.49262182622823e-06,0.000370627136571322,0.300684616799523,-0.739549115745604, + -8.68453012492498e-06,0.000665416509400885,0.312728641669497,-0.772245010839768, + -8.87643842351071e-06,0.000960205882230447,0.324772666539471,-0.804940905933933, + -3.26127385064101e-06,-0.00607407204136683,0.0356127777136462,-0.0203577695523877, + -3.38133523655748e-06,-0.00581066736359478,0.047410060368674,-0.0532056309044808, + -3.50139662258497e-06,-0.0055472626858229,0.0592073430237018,-0.0860534922565739, + -3.62145800847369e-06,-0.00528385800805081,0.0710046256787297,-0.118901353608667, + -3.74151939450118e-06,-0.00502045333027901,0.0828019083337574,-0.15174921496076, + -3.86158078047316e-06,-0.00475704865250703,0.0945991909887852,-0.184597076312853, + -3.98164216658392e-06,-0.00449364397473506,0.106396473643813,-0.217444937664946, + -4.10170355236161e-06,-0.00423023929696287,0.118193756298841,-0.250292799017039, + -4.22176493836135e-06,-0.00396683461919112,0.129991038953869,-0.283140660369132, + -4.34182632458313e-06,-0.00370342994141937,0.141788321608896,-0.315988521721226, + -4.46188771030531e-06,-0.00344002526364706,0.153585604263924,-0.348836383073319, + -4.58194909613852e-06,-0.00317662058587498,0.165382886918952,-0.381684244425412, + -4.70201048224927e-06,-0.00291321590810334,0.17718016957398,-0.414532105777505, + -4.82207186824901e-06,-0.00264981123033148,0.188977452229008,-0.447379967129598, + -4.94213325419324e-06,-0.00238640655255962,0.200774734884035,-0.480227828481691, + -5.06219464035951e-06,-0.00212300187478731,0.212572017539064,-0.513075689833784, + -5.18225602608169e-06,-0.00185959719701523,0.224369300194091,-0.545923551185877, + -5.30231741202591e-06,-0.00159619251924314,0.236166582849119,-0.57877141253797, + -5.42237879808116e-06,-0.00133278784147173,0.247963865504147,-0.611619273890063, + -5.54244018413641e-06,-0.00106938316369964,0.259761148159174,-0.644467135242156, + -5.66250157019166e-06,-0.000805978485928005,0.271558430814202,-0.677314996594249, + -5.78256295591384e-06,-0.000542573808155922,0.28335571346923,-0.710162857946343, + -5.90262434185806e-06,-0.000279169130383394,0.295152996124258,-0.743010719298436, + -6.02268572802434e-06,-1.57644526121992e-05,0.306950278779285,-0.775858580650529, + -6.14274711463469e-06,0.00024764022515944,0.318747561434313,-0.808706442002622, + -2.45087047683751e-06,-0.00604226362942155,0.0355301195261492,-0.0204516039132621, + -2.52519229645976e-06,-0.00580437669403822,0.0471307889492505,-0.0534199566325227, + -2.59951411607506e-06,-0.00556648975865487,0.0587314583723518,-0.0863883093517833, + -2.67383593569037e-06,-0.00532860282327163,0.070332127795453,-0.119356662071044, + -2.74815775527792e-06,-0.00509071588788823,0.0819327972185543,-0.152325014790304, + -2.82247957494874e-06,-0.00485282895250494,0.0935334666416556,-0.185293367509565, + -2.8968013945363e-06,-0.00461494201712143,0.105134136064757,-0.218261720228826, + -2.97112321406834e-06,-0.00437705508173825,0.116734805487858,-0.251230072948086, + -3.04544503382242e-06,-0.00413916814635484,0.12833547491096,-0.284198425667347, + -3.11976685340998e-06,-0.00390128121097155,0.139936144334061,-0.317166778386607, + -3.1940886733306e-06,-0.00366339427558882,0.151536813757162,-0.350135131105868, + -3.26841049264059e-06,-0.00342550734020497,0.163137483180263,-0.383103483825128, + -3.34273231211712e-06,-0.00318762040482135,0.174738152603365,-0.416071836544389, + -3.41705413203774e-06,-0.00294973346943861,0.186338822026466,-0.44904018926365, + -3.49137595168081e-06,-0.00271184653405565,0.197939491449567,-0.48200854198291, + -3.56569777093529e-06,-0.00247395959867136,0.209540160872669,-0.514976894702171, + -3.64001959074489e-06,-0.00223607266328862,0.22114083029577,-0.547945247421431, + -3.71434141055449e-06,-0.00199818572790567,0.232741499718871,-0.580913600140692, + -3.78866322969795e-06,-0.0017602987925216,0.244342169141972,-0.613881952859953, + -3.86298504917448e-06,-0.0015224118571382,0.255942838565074,-0.646850305579213, + -3.93730686887306e-06,-0.00128452492175457,0.267543507988175,-0.679818658298474, + -4.01162868846061e-06,-0.00104663798637139,0.279144177411276,-0.712787011017734, + -4.0859505087143e-06,-0.000808751050989098,0.290744846834377,-0.745755363736995, + -4.16027232774674e-06,-0.000570864115604586,0.302345516257479,-0.778723716456255, + -4.23459414766736e-06,-0.00033297718022185,0.31394618568058,-0.811692069175516, + -1.81862549927109e-06,-0.00601795638562291,0.0354658074895192,-0.0205240892539303, + -1.86460256136611e-06,-0.00580016536697839,0.0469140059682884,-0.0535855193673919, + -1.91057962349583e-06,-0.00558237434833397,0.0583622044470575,-0.0866469494808535, + -1.95655668558392e-06,-0.00536458332968942,0.0698104029258267,-0.119708379594315, + -2.00253374754711e-06,-0.00514679231104487,0.0812586014045958,-0.152769809707777, + -2.04851080978785e-06,-0.0049290012924007,0.0927067998833647,-0.185831239821238, + -2.09448787186206e-06,-0.00471121027375598,0.104154998362134,-0.2188926699347, + -2.14046493379749e-06,-0.00449341925511126,0.115603196840903,-0.251954100048162, + -2.18644199584395e-06,-0.00427562823646688,0.127051395319672,-0.285015530161623, + -2.23241905800142e-06,-0.00405783721782238,0.138499593798441,-0.318076960275085, + -2.27839612010339e-06,-0.00384004619917766,0.149947792277211,-0.351138390388546, + -2.32437318237189e-06,-0.00362225518053361,0.16139599075598,-0.384199820502008, + -2.3703502441963e-06,-0.00340446416188867,0.172844189234749,-0.41726125061547, + -2.41632730607622e-06,-0.00318667314324395,0.184292387713518,-0.450322680728931, + -2.4623043682892e-06,-0.00296888212459967,0.195740586192287,-0.483384110842393, + -2.50828143033566e-06,-0.00275109110595495,0.207188784671057,-0.516445540955854, + -2.55425849249313e-06,-0.00253330008731067,0.218636983149825,-0.549506971069316, + -2.60023555465061e-06,-0.00231550906866618,0.230085181628595,-0.582568401182778, + -2.64621261680809e-06,-0.00209771805002168,0.241533380107364,-0.615629831296239, + -2.69218967896556e-06,-0.00187992703137763,0.252981578586132,-0.648691261409701, + -2.73816674101202e-06,-0.00166213601273357,0.264429777064901,-0.681752691523162, + -2.78414380283643e-06,-0.00144434499408774,0.275877975543671,-0.714814121636624, + -2.83012086488288e-06,-0.00122655397544325,0.28732617402244,-0.747875551750085, + -2.87609792704036e-06,-0.00100876295679919,0.298774372501209,-0.780936981863547, + -2.92207498908681e-06,-0.00079097193815425,0.310222570979979,-0.813998411977009, + -1.33633359245683e-06,-0.00599970816774084,0.0354168541279304,-0.0205789634026486, + -1.36499175208693e-06,-0.00579735326426706,0.0467492838428647,-0.0537108566294048, + -1.39364991171009e-06,-0.00559499836079336,0.0580817135577988,-0.086842749856161, + -1.42230807126387e-06,-0.00539264345731943,0.0694141432727331,-0.119974643082917, + -1.45096623083152e-06,-0.00519028855384562,0.0807465729876673,-0.153106536309673, + -1.47962439062121e-06,-0.00498793365037198,0.0920790027026015,-0.186238429536429, + -1.50828255024438e-06,-0.00478557874689822,0.103411432417536,-0.219370322763186, + -1.53694070975652e-06,-0.00458322384342436,0.11474386213247,-0.252502215989942, + -1.56559886943519e-06,-0.00438086893995082,0.126076291847404,-0.285634109216698, + -1.59425702916938e-06,-0.00417851403647718,0.137408721562338,-0.318766002443454, + -1.62291518851498e-06,-0.00397615913300275,0.148741151277273,-0.35189789567021, + -1.65157334813815e-06,-0.003773804229529,0.160073580992207,-0.385029788896967, + -1.68023150809438e-06,-0.00357144932605591,0.171406010707141,-0.418161682123723, + -1.70888966771754e-06,-0.00336909442258215,0.182738440422075,-0.451293575350479, + -1.73754782695212e-06,-0.00316673951910751,0.19407087013701,-0.484425468577235, + -1.76620598690835e-06,-0.00296438461563442,0.205403299851943,-0.517557361803991, + -1.79486414642049e-06,-0.00276202971216022,0.216735729566878,-0.550689255030747, + -1.82352230582161e-06,-0.00255967480868646,0.228068159281812,-0.583821148257504, + -1.85218046566682e-06,-0.00235731990521293,0.239400588996746,-0.61695304148426, + -1.88083862528998e-06,-0.0021549650017394,0.25073301871168,-0.650084934711016, + -1.90949678435803e-06,-0.00195261009826453,0.262065448426615,-0.683216827937772, + -1.93815494420324e-06,-0.001750255194791,0.273397878141549,-0.716348721164528, + -1.96681310438152e-06,-0.00154790029131835,0.284730307856482,-0.749480614391284, + -1.99547126378263e-06,-0.00134554538784393,0.296062737571417,-0.78261250761804, + -2.02412942296171e-06,-0.00114319048436951,0.307395167286352,-0.815744400844796, + -9.74699892214437e-07,-0.00598618968932808,0.0353802086763759,-0.0206198733992233, + -9.92805531535579e-07,-0.00579546775011153,0.0466261379683687,-0.053804298570271, + -1.01091117085672e-06,-0.00560474581089498,0.0578720672603616,-0.0869887237413188, + -1.02901681015011e-06,-0.00541402387167855,0.0691179965523542,-0.120173148912367, + -1.04712244972105e-06,-0.00522330193246223,0.0803639258443471,-0.153357574083414, + -1.06522808898668e-06,-0.00503257999324558,0.09160985513634,-0.186541999254462, + -1.08333372811353e-06,-0.00484185805402892,0.102855784428333,-0.21972642442551, + -1.1014393675457e-06,-0.00465113611481238,0.114101713720326,-0.252910849596558, + -1.11954500703337e-06,-0.00446041417559606,0.125347643012318,-0.286095274767605, + -1.13765064613247e-06,-0.00426969223637919,0.136593572304311,-0.319279699938653, + -1.15575628562015e-06,-0.00407897029716286,0.147839501596304,-0.352464125109701, + -1.17386192505231e-06,-0.00388824835794654,0.159085430888297,-0.385648550280748, + -1.19196756442896e-06,-0.00369752641873,0.17033136018029,-0.418832975451796, + -1.21007320358357e-06,-0.00350680447951301,0.181577289472283,-0.452017400622844, + -1.22817884296023e-06,-0.00331608254029714,0.192823218764275,-0.485201825793892, + -1.24628448239239e-06,-0.0031253606010806,0.204069148056268,-0.518386250964939, + -1.26439012182455e-06,-0.00293463866186405,0.215315077348261,-0.551570676135987, + -1.28249576081263e-06,-0.00274391672264684,0.226561006640254,-0.584755101307035, + -1.30060140013377e-06,-0.00255319478343052,0.237806935932247,-0.617939526478083, + -1.31870703978798e-06,-0.0023624728442142,0.249052865224239,-0.65112395164913, + -1.3368126789981e-06,-0.00217175090499744,0.260298794516233,-0.684308376820178, + -1.35491831887435e-06,-0.00198102896578201,0.271544723808225,-0.717492801991226, + -1.37302395775141e-06,-0.0017903070265648,0.282790653100218,-0.750677227162274, + -1.39112959696153e-06,-0.00159958508734803,0.294036582392211,-0.783861652333322, + -1.40923523650471e-06,-0.00140886314813216,0.305282511684203,-0.817046077504369, + -7.07019120936569e-07,-0.00597627311205831,0.0353531178182547,-0.020650025616694, + -7.18653093340071e-07,-0.00579419347460122,0.046535188019078,-0.0538731688210115, + -7.30287065708879e-07,-0.00561211383714416,0.0577172582199012,-0.087096312025329, + -7.41921038188709e-07,-0.00543003419968724,0.0688993284207244,-0.120319455229646, + -7.53555010474249e-07,-0.00524795456223004,0.0800813986215478,-0.153542598433964, + -7.65188982898568e-07,-0.00506587492477284,0.0912634688223712,-0.186765741638281, + -7.76822955184109e-07,-0.00488379528731564,0.102445539023195,-0.219988884842599, + -7.88456927747205e-07,-0.004701715649859,0.113627609224017,-0.253212028046916, + -8.00090900254791e-07,-0.00451963601240191,0.124809679424841,-0.286435171251234, + -8.11724872318287e-07,-0.00433755637494437,0.135991749625664,-0.319658314455551, + -8.23358844936894e-07,-0.00415547673748762,0.147173819826487,-0.352881457659869, + -8.34992817166924e-07,-0.0039733971000302,0.158355890027311,-0.386104600864186, + -8.46626789563487e-07,-0.00379131746257366,0.169537960228134,-0.419327744068504, + -8.5826076196005e-07,-0.00360923782511624,0.180720030428957,-0.452550887272821, + -8.69894734578658e-07,-0.00342715818765971,0.19190210062978,-0.485774030477138, + -8.81528706586643e-07,-0.00324507855020184,0.203084170830604,-0.518997173681456, + -8.93162679482806e-07,-0.00306299891274575,0.214266241031427,-0.552220316885773, + -9.04796651823858e-07,-0.00288091927528811,0.225448311232251,-0.585443460090091, + -9.1643062416491e-07,-0.00269883963783113,0.236630381433074,-0.618666603294408, + -9.28064596728007e-07,-0.0025167600003746,0.247812451633897,-0.651889746498726, + -9.39698568624969e-07,-0.00233468036291651,0.25899452183472,-0.685112889703043, + -9.51332541521133e-07,-0.00215260072546064,0.270176592035543,-0.718336032907361, + -9.62966513307073e-07,-0.00197052108800255,0.281358662236367,-0.751559176111678, + -9.7460048587017e-07,-0.00178844145054535,0.29254073243719,-0.784782319315996, + -9.86234458433266e-07,-0.0016063618130886,0.303722802638013,-0.818005462520313, + -5.10771194582593e-07,-0.00596905098598514,0.0353332749568421,-0.0206720619399733, + -5.18382780284599e-07,-0.00579332416002917,0.0464686182828356,-0.0539235016733503, + -5.25994366035176e-07,-0.00561759733407313,0.0576039616088292,-0.0871749414067273, + -5.33605951730243e-07,-0.00544187050811712,0.0687393049348227,-0.120426381140104, + -5.41217537508576e-07,-0.00526614368216127,0.0798746482608161,-0.153677820873481, + -5.48829123175887e-07,-0.00509041685620526,0.0910099915868096,-0.186929260606858, + -5.56440708843198e-07,-0.00491469003024925,0.102145334912803,-0.220180700340235, + -5.64052294704798e-07,-0.00473896320429334,0.113280678238797,-0.253432140073612, + -5.71663880344353e-07,-0.00456323637833722,0.12441602156479,-0.286683579806989, + -5.79275466372486e-07,-0.00438750955238154,0.135551364890784,-0.319935019540366, + -5.86887051956531e-07,-0.00421178272642542,0.146686708216777,-0.353186459273743, + -5.94498637762619e-07,-0.00403605590046952,0.157822051542771,-0.38643789900712, + -6.02110223402175e-07,-0.00386032907451361,0.168957394868764,-0.419689338740497, + -6.09721808986219e-07,-0.00368460224855727,0.180092738194758,-0.452940778473874, + -6.17333395069863e-07,-0.00350887542260159,0.191228081520751,-0.486192218207251, + -6.24944980653908e-07,-0.00333314859664569,0.202363424846745,-0.519443657940628, + -6.32556566015907e-07,-0.00315742177068934,0.213498768172738,-0.552695097674005, + -6.40168151933018e-07,-0.00298169494473344,0.224634111498732,-0.585946537407382, + -6.47779737850129e-07,-0.00280596811877798,0.235769454824725,-0.619197977140759, + -6.55391323656218e-07,-0.00263024129282163,0.246904798150719,-0.652449416874136, + -6.6300290912924e-07,-0.00245451446686529,0.258040141476712,-0.685700856607513, + -6.70614495046351e-07,-0.00227878764090983,0.269175484802705,-0.71895229634089, + -6.78226080741418e-07,-0.00210306081495348,0.280310828128699,-0.752203736074267, + -6.85837666991596e-07,-0.00192733398899891,0.291446171454692,-0.785455175807644, + -6.93449252020528e-07,-0.00175160716304168,0.302581514780686,-0.818706615541021, + -2.3594827396542e-05,-0.00705454434582081,0.0486493044125134,-0.0315387942280043, + -2.68564869033844e-05,-0.00637817687214226,0.064317667428829,-0.0610266075605757, + -3.01181464102129e-05,-0.0057018093984636,0.0799860304451446,-0.0905144208931471, + -3.33798059170554e-05,-0.00502544192478505,0.0956543934614602,-0.120002234225719, + -3.66414654238423e-05,-0.00434907445110644,0.111322756477776,-0.14949004755829, + -3.99031249307125e-05,-0.00367270697742805,0.126991119494091,-0.178977860890861, + -4.31647844377214e-05,-0.00299633950374956,0.142659482510407,-0.208465674223433, + -4.64264439441475e-05,-0.00231997203007028,0.158327845526723,-0.237953487556004, + -4.96881034511287e-05,-0.00164360455639201,0.173996208543038,-0.267441300888576, + -5.29497629578324e-05,-0.000967237082713179,0.189664571559354,-0.296929114221147, + -5.62114224648136e-05,-0.000290869609034905,0.205332934575669,-0.326416927553718, + -5.94730819714617e-05,0.000385497864644035,0.221001297591985,-0.35590474088629, + -6.27347414784429e-05,0.00106186533832275,0.236669660608301,-0.385392554218861, + -6.59964009854797e-05,0.00173823281200103,0.252338023624616,-0.414880367551433, + -6.92580604920723e-05,0.0024146002856793,0.268006386640931,-0.444368180884004, + -7.2519719998887e-05,0.00309096775935847,0.283674749657248,-0.473855994216575, + -7.57813795057016e-05,0.00376733523303674,0.299343112673563,-0.503343807549147, + -7.90430390124053e-05,0.00444370270671568,0.315011475689879,-0.532831620881718, + -8.2304698519664e-05,0.00512007018039395,0.330679838706194,-0.562319434214289, + -8.55663580264787e-05,0.00579643765407201,0.346348201722509,-0.591807247546861, + -8.88280175330713e-05,0.00647280512775117,0.362016564738825,-0.621295060879432, + -9.20896770408852e-05,0.00714917260142833,0.37768492775514,-0.650782874212004, + -9.53513365472558e-05,0.00782554007510772,0.393353290771456,-0.680270687544575, + -9.86129960536264e-05,0.0085019075487871,0.409021653787772,-0.709758500877147, + -0.000101874655560996,0.00917827502246471,0.424690016804087,-0.739246314209718, + -2.34812631053904e-05,-0.00704650783120872,0.0486309746561106,-0.0315599217145, + -2.67125954673958e-05,-0.00637192841193729,0.0642744317962176,-0.0610647100786468, + -2.99439278295122e-05,-0.005697348992666,0.0799178889363246,-0.0905694984427936, + -3.31752601916702e-05,-0.00502276957339476,0.0955613460764316,-0.12007428680694, + -3.64065925536339e-05,-0.00434819015412335,0.111204803216539,-0.149579075171087, + -3.96379249158196e-05,-0.00367361073485217,0.126848260356646,-0.179083863535234, + -4.28692572778666e-05,-0.00299903131558077,0.142491717496753,-0.208588651899381, + -4.61005896399969e-05,-0.00232445189630948,0.15813517463686,-0.238093440263528, + -4.93319220020161e-05,-0.00164987247703818,0.173778631776967,-0.267598228627674, + -5.25632543642574e-05,-0.000975293057767113,0.189422088917073,-0.297103016991821, + -5.57945867262211e-05,-0.000300713638495598,0.20506554605718,-0.326607805355968, + -5.90259190882958e-05,0.000373865780775695,0.220709003197287,-0.356112593720115, + -6.2257251450315e-05,0.00104844520004699,0.236352460337394,-0.385617382084262, + -6.54885838127783e-05,0.00172302461931828,0.251995917477501,-0.415122170448408, + -6.8719916174742e-05,0.00239760403858935,0.267639374617608,-0.444626958812555, + -7.19512485368723e-05,0.00307218345786087,0.283282831757715,-0.474131747176702, + -7.51825808991136e-05,0.00374676287713172,0.298926288897822,-0.503636535540849, + -7.84139132605777e-05,0.0044213422964039,0.314569746037929,-0.533141323904996, + -8.1645245623152e-05,0.0050959217156743,0.330213203178036,-0.562646112269143, + -8.48765779852823e-05,0.00577050113494537,0.345856660318143,-0.592150900633289, + -8.81079103470794e-05,0.00644508055421777,0.36150011745825,-0.621655688997436, + -9.13392427094317e-05,0.00711965997348862,0.377143574598357,-0.651160477361583, + -9.45705750711179e-05,0.00779423939276036,0.392787031738464,-0.68066526572573, + -9.78019074331371e-05,0.00846881881203165,0.408430488878571,-0.710170054089877, + -0.000101033239795378,0.00914339823130295,0.424073946018678,-0.739674842454023, + -2.33242024943875e-05,-0.00703542873146884,0.0486056233416017,-0.0315891012240339, + -2.65138259760017e-05,-0.00636333698488284,0.0642146538181516,-0.0611173340758056, + -2.9703449457491e-05,-0.00569124523829678,0.0798236842947014,-0.0906455669275773, + -3.28930729389665e-05,-0.00501915349171067,0.0954327147712512,-0.120173799779349, + -3.6082696420553e-05,-0.00434706174512456,0.111041745247801,-0.149702032631121, + -3.92723199020839e-05,-0.00367496999853845,0.126650775724351,-0.179230265482893, + -4.24619433836981e-05,-0.00300287825195245,0.142259806200901,-0.208758498334664, + -4.56515668652568e-05,-0.00233078650536656,0.157868836677451,-0.238286731186436, + -4.88411903468156e-05,-0.00165869475878044,0.173477867154,-0.267814964038208, + -5.20308138280967e-05,-0.000986603012194109,0.18908689763055,-0.29734319688998, + -5.52204373099885e-05,-0.000314511265608441,0.2046959281071,-0.326871429741751, + -5.84100607911031e-05,0.000357580480977893,0.22030495858365,-0.356399662593523, + -6.15996842726618e-05,0.001029672227564,0.2359139890602,-0.385927895445295, + -6.47893077543316e-05,0.00170176397414989,0.251523019536749,-0.415456128297067, + -6.79789312355572e-05,0.00237385572073623,0.267132050013299,-0.444984361148838, + -7.11685547172269e-05,0.00304594746732256,0.282741080489849,-0.47451259400061, + -7.43581781992297e-05,0.00371803921390756,0.298350110966399,-0.504040826852382, + -7.75478016801223e-05,0.00439013096049479,0.313959141442949,-0.533569059704153, + -8.07374251622361e-05,0.00506222270707957,0.329568171919498,-0.563097292555925, + -8.39270486433508e-05,0.00573431445366679,0.345177202396049,-0.592625525407697, + -8.71166721247985e-05,0.00640640620025268,0.360786232872598,-0.622153758259469, + -9.03062956064682e-05,0.00707849794683879,0.376395263349148,-0.65168199111124, + -9.34959190880269e-05,0.00775058969342446,0.392004293825698,-0.681210223963012, + -9.66855425695856e-05,0.00842268144001057,0.407613324302248,-0.710738456814784, + -9.98751660515884e-05,0.00909477318659624,0.423222354778797,-0.740266689666556, + -2.31079586765909e-05,-0.0070202419677704,0.0485707173301202,-0.0316292002757349, + -2.62406007479898e-05,-0.00635160320840189,0.0641323835871722,-0.0611896510001301, + -2.93732428194304e-05,-0.00568296444903343,0.0796940498442241,-0.0907501017245252, + -3.25058848908155e-05,-0.00501432568966498,0.095255716101276,-0.12031055244892, + -3.56385269622006e-05,-0.00434568693029658,0.110817382358328,-0.149871003173316, + -3.87711690336134e-05,-0.00367704817092807,0.12637904861538,-0.179431453897711, + -4.19038111050818e-05,-0.00300840941155966,0.141940714872432,-0.208991904622106, + -4.50364531765501e-05,-0.00233977065219126,0.157502381129484,-0.238552355346501, + -4.81690952476854e-05,-0.00167113189282242,0.173064047386536,-0.268112806070896, + -5.13017373190428e-05,-0.0010024931334538,0.188625713643588,-0.297673256795292, + -5.44343793907331e-05,-0.000333854374085396,0.20418737990064,-0.327233707519687, + -5.7567021462035e-05,0.000334784385282783,0.219749046157691,-0.356794158244082, + -6.06996635333368e-05,0.00100342314465141,0.235310712414743,-0.386354608968477, + -6.38323056050272e-05,0.00167206190401981,0.250872378671795,-0.415915059692872, + -6.6964947676218e-05,0.00234070066338865,0.266434044928848,-0.445475510417267, + -7.00975897474088e-05,0.00300933942275705,0.281995711185899,-0.475035961141662, + -7.32302318189326e-05,0.00367797818212545,0.297557377442951,-0.504596411866058, + -7.63628738903455e-05,0.00434661694149385,0.313119043700003,-0.534156862590453, + -7.94955159619803e-05,0.00501525570086181,0.328680709957055,-0.563717313314848, + -8.26281580331711e-05,0.00568389446023065,0.344242376214107,-0.593277764039243, + -8.57608001043619e-05,0.00635253321959972,0.359804042471159,-0.622838214763638, + -8.88934421763299e-05,0.00702117197896701,0.37536570872821,-0.652398665488033, + -9.20260842477427e-05,0.00768981073833608,0.390927374985263,-0.681959116212428, + -9.51587263186005e-05,0.0083584494977047,0.406489041242314,-0.711519566936824, + -9.82913683905684e-05,0.00902708825707288,0.422050707499366,-0.741080017661219, + -2.28120629598982e-05,-0.00699958663889538,0.0485229508093914,-0.0316839277490385, + -2.58675684358667e-05,-0.00633572478445732,0.0640198723657723,-0.0612883496570178, + -2.89230739119184e-05,-0.00567186293001926,0.0795167939221532,-0.090892771564997, + -3.19785793877758e-05,-0.00500800107558119,0.095013715478534,-0.120497193472976, + -3.50340848636888e-05,-0.00434413922114296,0.110510637034915,-0.150101615380956, + -3.80895903398237e-05,-0.00368027736670518,0.126007558591296,-0.179706037288935, + -4.11450958155424e-05,-0.00301641551226661,0.141504480147677,-0.209310459196914, + -4.42006012915663e-05,-0.00235255365782872,0.157001401704058,-0.238914881104894, + -4.72561067673682e-05,-0.00168869180339037,0.172498323260439,-0.268519303012873, + -5.03116122435587e-05,-0.00102482994895259,0.18799524481682,-0.298123724920852, + -5.33671177194717e-05,-0.000360968094514469,0.2034921663732,-0.327728146828831, + -5.64226231957732e-05,0.000302893759923206,0.218989087929581,-0.357332568736811, + -5.94781286712975e-05,0.000966755614361547,0.234486009485962,-0.38693699064479, + -6.25336341470439e-05,0.00163061746880033,0.249982931042344,-0.416541412552769, + -6.55891396231789e-05,0.00229447932323823,0.265479852598724,-0.446145834460749, + -6.86446450990363e-05,0.00295834117767635,0.280976774155105,-0.475750256368728, + -7.17001505750048e-05,0.00362220303211402,0.296473695711486,-0.505354678276707, + -7.47556560505291e-05,0.00428606488655325,0.311970617267867,-0.534959100184686, + -7.78111615270527e-05,0.0049499267409896,0.327467538824247,-0.564563522092666, + -8.08666670026881e-05,0.00561378859542883,0.342964460380629,-0.594167944000645, + -8.39221724785455e-05,0.00627765044986672,0.358461381937009,-0.623772365908625, + -8.6977677954736e-05,0.00694151230430462,0.37395830349339,-0.653376787816603, + -9.00331834308155e-05,0.00760537415874252,0.389455225049771,-0.682981209724583, + -9.30886889062288e-05,0.00826923601318086,0.404952146606152,-0.712585631632562, + -9.61441943824193e-05,0.0089330978676192,0.420449068162533,-0.742190053540541, + -2.24105788531326e-05,-0.006971790591252,0.0484581343463593,-0.031757923720823, + -2.5362961627709e-05,-0.00631450546007623,0.0638673292162421,-0.0614217982266187, + -2.83153444023687e-05,-0.00565722032890054,0.079276524086125,-0.0910856727324144, + -3.12677271770423e-05,-0.00499993519772485,0.0946857189560079,-0.12074954723821, + -3.42201099516048e-05,-0.0043426500665491,0.110094913825891,-0.150413421744006, + -3.71724927262507e-05,-0.00368536493537353,0.125504108695773,-0.180077296249801, + -4.01248755009243e-05,-0.00302807980419784,0.140913303565656,-0.209741170755597, + -4.30772582755701e-05,-0.00237079467302193,0.156322498435539,-0.239405045261393, + -4.60296410502159e-05,-0.00171350954184635,0.171731693305422,-0.269068919767189, + -4.89820238249727e-05,-0.00105622441067066,0.187140888175305,-0.298732794272984, + -5.1934406599341e-05,-0.000398939279494748,0.202550083045188,-0.32839666877878, + -5.48867893742644e-05,0.000258345851680497,0.217959277915071,-0.358060543284576, + -5.78391721481886e-05,0.000915630982857296,0.233368472784954,-0.387724417790371, + -6.07915549233895e-05,0.0015729161140321,0.248777667654836,-0.417388292296167, + -6.37439376979243e-05,0.00223020124520801,0.264186862524719,-0.447052166801963, + -6.66963204726256e-05,0.0028874863763837,0.279596057394602,-0.476716041307758, + -6.96487032471049e-05,0.00354477150755916,0.295005252264485,-0.506379915813554, + -7.26010860216952e-05,0.00420205663873552,0.310414447134368,-0.53604379031935, + -7.55534687965076e-05,0.00485934176991054,0.32582364200425,-0.565707664825145, + -7.85058515710979e-05,0.00551662690108645,0.341232836874134,-0.595371539330941, + -8.14582343454662e-05,0.00617391203226303,0.356642031744017,-0.625035413836737, + -8.44106171206116e-05,0.00683119716343805,0.3720512266139,-0.654699288342532, + -8.73629998947578e-05,0.00748848229461441,0.387460421483782,-0.684363162848328, + -9.03153826692371e-05,0.00814576742578987,0.402869616353665,-0.714027037354124, + -9.32677654439384e-05,0.00880305255696578,0.418278811223548,-0.74369091185992, + -2.18720218072843e-05,-0.00693491643490615,0.048371182282186,-0.0318567150175, + -2.46888569472026e-05,-0.00628662334124291,0.0636629196819949,-0.061599964103931, + -2.75056920869543e-05,-0.00563833024757943,0.0789546570818039,-0.0913432131903619, + -3.03225272269003e-05,-0.00499003715391622,0.0942463944816127,-0.121086462276793, + -3.31393623668741e-05,-0.00434174406025301,0.109538131881422,-0.150829711363224, + -3.59561975066258e-05,-0.00369345096658957,0.124829869281231,-0.180572960449655, + -3.87730326464886e-05,-0.00304515787292625,0.140121606681039,-0.210316209536086, + -4.15898677863513e-05,-0.00239686477926304,0.155413344080848,-0.240059458622517, + -4.44067029262141e-05,-0.00174857168559961,0.170705081480657,-0.269802707708948, + -4.72235380659103e-05,-0.00110027859193629,0.185996818880466,-0.299545956795379, + -5.0040373205773e-05,-0.000451985498272744,0.201288556280275,-0.32928920588181, + -5.28572083459689e-05,0.000196307595390133,0.216580293680084,-0.35903245496824, + -5.56740434858316e-05,0.000844600689053454,0.231872031079893,-0.388775704054671, + -5.84908786257499e-05,0.00149289378271678,0.247163768479702,-0.418518953141103, + -6.1307713765113e-05,0.00214118687638054,0.262455505879511,-0.448262202227533, + -6.41245489049203e-05,0.00278947997004364,0.277747243279319,-0.478005451313964, + -6.69413840450606e-05,0.00343777306370718,0.293038980679128,-0.507748700400395, + -6.97582191853119e-05,0.00408606615736962,0.308330718078937,-0.537491949486826, + -7.25750543248971e-05,0.00473435925103383,0.323622455478746,-0.567235198573257, + -7.53918894643713e-05,0.00538265234469737,0.338914192878555,-0.596978447659688, + -7.82087246042895e-05,0.00603094543836047,0.354205930278364,-0.626721696746119, + -8.10255597444298e-05,0.00667923853202401,0.369497667678173,-0.65646494583255, + -8.38423948844591e-05,0.00732753162568622,0.384789405077981,-0.686208194918981, + -8.66592300241553e-05,0.00797582471934977,0.40008114247779,-0.715951444005412, + -8.94760651637405e-05,0.00862411781301375,0.415372879877599,-0.745694693091843, + -2.11605704003165e-05,-0.00688691882449444,0.0482563103433187,-0.0319864067548445, + -2.38032287121076e-05,-0.00625079780245241,0.0633932707791616,-0.0618338576040809, + -2.64458870239959e-05,-0.00561467678041044,0.0785302312150046,-0.0916813084533172, + -2.90885453357592e-05,-0.00497855575836831,0.0936671916508476,-0.121528759302554, + -3.17312036477446e-05,-0.00434243473632645,0.108804152086691,-0.15137621015179, + -3.43738619594247e-05,-0.0037063137142842,0.123941112522534,-0.181223661001026, + -3.70165202714379e-05,-0.00307019269224251,0.139078072958376,-0.211071111850263, + -3.96591785830069e-05,-0.00243407167019993,0.15421503339422,-0.240918562699499, + -4.2301836894687e-05,-0.00179795064815769,0.169351993830063,-0.270766013548735, + -4.49444952065892e-05,-0.001161829626116,0.184488954265906,-0.300613464397972, + -4.75871535181582e-05,-0.000525708604073527,0.199625914701749,-0.330460915247208, + -5.02298118300604e-05,0.000110412417968719,0.214762875137592,-0.360308366096445, + -5.28724701421845e-05,0.000746533440010078,0.229899835573435,-0.390155816945681, + -5.55151284538091e-05,0.00138265446205232,0.245036796009278,-0.420003267794917, + -5.81577867655447e-05,0.00201877548409479,0.260173756445121,-0.449850718644154, + -6.08004450773914e-05,0.00265489650613682,0.275310716880964,-0.47969816949339, + -6.3443103389238e-05,0.00329101752817884,0.290447677316807,-0.509545620342626, + -6.60857617013066e-05,0.00392713855022042,0.30558463775265,-0.539393071191863, + -6.87284200131533e-05,0.00456325957226245,0.320721598188493,-0.569240522041099, + -7.13710783248889e-05,0.00519938059430447,0.335858558624336,-0.599087972890335, + -7.40137366366245e-05,0.00583550161634649,0.350995519060179,-0.628935423739572, + -7.66563949483601e-05,0.00647162263838874,0.366132479496021,-0.658782874588808, + -7.92990532606508e-05,0.00710774366043054,0.381269439931865,-0.688630325438044, + -8.19417115720533e-05,0.00774386468247323,0.396406400367708,-0.718477776287281, + -8.45843698838999e-05,0.00837998570451504,0.411543360803551,-0.748325227136517, + -2.02394967061814e-05,-0.00682596698169216,0.0481075954312107,-0.0321529493709036, + -2.26649154918684e-05,-0.00620608901611291,0.0630448336788449,-0.0621342100875296, + -2.50903342774722e-05,-0.00558621105053364,0.0779820719264791,-0.0921154708041555, + -2.75157530631731e-05,-0.00496633308495431,0.0929193101741135,-0.122096731520781, + -2.99411718487907e-05,-0.00434645511937515,0.107856548421748,-0.152077992237407, + -3.23665906344639e-05,-0.00372657715379576,0.122793786669382,-0.182059252954033, + -3.47920094202481e-05,-0.00310669918821671,0.137731024917016,-0.212040513670659, + -3.72174282060045e-05,-0.00248682122263744,0.15266826316465,-0.242021774387285, + -3.96428469915389e-05,-0.00186694325705816,0.167605501412285,-0.272003035103911, + -4.20682657774063e-05,-0.00124706529147911,0.182542739659919,-0.301984295820537, + -4.44936845627186e-05,-0.000627187325899392,0.197479977907553,-0.331965556537163, + -4.69191033486416e-05,-7.30936032056206e-06,0.212417216155187,-0.361946817253789, + -4.9344522134287e-05,0.000612568605259156,0.227354454402822,-0.391928077970415, + -5.17699409202099e-05,0.00123244657083754,0.242291692650455,-0.421909338687041, + -5.41953597058553e-05,0.00185232453641726,0.25722893089809,-0.451890599403667, + -5.66207784917783e-05,0.00247220250199587,0.272166169145724,-0.481871860120293, + -5.90461972770351e-05,0.00309208046757603,0.287103407393359,-0.511853120836919, + -6.1471616062625e-05,0.0037119584331553,0.302040645640993,-0.541834381553544, + -6.38970348481038e-05,0.00433183639873458,0.316977883888627,-0.57181564227017, + -6.63224536343598e-05,0.00495171436431319,0.331915122136261,-0.601796902986796, + -6.87478724200608e-05,0.00557159232989202,0.346852360383895,-0.631778163703422, + -7.11732912055396e-05,0.00619147029547173,0.361789598631529,-0.661759424420048, + -7.35987099907964e-05,0.0068113482610519,0.376726836879164,-0.691740685136674, + -7.60241287766084e-05,0.00743122622663073,0.391664075126798,-0.7217219458533, + -7.84495475628644e-05,0.00805110419220867,0.406601313374432,-0.751703206569926, + -1.90777036821049e-05,-0.0067509566582728,0.0479200436444593,-0.0323608586104601, + -2.12423877882506e-05,-0.00615232382186409,0.0626064265192182,-0.0625091655068113, + -2.34070718945212e-05,-0.00555369098545533,0.0772928093939773,-0.0926574724031625, + -2.55717560007362e-05,-0.00495505814904668,0.0919791922687362,-0.122805779299514, + -2.77364401069513e-05,-0.00435642531263802,0.106665575143495,-0.152954086195865, + -2.99011242132496e-05,-0.00375779247622932,0.121351958018254,-0.183102393092216, + -3.2065808319437e-05,-0.00315915963982061,0.136038340893013,-0.213250699988567, + -3.42304924255132e-05,-0.00256052680341168,0.150724723767772,-0.243399006884918, + -3.63951765317561e-05,-0.00196189396700297,0.165411106642531,-0.27354731378127, + -3.85598606380544e-05,-0.00136326113059471,0.18009748951729,-0.303695620677621, + -4.07245447440752e-05,-0.000764628294185554,0.194783872392049,-0.333843927573972, + -4.2889228850318e-05,-0.000165995457776846,0.209470255266808,-0.363992234470323, + -4.50539129565053e-05,0.000432637378632084,0.224156638141567,-0.394140541366674, + -4.72185970629146e-05,0.00103127021504035,0.238843021016326,-0.424288848263025, + -4.9383281169324e-05,0.00162990305144883,0.253529403891085,-0.454437155159377, + -5.15479652752893e-05,0.00222853588785799,0.268215786765844,-0.484585462055728, + -5.37126493814766e-05,0.00282716872426625,0.282902169640602,-0.514733768952079, + -5.58773334877749e-05,0.0034258015606754,0.297588552515362,-0.54488207584843, + -5.80420175938512e-05,0.00402443439708411,0.312274935390121,-0.575030382744781, + -6.02067017001495e-05,0.00462306723349304,0.32696131826488,-0.605178689641132, + -6.23713858056707e-05,0.00522170006990219,0.341647701139639,-0.635326996537484, + -6.45360699130793e-05,0.00582033290630912,0.356334084014397,-0.665475303433835, + -6.67007540189335e-05,0.00641896574271872,0.371020466889157,-0.695623610330186, + -6.88654381252318e-05,0.00701759857912743,0.385706849763916,-0.725771917226537, + -7.10301222313081e-05,0.00761623141553613,0.400393232638675,-0.755920224122888, + -1.76595017411796e-05,-0.00666214638203028,0.0476911883195031,-0.0326114488374637, + -1.95259739344811e-05,-0.00609055012260873,0.0620729675499896,-0.0629610942610814, + -2.13924461277548e-05,-0.00551895386318724,0.076454746780476,-0.0933107396846991, + -2.32589183211673e-05,-0.00494735760376575,0.0908365260109626,-0.123660385108317, + -2.51253905145243e-05,-0.00437576134434436,0.105218305241449,-0.154010030531935, + -2.69918627076871e-05,-0.00380416508492265,0.119600084471935,-0.184359675955552, + -2.88583349011273e-05,-0.00323256882550116,0.133981863702422,-0.21470932137917, + -3.07248070943178e-05,-0.00266097256607967,0.148363642932908,-0.245058966802788, + -3.25912792878413e-05,-0.0020893763066584,0.162745422163395,-0.275408612226406, + -3.44577514810318e-05,-0.00151778004723657,0.177127201393881,-0.305758257650023, + -3.63242236744443e-05,-0.000946183787815302,0.191508980624368,-0.336107903073641, + -3.81906958676903e-05,-0.000374587528393588,0.205890759854854,-0.366457548497259, + -4.00571680611583e-05,0.000197008731027681,0.220272539085341,-0.396807193920877, + -4.19236402542378e-05,0.000768604990449395,0.234654318315827,-0.427156839344494, + -4.37901124479279e-05,0.00134020124987067,0.249036097546314,-0.457506484768112, + -4.56565846410628e-05,0.00191179750929238,0.2634178767768,-0.48785613019173, + -4.75230568347529e-05,0.00248339376871365,0.277799656007287,-0.518205775615347, + -4.93895290277768e-05,0.00305499002813536,0.292181435237773,-0.548555421038965, + -5.12560012206897e-05,0.0036265862875573,0.30656321446826,-0.578905066462583, + -5.31224734140467e-05,0.00419818254697879,0.320944993698746,-0.609254711886201, + -5.49889456074037e-05,0.00476977880640028,0.335326772929233,-0.639604357309818, + -5.68554178010938e-05,0.00534137506582155,0.349708552159719,-0.669954002733436, + -5.87218899936737e-05,0.00591297132524371,0.364090331390206,-0.700303648157054, + -6.05883621879189e-05,0.00648456758466409,0.378472110620692,-0.730653293580672, + -6.24548343816089e-05,0.00705616384408536,0.392853889851178,-0.761002939004289, + -1.59959192743281e-05,-0.00656170866354217,0.0474229351147055,-0.0329010027005708, + -1.75406844489939e-05,-0.00602330309650645,0.0614496844725409,-0.0634832922662185, + -1.90854496235904e-05,-0.00548489752947057,0.0754764338303764,-0.0940655818318661, + -2.06302147984505e-05,-0.00494649196243513,0.0895031831882117,-0.124647871397514, + -2.21749799729221e-05,-0.00440808639539914,0.103529932546047,-0.155230160963162, + -2.37197451475601e-05,-0.00386968082836325,0.117556681903883,-0.185812450528809, + -2.52645103224758e-05,-0.0033312752613277,0.131583431261718,-0.216394740094457, + -2.68092754970861e-05,-0.00279286969429227,0.145610180619553,-0.246977029660105, + -2.83540406713634e-05,-0.00225446412725583,0.159636929977389,-0.277559319225752, + -2.98988058461402e-05,-0.00171605856022028,0.173663679335224,-0.3081416087914, + -3.14435710209171e-05,-0.00117765299318462,0.18769042869306,-0.338723898357048, + -3.29883361955274e-05,-0.000639247426148959,0.201717178050895,-0.369306187922695, + -3.45331013705819e-05,-0.000100841859113743,0.21574392740873,-0.399888477488343, + -3.60778665446371e-05,0.000437563707922806,0.229770676766566,-0.430470767053991, + -3.76226317195805e-05,0.000975969274958244,0.243797426124401,-0.461053056619638, + -3.91673968945794e-05,0.00151437484199346,0.257824175482237,-0.491635346185286, + -4.07121620688011e-05,0.00205278040902979,0.271850924840072,-0.522217635750934, + -4.2256927243689e-05,0.00259118597606567,0.285877674197908,-0.552799925316581, + -4.38016924181328e-05,0.00312959154310133,0.299904423555743,-0.583382214882229, + -4.53464575930207e-05,0.00366799711013677,0.313931172913578,-0.613964504447877, + -4.68912227675755e-05,0.00420640267717287,0.327957922271414,-0.644546794013524, + -4.84359879420193e-05,0.00474480824420898,0.34198467162925,-0.675129083579172, + -4.99807531166852e-05,0.00528321381124464,0.356011420987085,-0.70571137314482, + -5.1525518291351e-05,0.0058216193782803,0.37003817034492,-0.736293662710468, + -5.30702834662389e-05,0.00636002494531551,0.384064919702755,-0.766875952276115, + -1.4133300540814e-05,-0.0064538706340953,0.0471229485411515,-0.0332197073276481, + -1.5353856657227e-05,-0.00595441955359038,0.0607551275041145,-0.06405806242712, + -1.65744127736123e-05,-0.00545496847308546,0.0743873064670775,-0.094896417526592, + -1.77949688899559e-05,-0.00495551739258043,0.0880194854300406,-0.125734772626064, + -1.90155250064106e-05,-0.00445606631207573,0.101651664393003,-0.156573127725536, + -2.0236081122782e-05,-0.00395661523157076,0.115283843355966,-0.187411482825008, + -2.14566372390146e-05,-0.00345716415106567,0.12891602231893,-0.21824983792448, + -2.26771933552472e-05,-0.00295771307056047,0.142548201281893,-0.249088193023952, + -2.38977494717574e-05,-0.00245826199005572,0.156180380244856,-0.279926548123423, + -2.51183055879345e-05,-0.00195881090955052,0.169812559207819,-0.310764903222895, + -2.63388617046667e-05,-0.00145935982904599,0.183444738170782,-0.341603258322367, + -2.75594178210659e-05,-0.000959908748541016,0.197076917133745,-0.372441613421839, + -2.87799739377981e-05,-0.000460457668036485,0.210709096096708,-0.403279968521311, + -3.00005300540862e-05,3.8993412468491e-05,0.22434127505967,-0.434118323620783, + -3.12210861695972e-05,0.000538444492974355,0.237973454022634,-0.464956678720255, + -3.24416422864404e-05,0.00103789557347911,0.251605632985597,-0.495795033819727, + -3.36621984028396e-05,0.00153734665398342,0.265237811948559,-0.526633388919199, + -3.48827545193497e-05,0.00203679773448839,0.278869990911522,-0.557471744018671, + -3.61033106354158e-05,0.00253624881499359,0.292502169874486,-0.588310099118142, + -3.73238667522591e-05,0.00303569989549812,0.306134348837449,-0.619148454217614, + -3.85444228689913e-05,0.00353515097600221,0.319766527800411,-0.649986809317087, + -3.97649789841692e-05,0.00403460205650896,0.333398706763375,-0.680825164416558, + -4.09855351010124e-05,0.00453405313701394,0.347030885726338,-0.71166351951603, + -4.22060912178557e-05,0.00503350421751803,0.360663064689301,-0.742501874615502, + -4.34266473331446e-05,0.00553295529802433,0.374295243652264,-0.773340229714974, + -1.21534947497837e-05,-0.00634438197652659,0.0468046375595618,-0.0335522688691095, + -1.30711203291528e-05,-0.00588829157735871,0.0600208473306649,-0.064657822940321, + -1.39887459086052e-05,-0.00543220117819077,0.0732370571017682,-0.0957633770115324, + -1.49063714880437e-05,-0.00497611077902305,0.0864532668728713,-0.126868931082744, + -1.58239970676211e-05,-0.00452002037985533,0.0996694766439744,-0.157974485153955, + -1.67416226470596e-05,-0.0040639299806875,0.112885686415078,-0.189080039225167, + -1.76592482264426e-05,-0.00360783958151967,0.126101896186181,-0.220185593296378, + -1.85768738057424e-05,-0.00315174918235162,0.139318105957284,-0.25129114736759, + -1.94944993854307e-05,-0.00269565878318412,0.152534315728387,-0.282396701438801, + -2.04121249646749e-05,-0.00223956838401596,0.16575052549949,-0.313502255510013, + -2.13297505440302e-05,-0.00178347798484801,0.178966735270593,-0.344607809581224, + -2.2247376123552e-05,-0.00132738758568007,0.192182945041697,-0.375713363652436, + -2.31650017031293e-05,-0.000871297186512798,0.2053991548128,-0.406818917723647, + -2.40826272824846e-05,-0.000415206787344635,0.218615364583903,-0.437924471794858, + -2.50002528621174e-05,4.08836118228617e-05,0.231831574355006,-0.46903002586607, + -2.5917878440973e-05,0.000496974010991691,0.24504778412611,-0.500135579937281, + -2.68355040207169e-05,0.000953064410158744,0.258263993897212,-0.531241134008493, + -2.77531296001277e-05,0.00140915480932691,0.271480203668316,-0.562346688079704, + -2.86707551794274e-05,0.00186524520849507,0.284696413439419,-0.593452242150916, + -2.95883807592823e-05,0.00232133560766234,0.297912623210522,-0.624557796222127, + -3.0506006338249e-05,0.00277742600683073,0.311128832981626,-0.655663350293339, + -3.14236319178818e-05,0.00323351640599867,0.324345042752729,-0.68676890436455, + -3.23412574978477e-05,0.00368960680516528,0.337561252523831,-0.717874458435762, + -3.32588830770364e-05,0.00414569720433322,0.350777462294934,-0.748980012506973, + -3.41765086567802e-05,0.00460178760350072,0.363993672066038,-0.780085566578185, + -1.01620730509622e-05,-0.00623936560030039,0.0464851674537681,-0.0338805154515821, + -1.081832139678e-05,-0.00582879618279192,0.0592865555669479,-0.0652498016095776, + -1.14745697426533e-05,-0.0054182267652837,0.0720879436801276,-0.0966190877675731, + -1.21308180884849e-05,-0.00500765734777514,0.0848893317933074,-0.127988373925569, + -1.27870664344831e-05,-0.00459708793026703,0.0976907199064871,-0.159357660083564, + -1.3443314780287e-05,-0.00418651851275864,0.110492108019667,-0.19072694624156, + -1.40995631261465e-05,-0.00377594909525014,0.123293496132847,-0.222096232399555, + -1.47558114719781e-05,-0.00336537967774198,0.136094884246026,-0.253465518557551, + -1.54120598174767e-05,-0.00295481026023292,0.148896272359206,-0.284834804715546, + -1.60683081635304e-05,-0.00254424084272498,0.161697660472386,-0.316204090873541, + -1.67245565095842e-05,-0.00213367142521692,0.174499048585566,-0.347573377031537, + -1.73808048555268e-05,-0.00172310200770864,0.187300436698745,-0.378942663189533, + -1.8037053201192e-05,-0.00131253259019992,0.200101824811925,-0.410311949347528, + -1.86933015471902e-05,-0.000901963172691866,0.212903212925105,-0.441681235505523, + -1.93495498930218e-05,-0.000491393755183589,0.225704601038284,-0.473050521663519, + -2.00057982384649e-05,-8.08243376744233e-05,0.238505989151465,-0.504419807821514, + -2.06620465843521e-05,0.000329745079833632,0.251307377264644,-0.53578909397951, + -2.13182949301283e-05,0.00074031449734191,0.264108765377824,-0.567158380137506, + -2.19745432760154e-05,0.00115088391485063,0.276910153491004,-0.598527666295501, + -2.26307916216806e-05,0.00156145333235935,0.289711541604184,-0.629896952453496, + -2.32870399675678e-05,0.00197202274986763,0.302512929717363,-0.661266238611492, + -2.3943288313677e-05,0.00238259216737502,0.315314317830542,-0.692635524769487, + -2.45995366598972e-05,0.0027931615848833,0.328115705943723,-0.724004810927483, + -2.52557850056734e-05,0.00320373100239113,0.340917094056902,-0.755374097085478, + -2.59120333515606e-05,0.00361430041989985,0.353718482170082,-0.786743383243474, + -8.26705109892301e-06,-0.00614399811919378,0.0461819444859536,-0.0341871901170836, + -8.71494151642727e-06,-0.00577840804286384,0.058591957638233,-0.0658028762494132, + -9.16283193405643e-06,-0.00541281796653398,0.0710019707905123,-0.0974185623817426, + -9.61072235172722e-06,-0.00504722789020423,0.0834119839427916,-0.129034248514072, + -1.0058612769176e-05,-0.00468163781387432,0.0958219970950708,-0.160649934646402, + -1.05065031867912e-05,-0.00431604773754446,0.10823201024735,-0.192265620778731, + -1.09543936041567e-05,-0.00395045766121427,0.12064202339963,-0.223881306911061, + -1.14022840220218e-05,-0.00358486758488485,0.133052036551909,-0.25549699304339, + -1.18501744393318e-05,-0.00321927750855455,0.145462049704188,-0.28711267917572, + -1.22980648569748e-05,-0.00285368743222492,0.157872062856467,-0.318728365308049, + -1.27459552746734e-05,-0.00248809735589517,0.170282076008747,-0.350344051440379, + -1.31938456918168e-05,-0.00212250727956453,0.182692089161026,-0.381959737572708, + -1.36417361095154e-05,-0.00175691720323479,0.195102102313306,-0.413575423705038, + -1.40896265271029e-05,-0.00139132712690526,0.207512115465585,-0.445191109837367, + -1.45375169446904e-05,-0.00102573705057507,0.219922128617864,-0.476806795969697, + -1.49854073622224e-05,-0.000660146974245324,0.232332141770144,-0.508422482102026, + -1.54332977795324e-05,-0.000294556897915133,0.244742154922423,-0.540038168234356, + -1.58811881972865e-05,7.10331784146145e-05,0.257152168074702,-0.571653854366686, + -1.63290786149295e-05,0.00043662325474414,0.269562181226981,-0.603269540499015, + -1.67769690324615e-05,0.000802213331074331,0.281972194379261,-0.634885226631344, + -1.72248594498825e-05,0.0011678034074043,0.29438220753154,-0.666500912763674, + -1.76727498673035e-05,0.00153339348373427,0.306792220683819,-0.698116598896004, + -1.81206402853906e-05,0.00189898356006335,0.319202233836098,-0.729732285028333, + -1.85685307022565e-05,0.00226457363639376,0.331612246988378,-0.761347971160663, + -1.90164211203436e-05,0.00263016371272329,0.344022260140657,-0.792963657292992, + -6.55658407081039e-06,-0.00606159083217481,0.0459090008301479,-0.0344593555276549, + -6.85022699883908e-06,-0.00573790517319722,0.0579685928599279,-0.0662937149242715, + -7.14386992681226e-06,-0.00541421951421955,0.070028184889708,-0.0981280743208882, + -7.43751285489647e-06,-0.00509053385524205,0.082087776919488,-0.129962433717505, + -7.7311557828974e-06,-0.00476684819626438,0.0941473689492681,-0.161796793114121, + -8.02479871087058e-06,-0.00444316253728694,0.106206960979048,-0.193631152510738, + -8.31844163906581e-06,-0.00411947687830927,0.118266553008828,-0.225465511907355, + -8.61208456715001e-06,-0.00379579121933193,0.130326145038608,-0.257299871303971, + -8.90572749501217e-06,-0.00347210556035404,0.142385737068388,-0.289134230700588, + -9.19937042309638e-06,-0.00314841990137649,0.154445329098168,-0.320968590097205, + -9.49301335084751e-06,-0.0028247342423986,0.166504921127948,-0.352802949493821, + -9.78665627926478e-06,-0.00250104858342159,0.178564513157728,-0.384637308890438, + -1.00802992069604e-05,-0.00217736292444348,0.190624105187508,-0.416471668287055, + -1.03739421350446e-05,-0.00185367726546581,0.202683697217289,-0.448306027683671, + -1.06675850630733e-05,-0.00152999160648859,0.214743289247068,-0.480140387080288, + -1.09612279913796e-05,-0.00120630594751092,0.226802881276849,-0.511974746476904, + -1.12548709191307e-05,-0.000882620288533476,0.238862473306628,-0.543809105873521, + -1.15485138472149e-05,-0.000558934629555585,0.250922065336409,-0.575643465270138, + -1.18421567755211e-05,-0.000235248970578805,0.262981657366188,-0.607477824666755, + -1.21357997029392e-05,8.84366883999732e-05,0.275041249395969,-0.639312184063371, + -1.24294426315785e-05,0.000412122347376531,0.287100841425748,-0.671146543459988, + -1.27230855595517e-05,0.000735808006354421,0.299160433455528,-0.702980902856604, + -1.30167284865257e-05,0.0010594936653332,0.311220025485309,-0.734815262253221, + -1.33103714157201e-05,0.00138317932430976,0.323279617515089,-0.766649621649837, + -1.36040143425831e-05,0.00170686498328809,0.335339209544868,-0.798483981046454, + -5.08478729989437e-06,-0.00599337229756208,0.0456747726584931,-0.0346900943510097, + -5.27140450777563e-06,-0.00570667872925507,0.057435008107411,-0.0667098425212948, + -5.45802171550425e-06,-0.00541998516094772,0.0691952435563291,-0.09872959069158, + -5.64463892352429e-06,-0.00513329159264081,0.080955479005247,-0.130749338861865, + -5.83125613121127e-06,-0.00484659802433351,0.092715714454165,-0.16276908703215, + -6.01787333912029e-06,-0.00455990445602639,0.104475949903083,-0.194788835202435, + -6.20449054683503e-06,-0.00427321088771926,0.116236185352001,-0.22680858337272, + -6.39110775468854e-06,-0.00398651731941224,0.127996420800919,-0.258828331543005, + -6.57772496270859e-06,-0.00369982375110534,0.139756656249837,-0.290848079713291, + -6.76434217045108e-06,-0.00341313018279799,0.151516891698755,-0.322867827883576, + -6.95095937847112e-06,-0.00312643661449075,0.163277127147673,-0.354887576053861, + -7.13757658643566e-06,-0.0028397430461844,0.17503736259659,-0.386907324224146, + -7.32419379384508e-06,-0.00255304947787649,0.186797598045509,-0.418927072394431, + -7.5108110022537e-06,-0.00226635590957036,0.198557833494426,-0.450946820564716, + -7.69742820949659e-06,-0.00197966234126223,0.210318068943345,-0.482966568735001, + -7.88404541740562e-06,-0.00169296877295522,0.222078304392263,-0.514986316905286, + -8.07066262542566e-06,-0.0014062752046482,0.23383853984118,-0.547006065075571, + -8.25727983344571e-06,-0.00111958163634096,0.245598775290099,-0.579025813245856, + -8.44389704091064e-06,-0.000832888068033499,0.257359010739017,-0.611045561416142, + -8.63051424870864e-06,-0.000546194499726482,0.269119246187934,-0.643065309586427, + -8.81713145639562e-06,-0.000259500931419243,0.280879481636852,-0.675085057756712, + -9.00374866452669e-06,2.71926368875519e-05,0.29263971708577,-0.707104805926997, + -9.19036587232469e-06,0.000313886205194347,0.304399952534688,-0.739124554097282, + -9.37698307978962e-06,0.00060057977350203,0.316160187983606,-0.771144302267567, + -9.56360028792069e-06,0.000887273341809269,0.327920423432524,-0.803164050437852, + -3.86957818909739e-06,-0.00593886466524146,0.0454818542272867,-0.0348782456110755, + -3.98575481037888e-06,-0.00568333287867956,0.0569964413405259,-0.067049165269802, + -4.10193143168813e-06,-0.00542780109211766,0.0685110284537651,-0.0992200849285285, + -4.21810805301126e-06,-0.00517226930555587,0.0800256155670042,-0.131391004587255, + -4.33428467425112e-06,-0.0049167375189938,0.0915402026802435,-0.163561924245982, + -4.45046129576854e-06,-0.00466120573243234,0.103054789793482,-0.195732843904708, + -4.56663791703615e-06,-0.00440567394587021,0.114569376906722,-0.227903763563435, + -4.68281453830377e-06,-0.00415014215930853,0.126083964019961,-0.260074683222161, + -4.79899115973792e-06,-0.00389461037274674,0.1375985511332,-0.292245602880888, + -4.91516778067247e-06,-0.0036390785861844,0.149113138246439,-0.324416522539614, + -5.03134440210662e-06,-0.00338354679962261,0.160627725359679,-0.356587442198341, + -5.14752102331872e-06,-0.00312801501306059,0.172142312472918,-0.388758361857067, + -5.2636976448639e-06,-0.0028724832264988,0.183656899586157,-0.420929281515794, + -5.37987426635356e-06,-0.00261695143993745,0.195171486699396,-0.45310020117452, + -5.49605088751015e-06,-0.00236141965337522,0.206686073812635,-0.485271120833247, + -5.61222750872226e-06,-0.00210588786681343,0.218200660925874,-0.517442040491973, + -5.72840413026743e-06,-0.00185035608025164,0.229715248039114,-0.5496129601507, + -5.84458075114647e-06,-0.0015948242936894,0.241229835152353,-0.581783879809426, + -5.96075737246959e-06,-0.00133929250712739,0.252744422265592,-0.613954799468153, + -6.07693399412579e-06,-0.0010837607205656,0.264259009378832,-0.646125719126879, + -6.19311061533789e-06,-0.000828228934004027,0.27577359649207,-0.678296638785606, + -6.30928723632795e-06,-0.000572697147442014,0.287288183605309,-0.710467558444333, + -6.42546385820619e-06,-0.000317165360880445,0.298802770718549,-0.742638478103059, + -6.54164047908523e-06,-6.16335743179874e-05,0.310317357831788,-0.774809397761785, + -6.65781710051938e-06,0.000193898212243138,0.321831944945027,-0.806980317420512, + -2.89997342294013e-06,-0.0058965229248214,0.04532825336189,-0.0350268606255955, + -2.97158240979145e-06,-0.00566623906565222,0.0566478297080244,-0.0673171860908092, + -3.04319139671216e-06,-0.00543595520648321,0.0679674060541586,-0.0996075115560229, + -3.11480038370227e-06,-0.00520567134731414,0.0792869824002929,-0.131897837021237, + -3.18640937066461e-06,-0.00497538748814519,0.0906065587464271,-0.16418816248645, + -3.25801835751593e-06,-0.00474510362897607,0.101926135092561,-0.196478487951664, + -3.32962734445053e-06,-0.00451481976980717,0.113245711438695,-0.228768813416878, + -3.40123633119083e-06,-0.00428453591063782,0.12456528778483,-0.261059138882091, + -3.47284531831971e-06,-0.00405425205146892,0.135884864130964,-0.293349464347305, + -3.54445430494899e-06,-0.00382396819229935,0.147204440477099,-0.325639789812519, + -3.61606329180031e-06,-0.00359368433313034,0.158524016823233,-0.357930115277732, + -3.6876722789847e-06,-0.00336340047396155,0.169843593169367,-0.390220440742946, + -3.75928126594705e-06,-0.00313311661479254,0.181163169515501,-0.42251076620816, + -3.83089025263184e-06,-0.00290283275562331,0.192482745861635,-0.454801091673373, + -3.90249923953867e-06,-0.0026725488964543,0.20380232220777,-0.487091417138587, + -3.97410822638999e-06,-0.00244226503728528,0.215121898553904,-0.519381742603801, + -4.04571721324132e-06,-0.00221198117811627,0.226441474900038,-0.551672068069014, + -4.11732620053673e-06,-0.00198169731894726,0.237761051246172,-0.583962393534228, + -4.18893518738805e-06,-0.00175141345977869,0.249080627592306,-0.616252718999442, + -4.26054417446142e-06,-0.00152112960060924,0.260400203938441,-0.648543044464655, + -4.33215316086866e-06,-0.00129084574143956,0.271719780284575,-0.680833369929869, + -4.40376214749794e-06,-0.00106056188226988,0.28303935663071,-0.713123695395083, + -4.47537113479335e-06,-0.000830278023101982,0.294358932976843,-0.745414020860297, + -4.54698012153365e-06,-0.000599994163932305,0.305678509322978,-0.77770434632551, + -4.61858910860702e-06,-0.000369710304763959,0.316998085669112,-0.809994671790724, + -2.14724391352228e-06,-0.00586434101126784,0.0452092181363553,-0.0351413215647159, + -2.19137834478467e-06,-0.00565388466844047,0.0563780103181248,-0.0675236114979282, + -2.23551277592215e-06,-0.0054434283256129,0.0675468024998945,-0.0999059014311406, + -2.27964720717067e-06,-0.00523297198278561,0.0787155946816639,-0.132288191364353, + -2.32378163830815e-06,-0.00502251563995793,0.0898843868634336,-0.164670481297565, + -2.3679160694734e-06,-0.00481205929713047,0.101053179045203,-0.197052771230778, + -2.41205050061088e-06,-0.00460160295430301,0.112221971226973,-0.22943506116399, + -2.45618493199817e-06,-0.00439114661147566,0.123390763408742,-0.261817351097202, + -2.50031936310791e-06,-0.0041806902686482,0.134559555590512,-0.294199641030415, + -2.54445379432866e-06,-0.00397023392582097,0.145728347772281,-0.326581930963627, + -2.5885882254939e-06,-0.0037597775829934,0.156897139954051,-0.358964220896839, + -2.63272265654813e-06,-0.00354932124016538,0.168065932135821,-0.391346510830052, + -2.67685708760235e-06,-0.00333886489733759,0.179234724317591,-0.423728800763264, + -2.72099151898963e-06,-0.00312840855451091,0.19040351649936,-0.456111090696476, + -2.76512595021039e-06,-0.00291795221168356,0.201572308681129,-0.488493380629689, + -2.80926038154217e-06,-0.00270749586885599,0.212741100862899,-0.520875670562901, + -2.8533948126519e-06,-0.00249703952602864,0.223909893044668,-0.553257960496114, + -2.89752924420572e-06,-0.00228658318320152,0.235078685226438,-0.585640250429326, + -2.94166367509341e-06,-0.00207612684037328,0.246247477408208,-0.618022540362538, + -2.98579810620314e-06,-0.00186567049754593,0.257416269589977,-0.65040483029575, + -3.02993253686878e-06,-0.00165521415471748,0.268585061771747,-0.682787120228963, + -3.07406696864465e-06,-0.00144475781189124,0.279753853953516,-0.715169410162175, + -3.11820139997643e-06,-0.00123430146906367,0.290922646135286,-0.747551700095387, + -3.16233583042003e-06,-0.00102384512623521,0.302091438317056,-0.7799339900286, + -3.20647026230692e-06,-0.000813388783408531,0.313260230498825,-0.812316279961812, + -1.57521898412616e-06,-0.0058402812355243,0.0451188854488749,-0.0352277756672731, + -1.60264036312696e-06,-0.00564502143455947,0.0561734477297235,-0.0676795277734248, + -1.63006174194735e-06,-0.00544976163359451,0.067228010010572,-0.100131279879576, + -1.65748312089264e-06,-0.00525450183262971,0.0782825722914205,-0.132583031985728, + -1.68490449986569e-06,-0.00505924203166486,0.0893371345722691,-0.16503478409188, + -1.71232587875547e-06,-0.00486398223069984,0.100391696853118,-0.197486536198031, + -1.73974725758974e-06,-0.00466872242973504,0.111446259133966,-0.229938288304183, + -1.76716863670157e-06,-0.00447346262877013,0.122500821414815,-0.262390040410335, + -1.79459001553584e-06,-0.00427820282780533,0.133555383695663,-0.294841792516486, + -1.82201139448113e-06,-0.00408294302684031,0.144609945976512,-0.327293544622638, + -1.84943277348193e-06,-0.00388768322587563,0.155664508257361,-0.35974529672879, + -1.87685415253824e-06,-0.00369242342491072,0.166719070538209,-0.392197048834941, + -1.90427553109496e-06,-0.00349716362394537,0.177773632819058,-0.424648800941093, + -1.9316969103178e-06,-0.0033019038229809,0.188828195099906,-0.457100553047244, + -1.9591182892631e-06,-0.00310664402201621,0.199882757380755,-0.489552305153396, + -1.9865396677643e-06,-0.00291138422105086,0.210937319661604,-0.522004057259548, + -2.01396104693163e-06,-0.00271612442008617,0.221991881942452,-0.5544558093657, + -2.04138242643204e-06,-0.00252086461912215,0.2330464442233,-0.586907561471851, + -2.06880380460017e-06,-0.00232560481815636,0.244101006504149,-0.619359313578003, + -2.09622518376751e-06,-0.00213034501719145,0.255155568784998,-0.651811065684154, + -2.12364656326791e-06,-0.00193508521622743,0.266210131065846,-0.684262817790306, + -2.15106794188014e-06,-0.00173982541526208,0.277264693346695,-0.716714569896458, + -2.17848932004827e-06,-0.00154456561429672,0.288319255627543,-0.749166322002609, + -2.20591069888254e-06,-0.00134930581333093,0.299373817908393,-0.781618074108761, + -2.23333207827192e-06,-0.00115404601236735,0.31042838018924,-0.814069826214913, + -1.14752978243315e-06,-0.00582251324052027,0.0450514188223559,-0.0352921190621095, + -1.16480631602578e-06,-0.00563868670992446,0.0560207754968416,-0.0677955683334324, + -1.18208284960453e-06,-0.00545486017932861,0.0669901321713274,-0.100299017604755, + -1.19935938328042e-06,-0.00527103364873294,0.0779594888458131,-0.132802466876078, + -1.21663591656773e-06,-0.00508720711813671,0.0889288455202991,-0.165305916147401, + -1.23391245032689e-06,-0.00490338058754114,0.0998982021947847,-0.197809365418724, + -1.251188983864e-06,-0.00471955405694524,0.110867558869271,-0.230312814690047, + -1.26846551762316e-06,-0.00453572752634968,0.121836915543756,-0.262816263961369, + -1.28574205116028e-06,-0.00435190099575378,0.132806272218242,-0.295319713232692, + -1.30301858458637e-06,-0.00416807446515799,0.143775628892728,-0.327823162504015, + -1.32029511845655e-06,-0.00398424793456242,0.154744985567213,-0.360326611775338, + -1.33757165204917e-06,-0.00380042140396664,0.165714342241699,-0.392830061046661, + -1.35484818508669e-06,-0.00361659487337018,0.176683698916185,-0.425333510317984, + -1.37212471901238e-06,-0.00343276834277462,0.187653055590671,-0.457836959589306, + -1.38940125271603e-06,-0.00324894181217883,0.198622412265157,-0.490340408860629, + -1.40667778558701e-06,-0.00306511528158193,0.209591768939643,-0.522843858131952, + -1.42395432023434e-06,-0.0028812887509877,0.220561125614128,-0.555347307403275, + -1.44123085354941e-06,-0.00269746222039169,0.231530482288614,-0.587850756674598, + -1.45850738753062e-06,-0.00251363568979657,0.242499838963099,-0.620354205945921, + -1.47578392073466e-06,-0.00232980915920011,0.253469195637585,-0.652857655217243, + -1.49306045427178e-06,-0.00214598262860433,0.264438552312071,-0.685361104488566, + -1.51033698803094e-06,-0.00196215609800854,0.275407908986557,-0.717864553759889, + -1.52761352090192e-06,-0.00177832956741186,0.286377265661043,-0.750368003031212, + -1.54489005521619e-06,-0.00159450303681741,0.297346622335528,-0.782871452302535, + -1.56216658819819e-06,-0.00141067650622029,0.308315979010014,-0.815374901573858, + -8.31630060330046e-07,-0.00580950970757976,0.045001627399384,-0.0353394824502399, + -8.42705339509919e-07,-0.0056341664871114,0.0559081602851909,-0.0678809861777422, + -8.53780618564892e-07,-0.00545882326664299,0.0668146931709978,-0.100422489905245, + -8.64855897703132e-07,-0.00528348004617463,0.0777212260568046,-0.132963993632747, + -8.75931176924638e-07,-0.00510813682570643,0.0886277589426114,-0.165505497360249, + -8.87006455979611e-07,-0.00493279360523791,0.0995342918284183,-0.198047001087752, + -8.98081734979073e-07,-0.00475745038476927,0.110440824714225,-0.230588504815254, + -9.09157014394868e-07,-0.0045821071643013,0.121347357600032,-0.263130008542756, + -9.20232293366574e-07,-0.00440676394383277,0.132253890485839,-0.295671512270259, + -9.31307572282769e-07,-0.00423142072336402,0.143160423371646,-0.328213015997761, + -9.42382851587542e-07,-0.00405607750289616,0.154066956257452,-0.360754519725263, + -9.53458130947826e-07,-0.00388073428242786,0.164973489143259,-0.393296023452766, + -9.64533409919532e-07,-0.00370539106195933,0.175880022029066,-0.425837527180268, + -9.75608688891239e-07,-0.0035300478414908,0.186786554914873,-0.45837903090777, + -9.86683968418056e-07,-0.00335470462102294,0.19769308780068,-0.490920534635273, + -9.97759247445273e-07,-0.00317936140055419,0.208599620686487,-0.523462038362775, + -1.00883452636147e-06,-0.00300401818008611,0.219506153572294,-0.556003542090278, + -1.01990980572175e-06,-0.00282867495961758,0.230412686458101,-0.58854504581778, + -1.03098508485999e-06,-0.0026533317391495,0.241319219343907,-0.621086549545282, + -1.04206036377619e-06,-0.00247798851868009,0.252225752229715,-0.653628053272784, + -1.05313564291443e-06,-0.00230264529821245,0.263132285115521,-0.686169557000287, + -1.06421092227471e-06,-0.00212730207774436,0.274038818001328,-0.718711060727789, + -1.07528620130193e-06,-0.00195195885727539,0.284945350887135,-0.751252564455292, + -1.08636148032915e-06,-0.00177661563680775,0.295851883772941,-0.783794068182794, + -1.09743675957841e-06,-0.00160127241633923,0.306758416658749,-0.816335571910297, + -6.00394642863433e-07,-0.00580005558619484,0.0449652028088316,-0.0353740650941542, + -6.07626607168621e-07,-0.00563094253125529,0.0558258090308201,-0.0679433544966126, + -6.14858571307275e-07,-0.00546182947631557,0.0666864152528086,-0.100512643899071, + -6.22090535612463e-07,-0.00529271642137613,0.077547021474797,-0.133081933301529, + -6.29322499862139e-07,-0.00512360336643647,0.0884076276967856,-0.165651222703988, + -6.36554464250594e-07,-0.00495449031149708,0.0992682339187739,-0.198220512106446, + -6.43786428555781e-07,-0.0047853772565577,0.110128840140762,-0.230789801508905, + -6.51018392694436e-07,-0.00461626420161787,0.120989446362751,-0.263359090911363, + -6.58250356999623e-07,-0.00444715114667871,0.131850052584739,-0.295928380313821, + -6.65482321082767e-07,-0.00427803809173866,0.142710658806728,-0.32849766971628, + -6.72714285276932e-07,-0.00410892503679894,0.153571265028716,-0.361066959118738, + -6.79946249637631e-07,-0.00393981198185989,0.164431871250704,-0.393636248521197, + -6.87178214053841e-07,-0.00377069892692039,0.175292477472693,-0.426205537923655, + -6.94410178525562e-07,-0.00360158587198089,0.186153083694681,-0.458774827326114, + -7.0164214283075e-07,-0.00343247281704162,0.19701368991667,-0.491344116728572, + -7.08874106969404e-07,-0.0032633597621019,0.207874296138658,-0.523913406131031, + -7.16106070886013e-07,-0.00309424670716196,0.218734902360647,-0.556482695533489, + -7.23338035579779e-07,-0.00292513365222269,0.229595508582635,-0.589051984935947, + -7.30569999607411e-07,-0.00275602059728319,0.240456114804624,-0.621621274338406, + -7.37801963746065e-07,-0.00258690754234348,0.251316721026612,-0.654190563740864, + -7.45033928661876e-07,-0.00241779448740465,0.2621773272486,-0.686759853143323, + -7.52265892245418e-07,-0.00224868143246404,0.273037933470589,-0.719329142545781, + -7.59497857050206e-07,-0.00207956837752521,0.283898539692578,-0.751898431948239, + -7.66729821521928e-07,-0.00191045532258594,0.294759145914566,-0.784467721350698, + -7.73961785327515e-07,-0.00174134226764533,0.305619752136555,-0.817037010753156, + -2.84782493201324e-05,-0.00729197454872307,0.0597259588284352,-0.0440726974825753, + -3.18714019584831e-05,-0.00661748196895767,0.0752520089806604,-0.0728230742581764, + -3.52645545967922e-05,-0.00594298938919213,0.0907780591328857,-0.101573451033777, + -3.86577072351846e-05,-0.00526849680942676,0.106304109285111,-0.130323827809379, + -4.20508598735769e-05,-0.0045940042296615,0.121830159437336,-0.15907420458498, + -4.5444012511664e-05,-0.00391951164989557,0.137356209589561,-0.187824581360581, + -4.88371651501396e-05,-0.0032450190701302,0.152882259741787,-0.216574958136182, + -5.22303177883932e-05,-0.00257052649036471,0.168408309894012,-0.245325334911783, + -5.56234704267577e-05,-0.00189603391059934,0.183934360046237,-0.274075711687384, + -5.90166230652334e-05,-0.00122154133083408,0.199460410198462,-0.302826088462985, + -6.2409775703709e-05,-0.000547048751068813,0.214986460350687,-0.331576465238586, + -6.58029283415185e-05,0.000127443828697338,0.230512510502913,-0.360326842014187, + -6.9196080979772e-05,0.000801936408463044,0.246038560655138,-0.389077218789788, + -7.25892336184142e-05,0.00147642898822764,0.261564610807363,-0.417827595565389, + -7.59823862567233e-05,0.00215092156799357,0.277090660959589,-0.446577972340991, + -7.93755388952544e-05,0.00282541414775905,0.292616711111814,-0.475328349116592, + -8.27686915334525e-05,0.00349990672752409,0.308142761264039,-0.504078725892193, + -8.61618441717615e-05,0.0041743993072898,0.323668811416264,-0.532829102667794, + -8.95549968101816e-05,0.00484889188705528,0.33919486156849,-0.561579479443395, + -9.29481494481577e-05,0.00552338446682121,0.354720911720715,-0.590329856218996, + -9.63413020870219e-05,0.00619787704658581,0.37024696187294,-0.619080232994597, + -9.97344547251089e-05,0.00687236962635218,0.385773012025166,-0.647830609770198, + -0.000103127607363307,0.00754686220611767,0.401299062177391,-0.676580986545799, + -0.000106520760002393,0.00822135478588226,0.416825112329616,-0.7053313633214, + -0.000109913912640369,0.00889584736564775,0.432351162481841,-0.734081740097001, + -2.83328205074457e-05,-0.00728071021353133,0.0596970031002054,-0.0441038666928489, + -3.16930733335052e-05,-0.00660803700476242,0.0751964528709227,-0.0728724659747643, + -3.50533261596619e-05,-0.00593536379599358,0.09069590264164,-0.10164106525668, + -3.84135789857354e-05,-0.00526269058722467,0.106195352412357,-0.130409664538595, + -4.17738318117811e-05,-0.00459001737845577,0.121694802183075,-0.159178263820511, + -4.5134084637799e-05,-0.00391734416968681,0.137194251953792,-0.187946863102426, + -4.84943374638447e-05,-0.00324467096091785,0.152693701724509,-0.216715462384341, + -5.18545902896683e-05,-0.00257199775214845,0.168193151495227,-0.245484061666257, + -5.52148431159361e-05,-0.00189932454337971,0.183692601265944,-0.274252660948172, + -5.85750959419817e-05,-0.00122665133461064,0.199192051036661,-0.303021260230087, + -6.19353487680829e-05,-0.000553978125841903,0.214691500807378,-0.331789859512003, + -6.52956015942396e-05,0.000118695082927056,0.230190950578096,-0.360558458793918, + -6.86558544201188e-05,0.000791368291696015,0.245690400348813,-0.389327058075834, + -7.20161072461645e-05,0.00146404150046497,0.26118985011953,-0.418095657357749, + -7.53763600719326e-05,0.00213671470923438,0.276689299890248,-0.446864256639665, + -7.87366128985889e-05,0.00280938791800223,0.292188749660965,-0.47563285592158, + -8.2096865724246e-05,0.00348206112677185,0.307688199431682,-0.504401455203495, + -8.54571185503472e-05,0.00415473433554037,0.323187649202399,-0.533170054485411, + -8.88173713763374e-05,0.00482740754430977,0.338687098973117,-0.561938653767326, + -9.21776242027716e-05,0.00550008075307828,0.354186548743834,-0.590707253049242, + -9.55378770288728e-05,0.00617275396184747,0.369685998514552,-0.619475852331157, + -9.8898129854641e-05,0.00684542717061642,0.385185448285269,-0.648244451613072, + -0.000102258382681186,0.0075181003793845,0.400684898055985,-0.677013050894987, + -0.000105618635506954,0.0081907735881539,0.416184347826703,-0.705781650176903, + -0.000108978888332723,0.0088634467969233,0.43168379759742,-0.734550249458818, + -2.81318302663564e-05,-0.00726519504593853,0.0596569780256893,-0.0441468892027146, + -3.14468683355607e-05,-0.0065950543363637,0.0751196777924643,-0.0729406408048461, + -3.47619064047233e-05,-0.00592491362678882,0.0905823775592394,-0.101734392406978, + -3.80769444739415e-05,-0.00525477291721388,0.106045077326015,-0.130528144009109, + -4.13919825430487e-05,-0.00458463220763905,0.12150777709279,-0.159321895611241, + -4.47070206123779e-05,-0.00391449149806444,0.136970476859564,-0.188115647213372, + -4.80220586816515e-05,-0.00324435078848961,0.15243317662634,-0.216909398815504, + -5.13370967507587e-05,-0.00257421007891478,0.167895876393115,-0.245703150417635, + -5.46521348198659e-05,-0.00190406936933962,0.18335857615989,-0.274496902019767, + -5.79671728889175e-05,-0.00123392865976468,0.198821275926665,-0.303290653621898, + -6.12822109583577e-05,-0.000563787950190076,0.21428397569344,-0.33208440522403, + -6.45972490274649e-05,0.000106352759384976,0.229746675460215,-0.360878156826161, + -6.79122870966831e-05,0.000776493468959361,0.24520937522699,-0.389671908428293, + -7.12273251656237e-05,0.00144663417853463,0.260672074993765,-0.418465660030425, + -7.45423632351194e-05,0.00211677488810902,0.27613477476054,-0.447259411632556, + -7.785740130406e-05,0.00278691559768451,0.291597474527315,-0.476053163234688, + -8.11724393735558e-05,0.0034570563072589,0.30706017429409,-0.504846914836819, + -8.44874774427185e-05,0.00412719701683351,0.322522874060865,-0.533640666438951, + -8.78025155117701e-05,0.00479733772640834,0.33798557382764,-0.562434418041082, + -9.11175535808217e-05,0.00546747843598405,0.353448273594416,-0.591228169643214, + -9.44325916502065e-05,0.00613761914555866,0.368910973361191,-0.620021921245345, + -9.7747629718925e-05,0.00680775985513327,0.384373673127965,-0.648815672847477, + -0.000101062667788532,0.00747790056470787,0.39983637289474,-0.677609424449608, + -0.000104377705857583,0.00814804127428337,0.415299072661516,-0.70640317605174, + -0.000107692743927079,0.00881818198385753,0.43076177242829,-0.735196927653871, + -2.78553677655058e-05,-0.00724395350292695,0.0596019109039985,-0.0442059628311834, + -3.11086956129997e-05,-0.00657733028075719,0.0750140858755764,-0.073034250745218, + -3.43620234603825e-05,-0.00591070705858715,0.0904262608471544,-0.101862538659253, + -3.76153513079458e-05,-0.00524408383641739,0.105838435818732,-0.130690826573287, + -4.08686791554258e-05,-0.00457746061424769,0.12125061079031,-0.159519114487322, + -4.4122007002767e-05,-0.00391083739207754,0.136662785761888,-0.188347402401357, + -4.73753348502193e-05,-0.00324421416990772,0.152074960733466,-0.217175690315391, + -5.0628662697616e-05,-0.00257759094773768,0.167487135705044,-0.246003978229426, + -5.38819905452903e-05,-0.00191096772556809,0.182899310676622,-0.274832266143461, + -5.71353183927981e-05,-0.00124434450339828,0.1983114856482,-0.303660554057495, + -6.03886462401948e-05,-0.000577721281228571,0.213723660619778,-0.33248884197153, + -6.36419740874805e-05,8.8901940941799e-05,0.229135835591356,-0.361317129885565, + -6.68953019351548e-05,0.000755525163111059,0.244548010562934,-0.390145417799599, + -7.0148629782496e-05,0.00142214838528143,0.259960185534512,-0.418973705713634, + -7.34019576296152e-05,0.00208877160745158,0.27537236050609,-0.447801993627669, + -7.66552854771785e-05,0.0027553948296215,0.290784535477669,-0.476630281541703, + -7.99086133247418e-05,0.00342201805179143,0.306196710449247,-0.505458569455738, + -8.3161941171972e-05,0.00408864127396114,0.321608885420824,-0.534286857369773, + -8.64152690194242e-05,0.00475526449613128,0.337021060392403,-0.563115145283807, + -8.96685968673205e-05,0.00542188771830077,0.352433235363981,-0.591943433197842, + -9.29219247146618e-05,0.00608851094047047,0.367845410335558,-0.620771721111877, + -9.6175252562225e-05,0.00675513416264018,0.383257585307136,-0.649600009025911, + -9.94285804094552e-05,0.00742175738481032,0.398669760278714,-0.678428296939946, + -0.000102681908256685,0.00808838060698047,0.414081935250292,-0.707256584853981, + -0.000105935236104471,0.00875500382914973,0.42949411022187,-0.736084872768015, + -2.74775680015188e-05,-0.00721511144957537,0.0595266360380612,-0.044286496017058, + -3.06474705275839e-05,-0.00655335836996551,0.074869813130267,-0.0731618661790941, + -3.38173730536351e-05,-0.00589160529035571,0.0902129902224726,-0.10203723634113, + -3.69872755798528e-05,-0.00522985221074601,0.105556167314678,-0.130912606503166, + -4.0157178105904e-05,-0.00456809913113621,0.120899344406884,-0.159787976665203, + -4.3327080631872e-05,-0.0039063460515264,0.13624252149909,-0.188663346827239, + -4.64969831581175e-05,-0.00324459297191682,0.151585698591295,-0.217538716989275, + -4.96668856841409e-05,-0.00258283989230679,0.166928875683501,-0.246414087151311, + -5.28367882101088e-05,-0.00192108681269676,0.182272052775707,-0.275289457313347, + -5.60066907361878e-05,-0.00125933373308706,0.197615229867913,-0.304164827475383, + -5.91765932622113e-05,-0.000597580653477259,0.212958406960118,-0.33304019763742, + -6.23464957884012e-05,6.41724261325471e-05,0.228301584052324,-0.361915567799456, + -6.55163983140361e-05,0.000725925505743019,0.24364476114453,-0.390790937961492, + -6.86863008405592e-05,0.00138767858535238,0.258987938236736,-0.419666308123528, + -7.18562033665826e-05,0.00204943166496241,0.274331115328942,-0.448541678285564, + -7.50261058927171e-05,0.00271118474457155,0.289674292421147,-0.4774170484476, + -7.81960084190736e-05,0.00337293782418113,0.305017469513353,-0.506292418609637, + -8.1365910945097e-05,0.00403469090379072,0.320360646605558,-0.535167788771673, + -8.45358134712315e-05,0.00469644398340097,0.335703823697764,-0.564043158933709, + -8.77057159969219e-05,0.00535819706301122,0.35104700078997,-0.592918529095745, + -9.08756185235005e-05,0.00601995014262036,0.366390177882175,-0.621793899257781, + -9.40455210495239e-05,0.00668170322222972,0.381733354974381,-0.650669269419817, + -9.72154235756584e-05,0.00734345630183952,0.397076532066586,-0.679544639581854, + -0.000100385326101127,0.00800520938145066,0.412419709158793,-0.70842000974389, + -0.000103555228627927,0.00866696246106002,0.427762886250999,-0.737295379905926, + -2.69658674338924e-05,-0.00717638647988697,0.0594246413539615,-0.0443952168496572, + -3.00244447036385e-05,-0.00652134522800274,0.0746744525616861,-0.0733341486496414, + -3.30830219733569e-05,-0.00586630397611854,0.0899242637694107,-0.102273080449626, + -3.61415992432002e-05,-0.00521126272423444,0.105174074977135,-0.13121201224961, + -3.92001765129601e-05,-0.00455622147235035,0.12042388618486,-0.160150944049594, + -4.22587537827201e-05,-0.00390118022046615,0.135673697392585,-0.189089875849578, + -4.53173310523414e-05,-0.00324613896858172,0.150923508600309,-0.218028807649563, + -4.83759083223512e-05,-0.00259109771669797,0.166173319808034,-0.246967739449547, + -5.14344855919724e-05,-0.00193605646481354,0.181423131015758,-0.275906671249531, + -5.44930628618157e-05,-0.00128101521292945,0.196672942223483,-0.304845603049515, + -5.75516401315479e-05,-0.000625973961045023,0.211922753431208,-0.3337845348495, + -6.06102174010581e-05,2.90672908389578e-05,0.227172564638932,-0.362723466649484, + -6.36687946708459e-05,0.000684108542723383,0.242422375846657,-0.391662398449468, + -6.67273719408001e-05,0.00133914979460736,0.257672187054382,-0.420601330249453, + -6.97859492102548e-05,0.00199419104649201,0.272921998262107,-0.449540262049437, + -7.28445264801536e-05,0.00264923229837621,0.288171809469831,-0.478479193849421, + -7.59031037498303e-05,0.00330427355026042,0.303421620677556,-0.507418125649405, + -7.8961681019396e-05,0.00395931480214462,0.31867143188528,-0.536357057449389, + -8.20202582898499e-05,0.00461435605402771,0.333921243093004,-0.565295989249374, + -8.50788355594156e-05,0.00526939730591214,0.349171054300729,-0.594234921049358, + -8.81374128287593e-05,0.00592443855779701,0.364420865508454,-0.623173852849342, + -9.1195990098436e-05,0.00657947980968121,0.379670676716179,-0.652112784649326, + -9.42545673681128e-05,0.00723452106156586,0.394920487923903,-0.681051716449311, + -9.73131446380116e-05,0.00788956231344917,0.410170299131627,-0.709990648249295, + -0.000100371721908021,0.00854460356533293,0.425420110339352,-0.738929580049279, + -2.62811141993613e-05,-0.00712517025886258,0.0592880832589611,-0.0445400712968631, + -2.91937237537065e-05,-0.00647931637516425,0.0744131092949161,-0.0735636895889239, + -3.21063333081073e-05,-0.00583346249146593,0.0895381353308712,-0.102587307880985, + -3.50189428625636e-05,-0.00518760860776779,0.104663161366826,-0.131610926173046, + -3.79315524170754e-05,-0.00454175472406959,0.119788187402781,-0.160634544465106, + -4.08441619714206e-05,-0.00389590084037161,0.134913213438736,-0.189658162757167, + -4.37567715258491e-05,-0.00325004695667308,0.150038239474691,-0.218681781049228, + -4.66693810802221e-05,-0.00260419307297477,0.165163265510646,-0.247705399341289, + -4.95819906347617e-05,-0.0019583391892769,0.180288291546601,-0.27672901763335, + -5.24946001890791e-05,-0.00131248530557837,0.195413317582556,-0.30575263592541, + -5.54072097435632e-05,-0.000666631421880615,0.210538343618511,-0.334776254217471, + -5.83198192981027e-05,-2.07775381819708e-05,0.225663369654466,-0.363799872509532, + -6.12324288523647e-05,0.000625076345516229,0.240788395690421,-0.392823490801593, + -6.41450384065712e-05,0.00127093022921465,0.255913421726376,-0.421847109093654, + -6.70576479612217e-05,0.00191678411291285,0.271038447762331,-0.450870727385714, + -6.99702575155392e-05,0.00256263799661105,0.286163473798286,-0.479894345677775, + -7.28828670699677e-05,0.00320849188030947,0.301288499834241,-0.508917963969836, + -7.57954766245073e-05,0.00385434576400745,0.316413525870196,-0.537941582261897, + -7.87080861786027e-05,0.00450019964770609,0.331538551906151,-0.566965200553958, + -8.16206957334753e-05,0.00514605353140385,0.346663577942106,-0.595988818846019, + -8.45333052880148e-05,0.00579190741510205,0.361788603978061,-0.625012437138079, + -8.74459148416662e-05,0.00643776129880091,0.376913630014016,-0.65403605543014, + -9.03585243967608e-05,0.00708361518249845,0.392038656049971,-0.683059673722201, + -9.32711339513004e-05,0.00772946906619687,0.407163682085927,-0.712083292014262, + -9.61837435055068e-05,0.00837532294989485,0.422288708121881,-0.741106910306323, + -2.53794224035347e-05,-0.00705877183441364,0.0591081483077737,-0.0447297191618403, + -2.81050807483113e-05,-0.00642536954754025,0.074069130089697,-0.0738642115949753, + -3.0830739092963e-05,-0.00579196726066661,0.0890301118716205,-0.10299870402811, + -3.35563974377118e-05,-0.00515856497379319,0.103991093653544,-0.132133196461245, + -3.62820557824606e-05,-0.00452516268691971,0.118952075435467,-0.16126768889438, + -3.90077141270151e-05,-0.00389176040004591,0.133913057217391,-0.190402181327515, + -4.17333724717084e-05,-0.00325835811317254,0.148874038999314,-0.21953667376065, + -4.44590308165682e-05,-0.00262495582629918,0.163835020781237,-0.248671166193785, + -4.71846891612615e-05,-0.00199155353942582,0.178796002563161,-0.27780565862692, + -4.99103475058993e-05,-0.00135815125255223,0.193756984345084,-0.306940151060055, + -5.26360058507591e-05,-0.000724748965678756,0.208717966127007,-0.33607464349319, + -5.53616641952859e-05,-9.13466788048378e-05,0.223678947908931,-0.365209135926325, + -5.80873225402567e-05,0.000542055608067749,0.238639929690854,-0.39434362835946, + -6.08129808845614e-05,0.00117545789494211,0.253600911472778,-0.423478120792595, + -6.35386392294768e-05,0.00180886018181514,0.268561893254701,-0.452612613225731, + -6.62642975741701e-05,0.00244226246868862,0.283522875036624,-0.481747105658865, + -6.89899559187523e-05,0.00307566475556298,0.298483856818548,-0.510881598092001, + -7.17156142635567e-05,0.00370906704243579,0.313444838600471,-0.540016090525135, + -7.444127260825e-05,0.00434246932930971,0.328405820382395,-0.56915058295827, + -7.71669309531653e-05,0.00497587161618274,0.343366802164317,-0.598285075391405, + -7.98925892977476e-05,0.00560927390305643,0.358327783946241,-0.62741956782454, + -8.26182476426629e-05,0.00624267618992969,0.373288765728164,-0.656554060257675, + -8.53439059870231e-05,0.00687607847680338,0.388249747510087,-0.68568855269081, + -8.80695643321605e-05,0.00750948076367619,0.403210729292011,-0.714823045123946, + -9.07952226765207e-05,0.00814288305055078,0.418171711073935,-0.74395753755708, + -2.42169219448612e-05,-0.0069748910802756,0.0588759956276035,-0.0449724007196165, + -2.67104048698452e-05,-0.00635812307561145,0.0736259484247471,-0.0742487724682725, + -2.92038877948153e-05,-0.00574135507094725,0.0883759012218906,-0.103525144216928, + -3.16973707195078e-05,-0.00512458706628288,0.103125854019034,-0.132801515965584, + -3.41908536445612e-05,-0.00450781906161868,0.117875806816178,-0.16207788771424, + -3.66843365696146e-05,-0.00389105105695464,0.132625759613321,-0.191354259462896, + -3.91778194944736e-05,-0.00327428305229027,0.147375712410465,-0.220630631211552, + -4.16713024194437e-05,-0.00265751504762612,0.162125665207608,-0.249907002960208, + -4.41647853443583e-05,-0.00204074704296209,0.176875618004752,-0.279183374708864, + -4.66582682692174e-05,-0.00142397903829772,0.191625570801895,-0.30845974645752, + -4.91517511940764e-05,-0.000807211033633237,0.206375523599039,-0.337736118206176, + -5.16452341192131e-05,-0.000190443028969423,0.221125476396183,-0.367012489954832, + -5.41387170442942e-05,0.000426324975694392,0.235875429193326,-0.396288861703488, + -5.66321999692088e-05,0.00104309298035887,0.25062538199047,-0.425565233452144, + -5.91256828940123e-05,0.00165986098502291,0.265375334787613,-0.4548416052008, + -6.16191658188159e-05,0.00227662898968739,0.280125287584757,-0.484117976949456, + -6.41126487441745e-05,0.00289339699435098,0.2948752403819,-0.513394348698112, + -6.6606131668534e-05,0.00351016499901591,0.309625193179044,-0.542670720446768, + -6.90996145936706e-05,0.00412693300368039,0.324375145976188,-0.571947092195424, + -7.15930975185852e-05,0.0047437010083442,0.339125098773331,-0.60122346394408, + -7.40865804437219e-05,0.00536046901300846,0.353875051570474,-0.630499835692736, + -7.65800633678593e-05,0.00597723701767316,0.368625004367618,-0.659776207441392, + -7.90735462937731e-05,0.00659400502233654,0.383374957164761,-0.689052579190047, + -8.15670292182435e-05,0.00721077302700124,0.398124909961905,-0.718328950938704, + -8.40605121431581e-05,0.0078275410316655,0.412874862759049,-0.74760532268736, + -2.27583961417144e-05,-0.0068723398930263,0.0585844867841895,-0.045274022225637, + -2.49747339643308e-05,-0.00627734400617658,0.0730704197735651,-0.074726731448029, + -2.7191071786753e-05,-0.00568234811932666,0.0875563527629407,-0.104179440670421, + -2.94074096093e-05,-0.00508735223247692,0.102042285752316,-0.133632149892813, + -3.16237474319025e-05,-0.00449235634562717,0.116528218741692,-0.163084859115205, + -3.38400852544218e-05,-0.00389736045877742,0.131014151731067,-0.192537568337597, + -3.60564230769689e-05,-0.00330236457192745,0.145500084720443,-0.221990277559989, + -3.82727608995159e-05,-0.00270736868507782,0.159986017709819,-0.251442986782381, + -4.04890987221185e-05,-0.00211237279822818,0.174471950699194,-0.280895696004773, + -4.270543654461e-05,-0.0015173769113781,0.18895788368857,-0.310348405227165, + -4.49217743672681e-05,-0.000922381024528462,0.203443816677946,-0.339801114449557, + -4.71381121896486e-05,-0.000327385137678382,0.217929749667321,-0.369253823671949, + -4.93544500122511e-05,0.000267610749171254,0.232415682656697,-0.398706532894342, + -5.15707878347982e-05,0.000862606636021113,0.246901615646072,-0.428159242116734, + -5.37871256572897e-05,0.00145760252287097,0.261387548635448,-0.457611951339126, + -5.60034634798923e-05,0.00205259840972039,0.275873481624823,-0.487064660561518, + -5.82198013021618e-05,0.00264759429657069,0.290359414614199,-0.51651736978391, + -6.04361391250974e-05,0.0032425901834201,0.304845347603575,-0.545970079006302, + -6.26524769475889e-05,0.00383758607026974,0.31933128059295,-0.575422788228694, + -6.48688147699694e-05,0.00443258195711982,0.333817213582326,-0.604875497451086, + -6.70851525922389e-05,0.00502757784396968,0.348303146571701,-0.634328206673478, + -6.93014904147304e-05,0.00562257373081954,0.362789079561077,-0.66378091589587, + -7.15178282366669e-05,0.00621756961767028,0.377275012550453,-0.693233625118262, + -7.37341660600466e-05,0.00681256550451881,0.391760945539828,-0.722686334340654, + -7.59505038830932e-05,0.00740756139136778,0.406246878529203,-0.752139043563046, + -2.09896723926684e-05,-0.00675189391053091,0.0582306870362514,-0.0456356018562426, + -2.28911588340958e-05,-0.00618460437605056,0.0723975777075627,-0.075299701968683, + -2.47926452754677e-05,-0.00561731484157013,0.0865644683788739,-0.104963802081123, + -2.66941317169644e-05,-0.00505002530708998,0.100731359050185,-0.134627902193564, + -2.85956181584335e-05,-0.00448273577260982,0.114898249721496,-0.164292002306004, + -3.04971045997915e-05,-0.00391544623812956,0.129065140392807,-0.193956102418445, + -3.23985910411495e-05,-0.00334815670364919,0.143232031064119,-0.223620202530885, + -3.4300077482452e-05,-0.0027808671691687,0.15739892173543,-0.253284302643326, + -3.62015639240321e-05,-0.00221357763468855,0.171565812406741,-0.282948402755766, + -3.81030503653346e-05,-0.00164628810020817,0.185732703078052,-0.312612502868207, + -4.00045368067481e-05,-0.0010789985657278,0.199899593749363,-0.342276602980647, + -4.19060232480506e-05,-0.000511709031247198,0.214066484420675,-0.371940703093087, + -4.38075096894641e-05,5.55805032329548e-05,0.228233375091986,-0.401604803205528, + -4.57089961309887e-05,0.00062287003771333,0.242400265763297,-0.431268903317968, + -4.76104825724022e-05,0.00119015957219326,0.256567156434608,-0.460933003430409, + -4.95119690139267e-05,0.00175744910667364,0.270734047105919,-0.490597103542849, + -5.14134554552292e-05,0.00232473864115401,0.28490093777723,-0.52026120365529, + -5.33149418967538e-05,0.00289202817563394,0.299067828448541,-0.54992530376773, + -5.52164283381673e-05,0.00345931771011387,0.313234719119852,-0.57958940388017, + -5.71179147794698e-05,0.00402660724459469,0.327401609791164,-0.609253503992611, + -5.90194012208833e-05,0.00459389677907529,0.341568500462475,-0.638917604105051, + -6.09208876626299e-05,0.005161186313555,0.355735391133786,-0.668581704217492, + -6.28223741040435e-05,0.00572847584803515,0.369902281805097,-0.698245804329932, + -6.472386054579e-05,0.00629576538251531,0.384069172476408,-0.727909904442373, + -6.66253469867595e-05,0.00686305491699635,0.39823606314772,-0.757574004554813, + -1.89311786960439e-05,-0.00661695961314956,0.0578186243856483,-0.0460507569456302, + -2.04957256269706e-05,-0.00608364584900739,0.0716157856959496,-0.0759575698560974, + -2.20602725578278e-05,-0.00555033208486505,0.085412947006251,-0.105864382766565, + -2.36248194886157e-05,-0.00501701832072277,0.0992101083165523,-0.135771195677032, + -2.51893664195424e-05,-0.00448370455658043,0.113007269626854,-0.165678008587499, + -2.67539133505523e-05,-0.00395039079243842,0.126804430937155,-0.195584821497966, + -2.83184602813402e-05,-0.00341707702829597,0.140601592247456,-0.225491634408434, + -2.98830072125167e-05,-0.00288376326415407,0.154398753557758,-0.255398447318901, + -3.14475541430825e-05,-0.0023504495000114,0.168195914868059,-0.285305260229368, + -3.3012101074148e-05,-0.00181713573586939,0.18199307617836,-0.315212073139835, + -3.45766480051024e-05,-0.00128382197172727,0.195790237488662,-0.345118886050302, + -3.61411949358348e-05,-0.00075050820758471,0.209587398798963,-0.37502569896077, + -3.77057418669002e-05,-0.000217194443442814,0.223384560109264,-0.404932511871237, + -3.92702887974661e-05,0.000316119320699748,0.237181721419566,-0.434839324781704, + -4.0834835728476e-05,0.000849433084842088,0.250978882729867,-0.464746137692171, + -4.23993826591529e-05,0.00138274684898443,0.264776044040169,-0.494652950602639, + -4.39639295901628e-05,0.00191606061312677,0.27857320535047,-0.524559763513106, + -4.55284765215058e-05,0.00244937437726822,0.292370366660771,-0.554466576423573, + -4.70930234520717e-05,0.00298268814141078,0.306167527971072,-0.58437338933404, + -4.86575703828596e-05,0.00351600190555335,0.319964689281374,-0.614280202244507, + -5.02221173135364e-05,0.00404931566969591,0.333761850591676,-0.644187015154975, + -5.17866642448794e-05,0.00458262943383758,0.347559011901977,-0.674093828065442, + -5.33512111760004e-05,0.00511594319797926,0.361356173212278,-0.704000640975909, + -5.49157581065662e-05,0.00564925696212271,0.37515333452258,-0.733907453886376, + -5.648030503691e-05,0.00618257072626482,0.388950495832881,-0.763814266796844, + -1.66470254656104e-05,-0.00647361313829381,0.0573611600706776,-0.04650446136626, + -1.78751135015004e-05,-0.00598008142069067,0.0707500867390631,-0.076676524233245, + -1.91032015374459e-05,-0.00548654970308754,0.0841390134074487,-0.10684858710023, + -2.03312895733776e-05,-0.00499301798548435,0.0975279400758344,-0.137020649967215, + -2.15593776093093e-05,-0.00449948626788133,0.11091686674422,-0.1671927128342, + -2.27874656453242e-05,-0.0040059545502783,0.124305793412605,-0.197364775701185, + -2.40155536812003e-05,-0.00351242283267506,0.137694720080991,-0.22753683856817, + -2.524364171691e-05,-0.0030188911150717,0.151083646749377,-0.257708901435155, + -2.64717297531192e-05,-0.0025253593974689,0.164472573417762,-0.28788096430214, + -2.76998177888288e-05,-0.00203182767986543,0.177861500086148,-0.318053027169125, + -2.8927905825149e-05,-0.00153829596226274,0.191250426754533,-0.34822509003611, + -3.01559938605811e-05,-0.00104476424465938,0.204639353422919,-0.378397152903095, + -3.13840818968458e-05,-0.000551232527056245,0.218028280091305,-0.40856921577008, + -3.26121699325554e-05,-5.77008094531095e-05,0.23141720675969,-0.438741278637065, + -3.38402579687092e-05,0.000435830908150026,0.244806133428076,-0.46891334150405, + -3.50683460041967e-05,0.000929362625753605,0.258195060096461,-0.499085404371035, + -3.62964340406835e-05,0.00142289434335607,0.271583986764847,-0.52925746723802, + -3.75245220763931e-05,0.00191642606095943,0.284972913433232,-0.559429530105005, + -3.87526101122138e-05,0.00240995777856257,0.298361840101618,-0.58960159297199, + -3.99806981481454e-05,0.0029034894961657,0.311750766770003,-0.619773655838975, + -4.12087861839661e-05,0.00339702121376906,0.325139693438389,-0.64994571870596, + -4.24368742201198e-05,0.00389055293137197,0.338528620106775,-0.680117781572945, + -4.36649622556073e-05,0.00438408464897577,0.351917546775161,-0.710289844439929, + -4.48930502920941e-05,0.0048776163665778,0.365306473443546,-0.740461907306915, + -4.61211383281368e-05,0.00537114808418071,0.378695400111931,-0.7706339701739, + -1.42427884829849e-05,-0.00632971345519029,0.0568795639046676,-0.0469743050743908, + -1.51596241397545e-05,-0.00588030446785154,0.0698411395937946,-0.0774210534359073, + -1.60764597967322e-05,-0.00543089548051295,0.0828027152829215,-0.107867801797424, + -1.69932954535712e-05,-0.00498148649317443,0.0957642909720484,-0.13831455015894, + -1.79101311104657e-05,-0.00453207750583573,0.108725866661175,-0.168761298520457, + -1.88269667673047e-05,-0.00408266851849703,0.121687442350302,-0.199208046881973, + -1.97438024240881e-05,-0.00363325953115845,0.134649018039429,-0.22965479524349, + -2.06606380810381e-05,-0.00318385054381976,0.147610593728556,-0.260101543605006, + -2.15774737381547e-05,-0.00273444155648161,0.160572169417683,-0.290548291966523, + -2.24943093948271e-05,-0.00228503256914259,0.17353374510681,-0.320995040328039, + -2.34111450516661e-05,-0.00183562358180422,0.186495320795937,-0.351441788689556, + -2.43279807084495e-05,-0.00138621459446542,0.199456896485064,-0.381888537051072, + -2.52448163652885e-05,-0.000936805607126612,0.212418472174191,-0.412335285412589, + -2.6161652022072e-05,-0.00048739661978825,0.225380047863317,-0.442782033774105, + -2.7078487678911e-05,-3.79876324492212e-05,0.238341623552444,-0.473228782135622, + -2.7995323335972e-05,0.000411421354889141,0.251303199241571,-0.503675530497138, + -2.89121589926999e-05,0.000860830342227725,0.264264774930698,-0.534122278858655, + -2.9828994649872e-05,0.00131023932956631,0.277226350619825,-0.564569027220171, + -3.0745830306822e-05,0.00175964831690489,0.290187926308952,-0.595015775581688, + -3.1662665963772e-05,0.00220905730424326,0.303149501998079,-0.625462523943204, + -3.25795016201669e-05,0.00265846629158251,0.316111077687206,-0.655909272304721, + -3.34963372773389e-05,0.00310787527892042,0.329072653376333,-0.686356020666237, + -3.44131729342889e-05,0.00355728426625879,0.342034229065459,-0.716802769027754, + -3.53300085910169e-05,0.00400669325359759,0.354995804754586,-0.74724951738927, + -3.62468442477448e-05,0.0044561022409364,0.367957380443713,-0.777696265750787, + -1.18487128997202e-05,-0.00619326655079422,0.0564001055218364,-0.04743450078835, + -1.2499750499384e-05,-0.00578996693775052,0.0689385738635717,-0.0781502941218063, + -1.31507880989923e-05,-0.00538666732470688,0.0814770422053068,-0.108866087455263, + -1.38018256987948e-05,-0.00498336771166341,0.094015510547042,-0.139581880788719, + -1.44528632982921e-05,-0.00458006809861966,0.106553978888777,-0.170297674122175, + -1.51039008980391e-05,-0.00417676848557602,0.119092447230512,-0.201013467455632, + -1.5754938497814e-05,-0.0037734688725326,0.131630915572247,-0.231729260789088, + -1.64059760973112e-05,-0.00337016925948874,0.144169383913983,-0.262445054122544, + -1.70570136970305e-05,-0.00296686964644532,0.156707852255718,-0.293160847456001, + -1.77080512969163e-05,-0.00256357003340191,0.169246320597453,-0.323876640789457, + -1.83590888963026e-05,-0.00216027042035782,0.181784788939188,-0.354592434122913, + -1.90101264960774e-05,-0.00175697080731441,0.194323257280923,-0.38530822745637, + -1.96611640961297e-05,-0.00135367119427099,0.206861725622659,-0.416024020789826, + -2.0312201695627e-05,-0.000950371581227349,0.219400193964394,-0.446739814123282, + -2.09632392947912e-05,-0.000547071968183044,0.231938662306129,-0.477455607456739, + -2.16142768949545e-05,-0.00014377235514007,0.244477130647864,-0.508171400790195, + -2.22653144947849e-05,0.000259527257903347,0.257015598989599,-0.538887194123651, + -2.2916352093949e-05,0.000662826870947431,0.269554067331335,-0.569602987457108, + -2.35673896938904e-05,0.00106612648399063,0.282092535673069,-0.600318780790564, + -2.42184272931656e-05,0.00146942609703471,0.294631004014805,-0.63103457412402, + -2.4869464893329e-05,0.0018727257100779,0.30716947235654,-0.661750367457477, + -2.55205024934924e-05,0.0022760253231211,0.319707940698275,-0.692466160790933, + -2.61715400923235e-05,0.00267932493616518,0.33224640904001,-0.72318195412439, + -2.68225776921538e-05,0.00308262454920882,0.344784877381745,-0.753897747457846, + -2.74736152920951e-05,0.00348592416225246,0.357323345723481,-0.784613540791302, + -9.59285573970403e-06,-0.00607071185607524,0.0559485849309637,-0.0478613003010824, + -1.00341497088624e-05,-0.00571274019390927,0.0680906422344277,-0.0788266141308056, + -1.04754436778542e-05,-0.00535476853174316,0.0802326995378917,-0.109791927960529, + -1.09167376469987e-05,-0.0049967968695771,0.0923747568413559,-0.140757241790252, + -1.13580316161432e-05,-0.0046388252074111,0.10451681414482,-0.171722555619976, + -1.1799325585371e-05,-0.00428085354524532,0.116658871448284,-0.202687869449699, + -1.2240619554349e-05,-0.00392288188307921,0.128800928751748,-0.233653183279422, + -1.26819135233824e-05,-0.0035649102209131,0.140942986055212,-0.264618497109145, + -1.31232074925824e-05,-0.0032069385587471,0.153085043358676,-0.295583810938869, + -1.35645014618935e-05,-0.00284896689658143,0.16522710066214,-0.326549124768592, + -1.40057954307604e-05,-0.00249099523441521,0.177369157965604,-0.357514438598315, + -1.44470893999604e-05,-0.0021330235722492,0.189511215269068,-0.388479752428039, + -1.48883833688829e-05,-0.00177505191008298,0.201653272572532,-0.419445066257762, + -1.53296773383049e-05,-0.00141708024791742,0.213795329875996,-0.450410380087485, + -1.57709713073384e-05,-0.0010591085857512,0.22593738717946,-0.481375693917208, + -1.62122652762609e-05,-0.000701136923585199,0.238079444482924,-0.512341007746932, + -1.66535592456274e-05,-0.00034316526141942,0.250221501786388,-0.543306321576655, + -1.70948532147719e-05,1.48064007463589e-05,0.262363559089852,-0.574271635406378, + -1.75361471838054e-05,0.000372778062912582,0.274505616393316,-0.605236949236102, + -1.79774411530609e-05,0.000730749725078361,0.28664767369678,-0.636202263065825, + -1.84187351220944e-05,0.00108872138724481,0.298789731000244,-0.667167576895548, + -1.88600290911278e-05,0.00144669304941081,0.310931788303708,-0.698132890725272, + -1.93013230600503e-05,0.00180466471157681,0.323073845607172,-0.729098204554995, + -1.97426170291948e-05,0.00216263637374237,0.335215902910635,-0.760063518384718, + -2.01839109986723e-05,0.00252060803590837,0.3473579602141,-0.791028832214441, + -7.57517455252099e-06,-0.00596586621096029,0.0555450709451129,-0.0482375490255339, + -7.86266118284196e-06,-0.0056499052921945,0.0673344695282808,-0.0794228297616014, + -8.15014781332946e-06,-0.00533394437342888,0.0791238681114488,-0.110608110497669, + -8.43763444380308e-06,-0.00501798345466331,0.0909132666946166,-0.141793391233736, + -8.72512107416568e-06,-0.00470202253589747,0.102702665277785,-0.172978671969804, + -9.01260770475032e-06,-0.00438606161713206,0.114492063860952,-0.204163952705871, + -9.30009433519619e-06,-0.00407010069836633,0.12628146244412,-0.235349233441939, + -9.58758096547552e-06,-0.00375413977960026,0.138070861027289,-0.266534514178006, + -9.87506759586587e-06,-0.00343817886083453,0.149860259610457,-0.297719794914074, + -1.01625542266448e-05,-0.00312221794206935,0.161649658193624,-0.328905075650142, + -1.04500408568131e-05,-0.00280625702330339,0.173439056776792,-0.360090356386209, + -1.07375274873145e-05,-0.0024902961045381,0.18522845535996,-0.391275637122276, + -1.10250141178159e-05,-0.00217433518577237,0.197017853943128,-0.422460917858344, + -1.13125007482617e-05,-0.00185837426700641,0.208807252526296,-0.453646198594411, + -1.15999873788741e-05,-0.00154241334824112,0.220596651109464,-0.484831479330479, + -1.18874740092645e-05,-0.00122645242947539,0.232386049692632,-0.516016760066546, + -1.21749606394328e-05,-0.000910491510709432,0.2441754482758,-0.547202040802614, + -1.24624472701562e-05,-0.00059453059194392,0.255964846858968,-0.578387321538681, + -1.27499339002135e-05,-0.000278569673178186,0.267754245442135,-0.609572602274749, + -1.30374205303818e-05,3.73912455882142e-05,0.279543644025304,-0.640757883010816, + -1.33249071612163e-05,0.000353352164352838,0.291333042608471,-0.671943163746884, + -1.36123937919397e-05,0.00066931308311835,0.303122441191639,-0.703128444482952, + -1.3899880421997e-05,0.000985274001884751,0.314911839774807,-0.734313725219019, + -1.41873670521653e-05,0.00130123492065071,0.326701238357975,-0.765499005955087, + -1.44748536839989e-05,0.00161719583941489,0.338490636941143,-0.796684286691154, + -5.85291751924177e-06,-0.00587982223885913,0.055200969110531,-0.0485546865512454, + -6.03458705161763e-06,-0.00560076788768915,0.0666907856685643,-0.079925375916985, + -6.21625658403513e-06,-0.00532171353651917,0.0781806022265976,-0.111296065282725, + -6.39792611628609e-06,-0.00504265918534896,0.0896704187846309,-0.142666754648464, + -6.57959564870358e-06,-0.00476360483417904,0.101160235342664,-0.174037444014204, + -6.76126518128761e-06,-0.00448455048300944,0.112650051900697,-0.205408133379943, + -6.94293471348306e-06,-0.00420549613183918,0.124139868458731,-0.236778822745683, + -7.12460424601158e-06,-0.00392644178066914,0.135629685016764,-0.268149512111422, + -7.30627377809601e-06,-0.00364738742949899,0.147119501574797,-0.299520201477162, + -7.48794331079106e-06,-0.0033683330783294,0.15860931813283,-0.330890890842902, + -7.66961284337508e-06,-0.00308927872715947,0.170099134690864,-0.362261580208641, + -7.851282375404e-06,-0.00281022437598932,0.181588951248897,-0.393632269574381, + -8.03295190798803e-06,-0.0025311700248194,0.19307876780693,-0.42500295894012, + -8.2146214402945e-06,-0.00225211567364947,0.204568584364963,-0.45637364830586, + -8.39629097293404e-06,-0.00197306132247976,0.216058400922997,-0.487744337671599, + -8.57796050512949e-06,-0.00169400697130939,0.22754821748103,-0.519115027037339, + -8.75963003721392e-06,-0.00141495262013946,0.239038034039063,-0.550485716403079, + -8.94129957018652e-06,-0.00113589826896954,0.250527850597097,-0.581856405768818, + -9.12296910238197e-06,-0.00085684391779961,0.26201766715513,-0.613227095134558, + -9.30463863491049e-06,-0.000577789566630127,0.273507483713163,-0.644597784500297, + -9.48630816699492e-06,-0.000298735215459089,0.284997300271197,-0.675968473866037, + -9.66797769930139e-06,-1.96808642889401e-05,0.29648711682923,-0.707339163231776, + -9.84964723171888e-06,0.000259373486879877,0.307976933387262,-0.738709852597516, + -1.00313167636923e-05,0.000538427838051359,0.319466749945297,-0.770080541963256, + -1.02129862968869e-05,0.000817482189219731,0.330956566503329,-0.801451231328995, + -4.44050545927999e-06,-0.00581156574737568,0.0549190472023984,-0.0488120486915552, + -4.55304085171526e-06,-0.00556346920329315,0.066164182659506,-0.0803332001057616, + -4.66557624420605e-06,-0.00531537265921084,0.0774093181166134,-0.111854351519968, + -4.7781116366552e-06,-0.00506727611512836,0.0886544535737209,-0.143375502934175, + -4.89064702915987e-06,-0.00481917957104605,0.0998995890308284,-0.174896654348381, + -5.00318242158126e-06,-0.00457108302696352,0.111144724487936,-0.206417805762588, + -5.11571781386388e-06,-0.00432298648288099,0.122389859945043,-0.237938957176794, + -5.22825320653508e-06,-0.00407488993879868,0.133634995402151,-0.269460108591001, + -5.34078859898424e-06,-0.00382679339471614,0.144880130859259,-0.300981260005207, + -5.45332399143339e-06,-0.00357869685063372,0.156125266316366,-0.332502411419414, + -5.56585938371601e-06,-0.00333060030655119,0.167370401773474,-0.36402356283362, + -5.67839477599863e-06,-0.00308250376246821,0.178615537230581,-0.395544714247827, + -5.79093016844778e-06,-0.00283440721838635,0.189860672687688,-0.427065865662033, + -5.90346556095245e-06,-0.00258631067430382,0.201105808144796,-0.45858701707624, + -6.01600095384569e-06,-0.00233821413022173,0.212350943601904,-0.490108168490446, + -6.12853634596178e-06,-0.00209011758613853,0.223596079059011,-0.521629319904652, + -6.24107173863298e-06,-0.00184202104205666,0.234841214516119,-0.553150471318859, + -6.35360713086008e-06,-0.00159392449797413,0.246086349973226,-0.584671622733065, + -6.46614252330924e-06,-0.00134582795389182,0.257331485430333,-0.616192774147272, + -6.57867791564737e-06,-0.00109773140980884,0.268576620887441,-0.647713925561478, + -6.69121330909572e-06,-0.000849634865727644,0.279821756344548,-0.679235076975685, + -6.80374870098976e-06,-0.000601538321644668,0.291066891801656,-0.710756228389892, + -6.91628409321687e-06,-0.000353441777561692,0.302312027258764,-0.742277379804098, + -7.02881948633216e-06,-0.000105345233480492,0.313557162715871,-0.773798531218305, + -7.14135487844825e-06,0.000142751310602485,0.324802298172979,-0.805319682632511, + -3.31973059683466e-06,-0.00575884980193198,0.0546955368165693,-0.0490145482464725, + -3.38879714462115e-06,-0.0055357471369798,0.0657471645046427,-0.0806540873062349, + -3.45786369237988e-06,-0.00531264447202762,0.0767987921927161,-0.112293626365997, + -3.52693024002759e-06,-0.00508954180707522,0.0878504198807896,-0.14393316542576, + -3.59599678795286e-06,-0.00486643914212315,0.0989020475688629,-0.175572704485522, + -3.66506333560057e-06,-0.00464333647717075,0.109953675256936,-0.207212243545285, + -3.73412988341482e-06,-0.00442023381221845,0.12100530294501,-0.238851782605047, + -3.80319643111804e-06,-0.00419713114726605,0.132056930633084,-0.270491321664809, + -3.87226297915433e-06,-0.00397402848231443,0.143108558321157,-0.302130860724572, + -3.94132952680204e-06,-0.00375092581736203,0.15416018600923,-0.333770399784334, + -4.01039607411668e-06,-0.00352782315240896,0.165211813697304,-0.365409938844097, + -4.07946262231951e-06,-0.00330472048745745,0.176263441385377,-0.397049477903859, + -4.14852917002273e-06,-0.00308161782250505,0.187315069073451,-0.428689016963622, + -4.2175957174484e-06,-0.00285851515755242,0.198366696761524,-0.460328556023384, + -4.28666226548469e-06,-0.00263541249260091,0.209418324449597,-0.491968095083147, + -4.35572881329893e-06,-0.00241230982764851,0.220469952137671,-0.523607634142909, + -4.42479536066909e-06,-0.00218920716269611,0.231521579825744,-0.555247173202671, + -4.4938619088164e-06,-0.00196610449774393,0.242573207513818,-0.586886712262434, + -4.56292845663064e-06,-0.00174300183279197,0.253624835201891,-0.618526251322196, + -4.63199500422284e-06,-0.00151989916783934,0.264676462889964,-0.650165790381959, + -4.70106155192607e-06,-0.00129679650288761,0.275728090578037,-0.681805329441721, + -4.77012809951827e-06,-0.00107369383793454,0.286779718266111,-0.713444868501484, + -4.83919464788762e-06,-0.00085059117298325,0.297831345954185,-0.745084407561246, + -4.90826119481369e-06,-0.000627488508029739,0.308882973642258,-0.776723946621009, + -4.97732774284998e-06,-0.000404385843077559,0.319934601330332,-0.808363485680771, + -2.45340071673705e-06,-0.00571896343692924,0.0545229018106951,-0.0491700415113413, + -2.49581029534984e-06,-0.00551543306426827,0.0654253513504637,-0.0809004868525282, + -2.53821987394875e-06,-0.0053119026916072,0.0763278008902324,-0.112630932193715, + -2.58062945240889e-06,-0.0051083723189459,0.0872302504300012,-0.144361377534902, + -2.62303903095229e-06,-0.00490484194628504,0.0981326999697696,-0.176091822876089, + -2.66544860949569e-06,-0.00470131157362386,0.109035149509538,-0.207822268217276, + -2.7078581883444e-06,-0.00449778120096311,0.119937599049307,-0.239552713558462, + -2.75026776674903e-06,-0.00429425082830182,0.130840048589076,-0.271283158899649, + -2.79267734526467e-06,-0.00409072045564074,0.141742498128844,-0.303013604240836, + -2.83508692394685e-06,-0.00388719008298,0.152644947668613,-0.334744049582023, + -2.87749650229596e-06,-0.00368365971031848,0.163547397208382,-0.36647449492321, + -2.91990608081161e-06,-0.00348012933765762,0.17444984674815,-0.398204940264397, + -2.96231565988236e-06,-0.00327659896499699,0.185352296287919,-0.429935385605584, + -3.00472523795392e-06,-0.00307306859233525,0.196254745827688,-0.46166583094677, + -3.04713481646957e-06,-0.00286953821967395,0.207157195367456,-0.493396276287957, + -3.08954439487419e-06,-0.00266600784701287,0.218059644907225,-0.525126721629144, + -3.13195397350086e-06,-0.00246247747435202,0.228962094446993,-0.556857166970331, + -3.17436355234957e-06,-0.00225894710169117,0.239864543986762,-0.588587612311518, + -3.21677313119828e-06,-0.00205541672903053,0.25076699352653,-0.620318057652705, + -3.25918270949188e-06,-0.00185188635636901,0.261669443066299,-0.652048502993891, + -3.30159228800753e-06,-0.00164835598370772,0.272571892606068,-0.683778948335078, + -3.34400186652317e-06,-0.00144482561104686,0.283474342145836,-0.715509393676265, + -3.38641144503882e-06,-0.00124129523838645,0.294376791685604,-0.747239839017452, + -3.42882102366548e-06,-0.00103776486572427,0.305279241225374,-0.778970284358639, + -3.47123060229215e-06,-0.000834234493063413,0.316181690765143,-0.810700729699826, + -1.79723251893249e-06,-0.00568924620187969,0.0543922282550564,-0.0492872186713995, + -1.82349798166781e-06,-0.00550068362258754,0.065181921298203,-0.0810861694870695, + -1.84976344422272e-06,-0.00531212104329515,0.0759716143413497,-0.112885120302739, + -1.87602890705518e-06,-0.00512355846400303,0.0867613073844965,-0.144684071118409, + -1.90229436969336e-06,-0.0049349958847108,0.0975510004276431,-0.176483021934079, + -1.92855983244256e-06,-0.00474643330541868,0.10834069347079,-0.208281972749749, + -1.95482529502522e-06,-0.00455787072612646,0.119130386513936,-0.240080923565419, + -1.98109075788544e-06,-0.00436930814683434,0.129920079557083,-0.271879874381089, + -2.00735622030157e-06,-0.00418074556754178,0.14070977260023,-0.303678825196759, + -2.03362168277321e-06,-0.00399218298824922,0.151499465643377,-0.335477776012429, + -2.05988714607752e-06,-0.00380362040895799,0.162289158686523,-0.367276726828099, + -2.08615260838263e-06,-0.00361505782966542,0.17307885172967,-0.399075677643769, + -2.11241807129836e-06,-0.00342649525037308,0.183868544772817,-0.430874628459438, + -2.13868353382551e-06,-0.00323793267108075,0.194658237815963,-0.462673579275108, + -2.16494899696329e-06,-0.00304937009178952,0.205447930859109,-0.494472530090778, + -2.19121445943493e-06,-0.00286080751249673,0.216237623902256,-0.526271480906448, + -2.21747992190657e-06,-0.00267224493320417,0.227027316945403,-0.558070431722118, + -2.2437453848223e-06,-0.0024836823539125,0.237817009988549,-0.589869382537788, + -2.27001084740497e-06,-0.00229511977461994,0.248606703031696,-0.621668333353458, + -2.29627631009865e-06,-0.0021065571953276,0.259396396074843,-0.653467284169128, + -2.32254177268132e-06,-0.00191799461603548,0.27018608911799,-0.685266234984798, + -2.34880723537501e-06,-0.00172943203674336,0.280975782161136,-0.717065185800468, + -2.37507269829074e-06,-0.00154086945745124,0.291765475204283,-0.748864136616137, + -2.40133816065136e-06,-0.00135230687815868,0.30255516824743,-0.780663087431807, + -2.42760362356709e-06,-0.00116374429886656,0.313344861290576,-0.812462038247477, + -1.30786010667239e-06,-0.00566735681711797,0.0542948197846209,-0.0493742777079591, + -1.32436299335459e-06,-0.00549003648582658,0.0650005499420833,-0.0812241259903759, + -1.34086588032822e-06,-0.00531271615453555,0.0757062800995456,-0.113073974272793, + -1.35736876705206e-06,-0.00513539582324418,0.086412010257008,-0.144923822555209, + -1.37387165394243e-06,-0.00495807549195304,0.0971177404144702,-0.176773670837626, + -1.39037454066626e-06,-0.00478075516066157,0.107823470571933,-0.208623519120043, + -1.40687742744561e-06,-0.00460343482937042,0.118529200729395,-0.24047336740246, + -1.42338031439149e-06,-0.00442611449807928,0.129234930886857,-0.272323215684876, + -1.43988320094879e-06,-0.00424879416678792,0.13994066104432,-0.304173063967293, + -1.45638608800569e-06,-0.00407147383549677,0.150646391201782,-0.33602291224971, + -1.47288897484055e-06,-0.00389415350420563,0.161352121359244,-0.367872760532127, + -1.48939186145336e-06,-0.00371683317291427,0.172057851516707,-0.399722608814543, + -1.50589474806617e-06,-0.00353951284162246,0.182763581674169,-0.43157245709696, + -1.52239763517859e-06,-0.00336219251033198,0.193469311831631,-0.463422305379377, + -1.53890052201344e-06,-0.00318487217904084,0.204175041989093,-0.495272153661794, + -1.5554034088483e-06,-0.00300755184774948,0.214880772146556,-0.52712200194421, + -1.57190629568316e-06,-0.00283023151645811,0.225586502304018,-0.558971850226627, + -1.58840918262904e-06,-0.00265291118516719,0.23629223246148,-0.590821698509044, + -1.60491206857571e-06,-0.00247559085387472,0.246997962618943,-0.622671546791461, + -1.62141495629875e-06,-0.00229827052258491,0.257703692776405,-0.654521395073878, + -1.63791784313361e-06,-0.00212095019129332,0.268409422933868,-0.686371243356294, + -1.65442072952438e-06,-0.00194362986000129,0.279115153091331,-0.718221091638711, + -1.67092361624821e-06,-0.00176630952871015,0.289820883248793,-0.750070939921128, + -1.68742650341613e-06,-0.00158898919741945,0.300526613406255,-0.781920788203545, + -1.70392938947383e-06,-0.00141166886612698,0.311232343563717,-0.813770636485961, + -9.47073127297027e-07,-0.00565136763978538,0.0542230332692654,-0.0494382805648794, + -9.57627861980503e-07,-0.00548237840085608,0.0648669343832368,-0.0813255469420803, + -9.68182596622347e-07,-0.00531338916192675,0.0755108354972083,-0.113212813319281, + -9.78737331208679e-07,-0.0051443999229972,0.0861547366111798,-0.145100079696482, + -9.89292066044811e-07,-0.00497541068406815,0.0967986377251512,-0.176987346073683, + -9.9984680046461e-07,-0.00480642144513843,0.107442538839123,-0.208874612450884, + -1.01040153527299e-06,-0.00463743220620916,0.118086439953094,-0.240761878828085, + -1.02095626985932e-06,-0.00446844296728,0.128730341067066,-0.272649145205286, + -1.03151100444565e-06,-0.0042994537283505,0.139374242181037,-0.304536411582487, + -1.04206573919852e-06,-0.00413046448942134,0.150018143295009,-0.336423677959688, + -1.05262047372934e-06,-0.00396147525049195,0.16066204440898,-0.368310944336889, + -1.06317520870425e-06,-0.00379248601156279,0.171305945522952,-0.40019821071409, + -1.07372994306854e-06,-0.00362349677263296,0.181949846636923,-0.432085477091291, + -1.08428467815447e-06,-0.00345450753370447,0.192593747750894,-0.463972743468491, + -1.09483941246324e-06,-0.00328551829477419,0.203237648864866,-0.495860009845692, + -1.10539414710509e-06,-0.00311652905584503,0.213881549978837,-0.527747276222893, + -1.11594888219102e-06,-0.00294753981691631,0.224525451092809,-0.559634542600094, + -1.12650361661082e-06,-0.0027785505779867,0.23516935220678,-0.591521808977295, + -1.13705835136368e-06,-0.00260956133905776,0.245813253320751,-0.623409075354496, + -1.14761308589451e-06,-0.00244057210012771,0.256457154434723,-0.655296341731697, + -1.15816781998124e-06,-0.00227158286119788,0.267101055548695,-0.687183608108898, + -1.16872255540024e-06,-0.00210259362226939,0.277744956662666,-0.719070874486099, + -1.17927728982004e-06,-0.00193360438333956,0.288388857776638,-0.7509581408633, + -1.18983202446188e-06,-0.00176461514441062,0.299032758890609,-0.782845407240501, + -1.20038675943679e-06,-0.00159562590548079,0.309676660004581,-0.814732673617702, + -6.83342537374787e-07,-0.00563975911363324,0.0541705732794429,-0.0494849689807362, + -6.90221258703438e-07,-0.00547688257234463,0.0647693169974282,-0.0813995308827608, + -6.97099980240257e-07,-0.0053140060310562,0.0753680607154135,-0.113314092784785, + -7.03978701527275e-07,-0.00515112948976748,0.0859668044333988,-0.14522865468681, + -7.10857422925315e-07,-0.00498825294847893,0.0965655481513841,-0.177143216588835, + -7.17736144240089e-07,-0.00482537640719016,0.107164291869369,-0.209057778490859, + -7.24614865721396e-07,-0.00466249986590173,0.117763035587355,-0.240972340392884, + -7.31493587258214e-07,-0.00449962332461329,0.12836177930534,-0.272886902294908, + -7.38372308461965e-07,-0.00433674678332441,0.138960523023326,-0.304801464196933, + -7.45251029887761e-07,-0.00417387024203575,0.149559266741311,-0.336716026098957, + -7.52129751424579e-07,-0.00401099370074776,0.160158010459296,-0.368630588000982, + -7.59008472850375e-07,-0.00384811715945865,0.170756754177282,-0.400545149903006, + -7.65887194442705e-07,-0.00368524061817066,0.181355497895267,-0.432459711805031, + -7.72765915590945e-07,-0.00352236407688133,0.191954241613252,-0.464374273707056, + -7.79644637072252e-07,-0.00335948753559312,0.202552985331237,-0.49628883560908, + -7.86523358553559e-07,-0.00319661099430468,0.213151729049223,-0.528203397511105, + -7.93402079701799e-07,-0.0030337344530158,0.223750472767208,-0.560117959413129, + -8.00280800850039e-07,-0.00287085791172692,0.234349216485193,-0.592032521315154, + -8.07159522664413e-07,-0.00270798137043915,0.244947960203178,-0.623947083217179, + -8.14038243812654e-07,-0.00254510482915027,0.255546703921164,-0.655861645119203, + -8.20916965182938e-07,-0.00238222828786183,0.266145447639149,-0.687776207021227, + -8.27795686775268e-07,-0.00221935174657339,0.276744191357134,-0.719690768923252, + -8.3467440803453e-07,-0.00205647520528451,0.28734293507512,-0.751605330825277, + -8.41553129293793e-07,-0.00189359866399519,0.297941678793106,-0.783519892727301, + -8.48431850664078e-07,-0.00173072212270675,0.308540422511091,-0.815434454629326, + -3.3514362659734e-05,-0.0075725860829095,0.0705082317074798,-0.0559502033100555, + -3.70593347697179e-05,-0.00689924795748276,0.0859184038549559,-0.0839782955458044, + -4.06043068797157e-05,-0.00622590983205606,0.101328576002432,-0.112006387781553, + -4.41492789896025e-05,-0.00555257170662915,0.116738748149908,-0.140034480017302, + -4.76942510996559e-05,-0.00487923358120257,0.132148920297384,-0.168062572253051, + -5.12392232097092e-05,-0.00420589545577577,0.147559092444861,-0.1960906644888, + -5.47841953195682e-05,-0.00353255733034896,0.162969264592337,-0.224118756724549, + -5.83291674295383e-05,-0.00285921920492205,0.178379436739813,-0.252146848960298, + -6.18741395396749e-05,-0.00218588107949558,0.193789608887289,-0.280174941196047, + -6.5419111649756e-05,-0.00151254295406877,0.209199781034765,-0.308203033431796, + -6.89640837596706e-05,-0.000839204828642082,0.224609953182241,-0.336231125667544, + -7.25090558696961e-05,-0.000165866703215611,0.240020125329717,-0.364259217903294, + -7.60540279799993e-05,0.000507471422210637,0.255430297477193,-0.392287310139042, + -7.95990000896918e-05,0.00118080954763777,0.270840469624669,-0.420315402374791, + -8.31439721994398e-05,0.00185414767306469,0.286250641772146,-0.44834349461054, + -8.66889443094099e-05,0.00252748579849182,0.301660813919622,-0.476371586846289, + -9.0233916419713e-05,0.00320082392391807,0.317070986067098,-0.504399679082038, + -9.37788885297941e-05,0.00387416204934476,0.332481158214574,-0.532427771317787, + -9.73238606397642e-05,0.00454750017477124,0.34789133036205,-0.560455863553536, + -0.000100868832749956,0.00522083830019771,0.363301502509526,-0.588483955789285, + -0.000104413804859926,0.00589417642562484,0.378711674657003,-0.616512048025034, + -0.000107958776969341,0.00656751455105198,0.394121846804478,-0.644540140260783, + -0.000111503749079644,0.00724085267647823,0.409532018951954,-0.672568232496531, + -0.000115048721189059,0.00791419080190581,0.424942191099431,-0.70059632473228, + -0.000118593693299585,0.00858752892733206,0.440352363246907,-0.728624416968029, + -3.333330835599e-05,-0.0075574823956483,0.0704671679721499,-0.0559929789484191, + -3.68423786739347e-05,-0.00688598867887147,0.0858488136336203,-0.0840407260669521, + -4.03514489917822e-05,-0.00621449496209442,0.101230459295091,-0.112088473185485, + -4.3860519309713e-05,-0.00554300124531759,0.116612104956561,-0.140136220304018, + -4.73695896275605e-05,-0.0048715075285406,0.131993750618032,-0.168183967422551, + -5.08786599457411e-05,-0.00420001381176405,0.147375396279502,-0.196231714541084, + -5.43877302634499e-05,-0.00352852009498683,0.162757041940973,-0.224279461659616, + -5.78968005812697e-05,-0.00285702637820995,0.178138687602443,-0.252327208778149, + -6.14058708990894e-05,-0.00218553266143273,0.193520333263914,-0.280374955896682, + -6.49149412169647e-05,-0.00151403894465574,0.208901978925384,-0.308422703015215, + -6.84240115350621e-05,-0.000842545227879077,0.224283624586855,-0.336470450133748, + -7.19330818528818e-05,-0.000171051511102194,0.239665270248325,-0.364518197252281, + -7.54421521707571e-05,0.000500442205674689,0.255046915909795,-0.392565944370814, + -7.89512224884659e-05,0.00117193592245157,0.270428561571266,-0.420613691489347, + -8.24602928068963e-05,0.00184342963922846,0.285810207232737,-0.44866143860788, + -8.59693631239944e-05,0.002514923356006,0.301191852894207,-0.476709185726412, + -8.94784334426468e-05,0.003186417072782,0.316573498555677,-0.504756932844945, + -9.2987503759856e-05,0.00385791078955977,0.331955144217148,-0.532804679963478, + -9.64965740780643e-05,0.00452940450633643,0.347336789878618,-0.560852427082011, + -0.000100005644396273,0.00520089822311309,0.362718435540089,-0.588900174200544, + -0.000103514714713704,0.00587239193989086,0.37810008120156,-0.616947921319077, + -0.000107023785032134,0.00654388565666641,0.39348172686303,-0.64499566843761, + -0.000110532855349676,0.0072153793734433,0.408863372524499,-0.673043415556143, + -0.000114041925667885,0.00788687309022063,0.42424501818597,-0.701091162674675, + -0.000117550995985538,0.00855836680699795,0.439626663847441,-0.729138909793208, + -3.30832550226173e-05,-0.00753669825446041,0.0704104381983693,-0.0560519828707818, + -3.65430231690222e-05,-0.00686777374934983,0.0857526948780803,-0.0841268415701629, + -4.000279131533e-05,-0.00619884924423908,0.101094951557791,-0.112201700269544, + -4.34625594617211e-05,-0.00552992473912817,0.116437208237503,-0.140276558968925, + -4.69223276080011e-05,-0.00486100023401725,0.131779464917214,-0.168351417668306, + -5.03820957543089e-05,-0.00419207572890667,0.147121721596925,-0.196426276367687, + -5.38418639008387e-05,-0.00352315122379609,0.162463978276636,-0.224501135067069, + -5.73016320471464e-05,-0.00285422671868507,0.177806234956347,-0.25257599376645, + -6.07614001935652e-05,-0.00218530221357449,0.193148491636058,-0.280650852465831, + -6.4221168339762e-05,-0.00151637770846347,0.20849074831577,-0.308725711165212, + -6.76809364861253e-05,-0.000847453203352666,0.223833004995481,-0.336800569864593, + -7.11407046325441e-05,-0.000178528698242086,0.239175261675192,-0.364875428563974, + -7.46004727790184e-05,0.000490395806868493,0.254517518354903,-0.392950287263355, + -7.80602409253817e-05,0.00115932031197952,0.269859775034614,-0.421025145962736, + -8.15200090716894e-05,0.00182824481708965,0.285202031714325,-0.449100004662118, + -8.49797772181082e-05,0.0024971693222009,0.300544288394037,-0.477174863361499, + -8.84395453648601e-05,0.00316609382731103,0.315886545073747,-0.50524972206088, + -9.18993135107238e-05,0.0038350183324225,0.331228801753459,-0.533324580760261, + -9.53590816573646e-05,0.00450394283753242,0.346571058433169,-0.561399439459642, + -9.88188498034503e-05,0.00517286734264366,0.361913315112881,-0.589474298159023, + -0.000102278617949647,0.00584179184775513,0.377255571792592,-0.617549156858404, + -0.000105738386096843,0.0065107163528646,0.392597828472303,-0.645624015557786, + -0.000109198154242707,0.00717964085797629,0.407940085152015,-0.673698874257166, + -0.000112657922388903,0.00784856536308709,0.423282341831726,-0.701773732956547, + -0.000116117690535544,0.008517489868197,0.438624598511436,-0.729848591655929, + -3.27396342828523e-05,-0.00750827923529929,0.0703324492112678,-0.0561329271165876, + -3.61321854839003e-05,-0.00684292659055397,0.0856205947112607,-0.0842449787071612, + -3.95247366848095e-05,-0.00617757394580842,0.100908740211254,-0.112357030297735, + -4.29172878858297e-05,-0.00551222130106288,0.116196885711247,-0.140469081888308, + -4.63098390867112e-05,-0.00484686865631734,0.13148503121124,-0.168581133478882, + -4.97023902876204e-05,-0.0041815160115718,0.146773176711233,-0.196693185069456, + -5.30949414886961e-05,-0.00351616336682647,0.162061322211226,-0.224805236660029, + -5.64874926897718e-05,-0.00285081072208104,0.177349467711219,-0.252917288250603, + -5.988004389057e-05,-0.00218545807733528,0.192637613211212,-0.281029339841177, + -6.32725950913682e-05,-0.00152010543258974,0.207925758711205,-0.30914139143175, + -6.66651462923329e-05,-0.000854752787844193,0.223213904211198,-0.337253443022324, + -7.00576974934086e-05,-0.00018940014309865,0.238502049711191,-0.365365494612897, + -7.34502486943733e-05,0.00047595250164667,0.253790195211184,-0.393477546203471, + -7.68427998953936e-05,0.00114130514639199,0.269078340711177,-0.421589597794045, + -8.02353510961362e-05,0.00180665779113798,0.28436648621117,-0.449701649384618, + -8.3627902297323e-05,0.00247201043588285,0.299654631711162,-0.477813700975192, + -8.70204534980656e-05,0.00313736308062862,0.314942777211155,-0.505925752565766, + -9.04130046994744e-05,0.00380271572537372,0.330230922711148,-0.534037804156339, + -9.3805555899884e-05,0.00446806837012015,0.345519068211142,-0.562149855746913, + -9.71981071011818e-05,0.00513342101486525,0.360807213711135,-0.590261907337486, + -0.000100590658302147,0.00579877365961101,0.376095359211128,-0.61837395892806, + -0.000103983209503222,0.00646412630435611,0.391383504711121,-0.646486010518634, + -0.000107375760704298,0.00712947894910121,0.406671650211113,-0.674598062109207, + -0.000110768311905263,0.0077948315938472,0.421959795711107,-0.702710113699781, + -0.000114160863106005,0.00846018423859274,0.437247941211099,-0.730822165290354, + -3.22706733916212e-05,-0.00746975853033011,0.0702259546872205,-0.0562431394968078, + -3.55724877529606e-05,-0.00680935727376503,0.0854402826847812,-0.0844058323284578, + -3.88743021142446e-05,-0.00614895601719984,0.100654610682342,-0.112568525160108, + -4.21761164756396e-05,-0.00548855476063481,0.115868938679903,-0.140731217991758, + -4.54779308367292e-05,-0.00482815350406929,0.131083266677464,-0.168893910823408, + -4.87797451983463e-05,-0.00416775224750454,0.146297594675024,-0.197056603655058, + -5.2081559559658e-05,-0.00350735099093957,0.161511922672585,-0.225219296486708, + -5.53833739207477e-05,-0.00284694973437394,0.176726250670146,-0.253381989318358, + -5.86851882821704e-05,-0.00218654847780897,0.191940578667706,-0.281544682150008, + -6.19870026434821e-05,-0.001526147221244,0.207154906665267,-0.309707374981658, + -6.52888170046828e-05,-0.000865745964678588,0.222369234662828,-0.337870067813308, + -6.859063136605e-05,-0.000205344708113619,0.237583562660389,-0.366032760644958, + -7.18924457273618e-05,0.000455056548451571,0.252797890657949,-0.394195453476608, + -7.51942600885069e-05,0.00111545780501676,0.26801221865551,-0.422358146308258, + -7.84960744497631e-05,0.00177585906158217,0.283226546653071,-0.450520839139908, + -8.17978888113524e-05,0.00243626031814737,0.298440874650632,-0.478683531971558, + -8.50997031728307e-05,0.00309666157471211,0.313655202648192,-0.506846224803208, + -8.84015175338648e-05,0.00375706283127752,0.328869530645753,-0.535008917634858, + -9.17033318954541e-05,0.00441746408784205,0.344083858643313,-0.563171610466508, + -9.50051462561552e-05,0.00507786534440791,0.359298186640874,-0.591334303298158, + -9.83069606179665e-05,0.00573826660097243,0.374512514638435,-0.619496996129808, + -0.000101608774979334,0.00639866785753762,0.389726842635996,-0.647659688961458, + -0.000104910589340035,0.0070590691141037,0.404941170633557,-0.675822381793108, + -0.000108212403701069,0.00771947037066933,0.420155498631118,-0.703985074624758, + -0.000111514218062658,0.00837987162723364,0.435369826628678,-0.732147767456408, + -3.1636631266832e-05,-0.00741816005590101,0.0700818680436263,-0.0563916786934148, + -3.48176043722948e-05,-0.00676459267663321,0.0851964517058617,-0.0846226234696252, + -3.79985774777991e-05,-0.00611102529736535,0.100311035368097,-0.112853568245836, + -4.11795505834145e-05,-0.0054574579180976,0.115425619030333,-0.141084513022046, + -4.43605236890021e-05,-0.0048038905388299,0.130540202692568,-0.169315457798256, + -4.75414967944232e-05,-0.00415032315956199,0.145654786354803,-0.197546402574467, + -5.07224699000108e-05,-0.00349675578029429,0.160769370017039,-0.225777347350677, + -5.39034430053764e-05,-0.00284318840102626,0.175883953679274,-0.254008292126888, + -5.70844161110196e-05,-0.00218962102175879,0.19099853734151,-0.282239236903098, + -6.02653892162741e-05,-0.00153605364249043,0.206113121003745,-0.310470181679309, + -6.34463623219728e-05,-0.000882486263222848,0.221227704665981,-0.338701126455519, + -6.66273354276159e-05,-0.000228918883955043,0.236342288328216,-0.366932071231729, + -6.98083085332035e-05,0.000424648495312541,0.251456871990452,-0.39516301600794, + -7.29892816384581e-05,0.00107821587458079,0.266571455652687,-0.42339396078415, + -7.61702547442678e-05,0.00173178325384793,0.281686039314922,-0.451624905560361, + -7.93512278496333e-05,0.00238535063311596,0.296800622977158,-0.479855850336571, + -8.25322009547769e-05,0.00303891801238443,0.311915206639394,-0.508086795112782, + -8.57131740604755e-05,0.00369248539165201,0.327029790301629,-0.536317739888992, + -8.88941471662852e-05,0.00434605277091893,0.342144373963864,-0.564548684665202, + -9.20751202717618e-05,0.0049996201501874,0.3572589576261,-0.592779629441413, + -9.52560933771274e-05,0.00565318752945476,0.372373541288335,-0.621010574217623, + -9.8437066482604e-05,0.00630675490872301,0.38748812495057,-0.649241518993834, + -0.000101618039588303,0.00696032228798993,0.402602708612805,-0.677472463770044, + -0.00010479901269389,0.00761388966725818,0.417717292275041,-0.705703408546255, + -0.000107979985799145,0.00826745704652598,0.432831875937276,-0.733934353322465, + -3.07901906400759e-05,-0.00735013236564763,0.069889331386681,-0.0565891421576789, + -3.38131421663279e-05,-0.00670593545475512,0.0848708620399048,-0.084910818981211, + -3.68360936923717e-05,-0.00606173854386244,0.0998523926931286,-0.113232495804743, + -3.98590452185543e-05,-0.00541754163296981,0.114833923346352,-0.141554172628275, + -4.28819967447092e-05,-0.00477334472207724,0.129815453999576,-0.169875849451807, + -4.59049482707807e-05,-0.00412914781118445,0.1447969846528,-0.198197526275339, + -4.89278997967135e-05,-0.00348495090029144,0.159778515306024,-0.226519203098871, + -5.19508513228129e-05,-0.00284075398939898,0.174760045959248,-0.254840879922404, + -5.49738028493008e-05,-0.00219655707850663,0.189741576612472,-0.283162556745936, + -5.79967543752336e-05,-0.00155236016761373,0.204723107265696,-0.311484233569468, + -6.10197059012219e-05,-0.000908163256721162,0.219704637918919,-0.339805910393, + -6.40426574273767e-05,-0.000263966345828148,0.234686168572143,-0.368127587216532, + -6.70656089534205e-05,0.000380230565064421,0.249667699225367,-0.396449264040064, + -7.00885604794088e-05,0.00102442747595721,0.264649229878591,-0.424770940863596, + -7.31115120059522e-05,0.00166862438684956,0.279630760531815,-0.453092617687128, + -7.61344635320516e-05,0.00231282129774213,0.294612291185038,-0.48141429451066, + -7.91574150580399e-05,0.00295701820863514,0.309593821838263,-0.509735971334192, + -8.21803665839171e-05,0.00360121511952816,0.324575352491487,-0.538057648157724, + -8.52033181101275e-05,0.00424541203042028,0.33955688314471,-0.566379324981257, + -8.82262696358938e-05,0.00488960894131352,0.354538413797934,-0.594701001804789, + -9.12492211627702e-05,0.0055338058522052,0.369519944451157,-0.623022678628321, + -9.42721726887585e-05,0.00617800276309843,0.384501475104382,-0.651344355451853, + -9.72951242149689e-05,0.00682219967399034,0.399483005757605,-0.679666032275385, + -0.000100318075741401,0.00746639658488268,0.414464536410829,-0.707987709098917, + -0.000103341027266945,0.00811059349577636,0.429446067064053,-0.736309385922449, + -2.96791214308423e-05,-0.00726230382292048,0.069636295537153,-0.0568469051328679, + -3.25003998211115e-05,-0.00663082998881531,0.084443359670137,-0.0852870208916724, + -3.53216782112142e-05,-0.00599935615470987,0.0992504238031211,-0.113727136650477, + -3.81429566014557e-05,-0.00536788232060459,0.114057487936105,-0.142167252409281, + -4.09642349917527e-05,-0.00473640848649948,0.128864552069089,-0.170607368168086, + -4.37855133817444e-05,-0.00410493465239392,0.143671616202073,-0.19904748392689, + -4.66067917720969e-05,-0.0034734608182887,0.158478680335057,-0.227487599685694, + -4.94280701623384e-05,-0.00284198698418359,0.173285744468041,-0.255927715444499, + -5.22493485525799e-05,-0.00221051315007847,0.188092808601025,-0.284367831203303, + -5.50706269425993e-05,-0.00157903931597292,0.202899872734009,-0.312807946962108, + -5.78919053328963e-05,-0.000947565481867807,0.217706936866993,-0.341248062720912, + -6.07131837232489e-05,-0.000316091647762695,0.232514000999977,-0.369688178479717, + -6.35344621134348e-05,0.000315382186342417,0.247321065132961,-0.398128294238521, + -6.63557405037318e-05,0.000946856020447751,0.262128129265945,-0.426568409997325, + -6.91770188938623e-05,0.00157832985455308,0.276935193398929,-0.45500852575613, + -7.19982972839928e-05,0.00220980368865842,0.291742257531913,-0.483448641514934, + -7.48195756743453e-05,0.00284127752276397,0.306549321664898,-0.511888757273739, + -7.76408540641427e-05,0.00347275135686909,0.321356385797881,-0.540328873032543, + -8.04621324547172e-05,0.00410422519097398,0.336163449930865,-0.568768988791347, + -8.32834108451808e-05,0.00473569902507931,0.350970514063849,-0.597209104550152, + -8.61046892349782e-05,0.00536717285918487,0.365777578196833,-0.625649220308956, + -8.89259676255527e-05,0.00599864669328953,0.380584642329817,-0.654089336067761, + -9.17472460152391e-05,0.00663012052739598,0.395391706462802,-0.682529451826565, + -9.45685244054806e-05,0.00726159436150109,0.410198770595786,-0.710969567585369, + -9.7389802795389e-05,0.0078930681956062,0.42500583472877,-0.739409683344174, + -2.82525934522937e-05,-0.00715194177284662,0.0693109329894528,-0.0571754954885706, + -3.08245652365924e-05,-0.00653749439738832,0.0838943054360859,-0.0857665944979433, + -3.33965370209466e-05,-0.00592304702193008,0.0984776778827189,-0.114357693507316, + -3.59685088051898e-05,-0.00530859964647179,0.113061050329352,-0.142948792516689, + -3.85404805894607e-05,-0.00469415227101333,0.127644422775985,-0.171539891526061, + -4.11124523739259e-05,-0.00407970489555531,0.142227795222618,-0.200130990535434, + -4.36844241581413e-05,-0.00346525752009674,0.156811167669251,-0.228722089544807, + -4.62563959423568e-05,-0.00285081014463839,0.171394540115884,-0.257313188554179, + -4.88283677266832e-05,-0.00223636276918016,0.185977912562517,-0.285904287563552, + -5.14003395112317e-05,-0.00162191539372225,0.20056128500915,-0.314495386572925, + -5.3972311295003e-05,-0.00100746801826301,0.215144657455784,-0.343086485582297, + -5.6544283079607e-05,-0.000393020642805331,0.229728029902416,-0.37167758459167, + -5.91162548638779e-05,0.000221426732653018,0.24431140234905,-0.400268683601043, + -6.16882266483154e-05,0.000835874108110923,0.258894774795682,-0.428859782610415, + -6.42601984326419e-05,0.00145032148356949,0.273478147242316,-0.457450881619788, + -6.68321702171903e-05,0.0020647688590274,0.288061519688949,-0.48604198062916, + -6.94041420009617e-05,0.00267921623448619,0.302644892135582,-0.514633079638533, + -7.19761137853991e-05,0.00329366360994454,0.317228264582215,-0.543224178647906, + -7.45480855695035e-05,0.00390811098540333,0.331811637028848,-0.571815277657278, + -7.7120057354052e-05,0.0045225583608608,0.346395009475481,-0.600406376666651, + -7.96920291383785e-05,0.00513700573631937,0.360978381922114,-0.628997475676024, + -8.22640009228159e-05,0.00575145311177749,0.375561754368747,-0.657588574685396, + -8.48359727069203e-05,0.00636590048723606,0.39014512681538,-0.686179673694769, + -8.74079444912468e-05,0.00698034786269464,0.404728499262014,-0.714770772704142, + -8.99799162754622e-05,0.00759479523815232,0.419311871708646,-0.743361871713514, + -2.64721851737232e-05,-0.0070179164517512,0.0689041417036613,-0.0575819404777743, + -2.87482984059895e-05,-0.00642578341161415,0.0832088283563476,-0.0863597959898322, + -3.10244116382419e-05,-0.00583365037147698,0.097513515009034,-0.11513765150189, + -3.3300524870522e-05,-0.00524151733133993,0.11181820166172,-0.143915507013948, + -3.55766381028022e-05,-0.00464938429120298,0.126122888314407,-0.172693362526006, + -3.78527513352211e-05,-0.00405725125106604,0.140427574967093,-0.201471218038064, + -4.01288645674458e-05,-0.00346511821092899,0.154732261619779,-0.230249073550122, + -4.24049777996149e-05,-0.00287298517079182,0.169036948272466,-0.25902692906218, + -4.46810910320616e-05,-0.00228085213065476,0.183341634925152,-0.287804784574238, + -4.69572042641198e-05,-0.00168871909051749,0.197646321577838,-0.316582640086295, + -4.92333174964554e-05,-0.00109658605038065,0.211951008230525,-0.345360495598353, + -5.15094307287911e-05,-0.000504453010243378,0.226255694883211,-0.374138351110411, + -5.37855439609602e-05,8.76800298934555e-05,0.240560381535897,-0.402916206622469, + -5.60616571932959e-05,0.000679813070030511,0.254865068188584,-0.431694062134527, + -5.83377704252985e-05,0.00127194611016801,0.26916975484127,-0.460471917646585, + -6.06138836576342e-05,0.00186407915030484,0.283474441493956,-0.489249773158643, + -6.28899968900809e-05,0.0024562121904419,0.297779128146643,-0.518027628670701, + -6.51661101224166e-05,0.00304834523057895,0.312083814799329,-0.546805484182759, + -6.74422233547523e-05,0.00364047827071601,0.326388501452016,-0.575583339694817, + -6.97183365870879e-05,0.00423261131085262,0.340693188104702,-0.604361195206875, + -7.19944498192016e-05,0.0048247443509899,0.354997874757388,-0.633139050718933, + -7.42705630510931e-05,0.00541687739112762,0.369302561410074,-0.661916906230991, + -7.65466762836509e-05,0.00600901043126445,0.383607248062761,-0.690694761743048, + -7.88227895160976e-05,0.00660114347140084,0.397911934715447,-0.719472617255106, + -8.10989027478781e-05,0.007193276511539,0.412216621368134,-0.748250472767164, + -2.43270513372168e-05,-0.00686177910283986,0.068413046531941,-0.0580663554092568, + -2.62694646791517e-05,-0.00629805522500304,0.0823827061525363,-0.0870667936590905, + -2.82118780211282e-05,-0.00573433134716617,0.0963523657731316,-0.116067231908924, + -3.0154291363188e-05,-0.00517060746932951,0.110322025393727,-0.145067670158758, + -3.20967047051368e-05,-0.00460688359149253,0.124291685014322,-0.174068108408592, + -3.40391180468913e-05,-0.00404315971365532,0.138261344634918,-0.203068546658425, + -3.59815313890066e-05,-0.00347943583581889,0.152231004255513,-0.232068984908259, + -3.79239447310109e-05,-0.00291571195798201,0.166200663876108,-0.261069423158093, + -3.98663580730152e-05,-0.00235198808014525,0.180170323496703,-0.290069861407926, + -4.1808771414853e-05,-0.00178826420230815,0.194139983117299,-0.31907029965776, + -4.37511847566907e-05,-0.00122454032447106,0.208109642737894,-0.348070737907594, + -4.56935980990836e-05,-0.000660816446634849,0.222079302358489,-0.377071176157428, + -4.76360114404217e-05,-9.70925687970858e-05,0.236048961979085,-0.406071614407261, + -4.95784247825926e-05,0.000466631309038901,0.25001862159968,-0.435072052657095, + -5.15208381246524e-05,0.001030355186876,0.263988281220275,-0.464072490906929, + -5.34632514666011e-05,0.00159407906471287,0.277957940840871,-0.493072929156762, + -5.54056648083279e-05,0.00215780294254997,0.291927600461466,-0.522073367406596, + -5.73480781503877e-05,0.00272152682038662,0.305897260082061,-0.55107380565643, + -5.92904914925585e-05,0.00328525069822305,0.319866919702656,-0.580074243906263, + -6.12329048340632e-05,0.00384897457606082,0.333836579323252,-0.609074682156097, + -6.3175318176012e-05,0.00441269845389725,0.347806238943847,-0.638075120405931, + -6.51177315182938e-05,0.00497642233173368,0.361775898564442,-0.667075558655764, + -6.70601448604646e-05,0.00554014620957055,0.375745558185038,-0.696075996905598, + -6.90025582023024e-05,0.00610387008740787,0.389715217805634,-0.725076435155432, + -7.09449715440291e-05,0.00666759396524519,0.403684877426229,-0.754076873405265, + -2.1849580899666e-05,-0.00668850940268417,0.0678446826992698,-0.0586187823892984, + -2.34379189397171e-05,-0.00615959626440699,0.0814284550167798,-0.0878730540815954, + -2.50262569798099e-05,-0.00563068312612991,0.0950122273342897,-0.117127325773892, + -2.66145950201524e-05,-0.00510176998785317,0.1085959996518,-0.14638159746619, + -2.82029330602174e-05,-0.00457285684957609,0.122179771969309,-0.175635869158487, + -2.97912711004766e-05,-0.00404394371129924,0.135763544286819,-0.204890140850784, + -3.13796091405694e-05,-0.00351503057302227,0.149347316604329,-0.234144412543081, + -3.296794718044e-05,-0.00298611743474475,0.162931088921839,-0.263398684235378, + -3.45562852205883e-05,-0.00245720429646812,0.176514861239349,-0.292652955927675, + -3.61446232608476e-05,-0.00192829115819082,0.190098633556859,-0.321907227619972, + -3.77329613007737e-05,-0.00139937801991397,0.203682405874369,-0.351161499312269, + -3.9321299341144e-05,-0.000870464881637334,0.217266178191878,-0.380415771004566, + -4.09096373811813e-05,-0.000341551743359592,0.230849950509389,-0.409670042696863, + -4.24979754214405e-05,0.000187361394917041,0.244433722826898,-0.43892431438916, + -4.40863134615332e-05,0.000716274533194117,0.258017495144408,-0.468178586081457, + -4.56746515014039e-05,0.00124518767147119,0.271601267461918,-0.497432857773754, + -4.72629895422738e-05,0.00177410080974738,0.285185039779428,-0.526687129466051, + -4.88513275819225e-05,0.0023030139480249,0.298768812096938,-0.555941401158348, + -5.04396656219042e-05,0.00283192708630242,0.312352584414448,-0.585195672850645, + -5.20280036628851e-05,0.00336084022457817,0.325936356731957,-0.614449944542942, + -5.36163417024227e-05,0.00388975336285613,0.339520129049468,-0.643704216235239, + -5.52046797419603e-05,0.00441866650113365,0.353103901366978,-0.672958487927536, + -5.67930177822751e-05,0.00494757963941028,0.366687673684487,-0.702212759619833, + -5.83813558223678e-05,0.00547649277768736,0.380271446001997,-0.73146703131213, + -5.99696938625716e-05,0.00600540591596443,0.393855218319507,-0.760721303004427, + -1.91243824914644e-05,-0.00650636573407587,0.0672182056732137,-0.0592179528773268, + -2.03625594114853e-05,-0.0060181223875741,0.0803788342890195,-0.0887475360824455, + -2.16007363314508e-05,-0.00552987904107211,0.0935394629048256,-0.118277119287564, + -2.28389132516105e-05,-0.0050416356945705,0.106700091520631,-0.147806702492683, + -2.40770901714094e-05,-0.00455339234806851,0.119860720136437,-0.177336285697801, + -2.53152670914858e-05,-0.00406514900156663,0.133021348752243,-0.20686586890292, + -2.65534440115345e-05,-0.00357690565506497,0.146181977368049,-0.236395452108039, + -2.77916209314721e-05,-0.00308866230856297,0.159342605983855,-0.265925035313157, + -2.90297978514098e-05,-0.0026004189620612,0.172503234599661,-0.295454618518276, + -3.02679747713475e-05,-0.00211217561555932,0.185663863215467,-0.324984201723395, + -3.15061516915072e-05,-0.00162393226905766,0.198824491831273,-0.354513784928513, + -3.27443286112783e-05,-0.00113568892255556,0.211985120447079,-0.384043368133632, + -3.39825055314935e-05,-0.000647445576053673,0.225145749062885,-0.41357295133875, + -3.52206824517642e-05,-0.000159202229552458,0.23830637767869,-0.443102534543869, + -3.64588593716464e-05,0.000329041116949202,0.251467006294496,-0.472632117748988, + -3.76970362911955e-05,0.000817284463451973,0.264627634910302,-0.502161700954106, + -3.89352132111886e-05,0.00130552780995385,0.277788263526108,-0.531691284159225, + -4.01733901316259e-05,0.00179377115645463,0.290948892141913,-0.561220867364343, + -4.14115670515081e-05,0.00228201450295673,0.30410952075772,-0.590750450569462, + -4.26497439706131e-05,0.00277025784946039,0.317270149373526,-0.620280033774581, + -4.38879208914944e-05,0.00325850119596049,0.330430777989332,-0.649809616979699, + -4.51260978113766e-05,0.00374674454246238,0.343591406605137,-0.679339200184818, + -4.63642747311477e-05,0.00423498788896515,0.356752035220944,-0.708868783389936, + -4.76024516513629e-05,0.00472323123546659,0.36991266383675,-0.738398366595055, + -4.8840628571134e-05,0.00521147458196847,0.383073292452556,-0.767927949800174, + -1.62827888009337e-05,-0.00632553980067685,0.0665637631324394,-0.0598334842902082, + -1.7200413722579e-05,-0.00588224182507047,0.0792847041431977,-0.0896458966530631, + -1.81180386441271e-05,-0.00543894384946414,0.0920056451539559,-0.119458309015918, + -1.90356635656475e-05,-0.00499564587385748,0.104726586164714,-0.149270721378773, + -1.99532884871956e-05,-0.00455234789825099,0.117447527175473,-0.179083133741628, + -2.08709134089102e-05,-0.00410904992264494,0.130168468186231,-0.208895546104483, + -2.17885383304584e-05,-0.00366575194703833,0.142889409196989,-0.238707958467338, + -2.2706163252062e-05,-0.00322245397143184,0.155610350207748,-0.268520370830193, + -2.36237881734436e-05,-0.00277915599582523,0.168331291218506,-0.298332783193048, + -2.45414130948807e-05,-0.00233585802021841,0.181052232229264,-0.328145195555903, + -2.54590380165398e-05,-0.00189256004461225,0.193773173240023,-0.357957607918758, + -2.6376662938199e-05,-0.00144926206900586,0.206494114250781,-0.387770020281613, + -2.72942878601357e-05,-0.00100596409339992,0.219215055261539,-0.417582432644468, + -2.82119127816838e-05,-0.000562666117793542,0.231935996272297,-0.447394845007323, + -2.91295377027323e-05,-0.000119368142186493,0.244656937283056,-0.477207257370178, + -3.0047162624558e-05,0.000323929833420111,0.257377878293814,-0.507019669733033, + -3.09647875461616e-05,0.000767227809026272,0.270098819304572,-0.536832082095888, + -3.18824124679873e-05,0.00121052578463199,0.28281976031533,-0.566644494458743, + -3.28000373893689e-05,0.00165382376023926,0.295540701326089,-0.596456906821598, + -3.37176623109725e-05,0.00209712173584542,0.308261642336847,-0.626269319184453, + -3.46352872323541e-05,0.00254041971145202,0.320982583347605,-0.656081731547308, + -3.55529121540687e-05,0.00298371768705818,0.333703524358364,-0.685894143910163, + -3.64705370755614e-05,0.00342701566266523,0.346424465369122,-0.715706556273017, + -3.7388161997165e-05,0.00387031363827139,0.35914540637988,-0.745518968635873, + -3.83057869188796e-05,0.004313611613878,0.371866347390639,-0.775331380998727, + -1.34803339186668e-05,-0.00615597225470871,0.0659173502755847,-0.0604315489745142, + -1.41271488639794e-05,-0.00575942456010398,0.0782062369907426,-0.0905187647469017, + -1.47739638092781e-05,-0.00536287686549913,0.0904951237059005,-0.120605980519289, + -1.54207787546601e-05,-0.00496632917089457,0.102784010421058,-0.150693196291677, + -1.60675936999588e-05,-0.00456978147628972,0.115072897136216,-0.180780412064064, + -1.67144086452575e-05,-0.00417323378168499,0.127361783851374,-0.210867627836452, + -1.73612235904175e-05,-0.00377668608708004,0.139650670566532,-0.240954843608839, + -1.80080385359105e-05,-0.00338013839247553,0.15193955728169,-0.271042059381227, + -1.86548534811815e-05,-0.00298359069787058,0.164228443996848,-0.301129275153614, + -1.93016684266745e-05,-0.00258704300326595,0.176517330712006,-0.331216490926002, + -1.99484833717234e-05,-0.00219049530866111,0.188806217427164,-0.361303706698389, + -2.05952983170499e-05,-0.00179394761405627,0.201095104142321,-0.391390922470777, + -2.12421132625429e-05,-0.00139739991945187,0.213383990857479,-0.421478138243164, + -2.18889282079804e-05,-0.00100085222484747,0.225672877572637,-0.451565354015551, + -2.25357431529183e-05,-0.000604304530242183,0.237961764287795,-0.481652569787939, + -2.31825580980782e-05,-0.000207756835636896,0.250250651002953,-0.511739785560326, + -2.38293730436823e-05,0.000188790858967502,0.262539537718111,-0.541827001332714, + -2.44761879890643e-05,0.000585338553572123,0.274828424433269,-0.571914217105101, + -2.51230029338911e-05,0.00098188624817741,0.287117311148427,-0.602001432877489, + -2.57698178798282e-05,0.00137843394278114,0.299406197863584,-0.632088648649876, + -2.64166328252102e-05,0.00177498163738621,0.311695084578743,-0.662175864422264, + -2.70634477703702e-05,0.00217152933199083,0.3239839712939,-0.692263080194651, + -2.77102627156411e-05,0.00256807702659545,0.336272858009058,-0.722350295967039, + -2.8357077660579e-05,0.00296462472120052,0.348561744724216,-0.752437511739426, + -2.9003892605739e-05,0.00336117241580602,0.360850631439374,-0.782524727511814, + -1.08642086106003e-05,-0.00600526002682084,0.0653132268553835,-0.0609819924412029, + -1.1299555561145e-05,-0.00565442974138458,0.0772002430266358,-0.0913221302559217, + -1.17349025117452e-05,-0.00530359945594833,0.0890872591978881,-0.121662268070641, + -1.2170249462401e-05,-0.00495276917051202,0.100974275369141,-0.152002405885359, + -1.26055964130012e-05,-0.00460193888507576,0.112861291540393,-0.182342543700078, + -1.30409433636292e-05,-0.00425110859963962,0.124748307711645,-0.212682681514797, + -1.34762903140628e-05,-0.00390027831420325,0.136635323882897,-0.243022819329516, + -1.39116372649406e-05,-0.00354944802876733,0.14852234005415,-0.273362957144235, + -1.43469842153188e-05,-0.00319861774333075,0.160409356225402,-0.303703094958953, + -1.47823311660855e-05,-0.00284778745789493,0.172296372396654,-0.334043232773672, + -1.52176781165747e-05,-0.00249695717245846,0.184183388567907,-0.364383370588391, + -1.56530250674525e-05,-0.00214612688702243,0.196070404739159,-0.39472350840311, + -1.60883720179972e-05,-0.00179529660158639,0.207957420910411,-0.425063646217829, + -1.65237189684309e-05,-0.0014444663161497,0.219844437081664,-0.455403784032547, + -1.6959065918809e-05,-0.001093636030713,0.231731453252916,-0.485743921847266, + -1.73944128696313e-05,-0.000742805745276964,0.243618469424169,-0.516084059661985, + -1.78297598203425e-05,-0.000391975459841154,0.255505485595421,-0.546424197476704, + -1.82651067707207e-05,-4.11451744044555e-05,0.267392501766673,-0.576764335291423, + -1.8700453721654e-05,0.000309685111031133,0.279279517937925,-0.607104473106141, + -1.9135800671366e-05,0.000660515396468053,0.291166534109177,-0.63744461092086, + -1.95711476226323e-05,0.00101134568190409,0.30305355028043,-0.667784748735579, + -2.00064945726774e-05,0.00136217596734101,0.314940566451682,-0.698124886550298, + -2.04418415239438e-05,0.00171300625277615,0.326827582622934,-0.728465024365017, + -2.08771884740999e-05,0.00206383653821307,0.338714598794187,-0.758805162179735, + -2.13125354253663e-05,0.00241466682364866,0.350601614965439,-0.789145299994454, + -8.54427901572641e-06,-0.00587753542442282,0.0647770877488557,-0.0614639088840356, + -8.82605807289716e-06,-0.00556885248833594,0.0763089438781005,-0.0920254814115461, + -9.1078371300124e-06,-0.00526016955224901,0.0878408000073453,-0.122587053939057, + -9.38961618718315e-06,-0.00495148661616218,0.09937265613659,-0.153148626466567, + -9.67139524427063e-06,-0.00464280368007497,0.110904512265835,-0.183710198994078, + -9.95317430141363e-06,-0.0043341207439882,0.12243636839508,-0.214271771521588, + -1.02349533586676e-05,-0.00402543780790132,0.133968224524325,-0.244833344049099, + -1.05167324157551e-05,-0.00371675487181433,0.145500080653569,-0.275394916576609, + -1.07985114729536e-05,-0.00340807193572767,0.157031936782814,-0.30595648910412, + -1.10802905301521e-05,-0.00309938899964091,0.168563792912059,-0.336518061631631, + -1.13620695871841e-05,-0.00279070606355369,0.180095649041304,-0.367079634159141, + -1.16438486443826e-05,-0.00248202312746693,0.191627505170548,-0.397641206686651, + -1.19256277018032e-05,-0.00217334019138038,0.203159361299793,-0.428202779214162, + -1.22074067585576e-05,-0.00186465725529272,0.214691217429038,-0.458764351741672, + -1.24891858162002e-05,-0.00155597431920662,0.226223073558283,-0.489325924269183, + -1.27709648733987e-05,-0.00124729138311963,0.237754929687527,-0.519887496796694, + -1.305274392982e-05,-0.000938608447031974,0.249286785816772,-0.550449069324204, + -1.33345229874626e-05,-0.00062992551094565,0.260818641946017,-0.581010641851715, + -1.36163020447722e-05,-0.000321242574858882,0.272350498075262,-0.611572214379225, + -1.38980811017486e-05,-1.25596387716698e-05,0.283882354204507,-0.642133786906736, + -1.41798601591692e-05,0.000296123297315098,0.295414210333752,-0.672695359434246, + -1.44616392159236e-05,0.000604806233401867,0.306946066462996,-0.703256931961757, + -1.47434182732331e-05,0.000913489169489079,0.318477922592241,-0.733818504489267, + -1.50251973304316e-05,0.0012221721055754,0.330009778721486,-0.764380077016778, + -1.5306976387186e-05,0.00153085504166306,0.341541634850731,-0.794941649544288, + -6.57883096513712e-06,-0.0057735583080733,0.0643226571187663,-0.061867711433839, + -6.75587030443681e-06,-0.00550171923130122,0.0755545343874936,-0.0926148262954412, + -6.93290964365323e-06,-0.00522988015452924,0.0867864116562209,-0.123361941157043, + -7.10994898306394e-06,-0.00495804107775732,0.0980182889249481,-0.154109056018645, + -7.28698832222485e-06,-0.00468620200098524,0.109250166193675,-0.184856170880248, + -7.4640276615523e-06,-0.00441436292421316,0.120482043462403,-0.21560328574185, + -7.6410670009075e-06,-0.0041425238474414,0.13171392073113,-0.246350400603452, + -7.81810634020719e-06,-0.00387068477066943,0.142945797999857,-0.277097515465054, + -7.99514567950688e-06,-0.00359884569389735,0.154177675268585,-0.307844630326656, + -8.17218501869554e-06,-0.00332700661712515,0.165409552537312,-0.338591745188258, + -8.34922435793972e-06,-0.0030551675403534,0.176641429806039,-0.36933886004986, + -8.52626369729492e-06,-0.00278332846358142,0.187873307074766,-0.400085974911463, + -8.70330303670563e-06,-0.00251148938680945,0.199105184343494,-0.430833089773065, + -8.8803423758943e-06,-0.00223965031003726,0.210337061612221,-0.461580204634667, + -9.05738171497195e-06,-0.00196781123326528,0.221568938880948,-0.492327319496269, + -9.23442105438266e-06,-0.00169597215649331,0.232800816149676,-0.523074434357871, + -9.41146039379337e-06,-0.00142413307972133,0.244032693418403,-0.553821549219473, + -9.58849973320408e-06,-0.00115229400294936,0.25526457068713,-0.584568664081075, + -9.76553907283684e-06,-0.000880454926178054,0.266496447955857,-0.615315778942678, + -9.94257841113733e-06,-0.000608615849404526,0.277728325224585,-0.64606289380428, + -1.0119617750326e-05,-0.000336776772632774,0.288960202493312,-0.676810008665882, + -1.02966570902918e-05,-6.49376958614667e-05,0.300192079762039,-0.707557123527484, + -1.04736964294805e-05,0.000206901380910729,0.311423957030767,-0.738304238389086, + -1.06507357684471e-05,0.000478740457682925,0.322655834299494,-0.769051353250689, + -1.08277751080799e-05,0.000750579534454232,0.333887711568221,-0.799798468112291, + -4.97708186809886e-06,-0.00569162186446176,0.0639522252365395,-0.0621938019127339, + -5.08620036032692e-06,-0.00545055470662098,0.0749402664515676,-0.0930907513620787, + -5.19531885256885e-06,-0.00520948754878031,0.0859283076665957,-0.123987700811423, + -5.30443734478303e-06,-0.00496842039093937,0.096916348881624,-0.154884650260768, + -5.41355583683067e-06,-0.00472735323309859,0.107904390096652,-0.185781599710113, + -5.52267432923914e-06,-0.00448628607525814,0.11889243131168,-0.216678549159458, + -5.63179282131454e-06,-0.00424521891741725,0.129880472526708,-0.247575498608802, + -5.74091131361198e-06,-0.0040041517595768,0.140868513741736,-0.278472448058147, + -5.85002980579841e-06,-0.0037630846017358,0.151856554956764,-0.309369397507492, + -5.95914829798483e-06,-0.00352201744389502,0.162844596171792,-0.340266346956836, + -6.06826679033778e-06,-0.00328095028605446,0.17383263738682,-0.371163296406181, + -6.17738528235767e-06,-0.00303988312821324,0.184820678601849,-0.402060245855526, + -6.28650377448858e-06,-0.00279881597037246,0.195808719816877,-0.432957195304871, + -6.39562226689705e-06,-0.00255774881253212,0.206796761031905,-0.463854144754215, + -6.50474075947205e-06,-0.00231668165469179,0.217784802246933,-0.49475109420356, + -6.61385925160296e-06,-0.00207561449685101,0.228772843461961,-0.525648043652905, + -6.72297774373387e-06,-0.00183454733901023,0.239760884676989,-0.556544993102249, + -6.83209623564274e-06,-0.001593480181169,0.250748925892017,-0.587441942551594, + -6.94121472788467e-06,-0.00135241302332845,0.261736967107045,-0.618338892000939, + -7.05033322068171e-06,-0.00111134586548811,0.272725008322073,-0.649235841450284, + -7.15945171236854e-06,-0.00087027870764711,0.283713049537101,-0.680132790899628, + -7.26857020472149e-06,-0.000629211549806108,0.294701090752129,-0.711029740348973, + -7.37768869707445e-06,-0.000388144391965994,0.305689131967157,-0.741926689798318, + -7.48680718920536e-06,-0.000147077234124993,0.316677173182185,-0.772823639247663, + -7.59592568155831e-06,9.3989923715565e-05,0.327665214397213,-0.803720588697007, + -3.71250461386752e-06,-0.00562867394503819,0.0636597386881602,-0.0624493766702425, + -3.77918532362687e-06,-0.00541236153796443,0.0744556803412751,-0.0934637595955922, + -3.84586603335846e-06,-0.00519604913089067,0.08525162199439,-0.124478142520942, + -3.91254674311781e-06,-0.0049797367238168,0.0960475636475049,-0.155492525446291, + -3.97922745293267e-06,-0.00476342431674326,0.10684350530062,-0.186506908371641, + -4.04590816266426e-06,-0.00454711190966939,0.117639446953735,-0.217521291296991, + -4.11258887239585e-06,-0.00433079950259563,0.128435388606849,-0.24853567422234, + -4.17926958218295e-06,-0.00411448709552176,0.139231330259964,-0.27955005714769, + -4.24595029185904e-06,-0.00389817468844811,0.150027271913079,-0.310564440073039, + -4.31263100175716e-06,-0.00368186228137435,0.160823213566194,-0.341578822998389, + -4.37931171159978e-06,-0.00346554987430059,0.171619155219309,-0.372593205923738, + -4.44599242122035e-06,-0.00324923746722683,0.182415096872424,-0.403607588849088, + -4.51267313106296e-06,-0.00303292506015351,0.193211038525538,-0.434621971774438, + -4.5793538410166e-06,-0.00281661265307953,0.204006980178653,-0.465636354699787, + -4.64603455052615e-06,-0.00260030024600555,0.214802921831768,-0.496650737625137, + -4.71271526047978e-06,-0.00238398783893201,0.225598863484883,-0.527665120550486, + -4.77939597043342e-06,-0.0021676754318587,0.236394805137998,-0.558679503475836, + -4.84607667994297e-06,-0.00195136302478427,0.247190746791113,-0.589693886401186, + -4.91275738967456e-06,-0.00173505061771007,0.257986688444228,-0.620708269326535, + -4.97943809918411e-06,-0.00151873821063653,0.268782630097343,-0.651722652251885, + -5.04611880913775e-06,-0.00130242580356299,0.279578571750457,-0.682737035177234, + -5.11279951875832e-06,-0.00108611339648856,0.290374513403573,-0.713751418102584, + -5.17948022848991e-06,-0.000869800989415026,0.301170455056687,-0.744765801027934, + -5.24616093855457e-06,-0.000653488582341932,0.311966396709802,-0.775780183953283, + -5.31284164861923e-06,-0.000437176175268839,0.322762338362916,-0.806794566878633, + -2.73890571138302e-06,-0.00558124015239941,0.0634345469472606,-0.0626450288560269, + -2.77969848899717e-06,-0.00538425722868063,0.0740828399435056,-0.0937493115683843, + -2.82049126643091e-06,-0.00518727430496169,0.0847311329397504,-0.124853594280742, + -2.86128404400343e-06,-0.00499029138124296,0.0953794259359953,-0.155957876993099, + -2.90207682138166e-06,-0.00479330845752379,0.10602771893224,-0.187062159705457, + -2.94286959889867e-06,-0.00459632553380496,0.116676011928485,-0.218166442417814, + -2.9836623762769e-06,-0.00439934261008579,0.12732430492473,-0.249270725130171, + -3.0244551540437e-06,-0.0042023596863674,0.137972597920975,-0.280375007842529, + -3.06524793153296e-06,-0.00400537676264845,0.14862089091722,-0.311479290554886, + -3.10604070891118e-06,-0.00380839383892928,0.159269183913465,-0.342583573267244, + -3.14683348628941e-06,-0.00361141091521033,0.16991747690971,-0.373687855979601, + -3.18762626383418e-06,-0.00341442799149161,0.180565769905955,-0.404792138691959, + -3.22841904148996e-06,-0.00321744506777266,0.1912140629022,-0.435896421404316, + -3.26921181936779e-06,-0.0030204621440546,0.201862355898444,-0.467000704116673, + -3.310004596635e-06,-0.00282347922033499,0.21251064889469,-0.498104986829031, + -3.35079737445731e-06,-0.00262649629661671,0.223158941890934,-0.529209269541388, + -3.39159015150248e-06,-0.00242951337289732,0.233807234887179,-0.560313552253746, + -3.43238292899173e-06,-0.00223253044917837,0.244455527883424,-0.591417834966103, + -3.47317570670302e-06,-0.00203554752545987,0.255103820879669,-0.622522117678461, + -3.51396848374819e-06,-0.00183856460174026,0.265752113875914,-0.653626400390818, + -3.55476126212562e-06,-0.00164158167802286,0.276400406872158,-0.684730683103175, + -3.59555403917078e-06,-0.00144459875430281,0.287048699868404,-0.715834965815533, + -3.63634681643799e-06,-0.00124761583058364,0.297696992864649,-0.74693924852789, + -3.67713959403826e-06,-0.00105063290686536,0.308345285860893,-0.778043531240247, + -3.71793237174955e-06,-0.000853649983146187,0.318993578857139,-0.809147813952605, + -2.00373790508468e-06,-0.00554600914918618,0.0632645060146246,-0.0627921284506976, + -2.02892152043055e-06,-0.00536377545118588,0.0738014540411196,-0.0939640016281287, + -2.0541051357903e-06,-0.00518154175318591,0.0843384020676143,-0.12513587480556, + -2.07928875109453e-06,-0.00499930805518567,0.0948753500941091,-0.156307747982991, + -2.10447236628775e-06,-0.00481707435718537,0.105412298120604,-0.187479621160422, + -2.12965598156423e-06,-0.00463484065918507,0.115949246147099,-0.218651494337853, + -2.15483959725704e-06,-0.00445260696118543,0.126486194173594,-0.249823367515284, + -2.18002321256128e-06,-0.00427037326318513,0.137023142200088,-0.280995240692715, + -2.20520682753245e-06,-0.00408813956518461,0.147560090226583,-0.312167113870146, + -2.23039044294771e-06,-0.00390590586718464,0.158097038253078,-0.343338987047577, + -2.25557405858501e-06,-0.00372367216918468,0.168633986279573,-0.374510860225008, + -2.28075767372271e-06,-0.00354143847118427,0.179170934306068,-0.405682733402439, + -2.30594128919348e-06,-0.0033592047731843,0.189707882332563,-0.43685460657987, + -2.33112490444221e-06,-0.00317697107518389,0.200244830359058,-0.468026479757301, + -2.35630851985746e-06,-0.00299473737718414,0.210781778385552,-0.499198352934732, + -2.38149213493966e-06,-0.00281250367918395,0.221318726412047,-0.530370226112163, + -2.40667575035491e-06,-0.00263026998118354,0.231855674438542,-0.561542099289595, + -2.43185936565915e-06,-0.00244803628318357,0.242392622465037,-0.592713972467026, + -2.45704298085236e-06,-0.00226580258518272,0.252929570491532,-0.623885845644457, + -2.4822265961566e-06,-0.00208356888718297,0.263466518518026,-0.655057718821888, + -2.50741021146084e-06,-0.00190133518918278,0.274003466544521,-0.686229591999319, + -2.53259382654303e-06,-0.00171910149118171,0.284540414571017,-0.71740146517675, + -2.55777744273544e-06,-0.00153686779318329,0.29507736259751,-0.748573338354181, + -2.58296105759559e-06,-0.00135463409518177,0.305614310624006,-0.779745211531612, + -2.6081446727888e-06,-0.00117240039718203,0.316151258650501,-0.810917084709043, + -1.4567048298858e-06,-0.00552011838490268,0.0631379833391577,-0.0629012299352861, + -1.47248479620554e-06,-0.0053489440620324,0.0735921619988165,-0.0941232339108343, + -1.48826476256692e-06,-0.00517776973916217,0.0840463406584754,-0.125345237886383, + -1.50404472887278e-06,-0.00500659541629189,0.0945005193181342,-0.156567241861931, + -1.5198246952064e-06,-0.0048354210934215,0.104954697977793,-0.187789245837479, + -1.53560466154001e-06,-0.00466424677055122,0.115408876637452,-0.219011249813027, + -1.55138462781812e-06,-0.00449307244768082,0.125863055297111,-0.250233253788575, + -1.56716459409623e-06,-0.00432189812481065,0.13631723395677,-0.281455257764124, + -1.58294456037433e-06,-0.00415072380194026,0.146771412616429,-0.312677261739672, + -1.59872452665244e-06,-0.0039795494790702,0.157225591276087,-0.34389926571522, + -1.61450449293055e-06,-0.00380837515619969,0.167679769935746,-0.375121269690768, + -1.6302844594307e-06,-0.00363720083332941,0.178133948595405,-0.406343273666317, + -1.64606442565329e-06,-0.00346602651045935,0.188588127255064,-0.437565277641865, + -1.66184439198691e-06,-0.00329485218758907,0.199042305914723,-0.468787281617413, + -1.67762435832053e-06,-0.00312367786471879,0.209496484574381,-0.500009285592961, + -1.69340432487619e-06,-0.00295250354184895,0.21995066323404,-0.53123128956851, + -1.70918429132083e-06,-0.00278132921897867,0.230404841893699,-0.562453293544058, + -1.72496425698832e-06,-0.0026101548961075,0.240859020553358,-0.593675297519606, + -1.74074422376602e-06,-0.00243898057323833,0.251313199213016,-0.624897301495154, + -1.75652418965555e-06,-0.00226780625036715,0.261767377872676,-0.656119305470703, + -1.77230415632224e-06,-0.00209663192749732,0.272221556532334,-0.687341309446251, + -1.78808412265585e-06,-0.00192545760462703,0.282675735191993,-0.718563313421799, + -1.80386408887845e-06,-0.00175428328175631,0.293129913851653,-0.749785317397347, + -1.81964405499002e-06,-0.00158310895888603,0.303584092511311,-0.781007321372896, + -1.83542402110159e-06,-0.00141193463601486,0.314038271170971,-0.812229325348444, + -1.05409447145877e-06,-0.0055012386522445,0.0630448669403176,-0.0629813351146762, + -1.06416351181027e-06,-0.00533824956799184,0.0734381730101917,-0.0942401464406587, + -1.07423255221728e-06,-0.00517526048373934,0.0838314790800657,-0.125498957766641, + -1.08430159240225e-06,-0.00501227139948646,0.0942247851499398,-0.156757769092624, + -1.09437063283702e-06,-0.00484928231523385,0.104618091219814,-0.188016580418606, + -1.10443967316076e-06,-0.00468629323098124,0.115011397289688,-0.219275391744589, + -1.11450871376206e-06,-0.00452330414672886,0.125404703359562,-0.250534203070571, + -1.1245777540303e-06,-0.00436031506247636,0.135798009429436,-0.281793014396554, + -1.134646794132e-06,-0.00419732597822309,0.14619131549931,-0.313051825722536, + -1.14471583456677e-06,-0.00403433689397037,0.156584621569185,-0.344310637048519, + -1.1547848753346e-06,-0.00387134780971876,0.166977927639058,-0.375569448374502, + -1.16485391526977e-06,-0.00370835872546516,0.177371233708933,-0.406828259700484, + -1.17492295559352e-06,-0.00354536964121266,0.187764539778807,-0.438087071026467, + -1.1849919960838e-06,-0.00338238055696016,0.198157845848681,-0.469345882352449, + -1.19506103646305e-06,-0.00321939147270722,0.208551151918555,-0.500604693678432, + -1.20513007662026e-06,-0.00305640238845473,0.218944457988429,-0.531863505004414, + -1.21519911711054e-06,-0.00289341330420201,0.229337764058303,-0.563122316330397, + -1.22526815760082e-06,-0.00273042421994929,0.239731070128177,-0.594381127656379, + -1.23533719764701e-06,-0.00256743513569657,0.250124376198051,-0.625639938982362, + -1.24540623791525e-06,-0.00240444605144363,0.260517682267925,-0.656898750308344, + -1.25547527873859e-06,-0.00224145696719225,0.270910988337799,-0.688157561634327, + -1.26554431889581e-06,-0.00207846788293908,0.281304294407673,-0.719416372960309, + -1.27561335938609e-06,-0.00191547879868637,0.291697600477547,-0.750675184286292, + -1.28568240009841e-06,-0.00175248971443365,0.302090906547422,-0.781933995612274, + -1.2957514401446e-06,-0.00158950063018182,0.312484212617295,-0.813192806938257, + -7.60159664076054e-07,-0.00548754861970574,0.0629768871422562,-0.0630397150369398, + -7.6670921528299e-07,-0.00533055962925999,0.0733257758731576,-0.0943253512233551, + -7.73258766573193e-07,-0.00517357063881413,0.0836746646040593,-0.12561098740977, + -7.79808318002173e-07,-0.00501658164836838,0.0940235533349608,-0.156896623596186, + -7.86357868931553e-07,-0.00485959265792213,0.104372442065862,-0.188182259782601, + -7.92907420332778e-07,-0.00470260366747643,0.114721330796764,-0.219467895969016, + -7.9945697162298e-07,-0.00454561467703063,0.125070219527666,-0.250753532155431, + -8.06006522802161e-07,-0.0043886256865846,0.135419108258567,-0.282039168341847, + -8.1255607392583e-07,-0.0042316366961388,0.145767996989469,-0.313324804528262, + -8.19105625327055e-07,-0.00407464770569299,0.15611688572037,-0.344610440714677, + -8.25655176561746e-07,-0.00391765871524696,0.166465774451272,-0.375896076901093, + -8.32204728073993e-07,-0.0037606697248016,0.176814663182173,-0.407181713087508, + -8.38754279197662e-07,-0.00360368073435535,0.187163551913075,-0.438467349273923, + -8.45303830487865e-07,-0.00344669174390955,0.197512440643977,-0.469752985460338, + -8.51853381833578e-07,-0.00328970275346396,0.207861329374878,-0.501038621646754, + -8.58402932846225e-07,-0.00313271376301794,0.218210218105779,-0.532324257833169, + -8.64952484302961e-07,-0.00297572477257235,0.228559106836681,-0.563609894019584, + -8.71502035537652e-07,-0.00281873578212632,0.238907995567583,-0.594895530206, + -8.78051586661321e-07,-0.00266174679168008,0.249256884298484,-0.626181166392415, + -8.84601137673968e-07,-0.00250475780123383,0.259605773029386,-0.65746680257883, + -8.91150689130704e-07,-0.00234776881078869,0.269954661760287,-0.688752438765245, + -8.97700239810284e-07,-0.00219077982034177,0.280303550491189,-0.720038074951661, + -9.04249791489065e-07,-0.00203379082989663,0.29065243922209,-0.751323711138076, + -9.10799343278867e-07,-0.00187680183945194,0.301001327952991,-0.782609347324491, + -9.17348894513559e-07,-0.00171981284900591,0.311350216683893,-0.813894983510907, + -3.87513374328075e-05,-0.00790301093123119,0.0810393634870072,-0.0671847208865598, + -4.2471694755325e-05,-0.00723021059810613,0.0963611459252105,-0.0945026907767414, + -4.61920520778425e-05,-0.00655741026498113,0.111682928363414,-0.121820660666923, + -4.99124094003045e-05,-0.00588460993185602,0.127004710801617,-0.149138630557104, + -5.3632766722822e-05,-0.00521180959873102,0.14232649323982,-0.176456600447286, + -5.73531240453673e-05,-0.00453900926560591,0.157648275678024,-0.203774570337468, + -6.10734813678571e-05,-0.00386620893248102,0.172970058116227,-0.231092540227649, + -6.47938386903468e-05,-0.0031934085993558,0.18829184055443,-0.258410510117831, + -6.85141960126701e-05,-0.00252060826623057,0.203613622992633,-0.285728480008012, + -7.22345533355484e-05,-0.0018478079331059,0.218935405430837,-0.313046449898194, + -7.59549106576496e-05,-0.00117500759998013,0.23425718786904,-0.340364419788375, + -7.96752679803614e-05,-0.000502207266855681,0.249578970307243,-0.367682389678557, + -8.33956253027401e-05,0.000170593066269653,0.264900752745447,-0.395000359568739, + -8.71159826254519e-05,0.000843393399394543,0.28022253518365,-0.42231832945892, + -9.08363399479972e-05,0.00151619373251966,0.295544317621853,-0.449636299349102, + -9.45566972703205e-05,0.00218899406564477,0.310866100060056,-0.476954269239283, + -9.82770545928657e-05,0.0028617943987701,0.32618788249826,-0.504272239129465, + -0.000101997411915411,0.00353459473189499,0.341509664936463,-0.531590209019646, + -0.000105717769237734,0.0042073950650201,0.356831447374666,-0.558908178909828, + -0.000109438126560391,0.00488019539814522,0.37215322981287,-0.586226148800009, + -0.000113158483883047,0.00555299573126966,0.387475012251072,-0.613544118690191, + -0.000116878841205481,0.00622579606439499,0.402796794689276,-0.640862088580373, + -0.000120599198527804,0.00689859639752077,0.41811857712748,-0.668180058470554, + -0.000124319555850461,0.00757139673064477,0.433440359565682,-0.695498028360736, + -0.000128039913172673,0.008244197063771,0.448762142003886,-0.722815998250917, + -3.85300721344739e-05,-0.00788329595479953,0.0809844087123069,-0.0672410256727426, + -4.22110033521939e-05,-0.00721235489558286,0.0962754640655238,-0.0945803054201955, + -4.58919345698305e-05,-0.00654141383636603,0.111566519418741,-0.121919585167648, + -4.9572865787717e-05,-0.00587047277714958,0.126857574771957,-0.149258864915101, + -5.32537970052704e-05,-0.00519953171793275,0.142148630125174,-0.176598144662554, + -5.69347282229904e-05,-0.00452859065871603,0.157439685478391,-0.203937424410007, + -6.06156594410434e-05,-0.00385764959949975,0.172730740831608,-0.23127670415746, + -6.42965906586523e-05,-0.00318670854028302,0.188021796184825,-0.258615983904913, + -6.79775218763723e-05,-0.0025157674810663,0.203312851538042,-0.285955263652366, + -7.16584530939257e-05,-0.00184482642184958,0.218603906891258,-0.313294543399819, + -7.53393843120898e-05,-0.0011738853626333,0.233894962244475,-0.340633823147271, + -7.90203155295877e-05,-0.000502944303416575,0.249186017597692,-0.367973102894724, + -8.27012467474741e-05,0.000167996755799704,0.264477072950908,-0.395312382642177, + -8.6382177964861e-05,0.000838937815017315,0.279768128304126,-0.42265166238963, + -9.0063109182803e-05,0.00150987887423359,0.295059183657343,-0.449990942137083, + -9.37440404003009e-05,0.0021808199334501,0.310350239010559,-0.477330221884536, + -9.7424971618354e-05,0.00285176099266704,0.325641294363777,-0.504669501631989, + -0.000101105902836074,0.00352270205188354,0.340932349716993,-0.532008781379442, + -0.000104786834053572,0.00419364311110049,0.35622340507021,-0.559348061126895, + -0.000108467765271736,0.00486458417031654,0.371514460423427,-0.586687340874348, + -0.000112148696488679,0.00553552522953416,0.386805515776644,-0.6140266206218, + -0.000115829627707287,0.00620646628874955,0.40209657112986,-0.641365900369254, + -0.000119510558924674,0.00687740734796627,0.417387626483077,-0.668705180116706, + -0.000123191490142394,0.00754834840718388,0.432678681836294,-0.696044459864159, + -0.000126872421360114,0.00821928946640016,0.447969737189511,-0.723383739611612, + -3.82247026755878e-05,-0.00785619318357883,0.0809085332388486,-0.0673186351740324, + -4.18515377016149e-05,-0.00718784479051343,0.0961571869407825,-0.0946872880442251, + -4.54783727276142e-05,-0.00651949639744787,0.111405840642717,-0.122055940914418, + -4.91052077537246e-05,-0.00585114800438247,0.126654494344651,-0.149424593784611, + -5.27320427798905e-05,-0.00518279961131718,0.141903148046585,-0.176793246654803, + -5.63588778056956e-05,-0.00451445121825145,0.157151801748519,-0.204161899524996, + -5.99857128317782e-05,-0.00384610282518616,0.172400455450453,-0.231530552395189, + -6.36125478577498e-05,-0.00317775443212054,0.187649109152387,-0.258899205265382, + -6.72393828840545e-05,-0.00250940603905536,0.202897762854321,-0.286267858135574, + -7.08662179099151e-05,-0.00184105764598974,0.218146416556255,-0.313636511005767, + -7.44930529361088e-05,-0.00117270925292456,0.233395070258189,-0.34100516387596, + -7.81198879620248e-05,-0.000504360859858943,0.248643723960123,-0.368373816746152, + -8.17467229879965e-05,0.000163987533206678,0.263892377662057,-0.395742469616345, + -8.53735580140791e-05,0.000832335926271854,0.279141031363991,-0.423111122486538, + -8.90003930400507e-05,0.00150068431933792,0.294389685065926,-0.450479775356731, + -9.26272280661333e-05,0.00216903271240287,0.309638338767859,-0.477848428226923, + -9.62540630918829e-05,0.00283738110546872,0.324886992469793,-0.505217081097116, + -9.98808981181876e-05,0.00350572949853367,0.340135646171727,-0.532585733967309, + -0.000103507733144048,0.00417407789159951,0.355384299873661,-0.559954386837501, + -0.000107134568170131,0.00484242628466491,0.370632953575595,-0.587323039707694, + -0.000110761403196546,0.00551077467772965,0.385881607277529,-0.614691692577887, + -0.000114388238221963,0.00617912307079571,0.401130260979463,-0.64206034544808, + -0.00011801507324849,0.00684747146386089,0.416378914681397,-0.669428998318272, + -0.000121641908274683,0.00751581985692606,0.431627568383331,-0.696797651188465, + -0.000125268743299767,0.00818416824999302,0.446876222085266,-0.724166304058658, + -3.7805481504255e-05,-0.00781918500902962,0.080804308743738,-0.0674249973764269, + -4.13586493746843e-05,-0.00715444607824173,0.095994761509842,-0.0948339054985397, + -4.49118172448915e-05,-0.00648970714745345,0.111185214275946,-0.122242813620652, + -4.84649851153485e-05,-0.00582496821666545,0.12637566704205,-0.149651721742765, + -5.20181529854447e-05,-0.00516022928587712,0.141566119808155,-0.177060629864878, + -5.55713208558739e-05,-0.004495490355089,0.156756572574259,-0.204469537986991, + -5.91244887262476e-05,-0.00383075142430112,0.171947025340363,-0.231878446109104, + -6.26776565967879e-05,-0.00316601249351334,0.187137478106467,-0.259287354231217, + -6.62308244668286e-05,-0.00250127356272478,0.202327930872571,-0.286696262353329, + -6.97839923374244e-05,-0.00183653463193689,0.217518383638675,-0.314105170475442, + -7.33371602074095e-05,-0.00117179570114856,0.232708836404779,-0.341514078597555, + -7.68903280778943e-05,-0.00050705677036067,0.247899289170883,-0.368922986719668, + -8.04434959479905e-05,0.000157682160427886,0.263089741936988,-0.39633189484178, + -8.39966638188638e-05,0.000822421091215109,0.278280194703092,-0.423740802963893, + -8.75498316887935e-05,0.00148716002200411,0.293470647469196,-0.451149711086006, + -9.11029995592783e-05,0.00215189895279155,0.3086611002353,-0.478558619208119, + -9.46561674292079e-05,0.00281663788358033,0.323851553001405,-0.505967527330232, + -9.82093353001368e-05,0.00348137681436778,0.339042005767509,-0.533376435452344, + -0.000101762503170177,0.00414611574515589,0.354232458533613,-0.560785343574457, + -0.000105315671040773,0.00481085467594422,0.369422911299717,-0.58819425169657, + -0.00010886883891148,0.00547559360673144,0.384613364065821,-0.615603159818683, + -0.00011242200678141,0.00614033253752044,0.399803816831926,-0.643012067940796, + -0.000115975174651783,0.00680507146830811,0.414994269598029,-0.670420976062908, + -0.000119528342522268,0.00746981039909622,0.430184722364133,-0.697829884185021, + -0.000123081510392309,0.00813454932988522,0.445375175130238,-0.725238792307134, + -3.72341175191859e-05,-0.00776911545554998,0.0806621483403185,-0.0675696216167753, + -4.06879996476817e-05,-0.00710938885211015,0.0957732957329877,-0.0950332661499243, + -4.41418817761219e-05,-0.0064496622486705,0.110884443125657,-0.122496910683073, + -4.75957639044233e-05,-0.00578993564523034,0.125995590518326,-0.149960555216222, + -5.10496460329191e-05,-0.00513020904179062,0.141106737910995,-0.177424199749371, + -5.4503528161276e-05,-0.00447048243835069,0.156217885303664,-0.20488784428252, + -5.7957410289744e-05,-0.00381075583491108,0.171329032696333,-0.232351488815669, + -6.14112924179899e-05,-0.00315102923147093,0.186440180089003,-0.259815133348818, + -6.48651745466244e-05,-0.00249130262803132,0.201551327481672,-0.287278777881967, + -6.83190566749814e-05,-0.00183157602459127,0.216662474874341,-0.314742422415116, + -7.17729388035049e-05,-0.00117184942115189,0.23177362226701,-0.342206066948265, + -7.52268209318063e-05,-0.000512122817711624,0.246884769659679,-0.369669711481414, + -7.86807030599412e-05,0.000147603785728201,0.261995917052348,-0.397133356014562, + -8.21345851884647e-05,0.000807330389168248,0.277107064445018,-0.424597000547711, + -8.55884673173213e-05,0.00146705699260696,0.292218211837686,-0.45206064508086, + -8.90423494456227e-05,0.00212678359604745,0.307329359230356,-0.479524289614009, + -9.24962315739242e-05,0.00278651019948728,0.322440506623025,-0.506987934147158, + -9.59501137020036e-05,0.00344623680292755,0.337551654015694,-0.534451578680307, + -9.94039958305271e-05,0.0041059634063676,0.352662801408363,-0.561915223213456, + -0.000102857877959162,0.00476569000980698,0.367773948801032,-0.589378867746605, + -0.00010631176008713,0.00542541661324725,0.382885096193701,-0.616842512279754, + -0.000109765642215653,0.00608514321668707,0.39799624358637,-0.644306156812903, + -0.000113219524344066,0.0067448698201269,0.413107390979039,-0.671769801346051, + -0.000116673406472811,0.00740459642356628,0.428218538371709,-0.699233445879201, + -0.000120127288600669,0.00806432302700655,0.443329685764378,-0.72669709041235, + -3.64630431560764e-05,-0.00770221594930115,0.0804700980057073,-0.0677641813430692, + -3.97849844228915e-05,-0.00704942226023914,0.0954742529407388,-0.0953014615345548, + -4.31069256898453e-05,-0.00639662857117718,0.11047840787577,-0.12283874172604, + -4.64288669568269e-05,-0.00574383488211527,0.125482562810802,-0.150376021917526, + -4.97508082238363e-05,-0.00509104119305337,0.140486717745833,-0.177913302109012, + -5.30727494907346e-05,-0.00443824750399169,0.155490872680865,-0.205450582300497, + -5.6394690757855e-05,-0.0037854538149299,0.170495027615896,-0.232987862491983, + -5.97166320246423e-05,-0.00313266012586766,0.185499182550928,-0.260525142683468, + -6.30385732917627e-05,-0.00247986643680598,0.200503337485959,-0.288062422874954, + -6.636051455855e-05,-0.00182707274774385,0.215507492420991,-0.31559970306644, + -6.96824558258369e-05,-0.00117427905868239,0.230511647356022,-0.343136983257925, + -7.30043970924577e-05,-0.000521485369620045,0.245515802291054,-0.370674263449411, + -7.6326338359578e-05,0.000131308319441636,0.260519957226085,-0.398211543640897, + -7.96482796265874e-05,0.000784102008503096,0.275524112161116,-0.425748823832382, + -8.29702208930971e-05,0.00143689569756567,0.290528267096148,-0.453286104023868, + -8.6292162160384e-05,0.00208968938662712,0.305532422031179,-0.480823384215353, + -8.9614103427671e-05,0.00274248307568925,0.320536576966211,-0.508360664406839, + -9.29360446944028e-05,0.00339527676475115,0.335540731901242,-0.535897944598325, + -9.62579859613566e-05,0.00404807045381306,0.350544886836274,-0.56343522478981, + -9.95799272280884e-05,0.00470086414287518,0.365549041771305,-0.590972504981296, + -0.000102901868495042,0.00535365783193686,0.380553196706337,-0.618509785172781, + -0.000106223809761885,0.00600645152099899,0.395557351641368,-0.646047065364267, + -0.000109545751028617,0.00665924521006112,0.4105615065764,-0.673584345555752, + -0.000112867692295682,0.0073120388991228,0.425565661511431,-0.701121625747238, + -0.000116189633563191,0.00796483258818403,0.440569816446462,-0.728658905938724, + -3.54362035020206e-05,-0.00761431110991845,0.0802139940284266,-0.0680221884059904, + -3.85861085285266e-05,-0.00697104754351358,0.0950757263030734,-0.0956571173775994, + -4.17360135551159e-05,-0.0063277839771087,0.10993745857772,-0.123292046349208, + -4.48859185816775e-05,-0.00568452041070378,0.124799190852367,-0.150926975320817, + -4.80358236081835e-05,-0.00504125684429868,0.139660923127014,-0.178561904292426, + -5.11857286348283e-05,-0.00439799327789403,0.154522655401661,-0.206196833264035, + -5.4335633661251e-05,-0.00375472971148894,0.169384387676308,-0.233831762235644, + -5.74855386878959e-05,-0.00311146614508406,0.184246119950955,-0.261466691207253, + -6.06354437142076e-05,-0.00246820257867886,0.199107852225602,-0.289101620178862, + -6.37853487409079e-05,-0.00182493901227421,0.213969584500249,-0.316736549150471, + -6.69352537672752e-05,-0.00118167544586889,0.228831316774896,-0.34437147812208, + -7.008515879392e-05,-0.00053841187946424,0.243693049049542,-0.372006407093689, + -7.32350638205093e-05,0.000104851686940632,0.258554781324189,-0.399641336065297, + -7.63849688468765e-05,0.000748115253345949,0.273416513598836,-0.427276265036906, + -7.95348738737989e-05,0.00139137881975016,0.288278245873483,-0.454911194008515, + -8.26847789001661e-05,0.00203464238615525,0.30313997814813,-0.482546122980124, + -8.58346839267554e-05,0.00267790595256034,0.318001710422777,-0.510181051951733, + -8.89845889533447e-05,0.00332116951896522,0.332863442697424,-0.537815980923342, + -9.21344939796009e-05,0.00396443308537009,0.34772517497207,-0.565450909894951, + -9.52843990065233e-05,0.00460769665177452,0.362586907246717,-0.59308583886656, + -9.84343040325575e-05,0.00525096021818028,0.377448639521365,-0.620720767838169, + -0.000101584209059147,0.00589422378458515,0.392310371796011,-0.648355696809777, + -0.00010473411408618,0.00653748735098958,0.407172104070658,-0.675990625781386, + -0.000107884019112658,0.00718075091739445,0.422033836345305,-0.703625554752995, + -0.000111033924139248,0.00782401448379977,0.436895568619952,-0.731260483724604, + -3.40927319410211e-05,-0.00750131884290484,0.0798783290034158,-0.0683578978307025, + -3.70239188101085e-05,-0.00687103020131541,0.0945538257009949,-0.0961198838503931, + -3.9955105679057e-05,-0.0062407415597257,0.109229322398574,-0.123881869870084, + -4.28862925481721e-05,-0.00561045291813633,0.123904819096153,-0.151643855889775, + -4.58174794171762e-05,-0.00498016427654668,0.138580315793732,-0.179405841909465, + -4.87486662862358e-05,-0.00434987563495703,0.153255812491311,-0.207167827929156, + -5.16798531552398e-05,-0.0037195869933675,0.16793130918889,-0.234929813948847, + -5.46110400244659e-05,-0.00308929835177818,0.182606805886469,-0.262691799968537, + -5.75422268935255e-05,-0.00245900971018886,0.197282302584048,-0.290453785988228, + -6.04734137626406e-05,-0.00182872106859922,0.211957799281627,-0.318215772007919, + -6.34046006317002e-05,-0.00119843242700979,0.226633295979206,-0.345977758027609, + -6.63357875003712e-05,-0.000568143785419695,0.241308792676785,-0.3737397440473, + -6.92669743697083e-05,6.21448561692883e-05,0.255984289374364,-0.401501730066991, + -7.21981612387124e-05,0.000692433497758937,0.270659786071943,-0.429263716086681, + -7.51293481078275e-05,0.00132272213934859,0.285335282769523,-0.457025702106372, + -7.80605349766095e-05,0.00195301078093824,0.300010779467101,-0.484787688126063, + -8.09917218458356e-05,0.00258329942252766,0.31468627616468,-0.512549674145753, + -8.39229087151727e-05,0.00321358806411665,0.329361772862259,-0.540311660165444, + -8.68540955839547e-05,0.00384387670570674,0.344037269559839,-0.568073646185135, + -8.97852824530698e-05,0.00447416534729594,0.358712766257418,-0.595835632204825, + -9.27164693222959e-05,0.00510445398888537,0.373388262954996,-0.623597618224516, + -9.56476561917441e-05,0.00573474263047435,0.388063759652575,-0.651359604244207, + -9.8578843060082e-05,0.00636503127206511,0.402739256350155,-0.679121590263897, + -0.000101510029929308,0.00699531991365365,0.417414753047733,-0.706883576283588, + -0.000104441216798534,0.00762560855524308,0.432090249745312,-0.734645562303279, + -3.23751147089935e-05,-0.0073601376514536,0.0794482412780845,-0.0687840802472298, + -3.50372660770093e-05,-0.00674725802378606,0.0938858129100584,-0.0967073649252313, + -3.76994174449974e-05,-0.00613437839611847,0.108323384542032,-0.124630649603233, + -4.03615688129577e-05,-0.00552149876845098,0.122760956174006,-0.152553934281234, + -4.30237201811123e-05,-0.00490861914078367,0.13719852780598,-0.180477218959236, + -4.56858715489616e-05,-0.00429573951311601,0.151636099437954,-0.208400503637237, + -4.83480229169775e-05,-0.00368285988544848,0.166073671069928,-0.236323788315239, + -5.10101742849378e-05,-0.00306998025778105,0.180511242701902,-0.26424707299324, + -5.36723256527871e-05,-0.00245710063011328,0.194948814333875,-0.292170357671241, + -5.63344770208585e-05,-0.00184422100244586,0.209386385965849,-0.320093642349243, + -5.89966283890409e-05,-0.00123134137477865,0.223823957597823,-0.348016927027244, + -6.16587797568902e-05,-0.000618461747110777,0.238261529229797,-0.375940211705246, + -6.4320931124906e-05,-5.58211944312603e-06,0.252699100861771,-0.403863496383247, + -6.69830824929774e-05,0.000607297508224303,0.267136672493745,-0.431786781061249, + -6.96452338608822e-05,0.00122017713589173,0.281574244125719,-0.45971006573925, + -7.23073852292311e-05,0.00183305676355872,0.296011815757692,-0.487633350417252, + -7.49695365971359e-05,0.00244593639122637,0.310449387389666,-0.515556635095253, + -7.76316879649297e-05,0.00305881601889402,0.32488695902164,-0.543479919773254, + -8.02938393329455e-05,0.00367169564656189,0.339324530653614,-0.571403204451256, + -8.29559907012944e-05,0.00428457527422887,0.353762102285588,-0.599326489129257, + -8.56181420687552e-05,0.00489745490189719,0.368199673917562,-0.627249773807259, + -8.8280293436549e-05,0.00551033452956462,0.382637245549536,-0.65517305848526, + -9.09424448052309e-05,0.0061232141572316,0.397074817181509,-0.683096343163262, + -9.36045961724696e-05,0.00673609378489948,0.411512388813483,-0.711019627841263, + -9.62667475407075e-05,0.00734897341256691,0.425949960445457,-0.738942912519264, + -3.02428762286033e-05,-0.00718989029943223,0.0789129219964207,-0.0693085114166922, + -3.25877583167711e-05,-0.00659987447214505,0.0930554171182493,-0.0974302792810717, + -3.49326404048278e-05,-0.00600985864485759,0.107197912240078,-0.125552047145451, + -3.72775224930511e-05,-0.00541984281757057,0.121340407361906,-0.153673815009831, + -3.96224045812188e-05,-0.00482982699028334,0.135482902483735,-0.18179558287421, + -4.19672866693865e-05,-0.00423981116299621,0.149625397605564,-0.209917350738589, + -4.43121687574988e-05,-0.00364979533570886,0.163767892727392,-0.238039118602969, + -4.6657050845722e-05,-0.00305977950842173,0.177910387849221,-0.266160886467348, + -4.90019329335012e-05,-0.00246976368113416,0.19205288297105,-0.294282654331728, + -5.1346815022113e-05,-0.00187974785384726,0.206195378092878,-0.322404422196107, + -5.36916971101142e-05,-0.00128973202655991,0.220337873214707,-0.350526190060487, + -5.60365791982265e-05,-0.000699716199272782,0.234480368336535,-0.378647957924866, + -5.83814612863942e-05,-0.000109700371985211,0.248622863458364,-0.406769725789246, + -6.07263433740624e-05,0.00048031545530236,0.262765358580193,-0.434891493653625, + -6.30712254625632e-05,0.00107033128258904,0.276907853702021,-0.463013261518005, + -6.54161075507309e-05,0.00166034710987639,0.29105034882385,-0.491135029382384, + -6.77609896391207e-05,0.0022503629371633,0.305192843945679,-0.519256797246763, + -7.01058717271774e-05,0.00284037876445042,0.319335339067507,-0.547378565111143, + -7.24507538153452e-05,0.00343039459173822,0.333477834189336,-0.575500332975522, + -7.47956359030688e-05,0.00402041041902557,0.347620329311165,-0.603622100839901, + -7.71405179913476e-05,0.00461042624631247,0.361762824432993,-0.631743868704281, + -7.94854000790712e-05,0.00520044207360026,0.375905319554822,-0.65986563656866, + -8.18302821677941e-05,0.00579045790088673,0.39004781467665,-0.68798740443304, + -8.41751642562949e-05,0.00638047372817363,0.404190309798479,-0.716109172297419, + -8.65200463442406e-05,0.00697048955546142,0.418332804920308,-0.744230940161799, + -2.76906766451257e-05,-0.00699323286277509,0.0782702182224257,-0.0699296381602874, + -2.96804563928443e-05,-0.00643235776638196,0.0920599444313986,-0.0982864859024318, + -3.16702361404242e-05,-0.00587148266998838,0.105849670640372,-0.126643333644576, + -3.36600158881706e-05,-0.00531060757359525,0.119639396849345,-0.155000181386721, + -3.56497956355284e-05,-0.00474973247720156,0.133429123058318,-0.183357029128865, + -3.76395753833858e-05,-0.00418885738080843,0.147218849267291,-0.211713876871009, + -3.96293551312987e-05,-0.00362798228441552,0.161008575476263,-0.240070724613154, + -4.16191348788786e-05,-0.00306710718802206,0.174798301685236,-0.268427572355298, + -4.36089146262364e-05,-0.00250623209162826,0.188588027894209,-0.296784420097443, + -4.55986943740938e-05,-0.00194535699523524,0.202377754103182,-0.325141267839587, + -4.75884741218402e-05,-0.00138448189884222,0.216167480312155,-0.353498115581731, + -4.9578253869309e-05,-0.000823606802448751,0.229957206521128,-0.381854963323876, + -5.15680336170554e-05,-0.000262731706055064,0.243746932730101,-0.41021181106602, + -5.35578133643577e-05,0.000298143390338623,0.257536658939074,-0.438568658808165, + -5.55475931122151e-05,0.000859018486731644,0.271326385148047,-0.466925506550309, + -5.75373728599615e-05,0.00141989358312467,0.28511611135702,-0.495282354292453, + -5.95271526078189e-05,0.00198076867951791,0.298905837565993,-0.523639202034598, + -6.15169323548992e-05,0.00254164377591204,0.312695563774966,-0.551996049776742, + -6.35067121030897e-05,0.00310251887230462,0.326485289983939,-0.580352897518886, + -6.54964918502809e-05,0.00366339396869808,0.340275016192912,-0.608709745261031, + -6.74862715981384e-05,0.00422426906509132,0.354064742401885,-0.637066593003175, + -6.94760513461068e-05,0.00478514416148412,0.367854468610857,-0.66542344074532, + -7.1465831092965e-05,0.00534601925787914,0.381644194819831,-0.693780288487464, + -7.34556108410445e-05,0.0059068943542715,0.395433921028804,-0.722137136229608, + -7.54453905891239e-05,0.0064677694506643,0.409223647237776,-0.750493983971753, + -2.4765843945479e-05,-0.00677712800949692,0.0775312295647967,-0.0706328365407603, + -2.63822469181996e-05,-0.00625194792299394,0.0909172739889085,-0.0992558260825144, + -2.79986498909757e-05,-0.00572676783649095,0.10430331841302,-0.127878815624268, + -2.96150528635852e-05,-0.0052015877499878,0.117689362837132,-0.156501805166023, + -3.12314558363336e-05,-0.00467640766348476,0.131075407261244,-0.185124794707777, + -3.28478588090264e-05,-0.00415122757698183,0.144461451685356,-0.213747784249531, + -3.44642617820523e-05,-0.00362604749047912,0.157847496109467,-0.242370773791285, + -3.60806647545786e-05,-0.00310086740397575,0.171233540533579,-0.270993763333039, + -3.76970677272714e-05,-0.00257568731747249,0.184619584957691,-0.299616752874793, + -3.93134706999643e-05,-0.00205050723096978,0.198005629381803,-0.328239742416547, + -4.09298736725461e-05,-0.0015253271444664,0.211391673805915,-0.356862731958301, + -4.25462766455165e-05,-0.0010001470579637,0.224777718230027,-0.385485721500055, + -4.41626796184313e-05,-0.000474966971460766,0.238163762654138,-0.414108711041809, + -4.57790825910687e-05,5.02131150419416e-05,0.25154980707825,-0.442731700583563, + -4.73954855636505e-05,0.00057539320154576,0.264935851502362,-0.471354690125317, + -4.90118885365654e-05,0.00110057328804825,0.278321895926474,-0.499977679667071, + -5.06282915089251e-05,0.00162575337455162,0.291707940350586,-0.528600669208825, + -5.22446944821731e-05,0.00215093346105433,0.305093984774698,-0.557223658750579, + -5.38610974546438e-05,0.00267611354755748,0.318480029198809,-0.585846648292333, + -5.54775004271146e-05,0.00320129363406085,0.331866073622921,-0.614469637834087, + -5.70939034004736e-05,0.00372647372056267,0.345252118047032,-0.643092627375841, + -5.87103063727223e-05,0.00425165380706627,0.358638162471144,-0.671715616917596, + -6.03267093456372e-05,0.00477683389356942,0.372024206895256,-0.700338606459349, + -6.19431123183301e-05,0.00530201398007257,0.385410251319368,-0.728961596001104, + -6.35595152911339e-05,0.00582719406657572,0.39879629574348,-0.757584585542858, + -2.15765426092307e-05,-0.00655239545050879,0.0767226627807991,-0.0713894207000596, + -2.28274613289781e-05,-0.00606883491992061,0.0896692784930238,-0.100298757132398, + -2.40783800486977e-05,-0.00558527438933248,0.102615894205248,-0.129208093564736, + -2.5329298768334e-05,-0.00510171385874414,0.115562509917473,-0.158117429997074, + -2.65802174880814e-05,-0.00461815332815607,0.128509125629697,-0.187026766429412, + -2.78311362078565e-05,-0.004134592797568,0.141455741341922,-0.21593610286175, + -2.90820549274096e-05,-0.00365103226697949,0.154402357054147,-0.244845439294088, + -3.03329736473512e-05,-0.00316747173639176,0.167348972766371,-0.273754775726425, + -3.15838923667378e-05,-0.00268391120580325,0.180295588478596,-0.302664112158763, + -3.28348110867349e-05,-0.00220035067521507,0.19324220419082,-0.331573448591101, + -3.40857298061215e-05,-0.00171679014462689,0.206188819903045,-0.360482785023439, + -3.53366485258966e-05,-0.00123322961403871,0.219135435615269,-0.389392121455777, + -3.65875672462268e-05,-0.000749669083451199,0.232082051327494,-0.418301457888115, + -3.78384859658354e-05,-0.00026610855286302,0.245028667039718,-0.447210794320453, + -3.9089404685333e-05,0.000217451977725602,0.257975282751943,-0.476120130752791, + -4.03403234051636e-05,0.000701012508313781,0.270921898464167,-0.505029467185129, + -4.15912421247722e-05,0.00118457303890174,0.283868514176392,-0.533938803617467, + -4.28421608440477e-05,0.00166813356949014,0.296815129888616,-0.562848140049805, + -4.40930795638783e-05,0.00215169410007854,0.309761745600841,-0.591757476482143, + -4.53439982843751e-05,0.00263525463066605,0.322708361313066,-0.620666812914481, + -4.65949170036506e-05,0.00311881516125379,0.335654977025289,-0.649576149346819, + -4.78458357230371e-05,0.00360237569184285,0.348601592737515,-0.678485485779157, + -4.90967544434229e-05,0.00408593622243014,0.361548208449739,-0.707394822211495, + -5.03476731626984e-05,0.00456949675301965,0.374494824161964,-0.736304158643833, + -5.15985918828621e-05,0.00505305728360694,0.387441439874189,-0.765213495076171, + -1.82820068112266e-05,-0.00633178907998166,0.0758846509921035,-0.0721601188421155, + -1.92020081763167e-05,-0.00589405962601686,0.0883782051392907,-0.101361143930426, + -2.01220095410737e-05,-0.00545633017205149,0.100871759286478,-0.130562169018737, + -2.10420109060805e-05,-0.00501860071808657,0.113365313433665,-0.159763194107048, + -2.1962012271004e-05,-0.00458087126412166,0.125858867580853,-0.188964219195359, + -2.2882013635761e-05,-0.00414314181015618,0.13835242172804,-0.21816524428367, + -2.38020150007401e-05,-0.00370541235619148,0.150845975875227,-0.247366269371981, + -2.47220163657191e-05,-0.00326768290222657,0.163339530022415,-0.276567294460292, + -2.56420177306982e-05,-0.00282995344826165,0.175833084169602,-0.305768319548603, + -2.65620190952887e-05,-0.00239222399429595,0.18832663831679,-0.334969344636914, + -2.74820204602677e-05,-0.00195449454033114,0.200820192463977,-0.364170369725225, + -2.84020218253578e-05,-0.00151676508636611,0.213313746611164,-0.393371394813536, + -2.93220231902258e-05,-0.00107903563240108,0.225807300758351,-0.422572419901847, + -3.02420245549273e-05,-0.000641306178436052,0.238300854905539,-0.451773444990158, + -3.11620259195733e-05,-0.000203576724470356,0.250794409052726,-0.480974470078469, + -3.20820272849964e-05,0.000234152729494008,0.263287963199913,-0.51017549516678, + -3.30020286495314e-05,0.00067188218345926,0.275781517347101,-0.539376520255091, + -3.39220300145104e-05,0.00110961163742429,0.288275071494288,-0.568577545343402, + -3.48420313798226e-05,0.0015473410913891,0.300768625641475,-0.597778570431713, + -3.57620327445796e-05,0.00198507054535391,0.313262179788662,-0.626979595520024, + -3.66820341088925e-05,0.00242279999931982,0.32575573393585,-0.656180620608335, + -3.76020354743156e-05,0.00286052945328441,0.338249288083037,-0.685381645696646, + -3.85220368391836e-05,0.003298258907249,0.350742842230224,-0.714582670784957, + -3.94420382042737e-05,0.00373598836121447,0.363236396377412,-0.743783695873268, + -4.03620395693638e-05,0.00417371781517817,0.375729950524598,-0.772984720961579, + -1.5063564925144e-05,-0.00612720700004926,0.0750635316699236,-0.0729026729103611, + -1.57071187954771e-05,-0.00573692304783152,0.087115380217898,-0.102384734874635, + -1.63506726658103e-05,-0.00534663909561384,0.0991672287658724,-0.131866796838909, + -1.69942265362821e-05,-0.00495635514339632,0.111219077313847,-0.161348858803183, + -1.76377804065875e-05,-0.00456607119117847,0.123270925861821,-0.190830920767457, + -1.82813342767263e-05,-0.00417578723896062,0.135322774409796,-0.220312982731731, + -1.89248881469761e-05,-0.00378550328674265,0.14737462295777,-0.249795044696005, + -1.95684420172815e-05,-0.0033952193345248,0.159426471505745,-0.279277106660279, + -2.02119958878644e-05,-0.00300493538230762,0.171478320053719,-0.308759168624553, + -2.08555497580587e-05,-0.00261465143008976,0.183530168601693,-0.338241230588827, + -2.14991036285861e-05,-0.00222436747787191,0.195582017149668,-0.367723292553101, + -2.21426574988914e-05,-0.00183408352565428,0.207633865697642,-0.397205354517375, + -2.27862113692523e-05,-0.00144379957343665,0.219685714245616,-0.426687416481649, + -2.34297652392801e-05,-0.00105351562121836,0.231737562793591,-0.456169478445923, + -2.40733191100295e-05,-0.000663231669001396,0.243789411341565,-0.485651540410197, + -2.47168729804459e-05,-0.000272947716783767,0.255841259889539,-0.515133602374471, + -2.53604268505292e-05,0.000117336235434751,0.267893108437514,-0.544615664338745, + -2.60039807205015e-05,0.000507620187652824,0.279944956985489,-0.574097726303019, + -2.66475345908068e-05,0.000897904139870453,0.291996805533463,-0.603579788267293, + -2.72910884614452e-05,0.00128818809208786,0.304048654081438,-0.633061850231567, + -2.79346423320836e-05,0.00167847204430505,0.316100502629412,-0.662543912195841, + -2.85781962020559e-05,0.00206875599652312,0.328152351177386,-0.692025974160114, + -2.92217500724723e-05,0.0024590399487403,0.34020419972536,-0.721508036124388, + -2.98653039435548e-05,0.00284932390095749,0.352256048273335,-0.750990098088662, + -3.05088578134161e-05,0.00323960785317601,0.364307896821309,-0.780472160052936, + -1.20864025979217e-05,-0.00594725462785445,0.0743020124196335,-0.0735807020880631, + -1.25164184503479e-05,-0.00560311911021305,0.0859460900176758,-0.103319379981145, + -1.29464343028574e-05,-0.00525898359257171,0.0975901676157181,-0.133058057874227, + -1.33764501551448e-05,-0.00491484807493003,0.109234245213761,-0.16279673576731, + -1.3806466007571e-05,-0.00457071255728869,0.120878322811803,-0.192535413660392, + -1.42364818601082e-05,-0.00422657703964724,0.132522400409845,-0.222274091553474, + -1.46664977125899e-05,-0.00388244152200601,0.144166478007888,-0.252012769446556, + -1.50965135650161e-05,-0.00353830600436444,0.15581055560593,-0.281751447339638, + -1.55265294173867e-05,-0.0031941704867231,0.167454633203972,-0.31149012523272, + -1.59565452695354e-05,-0.00285003496908121,0.179098710802015,-0.341228803125802, + -1.63865611221836e-05,-0.0025058994514402,0.190742788400057,-0.370967481018885, + -1.68165769746098e-05,-0.0021617639337983,0.2023868659981,-0.400706158911967, + -1.7246592826925e-05,-0.00181762841615729,0.214030943596142,-0.430444836805049, + -1.76766086796842e-05,-0.00147349289851606,0.225675021194184,-0.460183514698131, + -1.81066245319439e-05,-0.00112935738087461,0.237319098792226,-0.489922192591213, + -1.85366403843146e-05,-0.000785221863233154,0.248963176390269,-0.519660870484295, + -1.89666562371293e-05,-0.000441086345591701,0.260607253988312,-0.549399548377378, + -1.93966720890559e-05,-9.69508279502485e-05,0.272251331586354,-0.57913822627046, + -1.98266879414266e-05,0.000247184689690982,0.283895409184396,-0.608876904163542, + -2.02567037944634e-05,0.000591320207332213,0.295539486782438,-0.638615582056624, + -2.0686719646057e-05,0.000935455724974776,0.307183564380481,-0.668354259949706, + -2.11167354994268e-05,0.00127959124261467,0.318827641978523,-0.698092937842788, + -2.15467513519085e-05,0.00162372676025635,0.330471719576565,-0.727831615735871, + -2.19767672036131e-05,0.00196786227789847,0.342115797174608,-0.757570293628953, + -2.24067830565389e-05,0.00231199779553926,0.35375987477265,-0.787308971522035, + -9.46817859062699e-06,-0.00579615041194154,0.0736309015583511,-0.0741701195065835, + -9.74466901729198e-06,-0.00549432899130387,0.0849170501959846,-0.10413187614507, + -1.00211594437905e-05,-0.00519250757066592,0.0962031988336182,-0.134093632783557, + -1.02976498701224e-05,-0.00489068615002786,0.107489347471252,-0.164055389422043, + -1.05741402965931e-05,-0.00458886472938991,0.118775496108885,-0.19401714606053, + -1.08506307232026e-05,-0.00428704330875218,0.130061644746519,-0.223978902699016, + -1.11271211498121e-05,-0.00398522188811445,0.141347793384152,-0.253940659337503, + -1.1403611576144e-05,-0.00368340046747617,0.152633942021786,-0.283902415975989, + -1.16801020029755e-05,-0.00338157904683878,0.163920090659419,-0.313864172614476, + -1.19565924294185e-05,-0.00307975762620094,0.175206239297053,-0.343825929252962, + -1.2233082855917e-05,-0.00277793620556266,0.186492387934687,-0.373787685891449, + -1.25095732820824e-05,-0.00247611478492482,0.19777853657232,-0.403749442529935, + -1.27860637087474e-05,-0.00217429336428698,0.209064685209953,-0.433711199168422, + -1.30625541352458e-05,-0.00187247194364892,0.220350833847587,-0.463672955806908, + -1.33390445619108e-05,-0.00157065052301131,0.23163698248522,-0.493634712445395, + -1.36155349885758e-05,-0.00126882910237369,0.242923131122854,-0.523596469083881, + -1.38920254150188e-05,-0.000967007681735188,0.254209279760488,-0.553558225722368, + -1.41685158416838e-05,-0.000665186261098238,0.265495428398121,-0.583519982360854, + -1.44450062683488e-05,-0.000363364840459957,0.276781577035755,-0.613481738999341, + -1.47214966944587e-05,-6.15434198212306e-05,0.288067725673389,-0.643443495637827, + -1.49979871211237e-05,0.000240278000815497,0.299353874311021,-0.673405252276314, + -1.52744775475666e-05,0.000542099421454001,0.310640022948655,-0.703367008914801, + -1.55509679742316e-05,0.000843920842091617,0.321926171586289,-0.733328765553287, + -1.58274584005635e-05,0.00114574226273012,0.333212320223923,-0.763290522191774, + -1.61039488268955e-05,0.00144756368336862,0.344498468861556,-0.79325227883026, + -7.26597980485466e-06,-0.00567409848383488,0.0730655058317331,-0.0746610077444901, + -7.43868304958761e-06,-0.00540908042356814,0.0840511094225305,-0.10480855246593, + -7.61138629457037e-06,-0.00514406236330178,0.0950367130133277,-0.134956097187369, + -7.78408953930332e-06,-0.00487904430303487,0.106022316604125,-0.165103641908808, + -7.95679278386974e-06,-0.00461402624276808,0.117007920194923,-0.195251186630248, + -8.12949602868596e-06,-0.00434900818250128,0.12799352378572,-0.225398731351687, + -8.30219927366871e-06,-0.00408399012223493,0.138979127376517,-0.255546276073127, + -8.47490251837391e-06,-0.00381897206196802,0.149964730967315,-0.285693820794566, + -8.64760576319012e-06,-0.00355395400170155,0.160950334558112,-0.315841365516006, + -8.82030900756225e-06,-0.00328893594143409,0.17193593814891,-0.345988910237445, + -8.99301225282256e-06,-0.0030239178811684,0.182921541739706,-0.376136454958885, + -9.16571549736123e-06,-0.00275889982090094,0.193907145330504,-0.406283999680324, + -9.33841874239949e-06,-0.00249388176063503,0.204892748921301,-0.436431544401764, + -9.51112198721571e-06,-0.00222886370036846,0.215878352512099,-0.466579089123203, + -9.68382523192091e-06,-0.00196384564010166,0.226863956102896,-0.496726633844643, + -9.85652847673713e-06,-0.00169882757983464,0.237849559693694,-0.526874178566082, + -1.00292317213313e-05,-0.00143380951956784,0.248835163284491,-0.557021723287522, + -1.02019349662585e-05,-0.00116879145930149,0.259820766875288,-0.587169268008961, + -1.03746382108527e-05,-0.000903773399034247,0.270806370466086,-0.617316812730401, + -1.05473414556689e-05,-0.000638755338767893,0.281791974056883,-0.64746435745184, + -1.07200447010403e-05,-0.00037373727850154,0.29277757764768,-0.677611902173279, + -1.08927479450793e-05,-0.000108719218234299,0.303763181238478,-0.707759446894719, + -1.10654511904507e-05,0.00015629884203161,0.314748784829275,-0.737906991616159, + -1.12381544351559e-05,0.000421316902298408,0.325734388420072,-0.768054536337598, + -1.1410857679639e-05,0.000686334962565649,0.33671999201087,-0.798202081059038, + -5.482051736172e-06,-0.00557852921852242,0.0726069333781728,-0.0750554505952252, + -5.58796033722775e-06,-0.00534411450003119,0.0833494278031076,-0.105352281397311, + -5.6938689382835e-06,-0.00510969978153997,0.0940919222280422,-0.135649112199397, + -5.79977753953353e-06,-0.00487528506304891,0.104834416652977,-0.165945943001483, + -5.90568614045051e-06,-0.00464087034455729,0.115576911077912,-0.196242773803569, + -6.01159474145074e-06,-0.00440645562606612,0.126319405502847,-0.226539604605656, + -6.11750334272854e-06,-0.00417204090757506,0.137061899927781,-0.256836435407742, + -6.22341194367326e-06,-0.00393762618908367,0.147804394352716,-0.287133266209828, + -6.32932054495106e-06,-0.00370321147059305,0.15854688877765,-0.317430097011914, + -6.43522914595129e-06,-0.00346879675210143,0.169289383202585,-0.347726927814, + -6.54113774684051e-06,-0.00323438203361004,0.18003187762752,-0.378023758616086, + -6.64704634817381e-06,-0.00299996731511909,0.190774372052455,-0.408320589418172, + -6.75295494911854e-06,-0.0027655525966277,0.20151686647739,-0.438617420220258, + -6.85886355000775e-06,-0.00253113787813608,0.212259360902325,-0.468914251022344, + -6.96477215134106e-06,-0.00229672315964491,0.223001855327259,-0.49921108182443, + -7.0706807523413e-06,-0.00206230844115396,0.233744349752194,-0.529507912626516, + -7.17658935323051e-06,-0.00182789372266257,0.244486844177129,-0.559804743428602, + -7.28249795467484e-06,-0.00159347900417162,0.255229338602063,-0.590101574230688, + -7.38840655545303e-06,-0.00135906428568022,0.265971833026998,-0.620398405032774, + -7.4943151571194e-06,-0.00112464956718972,0.276714327451933,-0.65069523583486, + -7.60022375800862e-06,-0.000890234848697879,0.287456821876868,-0.680992066636946, + -7.70613235945294e-06,-0.000655820130207374,0.298199316301802,-0.711288897439032, + -7.81204095978705e-06,-0.000421405411715092,0.308941810726737,-0.741585728241118, + -7.9179495613424e-06,-0.000186990693224143,0.319684305151672,-0.771882559043204, + -8.02385816189854e-06,4.7424025267695e-05,0.330426799576607,-0.80217938984529, + -4.08043643584932e-06,-0.0055054757741303,0.0722463101057433,-0.0753633723797584, + -4.14487548536235e-06,-0.00529559081989184,0.0827980226927252,-0.105776743350523, + -4.20931453479212e-06,-0.00508570586565316,0.0933497352797074,-0.136190114321287, + -4.27375358424964e-06,-0.0048758209114147,0.103901447866689,-0.166603485292052, + -4.33819263379043e-06,-0.00466593595717624,0.114453160453671,-0.197016856262816, + -4.40263168310917e-06,-0.00445605100293733,0.125004873040654,-0.22743022723358, + -4.46707073264996e-06,-0.0042461660486991,0.135556585627635,-0.257843598204345, + -4.53150978219075e-06,-0.00403628109446053,0.146108298214617,-0.288256969175109, + -4.59594883178704e-06,-0.00382639614022229,0.156660010801599,-0.318670340145874, + -4.66038788093925e-06,-0.00361651118598316,0.167211723388582,-0.349083711116638, + -4.72482693042453e-06,-0.0034066262317447,0.177763435975564,-0.379497082087402, + -4.78926598024287e-06,-0.00319674127750669,0.188315148562545,-0.409910453058167, + -4.85370502956162e-06,-0.00298685632326778,0.198866861149528,-0.440323824028931, + -4.91814407888036e-06,-0.00277697136902888,0.20941857373651,-0.470737194999695, + -4.98258312853217e-06,-0.00256708641479064,0.219970286323492,-0.50115056597046, + -5.04702217807296e-06,-0.00235720146055218,0.230521998910474,-0.531563936941224, + -5.1114612273917e-06,-0.00214731650631328,0.241073711497456,-0.561977307911989, + -5.17590027682147e-06,-0.00193743155207504,0.251625424084438,-0.592390678882753, + -5.24033932691736e-06,-0.00172754659783747,0.262177136671419,-0.622804049853518, + -5.30477837601406e-06,-0.00151766164359834,0.272728849258401,-0.653217420824282, + -5.36921742555485e-06,-0.00130777668936011,0.283280561845383,-0.683630791795046, + -5.43365647542871e-06,-0.00109789173512187,0.293832274432365,-0.714044162765811, + -5.4980955245254e-06,-0.000888006780883188,0.304383987019347,-0.744457533736575, + -5.56253457417721e-06,-0.000678121826644063,0.31493569960633,-0.77487090470734, + -5.626973623718e-06,-0.000468236872406269,0.325487412193311,-0.805284275678104, + -3.00539819664269e-06,-0.00545063936356049,0.0719695296992574,-0.0755983749014439, + -3.0446734750611e-06,-0.00525985279772129,0.0823750505193432,-0.106100688048088, + -3.08394875339624e-06,-0.00506906623188197,0.092780571339429,-0.136603001194732, + -3.12322403189791e-06,-0.00487827966604304,0.103186092159515,-0.167105314341376, + -3.16249931014978e-06,-0.00468749310020378,0.1135916129796,-0.19760762748802, + -3.20177458851267e-06,-0.0044967065343644,0.123997133799686,-0.228109940634663, + -3.24104986715312e-06,-0.00430591996852558,0.134402654619772,-0.258612253781307, + -3.28032514551602e-06,-0.00411513340268654,0.144808175439857,-0.289114566927951, + -3.31960042365687e-06,-0.00392434683684706,0.155213696259943,-0.319616880074595, + -3.35887570235283e-06,-0.00373356027100846,0.165619217080029,-0.350119193221239, + -3.39815098071572e-06,-0.00354277370516876,0.176024737900115,-0.380621506367883, + -3.43742625891208e-06,-0.00335198713932949,0.186430258720201,-0.411123819514527, + -3.47670153744151e-06,-0.00316120057349045,0.196835779540286,-0.441626132661171, + -3.51597681558236e-06,-0.00297041400765119,0.207241300360372,-0.472128445807814, + -3.55525209405627e-06,-0.00277962744181215,0.217646821180458,-0.502630758954458, + -3.59452737264121e-06,-0.00258884087597289,0.228052342000544,-0.533133072101102, + -3.63380265122615e-06,-0.00239805431013385,0.23845786282063,-0.563635385247746, + -3.67307792947802e-06,-0.00220726774429503,0.248863383640715,-0.59413769839439, + -3.712353208285e-06,-0.00201648117845621,0.259268904460801,-0.624640011541034, + -3.75162848553767e-06,-0.00182569461261561,0.269674425280887,-0.655142324687678, + -3.79090376434466e-06,-0.00163490804677657,0.280079946100973,-0.685644637834322, + -3.83017904337368e-06,-0.00144412148093842,0.290485466921058,-0.716146950980966, + -3.86945432140351e-06,-0.00125333491509938,0.300890987741143,-0.74664926412761, + -3.90872959954436e-06,-0.00106254834925945,0.31129650856123,-0.777151577274253, + -3.94800487857339e-06,-0.000871761783421299,0.321702029381315,-0.807653890420898, + -2.19596999972982e-06,-0.00541002868313351,0.0717610344841811,-0.0757746483461988, + -2.22013973152912e-06,-0.00523378236273958,0.0820565633018825,-0.106343676282173, + -2.24430946332843e-06,-0.00505753604234593,0.0923520921195836,-0.136912704218147, + -2.26847919515549e-06,-0.0048812897219519,0.102647620937285,-0.16748173215412, + -2.29264892703807e-06,-0.00470504340155842,0.112943149754986,-0.198050760090094, + -2.31681865875411e-06,-0.00452879708116427,0.123238678572688,-0.228619788026068, + -2.34098839035912e-06,-0.00435255076077012,0.133534207390389,-0.259188815962042, + -2.36515812246374e-06,-0.00417630444037675,0.14382973620809,-0.289757843898016, + -2.38932785395773e-06,-0.00400005811998239,0.154125265025792,-0.32032687183399, + -2.41349758584031e-06,-0.00382381179958857,0.164420793843493,-0.350895899769964, + -2.43766731800044e-06,-0.00364756547919542,0.174716322661194,-0.381464927705938, + -2.46183704960545e-06,-0.00347131915880117,0.185011851478896,-0.412033955641912, + -2.486006781377e-06,-0.00329507283840691,0.195307380296597,-0.442602983577886, + -2.510176512871e-06,-0.0031188265180131,0.205602909114298,-0.473172011513859, + -2.53434624464255e-06,-0.00294258019761906,0.215898437932,-0.503741039449833, + -2.55851597674717e-06,-0.00276633387722569,0.226193966749701,-0.534310067385807, + -2.58268570851872e-06,-0.0025900875568321,0.236489495567402,-0.564879095321781, + -2.60685544040129e-06,-0.00241384123643806,0.246785024385104,-0.595448123257755, + -2.63102517239489e-06,-0.00223759491604425,0.257080553202805,-0.626017151193729, + -2.65519490338928e-06,-0.00206134859564999,0.267376082020506,-0.656586179129703, + -2.67936463604901e-06,-0.0018851022752564,0.277671610838208,-0.687155207065677, + -2.70353436748749e-06,-0.00170885595486236,0.287967139655909,-0.717724235001651, + -2.72770409881495e-06,-0.00153260963446833,0.29826266847361,-0.748293262937625, + -2.75187383091957e-06,-0.00135636331407429,0.308558197291312,-0.778862290873598, + -2.77604356324623e-06,-0.00118011699368115,0.318853726109013,-0.809431318809572, + -1.59498190127616e-06,-0.00538024907151868,0.0716061772516516,-0.075905160244249, + -1.61008542687302e-06,-0.00521488692176708,0.0818200837016172,-0.10652358344674, + -1.62518895227559e-06,-0.00504952477201526,0.0920339901515828,-0.13714200664923, + -1.64029247781694e-06,-0.00488416262226354,0.102247896601548,-0.167760429851721, + -1.65539600327502e-06,-0.00471880047251194,0.112461803051514,-0.198378853054212, + -1.67049952876086e-06,-0.0045534383227599,0.12267570950148,-0.228997276256702, + -1.68560305413568e-06,-0.00438807617300807,0.132889615951445,-0.259615699459193, + -1.70070657945498e-06,-0.00422271402325602,0.143103522401411,-0.290234122661683, + -1.71581010527389e-06,-0.00405735187350476,0.153317428851377,-0.320852545864174, + -1.73091363042666e-06,-0.0038919897237526,0.163531335301342,-0.351470969066664, + -1.74601715607903e-06,-0.00372662757400111,0.173745241751308,-0.382089392269155, + -1.76112068167589e-06,-0.00356126542424939,0.183959148201273,-0.412707815471646, + -1.77622420693968e-06,-0.00339590327449746,0.194173054651239,-0.443326238674136, + -1.79132773248103e-06,-0.00323054112474552,0.204386961101205,-0.473944661876627, + -1.80643125802238e-06,-0.00306517897499448,0.21460086755117,-0.504563085079118, + -1.82153478323066e-06,-0.00289981682524165,0.224814774001136,-0.535181508281608, + -1.83663830866099e-06,-0.00273445467548994,0.235028680451102,-0.565799931484099, + -1.85174183442438e-06,-0.00256909252573867,0.245242586901067,-0.596418354686589, + -1.86684535963266e-06,-0.00240373037598651,0.255456493351033,-0.62703677788908, + -1.88194888584015e-06,-0.00223836822623591,0.265670399800998,-0.65765520109157, + -1.89705241149252e-06,-0.00207300607648442,0.275884306250963,-0.688273624294061, + -1.91215593681182e-06,-0.00190764392673248,0.286098212700929,-0.718892047496552, + -1.9272594620201e-06,-0.00174228177698055,0.296312119150895,-0.749510470699042, + -1.94236298689532e-06,-0.00157691962722728,0.306526025600861,-0.780128893901533, + -1.95746651276973e-06,-0.00141155747747668,0.316739932050826,-0.810747317104024, + -1.15336946768241e-06,-0.0053585681419499,0.0714923588165568,-0.07600086250191, + -1.16298470706488e-06,-0.00520125136338623,0.081646312938949,-0.106655506452041, + -1.17259994661389e-06,-0.00504393458482266,0.0918002670613413,-0.137310150402173, + -1.18221518596862e-06,-0.00488661780625899,0.101954221183733,-0.167964794352304, + -1.19183042551763e-06,-0.00472930102769553,0.112108175306126,-0.198619438302436, + -1.20144566501112e-06,-0.00457198424913197,0.122262129428518,-0.229274082252567, + -1.21106090422707e-06,-0.00441466747056796,0.13241608355091,-0.259928726202699, + -1.22067614383159e-06,-0.00425735069200461,0.142570037673302,-0.29058337015283, + -1.23029138371367e-06,-0.0041000339134416,0.152723991795694,-0.321238014102962, + -1.23990662248552e-06,-0.00394271713487715,0.162877945918087,-0.351892658053093, + -1.24952186242311e-06,-0.00378540035631425,0.173031900040479,-0.382547302003225, + -1.25913710180559e-06,-0.00362808357775046,0.183185854162871,-0.413201945953356, + -1.26875234129908e-06,-0.00347076679918668,0.193339808285263,-0.443856589903487, + -1.27836758057054e-06,-0.00331345002062311,0.203493762407655,-0.474511233853619, + -1.28798281995302e-06,-0.00315613324205932,0.213647716530048,-0.50516587780375, + -1.29759805955754e-06,-0.00299881646349598,0.223801670652439,-0.535820521753882, + -1.30721329905104e-06,-0.00284149968493219,0.233955624774832,-0.566475165704013, + -1.31682853854453e-06,-0.00268418290636885,0.244109578897224,-0.597129809654145, + -1.32644377803803e-06,-0.00252686612780528,0.254263533019616,-0.627784453604276, + -1.33605901742051e-06,-0.00236954934924194,0.264417487142008,-0.658439097554408, + -1.34567425658094e-06,-0.00221223257067749,0.274571441264401,-0.689093741504539, + -1.35528949651853e-06,-0.00205491579211525,0.284725395386792,-0.719748385454671, + -1.36490473578998e-06,-0.00189759901355124,0.294879349509185,-0.750403029404802, + -1.37451997528348e-06,-0.00174028223498723,0.305033303631577,-0.781057673354934, + -1.38413521466596e-06,-0.00158296545642367,0.315187257753969,-0.811712317305065, + -8.31339066226233e-07,-0.00534286518022409,0.0714093462833771,-0.0760705439261344, + -8.37581454998793e-07,-0.00519144046630249,0.0815195955185766,-0.106751560433651, + -8.43823843854619e-07,-0.005040015752381,0.0916298447537761,-0.137432576941169, + -8.50066232516156e-07,-0.00488859103845918,0.101740093988976,-0.168113593448686, + -8.56308621288715e-07,-0.00473716632453769,0.111850343224175,-0.198794609956203, + -8.62551009950252e-07,-0.00458574161061576,0.121960592459375,-0.22947562646372, + -8.68793398778323e-07,-0.00443431689669427,0.132070841694574,-0.260156642971237, + -8.75035787550882e-07,-0.00428289218277278,0.142181090929774,-0.290837659478754, + -8.81278176323441e-07,-0.00413146746885107,0.152291340164973,-0.321518675986271, + -8.87520564929467e-07,-0.00398004275492903,0.162401589400173,-0.352199692493788, + -8.93762954090604e-07,-0.00382861804100831,0.172511838635372,-0.382880709001305, + -9.00005342585608e-07,-0.00367719332708605,0.182622087870572,-0.413561725508822, + -9.06247731247145e-07,-0.00352576861316445,0.192732337105771,-0.444242742016339, + -9.12490119686638e-07,-0.00337434389924218,0.202842586340971,-0.474923758523856, + -9.1873250862573e-07,-0.00322291918532081,0.212952835576171,-0.505604775031373, + -9.24974897342778e-07,-0.00307149447139921,0.22306308481137,-0.53628579153889, + -9.31217286503916e-07,-0.00292006975747805,0.23317333404657,-0.566966808046407, + -9.37459675220964e-07,-0.00276864504355623,0.243283583281769,-0.597647824553924, + -9.4370206382699e-07,-0.00261722032963463,0.253393832516969,-0.628328841061441, + -9.49944452988127e-07,-0.00246579561571325,0.263504081752168,-0.659009857568958, + -9.56186841483131e-07,-0.00231437090179165,0.273614330987368,-0.689690874076475, + -9.62429230311201e-07,-0.00216294618787005,0.283724580222567,-0.720371890583992, + -9.68671618362116e-07,-0.00201152147394756,0.293834829457767,-0.751052907091509, + -9.74914006746097e-07,-0.00186009676002552,0.303945078692966,-0.781733923599026, + -9.81156396129279e-07,-0.00170867204610481,0.314055327928166,-0.812414940106543, + -4.42445513552936e-05,-0.00829168561266924,0.0913637107697273,-0.0777833820791131, + -4.81678903504479e-05,-0.0076189447664301,0.106626091225949,-0.104400178095791, + -5.20912293454634e-05,-0.00694620392019074,0.121888471682171,-0.131016974112468, + -5.60145683403401e-05,-0.00627346307395116,0.137150852138394,-0.157633770129146, + -5.99379073354389e-05,-0.00560072222771202,0.152413232594616,-0.184250566145823, + -6.38612463303989e-05,-0.00492798138147266,0.167675613050838,-0.210867362162501, + -6.77845853253034e-05,-0.0042552405352333,0.18293799350706,-0.237484158179178, + -7.17079243202079e-05,-0.00358249968899371,0.198200373963282,-0.264100954195856, + -7.56312633155565e-05,-0.00290975884275468,0.213462754419504,-0.290717750212533, + -7.95546023104055e-05,-0.00223701799651543,0.228725134875726,-0.317334546229211, + -8.3477941305421e-05,-0.00156427715027618,0.243987515331948,-0.343951342245889, + -8.74012803005475e-05,-0.000891536304036933,0.25924989578817,-0.370568138262566, + -9.13246192953965e-05,-0.000218795457797238,0.274512276244393,-0.397184934279244, + -9.52479582900789e-05,0.000453945388442678,0.289774656700615,-0.423801730295921, + -9.91712972855385e-05,0.00112668623468104,0.305037037156836,-0.450418526312599, + -0.000103094636279999,0.0017994270809214,0.320299417613059,-0.477035322329276, + -0.000107017975275681,0.00247216792715999,0.335561798069281,-0.503652118345954, + -0.000110941314270363,0.00314490877339968,0.350824178525503,-0.530268914362631, + -0.000114864653265156,0.00381764961963915,0.366086558981725,-0.556885710379309, + -0.000118787992260061,0.0044903904658784,0.381348939437947,-0.583502506395986, + -0.000122711331255299,0.0051631313121181,0.39661131989417,-0.610119302412664, + -0.000126634670250536,0.00583587215835646,0.411873700350391,-0.636736098429341, + -0.000130558009245441,0.00650861300459571,0.427136080806613,-0.663352894446019, + -0.000134481348240789,0.00718135385083452,0.442398461262835,-0.689969690462697, + -0.000138404687234917,0.0078540946970751,0.457660841719058,-0.716586486479374, + -4.39774573719187e-05,-0.00826637447153794,0.0912927069884302,-0.0778555991839324, + -4.78572041406056e-05,-0.00759549191827702,0.106521831821564,-0.104495630683952, + -5.17369509092924e-05,-0.00692460936501615,0.121750956654699,-0.131135662183971, + -5.56166976781458e-05,-0.00625372681175529,0.136980081487833,-0.15777569368399, + -5.94964444469714e-05,-0.00558284425849453,0.152209206320967,-0.18441572518401, + -6.33761912157693e-05,-0.00491196170523378,0.167438331154101,-0.211055756684029, + -6.72559379843451e-05,-0.00424107915197269,0.182667455987236,-0.237695788184048, + -7.11356847533651e-05,-0.00357019659871216,0.19789658082037,-0.264335819684067, + -7.50154315221074e-05,-0.00289931404545118,0.213125705653504,-0.290975851184087, + -7.88951782908498e-05,-0.00222843149219032,0.228354830486639,-0.317615882684106, + -8.27749250594811e-05,-0.00155754893892945,0.243583955319773,-0.344255914184125, + -8.66546718284456e-05,-0.000886666385668589,0.258813080152907,-0.370895945684145, + -9.0534418597521e-05,-0.000215783832408389,0.274042204986041,-0.397535977184164, + -9.44141653657082e-05,0.000455098720853586,0.289271329819176,-0.424176008684183, + -9.82939121345616e-05,0.00112598127411401,0.30450045465231,-0.450816040184203, + -0.000102173658903748,0.00179686382737465,0.319729579485444,-0.477456071684222, + -0.000106053405672046,0.00246774638063596,0.334958704318579,-0.504096103184241, + -0.0001099331524409,0.00313862893389683,0.350187829151713,-0.53073613468426, + -0.000113812899210086,0.00380951148715702,0.365416953984847,-0.55737616618428, + -0.000117692645978607,0.00448039404041811,0.380646078817981,-0.584016197684299, + -0.000121572392747349,0.00515127659367876,0.395875203651115,-0.610656229184318, + -0.000125452139515314,0.00582215914694073,0.41110432848425,-0.637296260684337, + -0.000129331886285278,0.00649304170020049,0.426333453317384,-0.663936292184357, + -0.000133211633053909,0.00716392425346113,0.441562578150518,-0.690576323684376, + -0.000137091379821763,0.0078348068067231,0.456791702983653,-0.717216355184395, + -4.36091194501165e-05,-0.00823161628614266,0.091194734657373,-0.0779550620272648, + -4.74291090190593e-05,-0.00756332910621127,0.106377999241316,-0.10462709518735, + -5.12490985878911e-05,-0.00689504192627988,0.121561263825259,-0.131299128347435, + -5.50690881565841e-05,-0.00622675474634815,0.136744528409202,-0.15797116150752, + -5.88890777253881e-05,-0.00555846756641643,0.151927792993146,-0.184643194667606, + -6.27090672943309e-05,-0.00489018038648525,0.167111057577089,-0.211315227827691, + -6.65290568632737e-05,-0.00422189320655386,0.182294322161032,-0.237987260987776, + -7.03490464321055e-05,-0.00355360602662225,0.197477586744975,-0.264659294147861, + -7.41690360009928e-05,-0.00288531884669085,0.212660851328918,-0.291331327307946, + -7.7989025569547e-05,-0.00221703166675891,0.227844115912861,-0.318003360468031, + -8.18090151385453e-05,-0.00154874448682762,0.243027380496804,-0.344675393628117, + -8.56290047071551e-05,-0.000880457306895899,0.258210645080748,-0.371347426788202, + -8.94489942764309e-05,-0.000212170126965283,0.27339390966469,-0.398019459948287, + -9.32689838448741e-05,0.000456117052966887,0.288577174248634,-0.424691493108372, + -9.70889734138725e-05,0.00112440423289839,0.303760438832577,-0.451363526268457, + -0.000100908962982316,0.00179269141283012,0.31894370341652,-0.478035559428543, + -0.000104728952551425,0.0024609785927614,0.334126968000463,-0.504707592588628, + -0.000108548942120423,0.00312926577269268,0.349310232584406,-0.531379625748713, + -0.000112368931688978,0.00379755295262463,0.364493497168349,-0.558051658908798, + -0.000116188921258087,0.00446584013255524,0.379676761752292,-0.584723692068883, + -0.00012000891082653,0.00513412731248808,0.394860026336236,-0.611395725228968, + -0.00012382890039575,0.00580241449241869,0.410043290920179,-0.638067758389054, + -0.000127648889964527,0.00647070167234975,0.425226555504121,-0.664739791549139, + -0.000131468879533081,0.0071389888522817,0.440409820088065,-0.691411824709224, + -0.000135288869101968,0.00780727603221365,0.455593084672008,-0.718083857869309, + -4.3103981690551e-05,-0.00818422557750659,0.0910602743446279,-0.078091223542111, + -4.68426985407444e-05,-0.00751955902889478,0.106180648528959,-0.10480706597173, + -5.05814153909656e-05,-0.00685489248028326,0.12130102271329,-0.131522908401349, + -5.43201322412978e-05,-0.00619022593167173,0.136421396897621,-0.158238750830968, + -5.80588490916023e-05,-0.00552555938305999,0.151541771081952,-0.184954593260587, + -6.17975659417125e-05,-0.00486089283444835,0.166662145266282,-0.211670435690206, + -6.55362827922112e-05,-0.00419622628583705,0.181782519450613,-0.238386278119826, + -6.92749996424324e-05,-0.00353155973722541,0.196902893634944,-0.265102120549445, + -7.30137164928202e-05,-0.00286689318861377,0.212023267819275,-0.291817962979064, + -7.67524333427083e-05,-0.00220222664000191,0.227143642003606,-0.318533805408683, + -8.04911501930961e-05,-0.0015375600913905,0.242264016187936,-0.345249647838302, + -8.42298670430397e-05,-0.000872893542778419,0.257384390372268,-0.371965490267921, + -8.7968583893816e-05,-0.000208226994167227,0.272504764556599,-0.39868133269754, + -9.17073007439262e-05,0.000456439554444632,0.287625138740929,-0.425397175127159, + -9.54460175939253e-05,0.00112110610305649,0.30274551292526,-0.452113017556778, + -9.91847344442576e-05,0.00178577265166791,0.317865887109591,-0.478828859986398, + -0.000102923451294479,0.00245043920027954,0.332986261293922,-0.505544702416017, + -0.000106662168144922,0.00311510574889118,0.348106635478253,-0.532260544845636, + -0.000110400884995254,0.00377977229750237,0.363227009662583,-0.558976387275255, + -0.000114139601845475,0.00444443884611445,0.378347383846915,-0.585692229704874, + -0.000117878318695475,0.00510910539472587,0.393467758031245,-0.612408072134493, + -0.000121617035545918,0.00577377194333772,0.408588132215576,-0.639123914564112, + -0.000125355752395917,0.00643843849194914,0.423708506399907,-0.665839756993731, + -0.00012909446924636,0.00710310504056055,0.438828880584238,-0.69255559942335, + -0.000132833186096248,0.00776777158917241,0.453949254768569,-0.71927144185297, + -4.24165047226421e-05,-0.00812023932709,0.0908770912732962,-0.0782760887561202, + -4.60458757737259e-05,-0.00746061366440209,0.105911877835496,-0.105051410620858, + -4.96752468248096e-05,-0.00680098800171414,0.120946664397695,-0.131826732485596, + -5.33046178758378e-05,-0.00614136233902618,0.135981450959895,-0.158602054350334, + -5.69339889267551e-05,-0.005481736676338,0.151016237522094,-0.185377376215072, + -6.05633599780053e-05,-0.00482211101365038,0.166051024084293,-0.21215269807981, + -6.4192731028867e-05,-0.00416248535096231,0.181085810646493,-0.238928019944548, + -6.78221020800063e-05,-0.00350285968827435,0.196120597208692,-0.265703341809286, + -7.14514731309235e-05,-0.00284323402558639,0.211155383770892,-0.292478663674024, + -7.50808441821738e-05,-0.00218360836289855,0.226190170333091,-0.319253985538762, + -7.87102152332575e-05,-0.00152398270021092,0.24122495689529,-0.3460293074035, + -8.23395862839527e-05,-0.000864357037522412,0.25625974345749,-0.372804629268238, + -8.59689573354805e-05,-0.00020473137483501,0.271294530019689,-0.399579951132976, + -8.95983283857316e-05,0.000454894287853946,0.286329316581889,-0.426355272997714, + -9.32276994374259e-05,0.00111451995054113,0.301364103144088,-0.453130594862452, + -9.68570704880101e-05,0.00177414561322942,0.316398889706287,-0.47990591672719, + -0.00010048644153926,0.00243377127591748,0.331433676268487,-0.506681238591928, + -0.000104115812590289,0.00309339693860511,0.346468462830686,-0.533456560456666, + -0.000107745183640984,0.0037530226012934,0.361503249392886,-0.560231882321404, + -0.000111374554692456,0.00441264826398102,0.376538035955085,-0.587007204186142, + -0.000115003925743262,0.00507227392666953,0.391572822517285,-0.61378252605088, + -0.000118633296794401,0.00573189958935716,0.406607609079484,-0.640557847915618, + -0.000122262667845541,0.00639152525204523,0.421642395641684,-0.667333169780356, + -0.000125892038896347,0.0070511509147333,0.436677182203883,-0.694108491645094, + -0.00012952140994793,0.00771077657742003,0.451711968766082,-0.720883813509833, + -4.14905306511115e-05,-0.00803497930851171,0.0906300224053497,-0.078524279428037, + -4.49749343499617e-05,-0.00738234814739813,0.105549537680614,-0.105379455369414, + -4.84593380489229e-05,-0.00672971698628466,0.120469052955878,-0.132234631310791, + -5.19437417477175e-05,-0.00607708582517108,0.135388568231143,-0.159089807252168, + -5.54281454466232e-05,-0.0054244546640575,0.150308083506407,-0.185944983193545, + -5.89125491455289e-05,-0.00477182350294414,0.165227598781671,-0.212800159134922, + -6.23969528445456e-05,-0.00411919234183078,0.180147114056936,-0.239655335076299, + -6.58813565431182e-05,-0.00346656118071664,0.1950666293322,-0.266510511017676, + -6.93657602419684e-05,-0.00281393001960306,0.209986144607464,-0.293365686959053, + -7.2850163940763e-05,-0.00216129885848959,0.224905659882729,-0.320220862900431, + -7.63345676396132e-05,-0.0015086676973759,0.239825175157993,-0.347076038841807, + -7.98189713385189e-05,-0.000856036536262428,0.254744690433257,-0.373931214783185, + -8.33033750378132e-05,-0.000203405375149623,0.269664205708521,-0.400786390724562, + -8.67877787363858e-05,0.000449225785964513,0.284583720983786,-0.427641566665939, + -9.02721824354025e-05,0.00110185694707776,0.29950323625905,-0.454496742607316, + -9.37565861341971e-05,0.00175448810819145,0.314422751534315,-0.481351918548693, + -9.72409898332138e-05,0.00240711926930492,0.329342266809579,-0.50820709449007, + -0.000100725393532008,0.00305975043041884,0.344261782084843,-0.535062270431447, + -0.000104209797230914,0.00371238159153187,0.359181297360107,-0.561917446372824, + -0.000107694200929487,0.004365012752646,0.374100812635372,-0.588772622314201, + -0.000111178604628392,0.00501764391375925,0.389020327910636,-0.615627798255578, + -0.000114663008327742,0.00567027507487206,0.4039398431859,-0.642482974196955, + -0.000118147412026204,0.00632290623598708,0.418859358461166,-0.669338150138332, + -0.000121631815725332,0.00697553739709988,0.433778873736429,-0.69619332607971, + -0.000125116219423349,0.00762816855821447,0.448698389011694,-0.723048502021087, + -4.02606149702278e-05,-0.00792335697679852,0.0903012669809651,-0.0788525176998919, + -4.35565936896254e-05,-0.00728037590829322,0.105067689406134,-0.105813302622921, + -4.68525724090507e-05,-0.00663739483978809,0.119834111831304,-0.132774087545949, + -5.01485511282818e-05,-0.00599441377128263,0.134600534256473,-0.159734872468978, + -5.34445298475128e-05,-0.00535143270277716,0.149366956681643,-0.186695657392007, + -5.67405085671879e-05,-0.00470845163427203,0.164133379106812,-0.213656442315036, + -6.00364872863079e-05,-0.00406547056576656,0.178899801531981,-0.240617227238064, + -6.333246600565e-05,-0.00342248949726132,0.19366622395715,-0.267578012161093, + -6.66284447251586e-05,-0.00277950842875585,0.20843264638232,-0.294538797084122, + -6.99244234446117e-05,-0.00213652736025094,0.223199068807489,-0.321499582007151, + -7.32204021637872e-05,-0.00149354629174536,0.237965491232659,-0.348460366930179, + -7.65163808830738e-05,-0.000850565223240007,0.252731913657828,-0.375421151853208, + -7.98123596028599e-05,-0.000207584154735319,0.267498336082997,-0.402381936776237, + -8.31083383215914e-05,0.000435396913771147,0.282264758508167,-0.429342721699265, + -8.64043170409889e-05,0.0010783779822765,0.297031180933336,-0.456303506622294, + -8.97002957606086e-05,0.00172135905078119,0.311797603358505,-0.483264291545323, + -9.29962744797841e-05,0.00236434011928655,0.326564025783675,-0.510225076468352, + -9.62922531992927e-05,0.0030073211877919,0.341330448208844,-0.53718586139138, + -9.95882319184682e-05,0.00365030225629703,0.356096870634013,-0.564146646314409, + -0.000102884210638421,0.00429328332480194,0.370863293059183,-0.591107431237438, + -0.000106180189357707,0.00493626439330752,0.385629715484352,-0.618068216160466, + -0.000109476168076772,0.0055792454618131,0.400396137909521,-0.645029001083495, + -0.000112772146795614,0.00622222653031912,0.415162560334691,-0.671989786006524, + -0.000116068125515345,0.00686520759882381,0.42992898275986,-0.698950570929553, + -0.000119364104235298,0.0075081886673285,0.444695405185029,-0.725911355852581, + -3.86569647305435e-05,-0.00778056098095492,0.0898716229858205,-0.0792780987456773, + -4.17143859098856e-05,-0.00715077028090649,0.104438459646998,-0.106375812188959, + -4.47718070892278e-05,-0.00652097958085796,0.119005296308177,-0.133473525632242, + -4.78292282686532e-05,-0.00589118888080975,0.133572132969354,-0.160571239075524, + -5.08866494480786e-05,-0.00526139818076155,0.148138969630532,-0.187668952518806, + -5.39440706273653e-05,-0.00463160748071312,0.16270580629171,-0.214766665962088, + -5.70014918070405e-05,-0.0040018167806648,0.177272642952888,-0.24186437940537, + -6.00589129863827e-05,-0.00337202608061649,0.191839479614066,-0.268962092848653, + -6.31163341656693e-05,-0.00274223538056817,0.206406316275244,-0.296059806291935, + -6.61737553447894e-05,-0.00211244468051919,0.220973152936422,-0.323157519735217, + -6.92311765241871e-05,-0.00148265398047109,0.2355399895976,-0.350255233178499, + -7.22885977036958e-05,-0.000852863280422778,0.250106826258778,-0.377352946621781, + -7.53460188829269e-05,-0.000223072580374017,0.264673662919956,-0.404450660065063, + -7.84034400623801e-05,0.000406718119674077,0.279240499581134,-0.431548373508346, + -8.14608612416112e-05,0.00103650881972239,0.293807336242312,-0.458646086951628, + -8.45182824206203e-05,0.00166629951977137,0.30837417290349,-0.48574380039491, + -8.75757036007396e-05,0.0022960902198188,0.322941009564668,-0.512841513838192, + -9.06331247799708e-05,0.00292588091986756,0.337507846225846,-0.539939227281474, + -9.36905459594239e-05,0.00355567161991521,0.352074682887023,-0.567036940724757, + -9.67479671386551e-05,0.00418546231996419,0.366641519548202,-0.594134654168039, + -9.98053883176642e-05,0.00481525302001318,0.38120835620938,-0.621232367611321, + -0.000102862809497561,0.00544504372006127,0.395775192870558,-0.648330081054603, + -0.000105920230676571,0.00607483442010981,0.410342029531736,-0.675427794497885, + -0.000108977651856024,0.00670462512015879,0.424908866192914,-0.702525507941168, + -0.000112035073035144,0.00733441582020689,0.439475702854092,-0.72962322138445, + -3.66157987935489e-05,-0.0076032241914849,0.08932318112222,-0.0798159268761991, + -3.93813574805502e-05,-0.00699120007977883,0.103636028336712,-0.107086683763949, + -4.21469161677457e-05,-0.00637917596807303,0.117948875551203,-0.1343574406517, + -4.49124748545804e-05,-0.00576715185636689,0.132261722765694,-0.16162819753945, + -4.76780335414984e-05,-0.00515512774466043,0.146574569980186,-0.1888989544272, + -5.04435922285551e-05,-0.00454310363295463,0.160887417194678,-0.216169711314951, + -5.32091509157229e-05,-0.00393107952124849,0.175200264409169,-0.243440468202701, + -5.59747096028351e-05,-0.00331905540954269,0.189513111623661,-0.270711225090451, + -5.87402682897809e-05,-0.00270703129783656,0.203825958838152,-0.297981981978201, + -6.15058269768931e-05,-0.00209500718613054,0.218138806052644,-0.325252738865952, + -6.42713856636723e-05,-0.00148298307442429,0.232451653267135,-0.352523495753702, + -6.7036944350618e-05,-0.000870958962717827,0.246764500481627,-0.379794252641452, + -6.98025030380078e-05,-0.000258934851012471,0.261077347696118,-0.407065009529203, + -7.25680617252866e-05,0.000353089260693107,0.27539019491061,-0.434335766416953, + -7.53336204118993e-05,0.000965113372399795,0.289703042125101,-0.461606523304703, + -7.8099179098956e-05,0.00157713748410537,0.304015889339593,-0.488877280192453, + -8.08647377865679e-05,0.0021891615958114,0.318328736554085,-0.516148037080204, + -8.36302964734026e-05,0.0028011857075172,0.332641583768576,-0.543418793967954, + -8.63958551602373e-05,0.00341320981922344,0.346954430983067,-0.570689550855704, + -8.91614138475161e-05,0.00402523393092924,0.361267278197559,-0.597960307743455, + -9.19269725347949e-05,0.00463725804263548,0.375580125412051,-0.625231064631205, + -9.46925312212965e-05,0.00524928215434128,0.389892972626541,-0.652501821518955, + -9.74580899089084e-05,0.00586130626604708,0.404205819841033,-0.679772578406705, + -0.000100223648595188,0.00647333037775422,0.418518667055525,-0.707043335294456, + -0.000102989207282578,0.00708535448945957,0.432831514270016,-0.734314092182206, + -3.40960517092037e-05,-0.00739098692626106,0.0886437839778648,-0.0804740146847633, + -3.65197484325508e-05,-0.00680237154852958,0.102643171415431,-0.107956507952026, + -3.89434451558979e-05,-0.00621375617079811,0.116642558852997,-0.135439001219288, + -4.13671418791617e-05,-0.00562514079306653,0.130641946290562,-0.16292149448655, + -4.37908386024533e-05,-0.00503652541533495,0.144641333728128,-0.190403987753812, + -4.62145353260501e-05,-0.00444791003760392,0.158640721165694,-0.217886481021075, + -4.86382320492584e-05,-0.00385929465987234,0.17264010860326,-0.245368974288337, + -5.10619287727443e-05,-0.00327067928214098,0.186639496040826,-0.272851467555599, + -5.34856254961191e-05,-0.00268206390440939,0.200638883478392,-0.300333960822862, + -5.59093222192719e-05,-0.0020934485266777,0.214638270915958,-0.327816454090124, + -5.83330189428688e-05,-0.00150483314894667,0.228637658353523,-0.355298947357386, + -6.07567156661326e-05,-0.0009162177712152,0.242637045791089,-0.382781440624649, + -6.31804123895074e-05,-0.000327602393483728,0.256636433228655,-0.410263933891911, + -6.56041091128268e-05,0.000261012984247744,0.270635820666221,-0.437746427159173, + -6.8027805835702e-05,0.00084962836197966,0.284635208103787,-0.465228920426436, + -7.04515025593544e-05,0.00143824373971069,0.298634595541352,-0.492711413693698, + -7.28751992826737e-05,0.00202685911744238,0.312633982978918,-0.52019390696096, + -7.52988960062151e-05,0.00261547449517363,0.326633370416484,-0.547676400228222, + -7.77225927294234e-05,0.00320408987290555,0.34063275785405,-0.575158893495485, + -8.01462894525207e-05,0.0037927052506368,0.354632145291616,-0.602641386762747, + -8.2569986176062e-05,0.00438132062836827,0.368631532729182,-0.630123880030009, + -8.49936828991593e-05,0.00496993600609974,0.382630920166747,-0.657606373297272, + -8.74173796228117e-05,0.00555855138383121,0.396630307604314,-0.685088866564534, + -8.98410763465751e-05,0.00614716676156224,0.410629695041879,-0.712571359831796, + -9.22647730693393e-05,0.00673578213929416,0.424629082479445,-0.740053853099059, + -3.11005306776468e-05,-0.00714803056391161,0.0878328342118803,-0.0812481718479604, + -3.31447504075266e-05,-0.00658930953292436,0.101459703410679,-0.108979746214698, + -3.51889701373231e-05,-0.00603058850193694,0.115086572609478,-0.136711320581436, + -3.72331898670919e-05,-0.00547186747094963,0.128713441808277,-0.164442894948174, + -3.92774095969717e-05,-0.00491314643996243,0.142340311007076,-0.192174469314912, + -4.1321629326796e-05,-0.00435442540897513,0.155967180205875,-0.21990604368165, + -4.33658490568423e-05,-0.00379570437798804,0.169594049404674,-0.247637618048388, + -4.5410068786389e-05,-0.00323698334700051,0.183220918603473,-0.275369192415125, + -4.74542885163798e-05,-0.00267826231601331,0.196847787802272,-0.303100766781863, + -4.9498508246093e-05,-0.00211954128502612,0.210474657001071,-0.330832341148601, + -5.15427279760283e-05,-0.0015608202540387,0.22410152619987,-0.358563915515339, + -5.35869477056861e-05,-0.00100209922305128,0.237728395398669,-0.386295489882077, + -5.56311674355658e-05,-0.000443378192063859,0.251355264597468,-0.414027064248815, + -5.76753871652791e-05,0.000115342838923338,0.264982133796267,-0.441758638615552, + -5.97196068954364e-05,0.000674063869910313,0.278609002995066,-0.46949021298229, + -6.17638266248166e-05,0.00123278490089818,0.292235872193865,-0.497221787349028, + -6.38080463548629e-05,0.00179150593188493,0.305862741392663,-0.524953361715766, + -6.58522660846872e-05,0.00235022696287257,0.319489610591463,-0.552684936082504, + -6.78964858144004e-05,0.00290894799385999,0.333116479790262,-0.580416510449242, + -6.99407055446688e-05,0.00346766902484674,0.346743348989061,-0.60814808481598, + -7.1984925274271e-05,0.00402639005583438,0.360370218187859,-0.635879659182717, + -7.40291450042063e-05,0.00458511108682114,0.373997087386658,-0.663611233549455, + -7.60733647344747e-05,0.00514383211780833,0.387623956585457,-0.691342807916193, + -7.81175844636328e-05,0.00570255314879642,0.401250825784256,-0.719074382282931, + -8.01618041933461e-05,0.00626127417978362,0.414877694983055,-0.746805956649669, + -2.76949814652927e-05,-0.0068837960383844,0.0869067615619287,-0.0821177985406446, + -2.93440439205483e-05,-0.00636170187866747,0.100110309829948,-0.110129170838661, + -3.09931063758595e-05,-0.00583960771895042,0.113313858097968,-0.138140543136678, + -3.26421688311707e-05,-0.00531751355923349,0.126517406365987,-0.166151915434694, + -3.42912312864541e-05,-0.00479541939951644,0.139720954634006,-0.194163287732711, + -3.59402937417097e-05,-0.00427332523979951,0.152924502902026,-0.222174660030727, + -3.75893561969098e-05,-0.00375123108008224,0.166128051170045,-0.250186032328744, + -3.9238418652221e-05,-0.00322913692036531,0.179331599438065,-0.27819740462676, + -4.08874811077542e-05,-0.00270704276064881,0.192535147706084,-0.306208776924777, + -4.25365435630654e-05,-0.00218494860093177,0.205738695974104,-0.334220149222793, + -4.4185606018321e-05,-0.0016628544412145,0.218942244242123,-0.36223152152081, + -4.58346684737987e-05,-0.00114076028149812,0.232145792510142,-0.390242893818826, + -4.74837309288878e-05,-0.000618666121780853,0.245349340778162,-0.418254266116843, + -4.91327933841434e-05,-9.65719620635852e-05,0.258552889046181,-0.446265638414859, + -5.07818558396211e-05,0.000425522197653017,0.271756437314201,-0.474277010712876, + -5.24309182947658e-05,0.000947616357370284,0.28495998558222,-0.502288383010892, + -5.40799807499104e-05,0.00146971051708711,0.29816353385024,-0.530299755308909, + -5.57290432052771e-05,0.00199180467680393,0.311367082118259,-0.558311127606925, + -5.73781056603107e-05,0.00251389883652142,0.324570630386279,-0.586322499904942, + -5.90271681160104e-05,0.0030359929962378,0.337774178654298,-0.614333872202958, + -6.0676230571266e-05,0.00355808715595529,0.350977726922318,-0.642345244500975, + -6.23252930266327e-05,0.00408018131567189,0.364181275190337,-0.670356616798991, + -6.39743554813332e-05,0.00460227547538938,0.377384823458356,-0.698367989097008, + -6.56234179374771e-05,0.00512436963510554,0.390588371726375,-0.726379361395024, + -6.72724803927327e-05,0.00564646379482259,0.403791919994395,-0.754390733693041, + -2.40145463735741e-05,-0.00661209284973829,0.0859012639790929,-0.0830454532095383, + -2.52809823776956e-05,-0.00613263163969541,0.0986475716772185,-0.111355293642768, + -2.65474183817893e-05,-0.0056531704296523,0.111393879375344,-0.139665134075998, + -2.78138543860496e-05,-0.00517370921960947,0.12414018707347,-0.167974974509229, + -2.908029039006e-05,-0.00469424800956642,0.136886494771596,-0.196284814942459, + -3.03467263941815e-05,-0.00421478679952358,0.149632802469721,-0.224594655375689, + -3.16131623983029e-05,-0.00373532558948075,0.162379110167847,-0.252904495808919, + -3.28795984025354e-05,-0.00325586437943781,0.175125417865972,-0.281214336242149, + -3.41460344065458e-05,-0.00277640316939487,0.187871725564098,-0.309524176675379, + -3.54124704106673e-05,-0.00229694195935215,0.200618033262223,-0.337834017108609, + -3.66789064148443e-05,-0.00181748074930899,0.213364340960349,-0.366143857541839, + -3.79453424189102e-05,-0.00133801953926604,0.226110648658475,-0.39445369797507, + -3.92117784225876e-05,-0.000858558329222436,0.238856956356601,-0.4227635384083, + -4.04782144269866e-05,-0.000379097119180161,0.251603264054726,-0.45107337884153, + -4.17446504310526e-05,0.000100364090863003,0.264349571752852,-0.47938321927476, + -4.30110864354516e-05,0.000579825300905501,0.277095879450977,-0.50769305970799, + -4.42775224396286e-05,0.00105928651094844,0.289842187149103,-0.53600290014122, + -4.55439584438055e-05,0.00153874772099138,0.302588494847228,-0.56431274057445, + -4.68103944477605e-05,0.00201820893103477,0.315334802545354,-0.59262258100768, + -4.80768304516044e-05,0.00249767014107771,0.32808111024348,-0.62093242144091, + -4.93432664563365e-05,0.00297713135111977,0.340827417941605,-0.64924226187414, + -5.06097024595142e-05,0.00345659256116404,0.353573725639731,-0.677552102307371, + -5.18761384643573e-05,0.00393605377120609,0.366320033337856,-0.705861942740601, + -5.31425744684233e-05,0.00441551498124904,0.379066341035982,-0.734171783173831, + -5.44090104721562e-05,0.00489497619129242,0.391812648734108,-0.762481623607061, + -2.024860122668e-05,-0.00634846484767609,0.0848676598048198,-0.0839820054716886, + -2.1172586532503e-05,-0.00591578612376553,0.0971464011409162,-0.11259317679516, + -2.20965718385202e-05,-0.00548310739985514,0.109425142477013,-0.141204348118631, + -2.30205571442599e-05,-0.00505042867594441,0.121703883813109,-0.169815519442102, + -2.39445424501938e-05,-0.0046177499520339,0.133982625149205,-0.198426690765574, + -2.48685277561833e-05,-0.0041850712281235,0.146261366485302,-0.227037862089045, + -2.57925130618952e-05,-0.00375239250421255,0.158540107821398,-0.255649033412516, + -2.67164983678292e-05,-0.00331971378030227,0.170818849157494,-0.284260204735988, + -2.76404836739297e-05,-0.0028870350563921,0.183097590493591,-0.312871376059459, + -2.85644689798081e-05,-0.00245435633248103,0.195376331829687,-0.34148254738293, + -2.948845428552e-05,-0.00202167760857042,0.207655073165784,-0.370093718706401, + -3.04124395913985e-05,-0.00158899888466024,0.21993381450188,-0.398704890029873, + -3.13364248972769e-05,-0.00115632016074962,0.232212555837976,-0.427316061353344, + -3.22604102030999e-05,-0.000723641436839007,0.244491297174073,-0.455927232676815, + -3.31843955089228e-05,-0.000290962712928167,0.256770038510169,-0.484538404000286, + -3.41083808149678e-05,0.000141716010982007,0.269048779846266,-0.513149575323758, + -3.50323661209018e-05,0.000574394734892403,0.281327521182362,-0.541760746647229, + -3.59563514263916e-05,0.00100707345880346,0.293606262518458,-0.5703719179707, + -3.68803367324366e-05,0.00143975218271386,0.305885003854555,-0.598983089294172, + -3.78043220388147e-05,0.00187243090662337,0.31816374519065,-0.627594260617643, + -3.87283073436384e-05,0.00230510963053554,0.330442486526747,-0.656205431941114, + -3.96522926497944e-05,0.00273778835444594,0.342721227862844,-0.684816603264585, + -4.05762779555063e-05,0.00317046707835678,0.354999969198941,-0.713427774588056, + -4.15002632626615e-05,0.0036031458022654,0.367278710535036,-0.742038945911528, + -4.24242485678183e-05,0.00403582452617757,0.379557451871134,-0.770650117234999, + -1.66046072638815e-05,-0.00610674845149206,0.0838632239709511,-0.0848764364913305, + -1.72458415884369e-05,-0.0057222667830471,0.0956898557338712,-0.11377538641115, + -1.78870759132144e-05,-0.00533778511460259,0.107516487496791,-0.142674336330969, + -1.85283102375478e-05,-0.00495330344615741,0.119343119259711,-0.171573286250788, + -1.91695445621587e-05,-0.00456882177771267,0.131169751022631,-0.200472236170607, + -1.98107788866309e-05,-0.0041843401092676,0.142996382785551,-0.229371186090426, + -2.04520132112695e-05,-0.00379985844082287,0.154823014548471,-0.258270136010245, + -2.10932475357417e-05,-0.0034153767723778,0.166649646311391,-0.287169085930064, + -2.1734481860658e-05,-0.00303089510393328,0.178476278074311,-0.316068035849883, + -2.23757161850746e-05,-0.00264641343548822,0.190302909837231,-0.344966985769702, + -2.30169505094913e-05,-0.00226193176704315,0.202129541600151,-0.373865935689521, + -2.3658184834241e-05,-0.00187745009859852,0.213956173363071,-0.40276488560934, + -2.42994191586021e-05,-0.00149296843015323,0.225782805125991,-0.431663835529159, + -2.49406534835739e-05,-0.00110848676170927,0.23760943688891,-0.460562785448978, + -2.55818878076575e-05,-0.000724005093263758,0.24943606865183,-0.489461735368798, + -2.62231221324072e-05,-0.000339523424818688,0.261262700414751,-0.518360685288616, + -2.68643564570459e-05,4.49582436257145e-05,0.27308933217767,-0.547259635208436, + -2.75055907817956e-05,0.00042943991207034,0.28491596394059,-0.576158585128255, + -2.81468251061012e-05,0.000813921580515409,0.29674259570351,-0.605057535048074, + -2.87880594307399e-05,0.00119840324896048,0.30856922746643,-0.633956484967893, + -2.94292937557117e-05,0.0015828849174051,0.32039585922935,-0.662855434887712, + -3.00705280801283e-05,0.00196736658584973,0.33222249099227,-0.691754384807531, + -3.0711762404656e-05,0.0023518482542948,0.34404912275519,-0.72065333472735, + -3.13529967286286e-05,0.00273632992274031,0.35587575451811,-0.749552284647169, + -3.19942310532673e-05,0.00312081159118538,0.36770238628103,-0.778451234566988, + -1.32643123506859e-05,-0.00589635286828044,0.0829389981464266,-0.0856864416886958, + -1.36895836624906e-05,-0.00555849310559758,0.0943514979743686,-0.114846006629252, + -1.41148549741288e-05,-0.00522063334291434,0.105763997802311,-0.144005571569809, + -1.45401262860168e-05,-0.00488277358023126,0.117176497630253,-0.173165136510365, + -1.49653975977104e-05,-0.00454491381754829,0.128588997458195,-0.202324701450922, + -1.53906689097094e-05,-0.00420705405486566,0.140001497286137,-0.231484266391479, + -1.58159402214308e-05,-0.00386919429218235,0.151413997114079,-0.260643831332035, + -1.62412115330968e-05,-0.00353133452949927,0.162826496942022,-0.289803396272592, + -1.66664828447627e-05,-0.00319347476681631,0.174238996769964,-0.318962961213148, + -1.70917541563731e-05,-0.00285561500413323,0.185651496597906,-0.348122526153705, + -1.75170254682055e-05,-0.00251775524144993,0.197063996425848,-0.377282091094261, + -1.79422967802045e-05,-0.00217989547876729,0.20847649625379,-0.406441656034818, + -1.8367568092037e-05,-0.00184203571608421,0.219888996081732,-0.435601220975374, + -1.87928394033143e-05,-0.00150417595340047,0.231301495909675,-0.464760785915931, + -1.92181107154799e-05,-0.00116631619071805,0.242713995737617,-0.493920350856488, + -1.96433820269792e-05,-0.000828456428034752,0.254126495565559,-0.523079915797044, + -2.00686533391448e-05,-0.000490596665352339,0.265538995393501,-0.552239480737601, + -2.04939246503111e-05,-0.000152736902668593,0.276951495221443,-0.581399045678157, + -2.09191959623656e-05,0.000185122860014042,0.288363995049385,-0.610558610618714, + -2.1344467273976e-05,0.000522982622697121,0.299776494877327,-0.63971817555927, + -2.17697385852533e-05,0.000860842385380867,0.311188994705269,-0.668877740499827, + -2.21950098975299e-05,0.00119870214806284,0.322601494533211,-0.698037305440383, + -2.26202812092513e-05,0.00153656191074658,0.334013994361154,-0.72719687038094, + -2.30455525206397e-05,0.00187442167343033,0.345426494189096,-0.756356435321496, + -2.34708238334713e-05,0.00221228143611096,0.356838994017037,-0.785516000262053, + -1.03507837654337e-05,-0.00572130633451018,0.0821302691350132,-0.0863854481388437, + -1.06223777410486e-05,-0.0054259575270364,0.0931817986578394,-0.115769914822122, + -1.08939717166356e-05,-0.0051306087195625,0.104233328180666,-0.1451543815054, + -1.11655656923615e-05,-0.00483525991208866,0.115284857703492,-0.174538848188678, + -1.1437159667893e-05,-0.00453991110461482,0.126336387226318,-0.203923314871956, + -1.17087536436467e-05,-0.00424456229714121,0.137387916749144,-0.233307781555234, + -1.19803476191782e-05,-0.00394921348966715,0.14843944627197,-0.262692248238512, + -1.22519415948763e-05,-0.00365386468219342,0.159490975794797,-0.29207671492179, + -1.25235355705189e-05,-0.0033585158747198,0.170542505317623,-0.321461181605068, + -1.2795129546217e-05,-0.00306316706724585,0.181594034840449,-0.350845648288346, + -1.30667235220261e-05,-0.00276781825977235,0.192645564363275,-0.380230114971624, + -1.33383174975577e-05,-0.00247246945229818,0.203697093886102,-0.409614581654902, + -1.36099114729227e-05,-0.00217712064482378,0.214748623408928,-0.43899904833818, + -1.38815054488983e-05,-0.00188177183735094,0.225800152931754,-0.468383515021458, + -1.41530994243189e-05,-0.00158642302987677,0.23685168245458,-0.497767981704736, + -1.44246933997394e-05,-0.0012910742224026,0.247903211977407,-0.527152448388014, + -1.46962873759371e-05,-0.00099572541492976,0.258954741500232,-0.556536915071292, + -1.49678813512466e-05,-0.000700376607455366,0.270006271023059,-0.58592138175457, + -1.52394753272223e-05,-0.000405027799981639,0.281057800545885,-0.615305848437848, + -1.55110693027538e-05,-0.000109678992508133,0.292109330068711,-0.644690315121126, + -1.57826632779523e-05,0.000185669814966261,0.303160859591537,-0.674074781804404, + -1.6054257254039e-05,0.00048101862244021,0.314212389114364,-0.703459248487682, + -1.63258512295705e-05,0.00077636742991416,0.32526391863719,-0.73284371517096, + -1.65974452052131e-05,0.00107171623738722,0.336315448160016,-0.762228181854238, + -1.68690391808557e-05,0.00136706504486162,0.347366977682842,-0.791612648537516, + -7.91750545015013e-06,-0.00558100423806918,0.0814530923693547,-0.08696399491889, + -8.08614557601395e-06,-0.00532243997700249,0.092203342817765,-0.116534606063426, + -8.25478570212757e-06,-0.00506387571593603,0.102953593266175,-0.146105217207961, + -8.42342582799138e-06,-0.00480531145486918,0.113703843714586,-0.175675828352497, + -8.59206595399398e-06,-0.00454674719380255,0.124454094162996,-0.205246439497032, + -8.76070607985779e-06,-0.00428818293273603,0.135204344611406,-0.234817050641568, + -8.92934620588814e-06,-0.00402961867166962,0.145954595059816,-0.264387661786104, + -9.09798633169645e-06,-0.00377105441060277,0.156704845508226,-0.293958272930639, + -9.26662645783782e-06,-0.00351249014953625,0.167455095956637,-0.323528884075175, + -9.43526658375715e-06,-0.00325392588846962,0.178205346405047,-0.35309949521971, + -9.60390670950995e-06,-0.00299536162740277,0.188955596853457,-0.382670106364246, + -9.77254683542927e-06,-0.00273679736633614,0.199705847301868,-0.412240717508781, + -9.94118696140411e-06,-0.00247823310526929,0.210456097750278,-0.441811328653317, + -1.0109827087379e-05,-0.0022196688442031,0.221206348198688,-0.471381939797853, + -1.02784672133538e-05,-0.00196110458313625,0.231956598647098,-0.500952550942388, + -1.04471073394397e-05,-0.00170254032207007,0.242706849095508,-0.530523162086924, + -1.06157474655255e-05,-0.00144397606100322,0.253457099543919,-0.560093773231459, + -1.07843875909452e-05,-0.00118541179993636,0.264207349992329,-0.589664384375995, + -1.09530277171421e-05,-0.000926847538869513,0.27495760044074,-0.619234995520531, + -1.1121667843339e-05,-0.00066828327780355,0.28570785088915,-0.648805606665066, + -1.12903079687587e-05,-0.000409719016736254,0.29645810133756,-0.678376217809602, + -1.14589480951777e-05,-0.000151154755669847,0.30720835178597,-0.707946828954137, + -1.16275882211525e-05,0.000107409505396561,0.317958602234381,-0.737517440098673, + -1.17962283469053e-05,0.000365973766463412,0.328708852682791,-0.767088051243209, + -1.19648684726581e-05,0.000624538027530264,0.339459103131201,-0.796658662387744, + -5.95790820895337e-06,-0.0054718284239843,0.0809066293812432,-0.0874265160356373, + -6.0607982790839e-06,-0.00524371553294883,0.0914143830249319,-0.11714594097893, + -6.16368834926995e-06,-0.00501560264191359,0.10192213666862,-0.146865365922222, + -6.26657841937273e-06,-0.00478748975087784,0.112429890312309,-0.176584790865514, + -6.36946848930897e-06,-0.00455937685984231,0.122937643955998,-0.206304215808806, + -6.47235855966155e-06,-0.0043312639688069,0.133445397599686,-0.236023640752099, + -6.57524862973657e-06,-0.00410315107777159,0.143953151243375,-0.265743065695391, + -6.67813869986711e-06,-0.00387503818673596,0.154460904887064,-0.295462490638683, + -6.78102877010867e-06,-0.00364692529570076,0.164968658530752,-0.325181915581976, + -6.88391884018369e-06,-0.00341881240466524,0.175476412174441,-0.354901340525268, + -6.98680891053627e-06,-0.00319069951363016,0.185984165818129,-0.38462076546856, + -7.08969898027823e-06,-0.00296258662259441,0.196491919461818,-0.414340190411853, + -7.19258905035325e-06,-0.00273447373155866,0.206999673105507,-0.444059615355145, + -7.29547912092787e-06,-0.00250636084052402,0.217507426749195,-0.473779040298437, + -7.39836919072534e-06,-0.00227824794948805,0.228015180392884,-0.503498465241729, + -7.50125926129996e-06,-0.00205013505845342,0.238522934036572,-0.533217890185022, + -7.60414933109743e-06,-0.00182202216741723,0.249030687680261,-0.562937315128314, + -7.70703940156103e-06,-0.00159390927638214,0.259538441323949,-0.592656740071606, + -7.80992947124748e-06,-0.00136579638534617,0.270046194967638,-0.622376165014899, + -7.91281954204415e-06,-0.00113768349431131,0.280553948611327,-0.652095589958191, + -8.01570961173059e-06,-0.000909570603275345,0.291061702255015,-0.681815014901483, + -8.11859968186113e-06,-0.000681457712240263,0.301569455898704,-0.711534439844776, + -8.22148975176962e-06,-0.000453344821204293,0.312077209542392,-0.741253864788068, + -8.32437982167811e-06,-0.000225231930168768,0.322584963186081,-0.77097328973136, + -8.42726989214171e-06,2.88096086675793e-06,0.33309271682977,-0.800692714674652, + -4.42546953025036e-06,-0.00538878111252727,0.0804786202161186,-0.0877861327909007, + -4.48779988349024e-06,-0.00518498642541804,0.0907968232344126,-0.117621262582057, + -4.55013023675788e-06,-0.00498119173830891,0.101115026252706,-0.147456392373214, + -4.61246059024756e-06,-0.00477739705120006,0.111433229271,-0.177291522164371, + -4.67479094318213e-06,-0.00457360236409032,0.121751432289295,-0.207126651955527, + -4.7371212966163e-06,-0.00436980767698159,0.132069635307588,-0.236961781746684, + -4.79945164988393e-06,-0.0041660129898724,0.142387838325882,-0.266796911537841, + -4.86178200304055e-06,-0.00396221830276289,0.152706041344176,-0.296632041328998, + -4.92411235641921e-06,-0.00375842361565404,0.16302424436247,-0.326467171120154, + -4.9864427094648e-06,-0.00355462892854463,0.173342447380764,-0.356302300911311, + -5.04877306284346e-06,-0.00335083424143545,0.183660650399058,-0.386137430702468, + -5.11110341644416e-06,-0.00314703955432694,0.193978853417352,-0.415972560493624, + -5.17343376926771e-06,-0.00294324486721709,0.204297056435646,-0.445807690284781, + -5.2357641228129e-06,-0.00273945018010835,0.21461525945394,-0.475642820075938, + -5.29809447613605e-06,-0.00253565549299939,0.224933462472233,-0.505477949867095, + -5.36042482957022e-06,-0.00233186080589065,0.235251665490527,-0.535313079658251, + -5.42275518278235e-06,-0.00212806611878147,0.245569868508821,-0.565148209449408, + -5.4850855356614e-06,-0.00192427143167118,0.255888071527116,-0.594983339240564, + -5.54741588909557e-06,-0.00172047674456244,0.266206274545409,-0.624818469031721, + -5.60974624219668e-06,-0.00151668205745326,0.276524477563703,-0.654653598822878, + -5.67207659529778e-06,-0.00131288737034385,0.286842680581997,-0.684488728614035, + -5.734406948954e-06,-0.00110909268323489,0.297160883600291,-0.714323858405191, + -5.79673730238817e-06,-0.000905297996126819,0.307479086618584,-0.744158988196348, + -5.85906765526722e-06,-0.000701503309016527,0.317797289636879,-0.773994117987505, + -5.92139800892344e-06,-0.000497708621907567,0.328115492655173,-0.803829247778661, + -3.25436557427339e-06,-0.00532667556094296,0.0801511491377326,-0.0880597373212555, + -3.29221476833008e-06,-0.00514175923455507,0.0903245483128141,-0.11798289796775, + -3.330063962248e-06,-0.00495684290816711,0.100497947487895,-0.147906058614245, + -3.36791315613816e-06,-0.00477192658177927,0.110671346662977,-0.17782921926074, + -3.40576235008383e-06,-0.00458701025539121,0.120844745838058,-0.207752379907234, + -3.44361154408501e-06,-0.00440209392900348,0.131018145013139,-0.237675540553729, + -3.48146073786415e-06,-0.00421717760261509,0.141191544188221,-0.267598701200224, + -3.51930993164329e-06,-0.00403226127622691,0.151364943363303,-0.297521861846718, + -3.55715912608856e-06,-0.00384734494983974,0.161538342538384,-0.327445022493213, + -3.59500831970117e-06,-0.00366242862345145,0.171711741713465,-0.357368183139708, + -3.63285751364684e-06,-0.00347751229706339,0.181885140888546,-0.387291343786202, + -3.67070670792558e-06,-0.00329259597067599,0.192058540063628,-0.417214504432697, + -3.70855590137165e-06,-0.00310767964428749,0.202231939238709,-0.447137665079192, + -3.74640509592794e-06,-0.00292276331790009,0.212405338413791,-0.477060825725686, + -3.78425428926299e-06,-0.00273784699151181,0.222578737588872,-0.506983986372181, + -3.82210348337519e-06,-0.00255293066512396,0.232752136763953,-0.536907147018676, + -3.85995267759842e-06,-0.00236801433873612,0.242925535939035,-0.566830307665171, + -3.89780187082245e-06,-0.00218309801234695,0.253098935114117,-0.596753468311665, + -3.93565106526772e-06,-0.00199818168596,0.263272334289198,-0.62667662895816, + -3.97350025937993e-06,-0.00181326535957194,0.273445733464279,-0.656599789604654, + -4.01134945315906e-06,-0.00162834903318387,0.28361913263936,-0.686522950251149, + -4.04919864704922e-06,-0.00144343270679581,0.293792531814442,-0.716446110897644, + -4.08704784093938e-06,-0.00125851638040819,0.303965930989523,-0.746369271544139, + -4.12489703482954e-06,-0.00107360005402013,0.314139330164604,-0.776292432190633, + -4.16274622849766e-06,-0.000888683727631623,0.324312729339686,-0.806215592837128, + -2.37504888861428e-06,-0.005280810421116,0.079905056501776,-0.0882644842368586, + -2.39826720455083e-06,-0.00511023439952679,0.0899697611605282,-0.11825352115406, + -2.42148552068167e-06,-0.00493965837793764,0.10003446581928,-0.148242558071262, + -2.4447038368125e-06,-0.00476908235634865,0.110099170478033,-0.178231594988464, + -2.46792215274905e-06,-0.00459850633475933,0.120163875136785,-0.208220631905666, + -2.49114046879662e-06,-0.00442793031317035,0.130228579795537,-0.238209668822868, + -2.5143587848997e-06,-0.00425735429158125,0.140293284454289,-0.26819870574007, + -2.53757710094726e-06,-0.00408677826999182,0.150357989113042,-0.298187742657271, + -2.5607954168283e-06,-0.00391620224840272,0.160422693771794,-0.328176779574473, + -2.58401373265382e-06,-0.00374562622681296,0.170487398430546,-0.358165816491675, + -2.60723204908997e-06,-0.00357505020522431,0.180552103089298,-0.388154853408877, + -2.63045036485998e-06,-0.00340447418363476,0.190616807748051,-0.418143890326079, + -2.65366868101857e-06,-0.00323389816204567,0.200681512406803,-0.448132927243281, + -2.67688699728819e-06,-0.00306332214045724,0.210746217065555,-0.478121964160482, + -2.70010531333575e-06,-0.00289274611886792,0.220810921724307,-0.508111001077684, + -2.72332362893923e-06,-0.00272217009727838,0.230875626383059,-0.538100037994886, + -2.74654194531987e-06,-0.00255159407568883,0.240940331041812,-0.568089074912088, + -2.76976026114539e-06,-0.00238101805409974,0.251005035700564,-0.59807811182929, + -2.79297857763705e-06,-0.00221044203251108,0.261069740359316,-0.628067148746492, + -2.81619689346257e-06,-0.00203986601092243,0.271134445018068,-0.658056185663694, + -2.83941520973219e-06,-0.00186928998933267,0.281199149676821,-0.688045222580896, + -2.86263352566873e-06,-0.00169871396774379,0.291263854335573,-0.718034259498098, + -2.88585184138324e-06,-0.00152813794615403,0.301328558994325,-0.748023296415299, + -2.90907015798592e-06,-0.0013575619245656,0.311393263653077,-0.778012333332501, + -2.93228847381144e-06,-0.00118698590297628,0.321457968311829,-0.808001370249703, + -1.7235237572133e-06,-0.00524724759180278,0.0797225997427357,-0.0884158125911222, + -1.73799350300374e-06,-0.0050873877606607,0.0897067850021773,-0.118453538630706, + -1.75246324873868e-06,-0.00492752792951845,0.099690970261619,-0.14849126467029, + -1.76693299461239e-06,-0.00476766809837637,0.109675155521061,-0.178528990709874, + -1.78140274020855e-06,-0.00460780826723406,0.119659340780502,-0.208566716749458, + -1.79587248605451e-06,-0.00444794843609186,0.129643526039944,-0.238604442789041, + -1.81034223178944e-06,-0.00428808860494978,0.139627711299386,-0.268642168828625, + -1.82481197752438e-06,-0.00412822877380759,0.149611896558827,-0.298679894868209, + -1.83928172348136e-06,-0.00396836894266572,0.159596081818269,-0.328717620907793, + -1.85375146899425e-06,-0.00380850911152297,0.169580267077711,-0.358755346947377, + -1.86822121511776e-06,-0.00364864928038133,0.179564452337152,-0.388793072986961, + -1.88269096079718e-06,-0.00348878944923925,0.189548637596594,-0.418830799026545, + -1.89716070664314e-06,-0.00332892961809717,0.199532822856036,-0.448868525066129, + -1.91163045226705e-06,-0.00316906978695464,0.209517008115478,-0.478906251105712, + -1.92610019800199e-06,-0.00300920995581233,0.219501193374919,-0.508943977145296, + -1.94056994406999e-06,-0.00284935012467114,0.22948537863436,-0.53898170318488, + -1.95503968924982e-06,-0.00268949029352794,0.239469563893803,-0.569019429224464, + -1.96950943509577e-06,-0.00252963046238563,0.249453749153244,-0.599057155264048, + -1.98397918105275e-06,-0.00236977063124399,0.259437934412686,-0.629094881303632, + -1.99844892678769e-06,-0.00220991080010169,0.269422119672128,-0.659132607343215, + -2.0129186724116e-06,-0.00205005096895983,0.279406304931569,-0.689170333382799, + -2.02738841803551e-06,-0.00189019113781708,0.289390490191011,-0.719208059422383, + -2.04185816365943e-06,-0.00173033130667477,0.299374675450453,-0.749245785461967, + -2.05632790994947e-06,-0.00157047147553335,0.309358860709894,-0.779283511501551, + -2.07079765657259e-06,-0.00141061164439282,0.319343045969335,-0.809321237541135, + -1.24551046420951e-06,-0.00522284953621327,0.0795886724021008,-0.0885266361822533, + -1.25470114031856e-06,-0.00507090084651973,0.0895137913536916,-0.11860001914428, + -1.2638918163721e-06,-0.00491895215682614,0.0994389103052823,-0.148673402106307, + -1.27308249239788e-06,-0.00476700346713244,0.109364029256873,-0.178746785068334, + -1.28227316836815e-06,-0.00461505477743873,0.119289148208464,-0.20882016803036, + -1.29146384436618e-06,-0.00446310608774481,0.129214267160055,-0.238893550992387, + -1.30065452041972e-06,-0.00431115739805121,0.139139386111646,-0.268966933954414, + -1.30984519647326e-06,-0.00415920870835773,0.149064505063237,-0.299040316916441, + -1.31903587241577e-06,-0.00400726001866381,0.158989624014828,-0.329113699878468, + -1.32822654869136e-06,-0.00385531132897055,0.168914742966418,-0.359187082840494, + -1.33741722446734e-06,-0.0037033626392764,0.178839861918009,-0.389260465802521, + -1.34660790079844e-06,-0.00355141394958336,0.1887649808696,-0.419333848764548, + -1.35579857651891e-06,-0.00339946525988921,0.198690099821191,-0.449407231726575, + -1.36498925273898e-06,-0.00324751657019573,0.208615218772781,-0.479480614688602, + -1.37417992884803e-06,-0.00309556788050225,0.218540337724372,-0.509553997650628, + -1.38337060473503e-06,-0.0029436191908081,0.228465456675963,-0.539627380612655, + -1.39256128084408e-06,-0.00279167050111506,0.238390575627554,-0.569700763574682, + -1.40175195695313e-06,-0.00263972181142091,0.248315694579145,-0.599774146536709, + -1.41094263272912e-06,-0.00248777312172699,0.258240813530736,-0.629847529498736, + -1.42013330928226e-06,-0.00233582443203462,0.268165932482326,-0.659920912460763, + -1.42932398450313e-06,-0.00218387574233914,0.278091051433918,-0.689994295422789, + -1.43851466094524e-06,-0.00203192705264632,0.288016170385508,-0.720067678384816, + -1.44770533738736e-06,-0.0018799783629535,0.297941289337099,-0.750141061346843, + -1.45689601238619e-06,-0.00172802967325802,0.30786640828869,-0.78021444430887, + -1.46608668905035e-06,-0.00157608098356521,0.317791527240281,-0.810287827270897, + -8.97327714383112e-07,-0.00520519823579557,0.0794910877134545,-0.0886072515340195, + -9.03283094738638e-07,-0.00505903788916073,0.0893731881145652,-0.1187065720723, + -9.09238475260699e-07,-0.00491287754252623,0.0992552885156758,-0.14880589261058, + -9.15193855616225e-07,-0.00476671719589161,0.109137388916786,-0.17890521314886, + -9.2114923611053e-07,-0.004620556849257,0.119019489317897,-0.20900453368714, + -9.27104616577079e-07,-0.00447439650262238,0.128901589719008,-0.23910385422542, + -9.33059996988117e-07,-0.00432823615598754,0.138783690120118,-0.269203174763701, + -9.39015377343644e-07,-0.00418207580935293,0.148665790521229,-0.299302495301981, + -9.44970757810193e-07,-0.00403591546271831,0.158547890922339,-0.329401815840261, + -9.50926138276742e-07,-0.00388975511608391,0.16842999132345,-0.359501136378541, + -9.56881518854313e-07,-0.0037435947694493,0.178312091724561,-0.389600456916821, + -9.62836899154329e-07,-0.00359743442281468,0.188194192125671,-0.419699777455102, + -9.68792279287811e-07,-0.0034512740761794,0.198076292526782,-0.449799097993382, + -9.74747660031916e-07,-0.00330511372954501,0.207958392927893,-0.479898418531662, + -9.80703040553976e-07,-0.00315895338291083,0.217840493329003,-0.509997739069942, + -9.86658420853992e-07,-0.00301279303627555,0.227722593730114,-0.540097059608222, + -9.92613801042985e-07,-0.00286663268964049,0.237604694131225,-0.570196380146503, + -9.9856918178709e-07,-0.00272047234300632,0.247486794532335,-0.600295700684783, + -1.00452456253119e-06,-0.00257431199637237,0.257368894933445,-0.630395021223063, + -1.01047994260917e-06,-0.00242815164973686,0.267250995334557,-0.660494341761343, + -1.01643532313123e-06,-0.00228199130310269,0.277133095735667,-0.690593662299623, + -1.02239070354226e-06,-0.00213583095646808,0.287015196136777,-0.720692982837904, + -1.02834608450841e-06,-0.00198967060983435,0.296897296537888,-0.750792303376184, + -1.0343014641423e-06,-0.0018435102631984,0.306779396938999,-0.780891623914464, + -1.04025684477538e-06,-0.00169734991656423,0.316661497340109,-0.810990944452744, + -5.0058779060641e-05,-0.00874943061523603,0.10152775478316,-0.087746140739364, + -5.42177514088749e-05,-0.00807646185555561,0.116761755025814,-0.113667167375043, + -5.83767237571919e-05,-0.00740349309587529,0.131995755268469,-0.139588194010721, + -6.2535696105398e-05,-0.00673052433619481,0.147229755511123,-0.1655092206464, + -6.6694668453382e-05,-0.00605755557651411,0.162463755753778,-0.191430247282079, + -7.08536408016713e-05,-0.00538458681683374,0.177697755996432,-0.217351273917757, + -7.50126131497386e-05,-0.00471161805715326,0.192931756239087,-0.243272300553436, + -7.91715854980835e-05,-0.004038649297473,0.208165756481741,-0.269193327189115, + -8.33305578462062e-05,-0.0033656805377924,0.223399756724396,-0.295114353824793, + -8.74895301944956e-05,-0.0026927117781117,0.238633756967051,-0.321035380460472, + -9.16485025426739e-05,-0.00201974301843144,0.253867757209705,-0.346956407096151, + -9.58074748910742e-05,-0.00134677425875118,0.269101757452359,-0.372877433731829, + -9.9966447239086e-05,-0.000673805499070479,0.284335757695014,-0.398798460367508, + -0.000104125419587375,-8.36739390219776e-07,0.299569757937668,-0.424719487003187, + -0.000108284391935221,0.000672132020290483,0.314803758180323,-0.450640513638865, + -0.000112443364283843,0.00134510077997052,0.330037758422977,-0.476561540274544, + -0.000116602336632132,0.00201806953965122,0.345271758665632,-0.502482566910223, + -0.000120761308980089,0.00269103829933193,0.360505758908287,-0.528403593545901, + -0.000124920281328378,0.00336400705901219,0.375739759150941,-0.55432462018158, + -0.000129079253676556,0.00403697581869222,0.390973759393595,-0.580245646817259, + -0.000133238226024845,0.00470994457837337,0.40620775963625,-0.606166673452937, + -0.000137397198373135,0.00538291333805319,0.421441759878904,-0.632087700088616, + -0.000141556170721313,0.00605588209773389,0.436675760121559,-0.658008726724294, + -0.000145715143068936,0.00672885085741504,0.451909760364213,-0.683929753359973, + -0.000149874115417781,0.00740181961709441,0.467143760606868,-0.709850779995652, + -4.97389312965335e-05,-0.00871725152278963,0.101438073036634,-0.0878372532864131, + -5.38493482503399e-05,-0.00804611588991389,0.116635893956205,-0.113783773714845, + -5.79597652041741e-05,-0.00737498025703809,0.131833714875777,-0.139730294143276, + -6.20701821580361e-05,-0.00670384462416251,0.147031535795348,-0.165676814571708, + -6.61805991118425e-05,-0.00603270899128661,0.16222935671492,-0.19162333500014, + -7.02910160657599e-05,-0.00536157335841103,0.177427177634491,-0.217569855428571, + -7.44014330195109e-05,-0.00469043772553546,0.192624998554062,-0.243516375857003, + -7.85118499734283e-05,-0.00401930209265977,0.207822819473634,-0.269462896285435, + -8.26222669273458e-05,-0.00334816645978409,0.223020640393205,-0.295409416713866, + -8.67326838813742e-05,-0.00267703082690862,0.238218461312777,-0.321355937142298, + -9.08431008350696e-05,-0.00200589519403271,0.253416282232348,-0.347302457570729, + -9.49535177888206e-05,-0.00133475956115681,0.268614103151919,-0.373248977999161, + -9.90639347425715e-05,-0.000663623928281121,0.283811924071491,-0.399195498427593, + -0.0001031743516966,7.51170459456496e-06,0.299009744991062,-0.425142018856025, + -0.000107284768650406,0.000678647337470251,0.314207565910634,-0.451088539284456, + -0.000111395185603991,0.00134978297034594,0.329405386830205,-0.477035059712888, + -0.000115505602558241,0.0020209186032214,0.344603207749776,-0.50298158014132, + -0.000119616019511937,0.00269205423609775,0.359801028669348,-0.528928100569751, + -0.000123726436465854,0.00336318986897277,0.374998849588919,-0.554874620998183, + -0.000127836853419994,0.00403432550184801,0.39019667050849,-0.580821141426614, + -0.000131947270374022,0.0047054611347237,0.405394491428062,-0.606767661855046, + -0.000136057687327273,0.00537659676760027,0.420592312347634,-0.632714182283478, + -0.00014016810428108,0.00604773240047596,0.435790133267205,-0.658660702711909, + -0.000144278521235108,0.00671886803335164,0.450987954186777,-0.684607223140341, + -0.000148388938189248,0.00739000366622689,0.466185775106348,-0.710553743568773, + -4.92982031372602e-05,-0.00867311516561137,0.101314412654826,-0.0879626281311997, + -5.33421268683332e-05,-0.00800454587266874,0.116462378068205,-0.113944229132099, + -5.7386050599656e-05,-0.00733597657972618,0.131610343481584,-0.139925830132997, + -6.14299743308677e-05,-0.00666740728678361,0.146758308894964,-0.165907431133896, + -6.54738980620517e-05,-0.00599883799384104,0.161906274308343,-0.191889032134795, + -6.95178217931525e-05,-0.00533026870089848,0.177054239721722,-0.217870633135694, + -7.35617455243087e-05,-0.00466169940795569,0.192202205135101,-0.243852234136593, + -7.76056692556315e-05,-0.00399313011501334,0.20735017054848,-0.269833835137492, + -8.16495929867878e-05,-0.00332456082207044,0.22249813596186,-0.29581543613839, + -8.56935167174999e-05,-0.00265599152912732,0.237646101375239,-0.321797037139289, + -8.97374404488782e-05,-0.00198742223618509,0.252794066788618,-0.347778638140188, + -9.37813641801455e-05,-0.00131885294324285,0.267942032201997,-0.373760239141087, + -9.78252879109132e-05,-0.00065028365029951,0.283089997615376,-0.399741840141986, + -0.000101869211642236,1.82856426431677e-05,0.298237963028756,-0.425723441142885, + -0.00010591313537367,0.000686854935585179,0.313385928442135,-0.451705042143783, + -0.00010995705910477,0.00135542422852786,0.328533893855514,-0.477686643144682, + -0.000114000982836093,0.00202399352147054,0.343681859268893,-0.503668244145581, + -0.000118044906567416,0.00269256281441299,0.358829824682273,-0.52964984514648, + -0.000122088830298406,0.00336113210735567,0.373977790095652,-0.555631446147378, + -0.000126132754029729,0.00402970140029835,0.389125755509031,-0.581613047148278, + -0.000130176677760607,0.00469827069324102,0.40427372092241,-0.607594648149176, + -0.000134220601491708,0.0053668399861837,0.419421686335789,-0.633576249150075, + -0.000138264525223142,0.00603540927912594,0.434569651749168,-0.659557850150974, + -0.000142308448954243,0.00670397857206861,0.449717617162547,-0.685539451151873, + -0.00014635237268501,0.00737254786501174,0.464865582575927,-0.711521052152772, + -4.86944684676138e-05,-0.00861303707949579,0.101144856267737,-0.0881340518436699, + -5.26480844179056e-05,-0.00794805899594692,0.116224521346548,-0.114163618143973, + -5.66017003680308e-05,-0.00728308091239793,0.13130418642536,-0.140193184444275, + -6.05553163181283e-05,-0.00661810282884889,0.146383851504171,-0.166222750744578, + -6.45089322683368e-05,-0.00595312474529996,0.161463516582983,-0.192252317044881, + -6.84625482184065e-05,-0.0052881466617507,0.176543181661794,-0.218281883345184, + -7.24161641684762e-05,-0.00462316857820155,0.191622846740606,-0.244311449645486, + -7.63697801186014e-05,-0.00395819049465262,0.206702511819417,-0.270341015945789, + -8.03233960689487e-05,-0.00329321241110403,0.221782176898228,-0.296370582246092, + -8.42770120189629e-05,-0.00262823432755477,0.23686184197704,-0.322400148546395, + -8.82306279688105e-05,-0.00196325624400551,0.251941507055851,-0.348429714846697, + -9.21842439194354e-05,-0.00129827816045691,0.267021172134663,-0.374459281147, + -9.6137859869394e-05,-0.00063330007690765,0.282100837213475,-0.400488847447303, + -0.000100091475819797,3.1678006640723e-05,0.297180502292286,-0.426518413747606, + -0.000104045091769978,0.000696656090189762,0.312260167371097,-0.452547980047908, + -0.000107998707720047,0.0013616341737388,0.327339832449909,-0.478577546348211, + -0.000111952323670228,0.00202661225728784,0.34241949752872,-0.504607112648514, + -0.000115905939620076,0.00269159034083732,0.357499162607532,-0.530636678948817, + -0.000119859555570367,0.00335656842438614,0.372578827686343,-0.556666245249119, + -0.000123813171520326,0.00402154650793562,0.387658492765155,-0.582695811549422, + -0.000127766787470285,0.00468652459148489,0.402738157843967,-0.608725377849725, + -0.000131720403420799,0.00535150267503326,0.417817822922778,-0.634754944150028, + -0.00013567401937109,0.00601648075858252,0.43289748800159,-0.66078451045033, + -0.00013962763532116,0.00668145884213089,0.447977153080401,-0.686814076750633, + -0.000143581251271452,0.00734643692568016,0.463056818159213,-0.712843643050936, + -4.78740650391163e-05,-0.00853210234720342,0.100914156200479,-0.0883664036473179, + -5.17064108839782e-05,-0.0078721436731175,0.115900999343048,-0.114460983262689, + -5.55387567290067e-05,-0.00721218499903176,0.130887842485617,-0.14055556287806, + -5.93711025739241e-05,-0.00655222632494612,0.145874685628185,-0.166650142493431, + -6.32034484186472e-05,-0.00589226765085993,0.160861528770754,-0.192744722108802, + -6.703579426387e-05,-0.0052323089767744,0.175848371913323,-0.218839301724173, + -7.08681401085376e-05,-0.00457235030268832,0.190835215055892,-0.244933881339544, + -7.47004859534828e-05,-0.00391239162860257,0.205822058198461,-0.271028460954915, + -7.85328317984835e-05,-0.00325243295451694,0.220808901341029,-0.297123040570286, + -8.23651776432621e-05,-0.00259247428043086,0.235795744483598,-0.323217620185658, + -8.61975234884294e-05,-0.00193251560634544,0.250782587626167,-0.349312199801029, + -9.00298693327639e-05,-0.00127255693225892,0.265769430768736,-0.3754067794164, + -9.38622151779311e-05,-0.00061259825817328,0.280756273911305,-0.401501359031771, + -9.76945610230429e-05,4.73604159121344e-05,0.295743117053873,-0.427595938647142, + -0.000101526906867488,0.000707319089998659,0.310729960196442,-0.453690518262513, + -0.000105359252712933,0.00136727776408385,0.325716803339011,-0.479785097877884, + -0.00010919159855749,0.00202723643816993,0.34070364648158,-0.505879677493255, + -0.000113023944402602,0.00268719511225557,0.355690489624149,-0.531974257108626, + -0.000116856290247713,0.00334715378634121,0.370677332766717,-0.558068836723997, + -0.000120688636091937,0.00400711246042773,0.385664175909286,-0.584163416339368, + -0.000124520981937382,0.00466707113451292,0.400651019051855,-0.610257995954739, + -0.000128353327782604,0.00532702980859856,0.415637862194424,-0.63635257557011, + -0.000132185673626606,0.00598698848268553,0.430624705336993,-0.662447155185481, + -0.000136018019472162,0.00664694715677072,0.445611548479562,-0.688541734800853, + -0.000139850365317384,0.00730690583085591,0.46059839162213,-0.714636314416224, + -4.67713460918506e-05,-0.0084245841700562,0.10060354094776,-0.0886776457729838, + -5.0443330422395e-05,-0.0077716230812121,0.115465602675248,-0.11485931265026, + -5.41153147529116e-05,-0.00711866199236821,0.130327664402736,-0.141040979527536, + -5.77872990834838e-05,-0.00646570090352439,0.145189726130224,-0.167222646404813, + -6.14592834138339e-05,-0.00581273981468011,0.160051787857712,-0.193404313282089, + -6.51312677444338e-05,-0.00515977872583639,0.1749138495852,-0.219585980159366, + -6.88032520751447e-05,-0.00450681763699257,0.189775911312688,-0.245767647036642, + -7.24752364054115e-05,-0.00385385654814829,0.204637973040176,-0.271949313913918, + -7.61472207359004e-05,-0.00320089545930435,0.219500034767663,-0.298130980791195, + -7.98192050663893e-05,-0.00254793437046019,0.234362096495151,-0.324312647668471, + -8.34911893968782e-05,-0.00189497328161625,0.249224158222639,-0.350494314545747, + -8.71631737274225e-05,-0.00124201219277209,0.264086219950127,-0.376675981423024, + -9.08351580578559e-05,-0.000589051103927929,0.278948281677615,-0.4028576483003, + -9.45071423888999e-05,6.39099849153446e-05,0.293810343405103,-0.429039315177576, + -9.81791267187226e-05,0.000716871073760394,0.308672405132591,-0.455220982054853, + -0.000101851111049656,0.00136983216260345,0.323534466860079,-0.481402648932129, + -0.000105523095380033,0.00202279325144783,0.338396528587567,-0.507584315809405, + -0.000109195079710855,0.00267575434029133,0.353258590315054,-0.533765982686682, + -0.000112867064041122,0.00332871542913571,0.368120652042542,-0.559947649563958, + -0.000116539048371611,0.00398167651797987,0.382982713770031,-0.586129316441234, + -0.000120211032702211,0.00463463760682314,0.397844775497518,-0.612310983318511, + -0.000123883017032922,0.00528759869566731,0.412706837225006,-0.638492650195787, + -0.000127555001363078,0.00594055978451191,0.427568898952494,-0.664674317073063, + -0.000131226985694011,0.00659352087335519,0.442430960679982,-0.69085598395034, + -0.000134898970024611,0.00724648196219935,0.45729302240747,-0.717037650827616, + -4.53107414451481e-05,-0.00828438459144798,0.100191196783747,-0.0890880408760064, + -4.87750104347096e-05,-0.00764113027100488,0.114887948612064,-0.115384538564649, + -5.22392794244375e-05,-0.00699787595056189,0.129584700440381,-0.141681036253292, + -5.57035484139712e-05,-0.0063546216301188,0.144281452268698,-0.167977533941934, + -5.91678174035049e-05,-0.00571136730967536,0.158978204097015,-0.194274031630577, + -6.26320863932328e-05,-0.0050681129892326,0.173674955925332,-0.220570529319219, + -6.60963553827387e-05,-0.00442485866878917,0.188371707753649,-0.246867027007862, + -6.95606243724112e-05,-0.00378160434834629,0.203068459581966,-0.273163524696505, + -7.30248933621391e-05,-0.00313835002790341,0.217765211410283,-0.299460022385147, + -7.6489162351423e-05,-0.00249509570745987,0.2324619632386,-0.32575652007379, + -7.99534313412065e-05,-0.00185184138701699,0.247158715066917,-0.352053017762433, + -8.34177003307124e-05,-0.00120858706657367,0.261855466895234,-0.378349515451075, + -8.68819693206069e-05,-0.00056533274613102,0.276552218723551,-0.404646013139718, + -9.03462383102793e-05,7.79215743120787e-05,0.291248970551867,-0.430942510828361, + -9.38105072993967e-05,0.000721175894756065,0.305945722380185,-0.457239008517003, + -9.72747762897352e-05,0.00136443021519783,0.320642474208501,-0.483535506205646, + -0.00010073904527852,0.00200768453564182,0.335339226036818,-0.509832003894289, + -0.000104203314268525,0.00265093885608425,0.350035977865135,-0.536128501582931, + -0.000107667583258086,0.00329419317652779,0.364732729693452,-0.562424999271574, + -0.000111131852247759,0.00393744749697111,0.37942948152177,-0.588721496960216, + -0.000114596121237875,0.00458070181741332,0.394126233350086,-0.615017994648859, + -0.000118060390227548,0.00522395613785687,0.408822985178404,-0.641314492337501, + -0.000121524659216776,0.00586721045829952,0.42351973700672,-0.667610990026144, + -0.000124988928206005,0.00651046477874351,0.438216488835037,-0.693907487714787, + -0.000128453197195788,0.00715371909918661,0.452913240663354,-0.720203985403429, + -4.34132682335386e-05,-0.00810596430317584,0.0996539807637659,-0.0896180681046644, + -4.66157490368324e-05,-0.00747605506734977,0.114135926939613,-0.116062870332676, + -4.98182298401817e-05,-0.00684614583152376,0.12861787311546,-0.142507672560687, + -5.30207106436142e-05,-0.00621623659569792,0.143099819291307,-0.168952474788699, + -5.62231914469913e-05,-0.00558632735987197,0.157581765467154,-0.19539727701671, + -5.94256722504793e-05,-0.00495641812404612,0.172063711643001,-0.221842079244722, + -6.26281530536899e-05,-0.00432650888821984,0.186545657818849,-0.248286881472733, + -6.58306338569559e-05,-0.00369659965239377,0.201027603994696,-0.274731683700745, + -6.90331146602774e-05,-0.00306669041656749,0.215509550170543,-0.301176485928756, + -7.2235595464043e-05,-0.00243678118074242,0.22999149634639,-0.327621288156768, + -7.54380762672535e-05,-0.00180687194491602,0.244473442522237,-0.354066090384779, + -7.86405570706306e-05,-0.00117696270909007,0.258955388698084,-0.380510892612791, + -8.18430378738411e-05,-0.000547053473264114,0.273437334873931,-0.406955694840802, + -8.50455186776067e-05,8.28557625613957e-05,0.287919281049778,-0.433400497068814, + -8.82479994805951e-05,0.000712764998388238,0.302401227225626,-0.459845299296825, + -9.14504802842497e-05,0.00134267423421375,0.316883173401473,-0.486290101524837, + -9.46529610874602e-05,0.0019725834700397,0.33136511957732,-0.512734903752848, + -9.78554418905597e-05,0.00260249270586632,0.345847065753167,-0.53917970598086, + -0.000101057922694325,0.00323240194169117,0.360329011929014,-0.565624508208871, + -0.000104260403497647,0.00386231117751779,0.374810958104862,-0.592069310436883, + -0.000107462884300746,0.00449222041334396,0.389292904280709,-0.618514112664894, + -0.000110665365104734,0.00512212964916925,0.403774850456555,-0.644958914892906, + -0.000113867845907278,0.00575203888499631,0.418256796632403,-0.671403717120917, + -0.000117070326711044,0.0063819481208216,0.43273874280825,-0.697848519348929, + -0.000120272807514366,0.00701185735664733,0.447220688984097,-0.72429332157694, + -4.10094967634722e-05,-0.00788585184550522,0.0989709743399407,-0.0902845607802442, + -4.3893562496955e-05,-0.00727401952321172,0.113180717835569,-0.116915851331686, + -4.67776282303267e-05,-0.00666218720091816,0.127390461331197,-0.143547141883127, + -4.96616939639205e-05,-0.00605035487862482,0.141600204826825,-0.170178432434568, + -5.25457596971535e-05,-0.00543852255633093,0.155809948322453,-0.19680972298601, + -5.5429825430664e-05,-0.00482669023403759,0.170019691818081,-0.223441013537451, + -5.831389116423e-05,-0.00421485791174392,0.184229435313709,-0.250072304088892, + -6.11979568976295e-05,-0.00360302558945047,0.198439178809337,-0.276703594640334, + -6.4082022630918e-05,-0.00299119326715669,0.212648922304965,-0.303334885191775, + -6.69660883643175e-05,-0.0023793609448628,0.226858665800594,-0.329966175743216, + -6.9850154097828e-05,-0.00176752862256957,0.241068409296222,-0.356597466294657, + -7.2734219831061e-05,-0.00115569630027568,0.25527815279185,-0.383228756846099, + -7.56182855647936e-05,-0.000543863977982451,0.269487896287478,-0.40986004739754, + -7.85023512981375e-05,6.79683443107759e-05,0.283697639783105,-0.436491337948982, + -8.13864170315926e-05,0.000679800666604446,0.297907383278734,-0.463122628500423, + -8.42704827652696e-05,0.00129163298889812,0.312117126774362,-0.489753919051864, + -8.71545484990577e-05,0.00190346531119112,0.32632687026999,-0.516385209603306, + -9.00386142319576e-05,0.00251529763348501,0.340536613765618,-0.543016500154747, + -9.29226799651905e-05,0.00312712995577891,0.354746357261246,-0.569647790706188, + -9.58067456986456e-05,0.00373896227807258,0.368956100756874,-0.59627908125763, + -9.86908114323226e-05,0.00435079460036603,0.383165844252503,-0.622910371809071, + -0.000101574877165889,0.00496262692265903,0.39737558774813,-0.649541662360512, + -0.000104458942898678,0.00557445924495381,0.411585331243759,-0.676172952911953, + -0.000107343008632244,0.00618629156724682,0.425795074739386,-0.702804243463395, + -0.000110227074366587,0.00679812388953938,0.440004818235014,-0.729435534014836, + -3.80596517962906e-05,-0.0076245671120399,0.0981291654083597,-0.0910950680558131, + -4.05734806585289e-05,-0.00703666671454195,0.112004749814571,-0.117953143009374, + -4.30873095206841e-05,-0.00644876631704372,0.125880334220783,-0.144811217962935, + -4.5601138383089e-05,-0.00586086591954604,0.139755918626994,-0.171669292916496, + -4.81149672451053e-05,-0.00527296552204759,0.153631503033206,-0.198527367870057, + -5.06287961075103e-05,-0.0046850651245498,0.167507087439417,-0.225385442823618, + -5.31426249695266e-05,-0.00409716472705157,0.181382671845629,-0.252243517777179, + -5.56564538321536e-05,-0.00350926432955401,0.19525825625184,-0.27910159273074, + -5.81702826940589e-05,-0.00292136393205555,0.209133840658052,-0.305959667684301, + -6.06841115561307e-05,-0.0023334635345571,0.223009425064263,-0.332817742637863, + -6.31979404187577e-05,-0.00174556313705998,0.236885009470474,-0.359675817591423, + -6.57117692809961e-05,-0.00115766273956175,0.250760593876686,-0.386533892544985, + -6.82255981431235e-05,-0.000569762342063518,0.264636178282898,-0.413391967498546, + -7.07394270053063e-05,1.81380554347133e-05,0.278511762689109,-0.440250042452107, + -7.32532558677113e-05,0.000606038452932056,0.29238734709532,-0.467108117405668, + -7.57670847297831e-05,0.00119393885043051,0.306262931501532,-0.493966192359229, + -7.82809135917439e-05,0.00178183924792896,0.320138515907744,-0.52082426731279, + -8.07947424543709e-05,0.00236973964542653,0.334014100313955,-0.547682342266351, + -8.33085713164428e-05,0.00295764004292476,0.347889684720166,-0.574540417219912, + -8.58224001789587e-05,0.00354554044042255,0.361765269126378,-0.601398492173473, + -8.83362290406975e-05,0.00413344083792078,0.375640853532589,-0.628256567127034, + -9.08500579029914e-05,0.00472134123541901,0.389516437938801,-0.655114642080595, + -9.33638867655073e-05,0.00530924163291679,0.403392022345012,-0.681972717034156, + -9.58777156273571e-05,0.00589714203041458,0.417267606751223,-0.708830791987717, + -9.83915444897621e-05,0.00648504242791326,0.431143191157436,-0.735688866941278, + -3.45779145164704e-05,-0.00732835531256426,0.0971305622271952,-0.0920415337166216, + -3.66844091888585e-05,-0.00677111474302738,0.110611573274943,-0.11916443497771, + -3.87909038613854e-05,-0.00621387417349073,0.12409258432269,-0.146287336238799, + -4.08973985337735e-05,-0.00565663360395396,0.137573595370438,-0.173410237499888, + -4.30038932061061e-05,-0.00509939303441687,0.151054606418186,-0.200533138760977, + -4.5110387878633e-05,-0.00454215246488043,0.164535617465933,-0.227656040022065, + -4.72168825510488e-05,-0.00398491189534356,0.178016628513681,-0.254778941283154, + -4.93233772231871e-05,-0.00342767132580635,0.191497639561429,-0.281901842544243, + -5.14298718957695e-05,-0.00287043075626969,0.204978650609177,-0.309024743805332, + -5.35363665684074e-05,-0.00231319018673326,0.218459661656924,-0.336147645066421, + -5.56428612406012e-05,-0.00175594961719616,0.231940672704672,-0.363270546327509, + -5.77493559131281e-05,-0.00119870904765929,0.24542168375242,-0.390393447588598, + -5.9855850585655e-05,-0.000641468478122853,0.258902694800167,-0.417516348849687, + -6.19623452577933e-05,-8.42279085857545e-05,0.272383705847915,-0.444639250110776, + -6.40688399304867e-05,0.0004730126609509,0.285864716895663,-0.471762151371865, + -6.61753346027361e-05,0.00103025323048822,0.299345727943411,-0.498885052632953, + -6.82818292755405e-05,0.00158749380002421,0.312826738991158,-0.526007953894042, + -7.03883239473457e-05,0.00214473436956153,0.326307750038906,-0.553130855155131, + -7.24948186198171e-05,0.00270197493909818,0.339788761086653,-0.580253756416219, + -7.46013132923995e-05,0.00325921550863484,0.353269772134401,-0.607376657677308, + -7.67078079648709e-05,0.00381645607817171,0.366750783182149,-0.634499558938397, + -7.88143026374533e-05,0.00437369664770859,0.380231794229897,-0.661622460199486, + -8.09207973094805e-05,0.00493093721724591,0.393712805277644,-0.688745361460574, + -8.30272919819519e-05,0.00548817778678234,0.407193816325392,-0.715868262721663, + -8.51337866539792e-05,0.00604541835631967,0.42067482737314,-0.742991163982752, + -3.06525281011105e-05,-0.00700973400874272,0.0959984432618401,-0.0930958073532768, + -3.23392300514425e-05,-0.00649009642664439,0.10903440525097,-0.120513700187626, + -3.40259320015801e-05,-0.00597045884454606,0.122070367240099,-0.147931593021976, + -3.57126339517455e-05,-0.00545082126244745,0.135106329229229,-0.175349485856326, + -3.73993359019109e-05,-0.00493118368034906,0.148142291218359,-0.202767378690675, + -3.90860378523539e-05,-0.00441154609825101,0.161178253207488,-0.230185271525025, + -4.07727398021307e-05,-0.00389190851615162,0.174214215196619,-0.257603164359374, + -4.24594417525737e-05,-0.00337227093405379,0.187250177185748,-0.285021057193724, + -4.41461437028501e-05,-0.00285263335195518,0.200286139174878,-0.312438950028074, + -4.58328456530155e-05,-0.00233299576985702,0.213322101164008,-0.339856842862423, + -4.75195476034584e-05,-0.00181335818775841,0.226358063153138,-0.367274735696773, + -4.92062495536238e-05,-0.00129372060566046,0.239394025142267,-0.394692628531123, + -5.08929515037337e-05,-0.000774083023561634,0.252429987131397,-0.422110521365472, + -5.25796534536216e-05,-0.000254445441462803,0.265465949120527,-0.449528414199822, + -5.42663554041756e-05,0.00026519214063514,0.278501911109656,-0.476946307034171, + -5.59530573540634e-05,0.000784829722733971,0.291537873098786,-0.504364199868521, + -5.76397593043954e-05,0.00130446730483214,0.304573835087916,-0.531782092702871, + -5.93264612549493e-05,0.0018241048869303,0.317609797077046,-0.55919998553722, + -6.10131632049482e-05,0.00234374246902935,0.330645759066176,-0.58661787837157, + -6.2699865154392e-05,0.00286338005112841,0.343681721055305,-0.614035771205919, + -6.43865671061672e-05,0.00338301763322457,0.356717683044434,-0.641453664040269, + -6.60732690552779e-05,0.00390265521532474,0.369753645033565,-0.668871556874619, + -6.77599710058319e-05,0.00442229279742268,0.382789607022694,-0.696289449708968, + -6.94466729558307e-05,0.00494193037952151,0.395825569011824,-0.723707342543318, + -7.11333749062737e-05,0.00546156796161945,0.408861531000954,-0.751125235377668, + -2.64494376026603e-05,-0.00668598208688942,0.0947791461911116,-0.094210172661096, + -2.77343182182865e-05,-0.00621005569337407,0.107338354713484,-0.121939871049442, + -2.90191988338018e-05,-0.00573412929985873,0.119897563235857,-0.149669569437788, + -3.0304079449428e-05,-0.00525820290634327,0.13245677175823,-0.177399267826133, + -3.15889600651653e-05,-0.00478227651282837,0.145015980280602,-0.205128966214479, + -3.28738406804585e-05,-0.00430635011931257,0.157575188802975,-0.232858664602825, + -3.41587212962513e-05,-0.00383042372579745,0.170134397325348,-0.260588362991171, + -3.54436019119331e-05,-0.0033544973322821,0.182693605847721,-0.288318061379517, + -3.67284825276704e-05,-0.00287857093876709,0.195252814370094,-0.316047759767862, + -3.8013363142908e-05,-0.00240264454525096,0.207812022892467,-0.343777458156208, + -3.92982437585898e-05,-0.00192671815173595,0.220371231414839,-0.371507156544554, + -4.0583124373994e-05,-0.00145079175822027,0.232930439937212,-0.3992368549329, + -4.18680049897313e-05,-0.000974865364705257,0.245489648459585,-0.426966553321246, + -4.31528856047469e-05,-0.000498938971188911,0.258048856981958,-0.454696251709591, + -4.44377662207618e-05,-2.30125776745638e-05,0.27060806550433,-0.482425950097937, + -4.57226468366656e-05,0.000452913815840672,0.283167274026703,-0.510155648486283, + -4.70075274520143e-05,0.000928840209356574,0.295726482549076,-0.537885346874629, + -4.8292408067363e-05,0.00140476660287181,0.308285691071449,-0.565615045262975, + -4.95772886830448e-05,0.00188069299638705,0.320844899593822,-0.59334474365132, + -5.08621692989486e-05,0.00235661938990184,0.333404108116194,-0.621074442039666, + -5.21470499141863e-05,0.00283254578341818,0.345963316638568,-0.648804140428012, + -5.34319305303121e-05,0.00330847217693275,0.35852252516094,-0.676533838816358, + -5.47168111455498e-05,0.00378439857044865,0.371081733683313,-0.704263537204703, + -5.60016917613426e-05,0.00426032496396367,0.383640942205686,-0.731993235593049, + -5.72865723769134e-05,0.00473625135747913,0.396200150728059,-0.759722933981395, + -2.21904635240855e-05,-0.00637564714269551,0.0935364647369939,-0.0953246333844103, + -2.31200732917491e-05,-0.00594752312316504,0.105612365103849,-0.123366164024534, + -2.40496830592185e-05,-0.0055193991036343,0.117688265470703,-0.151407694664657, + -2.49792928268544e-05,-0.00509127508410401,0.129764165837558,-0.17944922530478, + -2.59089025945736e-05,-0.00466315106457338,0.141840066204413,-0.207490755944904, + -2.68385123621262e-05,-0.00423502704504308,0.153915966571267,-0.235532286585027, + -2.77681221296788e-05,-0.00380690302551245,0.165991866938122,-0.26357381722515, + -2.8697731897287e-05,-0.00337877900598182,0.178067767304977,-0.291615347865274, + -2.96273416646731e-05,-0.00295065498645108,0.190143667671832,-0.319656878505397, + -3.05569514327808e-05,-0.00252253096692101,0.202219568038687,-0.34769840914552, + -3.14865612001669e-05,-0.00209440694739049,0.214295468405541,-0.375739939785644, + -3.24161709682191e-05,-0.00166628292786086,0.226371368772395,-0.403781470425767, + -3.33457807355497e-05,-0.00123815890832968,0.238447269139251,-0.43182300106589, + -3.42753905027138e-05,-0.000810034888798272,0.250523169506106,-0.459864531706014, + -3.5205000270655e-05,-0.000381910869267976,0.26259906987296,-0.487906062346137, + -3.61346100381521e-05,4.62131502620977e-05,0.274674970239815,-0.51594759298626, + -3.70642198060933e-05,0.000474337169792172,0.286750870606669,-0.543989123626384, + -3.79938295733684e-05,0.000902461189323134,0.298826770973524,-0.572030654266507, + -3.89234393414206e-05,0.00133058520885299,0.310902671340379,-0.600072184906631, + -3.98530491085847e-05,0.00175870922838461,0.322978571707234,-0.628113715546754, + -4.07826588758597e-05,0.00218683324791513,0.335054472074088,-0.656155246186877, + -4.1712268643912e-05,0.00261495726744476,0.347130372440943,-0.684196776827001, + -4.26418784115201e-05,0.00304308128697528,0.359206272807797,-0.712238307467124, + -4.35714881793503e-05,0.0034712053065058,0.371282173174652,-0.740279838107247, + -4.45010979468474e-05,0.00389932932603676,0.383358073541507,-0.76832136874737, + -1.81092964162965e-05,-0.00609442506540392,0.092339161418845,-0.0963791729933219, + -1.87491388606575e-05,-0.00571530823008992,0.103951741424497,-0.124715769627209, + -1.93889813051573e-05,-0.00533619139477615,0.11556432143015,-0.153052366261096, + -2.00288237498514e-05,-0.0049570745594627,0.127176901435802,-0.181388962894984, + -2.06686661942124e-05,-0.00457795772414893,0.138789481441454,-0.209725559528871, + -2.13085086385179e-05,-0.00419884088883482,0.150402061447107,-0.238062156162758, + -2.19483510832119e-05,-0.00381972405352127,0.162014641452759,-0.266398752796645, + -2.25881935274619e-05,-0.00344060721820716,0.173627221458412,-0.294735349430532, + -2.32280359721004e-05,-0.00306149038289383,0.185239801464064,-0.32307194606442, + -2.3867878416739e-05,-0.0026823735475805,0.196852381469716,-0.351408542698307, + -2.45077208610445e-05,-0.00230325671226628,0.208464961475369,-0.379745139332194, + -2.51475633050724e-05,-0.00192413987695206,0.220077541481021,-0.408081735966081, + -2.57874057499885e-05,-0.00154502304163917,0.231690121486673,-0.436418332599969, + -2.64272481942385e-05,-0.00116590620632495,0.243302701492326,-0.464754929233856, + -2.70670906388215e-05,-0.000786789371011176,0.254915281497978,-0.493091525867743, + -2.77069330829605e-05,-0.000407672535697179,0.26652786150363,-0.52142812250163, + -2.83467755275435e-05,-2.85557003834036e-05,0.278140441509283,-0.549764719135517, + -2.89866179723486e-05,0.000350561134929706,0.289753021514935,-0.578101315769404, + -2.96264604167096e-05,0.000729677970243703,0.301365601520587,-0.606437912403291, + -3.02663028611816e-05,0.0011087948055577,0.31297818152624,-0.634774509037179, + -3.09061453060977e-05,0.00148791164087081,0.324590761531892,-0.663111105671066, + -3.15459877504587e-05,0.00186702847618481,0.336203341537545,-0.691447702304953, + -3.21858301944866e-05,0.0022461453114988,0.347815921543197,-0.71978429893884, + -3.28256726390697e-05,0.0026252621468128,0.35942850154885,-0.748120895572728, + -3.34655150839858e-05,0.00300437898212547,0.371041081554501,-0.776457492206615, + -1.44024434682866e-05,-0.00585225334547468,0.0912463662770427,-0.0973260229863607, + -1.48235312124601e-05,-0.00552027537389832,0.102437970731987,-0.125927553466052, + -1.52446189566335e-05,-0.00518829740232207,0.113629575186932,-0.154529083945742, + -1.56657067008348e-05,-0.00485631943074571,0.124821179641876,-0.183130614425433, + -1.60867944450915e-05,-0.00452434145916925,0.136012784096821,-0.211732144905124, + -1.6507882189154e-05,-0.004192363487593,0.147204388551766,-0.240333675384815, + -1.69289699337161e-05,-0.0038603855160172,0.15839599300671,-0.268935205864506, + -1.73500576775565e-05,-0.00352840754444017,0.169587597461655,-0.297536736344197, + -1.7771145421952e-05,-0.00319642957286415,0.180779201916599,-0.326138266823888, + -1.81922331660145e-05,-0.00286445160128768,0.191970806371544,-0.354739797303579, + -1.86133209100214e-05,-0.00253247362971076,0.203162410826489,-0.38334132778327, + -1.9034408654417e-05,-0.00220049565813518,0.214354015281433,-0.41194285826296, + -1.94554963985905e-05,-0.00186851768655849,0.225545619736378,-0.440544388742651, + -1.98765841425974e-05,-0.0015365397149818,0.236737224191323,-0.469145919222342, + -2.02976718876036e-05,-0.00120456174340688,0.247928828646267,-0.497747449702033, + -2.07187596309444e-05,-0.000872583771829083,0.259120433101212,-0.526348980181724, + -2.11398473756175e-05,-0.000540605800253502,0.270312037556156,-0.554950510661415, + -2.15609351198465e-05,-0.000208627828677033,0.281503642011101,-0.583552041141106, + -2.19820228638534e-05,0.000123350142899881,0.292695246466046,-0.612153571620797, + -2.24031106076383e-05,0.000455328114476128,0.30388685092099,-0.640755102100487, + -2.28241983523114e-05,0.000787306086052375,0.315078455375935,-0.669356632580178, + -2.32452860965404e-05,0.00111928405762818,0.326270059830879,-0.697958163059869, + -2.36663738407694e-05,0.00145126202920487,0.337461664285824,-0.72655969353956, + -2.40874615848874e-05,0.00178324000078112,0.348653268740768,-0.755161224019251, + -2.45085493290054e-05,0.00211521797235692,0.359844873195712,-0.783762754498942, + -1.11956750544762e-05,-0.00565263731943455,0.0902970633076586,-0.0981369688707207, + -1.14627406947176e-05,-0.0053633973446745,0.101124377882493,-0.126965406477688, + -1.17298063349314e-05,-0.00507415736991468,0.111951692457328,-0.155793844084655, + -1.19968719753671e-05,-0.00478491739515507,0.122779007032162,-0.184622281691623, + -1.22639376156641e-05,-0.00449567742039525,0.133606321606997,-0.21345071929859, + -1.25310032560999e-05,-0.00420643744563565,0.144433636181831,-0.242279156905557, + -1.27980688963691e-05,-0.00391719747087582,0.155260950756666,-0.271107594512525, + -1.30651345369714e-05,-0.00362795749611622,0.1660882653315,-0.299936032119492, + -1.33322001771297e-05,-0.00333871752135617,0.176915579906335,-0.32876446972646, + -1.35992658176209e-05,-0.00304947754659657,0.187742894481169,-0.357592907333427, + -1.38663314576681e-05,-0.00276023757183652,0.198570209056004,-0.386421344940394, + -1.41333970979374e-05,-0.00247099759707647,0.209397523630839,-0.415249782547362, + -1.44004627384842e-05,-0.00218175762231732,0.220224838205673,-0.444078220154329, + -1.46675283788644e-05,-0.00189251764755749,0.231052152780507,-0.472906657761296, + -1.49345940188006e-05,-0.00160327767279722,0.241879467355342,-0.501735095368264, + -1.52016596595139e-05,-0.00131403769803762,0.252706781930176,-0.530563532975231, + -1.54687252994501e-05,-0.00102479772327735,0.263534096505011,-0.559391970582198, + -1.57357909403855e-05,-0.000735557748518634,0.274361411079845,-0.588220408189166, + -1.60028565808767e-05,-0.000446317773758809,0.28518872565468,-0.617048845796133, + -1.62699222199247e-05,-0.000157077798997651,0.296016040229514,-0.645877283403101, + -1.65369878610822e-05,0.000132162175761508,0.306843354804349,-0.674705721010068, + -1.68040535013514e-05,0.000421402150521111,0.317670669379184,-0.703534158617035, + -1.70711191419537e-05,0.00071064212528027,0.328497983954018,-0.732362596224003, + -1.7338184782334e-05,0.000999882100040317,0.339325298528852,-0.76119103383097, + -1.76052504223811e-05,0.00128912207480036,0.350152613103687,-0.790019471437937, + -8.53627198391105e-06,-0.00549387608430107,0.0895071105732167,-0.0988038979201813, + -8.70110285366987e-06,-0.00524142307825587,0.10003224520615,-0.127818945950395, + -8.86593372320665e-06,-0.00498897007221011,0.110557379839084,-0.156833993980609, + -9.03076459266017e-06,-0.00473651706616451,0.121082514472018,-0.185849042010823, + -9.19559546241899e-06,-0.00448406406011925,0.131607649104952,-0.214864090041036, + -9.36042633220557e-06,-0.00423161105407388,0.142132783737886,-0.24387913807125, + -9.5252572017146e-06,-0.00397915804802829,0.152657918370819,-0.272894186101464, + -9.6900880716122e-06,-0.00372670504198336,0.163183053003753,-0.301909234131678, + -9.8549189410102e-06,-0.00347425203593765,0.173708187636687,-0.330924282161892, + -1.00197498106858e-05,-0.00322179902989195,0.184233322269621,-0.359939330192105, + -1.01845806801393e-05,-0.00296934602384646,0.194758456902554,-0.388954378222319, + -1.03494115502034e-05,-0.00271689301780165,0.205283591535488,-0.417969426252533, + -1.05142424191573e-05,-0.00246444001175528,0.215808726168422,-0.446984474282747, + -1.06790732894435e-05,-0.00221198700571046,0.226333860801355,-0.47599952231296, + -1.08439041586195e-05,-0.00195953399966431,0.236858995434289,-0.505014570343174, + -1.10087350281285e-05,-0.00170708099361883,0.247384130067223,-0.534029618373388, + -1.11735658978596e-05,-0.00145462798757379,0.257909264700157,-0.563044666403602, + -1.13383967679237e-05,-0.00120217498152897,0.26843439933309,-0.592059714433815, + -1.15032276370997e-05,-0.00094972197548282,0.278959533966024,-0.621074762464029, + -1.16680585069417e-05,-0.000697268969437559,0.289484668598958,-0.650089810494243, + -1.18328893772279e-05,-0.000444815963393186,0.300009803231891,-0.679104858524457, + -1.19977202459598e-05,-0.000192362957346592,0.310534937864825,-0.70811990655467, + -1.21625511158019e-05,6.00900486991129e-05,0.321060072497759,-0.737134954584884, + -1.2327381985866e-05,0.000312543054743486,0.331585207130693,-0.766150002615098, + -1.24922128547089e-05,0.000564996060790079,0.342110341763627,-0.795165050645312, + -6.40692016448674e-06,-0.0053710999246836,0.0888728918428511,-0.0993343209497565, + -6.50696889714641e-06,-0.0051489622806824,0.0991560307723809,-0.128497784266617, + -6.60701762988936e-06,-0.00492682463668104,0.109439169701911,-0.157661247583477, + -6.70706636268781e-06,-0.0047046869926799,0.119722308631441,-0.186824710900338, + -6.80711509537524e-06,-0.00448254934867875,0.130005447560971,-0.215988174217198, + -6.90716382828471e-06,-0.00426041170467784,0.140288586490501,-0.245151637534059, + -7.0072125607501e-06,-0.00403827406067636,0.150571725420031,-0.274315100850919, + -7.10726129382611e-06,-0.00381613641667555,0.160854864349561,-0.303478564167779, + -7.20731002623598e-06,-0.00359399877267408,0.17113800327909,-0.33264202748464, + -7.30735875920097e-06,-0.00337186112867305,0.18142114220862,-0.3618054908015, + -7.40740749172186e-06,-0.0031497234846718,0.19170428113815,-0.39096895411836, + -7.5074562244648e-06,-0.00292758584067077,0.20198742006768,-0.420132417435221, + -7.60750495754081e-06,-0.00270544819666951,0.21227055899721,-0.449295880752081, + -7.7075536905058e-06,-0.00248331055266848,0.22255369792674,-0.478459344068942, + -7.80760242291567e-06,-0.00226117290866701,0.23283683685627,-0.507622807385802, + -7.90765115599168e-06,-0.00203903526466642,0.2431199757858,-0.536786270702662, + -8.0076998886236e-06,-0.00181689762066495,0.25340311471533,-0.565949734019523, + -8.10774862125552e-06,-0.00159475997666414,0.263686253644859,-0.595113197336383, + -8.20779735388744e-06,-0.00137262233266267,0.27396939257439,-0.624276660653243, + -8.30784608663038e-06,-0.00115048468866163,0.284252531503919,-0.653440123970104, + -8.40789482015047e-06,-0.000928347044661493,0.294535670433449,-0.682603587286964, + -8.50794355211626e-06,-0.000706209400658686,0.30481880936298,-0.711767050603825, + -8.60799228508125e-06,-0.0004840717566581,0.315101948292509,-0.740930513920685, + -8.70804101815725e-06,-0.000261934112657958,0.325385087222038,-0.770093977237545, + -8.80808975034508e-06,-3.97964686555952e-05,0.335668226151569,-0.799257440554406, + -4.7493710347013e-06,-0.00527815649809937,0.0883781638102335,-0.0997450522043126, + -4.80971551430898e-06,-0.00508013826492776,0.0984729004798276,-0.129023440389591, + -4.8700599936391e-06,-0.00488212003175592,0.108567637149422,-0.158301828574869, + -4.93040447338555e-06,-0.00468410179858436,0.118662373819016,-0.187580216760147, + -4.99074895271567e-06,-0.00448608356541258,0.12875711048861,-0.216858604945425, + -5.05109343229559e-06,-0.00428806533224102,0.138851847158204,-0.246136993130703, + -5.11143791193103e-06,-0.00409004709906957,0.148946583827798,-0.275415381315981, + -5.17178239123339e-06,-0.00389202886589768,0.159041320497392,-0.30469376950126, + -5.23212687070229e-06,-0.0036940106327259,0.169136057166986,-0.333972157686538, + -5.2924713502267e-06,-0.00349599239955434,0.17923079383658,-0.363250545871816, + -5.35281583002867e-06,-0.00329797416638278,0.189325530506175,-0.392528934057094, + -5.41316030960859e-06,-0.003099955933211,0.199420267175769,-0.421807322242372, + -5.47350478896647e-06,-0.00290193770003966,0.209515003845362,-0.45108571042765, + -5.53384926815781e-06,-0.00270391946686721,0.219609740514957,-0.480364098612928, + -5.59419374790426e-06,-0.00250590123369587,0.229704477184551,-0.509642486798207, + -5.65453822720663e-06,-0.00230788300052409,0.239799213854145,-0.538920874983485, + -5.71488270706411e-06,-0.00210986476735253,0.249893950523739,-0.568199263168763, + -5.77522718625545e-06,-0.00191184653418097,0.259988687193333,-0.597477651354041, + -5.83557166555781e-06,-0.0017138283010083,0.270083423862928,-0.626756039539319, + -5.89591614541529e-06,-0.00151581006783719,0.280178160532522,-0.656034427724597, + -5.95626062516175e-06,-0.00131779183466607,0.290272897202115,-0.685312815909875, + -6.01660510446411e-06,-0.00111977360149407,0.30036763387171,-0.714591204095153, + -6.07694958443261e-06,-0.000921755368323396,0.310462370541303,-0.743869592280432, + -6.13729406373498e-06,-0.000723737135150948,0.320557107210898,-0.77314798046571, + -6.19763854325939e-06,-0.000525718901979388,0.330651843880492,-0.802426368650988, + -3.48715964956781e-06,-0.00520890474348573,0.0880008344408879,-0.100056566544096, + -3.523667049532e-06,-0.00502955531331717,0.0979520895970044,-0.12942211815829, + -3.56017444960721e-06,-0.00485020588314866,0.107903344753121,-0.158787669772483, + -3.59668184971018e-06,-0.00467085645298015,0.117854599909237,-0.188153221386677, + -3.63318924967437e-06,-0.00449150702281154,0.127805855065354,-0.21751877300087, + -3.6696966495553e-06,-0.0043121575926427,0.13775711022147,-0.246884324615064, + -3.70620404976929e-06,-0.00413280816247441,0.147708365377587,-0.276249876229257, + -3.74271144976124e-06,-0.00395345873230579,0.157659620533703,-0.305615427843451, + -3.77921884947563e-06,-0.00377410930213684,0.16761087568982,-0.334980979457644, + -3.81572624991167e-06,-0.00359475987196856,0.177562130845936,-0.364346531071838, + -3.8522336498481e-06,-0.00341541044180005,0.187513386002053,-0.393712082686032, + -3.88874105000658e-06,-0.00323606101163154,0.197464641158169,-0.423077634300225, + -3.92524844994302e-06,-0.00305671158146303,0.207415896314286,-0.452443185914419, + -3.96175585004599e-06,-0.0028773621512943,0.217367151470402,-0.481808737528612, + -3.99826324992691e-06,-0.00269801272112535,0.227318406626519,-0.511174289142806, + -4.03477065002988e-06,-0.00251866329095707,0.237269661782635,-0.540539840756999, + -4.07127805013285e-06,-0.00233931386078856,0.247220916938752,-0.569905392371193, + -4.1077854501248e-06,-0.00215996443062028,0.257172172094868,-0.599270943985386, + -4.14429285000573e-06,-0.00198061500045155,0.267123427250985,-0.62863649559958, + -4.18080025044176e-06,-0.00180126557028304,0.277074682407101,-0.658002047213773, + -4.21730765043371e-06,-0.00162191614011453,0.287025937563218,-0.687367598827967, + -4.25381505009259e-06,-0.00144256670994558,0.296977192719334,-0.71673315044216, + -4.29032245052863e-06,-0.00126321727977796,0.30692844787545,-0.746098702056354, + -4.32682984996546e-06,-0.00108386784960768,0.316879703031568,-0.775464253670547, + -4.36333724973537e-06,-0.000904518419439171,0.326830958187684,-0.804829805284741, + -2.54199221810802e-06,-0.00515790214524514,0.0877179488119476,-0.100289131280884, + -2.5643166282896e-06,-0.00499270161256504,0.0975617543160146,-0.129719755790012, + -2.58664103830464e-06,-0.00482750107988472,0.107405559820082,-0.15915038029914, + -2.60896544848621e-06,-0.00466230054720473,0.117249365324149,-0.188581004808268, + -2.63128985850125e-06,-0.00449710001452464,0.127093170828216,-0.218011629317396, + -2.65361426871058e-06,-0.00433189948184465,0.136936976332283,-0.247442253826524, + -2.67593867891991e-06,-0.00416669894916466,0.14678078183635,-0.276872878335652, + -2.69826308918475e-06,-0.00400149841648467,0.156624587340417,-0.30630350284478, + -2.72058749889448e-06,-0.0038362978838038,0.166468392844484,-0.335734127353908, + -2.7429119090483e-06,-0.00367109735112403,0.176312198348551,-0.365164751863036, + -2.76523631953518e-06,-0.00350589681844427,0.186156003852618,-0.394595376372163, + -2.78756072946695e-06,-0.00334069628576406,0.195999809356685,-0.424026000881291, + -2.80988513956526e-06,-0.00317549575308407,0.205843614860751,-0.453456625390419, + -2.83220954977459e-06,-0.00301029522040386,0.215687420364818,-0.482887249899547, + -2.85453395976187e-06,-0.00284509468772387,0.225531225868885,-0.512317874408675, + -2.87685836974916e-06,-0.00267989415504299,0.235375031372953,-0.541748498917803, + -2.89918278006951e-06,-0.00251469362236367,0.245218836877019,-0.571179123426931, + -2.92150719050088e-06,-0.00234949308968391,0.255062642381086,-0.600609747936059, + -2.94383160026612e-06,-0.00218429255700325,0.264906447885153,-0.630040372445187, + -2.9661560106975e-06,-0.00201909202432349,0.274750253389221,-0.659470996954315, + -2.98848042024069e-06,-0.00185389149164283,0.284594058893288,-0.688901621463443, + -3.01080483111615e-06,-0.00168869095896396,0.294437864397354,-0.718332245972571, + -3.03312924121446e-06,-0.0015234904262833,0.304281669901422,-0.747762870481698, + -3.05545365031357e-06,-0.00135828989360176,0.314125475405489,-0.777193494990826, + -3.07777806130005e-06,-0.00119308936092244,0.323969280909556,-0.806624119499954, + -1.8430865197927e-06,-0.00512065534514089,0.0875085860192835,-0.100460717415729, + -1.8569617065145e-06,-0.00496600983648232,0.0972729333748349,-0.129939352670936, + -1.87083689301426e-06,-0.00481136432782359,0.107037280730386,-0.159417987926143, + -1.88471207970831e-06,-0.00465671881916507,0.116801628085938,-0.18889662318135, + -1.89858726634684e-06,-0.00450207331050667,0.126565975441489,-0.218375258436557, + -1.91246245301313e-06,-0.00434742780184805,0.13633032279704,-0.247853893691764, + -1.92633763973493e-06,-0.00419278229318942,0.146094670152592,-0.277332528946971, + -1.9402128262902e-06,-0.0040381367845308,0.155859017508143,-0.306811164202179, + -1.95408801273445e-06,-0.00388349127587184,0.165623364863695,-0.336289799457386, + -1.96796319962278e-06,-0.00372884576721355,0.175387712219246,-0.365768434712593, + -1.98183838573396e-06,-0.00357420025855437,0.185152059574797,-0.3952470699678, + -1.99571357228923e-06,-0.00341955474989608,0.194916406930348,-0.424725705223007, + -2.00958875951063e-06,-0.00326490924123801,0.2046807542859,-0.454204340478215, + -2.0234639460659e-06,-0.0031102637325795,0.214445101641451,-0.483682975733422, + -2.03733913262116e-06,-0.00295561822392054,0.224209448997003,-0.513161610988629, + -2.05121431928745e-06,-0.00280097271526225,0.233973796352554,-0.542640246243836, + -2.06508950584272e-06,-0.00264632720660352,0.243738143708105,-0.572118881499043, + -2.07896469239799e-06,-0.00249168169794434,0.253502491063657,-0.60159751675425, + -2.09283987928632e-06,-0.00233703618928649,0.263266838419208,-0.631076152009458, + -2.10671506528648e-06,-0.00218239068062687,0.27303118577476,-0.660554787264665, + -2.12059025206379e-06,-0.00202774517196813,0.282795533130311,-0.690033422519872, + -2.1344654388411e-06,-0.00187309966331028,0.292559880485862,-0.719512057775079, + -2.14834062617353e-06,-0.00171845415465288,0.302324227841413,-0.748990693030286, + -2.1622158127288e-06,-0.0015638086459937,0.312088575196965,-0.778469328285493, + -2.17609099806282e-06,-0.00140916313733364,0.321852922552516,-0.8079479635407, + -1.33107356933837e-06,-0.00509361934727198,0.087355110602369,-0.100586213915024, + -1.33986652878226e-06,-0.00494675606574968,0.0970612452386173,-0.130099963782301, + -1.3486594881984e-06,-0.00479989278422721,0.106767379874866,-0.159613713649577, + -1.35745244772556e-06,-0.00465302950270519,0.116473514511114,-0.189127463516854, + -1.36624540691965e-06,-0.00450616622118238,0.126179649147362,-0.21864121338413, + -1.37503836644681e-06,-0.00435930293966025,0.135885783783611,-0.248154963251406, + -1.38383132580744e-06,-0.00421243965813756,0.145591918419859,-0.277668713118683, + -1.39262428516806e-06,-0.00406557637661531,0.155298053056108,-0.307182462985959, + -1.40141724502829e-06,-0.00391871309509373,0.165004187692355,-0.336696212853236, + -1.41021020416687e-06,-0.00377184981357082,0.174710322328604,-0.366209962720512, + -1.41900316336097e-06,-0.00362498653204812,0.184416456964853,-0.395723712587788, + -1.42779612311017e-06,-0.00347812325052632,0.194122591601101,-0.425237462455065, + -1.43658908258182e-06,-0.00333125996900407,0.203828726237349,-0.454751212322341, + -1.44538204216449e-06,-0.00318439668748161,0.213534860873598,-0.484264962189618, + -1.45417500119205e-06,-0.00303753340595914,0.223240995509846,-0.513778712056894, + -1.46296796088574e-06,-0.00289067012443711,0.232947130146094,-0.543292461924171, + -1.47176092013535e-06,-0.00274380684291464,0.242653264782342,-0.572806211791447, + -1.48055387994006e-06,-0.0025969435613924,0.252359399418591,-0.602319961658723, + -1.48934683941171e-06,-0.00245008027987037,0.262065534054839,-0.631833711526, + -1.49813979866131e-06,-0.00230321699834768,0.271771668691087,-0.661347461393276, + -1.50693275735581e-06,-0.00215635371682454,0.281477803327336,-0.690861211260553, + -1.51572571716052e-06,-0.00200949043530274,0.291183937963584,-0.720374961127829, + -1.52451867696524e-06,-0.00186262715378094,0.300890072599832,-0.749888710995105, + -1.533311636992e-06,-0.00171576387225958,0.31059620723608,-0.779402460862382, + -1.54210459568649e-06,-0.00156890059073556,0.320302341872329,-0.808916210729658, + -9.58531469835711e-07,-0.00507408061420334,0.087243389692799,-0.100677416388633, + -9.64218329235766e-07,-0.00493290601486351,0.0969071673851203,-0.13021668521061, + -9.69905188913378e-07,-0.00479173141552414,0.106570945077441,-0.159755954032586, + -9.75592048313434e-07,-0.00465055681618431,0.116234722769763,-0.189295222854562, + -9.81278907741245e-07,-0.00450938221684438,0.125898500462084,-0.218834491676539, + -9.86965767113546e-07,-0.00436820761750445,0.135562278154405,-0.248373760498515, + -9.92652626763402e-07,-0.00422703301816485,0.145226055846727,-0.277913029320492, + -9.98339485969169e-07,-0.00408585841882503,0.154889833539048,-0.307452298142468, + -1.00402634573005e-06,-0.00394468381948543,0.164553611231369,-0.336991566964444, + -1.00971320521337e-06,-0.00380350922014583,0.17421738892369,-0.366530835786421, + -1.01540006491874e-06,-0.00366233462080645,0.183881166616011,-0.396070104608397, + -1.02108692418001e-06,-0.00352116002146663,0.193544944308333,-0.425609373430374, + -1.02677378344129e-06,-0.00337998542212614,0.203208722000654,-0.45514864225235, + -1.03246064275808e-06,-0.00323881082278676,0.212872499692975,-0.484687911074327, + -1.03814750251896e-06,-0.00309763622344739,0.222536277385296,-0.514227179896303, + -1.04383436183575e-06,-0.00295646162410712,0.232200055077618,-0.543766448718279, + -1.04952122137458e-06,-0.00281528702476774,0.241863832769939,-0.573305717540256, + -1.05520808113546e-06,-0.00267411242542837,0.25152761046226,-0.602844986362232, + -1.0608949406743e-06,-0.00253293782608832,0.261191388154582,-0.632384255184209, + -1.06658179988006e-06,-0.00239176322674828,0.270855165846903,-0.661923524006185, + -1.07226865964094e-06,-0.00225058862740868,0.280518943539224,-0.691462792828161, + -1.07795551851364e-06,-0.00210941402806819,0.290182721231546,-0.721002061650138, + -1.0836423781635e-06,-0.00196823942872948,0.299846498923866,-0.750541330472114, + -1.08932923759131e-06,-0.00182706482938944,0.309510276616188,-0.780080599294091, + -1.09501609724116e-06,-0.00168589023004984,0.319174054308509,-0.809619868116067, + -5.62710645622966e-05,-0.00929027179783393,0.111581322726033,-0.0970644369926607, + -6.07047215306356e-05,-0.00861705818975056,0.126820653135254,-0.122291084080049, + -6.51383784987802e-05,-0.00794384458166708,0.142059983544474,-0.147517731167437, + -6.9572035467147e-05,-0.00727063097358371,0.157299313953695,-0.172744378254826, + -7.40056924353194e-05,-0.00659741736550012,0.172538644362916,-0.197971025342214, + -7.84393494034918e-05,-0.00592420375741654,0.187777974772136,-0.223197672429603, + -8.28730063719418e-05,-0.0052509901493335,0.203017305181357,-0.248424319516991, + -8.73066633402808e-05,-0.00457777654125024,0.218256635590577,-0.273650966604379, + -9.17403203085643e-05,-0.00390456293316666,0.233495965999798,-0.298877613691768, + -9.61739772764036e-05,-0.00323134932508262,0.248735296409019,-0.324104260779156, + -0.000100607634244854,-0.00255813571699948,0.26397462681824,-0.349330907866544, + -0.000105041291213193,-0.00188492210891611,0.27921395722746,-0.374557554953933, + -0.000109474948181809,-0.00121170850083296,0.294453287636681,-0.399784202041321, + -0.000113908605149815,-0.000538494892749375,0.309692618045902,-0.42501084912871, + -0.000118342262118154,0.000134718715334214,0.324931948455123,-0.450237496216098, + -0.000122775919086493,0.00080793232341736,0.340171278864343,-0.475464143303486, + -0.000127209576054721,0.00148114593150073,0.355410609273564,-0.500690790390875, + -0.00013164323302306,0.00215435953958409,0.370649939682784,-0.525917437478263, + -0.000136076889990622,0.00282757314766835,0.385889270092005,-0.551144084565651, + -0.000140510546959405,0.00350078675575149,0.401128600501226,-0.57637073165304, + -0.000144944203927633,0.00417400036383464,0.416367930910446,-0.601597378740428, + -0.000149377860895306,0.00484721397191867,0.431607261319667,-0.626824025827817, + -0.000153811517863756,0.00552042758000182,0.446846591728888,-0.652050672915205, + -0.000158245174832095,0.00619364118808541,0.462085922138109,-0.677277320002594, + -0.000162678831800656,0.00686685479616855,0.477325252547329,-0.702503967089982, + -5.58898615238002e-05,-0.00924955997740112,0.111469737258622,-0.0971782211083355, + -6.02689985940985e-05,-0.00857811775207085,0.12666948406076,-0.122433034186761, + -6.46481356645356e-05,-0.00790667552674051,0.141869230862897,-0.147687847265187, + -6.9027272734612e-05,-0.00723523330140985,0.157068977665035,-0.172942660343612, + -7.34064098051879e-05,-0.00656379107607996,0.172268724467172,-0.198197473422038, + -7.77855468755417e-05,-0.00589234885074974,0.187468471269309,-0.223452286500464, + -8.21646839457291e-05,-0.00522090662541919,0.202668218071447,-0.248707099578889, + -8.65438210163605e-05,-0.00454946440008919,0.217867964873584,-0.273961912657315, + -9.09229580866588e-05,-0.00387802217475897,0.233067711675721,-0.299216725735741, + -9.53020951567907e-05,-0.00320657994942852,0.248267458477859,-0.324471538814167, + -9.96812322275331e-05,-0.00253513772409852,0.263467205279996,-0.349726351892592, + -0.000104060369297776,-0.0018636954987683,0.278666952082133,-0.374981164971018, + -0.000108439506367519,-0.00119225327343742,0.293866698884271,-0.400235978049443, + -0.000112818643438484,-0.000520811048107639,0.309066445686408,-0.425490791127869, + -0.000117197780508782,0.00015063117722236,0.324266192488545,-0.450745604206295, + -0.000121576917578969,0.000822073402552803,0.339465939290682,-0.476000417284721, + -0.000125956054649046,0.00149351562788413,0.354665686092821,-0.501255230363146, + -0.000130335191719788,0.00216495785321369,0.369865432894958,-0.526510043441572, + -0.000134714328789864,0.00283640007854435,0.385065179697095,-0.551764856519997, + -0.000139093465860385,0.00350784230387413,0.400264926499232,-0.577019669598423, + -0.000143472602930794,0.0041792845292048,0.41546467330137,-0.602274482676849, + -0.000147851740001426,0.00485072675453413,0.430664420103507,-0.627529295755275, + -0.000152230877071502,0.00552216897986435,0.445864166905644,-0.6527841088337, + -0.000156610014141356,0.0061936112051959,0.461063913707782,-0.678038921912126, + -0.000160989151211655,0.00686505343052612,0.476263660509919,-0.703293734990551, + -5.53650565652264e-05,-0.00919379537165227,0.111315987704391,-0.0973346360612716, + -5.96696161429267e-05,-0.00852484240257845,0.126461231965598,-0.122628167919875, + -6.39741757204604e-05,-0.00785588943350446,0.141606476226805,-0.147921699778478, + -6.82787352981884e-05,-0.00718693646443092,0.156751720488012,-0.173215231637081, + -7.25832948758054e-05,-0.00651798349535715,0.171896964749218,-0.198508763495684, + -7.68878544534224e-05,-0.00584903052628316,0.187042209010425,-0.223802295354287, + -8.11924140310949e-05,-0.00518007755720939,0.202187453271632,-0.24909582721289, + -8.54969736086564e-05,-0.00451112458813552,0.217332697532839,-0.274389359071493, + -8.98015331861068e-05,-0.00384217161906153,0.232477941794046,-0.299682890930096, + -9.41060927638349e-05,-0.00317321864998799,0.247623186055253,-0.3249764227887, + -9.84106523415074e-05,-0.00250426568091422,0.26276843031646,-0.350269954647302, + -0.000102715211918958,-0.00183531271184001,0.277913674577667,-0.375563486505906, + -0.000107019771497074,-0.00116635974276669,0.293058918838874,-0.400857018364509, + -0.000111324331074081,-0.000497406773692033,0.308204163100081,-0.426150550223112, + -0.000115628890651753,0.000171546195381511,0.323349407361288,-0.451444082081715, + -0.000119933450229315,0.000840499164455499,0.338494651622495,-0.476737613940318, + -0.000124238009806876,0.00150945213352949,0.353639895883702,-0.502031145798921, + -0.00012854256938466,0.00217840510260281,0.368785140144908,-0.527324677657524, + -0.000132847128962554,0.00284735807167635,0.383930384406115,-0.552618209516127, + -0.000137151688540449,0.0035163110407499,0.399075628667322,-0.577911741374731, + -0.000141456248116789,0.00418526400982522,0.414220872928529,-0.603205273233334, + -0.000145760807695128,0.00485421697889832,0.429366117189736,-0.628498805091937, + -0.000150065367272689,0.00552316994797231,0.444511361450943,-0.65379233695054, + -0.000154369926850584,0.00619212291704541,0.45965660571215,-0.679085868809143, + -0.000158674486428256,0.00686107588611895,0.474801849973357,-0.704379400667746, + -5.46470261018894e-05,-0.00911802876212842,0.111105388761253,-0.0975482068911161, + -5.88504542051171e-05,-0.0084525760314943,0.126176049380055,-0.122894605830889, + -6.30538823081228e-05,-0.00778712330085995,0.141246709998856,-0.148241004770662, + -6.72573104111285e-05,-0.0071216705702255,0.156317370617657,-0.173587403710435, + -7.14607385142174e-05,-0.00645621783959116,0.171388031236459,-0.198933802650208, + -7.56641666170843e-05,-0.00579076510895682,0.18645869185526,-0.224280201589981, + -7.98675947204508e-05,-0.0051253123783227,0.201529352474061,-0.249626600529754, + -8.40710228234287e-05,-0.00445985964768836,0.216600013092862,-0.274972999469527, + -8.82744509264621e-05,-0.00379440691705413,0.231670673711663,-0.3003193984093, + -9.24778790298286e-05,-0.00312895418642012,0.246741334330465,-0.325665797349073, + -9.66813071330286e-05,-0.00246350145578611,0.261811994949266,-0.351012196288846, + -0.000100884735236006,-0.00179804872515166,0.276882655568067,-0.376358595228619, + -0.00010508816333854,-0.00113259599451632,0.291953316186869,-0.401704994168392, + -0.00010929159144224,-0.000467143263882974,0.30702397680567,-0.427051393108165, + -0.000113495019545162,0.000198309466751478,0.322094637424471,-0.452397792047938, + -0.000117698447647752,0.000863762197386597,0.337165298043273,-0.477744190987711, + -0.000121901875751007,0.00152921492802016,0.352235958662074,-0.503090589927484, + -0.000126105303854152,0.00219466765865461,0.367306619280875,-0.528436988867257, + -0.000130308731957296,0.00286012038928884,0.382377279899676,-0.55378338780703, + -0.000134512160060329,0.0035255731199233,0.397447940518477,-0.579129786746803, + -0.000138715588163807,0.00419102585055731,0.412518601137279,-0.604476185686576, + -0.00014291901626684,0.00485647858119176,0.42758926175608,-0.629822584626349, + -0.00014712244436943,0.00552193131182621,0.442659922374881,-0.655168983566122, + -0.000151325872472796,0.00618738404246022,0.457730582993683,-0.680515382505895, + -0.000155529300575608,0.00685283677309467,0.472801243612484,-0.705861781445668, + -5.36729334582597e-05,-0.00901621422295495,0.110819244155366,-0.097837145662461, + -5.77408420101566e-05,-0.00835568333326708,0.125788697382655,-0.123255068178225, + -6.18087505618037e-05,-0.00769515244357899,0.140758150609944,-0.148672990693989, + -6.58766591136173e-05,-0.00703462155389123,0.155727603837232,-0.174090913209753, + -6.99445676652366e-05,-0.00637409066420302,0.170697057064521,-0.199508835725517, + -7.40124762173e-05,-0.00571355977451549,0.185666510291809,-0.22492675824128, + -7.80803847689193e-05,-0.0050530288848275,0.200635963519098,-0.250344680757045, + -8.21482933206497e-05,-0.00439249799513952,0.215605416746386,-0.275762603272808, + -8.6216201872491e-05,-0.00373196710545165,0.230574869973675,-0.301180525788572, + -9.02841104244989e-05,-0.003071436215764,0.245544323200964,-0.326598448304336, + -9.43520189762292e-05,-0.00241090532607613,0.260513776428252,-0.3520163708201, + -9.84199275280151e-05,-0.00175037443638826,0.275483229655541,-0.377434293335864, + -0.000102487836079579,-0.00108984354669972,0.29045268288283,-0.402852215851628, + -0.000106555744631143,-0.000429312657011849,0.305422136110118,-0.428270138367392, + -0.000110623653183262,0.000231218232675579,0.320391589337406,-0.453688060883156, + -0.000114691561734936,0.00089174912236345,0.335361042564695,-0.47910598339892, + -0.000118759470286611,0.00155228001205199,0.350330495791984,-0.504523905914684, + -0.000122827378838397,0.00221281090173986,0.365299949019272,-0.529941828430447, + -0.000126895287390294,0.00287334179142751,0.380269402246561,-0.555359750946211, + -0.000130963195941747,0.00353387268111582,0.395238855473849,-0.580777673461975, + -0.000135031104494421,0.00419440357080259,0.410208308701138,-0.606195595977739, + -0.000139099013045429,0.00485493446049112,0.425177761928426,-0.631613518493503, + -0.000143166921596993,0.00551546535017922,0.440147215155715,-0.657031441009267, + -0.00014723483014889,0.00617599623986775,0.455116668383004,-0.682449363525031, + -0.000151302738700565,0.00683652712955496,0.470086121610292,-0.707867286040795, + -5.23665861979217e-05,-0.00888141198140296,0.110434705288464,-0.0982232166583781, + -5.62557988355028e-05,-0.00822779229853743,0.125268383429118,-0.123736706750919, + -6.01450114732227e-05,-0.00757417261567206,0.140102061569772,-0.14925019684346, + -6.40342241108316e-05,-0.00692055293280636,0.154935739710426,-0.174763686936001, + -6.7923436748496e-05,-0.00626693324994099,0.16976941785108,-0.200277177028542, + -7.18126493859939e-05,-0.00561331356707528,0.184603095991734,-0.225790667121083, + -7.57018620237693e-05,-0.00495969388421003,0.199436774132388,-0.251304157213624, + -7.95910746613782e-05,-0.00430607420134432,0.214270452273042,-0.276817647306165, + -8.34802872992091e-05,-0.00365245451847929,0.229104130413696,-0.302331137398706, + -8.73694999366514e-05,-0.00299883483561314,0.24393780855435,-0.327844627491247, + -9.12587125742048e-05,-0.00234521515274766,0.258771486695004,-0.353358117583788, + -9.51479252120913e-05,-0.0016915954698824,0.273605164835658,-0.378871607676329, + -9.90371378495336e-05,-0.0010379757870167,0.288438842976312,-0.404385097768869, + -0.000102926350487142,-0.000384356104151218,0.303272521116966,-0.42989858786141, + -0.000106815563124862,0.000269263578714041,0.31810619925762,-0.455412077953951, + -0.000110704775762693,0.000922883261579521,0.332939877398274,-0.480925568046492, + -0.000114593988400191,0.001576502944445,0.347773555538928,-0.506439058139033, + -0.000118483201037578,0.0022301226273107,0.362607233679582,-0.531952548231574, + -0.000122372413675853,0.00288374231017552,0.377440911820236,-0.557466038324115, + -0.000126261626313795,0.003537361993041,0.39227458996089,-0.582979528416656, + -0.000130150838950849,0.00419098167590715,0.407108268101545,-0.608493018509197, + -0.000134040051588125,0.00484460135877285,0.421941946242198,-0.634006508601738, + -0.000137929264225845,0.005498221041639,0.436775624382853,-0.659519998694279, + -0.000141818476864009,0.00615184072450292,0.451609302523506,-0.68503348878682, + -0.000145707689501173,0.00680546040736907,0.46644298066416,-0.710546978879361, + -5.06414664759591e-05,-0.00870641494209479,0.109925519599893,-0.0987305867049729, + -5.4300090960635e-05,-0.00806246084650675,0.124579815825865,-0.124369670603822, + -5.7958715445644e-05,-0.00741850675091893,0.139234112051837,-0.150008754502671, + -6.16173399302089e-05,-0.00677455265533078,0.153888408277809,-0.175647838401519, + -6.52759644150236e-05,-0.00613059855974274,0.168542704503781,-0.201286922300368, + -6.89345888998938e-05,-0.00548664446415503,0.183197000729753,-0.226926006199217, + -7.25932133845419e-05,-0.00484269036856666,0.197851296955725,-0.252565090098066, + -7.62518378695787e-05,-0.00419873627297918,0.212505593181697,-0.278204173996915, + -7.99104623543934e-05,-0.00355478217739136,0.227159889407669,-0.303843257895764, + -8.35690868390415e-05,-0.0029108280818031,0.241814185633641,-0.329482341794613, + -8.72277113236342e-05,-0.00226687398621461,0.256468481859614,-0.355121425693461, + -9.08863358084488e-05,-0.00162291989062679,0.271122778085585,-0.38076050959231, + -9.45449602932635e-05,-0.000978965795038311,0.285777074311558,-0.406399593491159, + -9.82035847781892e-05,-0.000335011699450938,0.30043137053753,-0.432038677390008, + -0.000101862209262782,0.000308942396137546,0.315085666763502,-0.457677761288857, + -0.00010552083374793,0.000952896491724697,0.329739962989474,-0.483316845187706, + -0.000109179458232411,0.0015968505873134,0.344394259215446,-0.508955929086555, + -0.000112838082717559,0.00224080468290078,0.359048555441418,-0.534595012985404, + -0.000116496707201819,0.00288475877848993,0.37370285166739,-0.560234096884252, + -0.000120155331686522,0.00352871287407774,0.388357147893362,-0.585873180783101, + -0.000123813956171559,0.00417266696966534,0.403011444119334,-0.61151226468195, + -0.000127472580656374,0.00481662106525338,0.417665740345306,-0.637151348580799, + -0.000131131205141188,0.00546057516084097,0.432320036571278,-0.662790432479648, + -0.000134789829626225,0.00610452925642901,0.44697433279725,-0.688429516378497, + -0.000138448454110485,0.0067484833520175,0.461628629023222,-0.714068600277346, + -4.84092007519699e-05,-0.00848499191781982,0.109264353836443,-0.0993830256763889, + -5.17786513329621e-05,-0.007854441457956,0.123686396404011,-0.125183613578783, + -5.51481019137601e-05,-0.00722389099809195,0.13810843897158,-0.150984201481176, + -5.85175524945858e-05,-0.00659334053822791,0.152530481539148,-0.17678478938357, + -6.18870030755225e-05,-0.00596279007836398,0.166952524106717,-0.202585377285963, + -6.52564536562927e-05,-0.0053322396184996,0.181374566674286,-0.228385965188357, + -6.86259042370074e-05,-0.00470168915863556,0.195796609241854,-0.25418655309075, + -7.19953548179442e-05,-0.00407113869877151,0.210218651809423,-0.279987140993144, + -7.53648053989919e-05,-0.00344058823890747,0.224640694376991,-0.305787728895538, + -7.87342559796511e-05,-0.00281003777904343,0.23906273694456,-0.331588316797931, + -8.21037065606434e-05,-0.00217948731917939,0.253484779512128,-0.357388904700325, + -8.54731571413025e-05,-0.00154893685931512,0.267906822079697,-0.383189492602718, + -8.88426077221283e-05,-0.000918386399451299,0.282328864647265,-0.408990080505112, + -9.22120583030095e-05,-0.000287835939587255,0.296750907214834,-0.434790668407506, + -9.55815088841128e-05,0.000342714520276566,0.311172949782402,-0.460591256309899, + -9.8950959464883e-05,0.000973264980140609,0.325594992349971,-0.486391844212293, + -0.000102320410045764,0.00160381544000487,0.34001703491754,-0.512192432114686, + -0.000105689860626312,0.00223436589986914,0.354439077485108,-0.53799302001708, + -0.000109059311206972,0.0028649163597334,0.368861120052677,-0.563793607919474, + -0.000112428761788186,0.00349546681959723,0.383283162620245,-0.589594195821867, + -0.000115798212368845,0.00412601727946127,0.397705205187814,-0.615394783724261, + -0.000119167662950281,0.00475656773932487,0.412127247755382,-0.641195371626654, + -0.000122537113530941,0.00538711819918891,0.42654929032295,-0.666995959529048, + -0.000125906564111822,0.00601766865905295,0.440971332890519,-0.692796547431442, + -0.000129276014692481,0.00664821911891789,0.455393375458088,-0.718597135333835, + -4.5595620421085e-05,-0.00821381402702714,0.108427395723077,-0.100198949943295, + -4.8615583543743e-05,-0.00760157123076188,0.122556482353515,-0.126201510813993, + -5.16355466664287e-05,-0.00698932843449651,0.136685568983954,-0.152204071684692, + -5.46555097888923e-05,-0.00637708563823103,0.150814655614392,-0.17820663255539, + -5.76754729117446e-05,-0.00576484284196588,0.16494374224483,-0.204209193426089, + -6.06954360342082e-05,-0.00515260004570006,0.179072828875269,-0.230211754296787, + -6.37153991569495e-05,-0.00454035724943513,0.193201915505707,-0.256214315167486, + -6.67353622795797e-05,-0.00392811445316954,0.207331002136145,-0.282216876038184, + -6.97553254023209e-05,-0.00331587165690439,0.221460088766583,-0.308219436908882, + -7.27752885247845e-05,-0.00270362886063857,0.235589175397022,-0.334221997779581, + -7.57952516476923e-05,-0.00209138606437387,0.24971826202746,-0.360224558650279, + -7.88152147704335e-05,-0.00147914326810827,0.263847348657898,-0.386227119520978, + -8.18351778930637e-05,-0.000866900471843124,0.277976435288336,-0.412229680391676, + -8.48551410155274e-05,-0.00025465767557753,0.292105521918775,-0.438232241262375, + -8.78751041384351e-05,0.00035758512068762,0.306234608549213,-0.464234802133073, + -9.08950672607878e-05,0.000969827916953658,0.320363695179652,-0.490237363003771, + -9.39150303838066e-05,0.00158207071321814,0.334492781810089,-0.51623992387447, + -9.69349935058261e-05,0.0021943135094844,0.348621868440528,-0.542242484745168, + -9.99549566289559e-05,0.00280655630574911,0.362750955070966,-0.568245045615867, + -0.000102974919751309,0.0034187991020147,0.376880041701404,-0.594247606486565, + -0.000105994882873661,0.00403104189828074,0.391009128331843,-0.620250167357264, + -0.000109014845996902,0.004643284694545,0.405138214962281,-0.646252728227962, + -0.000112034809119255,0.00525552749081104,0.419267301592719,-0.672255289098661, + -0.000115054772241496,0.00586777028707708,0.433396388223158,-0.698257849969359, + -0.000118074735364515,0.00648001308334178,0.447525474853596,-0.724260410840057, + -4.2164673495132e-05,-0.00789477635516589,0.107401453686758,-0.101184488415708, + -4.47814931092694e-05,-0.00730694190386327,0.121172972355841,-0.127431008362911, + -4.73983127236843e-05,-0.0067191074525611,0.134944491024923,-0.153677528310114, + -5.00151323377107e-05,-0.00613127300125815,0.148716009694006,-0.179924048257317, + -5.26319519519869e-05,-0.00554343854995598,0.162487528363088,-0.206170568204519, + -5.52487715662631e-05,-0.00495560409865359,0.176259047032171,-0.232417088151722, + -5.78655911804837e-05,-0.00436776964735119,0.190030565701253,-0.258663608098925, + -6.04824107948154e-05,-0.0037799351960488,0.203802084370336,-0.284910128046128, + -6.30992304090361e-05,-0.00319210074474663,0.217573603039418,-0.31115664799333, + -6.57160500232568e-05,-0.00260426629344401,0.231345121708501,-0.337403167940533, + -6.83328696375884e-05,-0.00201643184214162,0.245116640377584,-0.363649687887736, + -7.09496892515871e-05,-0.00142859739083878,0.258888159046666,-0.389896207834939, + -7.35665088654747e-05,-0.000840762939536388,0.272659677715749,-0.416142727782142, + -7.61833284801394e-05,-0.000252928488234216,0.286431196384831,-0.442389247729344, + -7.88001480944711e-05,0.000334905963068177,0.300202715053914,-0.468635767676547, + -8.14169677081367e-05,0.000922740414371459,0.313974233722997,-0.49488228762375, + -8.40337873225794e-05,0.00151057486567385,0.327745752392079,-0.521128807570953, + -8.66506069369111e-05,0.00209840931697602,0.341517271061162,-0.547375327518156, + -8.92674265513538e-05,0.00268624376827731,0.355288789730243,-0.573621847465358, + -9.18842461650193e-05,0.00327407821958081,0.369060308399326,-0.599868367412561, + -9.4501065779018e-05,0.00386191267088387,0.382831827068409,-0.626114887359764, + -9.71178853942378e-05,0.00444974712218471,0.396603345737491,-0.652361407306967, + -9.97347050075703e-05,0.0050375815734891,0.410374864406575,-0.67860792725417, + -0.000102351524621902,0.00562541602479083,0.424146383075657,-0.704854447201373, + -0.000104968344236789,0.00621325047609211,0.437917901744739,-0.731100967148575, + -3.81458826478609e-05,-0.00753687964632804,0.106192467225051,-0.102326156082606, + -4.03234014009213e-05,-0.00698046723672974,0.119544693813782,-0.128855283150168, + -4.25009201538151e-05,-0.00642405482713104,0.132896920402514,-0.155384410217729, + -4.4678438906931e-05,-0.00586764241753279,0.146249146991246,-0.181913537285291, + -4.68559576597416e-05,-0.00531123000793399,0.159601373579978,-0.208442664352852, + -4.90334764128297e-05,-0.00475481759833585,0.17295360016871,-0.234971791420414, + -5.12109951657513e-05,-0.00419840518873738,0.186305826757441,-0.261500918487976, + -5.3388513918895e-05,-0.0036419927791389,0.199658053346173,-0.288030045555537, + -5.55660326718166e-05,-0.00308558036954043,0.213010279934905,-0.314559172623098, + -5.77435514247937e-05,-0.00252916795994218,0.226362506523636,-0.34108829969066, + -5.99210701777153e-05,-0.00197275555034326,0.239714733112369,-0.367617426758221, + -6.20985889311365e-05,-0.00141634314074546,0.2530669597011,-0.394146553825783, + -6.42761076836695e-05,-0.000859930731146763,0.266419186289832,-0.420675680893344, + -6.64536264366467e-05,-0.000303518321548291,0.279771412878564,-0.447204807960906, + -6.86311451896238e-05,0.000252894088050626,0.293123639467296,-0.473733935028468, + -7.08086639424899e-05,0.000809306497648876,0.306475866056027,-0.500263062096029, + -7.29861826960221e-05,0.00136571890724668,0.319828092644759,-0.526792189163591, + -7.51637014483331e-05,0.00192213131684582,0.333180319233491,-0.553321316231152, + -7.73412202011992e-05,0.00247854372644496,0.346532545822223,-0.579850443298713, + -7.95187389548424e-05,0.00303495613604232,0.359884772410954,-0.606379570366275, + -8.16962577082636e-05,0.00359136854564035,0.373236998999686,-0.632908697433836, + -8.38737764603525e-05,0.00414778095523971,0.386589225588418,-0.659437824501398, + -8.60512952136627e-05,0.00470419336483818,0.39994145217715,-0.685966951568959, + -8.82288139665288e-05,0.00526060577443621,0.413293678765881,-0.712496078636521, + -9.04063327205051e-05,0.0058170181840338,0.426645905354613,-0.739025205704083, + -3.36547882024141e-05,-0.00715643983893677,0.104832389040387,-0.103586357827746, + -3.53845704886835e-05,-0.00663864511414669,0.117715461255131,-0.130427433807054, + -3.71143527748141e-05,-0.00612085038935617,0.130598533469875,-0.157268509786362, + -3.88441350612223e-05,-0.00560305566456609,0.143481605684618,-0.18410958576567, + -4.05739173472974e-05,-0.00508526093977568,0.156364677899362,-0.210950661744977, + -4.23036996333725e-05,-0.00456746621498516,0.169247750114106,-0.237791737724285, + -4.40334819199473e-05,-0.00404967149019542,0.18213082232885,-0.264632813703593, + -4.57632642059669e-05,-0.00353187676540467,0.195013894543594,-0.291473889682901, + -4.74930464920975e-05,-0.00301408204061415,0.207896966758337,-0.318314965662209, + -4.92228287781726e-05,-0.00249628731582363,0.220780038973081,-0.345156041641517, + -5.09526110645253e-05,-0.00197849259103378,0.233663111187825,-0.371997117620825, + -5.2682393350767e-05,-0.0014606978662437,0.246546183402568,-0.398838193600132, + -5.44121756368421e-05,-0.000942903141452955,0.259429255617313,-0.42567926957944, + -5.61419579230282e-05,-0.000425108416662878,0.272312327832056,-0.452520345558748, + -5.78717402093254e-05,9.2686308127643e-05,0.2851954000468,-0.479361421538056, + -5.96015224957336e-05,0.000610481032917498,0.298078472261543,-0.506202497517364, + -6.13313047819197e-05,0.00112827575770802,0.310961544476287,-0.533043573496672, + -6.30610870679948e-05,0.00164607048249854,0.323844616691031,-0.559884649475979, + -6.4790869354181e-05,0.0021638652072884,0.336727688905775,-0.586725725455287, + -6.65206516408112e-05,0.00268165993207869,0.349610761120519,-0.613566801434595, + -6.82504339269974e-05,0.00319945465686899,0.362493833335263,-0.640407877413903, + -6.99802162127394e-05,0.00371724938165974,0.375376905550006,-0.667248953393211, + -7.17099984990366e-05,0.00423504410644959,0.38825997776475,-0.694090029372519, + -7.34397807856668e-05,0.00475283883123989,0.401143049979494,-0.720931105351827, + -7.5169563071853e-05,0.00527063355603019,0.414026122194237,-0.747772181331134, + -2.88924011872804e-05,-0.00677473419631736,0.103380081712184,-0.104905388275511, + -3.01988382318263e-05,-0.00630179432450795,0.115764984726713,-0.13207297555694, + -3.15052752763723e-05,-0.00582885445269854,0.128149887741241,-0.159240562838369, + -3.28117123206684e-05,-0.00535591458088891,0.14053479075577,-0.186408150119798, + -3.41181493653253e-05,-0.00488297470907961,0.152919693770299,-0.213575737401227, + -3.54245864099267e-05,-0.00441003483727009,0.165304596784827,-0.240743324682656, + -3.67310234544171e-05,-0.00393709496546057,0.177689499799356,-0.267910911964085, + -3.80374604989631e-05,-0.00346415509365161,0.190074402813884,-0.295078499245513, + -3.93438975432314e-05,-0.00299121522184165,0.202459305828413,-0.322246086526942, + -4.0650334588388e-05,-0.00251827535003324,0.214844208842941,-0.349413673808371, + -4.19567716326008e-05,-0.00204533547822305,0.22722911185747,-0.3765812610898, + -4.32632086773688e-05,-0.0015723956064142,0.239614014871999,-0.403748848371229, + -4.45696457216371e-05,-0.00109945573460446,0.251998917886528,-0.430916435652658, + -4.58760827662941e-05,-0.000626515862795385,0.264383820901056,-0.458084022934087, + -4.718251981084e-05,-0.000153575990985644,0.276768723915585,-0.485251610215516, + -4.84889568551639e-05,0.000319363880824097,0.289153626930114,-0.512419197496944, + -4.97953938994877e-05,0.00079230375263406,0.301538529944643,-0.539586784778373, + -5.11018309442557e-05,0.00126524362444269,0.313923432959171,-0.566754372059802, + -5.24082679886906e-05,0.00173818349625243,0.3263083359737,-0.593921959341231, + -5.37147050329034e-05,0.00221112336806195,0.338693238988228,-0.62108954662266, + -5.50211420778934e-05,0.00268406323987103,0.351078142002757,-0.648257133904089, + -5.63275791223283e-05,0.00315700311168055,0.363463045017285,-0.675424721185518, + -5.76340161670963e-05,0.00362994298348962,0.375847948031814,-0.702592308466946, + -5.89404532111981e-05,0.00410288285529958,0.388232851046343,-0.729759895748375, + -6.02468902568543e-05,0.00457582272710733,0.400617754060871,-0.756927483029804, + -2.41152995490712e-05,-0.00641349477086245,0.101913187729533,-0.106211365668085, + -2.505222062818e-05,-0.0059894485064711,0.11379768301813,-0.133702233113146, + -2.59891417071501e-05,-0.00556540224207958,0.125682178306728,-0.161193100558208, + -2.69260627863144e-05,-0.00514135597768839,0.137566673595326,-0.188683968003269, + -2.78629838653122e-05,-0.00471730971329676,0.149451168883923,-0.21617483544833, + -2.87999049443655e-05,-0.00429326344890557,0.161335664172521,-0.243665702893392, + -2.97368260233632e-05,-0.00386921718451394,0.173220159461118,-0.271156570338453, + -3.06737471025276e-05,-0.00344517092012242,0.185104654749716,-0.298647437783514, + -3.16106681816364e-05,-0.00302112465573146,0.196989150038313,-0.326138305228576, + -3.25475892608562e-05,-0.00259707839134005,0.208873645326911,-0.353629172673637, + -3.3484510339854e-05,-0.00217303212694886,0.220758140615508,-0.381120040118699, + -3.44214314187963e-05,-0.00174898586255723,0.232642635904106,-0.40861090756376, + -3.5358352497572e-05,-0.00132493959816515,0.244527131192704,-0.436101775008821, + -3.62952735766253e-05,-0.000900893333774189,0.256411626481301,-0.463592642453883, + -3.72321946559007e-05,-0.000476847069383002,0.268296121769899,-0.491083509898944, + -3.8169115735065e-05,-5.28008049915929e-05,0.280180617058496,-0.518574377344005, + -3.91060368140073e-05,0.00037124545940026,0.292065112347094,-0.546065244789067, + -4.00429578930606e-05,0.000795291723791447,0.303949607635692,-0.573556112234128, + -4.09798789721139e-05,0.00121933798818263,0.315834102924289,-0.601046979679189, + -4.19168000509451e-05,0.00164338425257471,0.327718598212887,-0.628537847124251, + -4.28537211297764e-05,0.0020674305169659,0.339603093501484,-0.656028714569312, + -4.37906422097178e-05,0.00249147678135619,0.351487588790081,-0.683519582014373, + -4.47275632883271e-05,0.00291552304574871,0.36337208407868,-0.711010449459434, + -4.56644843674914e-05,0.0033395693101399,0.375256579367277,-0.738501316904496, + -4.66014054466557e-05,0.00376361557453109,0.387141074655875,-0.765992184349557, + -1.95831580042938e-05,-0.00609011418887767,0.100512430000829,-0.107435178400323, + -2.02225283721935e-05,-0.00571594628149952,0.111921526641904,-0.135228987062119, + -2.08618987400933e-05,-0.00534177837412131,0.123330623282978,-0.163022795723914, + -2.1501269108215e-05,-0.00496761046674332,0.134739719924052,-0.19081660438571, + -2.2140639475865e-05,-0.00459344255936489,0.146148816565127,-0.218610413047505, + -2.27800098440145e-05,-0.00421927465198702,0.157557913206201,-0.246404221709301, + -2.3419380211942e-05,-0.0038451067446087,0.168967009847276,-0.274198030371096, + -2.4058750580036e-05,-0.00347093883723071,0.18037610648835,-0.301991839032892, + -2.4698120947908e-05,-0.00309677092985261,0.191785203129424,-0.329785647694687, + -2.533749131578e-05,-0.00272260302247407,0.203194299770499,-0.357579456356483, + -2.59768616835965e-05,-0.00234843511509619,0.214603396411573,-0.385373265018278, + -2.66162320516905e-05,-0.00197426720771854,0.226012493052647,-0.413167073680073, + -2.72556024196735e-05,-0.00160009930033977,0.237421589693722,-0.440960882341869, + -2.78949727875455e-05,-0.00122593139296145,0.248830686334796,-0.468754691003664, + -2.85343431551954e-05,-0.000851763485583357,0.26023978297587,-0.49654849966546, + -2.91737135230674e-05,-0.000477595578204815,0.271648879616945,-0.524342308327255, + -2.98130838913835e-05,-0.000103427670827383,0.283057976258019,-0.552136116989051, + -3.04524542588114e-05,0.000270740236551603,0.294467072899094,-0.579929925650846, + -3.10918246271275e-05,0.000644908143929257,0.305876169540168,-0.607723734312642, + -3.17311949951105e-05,0.00101907605130735,0.317285266181242,-0.635517542974437, + -3.23705653630935e-05,0.00139324395868501,0.328694362822316,-0.663311351636233, + -3.30099357310765e-05,0.00176741186606355,0.340103459463391,-0.691105160298028, + -3.36493060989485e-05,0.0021415797734412,0.351512556104465,-0.718898968959823, + -3.42886764667094e-05,0.00251574768081975,0.362921652745539,-0.746692777621619, + -3.49280468350255e-05,0.0028899155881974,0.374330749386614,-0.774486586283414, + -1.55049761480508e-05,-0.0058146927621745,0.0992446118064855,-0.108524254763767, + -1.59224191787766e-05,-0.00548822537001237,0.110225382031673,-0.136587652154269, + -1.63398622096689e-05,-0.00516175797785046,0.12120615225686,-0.16465104954477, + -1.67573052405334e-05,-0.00483529058568855,0.132186922482047,-0.192714446935271, + -1.717474827162e-05,-0.00450882319352675,0.143167692707234,-0.220777844325773, + -1.7592191302318e-05,-0.0041823558013645,0.154148462932421,-0.248841241716274, + -1.80096343331271e-05,-0.00385588840920259,0.165129233157608,-0.276904639106775, + -1.84270773641582e-05,-0.00352942101704068,0.176110003382795,-0.304968036497277, + -1.88445203948562e-05,-0.00320295362487877,0.187090773607982,-0.333031433887778, + -1.92619634257762e-05,-0.00287648623271641,0.198071543833169,-0.361094831278279, + -1.96794064567518e-05,-0.0025500188405545,0.209052314058356,-0.389158228668781, + -2.00968494876164e-05,-0.00222355144839259,0.220033084283543,-0.417221626059282, + -2.0514292518814e-05,-0.00189708405623112,0.23101385450873,-0.445285023449783, + -2.0931735549512e-05,-0.00157061666406899,0.241994624733917,-0.473348420840284, + -2.1349178579988e-05,-0.00124414927190641,0.252975394959105,-0.501411818230786, + -2.17666216112411e-05,-0.000917681879745391,0.263956165184291,-0.529475215621287, + -2.21840646423832e-05,-0.000591214487583702,0.274936935409478,-0.557538613011788, + -2.26015076730812e-05,-0.000264747095420903,0.285917705634666,-0.58560201040229, + -2.30189507038903e-05,6.1720296741008e-05,0.296898475859853,-0.613665407792791, + -2.34363937343662e-05,0.000388187688903585,0.30787924608504,-0.641728805183292, + -2.38538367656194e-05,0.000714655081065274,0.318860016310227,-0.669792202573794, + -2.42712797965394e-05,0.00104112247322696,0.329840786535414,-0.697855599964295, + -2.46887228279036e-05,0.00136758986538821,0.340821556760601,-0.725918997354796, + -2.51061658587126e-05,0.00169405725755034,0.351802326985788,-0.753982394745298, + -2.55236088895217e-05,0.00202052464971203,0.362783097210975,-0.782045792135799, + -1.20061388099169e-05,-0.00558981272839293,0.0981514582102102,-0.109449762027059, + -1.22690225870248e-05,-0.00530634073274416,0.108764333946017,-0.137742258436595, + -1.25319063639107e-05,-0.00502286873709501,0.119377209681824,-0.166034754846131, + -1.27947901409908e-05,-0.00473939674144608,0.129990085417631,-0.194327251255667, + -1.30576739180155e-05,-0.00445592474579715,0.140602961153438,-0.222619747665203, + -1.33205576947071e-05,-0.00417245275014788,0.151215836889245,-0.250912244074739, + -1.35834414717872e-05,-0.00388898075449895,0.161828712625052,-0.279204740484274, + -1.38463252486454e-05,-0.00360550875884957,0.17244158836086,-0.30749723689381, + -1.41092090258366e-05,-0.00332203676320098,0.183054464096666,-0.335789733303346, + -1.43720928026392e-05,-0.00303856476755171,0.193667339832474,-0.364082229712882, + -1.46349765797193e-05,-0.00275509277190289,0.204280215568281,-0.392374726122418, + -1.48978603571326e-05,-0.00247162077625451,0.214893091304087,-0.420667222531954, + -1.51607441337687e-05,-0.0021881487806048,0.225505967039895,-0.44895971894149, + -1.54236279108488e-05,-0.00190467678495598,0.236118842775702,-0.477252215351026, + -1.5686511687929e-05,-0.00162120478930694,0.246731718511509,-0.505544711760562, + -1.59493954646761e-05,-0.00133773279365745,0.257344594247316,-0.533837208170097, + -1.62122792415342e-05,-0.00105426079800797,0.267957469983124,-0.562129704579633, + -1.64751630186144e-05,-0.000770788802359146,0.278570345718931,-0.590422200989169, + -1.67380467960276e-05,-0.000487316806710769,0.289183221454737,-0.618714697398705, + -1.70009305727747e-05,-0.000203844811061504,0.299796097190545,-0.647007193808241, + -1.72638143497439e-05,7.96271845868723e-05,0.310408972926351,-0.675299690217777, + -1.75266981270461e-05,0.000363099180236137,0.321021848662159,-0.703592186627313, + -1.77895819037932e-05,0.000646571175885402,0.331634724397966,-0.731884683036849, + -1.80524656806513e-05,0.000930043171534667,0.342247600133773,-0.760177179446385, + -1.83153494573984e-05,0.00121351516718393,0.35286047586958,-0.788469675855921, + -9.12489553736573e-06,-0.0054123496580194,0.0972475554035802,-0.110205947423729, + -9.28615369125141e-06,-0.00516568791187411,0.107557184001185,-0.138685629109336, + -9.44741184549791e-06,-0.00491902616572915,0.117866812598789,-0.167165310794943, + -9.60866999932808e-06,-0.00467236441958374,0.128176441196394,-0.195644992480551, + -9.7699281534358e-06,-0.00442570267343856,0.138486069793999,-0.224124674166158, + -9.93118630748802e-06,-0.00417904092729326,0.148795698391604,-0.252604355851765, + -1.00924444614847e-05,-0.0039323791811483,0.159105326989208,-0.281084037537372, + -1.02537026154259e-05,-0.0036857174350029,0.169414955586813,-0.30956371922298, + -1.04149607694781e-05,-0.00343905568885772,0.179724584184417,-0.338043400908587, + -1.05762189235303e-05,-0.00319239394271231,0.190034212782022,-0.366523082594194, + -1.0737477077416e-05,-0.00294573219656713,0.200343841379627,-0.395002764279802, + -1.08987352316903e-05,-0.00269907045042239,0.210653469977231,-0.423482445965409, + -1.10599933854649e-05,-0.00245240870427654,0.220963098574836,-0.451962127651016, + -1.12212515392951e-05,-0.00220574695813136,0.231272727172441,-0.480441809336623, + -1.13825096936804e-05,-0.00195908521198662,0.241582355770045,-0.508921491022231, + -1.15437678472885e-05,-0.00171242346584055,0.25189198436765,-0.537401172707838, + -1.17050260016738e-05,-0.00146576171969559,0.262201612965255,-0.565880854393445, + -1.1866284155726e-05,-0.00121909997355085,0.272511241562859,-0.594360536079053, + -1.20275423095562e-05,-0.000972438227405448,0.282820870160464,-0.62284021776466, + -1.21888004632753e-05,-0.000725776481259377,0.293130498758069,-0.651319899450267, + -1.23500586176606e-05,-0.000479114735114639,0.303440127355674,-0.679799581135874, + -1.25113167716018e-05,-0.000232452988969456,0.313749755953278,-0.708279262821482, + -1.2672574925876e-05,1.42087571752825e-05,0.324059384550883,-0.736758944507089, + -1.28338330798172e-05,0.000260870503320465,0.334369013148487,-0.765238626192696, + -1.29950912333143e-05,0.000507532249466092,0.344678641746092,-0.793718307878304, + -6.83115584967919e-06,-0.00527595995553259,0.0965256040382916,-0.110804190206857, + -6.92852758998885e-06,-0.00505949294417618,0.106593629701304,-0.139431960232983, + -7.02589933029851e-06,-0.0048430259328196,0.116661655364317,-0.168059730259109, + -7.12327107088573e-06,-0.00462655892146346,0.126729681027329,-0.196687500285235, + -7.22064281111212e-06,-0.00441009191010688,0.136797706690342,-0.225315270311362, + -7.31801455144954e-06,-0.00419362489875008,0.146865732353354,-0.253943040337488, + -7.41538629184246e-06,-0.00397715788739395,0.156933758016367,-0.282570810363614, + -7.51275803234641e-06,-0.0037606908760377,0.167001783679379,-0.311198580389741, + -7.61012977251729e-06,-0.00354422386468078,0.177069809342392,-0.339826350415867, + -7.70750151302124e-06,-0.00332775685332454,0.187137835005404,-0.368454120441993, + -7.80487325330315e-06,-0.00311128984196807,0.197205860668417,-0.397081890468119, + -7.90224499347403e-06,-0.00289482283061138,0.207273886331429,-0.425709660494246, + -7.99961673392247e-06,-0.00267835581925491,0.217341911994442,-0.454337430520372, + -8.09698847425988e-06,-0.00246188880789866,0.227409937657454,-0.482965200546498, + -8.19436021448627e-06,-0.00224542179654175,0.237477963320467,-0.511592970572624, + -8.29173195504573e-06,-0.00202895478518572,0.247545988983479,-0.54022074059875, + -8.38910369549417e-06,-0.00181248777382947,0.257614014646492,-0.568848510624877, + -8.48647543549852e-06,-0.00159602076247278,0.267682040309504,-0.597476280651003, + -8.58384717605798e-06,-0.00137955375111654,0.277750065972517,-0.62610405067713, + -8.68121891695051e-06,-0.00116308673976029,0.28781809163553,-0.654731820703256, + -8.77859065673281e-06,-0.000946619728403153,0.297886117298542,-0.683359590729382, + -8.87596239718125e-06,-0.00073015271704735,0.307954142961554,-0.711987360755509, + -8.9733341371856e-06,-0.00051368570568977,0.318022168624567,-0.740615130781635, + -9.07070587707892e-06,-0.000297218694333079,0.32809019428758,-0.769242900807761, + -9.16807761852656e-06,-8.0751682978164e-05,0.338158219950592,-0.797870670833887, + -5.05375034340338e-06,-0.0051732050509341,0.0959647446968884,-0.11126552299452, + -5.11222258181565e-06,-0.00498067081721709,0.105845437000755,-0.140007490816054, + -5.17069482022792e-06,-0.00478813658350008,0.115726129304622,-0.168749458637588, + -5.22916705875121e-06,-0.00459560234978307,0.125606821608488,-0.197491426459123, + -5.28763929735776e-06,-0.00440306811606639,0.135487513912355,-0.226233394280657, + -5.34611153563125e-06,-0.00421053388234915,0.145368206216221,-0.254975362102192, + -5.40458377390474e-06,-0.0040179996486317,0.155248898520088,-0.283717329923726, + -5.46305601234476e-06,-0.0038254654149148,0.165129590823955,-0.31245929774526, + -5.5215282513954e-06,-0.00363293118119867,0.175010283127821,-0.341201265566795, + -5.58000048955787e-06,-0.00344039694748122,0.184890975431688,-0.369943233388329, + -5.63847272777585e-06,-0.00324786271376376,0.194771667735555,-0.398685201209863, + -5.69694496660444e-06,-0.00305532848004719,0.204652360039421,-0.427427169031398, + -5.75541720493344e-06,-0.00286279424633018,0.214533052343288,-0.456169136852932, + -5.81388944331795e-06,-0.00267026001261317,0.224413744647155,-0.484911104674467, + -5.87236168192451e-06,-0.00247772577889616,0.234294436951021,-0.513653072496001, + -5.93083392042004e-06,-0.00228519154517914,0.244175129254888,-0.542395040317535, + -5.98930615891557e-06,-0.00209265731146235,0.254055821558755,-0.57113700813907, + -6.04777839718906e-06,-0.00190012307774512,0.263936513862621,-0.599878975960604, + -6.10625063512948e-06,-0.00170758884402744,0.273817206166488,-0.628620943782139, + -6.16472287373604e-06,-0.00151505461031043,0.283697898470355,-0.657362911603673, + -6.22319511245362e-06,-0.0013225203765943,0.293578590774221,-0.686104879425207, + -6.28166735094915e-06,-0.00112998614287729,0.303459283078088,-0.714846847246742, + -6.34013958988877e-06,-0.000937451909160725,0.313339975381954,-0.743588815068276, + -6.3986118283843e-06,-0.000744917675443713,0.323220667685821,-0.77233078288981, + -6.45708406588064e-06,-0.000552383441724924,0.333101359989688,-0.801072750711345, + -3.70501094104636e-06,-0.00509692020875624,0.0955383278748698,-0.11161430732803, + -3.7402543903442e-06,-0.00492285513785695,0.105276798533111,-0.140442612828188, + -3.77549783975306e-06,-0.00474879006695772,0.115015269191353,-0.169270918328346, + -3.81074128913417e-06,-0.0045747249960586,0.124753739849594,-0.198099223828504, + -3.8459847386263e-06,-0.00440065992515948,0.134492210507836,-0.226927529328662, + -3.88122818795189e-06,-0.00422659485426036,0.144230681166077,-0.25575583482882, + -3.91647163738851e-06,-0.00405252978336113,0.153969151824318,-0.284584140328978, + -3.95171508704717e-06,-0.00387846471246234,0.16370762248256,-0.313412445829136, + -3.98695853615072e-06,-0.00370439964156266,0.173446093140801,-0.342240751329294, + -4.02220198564285e-06,-0.00353033457066365,0.183184563799043,-0.371069056829453, + -4.05744543519049e-06,-0.00335626949976464,0.192923034457284,-0.399897362329611, + -4.09268888440506e-06,-0.00318220442886541,0.202661505115525,-0.428725667829769, + -4.12793233373066e-06,-0.00300813935796618,0.212399975773767,-0.457553973329927, + -4.16317578322278e-06,-0.00283407428706717,0.222138446432008,-0.486382278830085, + -4.19841923238184e-06,-0.00266000921616749,0.23187691709025,-0.515210584330243, + -4.23366268209602e-06,-0.00248594414526915,0.241615387748491,-0.544038889830401, + -4.26890613147712e-06,-0.00231187907436925,0.251353858406733,-0.572867195330559, + -4.30414958030312e-06,-0.00213781400346957,0.261092329064974,-0.601695500830717, + -4.33939303035036e-06,-0.00196374893257145,0.270830799723215,-0.630523806330875, + -4.37463647950942e-06,-0.00178968386167178,0.280569270381457,-0.659352111831033, + -4.40987992955666e-06,-0.00161561879077343,0.290307741039698,-0.688180417331191, + -4.44512337882674e-06,-0.0014415537198742,0.300046211697939,-0.717008722831349, + -4.48036682809683e-06,-0.00126748864897497,0.309784682356181,-0.745837028331507, + -4.51561027725589e-06,-0.00109342357807574,0.319523153014422,-0.774665333831665, + -4.55085372697006e-06,-0.000919358507176504,0.329261623672664,-0.803493639331823, + -2.69772602098928e-06,-0.00504088952996201,0.0952194047193457,-0.11187407580856, + -2.71920955394189e-06,-0.00488079001395125,0.104851620627799,-0.140766684103981, + -2.74069308667246e-06,-0.00472069049794011,0.114483836536253,-0.169659292399401, + -2.76217661970835e-06,-0.00456059098192918,0.124116052444707,-0.198551900694822, + -2.78366015249443e-06,-0.00440049146591825,0.133748268353161,-0.227444508990243, + -2.80514368550255e-06,-0.00424039194990744,0.143380484261615,-0.256337117285663, + -2.82662721828864e-06,-0.00408029243389629,0.153012700170069,-0.285229725581084, + -2.84811075090818e-06,-0.00392019291788492,0.162644916078522,-0.314122333876505, + -2.86959428402733e-06,-0.00376009340187444,0.172277131986976,-0.343014942171925, + -2.8910778172575e-06,-0.00359999388586396,0.18190934789543,-0.371907550467346, + -2.91256134976603e-06,-0.00343989436985281,0.191541563803883,-0.400800158762767, + -2.93404488260762e-06,-0.00327979485384167,0.201173779712337,-0.429692767058187, + -2.95552841544922e-06,-0.00311969533783074,0.210805995620791,-0.458585375353608, + -2.97701194795774e-06,-0.00295959582181915,0.220438211529245,-0.487477983649028, + -2.99849548135445e-06,-0.00279949630580867,0.230070427437699,-0.516370591944449, + -3.01997901475115e-06,-0.00263939678979885,0.239702643346152,-0.54526320023987, + -3.04146254703763e-06,-0.00247929727378682,0.249334859254606,-0.57415580853529, + -3.06294608021229e-06,-0.00231919775777634,0.25896707516306,-0.603048416830711, + -3.08442961283184e-06,-0.00215909824176519,0.268599291071514,-0.631941025126132, + -3.10591314622854e-06,-0.00199899872575493,0.278231506979967,-0.660833633421552, + -3.12739667862605e-06,-0.00183889920974245,0.287863722888422,-0.689726241716973, + -3.14888021157866e-06,-0.00167879969373175,0.297495938796876,-0.718618850012394, + -3.17036374397617e-06,-0.0015187001777206,0.307128154705329,-0.747511458307814, + -3.19184727737287e-06,-0.00135860066171034,0.316760370613783,-0.776404066603235, + -3.21333080999242e-06,-0.00119850114569919,0.326392586522236,-0.805296674898655, + -1.95435807170963e-06,-0.00500005209382431,0.0949837906642617,-0.112065393789132, + -1.96767481369653e-06,-0.00485035286914359,0.104537570109605,-0.141005360720634, + -1.98099155565568e-06,-0.00470065364446282,0.114091349554949,-0.169945327652136, + -1.99430829761482e-06,-0.00455095441978193,0.123645129000292,-0.198885294583638, + -2.00762503965723e-06,-0.00440125519510115,0.133198908445636,-0.227825261515139, + -2.02094178164414e-06,-0.00425155597042037,0.14275268789098,-0.256765228446641, + -2.03425852379757e-06,-0.00410185674573993,0.152306467336323,-0.285705195378143, + -2.04757526545141e-06,-0.00395215752105882,0.161860246781667,-0.314645162309645, + -2.06089200749382e-06,-0.00380245829637804,0.171414026227011,-0.343585129241147, + -2.07420874948072e-06,-0.00365275907169726,0.180967805672354,-0.372525096172648, + -2.08752549157865e-06,-0.00350305984701693,0.190521585117697,-0.40146506310415, + -2.10084223362106e-06,-0.00335336062233571,0.200075364563041,-0.430405030035652, + -2.11415897566347e-06,-0.00320366139765516,0.209629144008385,-0.459344996967154, + -2.1274757172618e-06,-0.00305396217297416,0.219182923453728,-0.488284963898656, + -2.14079245919319e-06,-0.00290426294829316,0.228736702899072,-0.517224930830157, + -2.15410920179071e-06,-0.00275456372361349,0.238290482344415,-0.546164897761659, + -2.16742594305597e-06,-0.00260486449893138,0.247844261789759,-0.575104864693161, + -2.1807426852094e-06,-0.00245516527425083,0.257398041235103,-0.604044831624663, + -2.19405942758488e-06,-0.00230546604957071,0.266951820680446,-0.632984798556165, + -2.20737616873912e-06,-0.00215576682488861,0.27650560012579,-0.661924765487666, + -2.22069291133664e-06,-0.00200606760020872,0.286059379571133,-0.690864732419168, + -2.23400965326803e-06,-0.00185636837552838,0.295613159016477,-0.71980469935067, + -2.24732639497738e-06,-0.00170666915084627,0.305166938461821,-0.748744666282172, + -2.26064313746388e-06,-0.00155696992616683,0.314720717907164,-0.777684633213674, + -2.27395987917323e-06,-0.00140727070148605,0.324274497352508,-0.806624600145176, + -1.41056460697953e-06,-0.00497045281280539,0.0948112979073366,-0.112205140109363, + -1.41898454053546e-06,-0.00482841191805494,0.104307687476285,-0.141179699686594, + -1.42740447453549e-06,-0.00468637102330483,0.113804077045234,-0.170154259263824, + -1.43582440809142e-06,-0.00454433012855426,0.123300466614182,-0.199128818841055, + -1.44424434178614e-06,-0.00440228923380392,0.132796856183131,-0.228103378418286, + -1.45266427548085e-06,-0.00426024833905336,0.14229324575208,-0.257077937995516, + -1.46108420917557e-06,-0.00411820744430313,0.151789635321028,-0.286052497572747, + -1.46950414287028e-06,-0.00397616654955235,0.161286024889977,-0.315027057149978, + -1.47792407700909e-06,-0.00383412565480268,0.170782414458926,-0.344001616727208, + -1.48634401081482e-06,-0.00369208476005234,0.180278804027874,-0.372976176304439, + -1.49476394395442e-06,-0.00355004386530133,0.189775193596823,-0.40195073588167, + -1.50318387792669e-06,-0.00340800297055122,0.199271583165772,-0.4309252954589, + -1.51160381134385e-06,-0.00326596207580043,0.20876797273472,-0.459899855036131, + -1.52002374542715e-06,-0.00312392118105076,0.218264362303669,-0.488874414613362, + -1.52844367906635e-06,-0.0029818802863002,0.227760751872617,-0.517848974190592, + -1.53686361281657e-06,-0.00283983939154964,0.237257141441566,-0.546823533767823, + -1.54528354645578e-06,-0.00269779849679908,0.246753531010515,-0.575798093345054, + -1.55370347998396e-06,-0.00255575760204829,0.256249920579464,-0.604772652922284, + -1.56212341373418e-06,-0.00241371670729817,0.265746310148412,-0.633747212499515, + -1.57054334770645e-06,-0.00227167581254806,0.275242699717361,-0.662721772076746, + -1.57896328145668e-06,-0.0021296349177975,0.28473908928631,-0.691696331653976, + -1.58738321520691e-06,-0.00198759402304738,0.294235478855258,-0.720670891231207, + -1.59580314862406e-06,-0.00184555312829637,0.303731868424207,-0.749645450808438, + -1.60422308270736e-06,-0.0017035122335467,0.313228257993155,-0.778620010385669, + -1.61264301612452e-06,-0.00156147133879569,0.322724647562104,-0.807594569962899, + -1.01531944154964e-06,-0.00494908414239981,0.0946858537565381,-0.112306602157747, + -1.02075476535179e-06,-0.00481263610113947,0.104140524546712,-0.141306277535443, + -1.02619008929272e-06,-0.00467618805987946,0.113595195336887,-0.170305952913139, + -1.03162541342794e-06,-0.00453974001861945,0.123049866127061,-0.199305628290835, + -1.03706073723009e-06,-0.00440329197735922,0.132504536917236,-0.228305303668531, + -1.04249606130979e-06,-0.00426684393609933,0.14195920770741,-0.257304979046227, + -1.04793138483439e-06,-0.00413039589483866,0.151413878497584,-0.286304654423923, + -1.05336670891409e-06,-0.00399394785357865,0.160868549287759,-0.315304329801619, + -1.05880203271624e-06,-0.0038574998123182,0.170323220077933,-0.344304005179315, + -1.06423735674044e-06,-0.00372105177105819,0.179777890868107,-0.373303680557011, + -1.06967268070912e-06,-0.00358460372979841,0.189232561658282,-0.402303355934707, + -1.07510800434474e-06,-0.00344815568853796,0.198687232448456,-0.431303031312403, + -1.08054332814689e-06,-0.00331170764727751,0.20814190323863,-0.460302706690099, + -1.08597865233762e-06,-0.00317525960601772,0.217596574028805,-0.489302382067795, + -1.09141397608425e-06,-0.00303881156475749,0.227051244818979,-0.518302057445491, + -1.09684930049703e-06,-0.00290236352349793,0.236505915609153,-0.547301732823187, + -1.10228462413264e-06,-0.00276591548223704,0.245960586399328,-0.576301408200883, + -1.1077199479903e-06,-0.00262946744097725,0.255415257189502,-0.605301083578579, + -1.11315527184797e-06,-0.00249301939971724,0.264869927979676,-0.634300758956275, + -1.1185905955946e-06,-0.00235657135845635,0.274324598769851,-0.663300434333971, + -1.12402591978533e-06,-0.00222012331719679,0.283779269560025,-0.692300109711667, + -1.12946124342095e-06,-0.00208367527593634,0.2932339403502,-0.721299785089364, + -1.13489656750065e-06,-0.00194722723467633,0.302688611140374,-0.750299460467059, + -1.14033189158036e-06,-0.00181077919341588,0.312143281930549,-0.779299135844755, + -1.14576721554904e-06,-0.00167433115215676,0.321597952720722,-0.808298811222452, + -6.29745544075688e-05,-0.00993262689014757,0.121579107247871,-0.105719242678498, + -6.77301365100968e-05,-0.00925954296093956,0.136860984208181,-0.130248224071424, + -7.24857186124306e-05,-0.00858645903173139,0.15214286116849,-0.154777205464349, + -7.72413007151806e-05,-0.00791337510252366,0.1674247381288,-0.179306186857274, + -8.19968828174034e-05,-0.00724029117331548,0.18270661508911,-0.2038351682502, + -8.67524649198481e-05,-0.00656720724410742,0.197988492049419,-0.228364149643125, + -9.15080470225149e-05,-0.00589412331489947,0.213270369009729,-0.25289313103605, + -9.62636291250152e-05,-0.00522103938569174,0.228552245970039,-0.277422112428976, + -0.000101019211227404,-0.00454795545648334,0.243834122930349,-0.301951093821901, + -0.000105774793329905,-0.00387487152727539,0.259115999890658,-0.326480075214826, + -0.000110530375432516,-0.00320178759806744,0.274397876850968,-0.351009056607751, + -0.00011528595753485,-0.00252870366885904,0.289679753811278,-0.375538038000677, + -0.000120041539637072,-0.00185561973965109,0.304961630771587,-0.400067019393602, + -0.000124797121740072,-0.00118253581044359,0.320243507731897,-0.424596000786527, + -0.000129552703841962,-0.000509451881234746,0.335525384692207,-0.449124982179453, + -0.000134308285944407,0.000163632047972984,0.350807261652516,-0.473653963572378, + -0.000139063868047185,0.000836715977180935,0.366089138612826,-0.498182944965303, + -0.000143819450149629,0.00150979990638889,0.381371015573136,-0.522711926358228, + -0.000148575032251963,0.0021828838355975,0.396652892533446,-0.547240907751154, + -0.00015333061435463,0.00285596776480501,0.411934769493755,-0.571769889144079, + -0.000158086196456964,0.00352905169401296,0.427216646454065,-0.596298870537004, + -0.000162841778559852,0.00420213562322047,0.442498523414374,-0.62082785192993, + -0.000167597360662075,0.00487521955242931,0.457780400374685,-0.645356833322855, + -0.000172352942764409,0.00554830348163726,0.473062277334994,-0.66988581471578, + -0.000177108524866965,0.00622138741084477,0.488344154295304,-0.694414796108706, + -6.25212171991851e-05,-0.00988116932849398,0.121441629470806,-0.105860539473836, + -6.72150409196381e-05,-0.00920973978907358,0.136679928207829,-0.130420880930384, + -7.1908864640341e-05,-0.00853831024965357,0.151918226944851,-0.154981222386931, + -7.6602688361016e-05,-0.00786688071023356,0.167156525681874,-0.179541563843478, + -8.12965120814968e-05,-0.00719545117081322,0.182394824418896,-0.204101905300026, + -8.59903358020331e-05,-0.00652402163139298,0.197633123155919,-0.228662246756573, + -9.06841595224583e-05,-0.00585259209197264,0.212871421892942,-0.25322258821312, + -9.53779832431056e-05,-0.00518116255255241,0.228109720629964,-0.277782929669668, + -0.000100071806963364,-0.00450973301313162,0.243348019366987,-0.302343271126215, + -0.000104765630684178,-0.00383830347371217,0.258586318104009,-0.326903612582762, + -0.000109459454404603,-0.00316687393429138,0.273824616841032,-0.351463954039309, + -0.000114153278125251,-0.00249544439487148,0.289062915578055,-0.376024295495857, + -0.000118847101845843,-0.00182401485545158,0.304301214315077,-0.400584636952404, + -0.000123540925566545,-0.00115258531603146,0.319539513052099,-0.425144978408951, + -0.000128234749287026,-0.000481155776610898,0.334777811789122,-0.449705319865499, + -0.000132928573007951,0.000190273762809001,0.350016110526145,-0.474265661322046, + -0.000137622396728099,0.000861703302229566,0.365254409263168,-0.498826002778593, + -0.000142316220448691,0.00153313284164946,0.38049270800019,-0.523386344235141, + -0.00014701004416906,0.00220456238107047,0.395731006737213,-0.547946685691688, + -0.00015170386788943,0.00287599192049059,0.410969305474235,-0.572507027148235, + -0.000156397691610133,0.00354742145991072,0.426207604211258,-0.597067368604782, + -0.000161091515330503,0.00421885099933128,0.441445902948281,-0.62162771006133, + -0.000165785339051427,0.00489028053875096,0.456684201685303,-0.646188051517877, + -0.000170479162772241,0.00556171007817108,0.471922500422326,-0.670748392974424, + -0.000175172986492944,0.00623313961759075,0.487160799159348,-0.695308734430971, + -6.18977128422071e-05,-0.00981079287236147,0.121252355724612,-0.106054555342661, + -6.65071626657632e-05,-0.009141702933808,0.136430705448179,-0.13065795757759, + -7.11166124893192e-05,-0.00847261299525459,0.151609055171746,-0.155261359812518, + -7.57260623130973e-05,-0.00780352305670173,0.166787404895312,-0.179864762047447, + -8.03355121364868e-05,-0.0071344331181481,0.181965754618879,-0.204468164282375, + -8.49449619601539e-05,-0.00646534317959502,0.197144104342446,-0.229071566517304, + -8.95544117838765e-05,-0.00579625324104172,0.212322454066012,-0.253674968752232, + -9.41638616073215e-05,-0.00512716330248808,0.227500803789579,-0.278278370987161, + -9.87733114308775e-05,-0.00445807336393478,0.242679153513146,-0.302881773222089, + -0.000103382761254323,-0.00378898342538125,0.257857503236713,-0.327485175457018, + -0.000107992211077879,-0.00311989348682795,0.27303585296028,-0.352088577691946, + -0.000112601660901435,-0.00245080354827487,0.288214202683846,-0.376691979926875, + -0.000117211110725379,-0.00178171360972179,0.303392552407413,-0.401295382161804, + -0.000121820560548769,-0.00111262367116849,0.31857090213098,-0.425898784396732, + -0.000126430010372269,-0.000443533732614743,0.333749251854547,-0.450502186631661, + -0.000131039460196103,0.000225556205937671,0.348927601578113,-0.475105588866589, + -0.000135648910019603,0.000894646144491418,0.36410595130168,-0.499708991101518, + -0.000140258359843437,0.00156373608304428,0.379284301025247,-0.524312393336446, + -0.000144867809666827,0.00223282602159802,0.394462650748814,-0.548915795571375, + -0.000149477259490216,0.00290191596015132,0.40964100047238,-0.573519197806303, + -0.00015408670931405,0.00357100589870463,0.424819350195947,-0.598122600041232, + -0.000158696159137661,0.00424009583725793,0.439997699919514,-0.62272600227616, + -0.000163305608961384,0.00490918577581079,0.45517604964308,-0.647329404511088, + -0.000167915058784551,0.00557827571436498,0.470354399366647,-0.671932806746017, + -0.00017252450860894,0.00624736565291695,0.485532749090214,-0.696536208980946, + -6.10457847530221e-05,-0.00971537180219301,0.120993383697517,-0.106319056823321, + -6.55410138808432e-05,-0.00904959816023088,0.136089797416879,-0.130981163739001, + -7.00362430086365e-05,-0.00838382451826869,0.151186211136242,-0.155643270654681, + -7.45314721367629e-05,-0.00771805087630673,0.166282624855604,-0.180305377570362, + -7.9026701264362e-05,-0.00705227723434443,0.181379038574967,-0.204967484486042, + -8.3521930392183e-05,-0.00638650359238202,0.196475452294329,-0.229629591401722, + -8.80171595203927e-05,-0.00572072995042039,0.211571866013692,-0.254291698317403, + -9.25123886481583e-05,-0.00505495630845831,0.226668279733054,-0.278953805233083, + -9.70076177758683e-05,-0.00438918266649591,0.241764693452417,-0.303615912148763, + -0.000101502846903911,-0.00372340902453394,0.256861107171779,-0.328278019064444, + -0.000105998076032121,-0.0030576353825722,0.271957520891141,-0.352940125980124, + -0.000110493305159665,-0.00239186174060957,0.287053934610504,-0.377602232895804, + -0.000114988534287708,-0.00172608809864805,0.302150348329866,-0.402264339811485, + -0.000119483763415751,-0.00106031445668608,0.317246762049229,-0.426926446727165, + -0.000123978992543461,-0.000394540814723676,0.332343175768591,-0.451588553642845, + -0.000128474221671282,0.000271232827238288,0.347439589487953,-0.476250660558526, + -0.000132969450799325,0.000937006469200252,0.362536003207316,-0.500912767474206, + -0.000137464679927479,0.00160278011116244,0.377632416926678,-0.525574874389886, + -0.000141959909054634,0.00226855375312529,0.392728830646041,-0.550236981305567, + -0.000146455138183121,0.00293432739508637,0.407825244365403,-0.574899088221247, + -0.00015095036731072,0.003600101037049,0.422921658084766,-0.599561195136928, + -0.000155445596438319,0.00426587467901118,0.438018071804128,-0.624223302052608, + -0.000159940825566474,0.00493164832097337,0.453114485523491,-0.648885408968288, + -0.000164436054694406,0.00559742196293511,0.468210899242853,-0.673547515883969, + -0.000168931283822338,0.00626319560489685,0.483307312962215,-0.698209622799649, + -5.98921521896556e-05,-0.00958750637341704,0.12064204552938,-0.10667614793544, + -6.42346775772129e-05,-0.00892644199013992,0.135627461276786,-0.13141750930249, + -6.85772029647147e-05,-0.00826537760686286,0.150612877024192,-0.156158870669541, + -7.291972835205e-05,-0.00760431322358557,0.165598292771598,-0.180900232036592, + -7.72622537394962e-05,-0.00694324884030839,0.180583708519004,-0.205641593403642, + -8.16047791267205e-05,-0.00628218445703088,0.195569124266409,-0.230382954770693, + -8.59473045145553e-05,-0.00562112007375415,0.210554540013815,-0.255124316137744, + -9.02898299017241e-05,-0.00496005569047653,0.225539955761221,-0.279865677504794, + -9.46323552894479e-05,-0.0042989913071998,0.240525371508627,-0.304607038871845, + -9.89748806765056e-05,-0.00363792692392195,0.255510787256033,-0.329348400238896, + -0.000103317406064285,-0.002976862540645,0.270496203003439,-0.354089761605946, + -0.000107659931451454,-0.0023157981573676,0.285481618750845,-0.378831122972997, + -0.000112002456839178,-0.00165473377409064,0.300467034498251,-0.403572484340048, + -0.000116344982226346,-0.000993669390813468,0.315452450245656,-0.428313845707098, + -0.000120687507614403,-0.000332605007536735,0.330437865993062,-0.453055207074149, + -0.000125030033001017,0.000328459375741552,0.345423281740468,-0.4777965684412, + -0.000129372558388852,0.000989523759018063,0.360408697487874,-0.502537929808251, + -0.000133715083776242,0.00165058814229546,0.37539411323528,-0.527279291175301, + -0.000138057609163633,0.00231165252557264,0.390379528982685,-0.552020652542352, + -0.000142400134551246,0.00297271690884982,0.405364944730091,-0.576762013909403, + -0.000146742659938637,0.00363378129212766,0.420350360477498,-0.601503375276453, + -0.000151085185326139,0.00429484567540417,0.435335776224903,-0.626244736643504, + -0.000155427710713751,0.00495591005868112,0.450321191972309,-0.650986098010554, + -0.000159770236100587,0.00561697444195897,0.465306607719715,-0.675727459377605, + -0.000164112761488311,0.00627803882523637,0.480292023467121,-0.700468820744656, + -5.8348834089228e-05,-0.00941885030773526,0.120170863833363,-0.107151938233032, + -6.24906356596067e-05,-0.00876447526894952,0.135007706822138,-0.131998898697129, + -6.66324372299021e-05,-0.0081101002301639,0.149844549810914,-0.156845859161226, + -7.0774238800253e-05,-0.00745572519137827,0.164681392799689,-0.181692819625323, + -7.49160403704097e-05,-0.00680135015259253,0.179518235788465,-0.20653978008942, + -7.90578419407328e-05,-0.00614697511380669,0.194355078777241,-0.231386740553517, + -8.31996435113336e-05,-0.00549260007502139,0.209191921766016,-0.256233701017614, + -8.73414450815457e-05,-0.00483822503623554,0.224028764754792,-0.281080661481711, + -9.14832466518689e-05,-0.00418384999745003,0.238865607743567,-0.305927621945808, + -9.5625048221859e-05,-0.00352947495866363,0.253702450732343,-0.330774582409905, + -9.97668497922377e-05,-0.00287509991987811,0.268539293721119,-0.355621542874002, + -0.000103908651362561,-0.0022207248810926,0.283376136709894,-0.380468503338099, + -0.000108050452932607,-0.00156634984230664,0.29821297969867,-0.405315463802196, + -0.000112192254502985,-0.000911974803520899,0.313049822687446,-0.430162424266293, + -0.000116334056073586,-0.000257599764735605,0.327886665676221,-0.45500938473039, + -0.000120475857643632,0.000396775274050354,0.342723508664997,-0.479856345194487, + -0.000124617659214232,0.00105115031283565,0.357560351653772,-0.504703305658584, + -0.0001287594607845,0.00170552535162138,0.372397194642548,-0.529550266122681, + -0.000132901262354546,0.00235990039040757,0.387234037631324,-0.554397226586777, + -0.000137043063925257,0.00301427542919264,0.402070880620099,-0.579244187050875, + -0.000141184865494748,0.00366865046797926,0.416907723608875,-0.604091147514971, + -0.000145326667065682,0.00432302550676456,0.43174456659765,-0.628938107979068, + -0.000149468468635949,0.00497740054555029,0.446581409586426,-0.653785068443165, + -0.000153610270206439,0.00563177558433559,0.461418252575202,-0.678632028907262, + -0.000157752071776374,0.00628615062312221,0.476255095563977,-0.703478989371359, + -5.63174605223149e-05,-0.00920099165407712,0.119548666053613,-0.10777489048742, + -6.02013293527492e-05,-0.00855609208950081,0.134189810952349,-0.132760111853219, + -6.40851981831558e-05,-0.00791119252492445,0.148830955851085,-0.157745333219018, + -6.79690670135624e-05,-0.00726629296034842,0.163472100749821,-0.182730554584817, + -7.18529358439413e-05,-0.00662139339577195,0.178113245648558,-0.207715775950616, + -7.57368046744866e-05,-0.00597649383119592,0.192754390547294,-0.232700997316415, + -7.96206735047544e-05,-0.00533159426661944,0.20739553544603,-0.257686218682214, + -8.35045423352998e-05,-0.00468669470204341,0.222036680344766,-0.282671440048013, + -8.73884111656231e-05,-0.00404179513746716,0.236677825243503,-0.307656661413812, + -9.12722799961685e-05,-0.00339689557289113,0.251318970142239,-0.332641882779611, + -9.51561488269359e-05,-0.00275199600831511,0.265960115040975,-0.35762710414541, + -9.90400176567041e-05,-0.00210709644373797,0.280601259939712,-0.382612325511209, + -0.000102923886487694,-0.00146219687916305,0.295242404838447,-0.407597546877008, + -0.000106807755317906,-0.00081729731458613,0.309883549737184,-0.432582768242807, + -0.000110691624148562,-0.0001723977500101,0.32452469463592,-0.457567989608606, + -0.000114575492978775,0.000472501814566373,0.339165839534656,-0.482553210974405, + -0.00011845936180932,0.0011174013791424,0.353806984433392,-0.507538432340204, + -0.000122343230639532,0.00176230094371865,0.368448129332128,-0.532523653706003, + -0.000126227099469967,0.0024072005082949,0.383089274230864,-0.557508875071802, + -0.000130110968300734,0.00305210007287071,0.397730419129601,-0.582494096437601, + -0.000133994837131057,0.00369699963744763,0.412371564028337,-0.6074793178034, + -0.000137878705961714,0.00434189920202321,0.427012708927073,-0.6324645391692, + -0.000141762574792148,0.00498679876659924,0.441653853825809,-0.657449760534998, + -0.000145646443622138,0.0056316983311766,0.456294998724546,-0.682434981900797, + -0.000149530312452351,0.00627659789575219,0.470936143623282,-0.707420203266596, + -5.37001857960906e-05,-0.00892710193971546,0.118743687487011,-0.108572101661111, + -5.72623515026072e-05,-0.00829551638681869,0.133132453292541,-0.133734259758329, + -6.08245172088462e-05,-0.00766393083392147,0.14752121909807,-0.158896417855547, + -6.43866829152517e-05,-0.00703234528102437,0.1619099849036,-0.184058575952765, + -6.79488486214352e-05,-0.00640075972812737,0.176298750709129,-0.209220734049983, + -7.15110143278408e-05,-0.00576917417523037,0.190687516514659,-0.234382892147201, + -7.50731800343574e-05,-0.0051375886223336,0.205076282320188,-0.259545050244419, + -7.86353457406519e-05,-0.0045060030694366,0.219465048125718,-0.284707208341637, + -8.21975114469464e-05,-0.0038744175165395,0.233853813931247,-0.309869366438855, + -8.5759677153241e-05,-0.00324283196364239,0.248242579736777,-0.335031524536073, + -8.9321842859702e-05,-0.0026112464107455,0.262631345542306,-0.360193682633291, + -9.28840085657745e-05,-0.00197966085784795,0.277020111347836,-0.38535584073051, + -9.64461742721801e-05,-0.00134807530495129,0.291408877153366,-0.410517998827728, + -0.000100008339978697,-0.000716489752054184,0.305797642958895,-0.435680156924946, + -0.000103570505685102,-8.49041991572985e-05,0.320186408764425,-0.460842315022164, + -0.000107132671391619,0.000546681353739142,0.334575174569954,-0.486004473119382, + -0.000110694837098024,0.00117826690663647,0.348963940375484,-0.5111666312166, + -0.000114257002804541,0.00180985245953291,0.363352706181013,-0.536328789313818, + -0.000117819168510502,0.00244143801243069,0.377741471986543,-0.561490947411036, + -0.000121381334216908,0.00307302356532757,0.392130237792072,-0.586653105508254, + -0.000124943499923313,0.00370460911822468,0.406519003597602,-0.611815263605472, + -0.000128505665629497,0.00433619467112178,0.420907769403132,-0.63697742170269, + -0.00013206783133568,0.00496778022401889,0.435296535208661,-0.662139579799908, + -0.000135629997041975,0.005599365776916,0.44968530101419,-0.687301737897126, + -0.000139192162749269,0.00623095132981177,0.46407406681972,-0.712463895994345, + -5.04194275811609e-05,-0.00859436858308127,0.117729450459499,-0.109563016714011, + -5.35954980609432e-05,-0.00798119474293357,0.131801481508245,-0.134945103076613, + -5.6771568540559e-05,-0.00736802090278554,0.14587351255699,-0.160327189439214, + -5.99476390202303e-05,-0.00675484706263751,0.159945543605736,-0.185709275801816, + -6.31237094999015e-05,-0.0061416732224896,0.174017574654482,-0.211091362164417, + -6.62997799796838e-05,-0.0055284993823419,0.188089605703227,-0.236473448527019, + -6.94758504594106e-05,-0.00491532554219376,0.202161636751973,-0.26185553488962, + -7.26519209392484e-05,-0.00430215170204606,0.216233667800718,-0.287237621252222, + -7.58279914190307e-05,-0.00368897786189848,0.230305698849464,-0.312619707614823, + -7.90040618981469e-05,-0.00307580402174956,0.24437772989821,-0.338001793977425, + -8.21801323784843e-05,-0.00246263018160287,0.258449760946955,-0.363383880340026, + -8.5356202857878e-05,-0.00184945634145417,0.272521791995701,-0.388765966702628, + -8.85322733373828e-05,-0.00123628250130636,0.286593823044446,-0.41414805306523, + -9.17083438173316e-05,-0.000623108661158556,0.300665854093192,-0.439530139427831, + -9.48844142971694e-05,-9.93482101030452e-06,0.314737885141938,-0.464912225790433, + -9.80604847767852e-05,0.000603239019137281,0.328809916190683,-0.490294312153034, + -0.000101236555256401,0.00121641285928531,0.342881947239428,-0.515676398515636, + -0.000104412625736128,0.00182958669943356,0.356953978288174,-0.541058484878237, + -0.000107588696215632,0.00244276053958115,0.371026009336919,-0.566440571240839, + -0.000110764766695914,0.00305593437972851,0.385098040385665,-0.591822657603441, + -0.000113940837175419,0.00366910821987654,0.39917007143441,-0.617204743966042, + -0.000117116907655146,0.00428228206002457,0.413242102483156,-0.642586830328644, + -0.000120292978134873,0.00489545590017215,0.427314133531901,-0.667968916691245, + -0.000123469048614377,0.00550862974032063,0.441386164580647,-0.693351003053847, + -0.000126645119093882,0.00612180358046865,0.455458195629393,-0.718733089416449, + -4.64460278921386e-05,-0.00820674271006061,0.116493502208095,-0.11075103683136, + -4.91805722405425e-05,-0.00761837050000824,0.130181364503788,-0.136396797868077, + -5.19151165888632e-05,-0.00702999828995587,0.143869226799482,-0.162042558904794, + -5.46496609374336e-05,-0.00644162607990362,0.157557089095175,-0.18768831994151, + -5.73842052857265e-05,-0.00585325386985114,0.171244951390868,-0.213334080978227, + -6.01187496341304e-05,-0.00526488165979855,0.184932813686562,-0.238979842014944, + -6.28532939825344e-05,-0.00467650944974629,0.198620675982255,-0.264625603051661, + -6.55878383311048e-05,-0.00408813723969415,0.212308538277948,-0.290271364088377, + -6.83223826792312e-05,-0.00349976502964156,0.225996400573641,-0.315917125125094, + -7.10569270276351e-05,-0.00291139281958896,0.239684262869335,-0.341562886161811, + -7.37914713760945e-05,-0.00232302060953637,0.253372125165028,-0.367208647198527, + -7.65260157243874e-05,-0.00173464839948423,0.267059987460721,-0.392854408235244, + -7.92605600729024e-05,-0.00114627618943186,0.280747849756415,-0.418500169271961, + -8.19951044211953e-05,-0.000557903979379715,0.294435712052108,-0.444145930308678, + -8.47296487699323e-05,3.04682306722093e-05,0.308123574347801,-0.469791691345394, + -8.74641931178921e-05,0.000618840440725466,0.321811436643495,-0.495437452382111, + -9.0198737466296e-05,0.00120721265077783,0.335499298939188,-0.521083213418828, + -9.2933281814811e-05,0.0017955848608302,0.349187161234881,-0.546728974455544, + -9.56678261633259e-05,0.00238395707088235,0.362875023530574,-0.572374735492261, + -9.84023705118409e-05,0.00297232928093427,0.376562885826267,-0.598020496528978, + -0.000101136914860578,0.00356070149098686,0.390250748121961,-0.623666257565694, + -0.00010387145920876,0.00414907370103945,0.403938610417654,-0.649312018602411, + -0.000106606003557275,0.00473744591109115,0.417626472713347,-0.674957779639128, + -0.000109340547905235,0.00532581812114419,0.43131433500904,-0.700603540675844, + -0.000112075092253416,0.00591419033119722,0.445002197304734,-0.726249301712561, + -4.18297581402938e-05,-0.00777687143813749,0.115047391134535,-0.11211525475144, + -4.40881495395451e-05,-0.00722065799464855,0.128288147089261,-0.138063796616735, + -4.63465409387964e-05,-0.00666444455115955,0.141528903043987,-0.16401233848203, + -4.86049323382143e-05,-0.00610823110767067,0.154769658998713,-0.189960880347325, + -5.08633237373823e-05,-0.00555201766418167,0.168010414953439,-0.21590942221262, + -5.31217151366059e-05,-0.00499580422069246,0.181251170908165,-0.241857964077916, + -5.53801065355519e-05,-0.00443959077720324,0.194491926862891,-0.267806505943211, + -5.76384979351641e-05,-0.0038833773337148,0.207732682817617,-0.293755047808506, + -5.98968893344987e-05,-0.00332716389022569,0.220973438772344,-0.319703589673801, + -6.21552807334447e-05,-0.00277095044673636,0.23421419472707,-0.345652131539097, + -6.44136721326682e-05,-0.00221473700324726,0.247454950681796,-0.371600673404392, + -6.66720635322804e-05,-0.0016585235597586,0.260695706636522,-0.397549215269687, + -6.89304549309488e-05,-0.00110231011626927,0.273936462591248,-0.423497757134982, + -7.11888463303945e-05,-0.000546096672780827,0.287177218545974,-0.449446299000277, + -7.34472377298401e-05,1.01167707082794e-05,0.3004179745007,-0.475394840865573, + -7.57056291289526e-05,0.000566330214197608,0.313658730455426,-0.501343382730868, + -7.79640205280652e-05,0.00112254365768694,0.326899486410152,-0.527291924596163, + -8.02224119273998e-05,0.00167875710117538,0.340140242364878,-0.553240466461458, + -8.24808033266233e-05,0.00223497054466448,0.353380998319604,-0.579189008326753, + -8.4739194726291e-05,0.00279118398815292,0.36662175427433,-0.605137550192049, + -8.69975861250705e-05,0.00334739743164292,0.379862510229057,-0.631086092057344, + -8.92559775244051e-05,0.00390361087513158,0.393103266183783,-0.657034633922639, + -9.15143689239617e-05,0.0044598243186198,0.406344022138508,-0.682983175787934, + -9.37727603226302e-05,0.00501603776210979,0.419584778093235,-0.708931717653229, + -9.60311517219647e-05,0.0055722512055989,0.432825534047961,-0.734880259518525, + -3.67191166250336e-05,-0.0073257366447137,0.113433942679541,-0.113606353119257, + -3.84979696033683e-05,-0.00680918514886164,0.126178719976784,-0.139885836245955, + -4.02768225816474e-05,-0.00629263365300958,0.138923497274027,-0.166165319372653, + -4.20556755598711e-05,-0.00577608215715764,0.15166827457127,-0.192444802499352, + -4.38345285381225e-05,-0.00525953066130547,0.164413051868513,-0.21872428562605, + -4.5613381516374e-05,-0.00474297916545308,0.177157829165756,-0.245003768752748, + -4.73922344947364e-05,-0.00422642766960135,0.189902606462999,-0.271283251879447, + -4.91710874727658e-05,-0.00370987617374885,0.202647383760242,-0.297562735006145, + -5.09499404511837e-05,-0.00319332467789701,0.215392161057485,-0.323842218132843, + -5.27287934293796e-05,-0.00267677318204451,0.228136938354728,-0.350121701259542, + -5.45076464076866e-05,-0.00216022168619268,0.24088171565197,-0.37640118438624, + -5.62864993864931e-05,-0.00164367019034106,0.253626492949213,-0.402680667512938, + -5.80653523644115e-05,-0.00112711869448856,0.266371270246456,-0.428960150639636, + -5.98442053427739e-05,-0.000610567198636502,0.279116047543699,-0.455239633766335, + -6.16230583205812e-05,-9.40157027837785e-05,0.291860824840942,-0.481519116893033, + -6.34019112990547e-05,0.000422535793068279,0.304605602138186,-0.507798600019731, + -6.51807642774171e-05,0.000939087288919893,0.317350379435428,-0.53407808314643, + -6.69596172556686e-05,0.0014556387847724,0.330095156732671,-0.560357566273128, + -6.8738470234031e-05,0.00197219028062401,0.342839934029914,-0.586637049399826, + -7.05173232119494e-05,0.00248874177647673,0.355584711327157,-0.612916532526524, + -7.22961761907559e-05,0.00300529327232768,0.368329488624399,-0.639196015653223, + -7.40750291690073e-05,0.00352184476817996,0.381074265921642,-0.665475498779921, + -7.58538821471477e-05,0.00403839626403224,0.393819043218885,-0.691754981906619, + -7.76327351259543e-05,0.00455494775988408,0.406563820516128,-0.718034465033317, + -7.94115881033175e-05,0.00507149925573724,0.419308597813372,-0.744313948160016, + -3.13549085854958e-05,-0.0068791841975252,0.111726695670886,-0.115150719626607, + -3.26862352426349e-05,-0.0064086962548392,0.123949750500439,-0.141772966591723, + -3.40175619001626e-05,-0.00593820831215364,0.136172805329992,-0.168395213556839, + -3.53488885571629e-05,-0.00546772036946741,0.148395860159545,-0.195017460521955, + -3.66802152145795e-05,-0.00499723242678152,0.160618914989097,-0.22163970748707, + -3.80115418720517e-05,-0.00452674448409573,0.17284196981865,-0.248261954452186, + -3.93428685289687e-05,-0.00405625654140951,0.185065024648203,-0.274884201417302, + -4.06741951866074e-05,-0.00358576859872439,0.197288079477756,-0.301506448382418, + -4.200552184358e-05,-0.00311528065603772,0.209511134307309,-0.328128695347534, + -4.33368485008301e-05,-0.00264479271335216,0.221734189136861,-0.35475094231265, + -4.46681751583022e-05,-0.00217430477066638,0.233957243966414,-0.381373189277765, + -4.59995018154968e-05,-0.00170381682798015,0.246180298795967,-0.407995436242881, + -4.733082847308e-05,-0.00123332888529482,0.25840335362552,-0.434617683207997, + -4.86621551304411e-05,-0.000762840942609033,0.270626408455073,-0.461239930173113, + -4.99934817871361e-05,-0.000292352999922585,0.282849463284626,-0.487862177138229, + -5.13248084446083e-05,0.000178134942763419,0.295072518114179,-0.514484424103345, + -5.26561351020804e-05,0.000648622885449202,0.307295572943732,-0.541106671068461, + -5.39874617587754e-05,0.00111911082813543,0.319518627773284,-0.567728918033576, + -5.53187884164696e-05,0.00158959877082121,0.331741682602837,-0.594351164998692, + -5.66501150739418e-05,0.00206008671350677,0.34396473743239,-0.620973411963808, + -5.79814417306368e-05,0.002530574656193,0.356187792261943,-0.647595658928924, + -5.93127683879979e-05,0.00300106259887878,0.368410847091495,-0.67421790589404, + -6.06440950461362e-05,0.00347155054156367,0.380633901921048,-0.700840152859155, + -6.19754217027202e-05,0.00394203848425034,0.392856956750601,-0.727462399824271, + -6.33067483596372e-05,0.00441252642693746,0.405080011580155,-0.754084646789387, + -2.60307091927425e-05,-0.00646224896747605,0.110018582726155,-0.116663596750258, + -2.69766889140211e-05,-0.00604182010861598,0.121722634733857,-0.143621618654476, + -2.7922668635133e-05,-0.00562139124975558,0.13342668674156,-0.170579640558694, + -2.88686483561618e-05,-0.00520096239089529,0.145130738749262,-0.197537662462911, + -2.98146280773848e-05,-0.00478053353203534,0.156834790756964,-0.224495684367129, + -3.07606077985523e-05,-0.00436010467317494,0.168538842764666,-0.251453706271347, + -3.17065875199973e-05,-0.00393967581431509,0.180242894772368,-0.278411728175565, + -3.26525672407763e-05,-0.00351924695545458,0.191946946780071,-0.305369750079783, + -3.35985469621103e-05,-0.00309881809659429,0.203650998787773,-0.332327771984, + -3.45445266833888e-05,-0.00267838923773422,0.215355050795475,-0.359285793888218, + -3.54905064045008e-05,-0.00225796037887416,0.227059102803177,-0.386243815792436, + -3.64364861255018e-05,-0.00183753152001342,0.23876315481088,-0.413201837696654, + -3.73824658466138e-05,-0.00141710266115314,0.250467206818582,-0.440159859600872, + -3.83284455679478e-05,-0.000996673802293291,0.262171258826284,-0.46711788150509, + -3.92744252892818e-05,-0.000576244943433446,0.273875310833986,-0.494075903409308, + -4.02204050102828e-05,-0.000155816084572935,0.285579362841688,-0.521033925313525, + -4.11663847311727e-05,0.000264612774287576,0.297283414849391,-0.547991947217743, + -4.21123644527288e-05,0.000685041633147865,0.308987466857093,-0.574949969121961, + -4.30583441738408e-05,0.00110547049200793,0.320691518864795,-0.601907991026179, + -4.40043238946197e-05,0.00152589935086844,0.332395570872497,-0.628866012930397, + -4.49503036163978e-05,0.00194632820972718,0.344099622880199,-0.655824034834615, + -4.58962833372878e-05,0.00236675706858813,0.355803674887901,-0.682782056738832, + -4.68422630587328e-05,0.0027871859274482,0.367507726895604,-0.70974007864305, + -4.77882427791787e-05,0.00320761478630915,0.379211778903306,-0.736698100547268, + -4.87342225002907e-05,0.00362804364516967,0.390915830911009,-0.763656122451486, + -2.10314592080929e-05,-0.00609374080828951,0.108402638682531,-0.118066882661525, + -2.16712753431936e-05,-0.00572412522208843,0.119618278202666,-0.145336356324801, + -2.23110914782942e-05,-0.00535450963588713,0.1308339177228,-0.172605829988076, + -2.29509076133394e-05,-0.00498489404968572,0.142049557242935,-0.199875303651351, + -2.35907237484678e-05,-0.00461527846348464,0.15326519676307,-0.227144777314626, + -2.42305398835407e-05,-0.00424566287728301,0.164480836283205,-0.254414250977901, + -2.48703560185581e-05,-0.00387604729108204,0.175696475803339,-0.281683724641176, + -2.55101721538531e-05,-0.00350643170488096,0.186912115323474,-0.308953198304451, + -2.6149988288815e-05,-0.00313681611867933,0.198127754843609,-0.336222671967726, + -2.67898044238324e-05,-0.00276720053247792,0.209343394363743,-0.363492145631001, + -2.74296205591273e-05,-0.00239758494627673,0.220559033883878,-0.390761619294276, + -2.80694366939782e-05,-0.00202796936007554,0.231774673404012,-0.418031092957551, + -2.87092528290511e-05,-0.00165835377387391,0.242990312924148,-0.445300566620827, + -2.93490689644571e-05,-0.00128873818767317,0.254205952444282,-0.472570040284102, + -2.9988885099419e-05,-0.000919122601471978,0.265421591964417,-0.499839513947377, + -3.06287012343809e-05,-0.000549507015270567,0.276637231484551,-0.527108987610652, + -3.12685173700089e-05,-0.000179891429070045,0.287852871004686,-0.554378461273927, + -3.19083335046377e-05,0.000189724157132032,0.299068510524821,-0.581647934937202, + -3.25481496394886e-05,0.000559339743333886,0.310284150044956,-0.608917408600477, + -3.31879657751166e-05,0.000928955329534631,0.32149978956509,-0.636186882263752, + -3.38277819096344e-05,0.00129857091573626,0.332715429085225,-0.663456355927027, + -3.44675980448184e-05,0.00166818650193745,0.34393106860536,-0.690725829590302, + -3.51074141802243e-05,0.00203780208813775,0.355146708125494,-0.717995303253577, + -3.57472303149642e-05,0.00240741767434072,0.36636234764563,-0.745264776916852, + -3.63870464499261e-05,0.00277703326054146,0.377577987165764,-0.772534250580128, + -1.65758040944763e-05,-0.00578344312304624,0.106952708469109,-0.119304118994317, + -1.6990122348931e-05,-0.0054621357738901,0.117732136048038,-0.146848190605967, + -1.74044406033302e-05,-0.00514082842473396,0.128511563626968,-0.174392262217617, + -1.78187588577017e-05,-0.00481952107557782,0.139290991205897,-0.201936333829267, + -1.82330771119621e-05,-0.00449821372642145,0.150070418784826,-0.229480405440917, + -1.86473953663335e-05,-0.00417690637726531,0.160849846363755,-0.257024477052567, + -1.90617136206495e-05,-0.00385559902810917,0.171629273942684,-0.284568548664217, + -1.94760318754095e-05,-0.00353429167895336,0.182408701521614,-0.312112620275867, + -1.98903501293923e-05,-0.00321298432979655,0.193188129100543,-0.339656691887517, + -2.03046683838748e-05,-0.00289167698064086,0.203967556679472,-0.367200763499167, + -2.07189866382462e-05,-0.00257036963148471,0.214746984258401,-0.394744835110817, + -2.11333048927287e-05,-0.00224906228232857,0.225526411837331,-0.422288906722467, + -2.15476231468781e-05,-0.00192775493317199,0.23630583941626,-0.449832978334117, + -2.19619414013605e-05,-0.00160644758401629,0.247085266995189,-0.477377049945767, + -2.2376259655732e-05,-0.00128514023485971,0.257864694574119,-0.504921121557417, + -2.27905779105475e-05,-0.000963832885704674,0.268644122153047,-0.532465193169067, + -2.32048961646969e-05,-0.000642525536548089,0.279423549731976,-0.560009264780717, + -2.36192144187353e-05,-0.000321218187390837,0.290202977310906,-0.587553336392367, + -2.40335326733288e-05,8.91617646381349e-08,0.300982404889835,-0.615097408004017, + -2.44478509274781e-05,0.000321396510921002,0.311761832468765,-0.642641479615667, + -2.48621691818496e-05,0.000642703860077365,0.322541260047694,-0.670185551227317, + -2.52764874364431e-05,0.00096401120923284,0.333320687626623,-0.697729622838967, + -2.56908056909255e-05,0.00128531855838965,0.344100115205553,-0.725273694450617, + -2.6105123945297e-05,0.00160662590754557,0.354879542784482,-0.752817766062266, + -2.65194421992243e-05,0.00192793325670149,0.36565897036341,-0.780361837673917, + -1.27851988466487e-05,-0.0055325338806973,0.105712093385572,-0.120347092032078, + -1.30442277671561e-05,-0.00525450996101073,0.116119728993648,-0.148122645898807, + -1.33032566877189e-05,-0.00497648604132428,0.126527364601724,-0.175898199765535, + -1.35622856080042e-05,-0.00469846212163749,0.1369350002098,-0.203673753632264, + -1.38213145283728e-05,-0.00442043820195093,0.147342635817875,-0.231449307498992, + -1.40803434488523e-05,-0.00414241428226414,0.157750271425951,-0.259224861365721, + -1.43393723691654e-05,-0.00386439036257746,0.168157907034027,-0.287000415232449, + -1.45984012895339e-05,-0.00358636644289079,0.178565542642103,-0.314775969099177, + -1.48574302101245e-05,-0.00330834252320455,0.188973178250179,-0.342551522965906, + -1.51164591307151e-05,-0.0030303186035181,0.199380813858255,-0.370327076832634, + -1.53754880508616e-05,-0.00275229468383098,0.209788449466331,-0.398102630699363, + -1.56345169712857e-05,-0.00247427076414453,0.220196085074407,-0.425878184566091, + -1.58935458915987e-05,-0.00219624684445741,0.230603720682483,-0.45365373843282, + -1.61525748119118e-05,-0.00191822292477051,0.24101135629056,-0.481429292299548, + -1.64116037325579e-05,-0.00164019900508472,0.251418991898635,-0.509204846166277, + -1.66706326526489e-05,-0.00136217508539738,0.261826627506711,-0.536980400033005, + -1.6929661573073e-05,-0.00108415116571092,0.272234263114787,-0.564755953899733, + -1.71886904938301e-05,-0.000806127246024246,0.282641898722863,-0.592531507766462, + -1.74477194138101e-05,-0.000528103326337348,0.293049534330939,-0.62030706163319, + -1.77067483342341e-05,-0.000250079406650894,0.303457169939015,-0.648082615499919, + -1.79657772552133e-05,2.79445130351164e-05,0.313864805547091,-0.675858169366647, + -1.82248061755264e-05,0.000305968432722015,0.324272441155167,-0.703633723233375, + -1.84838350959504e-05,0.000583992352408469,0.334680076763243,-0.731409277100104, + -1.87428640165965e-05,0.000862016272094479,0.345087712371318,-0.759184830966833, + -1.90018929370206e-05,0.00114004019178093,0.355495347979394,-0.786960384833561, + -9.68577017024241e-06,-0.0053360922584294,0.104692886225837,-0.121193558443921, + -9.84367642783979e-06,-0.00509492241656495,0.114796041205658,-0.149156980977209, + -1.00015826854094e-05,-0.00485375257470044,0.12489919618548,-0.177120403510496, + -1.01594889428958e-05,-0.00461258273283627,0.135002351165301,-0.205083826043784, + -1.03173952006874e-05,-0.00437141289097198,0.145105506145123,-0.233047248577072, + -1.04753014579795e-05,-0.00413024304910736,0.155208661124944,-0.261010671110359, + -1.06332077154936e-05,-0.00388907320724252,0.165311816104766,-0.288974093643647, + -1.07911139729522e-05,-0.00364790336537824,0.175414971084587,-0.316937516176935, + -1.09490202308549e-05,-0.00340673352351439,0.185518126064408,-0.344900938710223, + -1.11069264882024e-05,-0.00316556368164944,0.19562128104423,-0.37286436124351, + -1.12648327459386e-05,-0.00292439383978538,0.205724436024051,-0.400827783776798, + -1.14227390032307e-05,-0.00268322399792087,0.215827591003873,-0.428791206310086, + -1.15806452609668e-05,-0.00244205415605614,0.225930745983695,-0.456754628843373, + -1.17385515185919e-05,-0.0022008843141923,0.236033900963516,-0.484718051376661, + -1.18964577762171e-05,-0.00195971447232801,0.246137055943337,-0.512681473909949, + -1.20543640338422e-05,-0.0017185446304635,0.256240210923159,-0.540644896443237, + -1.22122702916894e-05,-0.00147737478859966,0.26634336590298,-0.568608318976524, + -1.23701765487594e-05,-0.00123620494673449,0.276446520882802,-0.596571741509812, + -1.25280828060514e-05,-0.000995035104869757,0.286549675862623,-0.6245351640431, + -1.26859890642317e-05,-0.000753865263006137,0.296652830842444,-0.652498586576387, + -1.28438953214127e-05,-0.000512695421141185,0.306755985822266,-0.680462009109675, + -1.30018015789268e-05,-0.000271525579276233,0.316859140802088,-0.708425431642963, + -1.3159707836996e-05,-3.0355737413057e-05,0.326962295781909,-0.736388854176251, + -1.33176140946212e-05,0.000210814104451451,0.33706545076173,-0.764352276709538, + -1.34755203520243e-05,0.000451983946315959,0.347168605741552,-0.792315699242826, + -7.2325036896137e-06,-0.00518605697630781,0.103883116689497,-0.121859629957562, + -7.32735110889338e-06,-0.00497497609359365,0.113744955782084,-0.149970883480184, + -7.42219852797876e-06,-0.00476389521087928,0.12360679487467,-0.178082137002806, + -7.51704594720293e-06,-0.00455281432816523,0.133468633967257,-0.206193390525428, + -7.61189336639934e-06,-0.00434173344545075,0.143330473059844,-0.23430464404805, + -7.70674078554023e-06,-0.00413065256273648,0.153192312152431,-0.262415897570672, + -7.8015882050142e-06,-0.00391957168002266,0.163054151245017,-0.290527151093294, + -7.89643562409958e-06,-0.00370849079730817,0.172915990337604,-0.318638404615916, + -7.99128304357355e-06,-0.00349740991459435,0.18277782943019,-0.346749658138538, + -8.08613046243689e-06,-0.00328632903187964,0.192639668522777,-0.37486091166116, + -8.18097788191086e-06,-0.00307524814916582,0.202501507615364,-0.402972165183782, + -8.27582530082971e-06,-0.00286416726645156,0.21236334670795,-0.431083418706404, + -8.37067272030367e-06,-0.00265308638373751,0.222225185800537,-0.459194672229025, + -8.46552013933355e-06,-0.00244200550102325,0.232087024893123,-0.487305925751648, + -8.5603675582524e-06,-0.00223092461830832,0.241948863985711,-0.515417179274269, + -8.65521497794841e-06,-0.00201984373559494,0.251810703078297,-0.543528432796891, + -8.75006239686726e-06,-0.00180876285288023,0.261672542170884,-0.571639686319513, + -8.84490981600816e-06,-0.00159768197016574,0.271534381263471,-0.599750939842135, + -8.93975723492701e-06,-0.00138660108745103,0.281396220356057,-0.627862193364757, + -9.03460465440098e-06,-0.00117552020473699,0.291258059448644,-0.655973446887379, + -9.1294520736529e-06,-0.000964439322022947,0.301119898541231,-0.684084700410001, + -9.22429949312686e-06,-0.000753358439308904,0.310981737633817,-0.712195953932623, + -9.31914691215674e-06,-0.000542277556595305,0.320843576726404,-0.740307207455245, + -9.41399433107559e-06,-0.000331196673879486,0.330705415818991,-0.768418460977867, + -9.50884175066058e-06,-0.000120115791166331,0.340567254911577,-0.796529714500489, + -5.34007546679205e-06,-0.00507356282331128,0.103256638053844,-0.122371115145682, + -5.39678075442418e-06,-0.00488623968474178,0.112932136346901,-0.150595890054283, + -5.45348604188978e-06,-0.00469891654617194,0.122607634639959,-0.178820664962884, + -5.51019132954966e-06,-0.00451159340760265,0.132283132933017,-0.207045439871485, + -5.56689661695975e-06,-0.0043242702690327,0.141958631226075,-0.235270214780086, + -5.62360190464739e-06,-0.00413694713046309,0.151634129519133,-0.263494989688686, + -5.68030719250157e-06,-0.00394962399189414,0.16130962781219,-0.291719764597287, + -5.73701247985614e-06,-0.00376230085332385,0.170985126105248,-0.319944539505888, + -5.79371776743276e-06,-0.00357497771475446,0.180660624398306,-0.348169314414489, + -5.85042305523142e-06,-0.00338765457618506,0.190336122691364,-0.37639408932309, + -5.90712834280804e-06,-0.00320033143761544,0.200011620984422,-0.404618864231691, + -5.96383363049569e-06,-0.00301300829904583,0.209687119277479,-0.432843639140292, + -6.02053891785026e-06,-0.00282568516047577,0.219362617570537,-0.461068414048892, + -6.07724420587097e-06,-0.00263836202190704,0.229038115863595,-0.489293188957493, + -6.13394949333657e-06,-0.0024510388833372,0.238713614156653,-0.517517963866094, + -6.19065478102421e-06,-0.00226371574476758,0.248389112449711,-0.545742738774695, + -6.24736006860083e-06,-0.00207639260619819,0.258064610742768,-0.573967513683296, + -6.3040653559554e-06,-0.00188906946762835,0.267740109035826,-0.602192288591897, + -6.36077064286589e-06,-0.0017017463290574,0.277415607328884,-0.630417063500498, + -6.41747593155273e-06,-0.00151442319048956,0.287091105621942,-0.658641838409098, + -6.47418121857424e-06,-0.00132710005191905,0.296766603915,-0.686866613317699, + -6.53088650603983e-06,-0.00113977691334988,0.306442102208057,-0.7150913882263, + -6.58759179406054e-06,-0.00095245377478026,0.316117600501115,-0.743316163134901, + -6.64429708141512e-06,-0.000765130636210642,0.325793098794173,-0.771540938043502, + -6.70100236921378e-06,-0.000577807497641025,0.335468597087231,-0.799765712952103, + -3.90904127570146e-06,-0.00499034883416188,0.102781846791002,-0.12275657864062, + -3.94309277224059e-06,-0.00482130462420516,0.112316323756452,-0.151066905098329, + -3.97714426855766e-06,-0.00465226041424815,0.121850800721901,-0.179377231556038, + -4.01119576504128e-06,-0.0044832162042916,0.13138527768735,-0.207687558013747, + -4.04524726149713e-06,-0.00431417199433459,0.140919754652799,-0.235997884471456, + -4.07929875795299e-06,-0.00414512778437792,0.150454231618248,-0.264308210929165, + -4.11335025451987e-06,-0.00397608357442136,0.159988708583697,-0.292618537386874, + -4.14740175075368e-06,-0.00380703936446403,0.169523185549146,-0.320928863844583, + -4.1814532475426e-06,-0.0036379951545078,0.179057662514595,-0.349239190302292, + -4.21550474383192e-06,-0.00346895094455069,0.188592139480044,-0.377549516760001, + -4.24955624012124e-06,-0.00329990673459335,0.198126616445493,-0.40585984321771, + -4.28360773652159e-06,-0.0031308625246369,0.207661093410942,-0.434170169675419, + -4.31765923269989e-06,-0.00296181831467934,0.217195570376391,-0.462480496133128, + -4.35171072910023e-06,-0.00279277410472245,0.226730047341841,-0.490790822590837, + -4.38576222550058e-06,-0.002623729894766,0.236264524307289,-0.519101149048546, + -4.41981372201194e-06,-0.00245468568480933,0.245799001272738,-0.547411475506255, + -4.45386521885638e-06,-0.00228564147485288,0.255333478238187,-0.575721801963964, + -4.48791671492366e-06,-0.00211659726489577,0.264867955203636,-0.604032128421673, + -4.521968211324e-06,-0.00194755305493866,0.274402432169085,-0.632342454879382, + -4.55601970794639e-06,-0.00177850884498199,0.283936909134535,-0.660652781337091, + -4.59007120434674e-06,-0.00160946463502487,0.293471386099984,-0.6889631077948, + -4.62412270096912e-06,-0.00144042042506864,0.303005863065433,-0.717273434252509, + -4.65817419748049e-06,-0.00127137621511197,0.312540340030881,-0.745583760710219, + -4.69222569388084e-06,-0.00110233200515442,0.322074816996331,-0.773894087167927, + -4.72627718983709e-06,-0.000933287795197302,0.33160929396178,-0.802204413625637, + -2.84309424389284e-06,-0.00492939236769374,0.10242759579158,-0.12304297548658, + -2.86378587022185e-06,-0.00477413800038395,0.111856965424429,-0.151416866183584, + -2.88447749688392e-06,-0.00461888363307472,0.121286335057277,-0.179790756880588, + -2.90516912349048e-06,-0.00446362926576527,0.130715704690126,-0.208164647577591, + -2.92586074984724e-06,-0.00430837489845559,0.140145074322974,-0.236538538274595, + -2.94655237625951e-06,-0.00415312053114569,0.149574443955823,-0.264912428971599, + -2.96724400289383e-06,-0.00399786616383646,0.159003813588672,-0.293286319668603, + -2.9879356293061e-06,-0.00384261179652712,0.16843318322152,-0.321660210365607, + -3.00862725571838e-06,-0.00368735742921711,0.177862552854369,-0.35003410106261, + -3.02931888240821e-06,-0.00353210306190799,0.187291922487217,-0.378407991759614, + -3.0500105089315e-06,-0.00337684869459842,0.196721292120066,-0.406781882456618, + -3.07070213556582e-06,-0.00322159432728908,0.206150661752915,-0.435155773153622, + -3.09139376175604e-06,-0.00306633995997907,0.215580031385763,-0.463529663850625, + -3.11208538839036e-06,-0.0029110855926695,0.225009401018612,-0.491903554547629, + -3.13277701480263e-06,-0.00275583122536016,0.234438770651461,-0.520277445244633, + -3.15346864099286e-06,-0.00260057685805037,0.243868140284309,-0.548651335941637, + -3.17416026784922e-06,-0.00244532249074125,0.253297509917158,-0.577025226638641, + -3.1948518942615e-06,-0.00229006812343147,0.262726879550006,-0.605399117335645, + -3.21554352022968e-06,-0.00213481375612101,0.272156249182856,-0.633773008032648, + -3.23623514719706e-06,-0.00197955938881211,0.281585618815704,-0.662146898729652, + -3.2569267739424e-06,-0.00182430502150321,0.291014988448552,-0.690520789426656, + -3.27761840013263e-06,-0.00166905065419254,0.300444358081402,-0.71889468012366, + -3.29831002621184e-06,-0.00151379628688275,0.30987372771425,-0.747268570820663, + -3.31900165273513e-06,-0.00135854191957341,0.319303097347098,-0.775642461517667, + -3.33969327903638e-06,-0.00120328755226318,0.328732466979948,-0.804016352214671, + -2.05796516150603e-06,-0.00488505214499968,0.102166349102288,-0.123253529805505, + -2.07075676403323e-06,-0.00474004941776607,0.111518266397154,-0.151674151900921, + -2.08354836644942e-06,-0.00459504669053246,0.120870183692019,-0.180094773996338, + -2.09633996905989e-06,-0.00445004396329896,0.130222100986884,-0.208515396091754, + -2.10913157144832e-06,-0.00430504123606523,0.13957401828175,-0.23693601818717, + -2.12192317400328e-06,-0.00416003850883184,0.148925935576615,-0.265356640282587, + -2.13471477655824e-06,-0.00401503578159823,0.15827785287148,-0.293777262378003, + -2.14750637872463e-06,-0.00387003305436417,0.167629770166346,-0.32219788447342, + -2.16029798144612e-06,-0.00372503032713078,0.176981687461211,-0.350618506568836, + -2.1730895840566e-06,-0.0035800275998974,0.186333604756076,-0.379039128664252, + -2.18588118605645e-06,-0.00343502487266312,0.195685522050941,-0.407459750759669, + -2.1986727890555e-06,-0.00329002214543039,0.205037439345807,-0.435880372855085, + -2.21146439149944e-06,-0.00314501941819612,0.214389356640672,-0.464300994950502, + -2.22425599416542e-06,-0.00300001669096317,0.223741273935537,-0.492721617045918, + -2.23704759660937e-06,-0.00285501396372934,0.233093191230403,-0.521142239141334, + -2.24983919916433e-06,-0.00271001123649595,0.242445108525268,-0.549562861236751, + -2.26263080149725e-06,-0.00256500850926233,0.251797025820133,-0.577983483332167, + -2.27542240405221e-06,-0.00242000578202872,0.261148943114998,-0.606404105427583, + -2.28821400682921e-06,-0.00227500305479555,0.270500860409863,-0.634824727523, + -2.30100560871804e-06,-0.00213000032756128,0.279852777704729,-0.663245349618416, + -2.31379721193914e-06,-0.00198499760032833,0.289204694999594,-0.691665971713833, + -2.32658881405001e-06,-0.00183999487309405,0.29855661229446,-0.720086593809249, + -2.33938041693804e-06,-0.00169499214586155,0.307908529589324,-0.748507215904666, + -2.35217201871585e-06,-0.00154998941862683,0.31726044688419,-0.776927838000082, + -2.36496362127081e-06,-0.00140498669139344,0.326612364179055,-0.805348460095498, + -1.48444435693618e-06,-0.00485296004430896,0.101975341671248,-0.123407126393293, + -1.49251400780037e-06,-0.00471549649036385,0.111270662757443,-0.151861838425099, + -1.50058365874783e-06,-0.0045780329364189,0.120565983843638,-0.180316550456906, + -1.50865330961203e-06,-0.00444056938247384,0.129861304929834,-0.208771262488712, + -1.51672296055949e-06,-0.00430310582852889,0.139156626016029,-0.237225974520518, + -1.52479261117389e-06,-0.00416564227458338,0.148451947102225,-0.265680686552325, + -1.53286226201033e-06,-0.00402817872063843,0.15774726818842,-0.294135398584131, + -1.54093191312432e-06,-0.00389071516669337,0.167042589274616,-0.322590110615937, + -1.54900156357218e-06,-0.00375325161274787,0.176337910360811,-0.351044822647743, + -1.55707121457516e-06,-0.00361578805880303,0.185633231447007,-0.37949953467955, + -1.56514086557813e-06,-0.00347832450485797,0.194928552533202,-0.407954246711356, + -1.57321051619252e-06,-0.00334086095091291,0.204223873619397,-0.436408958743162, + -1.58128016713999e-06,-0.00320339739696784,0.213519194705593,-0.464863670774968, + -1.58934981797643e-06,-0.00306593384302278,0.222814515791788,-0.493318382806774, + -1.59741946859082e-06,-0.00292847028907728,0.232109836877984,-0.521773094838581, + -1.60548911953828e-06,-0.00279100673513222,0.241405157964179,-0.550227806870387, + -1.61355877048575e-06,-0.00265354318118738,0.250700479050375,-0.578682518902193, + -1.6216284208781e-06,-0.00251607962724143,0.259995800136571,-0.607137230933999, + -1.62969807260271e-06,-0.00237861607329748,0.269291121222766,-0.635591942965806, + -1.63776772243995e-06,-0.00224115251935109,0.278586442308961,-0.664046654997612, + -1.64583737360946e-06,-0.00210368896540647,0.287881763395157,-0.692501367029418, + -1.65390702455692e-06,-0.00196622541146185,0.297177084481352,-0.720956079061224, + -1.66197667539336e-06,-0.00182876185751635,0.306472405567547,-0.749410791093031, + -1.67004632600776e-06,-0.00169129830357084,0.315767726653743,-0.777865503124837, + -1.67811597717726e-06,-0.00155383474962623,0.325063047739938,-0.806320215156643, + -1.06802781960069e-06,-0.0048298157695611,0.101836565852121,-0.123518538352924, + -1.0732272373859e-06,-0.00469785286076918,0.111090784084086,-0.151997977669832, + -1.07842665530988e-06,-0.00456588995197749,0.120345002316051,-0.18047741698674, + -1.0836260731506e-06,-0.00443392704318579,0.129599220548016,-0.208956856303648, + -1.08882549065825e-06,-0.00430196413439365,0.138853438779981,-0.237436295620556, + -1.09402490860999e-06,-0.00417000122560218,0.148107657011946,-0.265915734937464, + -1.09922432633969e-06,-0.00403803831681016,0.157361875243911,-0.294395174254372, + -1.10442374395836e-06,-0.00390607540801846,0.166616093475876,-0.32287461357128, + -1.10962316202112e-06,-0.00377411249922677,0.175870311707841,-0.351354052888188, + -1.11482257997286e-06,-0.00364214959043552,0.185124529939806,-0.379833492205096, + -1.120021997425e-06,-0.00351018668164294,0.194378748171771,-0.408312931522004, + -1.12522141537674e-06,-0.00337822377285169,0.203632966403736,-0.436792370838912, + -1.13042083282888e-06,-0.00324626086405955,0.212887184635701,-0.46527181015582, + -1.13562025083613e-06,-0.00311429795526763,0.222141402867666,-0.493751249472728, + -1.14081966873236e-06,-0.00298233504647594,0.231395621099631,-0.522230688789636, + -1.14601908662859e-06,-0.00285037213768424,0.240649839331596,-0.550710128106544, + -1.15121850452482e-06,-0.00271840922889321,0.24990405756356,-0.579189567423452, + -1.15641792186594e-06,-0.00258644632010041,0.259158275795526,-0.60766900674036, + -1.16161733965114e-06,-0.00245448341130849,0.268412494027491,-0.636148446057268, + -1.16681675754737e-06,-0.00232252050251702,0.277666712259456,-0.664627885374176, + -1.17201617599871e-06,-0.00219055759372644,0.28692093049142,-0.693107324691084, + -1.17721559300676e-06,-0.00205859468493319,0.296175148723386,-0.721586764007992, + -1.1824150104589e-06,-0.00192663177614127,0.30542936695535,-0.7500662033249, + -1.18761442902127e-06,-0.00179466886735025,0.314683585187315,-0.778545642641808, + -1.19281384669545e-06,-0.00166270595855789,0.323937803419281,-0.807025081958716, + -7.0283698254292e-05,-0.010701056425712,0.131582598851909,-0.113678199740911, + -7.54190551024159e-05,-0.0100290541223641,0.146948784494001,-0.137500626106234, + -8.05544119503732e-05,-0.00935705181901603,0.162314970136092,-0.161323052471557, + -8.56897687984692e-05,-0.00868504951566784,0.177681155778183,-0.18514547883688, + -9.08251256466208e-05,-0.00801304721231988,0.193047341420274,-0.208967905202204, + -9.59604824944948e-05,-0.00734104490897158,0.208413527062365,-0.232790331567527, + -0.000101095839342424,-0.00666904260562329,0.223779712704456,-0.25661275793285, + -0.000106231196190631,-0.00599704030227532,0.239145898346548,-0.280435184298173, + -0.000111366553038783,-0.00532503799892758,0.254512083988638,-0.304257610663496, + -0.000116501909886713,-0.00465303569557918,0.26987826963073,-0.32808003702882, + -0.000121637266734698,-0.00398103339223121,0.285244455272821,-0.351902463394143, + -0.000126772623582849,-0.00330903108888325,0.300610640914912,-0.375724889759466, + -0.000131907980430834,-0.00263702878553507,0.315976826557003,-0.39954731612479, + -0.000137043337278819,-0.0019650264821871,0.331343012199094,-0.423369742490113, + -0.000142178694126582,-0.00129302417883848,0.346709197841186,-0.447192168855436, + -0.000147314050975234,-0.000621021875491401,0.362075383483276,-0.47101459522076, + -0.000152449407822886,5.09804278574499e-05,0.377441569125368,-0.494837021586083, + -0.000157584764670871,0.000722982731205635,0.392807754767459,-0.518659447951406, + -0.000162720121518634,0.00139498503455426,0.40817394040955,-0.542481874316729, + -0.000167855478367285,0.00206698733790134,0.423540126051641,-0.566304300682053, + -0.000172990835215159,0.00273898964124974,0.438906311693732,-0.590126727047376, + -0.000178126192063366,0.00341099194459726,0.454272497335823,-0.613949153412699, + -0.000183261548911129,0.00408299424794611,0.469638682977915,-0.637771579778022, + -0.000188396905759003,0.00475499655129452,0.485004868620006,-0.661594006143345, + -0.00019353226260721,0.00542699885464248,0.500371054262097,-0.685416432508669, + -6.974458098577e-05,-0.0106358594249302,0.13141425677876,-0.113853306286322, + -7.48092974050818e-05,-0.00996531066807438,0.146732136582974,-0.137710954815312, + -7.98740138244769e-05,-0.00929476191121881,0.162050016387189,-0.161568603344303, + -8.49387302438442e-05,-0.00862421315436301,0.177367896191403,-0.185426251873293, + -9.00034466631006e-05,-0.00795366439750711,0.192685775995618,-0.209283900402283, + -9.50681630824124e-05,-0.00728311564065121,0.208003655799832,-0.233141548931274, + -0.000100132879501724,-0.00661256688379541,0.223321535604046,-0.256999197460264, + -0.000105197595920981,-0.00594201812693962,0.238639415408261,-0.280856845989255, + -0.000110262312340181,-0.00527146937008349,0.253957295212475,-0.304714494518245, + -0.000115327028759826,-0.00460092061322825,0.26927517501669,-0.328572143047235, + -0.000120391745179027,-0.00393037185637257,0.284593054820904,-0.352429791576226, + -0.00012545646159845,-0.00325982309951689,0.299910934625118,-0.376287440105216, + -0.000130521178017928,-0.00258927434266143,0.315228814429332,-0.400145088634206, + -0.000135585894436963,-0.00191872558580508,0.330546694233547,-0.424002737163197, + -0.000140650610856219,-0.0012481768289494,0.345864574037761,-0.447860385692187, + -0.000145715327275697,-0.000577628072093717,0.361182453841976,-0.471718034221177, + -0.000150780043694954,9.29206847621877e-05,0.37650033364619,-0.495575682750168, + -0.000155844760114543,0.00076346944161787,0.391818213450405,-0.519433331279158, + -0.000160909476534021,0.00143401819847311,0.407136093254619,-0.543290979808148, + -0.000165974192952945,0.00210456695532946,0.422453973058833,-0.567148628337139, + -0.000171038909372534,0.00277511571218492,0.437771852863048,-0.591006276866129, + -0.00017610362579179,0.00344566446904082,0.453089732667262,-0.61486392539512, + -0.000181168342211158,0.00411621322589673,0.468407612471477,-0.63872157392411, + -0.000186233058630081,0.00478676198275263,0.483725492275691,-0.6625792224531, + -0.000191297775049892,0.00545731073960765,0.499043372079905,-0.686436870982091, + -6.90038965986128e-05,-0.0105468463361844,0.131182692667461,-0.114093437132613, + -7.39722384737462e-05,-0.00987837748463394,0.14643418593165,-0.137999387271059, + -7.89405803488519e-05,-0.00920990863308335,0.16168567919584,-0.161905337409505, + -8.39089222240408e-05,-0.00854143978153299,0.17693717246003,-0.185811287547951, + -8.88772640992297e-05,-0.00787297092998251,0.192188665724219,-0.209717237686397, + -9.38456059744741e-05,-0.00720450207843215,0.207440158988409,-0.233623187824843, + -9.88139478494965e-05,-0.00653603322688157,0.222691652252599,-0.257529137963289, + -0.000103782289724741,-0.0058675643753312,0.237943145516789,-0.281435088101735, + -0.000108750631599541,-0.00519909552377995,0.253194638780979,-0.30534103824018, + -0.000113718973475063,-0.00453062667223025,0.268446132045168,-0.329246988378627, + -0.000118687315350363,-0.00386215782068011,0.283697625309357,-0.353152938517072, + -0.000123655657225052,-0.00319368896912864,0.298949118573548,-0.377058888655518, + -0.000128623999100186,-0.00252522011757828,0.314200611837737,-0.400964838793964, + -0.000133592340975541,-0.00185675126602791,0.329452105101927,-0.42487078893241, + -0.000138560682850453,-0.00118828241447755,0.344703598366117,-0.448776739070856, + -0.000143529024725475,-0.000519813562926519,0.359955091630307,-0.472682689209302, + -0.000148497366600941,0.000148655288623178,0.375206584894496,-0.496588639347748, + -0.000153465708475631,0.000817124140174652,0.390458078158686,-0.520494589486194, + -0.00015843405035143,0.00148559299172391,0.405709571422875,-0.54440053962464, + -0.000163402392226009,0.00215406184327582,0.420961064687066,-0.568306489763086, + -0.000168370734101697,0.00282253069482508,0.436212557951255,-0.592212439901532, + -0.000173339075976831,0.00349099954637566,0.451464051215445,-0.616118390039978, + -0.000178307417851631,0.00415946839792625,0.466715544479634,-0.640024340178424, + -0.000183275759727097,0.00482793724947639,0.481967037743824,-0.66393029031687, + -0.00018824410160212,0.00549640610102786,0.497218531008015,-0.687836240455316, + -6.79933548632383e-05,-0.0104264414366823,0.130866238235245,-0.114420231454212, + -7.28314784274042e-05,-0.00976096412066174,0.146027120756868,-0.138391915303833, + -7.76696019917367e-05,-0.00909548680464123,0.161188003278491,-0.162363599153453, + -8.25077255560136e-05,-0.00843000948862083,0.176348885800115,-0.186335283003074, + -8.73458491201795e-05,-0.00776453217260031,0.191509768321738,-0.210306966852694, + -9.2183972684512e-05,-0.00709905485657991,0.206670650843361,-0.234278650702315, + -9.70220962485113e-05,-0.00643357754055895,0.221831533364985,-0.258250334551935, + -0.000101860219812455,-0.00576810022453822,0.236992415886608,-0.282222018401556, + -0.000106698343377232,-0.00510262290851826,0.252153298408232,-0.306193702251176, + -0.000111536466941176,-0.00443714559249719,0.267314180929855,-0.330165386100797, + -0.000116374590505619,-0.00377166827647701,0.282475063451478,-0.354137069950417, + -0.000121212714069729,-0.00310619096045683,0.297635945973101,-0.378108753800038, + -0.000126050837634173,-0.00244071364443643,0.312796828494725,-0.402080437649658, + -0.000130888961198394,-0.00177523632841603,0.327957711016348,-0.426052121499279, + -0.000135727084762283,-0.00110975901239496,0.343118593537972,-0.450023805348899, + -0.000140565208326726,-0.000444281696374782,0.358279476059595,-0.47399548919852, + -0.00014540333189117,0.000221195619645842,0.373440358581218,-0.49796717304814, + -0.000150241455454836,0.00088667293566691,0.388601241102842,-0.521938856897761, + -0.000155079579019279,0.00155215025168709,0.403762123624465,-0.545910540747381, + -0.000159917702584167,0.00221762756770705,0.418923006146088,-0.569882224597001, + -0.000164755826147722,0.00288310488372812,0.434083888667712,-0.593853908446622, + -0.000169593949711833,0.00354858219974918,0.449244771189335,-0.617825592296242, + -0.000174432073275721,0.00421405951576981,0.464405653710959,-0.641797276145863, + -0.000179270196840164,0.00487953683178999,0.479566536232582,-0.665768959995483, + -0.000184108320405385,0.00554501414780928,0.494727418754205,-0.689740643845104, + -6.66276904059682e-05,-0.0102656124561046,0.130437622391132,-0.114860371003274, + -7.12921731370331e-05,-0.00960445780326635,0.145475983522797,-0.138920587621312, + -7.59566558684033e-05,-0.00894330315042857,0.160514344654462,-0.162980804239351, + -8.06211385996902e-05,-0.00828214849759057,0.175552705786127,-0.18704102085739, + -8.52856213309217e-05,-0.00762099384475246,0.190591066917792,-0.211101237475428, + -8.99501040623196e-05,-0.00695983919191467,0.205629428049457,-0.235161454093467, + -9.46145867933845e-05,-0.00629868453907645,0.220667789181123,-0.259221670711505, + -9.92790695242274e-05,-0.00563752988623789,0.235706150312788,-0.283281887329544, + -0.000103943552255625,-0.0049763752334,0.250744511444453,-0.307342103947582, + -0.000108608034987245,-0.00431522058056255,0.265782872576118,-0.331402320565621, + -0.000113272517718366,-0.00365406592772421,0.280821233707783,-0.35546253718366, + -0.000117937000449819,-0.00299291127488654,0.295859594839448,-0.379522753801698, + -0.000122601483180551,-0.00233175662204821,0.310897955971113,-0.403582970419737, + -0.000127265965912282,-0.00167060196921076,0.325936317102778,-0.427643187037775, + -0.000131930448643458,-0.0010094473163722,0.340974678234444,-0.451703403655814, + -0.000136594931374523,-0.000348292663534089,0.356013039366109,-0.475763620273853, + -0.00014125941410581,0.000312861989303359,0.371051400497773,-0.499823836891891, + -0.00014592389683743,0.000974016642141251,0.386089761629439,-0.52388405350993, + -0.000150588379568162,0.00163517129498025,0.401128122761104,-0.547944270127968, + -0.00015525286229956,0.00229632594781792,0.416166483892769,-0.572004486746007, + -0.000159917345030403,0.00295748060065604,0.431204845024434,-0.596064703364045, + -0.000164581827761578,0.0036186352534946,0.4462432061561,-0.620124919982084, + -0.000169246310493087,0.00427978990633227,0.461281567287765,-0.644185136600123, + -0.00017391079322393,0.00494094455917082,0.47631992841943,-0.668245353218161, + -0.000178575275956216,0.00560209921200761,0.491358289551095,-0.6923055698362, + -6.48056721373191e-05,-0.0100543813491858,0.129864086951448,-0.115444948418722, + -6.92427046365407e-05,-0.00939948934531509,0.144738862039717,-0.139622751054774, + -7.36797371359565e-05,-0.00874459734144473,0.159613637127985,-0.163800553690826, + -7.81167696349838e-05,-0.0080897053375738,0.174488412216254,-0.187978356326877, + -8.25538021343997e-05,-0.00743481333370333,0.189363187304522,-0.212156158962929, + -8.69908346334269e-05,-0.00677992132983252,0.204237962392791,-0.236333961598981, + -9.14278671325097e-05,-0.0061250293259616,0.219112737481059,-0.260511764235033, + -9.58648996318701e-05,-0.00547013732209112,0.233987512569328,-0.284689566871085, + -0.000100301932131119,-0.00481524531822042,0.248862287657596,-0.308867369507137, + -0.000104738964630258,-0.00416035331434972,0.263737062745865,-0.333045172143189, + -0.000109175997129507,-0.00350546131047902,0.278611837834134,-0.35722297477924, + -0.000113613029628867,-0.00285056930660854,0.293486612922402,-0.381400777415292, + -0.000118050062128283,-0.00219567730273829,0.30836138801067,-0.405578580051344, + -0.000122487094627366,-0.00154078529886692,0.32323616309894,-0.429756382687396, + -0.000126924127126449,-0.000885893294996887,0.338110938187207,-0.453934185323448, + -0.000131361159625532,-0.000231001291125299,0.352985713275477,-0.4781119879595, + -0.000135798192124725,0.000423890712745179,0.367860488363745,-0.502289790595551, + -0.000140235224623919,0.0010787827166161,0.382735263452014,-0.526467593231604, + -0.000144672257123224,0.0017336747204868,0.397610038540282,-0.550645395867655, + -0.000149109289622196,0.00238856672435706,0.41248481362855,-0.574823198503707, + -0.000153546322121834,0.00304345872822775,0.427359588716819,-0.599001001139759, + -0.000157983354621138,0.00369835073209801,0.442234363805087,-0.623178803775811, + -0.000162420387120443,0.00435324273596871,0.457109138893356,-0.647356606411863, + -0.00016685741961997,0.00500813473983897,0.471983913981624,-0.671534409047915, + -0.000171294452118498,0.005663026743711,0.486858689069894,-0.695712211683967, + -6.24161043309979e-05,-0.00978305435470772,0.129108997826724,-0.116207128616983, + -6.65622104957797e-05,-0.00913722239051584,0.143769017645452,-0.140538241545485, + -7.0708316660506e-05,-0.00849139042632396,0.15842903746418,-0.164869354473987, + -7.48544228252879e-05,-0.00784555846213197,0.173089057282909,-0.189200467402489, + -7.90005289902362e-05,-0.00719972649794032,0.187749077101637,-0.213531580330991, + -8.31466351550736e-05,-0.00655389453374877,0.202409096920365,-0.237862693259493, + -8.72927413196334e-05,-0.00590806256955678,0.217069116739093,-0.262193806187995, + -9.14388474844152e-05,-0.00526223060536468,0.231729136557821,-0.286524919116497, + -9.55849536494191e-05,-0.00461639864117314,0.24638915637655,-0.310856032044999, + -9.97310598142565e-05,-0.00397056667698092,0.261049176195278,-0.335187144973501, + -0.000103877165978983,-0.00332473471278938,0.275709196014006,-0.359518257902003, + -0.000108023272143987,-0.00267890274859783,0.290369215832734,-0.383849370830505, + -0.000112169378308713,-0.00203307078440607,0.305029235651462,-0.408180483759007, + -0.000116315484473328,-0.00138723882021408,0.31968925547019,-0.432511596687509, + -0.000120461590638166,-0.000741406856022087,0.334349275288919,-0.456842709616011, + -0.000124607696803225,-9.55748918307631e-05,0.349009295107647,-0.481173822544513, + -0.00012875380296784,0.000550257072361449,0.363669314926375,-0.505504935473015, + -0.000132899909132567,0.00119608903655366,0.378329334745104,-0.529836048401517, + -0.000137046015297848,0.00184192100074432,0.392989354563831,-0.554167161330019, + -0.00014119212146213,0.00248775296493697,0.40764937438256,-0.578498274258522, + -0.000145338227627079,0.00313358492912874,0.422309394201288,-0.602829387187023, + -0.000149484333792138,0.00377941689332006,0.436969414020016,-0.627160500115526, + -0.000153630439957309,0.00442524885751139,0.451629433838744,-0.651491613044027, + -0.000157776546122146,0.00507108082170316,0.466289453657472,-0.67582272597253, + -0.000161922652286539,0.00571691278589626,0.480949473476201,-0.700153838901032, + -5.93517939788124e-05,-0.00944439753518178,0.128135943825456,-0.117177247569262, + -6.31372292670129e-05,-0.00881156468885913,0.142520212767342,-0.141703497055529, + -6.692266455538e-05,-0.00817873184253648,0.156904481709227,-0.166229746541796, + -7.07080998436083e-05,-0.00754589899621405,0.171288750651113,-0.190755996028063, + -7.44935351320586e-05,-0.00691306614989151,0.185673019592998,-0.215282245514331, + -7.82789704202869e-05,-0.00628023330356875,0.200057288534884,-0.239808495000598, + -8.20644057086817e-05,-0.00564740045724643,0.214441557476769,-0.264334744486865, + -8.584984099691e-05,-0.00501456761092367,0.228825826418655,-0.288860993973132, + -8.96352762851382e-05,-0.00438173476460091,0.243210095360541,-0.313387243459399, + -9.34207115736441e-05,-0.00374890191827881,0.257594364302426,-0.337913492945666, + -9.72061468619834e-05,-0.00311606907195605,0.271978633244312,-0.362439742431933, + -0.000100991582150489,-0.00248323622563396,0.286362902186197,-0.386965991918201, + -0.000104777017438384,-0.00185040337931053,0.300747171128083,-0.411492241404468, + -0.000108562452727168,-0.00121757053298865,0.315131440069968,-0.436018490890735, + -0.000112347888015285,-0.000584737686665671,0.329515709011854,-0.460544740377002, + -0.000116133323303735,4.80951596568691e-05,0.34389997795374,-0.485070989863269, + -0.000119918758591964,0.000680928005979187,0.358284246895625,-0.509597239349536, + -0.000123704193880414,0.00131376085230173,0.372668515837511,-0.534123488835803, + -0.00012748962916842,0.00194659369862449,0.387052784779396,-0.55864973832207, + -0.000131275064456982,0.00257942654494681,0.401437053721282,-0.583175987808338, + -0.000135060499745321,0.00321225939126935,0.415821322663167,-0.607702237294604, + -0.000138845935033549,0.00384509223759233,0.430205591605053,-0.632228486780872, + -0.000142631370321888,0.00447792508391487,0.444589860546938,-0.656754736267139, + -0.000146416805610117,0.00511075793023696,0.458974129488824,-0.681280985753406, + -0.000150202240898789,0.00574359077655906,0.473358398430709,-0.705807235239673, + -5.55336637548809e-05,-0.00903667762364446,0.126916173561392,-0.118374916019083, + -5.88895474387674e-05,-0.00842216465480727,0.140956295096243,-0.143142072971484, + -6.22454311227094e-05,-0.00780765168597031,0.154996416631094,-0.167909229923885, + -6.56013148067625e-05,-0.00719313871713345,0.169036538165945,-0.192676386876286, + -6.8957198490649e-05,-0.00657862574829626,0.183076659700796,-0.217443543828687, + -7.23130821745355e-05,-0.00596411277945952,0.197116781235647,-0.242210700781088, + -7.56689658584775e-05,-0.00534959981062233,0.211156902770499,-0.266977857733489, + -7.90248495423085e-05,-0.00473508684178525,0.22519702430535,-0.29174501468589, + -8.2380733226306e-05,-0.00412057387294817,0.239237145840201,-0.31651217163829, + -8.5736616910137e-05,-0.0035060609041111,0.253277267375052,-0.341279328590691, + -8.90925005940235e-05,-0.0028915479352738,0.267317388909903,-0.366046485543092, + -9.24483842782431e-05,-0.00227703496643761,0.281357510444754,-0.390813642495493, + -9.58042679619631e-05,-0.00166252199760053,0.295397631979605,-0.415580799447894, + -9.91601516459051e-05,-0.00104800902876301,0.309437753514457,-0.440347956400295, + -0.000102516035329958,-0.000433496059926153,0.323477875049308,-0.465115113352696, + -0.000105871919013789,0.000181016908910703,0.337517996584159,-0.489882270305097, + -0.000109227802697842,0.00079552987774778,0.35155811811901,-0.514649427257498, + -0.000112583686382117,0.00141004284658441,0.365598239653861,-0.539416584209899, + -0.000115939570065615,0.00202455581542171,0.379638361188712,-0.5641837411623, + -0.00011929545374989,0.00263906878425901,0.393678482723564,-0.5889508981147, + -0.000122651337433832,0.00325358175309542,0.407718604258414,-0.613718055067102, + -0.000126007221117441,0.00386809472193317,0.421758725793266,-0.638485212019502, + -0.000129363104801827,0.00448260769076914,0.435798847328116,-0.663252368971903, + -0.000132718988485436,0.00509712065960732,0.449838968862968,-0.688019525924304, + -0.000136074872169378,0.00571163362844374,0.463879090397819,-0.712786682876705, + -5.09436093744098e-05,-0.00856684132877095,0.125439218184938,-0.119799017709532, + -5.38129069865834e-05,-0.00797738717200214,0.139064782083119,-0.144852628504658, + -5.66822045991455e-05,-0.00738793301523377,0.152690345981301,-0.169906239299785, + -5.95515022115412e-05,-0.00679847885846518,0.166315909879482,-0.194959850094912, + -6.24207998238813e-05,-0.0062090247016966,0.179941473777664,-0.220013460890039, + -6.52900974362769e-05,-0.0056195705449279,0.193567037675845,-0.245067071685166, + -6.81593950485615e-05,-0.0050301163881592,0.207192601574027,-0.270120682480292, + -7.10286926610681e-05,-0.00444066223139084,0.220818165472208,-0.295174293275419, + -7.38979902731862e-05,-0.0038512080746218,0.23444372937039,-0.320227904070546, + -7.67672878857484e-05,-0.00326175391785366,0.248069293268571,-0.345281514865673, + -7.96365854983105e-05,-0.00267229976108507,0.261694857166753,-0.370335125660799, + -8.25058831107617e-05,-0.00208284560431671,0.275320421064934,-0.395388736455926, + -8.53751807230463e-05,-0.00149339144754768,0.288945984963116,-0.420442347251053, + -8.8244478335775e-05,-0.000903937290779755,0.302571548861297,-0.44549595804618, + -9.11137759475045e-05,-0.000314483134010279,0.316197112759479,-0.470549568841306, + -9.39830735600111e-05,0.000274971022758086,0.32982267665766,-0.495603179636433, + -9.68523711722957e-05,0.000864425179527117,0.343448240555842,-0.52065679043156, + -9.97216687849134e-05,0.00145387933629504,0.357073804454023,-0.545710401226687, + -0.000102590966397198,0.00204333349306363,0.370699368352205,-0.570764012021814, + -0.000105460264009705,0.00263278764983221,0.384324932250386,-0.59581762281694, + -0.000108329561621989,0.00322224180660102,0.397950496148568,-0.620871233612067, + -0.000111198859234385,0.00381169596336983,0.41157606004675,-0.645924844407194, + -0.000114068156847225,0.00440115012013775,0.425201623944931,-0.670978455202321, + -0.000116937454459176,0.00499060427690656,0.438827187843112,-0.696032065997447, + -0.000119806752071905,0.00558005843367493,0.452452751741294,-0.721085676792574, + -4.56577545911163e-05,-0.00805233202422462,0.123724364207198,-0.121418673593989, + -4.80081934708387e-05,-0.00749571544070993,0.13687138683906,-0.146798073379543, + -5.03586323506999e-05,-0.00693909885719535,0.150018409470922,-0.172177473165096, + -5.27090712304501e-05,-0.00638248227368088,0.163165432102784,-0.19755687295065, + -5.50595101101448e-05,-0.00582586569016597,0.176312454734646,-0.222936272736204, + -5.7409948990117e-05,-0.0052692491066515,0.189459477366507,-0.248315672521757, + -5.97603878697561e-05,-0.00471263252313681,0.202606499998369,-0.273695072307311, + -6.21108267498949e-05,-0.00415601593962278,0.215753522630231,-0.299074472092865, + -6.44612656295895e-05,-0.00359939935610809,0.228900545262093,-0.324453871878418, + -6.68117045091732e-05,-0.00304278277259296,0.242047567893955,-0.349833271663972, + -6.91621433889233e-05,-0.00248616618907849,0.255194590525816,-0.375212671449525, + -7.15125822687845e-05,-0.00192954960556424,0.268341613157678,-0.400592071235079, + -7.38630211487568e-05,-0.00137293302204955,0.28148863578954,-0.425971471020633, + -7.62134600283959e-05,-0.000816316438534637,0.294635658421402,-0.451350870806186, + -7.85638989085902e-05,-0.000259699855020612,0.307782681053263,-0.47673027059174, + -8.09143377878963e-05,0.000296916728494745,0.320929703685126,-0.502109670377294, + -8.32647766675354e-05,0.000853533312009436,0.334076726316987,-0.527489070162847, + -8.56152155473966e-05,0.00141014989552346,0.347223748948849,-0.552868469948401, + -8.79656544272578e-05,0.00196676647903837,0.360370771580711,-0.578247869733954, + -9.0316093307341e-05,0.0025233830625524,0.373517794212572,-0.603627269519508, + -9.26665321868692e-05,0.00307999964606731,0.386664816844434,-0.629006669305062, + -9.50169710671744e-05,0.00363661622958222,0.399811839476297,-0.654386069090615, + -9.73674099468136e-05,0.00419323281309669,0.412958862108158,-0.679765468876169, + -9.97178488257866e-05,0.00474984939661205,0.42610588474002,-0.705144868661722, + -0.000102068287705981,0.00530646598012652,0.439252907371882,-0.730524268447276, + -3.98642425261941e-05,-0.00751983369950515,0.121827962154871,-0.123170110142105, + -4.16988114729511e-05,-0.00700393910405428,0.134449055234155,-0.14890180620879, + -4.35333804199578e-05,-0.00648804450860363,0.147070148313438,-0.174633502275476, + -4.53679493667702e-05,-0.00597214991315298,0.159691241392722,-0.200365198342161, + -4.72025183136937e-05,-0.00545625531770222,0.172312334472005,-0.226096894408846, + -4.90370872608392e-05,-0.00494036072225201,0.184933427551288,-0.251828590475532, + -5.08716562076517e-05,-0.00442446612680114,0.197554520630572,-0.277560286542217, + -5.27062251546306e-05,-0.00390857153135049,0.210175613709855,-0.303291982608902, + -5.45407941014986e-05,-0.00339267693589984,0.222796706789139,-0.329023678675588, + -5.63753630486996e-05,-0.00287678234044941,0.235417799868422,-0.354755374742273, + -5.82099319949014e-05,-0.0023608877449981,0.248038892947705,-0.380487070808958, + -6.00445009424355e-05,-0.00184499314954811,0.260659986026989,-0.406218766875644, + -6.18790698894145e-05,-0.00132909855409769,0.273281079106272,-0.431950462942329, + -6.37136388359494e-05,-0.000813203958646369,0.285902172185556,-0.457682159009014, + -6.55482077830394e-05,-0.000297309363195719,0.298523265264839,-0.4834138550757, + -6.73827767299073e-05,0.000218585232255153,0.311144358344123,-0.509145551142385, + -6.92173456765532e-05,0.000734479827706025,0.323765451423406,-0.53487724720907, + -7.10519146235322e-05,0.00125037442315645,0.33638654450269,-0.560608943275756, + -7.28864835708443e-05,0.00176626901860644,0.349007637581973,-0.586340639342441, + -7.47210525179343e-05,0.00228216361405664,0.361628730661256,-0.612072335409126, + -7.65556214641361e-05,0.00279805820950862,0.37424982374054,-0.637804031475811, + -7.83901904113371e-05,0.00331395280495883,0.386870916819823,-0.663535727542497, + -8.0224759357983e-05,0.00382984740040948,0.399492009899106,-0.689267423609182, + -8.2059328304851e-05,0.00434574199586057,0.41211310297839,-0.714999119675867, + -8.38938972518299e-05,0.00486163659131122,0.424734196057674,-0.740730815742553, + -3.38488750320498e-05,-0.00700035280528066,0.119840674312775,-0.124963691076466, + -3.5208687984567e-05,-0.00653179367099987,0.13191407999209,-0.151056160642918, + -3.65685009369177e-05,-0.00606323453671886,0.143987485671406,-0.177148630209371, + -3.79283138893238e-05,-0.00559467540243797,0.156060891350721,-0.203241099775823, + -3.92881268418965e-05,-0.00512611626815707,0.168134297030036,-0.229333569342276, + -4.06479397943027e-05,-0.00465755713387617,0.180207702709352,-0.255426038908728, + -4.20077527468199e-05,-0.00418899799959549,0.192281108388667,-0.281518508475181, + -4.33675656990595e-05,-0.00372043886531404,0.204354514067983,-0.307610978041633, + -4.47273786516877e-05,-0.00325187973103369,0.216427919747298,-0.333703447608086, + -4.60871916042049e-05,-0.00278332059675268,0.228501325426613,-0.359795917174538, + -4.74470045566666e-05,-0.00231476146247189,0.240574731105929,-0.385888386740991, + -4.88068175088507e-05,-0.00184620232819088,0.252648136785244,-0.411980856307443, + -5.01666304619786e-05,-0.00137764319391054,0.264721542464559,-0.438073325873896, + -5.15264434139961e-05,-0.00090908405962975,0.276794948143874,-0.464165795440348, + -5.28862563664578e-05,-0.000440524925348296,0.28886835382319,-0.490258265006801, + -5.42460693191416e-05,2.80342089320484e-05,0.300941759502505,-0.516350734573253, + -5.56058822713812e-05,0.000496593343213725,0.313015165181821,-0.542443204139705, + -5.69656952237318e-05,0.000965152477494291,0.325088570861136,-0.568535673706158, + -5.83255081765266e-05,0.00143371161177441,0.337161976540451,-0.594628143272611, + -5.96853211287662e-05,0.00190227074605609,0.349235382219767,-0.620720612839063, + -6.10451340810059e-05,0.00237082988033732,0.361308787899083,-0.646813082405516, + -6.24049470336896e-05,0.00283938901461767,0.373382193578398,-0.672905551971968, + -6.37647599857072e-05,0.00330794814889934,0.385455599257713,-0.69899802153842, + -6.51245729381689e-05,0.00377650728318013,0.397529004937029,-0.725090491104873, + -6.64843858908526e-05,0.00424506641746092,0.409602410616344,-0.751182960671325, + -2.79442657529771e-05,-0.00652223857923007,0.117872205432874,-0.126700888047118, + -2.89011271974171e-05,-0.00610498108625279,0.129406360135984,-0.153142789645814, + -2.98579886420236e-05,-0.00568772359327585,0.140940514839095,-0.179584691244511, + -3.08148500869354e-05,-0.00527046610029913,0.152474669542205,-0.206026592843207, + -3.17717115314586e-05,-0.00485320860732186,0.164008824245316,-0.232468494441903, + -3.27285729762039e-05,-0.00443595111434514,0.175542978948426,-0.258910396040599, + -3.36854344210602e-05,-0.00401869362136842,0.187077133651536,-0.285352297639295, + -3.46422958656389e-05,-0.00360143612839137,0.198611288354647,-0.311794199237991, + -3.55991573102177e-05,-0.00318417863541431,0.210145443057757,-0.338236100836688, + -3.65560187545744e-05,-0.00276692114243682,0.221679597760868,-0.364678002435384, + -3.75128801993752e-05,-0.00234966364946021,0.233213752463978,-0.39111990403408, + -3.84697416441204e-05,-0.00193240615648338,0.244747907167089,-0.417561805632776, + -3.94266030888657e-05,-0.00151514866350633,0.256282061870199,-0.444003707231472, + -4.03834645334999e-05,-0.00109789117052905,0.26781621657331,-0.470445608830168, + -4.13403259781342e-05,-0.000680633677552667,0.27935037127642,-0.496887510428865, + -4.22971874232125e-05,-0.000263376184575614,0.290884525979531,-0.523329412027561, + -4.32540488672917e-05,0.000153881308401882,0.302418680682641,-0.549771313626257, + -4.4210910312481e-05,0.000571138801378268,0.313952835385752,-0.576213215224953, + -4.51677717566712e-05,0.000988396294355542,0.325486990088862,-0.602655116823649, + -4.61246332010834e-05,0.00140565378733282,0.337021144791973,-0.629097018422346, + -4.70814946462728e-05,0.0018229112803092,0.348555299495083,-0.655538920021042, + -4.8038356090907e-05,0.00224016877328603,0.360089454198193,-0.681980821619738, + -4.89952175354302e-05,0.00265742626626331,0.371623608901304,-0.708422723218434, + -4.99520789802865e-05,0.00307468375924014,0.383157763604414,-0.73486462481713, + -5.09089404246987e-05,0.00349194125221786,0.394691918307525,-0.761306526415827, + -2.24592565011283e-05,-0.00610527692785379,0.116028072975099,-0.128295001417611, + -2.3100440174062e-05,-0.00573983429560132,0.127059789399198,-0.155057554205601, + -2.37416238467736e-05,-0.0053743916633483,0.138091505823298,-0.181820106993591, + -2.43828075195407e-05,-0.00500894903109528,0.149123222247398,-0.208582659781582, + -2.50239911924188e-05,-0.00464350639884259,0.160154938671497,-0.235345212569572, + -2.5665174865297e-05,-0.0042780637665899,0.171186655095597,-0.262107765357563, + -2.63063585380641e-05,-0.00391262113433699,0.182218371519697,-0.288870318145553, + -2.69475422106091e-05,-0.00354717850208375,0.193250087943797,-0.315632870933544, + -2.75887258834318e-05,-0.00318173586983117,0.204281804367896,-0.342395423721534, + -2.82299095563654e-05,-0.00281629323757815,0.215313520791996,-0.369157976509524, + -2.8871093229188e-05,-0.00245085060532579,0.226345237216095,-0.395920529297515, + -2.95122769018441e-05,-0.00208540797307255,0.237376953640195,-0.422683082085505, + -3.01534605749998e-05,-0.0017199653408202,0.248408670064294,-0.449445634873496, + -3.07946442472673e-05,-0.00135452270856651,0.259440386488395,-0.476208187661486, + -3.1435827920423e-05,-0.000989080076313931,0.270472102912494,-0.502970740449476, + -3.20770115933566e-05,-0.000623637444061798,0.281503819336593,-0.529733293237467, + -3.27181952659572e-05,-0.000258194811808332,0.292535535760693,-0.556495846025457, + -3.33593789390019e-05,0.000107247820443801,0.303567252184793,-0.583258398813448, + -3.40005626117135e-05,0.0004726904526966,0.314598968608892,-0.610020951601438, + -3.4641746284314e-05,0.00083813308495051,0.325630685032993,-0.636783504389428, + -3.52829299572477e-05,0.00120357571720264,0.336662401457092,-0.663546057177419, + -3.59241136304034e-05,0.00156901834945522,0.347694117881191,-0.690308609965409, + -3.65652973028929e-05,0.00193446098170824,0.358725834305291,-0.7170711627534, + -3.72064809761596e-05,0.00229990361396037,0.36975755072939,-0.74383371554139, + -3.78476646492043e-05,0.00266534624621295,0.38078926715349,-0.770596268329381, + -1.76185693750164e-05,-0.00575830935917143,0.114388256464148,-0.129686928029868, + -1.80302668530696e-05,-0.00544183030858969,0.124975310299501,-0.156729462738776, + -1.84419643305955e-05,-0.00512535125800728,0.135562364134854,-0.183771997447684, + -1.88536618085378e-05,-0.00480887220742543,0.146149417970207,-0.210814532156592, + -1.92653592862579e-05,-0.00449239315684313,0.15673647180556,-0.2378570668655, + -1.96770567640892e-05,-0.00417591410626117,0.167323525640913,-0.264899601574408, + -2.00887542417538e-05,-0.00385943505567909,0.177910579476266,-0.291942136283316, + -2.0500451719474e-05,-0.00354295600509702,0.188497633311619,-0.318984670992224, + -2.09121491975273e-05,-0.00322647695451517,0.199084687146972,-0.346027205701132, + -2.13238466753585e-05,-0.00290999790393309,0.209671740982325,-0.37306974041004, + -2.17355441529121e-05,-0.0025935188533508,0.220258794817679,-0.400112275118947, + -2.21472416310764e-05,-0.00227703980276939,0.230845848653031,-0.427154809827856, + -2.25589391089631e-05,-0.00196056075218709,0.241432902488385,-0.454197344536763, + -2.29706365868498e-05,-0.00164408170160546,0.252019956323738,-0.481239879245671, + -2.33823340642925e-05,-0.00132760265102294,0.262607010159091,-0.508282413954579, + -2.37940315421792e-05,-0.00101112360044087,0.273194063994444,-0.535324948663487, + -2.42057290202879e-05,-0.000694644549859236,0.283781117829797,-0.562367483372395, + -2.46174264979526e-05,-0.000378165499276939,0.29436817166515,-0.589410018081303, + -2.50291239757283e-05,-6.16864486948643e-05,0.304955225500503,-0.616452552790211, + -2.5440821453504e-05,0.00025479260188721,0.315542279335856,-0.643495087499119, + -2.58525189312797e-05,0.000571271652469285,0.326129333171209,-0.670537622208027, + -2.62642164092775e-05,0.000887750703050916,0.336716387006562,-0.697580156916935, + -2.66759138870531e-05,0.00120422975363343,0.347303440841916,-0.724622691625842, + -2.70876113644958e-05,0.00152070880421595,0.357890494677269,-0.75166522633475, + -2.74993088424935e-05,0.00183718785479758,0.368477548512622,-0.778707761043658, + -1.35356444470602e-05,-0.00548053117374969,0.112996219523963,-0.130850566397133, + -1.379112801983e-05,-0.00520765459392381,0.123207282120401,-0.158127163521725, + -1.40466115924887e-05,-0.00493477801409814,0.133418344716838,-0.185403760646317, + -1.43020951651751e-05,-0.00466190143427248,0.143629407313276,-0.212680357770909, + -1.45575787380281e-05,-0.0043890248544467,0.153840469909714,-0.239956954895501, + -1.4813062310659e-05,-0.0041161482746207,0.164051532506152,-0.267233552020093, + -1.50685458835675e-05,-0.00384327169479537,0.17426259510259,-0.294510149144685, + -1.53240294563095e-05,-0.0035703951149697,0.184473657699027,-0.321786746269277, + -1.55795130290515e-05,-0.00329751853514404,0.194684720295465,-0.349063343393869, + -1.58349966017934e-05,-0.00302464195531815,0.204895782891903,-0.376339940518461, + -1.60904801742578e-05,-0.00275176537549227,0.215106845488341,-0.403616537643053, + -1.63459637469998e-05,-0.0024788887956666,0.225317908084778,-0.430893134767645, + -1.66014473197418e-05,-0.00220601221584094,0.235528970681216,-0.458169731892237, + -1.68569308922617e-05,-0.0019331356360146,0.245740033277654,-0.485446329016829, + -1.71124144652257e-05,-0.00166025905618916,0.255951095874092,-0.512722926141421, + -1.73678980380787e-05,-0.00138738247636394,0.266162158470529,-0.539999523266013, + -1.76233816108207e-05,-0.00111450589653783,0.276373221066967,-0.567276120390605, + -1.78788651831185e-05,-0.000841629316711723,0.286584283663405,-0.594552717515197, + -1.81343487561936e-05,-0.000568752736886502,0.296795346259843,-0.621829314639789, + -1.83898323284915e-05,-0.000295876157060171,0.307006408856281,-0.649105911764381, + -1.86453159012334e-05,-2.2999577234728e-05,0.317217471452719,-0.676382508888973, + -1.89007994746415e-05,0.000249877002590271,0.327428534049156,-0.703659106013565, + -1.91562830463843e-05,0.00052275358241749,0.337639596645594,-0.730935703138157, + -1.94117666195703e-05,0.000795630162242489,0.347850659242032,-0.758212300262749, + -1.96672501920903e-05,0.00106850674206882,0.35806172183847,-0.785488897387341, + -1.02210907211298e-05,-0.00526479979132233,0.111860171746584,-0.131788490061392, + -1.03758516132035e-05,-0.00502884141754323,0.121765353500718,-0.159253747756793, + -1.05306125047777e-05,-0.00479288304376324,0.131670535254852,-0.186719005452195, + -1.06853733966572e-05,-0.00455692466998392,0.141575717008986,-0.214184263147596, + -1.08401342883702e-05,-0.00432096629620426,0.15148089876312,-0.241649520842997, + -1.09948951803052e-05,-0.00408500792242505,0.161386080517254,-0.269114778538399, + -1.11496560720736e-05,-0.0038490495486454,0.171291262271389,-0.2965800362338, + -1.13044169638421e-05,-0.00361309117486552,0.181196444025523,-0.324045293929201, + -1.14591778557216e-05,-0.00337713280108631,0.191101625779657,-0.351510551624603, + -1.16139387474901e-05,-0.0031411744273071,0.201006807533791,-0.378975809320004, + -1.17686996394806e-05,-0.00290521605352767,0.210911989287925,-0.406441067015405, + -1.19234605313601e-05,-0.00266925767974802,0.22081717104206,-0.433906324710807, + -1.20782214225734e-05,-0.00243329930596792,0.230722352796194,-0.461371582406208, + -1.22329823145639e-05,-0.00219734093218849,0.240627534550328,-0.488836840101609, + -1.23877432067765e-05,-0.00196138255840927,0.250532716304462,-0.516302097797011, + -1.25425040981009e-05,-0.00172542418462962,0.260437898058596,-0.543767355492412, + -1.26972649903134e-05,-0.00148946581085019,0.270343079812731,-0.571232613187813, + -1.28520258819709e-05,-0.00125350743707053,0.280248261566865,-0.598697870883215, + -1.30067867732953e-05,-0.00101754906329088,0.290153443320999,-0.626163128578616, + -1.31615476660629e-05,-0.000781590689512335,0.300058625075133,-0.653628386274017, + -1.33163085576093e-05,-0.000545632315732902,0.309963806829266,-0.681093643969419, + -1.34710694490447e-05,-0.000309673941952582,0.319868988583401,-0.70855890166482, + -1.36258303411463e-05,-7.37155681727053e-05,0.329774170337536,-0.736024159360221, + -1.37805912330258e-05,0.000162242805606283,0.33967935209167,-0.763489417055623, + -1.39353521244612e-05,0.000398201179385715,0.349584533845804,-0.790954674751024, + -7.61269064772363e-06,-0.00510106851568781,0.110962392421196,-0.132522487820334, + -7.70515579273656e-06,-0.00489510769763823,0.120626441929424,-0.160135386993876, + -7.79762093761072e-06,-0.00468914687958821,0.130290491437652,-0.187748286167419, + -7.8900860826514e-06,-0.00448318606153864,0.13995454094588,-0.215361185340961, + -7.98255122769209e-06,-0.00427722524348906,0.149618590454108,-0.242974084514503, + -8.07501637256625e-06,-0.00407126442543915,0.159282639962336,-0.270586983688046, + -8.16748151727387e-06,-0.00386530360738924,0.168946689470564,-0.298199882861588, + -8.25994666237007e-06,-0.00365934278933966,0.178610738978792,-0.325812782035131, + -8.35241180741075e-06,-0.00345338197129008,0.188274788487019,-0.353425681208673, + -8.44487695211837e-06,-0.00324742115324006,0.197938837995247,-0.381038580382215, + -8.53734209715906e-06,-0.00304146033519048,0.207602887503475,-0.408651479555758, + -8.62980724247731e-06,-0.00283549951714113,0.217266937011703,-0.4362643787293, + -8.72227238712941e-06,-0.00262953869909088,0.226930986519931,-0.463877277902843, + -8.81473753222561e-06,-0.00242357788104131,0.236595036028159,-0.491490177076385, + -8.90720267698875e-06,-0.00221761706299173,0.246259085536387,-0.519103076249928, + -8.99966782164086e-06,-0.00201165624494148,0.255923135044615,-0.54671597542347, + -9.09213296673705e-06,-0.00180569542689168,0.265587184552843,-0.574328874597013, + -9.18459811194428e-06,-0.00159973460884277,0.275251234061071,-0.601941773770555, + -9.27706325681843e-06,-0.00139377379079253,0.284915283569299,-0.629554672944097, + -9.36952840124849e-06,-0.00118781297274184,0.294579333077527,-0.65716757211764, + -9.46199354678878e-06,-0.000981852154693375,0.304243382585755,-0.684780471291182, + -9.55445869210703e-06,-0.000775891336643575,0.313907432093983,-0.712393370464725, + -9.64692383687016e-06,-0.000569930518594219,0.32357148160221,-0.740006269638267, + -9.73938898196636e-06,-0.00036396970054442,0.333235531110438,-0.76761916881181, + -9.8318541272846e-06,-0.000158008882495064,0.342899580618667,-0.795232067985352, + -5.60968746154966e-06,-0.00497889556875963,0.110270734505491,-0.133083736804912, + -5.66472350171932e-06,-0.004796528543909,0.119749362317796,-0.1608095295516, + -5.71975954172244e-06,-0.00461416151905814,0.129227990130102,-0.188535322298289, + -5.77479558172556e-06,-0.00443179449420739,0.138706617942407,-0.216261115044977, + -5.82983162217277e-06,-0.00424942746935697,0.148185245754712,-0.243986907791666, + -5.8848676622314e-06,-0.00406706044450655,0.157663873567016,-0.271712700538355, + -5.93990370212349e-06,-0.00388469341965525,0.167142501379322,-0.299438493285043, + -5.9949397420711e-06,-0.00370232639480439,0.176621129191627,-0.327164286031732, + -6.04997578240729e-06,-0.00351995936995397,0.186099757003932,-0.354890078778421, + -6.1050118223549e-06,-0.00333759234510289,0.195578384816237,-0.382615871525109, + -6.16004786246904e-06,-0.00315522532025247,0.205057012628542,-0.410341664271798, + -6.21508390308279e-06,-0.0029728582954025,0.214535640440847,-0.438067457018487, + -6.27011994280835e-06,-0.00279049127055142,0.224014268253152,-0.465793249765175, + -6.32515598286698e-06,-0.00260812424570056,0.233492896065457,-0.493519042511864, + -6.38019202292561e-06,-0.00242575722084948,0.242971523877762,-0.521244835258553, + -6.43522806320629e-06,-0.00224339019599951,0.252450151690067,-0.548970628005241, + -6.49026410359799e-06,-0.00206102317114909,0.261928779502372,-0.57669642075193, + -6.54530014321253e-06,-0.00187865614629779,0.271407407314677,-0.604422213498619, + -6.60033618393729e-06,-0.00169628912144804,0.280886035126982,-0.632148006245307, + -6.65537222377388e-06,-0.00151392209659695,0.290364662939287,-0.659873798991996, + -6.71040826361047e-06,-0.00133155507174543,0.299843290751592,-0.687599591738684, + -6.76544430378012e-06,-0.00114918804689479,0.309321918563898,-0.715325384485373, + -6.82048034428284e-06,-0.000966821022044595,0.318800546376202,-0.743051177232062, + -6.87551638389738e-06,-0.000784453997193513,0.328279174188507,-0.770776969978751, + -6.93055242428908e-06,-0.000602086972343319,0.337757802000812,-0.798502762725439, + -4.10027489805564e-06,-0.00488884778478804,0.109748227384138,-0.13350533452058, + -4.13320112943594e-06,-0.004724578386053,0.119086977347266,-0.161315930400744, + -4.1661273611493e-06,-0.00456030898731841,0.128425727310393,-0.189126526280908, + -4.19905359239081e-06,-0.00439603958858314,0.137764477273521,-0.216937122161073, + -4.23197982385437e-06,-0.00423177018984811,0.147103227236649,-0.244747718041237, + -4.264906055651e-06,-0.00406750079111351,0.156441977199777,-0.272558313921401, + -4.29783228705904e-06,-0.00390323139237858,0.165780727162905,-0.300368909801565, + -4.3307585185226e-06,-0.00373896199364343,0.175119477126033,-0.328179505681729, + -4.36368475026372e-06,-0.00357469259490872,0.184458227089161,-0.355990101561893, + -4.39661098144972e-06,-0.00341042319617335,0.193796977052289,-0.383800697442057, + -4.42953721291328e-06,-0.00324615379743864,0.203135727015416,-0.411611293322221, + -4.46246344421031e-06,-0.00308188439870349,0.212474476978544,-0.439421889202385, + -4.4953896758404e-06,-0.00291761499996834,0.221813226941672,-0.46723248508255, + -4.52831590758151e-06,-0.00275334560123386,0.2311519769048,-0.495043080962714, + -4.56124213898956e-06,-0.00258907620249915,0.240490726867927,-0.522853676842878, + -4.59416837017557e-06,-0.00242480680376356,0.249829476831056,-0.550664272723042, + -4.62709460191668e-06,-0.00226053740502841,0.259168226794184,-0.578474868603206, + -4.66002083332473e-06,-0.00209626800629392,0.268506976757311,-0.60628546448337, + -4.69294706528789e-06,-0.00193199860755966,0.277845726720439,-0.634096060363534, + -4.72587329725105e-06,-0.00176772920882495,0.287184476683567,-0.661906656243698, + -4.75879952788194e-06,-0.00160345981008936,0.296523226646695,-0.689717252123862, + -4.79172575928999e-06,-0.00143919041135465,0.305861976609822,-0.717527848004027, + -4.8246519910311e-06,-0.00127492101261906,0.315200726572951,-0.745338443884191, + -4.85757822221711e-06,-0.00111065161388435,0.324539476536078,-0.773149039764355, + -4.89050445406924e-06,-0.000946382215150088,0.333878226499206,-0.800959635644519, + -2.9788671481179e-06,-0.00482306122726872,0.109359315352207,-0.133817820434063, + -2.99881215790054e-06,-0.00467241318619205,0.118594060224239,-0.161691271931431, + -3.01875716784972e-06,-0.0045217651451156,0.127828805096271,-0.189564723428799, + -3.03870217749358e-06,-0.00437111710403848,0.137063549968304,-0.217438174926168, + -3.05864718730398e-06,-0.00422046906296181,0.146298294840336,-0.245311626423536, + -3.07859219716988e-06,-0.00406982102188536,0.155533039712368,-0.273185077920904, + -3.09853720698028e-06,-0.00391917298080835,0.1647677845844,-0.301058529418273, + -3.1184822169017e-06,-0.00376852493973168,0.174002529456433,-0.328931980915641, + -3.13842722687863e-06,-0.003617876898655,0.183237274328465,-0.356805432413009, + -3.15837223624493e-06,-0.00346722885757789,0.192472019200497,-0.384678883910378, + -3.17831724633288e-06,-0.00331658081650188,0.201706764072529,-0.412552335407746, + -3.19826225603226e-06,-0.00316593277542476,0.210941508944561,-0.440425786905114, + -3.21820726600919e-06,-0.00301528473434809,0.220176253816593,-0.468299238402483, + -3.23815227576407e-06,-0.00286463669327119,0.229410998688626,-0.496172689899851, + -3.25809728551896e-06,-0.00271398865219474,0.238645743560658,-0.524046141397219, + -3.27804229527384e-06,-0.00256334061111763,0.24788048843269,-0.551919592894588, + -3.29798730525077e-06,-0.00241269257004095,0.257115233304723,-0.579793044391956, + -3.31793231478361e-06,-0.00226204452896428,0.266349978176754,-0.607666495889325, + -3.33787732498259e-06,-0.00211139648788761,0.275584723048787,-0.635539947386693, + -3.3578223344044e-06,-0.00196074844681071,0.284819467920819,-0.663413398884061, + -3.37776734393724e-06,-0.00181010040573382,0.294054212792851,-0.69128685038143, + -3.3977123540252e-06,-0.00165945236465737,0.303288957664883,-0.719160301878798, + -3.41765736378008e-06,-0.00150880432358003,0.312523702536916,-0.747033753376166, + -3.43760237364599e-06,-0.00135815628250402,0.321758447408948,-0.774907204873535, + -3.45754738451109e-06,-0.00120750824142801,0.33099319228098,-0.802780656370903, + -2.15447966761539e-06,-0.00477530097020373,0.109073020878775,-0.134047143901708, + -2.16677689013345e-06,-0.00463476167236698,0.118231261847959,-0.161966723136284, + -2.17907411254048e-06,-0.00449422237453001,0.127389502817143,-0.18988630237086, + -2.19137133533609e-06,-0.00435368307669359,0.136547743786326,-0.217805881605436, + -2.20366855779863e-06,-0.00421314377885684,0.145705984755509,-0.245725460840013, + -2.21596578053873e-06,-0.00407260448102031,0.154864225724693,-0.273645040074589, + -2.22826300316781e-06,-0.00393206518318401,0.164022466693876,-0.301564619309165, + -2.24056022557484e-06,-0.0037915258853467,0.17318070766306,-0.329484198543741, + -2.25285744842596e-06,-0.00365098658751051,0.182338948632243,-0.357403777778317, + -2.2651546708885e-06,-0.00351044728967387,0.191497189601427,-0.385323357012893, + -2.27745189324002e-06,-0.00336990799183656,0.200655430570611,-0.41324293624747, + -2.2897491158691e-06,-0.00322936869400037,0.209813671539794,-0.441162515482046, + -2.30204633844266e-06,-0.00308882939616351,0.218971912508977,-0.469082094716622, + -2.31434356090521e-06,-0.00294829009832664,0.228130153478161,-0.497001673951198, + -2.32664078381184e-06,-0.00280775080049023,0.237288394447344,-0.524921253185774, + -2.33893800649643e-06,-0.00266721150265403,0.246446635416527,-0.55284083242035, + -2.35123522906999e-06,-0.00252667220481717,0.255604876385711,-0.580760411654927, + -2.36353245142151e-06,-0.00238613290698053,0.264763117354894,-0.608679990889503, + -2.37582967355099e-06,-0.002245593609143,0.273921358324078,-0.636599570124079, + -2.38812689645762e-06,-0.00210505431130636,0.283079599293262,-0.664519149358655, + -2.40042411892016e-06,-0.00196451501347017,0.292237840262445,-0.692438728593231, + -2.41272134204884e-06,-0.00182397571563353,0.301396081231629,-0.720358307827807, + -2.42501856440036e-06,-0.00168343641779733,0.310554322200812,-0.748277887062384, + -2.43731578664086e-06,-0.00154289711995981,0.319712563169996,-0.77619746629696, + -2.44961300954749e-06,-0.00140235782212317,0.328870804139179,-0.804117045531536, + -1.5531331770402e-06,-0.00474078261675359,0.108863975224288,-0.13421421309183, + -1.56087352429224e-06,-0.00460766781943001,0.117966385942351,-0.16216739779983, + -1.5686138719051e-06,-0.00447455302210653,0.127068796660415,-0.190120582507831, + -1.57635421910163e-06,-0.00434143822478306,0.136171207378478,-0.218073767215831, + -1.58409456674224e-06,-0.0042083234274598,0.145273618096541,-0.246026951923831, + -1.59183491404979e-06,-0.00407520863013622,0.154376028814604,-0.273980136631832, + -1.59957526157939e-06,-0.00394209383281274,0.163478439532668,-0.301933321339832, + -1.60731560899796e-06,-0.0038089790354896,0.172580850250731,-0.329886506047832, + -1.61505595641653e-06,-0.00367586423816602,0.181683260968794,-0.357839690755832, + -1.62279630350204e-06,-0.00354274944084199,0.190785671686858,-0.385792875463833, + -1.63053665125368e-06,-0.00340963464351884,0.199888082404921,-0.413746060171833, + -1.63827699861674e-06,-0.0032765198461957,0.208990493122984,-0.441699244879833, + -1.64601734586878e-06,-0.00314340504887145,0.218092903841048,-0.469652429587833, + -1.65375769334286e-06,-0.00301029025154831,0.227195314559111,-0.497605614295834, + -1.66149804081694e-06,-0.00287717545422472,0.236297725277174,-0.525558799003834, + -1.66923838840205e-06,-0.00274406065690158,0.245400135995237,-0.553511983711834, + -1.67697873554307e-06,-0.002610945859578,0.2545025467133,-0.581465168419835, + -1.68471908268408e-06,-0.00247783106225441,0.263604957431364,-0.609418353127835, + -1.69245943026919e-06,-0.00234471626493082,0.272707368149427,-0.637371537835835, + -1.70019977785429e-06,-0.00221160146760724,0.281809778867491,-0.665324722543835, + -1.70794012566144e-06,-0.00207848667028498,0.290912189585553,-0.693277907251836, + -1.71568047235837e-06,-0.00194537187296007,0.300014600303617,-0.721231091959836, + -1.72342081961041e-06,-0.00181225707563692,0.30911701102168,-0.749184276667836, + -1.73116116708449e-06,-0.00167914227831378,0.318219421739743,-0.777137461375836, + -1.73890151422551e-06,-0.00154602748098931,0.327321832457807,-0.805090646083837, + -1.1169632548047e-06,-0.00471591413422234,0.108712239322846,-0.1343352819284, + -1.121941169413e-06,-0.00458821119745223,0.117774141990799,-0.16231281927477, + -1.12691908421558e-06,-0.00446050826068234,0.126836044658752,-0.19029035662114, + -1.13189699885163e-06,-0.00433280532391223,0.135897947326706,-0.218267893967511, + -1.13687491370973e-06,-0.00420510238714211,0.144959849994659,-0.246245431313881, + -1.14185282829027e-06,-0.004077399450372,0.154021752662612,-0.274222968660251, + -1.14683074303734e-06,-0.00394969651360211,0.163083655330565,-0.302200506006622, + -1.15180865795095e-06,-0.00382199357683199,0.172145557998518,-0.330178043352992, + -1.15678657253149e-06,-0.00369429064006188,0.181207460666472,-0.358155580699362, + -1.16176448744509e-06,-0.00356658770329221,0.190269363334425,-0.386133118045733, + -1.16674240202563e-06,-0.00343888476652188,0.199331266002378,-0.414110655392103, + -1.17172031710577e-06,-0.00331118182975199,0.208393168670331,-0.442088192738473, + -1.17669823140876e-06,-0.00318347889298121,0.217455071338285,-0.470065730084843, + -1.18167614615583e-06,-0.00305577595621154,0.226516974006237,-0.498043267431214, + -1.18665406068086e-06,-0.00292807301944142,0.23557887667419,-0.526020804777584, + -1.19163197520589e-06,-0.00280037008267087,0.244640779342144,-0.553998342123954, + -1.19660989028603e-06,-0.0026726671459012,0.253702682010097,-0.581975879470325, + -1.20158780514412e-06,-0.00254496420913153,0.26276458467805,-0.609953416816695, + -1.20656572011324e-06,-0.00241726127236142,0.271826487346003,-0.637930954163065, + -1.21154363419418e-06,-0.00228955833559086,0.280888390013956,-0.665908491509436, + -1.21652154938534e-06,-0.00216185539882119,0.28995029268191,-0.693886028855806, + -1.22149946402139e-06,-0.00203415246205108,0.299012195349863,-0.721863566202176, + -1.22647737854642e-06,-0.00190644952528052,0.308074098017816,-0.749841103548547, + -1.23145529307145e-06,-0.0017787465885104,0.317136000685769,-0.777818640894917, + -1.23643320815159e-06,-0.00165104365174118,0.326197903353722,-0.805796178241287, + -7.83414222345902e-05,-0.0116289112638718,0.141662584592908,-0.120891389200109, + -8.39283406746938e-05,-0.0109598102246087,0.157160732718559,-0.143991459763914, + -8.95152591147141e-05,-0.0102907091853457,0.17265888084421,-0.167091530327719, + -9.51021775547067e-05,-0.00962160814608259,0.188157028969861,-0.190191600891524, + -0.000100689095994588,-0.00895250710681939,0.203655177095512,-0.213291671455329, + -0.000106276014434692,-0.00828340606755651,0.219153325221162,-0.236391742019134, + -0.000111862932874962,-0.00761430502829374,0.234651473346813,-0.259491812582939, + -0.000117449851314677,-0.00694520398903031,0.250149621472464,-0.282591883146744, + -0.000123036769755003,-0.00627610294976755,0.265647769598115,-0.305691953710549, + -0.000128623688194773,-0.00560700191050412,0.281145917723766,-0.328792024274354, + -0.000134210606634488,-0.00493790087124046,0.296644065849417,-0.351892094838159, + -0.000139797525074647,-0.00426879983197748,0.312142213975068,-0.374992165401964, + -0.000145384443514751,-0.00359969879271449,0.327640362100719,-0.398092235965769, + -0.000150971361955077,-0.00293059775345195,0.34313851022637,-0.421192306529575, + -0.000156558280394958,-0.00226149671418896,0.358636658352021,-0.44429237709338, + -0.000162145198835062,-0.00159239567492575,0.374134806477672,-0.467392447657185, + -0.000167732117275166,-0.000923294635662764,0.389632954603323,-0.49049251822099, + -0.000173319035714825,-0.00025419359639911,0.405131102728974,-0.513592588784795, + -0.00017890595415504,0.000414907442863433,0.420629250854625,-0.5366926593486, + -0.000184492872595365,0.0010840084821262,0.436127398980275,-0.559792729912405, + -0.00019007979103558,0.00175310952138918,0.451625547105926,-0.58289280047621, + -0.00019566670947524,0.00242221056065306,0.467123695231578,-0.605992871040015, + -0.000201253627915454,0.0030913115999156,0.482621843357228,-0.62909294160382, + -0.000206840546355225,0.00376041263917903,0.498119991482879,-0.652193012167625, + -0.000212427464795661,0.00442951367844158,0.51361813960853,-0.67529308273143, + -7.76990489378682e-05,-0.0115458433149976,0.141457128654798,-0.121108633483948, + -8.32042916177889e-05,-0.0108778664364927,0.156901322561119,-0.144248658146241, + -8.87095342972932e-05,-0.0102098895579871,0.172345516467441,-0.167388682808533, + -9.42147769772417e-05,-0.00954191267948201,0.187789710373762,-0.190528707470825, + -9.97200196568016e-05,-0.00887393580097673,0.203233904280083,-0.213668732133118, + -0.000105225262336306,-0.00820595892247145,0.218678098186404,-0.23680875679541, + -0.00011073050501631,-0.00753798204396627,0.234122292092726,-0.259948781457702, + -0.000116235747695925,-0.00687000516546088,0.249566485999047,-0.283088806119995, + -0.000121740990375485,-0.00620202828695549,0.265010679905369,-0.306228830782287, + -0.000127246233055045,-0.00553405140845031,0.28045487381169,-0.329368855444579, + -0.000132751475734882,-0.00486607452994514,0.295899067718011,-0.352508880106872, + -0.000138256718414831,-0.00419809765144019,0.311343261624332,-0.375648904769164, + -0.000143761961094335,-0.0035301207729348,0.326787455530654,-0.398788929431456, + -0.000149267203773618,-0.00286214389442874,0.342231649436975,-0.421928954093749, + -0.000154772446453899,-0.00219416701592423,0.357675843343296,-0.445068978756041, + -0.000160277689133403,-0.00152619013741884,0.373120037249618,-0.468209003418333, + -0.000165782931813463,-0.000858213258914331,0.388564231155939,-0.491349028080626, + -0.000171288174493189,-0.000190236380408715,0.40400842506226,-0.514489052742918, + -0.000176793417172361,0.000477740498097567,0.419452618968582,-0.53762907740521, + -0.00018229865985242,0.0011457173766023,0.434896812874903,-0.560769102067503, + -0.000187803902531813,0.00181369425510791,0.450341006781225,-0.583909126729795, + -0.000193309145211762,0.00248167113361264,0.465785200687546,-0.607049151392087, + -0.000198814387891377,0.00314964801211826,0.481229394593867,-0.630189176054379, + -0.000204319630571437,0.0038176248906221,0.496673588500188,-0.653329200716672, + -0.000209824873250497,0.00448560176912904,0.51211778240651,-0.676469225378964, + -7.68175610340871e-05,-0.0114326568479056,0.141174780546538,-0.121406109441676, + -8.22115473388119e-05,-0.010766331768774,0.156544907596779,-0.144600843868951, + -8.76055336435644e-05,-0.0101000066896424,0.17191503464702,-0.167795578296226, + -9.29995199482891e-05,-0.00943368161051072,0.187285161697261,-0.190990312723501, + -9.83935062529584e-05,-0.00876735653137894,0.202655288747502,-0.214185047150775, + -0.000103787492557905,-0.00810103145224761,0.218025415797743,-0.23737978157805, + -0.000109181478862685,-0.00743470637311616,0.233395542847984,-0.260574516005325, + -0.000114575465167299,-0.00676838129398427,0.248765669898226,-0.2837692504326, + -0.000119969451471913,-0.0061020562148526,0.264135796948467,-0.306963984859875, + -0.000125363437776804,-0.00543573113572116,0.279505923998708,-0.330158719287149, + -0.000130757424081807,-0.00476940605659015,0.294876051048948,-0.353353453714424, + -0.000136151410386254,-0.00410308097745804,0.31024617809919,-0.376548188141699, + -0.000141545396690979,-0.00343675589832637,0.325616305149431,-0.399742922568974, + -0.000146939382995703,-0.00277043081919448,0.340986432199672,-0.422937656996249, + -0.000152333369300539,-0.00210410574006326,0.356356559249913,-0.446132391423524, + -0.000157727355605375,-0.00143778066093181,0.371726686300154,-0.469327125850798, + -0.000163121341910211,-0.00077145558180014,0.387096813350395,-0.492521860278073, + -0.000168515328215157,-0.000105130502668471,0.402466940400637,-0.515716594705348, + -0.00017390931451966,0.000561194576463198,0.417837067450878,-0.538911329132623, + -0.000179303300824163,0.00122751965559464,0.433207194501118,-0.562106063559898, + -0.000184697287129332,0.00189384473472609,0.448577321551359,-0.585300797987172, + -0.000190091273433723,0.00256016981385798,0.463947448601601,-0.608495532414447, + -0.000195485259738781,0.00322649489298943,0.479317575651842,-0.631690266841722, + -0.000200879246043284,0.00389281997212132,0.494687702702083,-0.654885001268997, + -0.000206273232348009,0.00455914505125321,0.510057829752324,-0.678079735696272, + -7.56168926999978e-05,-0.011279968639008,0.140789429704878,-0.121810129195623, + -8.08608735217153e-05,-0.0106160952802743,0.15605861693504,-0.145079168201847, + -8.61048543434606e-05,-0.00995222192154066,0.171327804165203,-0.168348207208072, + -9.13488351651504e-05,-0.00928834856280691,0.186596991395366,-0.191617246214297, + -9.65928159866736e-05,-0.00862447520407306,0.201866178625529,-0.214886285220522, + -0.000101836796808419,-0.00796060184533942,0.217135365855692,-0.238155324226746, + -0.000107080777629887,-0.00729672848660523,0.232404553085855,-0.261424363232971, + -0.000112324758451576,-0.00663285512787182,0.247673740316018,-0.284693402239196, + -0.000117568739273433,-0.0059689817691384,0.262942927546181,-0.307962441245421, + -0.000122812720095233,-0.00530510841040477,0.278212114776344,-0.331231480251646, + -0.000128056700916812,-0.00464123505167069,0.293481302006507,-0.35450051925787, + -0.000133300681738557,-0.00397736169293683,0.30875048923667,-0.377769558264095, + -0.000138544662560136,-0.0033134883342032,0.324019676466833,-0.40103859727032, + -0.000143788643382048,-0.00264961497546978,0.339288863696996,-0.424307636276545, + -0.000149032624203405,-0.00198574161673548,0.354558050927159,-0.44757667528277, + -0.000154276605025094,-0.00132186825800229,0.369827238157321,-0.470845714288995, + -0.000159520585847117,-0.000657994899268433,0.385096425387485,-0.494114753295219, + -0.000164764566668807,5.87845946498078e-06,0.400365612617647,-0.517383792301444, + -0.000170008547490497,0.000669751818198616,0.41563479984781,-0.540652831307669, + -0.000175252528312075,0.0013336251769327,0.430903987077973,-0.563921870313894, + -0.000180496509133099,0.00199749853566722,0.446173174308137,-0.587190909320118, + -0.000185740489955455,0.00266137189439997,0.461442361538299,-0.610459948326343, + -0.000190984470776923,0.00332524525313405,0.476711548768462,-0.633728987332568, + -0.000196228451598501,0.00398911861186768,0.491980735998625,-0.656998026338793, + -0.000201472432420524,0.00465299197060132,0.507249923228788,-0.680267065345017, + -7.39979141961555e-05,-0.0110767637999118,0.140268433623546,-0.122352798324143, + -7.9042448202532e-05,-0.0104165614610069,0.155401415260391,-0.145721641363983, + -8.4086982208631e-05,-0.00975635912210149,0.170534396897237,-0.169090484403822, + -8.91315162152573e-05,-0.00909615678319675,0.185667378534082,-0.192459327443662, + -9.4176050221495e-05,-0.00843595444429157,0.200800360170928,-0.215828170483502, + -9.92205842277882e-05,-0.00777575210538639,0.215933341807773,-0.239197013523341, + -0.000104265118234192,-0.00711554976648143,0.231066323444619,-0.262565856563181, + -0.000109309652240597,-0.00645534742757659,0.246199305081464,-0.28593469960302, + -0.000114354186246668,-0.00579514508867085,0.26133228671831,-0.30930354264286, + -0.000119398720253128,-0.005134942749766,0.276465268355156,-0.332672385682699, + -0.000124443254259476,-0.00447474041086093,0.291598249992001,-0.356041228722539, + -0.000129487788265714,-0.00381453807195586,0.306731231628846,-0.379410071762378, + -0.000134532322272118,-0.00315433573305079,0.321864213265692,-0.402778914802218, + -0.000139576856278745,-0.00249413339414595,0.336997194902537,-0.426147757842057, + -0.00014462139028526,-0.00183393105524154,0.352130176539383,-0.449516600881897, + -0.000149665924291109,-0.00117372871633559,0.367263158176228,-0.472885443921737, + -0.000154710458297846,-0.000513526377431184,0.382396139813074,-0.496254286961576, + -0.000159754992303918,0.000146675961474108,0.397529121449919,-0.519623130001416, + -0.0001647995263101,0.000806878300379399,0.412662103086765,-0.542991973041255, + -0.000169844060316393,0.00146708063928491,0.427795084723611,-0.566360816081095, + -0.000174888594323241,0.00212728297818909,0.442928066360456,-0.589729659120934, + -0.000179933128329313,0.00278748531709461,0.458061047997301,-0.613098502160774, + -0.000184977662335606,0.00344768765599968,0.473194029634147,-0.636467345200613, + -0.000190022196341788,0.00410788999490519,0.488327011270993,-0.659836188240453, + -0.000195066730348414,0.00476809233380981,0.503459992907838,-0.683205031280293, + -7.18444281493369e-05,-0.0108111761873713,0.139572979280439,-0.123070936765675, + -7.66287251092457e-05,-0.0101564987311539,0.154524611041197,-0.146571854967693, + -8.14130220691545e-05,-0.00950182127493626,0.169476242801955,-0.170072773169711, + -8.61973190288134e-05,-0.00884714381871832,0.184427874562713,-0.193573691371729, + -9.09816159885835e-05,-0.00819246636250082,0.199379506323472,-0.217074609573747, + -9.57659129484645e-05,-0.0075377889062832,0.21433113808423,-0.240575527775765, + -0.000100550209908123,-0.00688311145006515,0.229282769844989,-0.264076445977783, + -0.000105334506867838,-0.00622843399384765,0.244234401605747,-0.287577364179801, + -0.000110118803827775,-0.00557375653763015,0.259186033366505,-0.311078282381819, + -0.000114903100787545,-0.00491907908141243,0.274137665127263,-0.334579200583837, + -0.00011968739774737,-0.00426440162519492,0.289089296888022,-0.358080118785855, + -0.000124471694707418,-0.00360972416897787,0.304040928648779,-0.381581036987873, + -0.000129255991667243,-0.00295504671276015,0.318992560409538,-0.405081955189891, + -0.000134040288626625,-0.00230036925654198,0.333944192170296,-0.428582873391909, + -0.000138824585586783,-0.0016456918003247,0.348895823931055,-0.452083791593927, + -0.000143608882546498,-0.000991014344106977,0.363847455691813,-0.475584709795945, + -0.000148393179506434,-0.000336336887889921,0.378799087452571,-0.499085627997963, + -0.000153177476465927,0.000318340568328024,0.393750719213329,-0.522586546199981, + -0.000157961773425641,0.000973018024546191,0.408702350974088,-0.546087464401999, + -0.000162746070385467,0.00162769548076369,0.423653982734846,-0.569588382604017, + -0.000167530367345181,0.00228237293698141,0.438605614495604,-0.593089300806035, + -0.000172314664304896,0.00293705039319914,0.453557246256363,-0.616590219008053, + -0.000177098961265387,0.00359172784941597,0.468508878017121,-0.640091137210071, + -0.00018188325822488,0.00424640530563369,0.483460509777879,-0.663592055412089, + -0.000186667555184261,0.0049010827618523,0.498412141538638,-0.687092973614107, + -6.90314003069792e-05,-0.0104722002027698,0.138660364701854,-0.12400280290648, + -7.34845469011758e-05,-0.00982582607415372,0.153374801509756,-0.147675103622728, + -7.79376934958442e-05,-0.00917945194553793,0.168089238317658,-0.171347404338977, + -8.23908400900408e-05,-0.00853307781692147,0.18280367512556,-0.195019705055226, + -8.68439866842374e-05,-0.00788670368830502,0.197518111933462,-0.218692005771475, + -9.12971332787116e-05,-0.00724032955968901,0.212232548741364,-0.242364306487724, + -9.57502798729082e-05,-0.00659395543107255,0.226946985549266,-0.266036607203973, + -0.000100203426467271,-0.00594758130245654,0.241661422357168,-0.289708907920222, + -0.000104656573061634,-0.00530120717384031,0.25637585916507,-0.31338120863647, + -0.000109109719655998,-0.00465483304522429,0.271090295972972,-0.337053509352719, + -0.000113562866250083,-0.00400845891660806,0.285804732780874,-0.360725810068968, + -0.000118016012845112,-0.00336208478799249,0.300519169588776,-0.384398110785217, + -0.000122469159439254,-0.00271571065937581,0.315233606396678,-0.408070411501466, + -0.000126922306033284,-0.0020693365307598,0.329948043204579,-0.431742712217715, + -0.000131375452627314,-0.00142296240214268,0.344662480012482,-0.455415012933963, + -0.000135828599222121,-0.000776588273527334,0.359376916820384,-0.479087313650212, + -0.000140281745816262,-0.000130214144910878,0.374091353628285,-0.502759614366461, + -0.000144734892410292,0.0005161599837058,0.388805790436188,-0.52643191508271, + -0.000149188039004544,0.00116253411232203,0.40352022724409,-0.550104215798959, + -0.000153641185599573,0.00180890824093716,0.418234664051991,-0.573776516515208, + -0.000158094332193714,0.00245528236955384,0.432949100859893,-0.597448817231456, + -0.000162547478788189,0.00310165649816962,0.447663537667795,-0.621121117947705, + -0.000167000625382552,0.00374803062678586,0.462377974475697,-0.644793418663954, + -0.000171453771976915,0.00439440475540209,0.477092411283599,-0.668465719380203, + -0.000175906918571167,0.00504077888401788,0.491806848091501,-0.692138020096452, + -6.54427559836912e-05,-0.0100525494061992,0.137489370775112,-0.125181671037007, + -6.94881053941165e-05,-0.00941851850435549,0.151900710412697,-0.149070781201855, + -7.35334548044864e-05,-0.00878448760251183,0.166312050050283,-0.172959891366703, + -7.75788042147729e-05,-0.00815045670066783,0.180723389687868,-0.196849001531552, + -8.1624153625004e-05,-0.00751642579882406,0.195134729325454,-0.2207381116964, + -8.5669503035235e-05,-0.00688239489698028,0.209546068963039,-0.244627221861248, + -8.97148524458546e-05,-0.00624836399513673,0.223957408600625,-0.268516332026096, + -9.37602018560302e-05,-0.00561433309329273,0.23836874823821,-0.292405442190945, + -9.78055512662612e-05,-0.00498030219144896,0.252780087875795,-0.316294552355793, + -0.000101850900676825,-0.00434627128960541,0.267191427513381,-0.340183662520641, + -0.00010589625008689,-0.00371224038776119,0.281602767150966,-0.364072772685489, + -0.000109941599497287,-0.00307820948591742,0.296014106788552,-0.387961882850338, + -0.000113986948907407,-0.0024441785840732,0.310425446426138,-0.411850993015186, + -0.000118032298318083,-0.00181014768222987,0.324836786063723,-0.435740103180034, + -0.000122077647728536,-0.00117611678038654,0.339248125701308,-0.459629213344882, + -0.000126122997138767,-0.000542085878542098,0.353659465338894,-0.483518323509731, + -0.000130168346549442,9.19450233007879e-05,0.368070804976479,-0.507407433674579, + -0.000134213695959118,0.00072597592514545,0.382482144614065,-0.531296543839427, + -0.000138259045369793,0.001360006826989,0.39689348425165,-0.555185654004275, + -0.000142304394780024,0.00199403772883233,0.411304823889235,-0.579074764169124, + -0.000146349744190699,0.00262806863067588,0.425716163526821,-0.602963874333972, + -0.00015039509360093,0.00326209953251988,0.440127503164406,-0.62685298449882, + -0.000154440443011494,0.00389613043436299,0.454538842801991,-0.650742094663668, + -0.000158485792421281,0.00453016133620832,0.468950182439578,-0.674631204828516, + -0.000162531141831401,0.00516419223805231,0.483361522077163,-0.698520314993365, + -6.10006916742234e-05,-0.00955241818104746,0.136029599275224,-0.126625996462491, + -6.45644653196609e-05,-0.00893631688648289,0.150064975374546,-0.15078073718515, + -6.81282389652926e-05,-0.00832021559191864,0.164100351473868,-0.174935477907808, + -7.16920126107579e-05,-0.00770411429735429,0.17813572757319,-0.199090218630467, + -7.52557862562231e-05,-0.00708801300278983,0.192171103672513,-0.223244959353126, + -7.88195599014663e-05,-0.00647191170822492,0.206206479771835,-0.247399700075785, + -8.23833335472646e-05,-0.00585581041366079,0.220241855871157,-0.271554440798444, + -8.59471071922857e-05,-0.00523970911909566,0.23427723197048,-0.295709181521103, + -8.9510880837973e-05,-0.00462360782453164,0.248312608069802,-0.319863922243762, + -9.30746544831051e-05,-0.00400750652996651,0.262347984169125,-0.344018662966421, + -9.66384281291255e-05,-0.00339140523540271,0.276383360268447,-0.36817340368908, + -0.00010020220177398,-0.00277530394083758,0.290418736367769,-0.392328144411739, + -0.000103765975419834,-0.00215920264627356,0.304454112467091,-0.416482885134398, + -0.000107329749065022,-0.00154310135170888,0.318489488566414,-0.440637625857057, + -0.000110893522710542,-0.000927000057144189,0.332524864665736,-0.464792366579716, + -0.000114457296356285,-0.000310898762580392,0.346560240765058,-0.488947107302375, + -0.000118021070001584,0.000305202531984516,0.36059561686438,-0.513101848025034, + -0.000121584843646771,0.00092130382654898,0.374630992963702,-0.537256588747693, + -0.000125148617292625,0.00153740512111322,0.388666369063025,-0.561411329470351, + -0.000128712390937147,0.00215350641567902,0.402701745162347,-0.58556607019301, + -0.00013227616458289,0.00276960771024282,0.416737121261669,-0.609720810915669, + -0.000135839938228743,0.0033857090048075,0.430772497360992,-0.633875551638328, + -0.000139403711874597,0.0040018102993713,0.444807873460314,-0.658030292360987, + -0.000142967485519341,0.00461791159393732,0.458843249559637,-0.682185033083646, + -0.000146531259164751,0.00523401288850156,0.472878625658959,-0.706339773806305, + -5.5703650192529e-05,-0.0089830523772978,0.134274251811519,-0.128327688174916, + -5.87275555902489e-05,-0.00839205339918936,0.147860149854505,-0.152795392521159, + -6.17514609882464e-05,-0.00780105442108114,0.161446047897492,-0.177263096867402, + -6.47753663862716e-05,-0.00721005544297315,0.175031945940478,-0.201730801213645, + -6.77992717841303e-05,-0.00661905646486483,0.188617843983464,-0.226198505559887, + -7.08231771822665e-05,-0.00602805748675694,0.202203742026451,-0.25066620990613, + -7.38470825800697e-05,-0.00543705850864851,0.215789640069437,-0.275133914252372, + -7.68709879779839e-05,-0.0048460595305404,0.229375538112424,-0.299601618598615, + -7.98948933761201e-05,-0.0042550605524323,0.24296143615541,-0.324069322944858, + -8.29187987739788e-05,-0.0036640615743242,0.256547334198396,-0.348537027291101, + -8.5942704172004e-05,-0.00307306259621587,0.270133232241383,-0.373004731637343, + -8.89666095700292e-05,-0.00248206361810821,0.283719130284369,-0.397472435983586, + -9.19905149677769e-05,-0.00189106463999944,0.297305028327356,-0.421940140329828, + -9.50144203657466e-05,-0.00130006566189156,0.310890926370342,-0.446407844676071, + -9.80383257632722e-05,-0.000709066683782344,0.324476824413329,-0.470875549022314, + -0.000101062231161464,-0.000118067705674907,0.338062722456315,-0.495343253368556, + -0.000104086136559878,0.000472931272432753,0.351648620499301,-0.519810957714799, + -0.000107110041957181,0.00106393025054174,0.365234518542288,-0.544278662061042, + -0.000110133947355151,0.00165492922865007,0.378820416585274,-0.568746366407284, + -0.000113157852753343,0.00224592820675795,0.392406314628261,-0.593214070753527, + -0.000116181758151424,0.00283692718486561,0.405992212671247,-0.61768177509977, + -0.00011920566354906,0.0034279261629746,0.419578110714234,-0.642149479446012, + -0.000122229568947252,0.00401892514108226,0.43316400875722,-0.666617183792255, + -0.000125253474345,0.00460992411919081,0.446749906800206,-0.691084888138498, + -0.000128277379742858,0.00520092309729936,0.460335804843193,-0.71555259248474, + -4.96617395167875e-05,-0.00836817782865384,0.132253064403274,-0.130242626607584, + -5.21170075100941e-05,-0.00781059006857521,0.14532472226681,-0.155062513471054, + -5.45722755033728e-05,-0.0072530023084969,0.158396380130346,-0.179882400334524, + -5.70275434969014e-05,-0.00669541454841849,0.171468037993881,-0.204702287197994, + -5.94828114901524e-05,-0.00613782678833974,0.184539695857417,-0.229522174061464, + -6.19380794834035e-05,-0.00558023902826121,0.197611353720953,-0.254342060924934, + -6.4393347476599e-05,-0.00502265126818258,0.210683011584489,-0.279161947788404, + -6.68486154701831e-05,-0.00446506350810427,0.223754669448024,-0.303981834651874, + -6.93038834631565e-05,-0.00390747574802552,0.23682632731156,-0.328801721515344, + -7.17591514568516e-05,-0.00334988798794744,0.249897985175096,-0.353621608378814, + -7.42144194501582e-05,-0.00279230022786892,0.262969643038631,-0.378441495242285, + -7.66696874434647e-05,-0.00223471246779017,0.276041300902167,-0.403261382105755, + -7.91249554369378e-05,-0.00167712470771209,0.289112958765703,-0.428081268969225, + -8.15802234301888e-05,-0.00111953694763356,0.302184616629239,-0.452901155832695, + -8.40354914234398e-05,-0.000561949187554811,0.315256274492774,-0.477721042696165, + -8.64907594170239e-05,-4.36142747672896e-06,0.32832793235631,-0.502540929559635, + -8.89460274100529e-05,0.000553226332601797,0.341399590219845,-0.527360816423105, + -9.14012954035259e-05,0.00111081409268077,0.354471248083382,-0.552180703286575, + -9.385656339711e-05,0.00166840185275863,0.367542905946917,-0.577000590150046, + -9.63118313906941e-05,0.00222598961283715,0.380614563810453,-0.601820477013516, + -9.87670993839451e-05,0.00278357737291524,0.393686221673988,-0.626640363876986, + -0.00010122236737653,0.00334116513299509,0.406757879537525,-0.651460250740456, + -0.000103677635370003,0.00389875289307318,0.41982953740106,-0.676280137603926, + -0.000106132903363476,0.0044563406531517,0.432901195264596,-0.701100024467396, + -0.000108588171356838,0.00501392841322978,0.445972853128131,-0.725919911330866, + -4.31106498472444e-05,-0.00774140441284921,0.130039117898095,-0.132289312478137, + -4.50083614302044e-05,-0.00722559384707899,0.142551279483455,-0.157485611956012, + -4.69060730135529e-05,-0.00670978328130956,0.155063441068814,-0.182681911433887, + -4.88037845968181e-05,-0.00619397271553979,0.167575602654174,-0.207878210911763, + -5.07014961800833e-05,-0.00567816214977002,0.180087764239534,-0.233074510389638, + -5.25992077629045e-05,-0.00516235158399958,0.192599925824894,-0.258270809867513, + -5.44969193461142e-05,-0.00464654101823014,0.205112087410254,-0.283467109345389, + -5.63946309291019e-05,-0.0041307304524596,0.217624248995614,-0.308663408823264, + -5.82923425126447e-05,-0.0036149198866906,0.230136410580973,-0.333859708301139, + -6.01900540958544e-05,-0.0030991093209205,0.242648572166333,-0.359056007779015, + -6.20877656791197e-05,-0.00258329875515106,0.255160733751693,-0.38425230725689, + -6.39854772621629e-05,-0.00206748818938096,0.267672895337053,-0.409448606734765, + -6.58831888453726e-05,-0.0015516776236113,0.280185056922412,-0.434644906212641, + -6.77809004285823e-05,-0.00103586705784142,0.292697218507772,-0.459841205690516, + -6.967861201157e-05,-0.000520056492071319,0.305209380093132,-0.485037505168391, + -7.15763235950018e-05,-4.24592630188236e-06,0.317721541678492,-0.510233804646267, + -7.34740351782115e-05,0.000511564639467998,0.330233703263851,-0.535430104124142, + -7.53717467607551e-05,0.00102737520523877,0.342745864849211,-0.560626403602018, + -7.72694583445199e-05,0.00154318577100776,0.355258026434571,-0.585822703079893, + -7.91671699273966e-05,0.00205899633677742,0.36777018801993,-0.611019002557768, + -8.10648815107173e-05,0.00257480690254752,0.380282349605291,-0.636215302035643, + -8.29625930941491e-05,0.00309061746831718,0.39279451119065,-0.661411601513519, + -8.48603046766927e-05,0.00360642803408773,0.40530667277601,-0.686607900991394, + -8.67580162601245e-05,0.00412223859985694,0.41781883436137,-0.71180420046927, + -8.86557278433342e-05,0.00463804916562705,0.43033099594673,-0.737000499947145, + -3.63868331456629e-05,-0.00713947377690205,0.127742968489222,-0.134359797139464, + -3.77790412184609e-05,-0.00667232986491384,0.139678744397291,-0.159936886144286, + -3.91712492913698e-05,-0.00620518595292563,0.15161452030536,-0.185513975149108, + -4.05634573641955e-05,-0.00573804204093731,0.163550296213429,-0.21109106415393, + -4.19556654374653e-05,-0.00527089812894943,0.175486072121498,-0.236668153158752, + -4.33478735101245e-05,-0.00480375421696089,0.187421848029568,-0.262245242163574, + -4.47400815835053e-05,-0.00433661030497334,0.199357623937637,-0.287822331168396, + -4.61322896562755e-05,-0.00386946639298502,0.211293399845706,-0.313399420173218, + -4.75244977292677e-05,-0.00340232248099692,0.223229175753775,-0.33897650917804, + -4.89167058019824e-05,-0.00293517856900838,0.235164951661845,-0.364553598182862, + -5.03089138752522e-05,-0.0024680346570205,0.247100727569914,-0.390130687187684, + -5.17011219481889e-05,-0.00200089074503262,0.259036503477983,-0.415707776192506, + -5.30933300211256e-05,-0.00153374683304408,0.270972279386053,-0.441284865197328, + -5.44855380941733e-05,-0.0010666029210562,0.282908055294122,-0.46686195420215, + -5.58777461671101e-05,-0.000599459009068326,0.294843831202191,-0.492439043206972, + -5.72699542398247e-05,-0.000132315097079561,0.30677960711026,-0.518016132211794, + -5.86621623130945e-05,0.000334828814908095,0.318715383018329,-0.543593221216616, + -6.00543703859202e-05,0.000801972726896416,0.330651158926399,-0.569170310221438, + -6.1446578459079e-05,0.00126911663888407,0.342586934834467,-0.59474739922626, + -6.28387865322377e-05,0.00173626055087217,0.354522710742537,-0.620324488231082, + -6.42309946051745e-05,0.00220340446286027,0.366458486650606,-0.645901577235904, + -6.56232026785553e-05,0.00267054837484748,0.378394262558675,-0.671478666240726, + -6.70154107510479e-05,0.00313769228683647,0.390330038466744,-0.697055755245548, + -6.84076188239846e-05,0.00360483619882501,0.402265814374814,-0.72263284425037, + -6.97998268970323e-05,0.00407198011081267,0.414201590282883,-0.748209933255191, + -2.98635966270167e-05,-0.0065938869575296,0.125492570526292,-0.136341083487356, + -3.08332553230206e-05,-0.00617936697725818,0.136867013534308,-0.162282557268965, + -3.18029140187748e-05,-0.00576484699698687,0.148241456542323,-0.188224031050575, + -3.27725727150008e-05,-0.00535032701671589,0.159615899550339,-0.214165504832184, + -3.37422314108382e-05,-0.00493580703644436,0.170990342558355,-0.240106978613793, + -3.47118901066756e-05,-0.00452128705617283,0.182364785566371,-0.266048452395403, + -3.56815488028461e-05,-0.00410676707590207,0.193739228574386,-0.291989926177012, + -3.66512074982395e-05,-0.00369224709562976,0.205113671582402,-0.317931399958621, + -3.76208661945765e-05,-0.00327772711535901,0.216488114590418,-0.343872873740231, + -3.85905248906915e-05,-0.00286320713508803,0.227862557598434,-0.36981434752184, + -3.95601835864179e-05,-0.00244868715481639,0.239237000606449,-0.395755821303449, + -4.05298422825329e-05,-0.00203416717454519,0.250611443614465,-0.421697295085058, + -4.14995009785368e-05,-0.00161964719427399,0.261985886622481,-0.447638768866668, + -4.24691596747628e-05,-0.00120512721400279,0.273360329630497,-0.473580242648277, + -4.34388183704337e-05,-0.00079060723373181,0.284734772638512,-0.499521716429886, + -4.44084770662156e-05,-0.000376087253459501,0.296109215646529,-0.525463190211496, + -4.53781357624417e-05,3.84327268108109e-05,0.307483658654544,-0.551404663993105, + -4.63477944582236e-05,0.000452952707082455,0.31885810166256,-0.577346137774714, + -4.73174531544496e-05,0.000867472687353654,0.330232544670576,-0.603287611556324, + -4.82871118500094e-05,0.00128199266762508,0.341606987678591,-0.629229085337933, + -4.92567705456803e-05,0.00169651264789694,0.352981430686607,-0.655170559119542, + -5.02264292421284e-05,0.00211103262816748,0.364355873694623,-0.681112032901152, + -5.11960879381324e-05,0.00252555260843934,0.375730316702639,-0.707053506682761, + -5.21657466340253e-05,0.00294007258871032,0.387104759710655,-0.73299498046437, + -5.31354053298072e-05,0.00335459256898218,0.398479202718671,-0.75893645424598, + -2.38714405217944e-05,-0.00612474157325127,0.12340583332653,-0.138138670353154, + -2.45149233846498e-05,-0.00576310787245682,0.134262714435169,-0.164410744145986, + -2.51584062475607e-05,-0.00540147417166226,0.145119595543808,-0.190682817938819, + -2.58018891103884e-05,-0.00503984047086781,0.155976476652448,-0.216954891731652, + -2.64453719731605e-05,-0.00467820677007325,0.166833357761087,-0.243226965524484, + -2.70888548359327e-05,-0.00431657306927857,0.177690238869726,-0.269499039317317, + -2.77323376986494e-05,-0.0039549393684839,0.188547119978366,-0.295771113110149, + -2.8375820561477e-05,-0.00359330566768934,0.199404001087005,-0.322043186902982, + -2.90193034245267e-05,-0.00323167196689522,0.210260882195644,-0.348315260695815, + -2.96627862874654e-05,-0.00287003826610088,0.221117763304283,-0.374587334488647, + -3.03062691501821e-05,-0.00250840456530632,0.231974644412922,-0.40085940828148, + -3.09497520128987e-05,-0.00214677086451154,0.242831525521562,-0.427131482074312, + -3.15932348756709e-05,-0.00178513716371698,0.253688406630201,-0.453403555867145, + -3.2236717738332e-05,-0.00142350346292197,0.264545287738841,-0.479675629659977, + -3.28802006013262e-05,-0.00106186976212808,0.275402168847479,-0.50594770345281, + -3.35236834638764e-05,-0.000700236061333293,0.286259049956119,-0.532219777245643, + -3.41671663269816e-05,-0.000338602360539397,0.297115931064758,-0.558491851038475, + -3.48106491898648e-05,2.30313402553861e-05,0.307972812173397,-0.584763924831308, + -3.54541320526369e-05,0.000384665041049725,0.318829693282036,-0.61103599862414, + -3.60976149156311e-05,0.000746298741844509,0.329686574390676,-0.637308072416973, + -3.67410977779592e-05,0.00110793244263974,0.340543455499315,-0.663580146209806, + -3.73845806413975e-05,0.00146956614343319,0.351400336607954,-0.689852220002638, + -3.80280635043917e-05,0.00183119984422753,0.362257217716593,-0.716124293795471, + -3.86715463659426e-05,0.00219283354502364,0.373114098825233,-0.742396367588303, + -3.93150292291589e-05,0.00255446724581754,0.383970979933872,-0.768668441381136, + -1.86366938105809e-05,-0.00573912733790094,0.121567614308078,-0.139692465084808, + -1.90462613730846e-05,-0.00542716192069048,0.131970783245955,-0.166250302289411, + -1.94558289357549e-05,-0.00511519650348025,0.142373952183832,-0.192808139494014, + -1.9865396498453e-05,-0.00480323108627001,0.152777121121708,-0.219365976698617, + -2.0274964060929e-05,-0.00449126566905966,0.163180290059585,-0.24592381390322, + -2.0684531623516e-05,-0.00417930025184954,0.173583458997461,-0.272481651107823, + -2.1094099185881e-05,-0.00386733483463853,0.183986627935338,-0.299039488312425, + -2.1503666748357e-05,-0.00355536941742818,0.194389796873215,-0.325597325517028, + -2.19132343111106e-05,-0.00324340400021828,0.204792965811091,-0.352155162721631, + -2.23228018736976e-05,-0.00293143858300771,0.215196134748968,-0.378712999926234, + -2.27323694361736e-05,-0.00261947316579736,0.225599303686844,-0.405270837130837, + -2.31419369985941e-05,-0.00230750774858701,0.236002472624721,-0.43182867433544, + -2.35515045611256e-05,-0.00199554233137622,0.246405641562598,-0.458386511540042, + -2.39610721237682e-05,-0.00168357691416698,0.256808810500474,-0.484944348744645, + -2.43706396862997e-05,-0.00137161149695619,0.267211979438351,-0.511502185949248, + -2.47802072484982e-05,-0.00105964607974518,0.277615148376227,-0.538060023153851, + -2.51897748111407e-05,-0.000747680662535055,0.288018317314104,-0.564617860358454, + -2.55993423736722e-05,-0.000435715245324486,0.298421486251981,-0.591175697563057, + -2.60089099364258e-05,-0.000123749828114139,0.308824655189857,-0.617733534767659, + -2.64184774992904e-05,0.000188215589095542,0.319227824127734,-0.644291371972262, + -2.68280450617109e-05,0.000500181006305667,0.32963099306561,-0.670849209176865, + -2.72376126240204e-05,0.00081214642351668,0.340034162003487,-0.697407046381468, + -2.76471801867739e-05,0.0011241118407268,0.350437330941364,-0.723964883586071, + -2.80567477494165e-05,0.00143607725793737,0.36084049987924,-0.750522720790674, + -2.84663153122811e-05,0.0017480426751475,0.371243668817117,-0.777080557995277, + -1.4260055230586e-05,-0.00543356155125818,0.120019828200091,-0.140980278113756, + -1.45122872499681e-05,-0.00516554912953837,0.130042494802027,-0.167774961175394, + -1.47645192689616e-05,-0.0048975367078179,0.140065161403963,-0.194569644237031, + -1.50167512882882e-05,-0.00462952428609797,0.150087828005898,-0.221364327298668, + -1.52689833078923e-05,-0.00436151186437828,0.160110494607834,-0.248159010360306, + -1.55212153267748e-05,-0.0040934994426578,0.17013316120977,-0.274953693421943, + -1.57734473457127e-05,-0.00382548702093755,0.180155827811705,-0.30174837648358, + -1.60256793652613e-05,-0.00355747459921774,0.190178494413641,-0.328543059545217, + -1.62779113848099e-05,-0.00328946217749815,0.200201161015577,-0.355337742606855, + -1.653014340397e-05,-0.00302144975577789,0.210223827617513,-0.382132425668492, + -1.67823754227414e-05,-0.00275343733405742,0.220246494219448,-0.408927108730129, + -1.703460744229e-05,-0.00248542491233761,0.230269160821384,-0.435721791791767, + -1.7286839461228e-05,-0.00221741249061735,0.240291827423319,-0.462516474853404, + -1.75390714806101e-05,-0.00194940006889754,0.250314494025255,-0.489311157915041, + -1.77913034997701e-05,-0.00168138764717707,0.260337160627191,-0.516105840976678, + -1.80435355188191e-05,-0.00141337522545681,0.270359827229127,-0.542900524038316, + -1.82957675384232e-05,-0.00114536280373745,0.280382493831062,-0.569695207099953, + -1.85479995576943e-05,-0.000877350382017195,0.290405160432998,-0.59648989016159, + -1.88002315768543e-05,-0.000609337960297385,0.300427827034933,-0.623284573223228, + -1.90524635962364e-05,-0.000341325538577575,0.310450493636869,-0.650079256284865, + -1.93046956153964e-05,-7.33131168568768e-05,0.320473160238805,-0.676873939346502, + -1.95569276342233e-05,0.000194699304863377,0.330495826840741,-0.703668622408139, + -1.98091596533834e-05,0.000462711726583187,0.340518493442676,-0.730463305469777, + -2.00613916727654e-05,0.000730724148303885,0.350541160044612,-0.757257988531414, + -2.03136236925916e-05,0.000998736570022807,0.360563826646548,-0.784052671593051, + -1.07328730314382e-05,-0.00519819406153044,0.118765218956076,-0.142010988540715, + -1.08846820860431e-05,-0.00496718408670926,0.128480436889489,-0.168995232888765, + -1.1036491140648e-05,-0.00473617411188787,0.138195654822903,-0.195979477236816, + -1.11883001951973e-05,-0.0045051641370667,0.147910872756316,-0.222963721584867, + -1.13401092496357e-05,-0.00427415416224508,0.15762609068973,-0.249947965932917, + -1.14919183045181e-05,-0.00404314418742424,0.167341308623143,-0.276932210280968, + -1.16437273588454e-05,-0.00381213421260274,0.177056526556556,-0.303916454629019, + -1.17955364132283e-05,-0.00358112423778101,0.18677174448997,-0.330900698977069, + -1.19473454683883e-05,-0.00335011426296039,0.196486962423383,-0.35788494332512, + -1.20991545226046e-05,-0.00311910428813889,0.206202180356796,-0.384869187673171, + -1.22509635775425e-05,-0.00288809431331805,0.215917398290209,-0.411853432021221, + -1.24027726319254e-05,-0.00265708433849654,0.225632616223623,-0.438837676369272, + -1.25545816863637e-05,-0.00242607436367481,0.235347834157037,-0.465821920717322, + -1.27063907413572e-05,-0.0021950643888542,0.24506305209045,-0.492806165065373, + -1.28581997957955e-05,-0.00196405441403269,0.254778270023863,-0.519790409413424, + -1.30100088499008e-05,-0.00173304443921074,0.264493487957277,-0.546774653761474, + -1.31618179046722e-05,-0.0015020344643899,0.27420870589069,-0.573758898109525, + -1.33136269595546e-05,-0.00127102448956906,0.283923923824103,-0.600743142457575, + -1.3465436014215e-05,-0.00104001451474733,0.293639141757517,-0.627727386805626, + -1.36172450683203e-05,-0.000809004539925162,0.30335435969093,-0.654711631153677, + -1.37690541234248e-05,-0.000577994565105211,0.313069577624343,-0.681695875501727, + -1.39208631779741e-05,-0.000346984590283483,0.322784795557757,-0.708680119849778, + -1.40726722323015e-05,-0.0001159746154622,0.33250001349117,-0.735664364197829, + -1.42244812871839e-05,0.000115035359359084,0.342215231424584,-0.762648608545879, + -1.43762903414002e-05,0.000346045334179923,0.351930449357996,-0.78963285289393, + -7.97329846330408e-06,-0.0050206983726272,0.117779134256373,-0.142813096422442, + -8.06351369583846e-06,-0.00481960848891561,0.127253302217248,-0.169944859023851, + -8.15372892820632e-06,-0.00461851860520368,0.136727470178124,-0.197076621625259, + -8.24394416065743e-06,-0.00441742872149198,0.146201638138999,-0.224208384226668, + -8.33415939338611e-06,-0.00421633883778072,0.155675806099874,-0.251340146828076, + -8.42437462572621e-06,-0.00401524895406868,0.16514997406075,-0.278471909429485, + -8.51458985817732e-06,-0.00381415907035687,0.174624142021625,-0.305603672030893, + -8.60480509079498e-06,-0.00361306918664561,0.1840983099825,-0.332735434632302, + -8.69502032330161e-06,-0.00341197930293369,0.193572477943376,-0.35986719723371, + -8.78523555536415e-06,-0.00321088941922154,0.203046645904251,-0.386998959835118, + -8.87545078837038e-06,-0.00300979953551028,0.212520813865127,-0.414130722436527, + -8.96566602048843e-06,-0.00280870965179836,0.221994981826002,-0.441262485037935, + -9.05588125266199e-06,-0.00260761976808599,0.231469149786878,-0.468394247639344, + -9.14609648561271e-06,-0.00240652988437517,0.240943317747753,-0.495526010240752, + -9.23631171811934e-06,-0.00220544000066347,0.250417485708628,-0.522657772842161, + -9.32652695018188e-06,-0.0020043501169511,0.259891653669504,-0.549789535443569, + -9.41674218302158e-06,-0.00180326023324007,0.269365821630379,-0.576921298044978, + -9.50695741586127e-06,-0.00160217034952836,0.278839989591254,-0.604053060646386, + -9.59717264825688e-06,-0.00140108046581622,0.28831415755213,-0.631184823247794, + -9.68738788065249e-06,-0.00119999058210496,0.297788325513005,-0.658316585849203, + -9.77760311282605e-06,-0.000998900698392813,0.30726249347388,-0.685448348450612, + -9.86781834555472e-06,-0.00079781081468111,0.316736661434756,-0.71258011105202, + -9.95803357817238e-06,-0.000596720930969408,0.326210829395632,-0.739711873653428, + -1.00482488109011e-05,-0.000395631047258593,0.335684997356506,-0.766843636254837, + -1.01384640428526e-05,-0.000194541163546003,0.345159165317382,-0.793975398856246, + -5.86381318926077e-06,-0.00488889587612285,0.117022668274179,-0.143423778154074, + -5.91727077381421e-06,-0.0047112464395086,0.126312262852083,-0.170667853206788, + -5.97072835856194e-06,-0.00453359700289468,0.135601857429986,-0.197911928259501, + -6.02418594308762e-06,-0.00435594756628055,0.144891452007889,-0.225156003312214, + -6.07764352777984e-06,-0.0041782981296663,0.154181046585792,-0.252400078364928, + -6.13110111252757e-06,-0.00400064869305228,0.163470641163695,-0.279644153417641, + -6.18455869710877e-06,-0.00382299925643825,0.172760235741598,-0.306888228470355, + -6.23801628163445e-06,-0.0036453498198239,0.182049830319502,-0.334132303523068, + -6.29147386627116e-06,-0.0034677003832102,0.191339424897405,-0.361376378575781, + -6.34493145068582e-06,-0.0032900509465954,0.200629019475308,-0.388620453628495, + -6.39838903576662e-06,-0.00311240150998193,0.209918614053211,-0.415864528681208, + -6.45184662007026e-06,-0.00293475207336735,0.219208208631115,-0.443108603733922, + -6.50530420442941e-06,-0.00275710263675299,0.228497803209018,-0.470352678786635, + -6.55876178967674e-06,-0.00257945320013953,0.237787397786921,-0.497596753839348, + -6.61221937381384e-06,-0.00240180376352517,0.247076992364824,-0.524840828892062, + -6.66567695839504e-06,-0.00222415432691059,0.256366586942728,-0.552084903944775, + -6.71913454353135e-06,-0.00204650489029734,0.26565618152063,-0.579328978997489, + -6.77259212755743e-06,-0.00186885545368232,0.274945776098534,-0.606573054050202, + -6.82604971236067e-06,-0.0016912060170684,0.284235370676437,-0.633817129102916, + -6.87950729705289e-06,-0.00151355658045382,0.293524965254341,-0.661061204155629, + -6.93296488174511e-06,-0.00133590714384058,0.302814559832243,-0.688305279208342, + -6.98642246665937e-06,-0.00115825770722644,0.312104154410147,-0.715549354261056, + -7.03988005135159e-06,-0.000980608270612304,0.32139374898805,-0.742793429313769, + -7.09333763571074e-06,-0.000802958833997724,0.330683343565954,-0.770037504366483, + -7.14679521995887e-06,-0.000625309397383145,0.339972938143857,-0.797281579419196, + -4.27964828755845e-06,-0.00479210159281818,0.116453052555298,-0.143881008226318, + -4.31151111096595e-06,-0.00463237697131769,0.125603858447749,-0.171209173939623, + -4.34337393440121e-06,-0.00447265234981753,0.134754664340201,-0.198537339652928, + -4.37523675778095e-06,-0.00431292772831715,0.143905470232653,-0.225865505366233, + -4.40709958121621e-06,-0.00415320310681677,0.153056276125104,-0.253193671079537, + -4.43896240476249e-06,-0.00399347848531673,0.162207082017556,-0.280521836792842, + -4.47082522814224e-06,-0.00383375386381624,0.171357887910008,-0.307850002506147, + -4.5026880515775e-06,-0.00367402924231608,0.180508693802459,-0.335178168219452, + -4.53455087517929e-06,-0.00351430462081592,0.189659499694911,-0.362506333932757, + -4.56641369855904e-06,-0.00335457999931554,0.198810305587362,-0.389834499646062, + -4.59827652221634e-06,-0.00319485537781539,0.207961111479814,-0.417162665359367, + -4.63013934548506e-06,-0.00303513075631501,0.217111917372266,-0.444490831072671, + -4.66200216919788e-06,-0.00287540613481552,0.226262723264717,-0.471818996785977, + -4.69386499224456e-06,-0.00271568151331381,0.235413529157169,-0.499147162499281, + -4.72572781595737e-06,-0.00255595689181431,0.24456433504962,-0.526475328212586, + -4.75759063889303e-06,-0.00239623227031349,0.253715140942072,-0.553803493925891, + -4.78945346271686e-06,-0.00223650764881378,0.262865946834523,-0.581131659639196, + -4.82131628631866e-06,-0.00207678302731362,0.272016752726975,-0.608459825352501, + -4.85317910980942e-06,-0.00191705840581324,0.281167558619427,-0.635787991065806, + -4.88504193318917e-06,-0.0017573337843122,0.290318364511879,-0.66311615677911, + -4.91690475667994e-06,-0.00159760916281293,0.29946917040433,-0.690444322492415, + -4.94876757994867e-06,-0.00143788454131233,0.308619976296781,-0.71777248820572, + -4.98063040299535e-06,-0.00127815991981128,0.317770782189233,-0.745100653919025, + -5.01249322704123e-06,-0.00111843529831246,0.326921588081684,-0.77242881963233, + -5.04435604997688e-06,-0.000958710676811414,0.336072393974136,-0.799756985345635, + -3.10574873518821e-06,-0.00472157448926613,0.116030106103755,-0.144219077599153, + -3.12498907284464e-06,-0.00457530959310426,0.125077966126535,-0.171609418743631, + -3.14422941033454e-06,-0.00442904469694194,0.134125826149315,-0.19899975988811, + -3.16346974793547e-06,-0.00428277980078007,0.143173686172094,-0.226390101032589, + -3.18271008570292e-06,-0.00413651490461797,0.152221546194874,-0.253780442177068, + -3.20195042313731e-06,-0.00399025000845588,0.161269406217654,-0.281170783321546, + -3.22119076090477e-06,-0.003843985112294,0.170317266240434,-0.308561124466025, + -3.24043109861671e-06,-0.00369772021613213,0.179365126263213,-0.335951465610504, + -3.2596714360511e-06,-0.00355145531997003,0.188412986285993,-0.363341806754983, + -3.27891177376305e-06,-0.00340519042380794,0.197460846308773,-0.390732147899461, + -3.29815211125295e-06,-0.00325892552764584,0.206508706331552,-0.41812248904394, + -3.31739244885387e-06,-0.00311266063148352,0.215556566354332,-0.445512830188419, + -3.33663278639929e-06,-0.00296639573532165,0.224604426377112,-0.472903171332897, + -3.3558731239447e-06,-0.00282013083915955,0.233652286399891,-0.500293512477376, + -3.37511346182318e-06,-0.00267386594299812,0.242700146422671,-0.527683853621855, + -3.39435379925757e-06,-0.0025276010468358,0.25174800644545,-0.555074194766334, + -3.41359413669196e-06,-0.00238133615067326,0.260795866468231,-0.582464535910813, + -3.43283447412635e-06,-0.00223507125451139,0.26984372649101,-0.609854877055291, + -3.45207481278198e-06,-0.0020888063583504,0.27889158651379,-0.63724521819977, + -3.47131515021637e-06,-0.00194254146218809,0.287939446536569,-0.664635559344249, + -3.49055548765076e-06,-0.00179627656602577,0.296987306559349,-0.692025900488727, + -3.50979582541822e-06,-0.00165001166986434,0.306035166582128,-0.719416241633206, + -3.52903616240852e-06,-0.00150374677370069,0.315083026604909,-0.746806582777685, + -3.54827650017597e-06,-0.00135748187754015,0.324130886627688,-0.774196923922164, + -3.56751683794343e-06,-0.00121121698137738,0.333178746650468,-0.801587265066642, + -2.24442413485071e-06,-0.00467047220604022,0.115719317089902,-0.144466729416384, + -2.25625542663033e-06,-0.00453417860675587,0.12469158770153,-0.171902617007109, + -2.26808671810463e-06,-0.00439788500747085,0.133663858313158,-0.199338504597833, + -2.27991800971772e-06,-0.00426159140818638,0.142636128924786,-0.226774392188558, + -2.2917493013308e-06,-0.00412529780890181,0.151608399536414,-0.254210279779283, + -2.30358059283287e-06,-0.00398900420961679,0.160580670148042,-0.281646167370008, + -2.31541188433493e-06,-0.00385271061033232,0.16955294075967,-0.309082054960733, + -2.32724317605904e-06,-0.00371641701104752,0.178525211371299,-0.336517942551458, + -2.33907446739456e-06,-0.00358012341176273,0.187497481982927,-0.363953830142183, + -2.35090575911867e-06,-0.00344382981247815,0.196469752594555,-0.391389717732908, + -2.36273705034318e-06,-0.00330753621319291,0.205442023206184,-0.418825605323633, + -2.37456834206728e-06,-0.00317124261390833,0.214414293817812,-0.446261492914358, + -2.38639963390241e-06,-0.0030349490146242,0.22338656442944,-0.473697380505083, + -2.3982309255155e-06,-0.00289865541533918,0.232358835041068,-0.501133268095808, + -2.41006221624041e-06,-0.00276236181605372,0.241331105652696,-0.528569155686533, + -2.42189350818656e-06,-0.00262606821676936,0.250303376264325,-0.556005043277258, + -2.43372479991066e-06,-0.00248977461748501,0.259275646875953,-0.583440930867983, + -2.44555609141273e-06,-0.00235348101820021,0.268247917487581,-0.610876818458708, + -2.45738738324786e-06,-0.00221718741891586,0.277220188099209,-0.638312706049433, + -2.46921867474992e-06,-0.00208089381963106,0.286192458710837,-0.665748593640157, + -2.48104996558585e-06,-0.00194460022034537,0.295164729322466,-0.693184481230882, + -2.492881257532e-06,-0.00180830662106102,0.304136999934094,-0.720620368821607, + -2.50471254914508e-06,-0.00167201302177711,0.313109270545721,-0.748056256412333, + -2.51654384053612e-06,-0.00153571942249142,0.32208154115735,-0.775492144003057, + -2.5283751325933e-06,-0.00139942582320751,0.331053811768978,-0.802928031593782, + -1.61701508455403e-06,-0.00463359054262125,0.115492685151383,-0.144646913928178, + -1.62444550891316e-06,-0.00450461101635524,0.124409865127504,-0.172115939834917, + -1.63187593338332e-06,-0.00437563149008913,0.133327045103625,-0.199584965741655, + -1.63930635782572e-06,-0.00424665196382312,0.142244225079746,-0.227053991648394, + -1.64673678221261e-06,-0.00411767243755701,0.151161405055867,-0.254523017555133, + -1.65416720676603e-06,-0.00398869291129123,0.160078585031988,-0.281992043461872, + -1.66159763098639e-06,-0.00385971338502467,0.16899576500811,-0.309461069368611, + -1.66902805531777e-06,-0.00373073385875888,0.17791294498423,-0.33693009527535, + -1.67645847970466e-06,-0.00360175433249266,0.186830124960351,-0.364399121182089, + -1.68388890409155e-06,-0.00347277480622621,0.195747304936473,-0.391868147088828, + -1.69131932875599e-06,-0.00334379527996087,0.204664484912593,-0.419337172995567, + -1.69874975308737e-06,-0.00321481575369464,0.213581664888715,-0.446806198902306, + -1.70618017758528e-06,-0.00308583622742886,0.222498844864835,-0.474275224809045, + -1.71361060208319e-06,-0.00295685670116286,0.231416024840956,-0.501744250715784, + -1.72104102613702e-06,-0.00282787717489619,0.240333204817078,-0.529213276622522, + -1.72847145074595e-06,-0.00269889764863018,0.249250384793199,-0.556682302529261, + -1.73590187513284e-06,-0.0025699181223644,0.25816756476932,-0.584151328436, + -1.74333229963075e-06,-0.0024409385960984,0.267084744745441,-0.611620354342739, + -1.7507627237956e-06,-0.00231195906983217,0.276001924721561,-0.639089380249478, + -1.75819314807146e-06,-0.00218297954356572,0.284919104697683,-0.666558406156217, + -1.76562357279142e-06,-0.00205400001730016,0.293836284673804,-0.694027432062956, + -1.77305399695626e-06,-0.00192502049103371,0.302753464649925,-0.721496457969695, + -1.78048442101009e-06,-0.00179604096476726,0.311670644626046,-0.748965483876434, + -1.78791484584107e-06,-0.0016670614385017,0.320587824602167,-0.776434509783173, + -1.79534527022795e-06,-0.0015380819122357,0.329505004578288,-0.803903535689912, + -1.16240584427385e-06,-0.00460704651822252,0.115328342070984,-0.144777362090541, + -1.16717554787815e-06,-0.00448339330890912,0.124205588726908,-0.172270379140496, + -1.17194525128816e-06,-0.00435974009959517,0.133082835382833,-0.199763396190452, + -1.1767149548092e-06,-0.00423608689028143,0.141960082038757,-0.227256413240407, + -1.18148465860779e-06,-0.00411243368096836,0.150837328694681,-0.254749430290363, + -1.18625436212882e-06,-0.00398878047165452,0.159714575350606,-0.282242447340318, + -1.19102406553884e-06,-0.00386512726234067,0.168591822006531,-0.309735464390273, + -1.19579376944845e-06,-0.00374147405302749,0.177469068662455,-0.337228481440229, + -1.20056347291397e-06,-0.00361782084371387,0.186346315318379,-0.364721498490184, + -1.20533317649052e-06,-0.00349416763440002,0.195223561974304,-0.39221451554014, + -1.21010288028911e-06,-0.00337051442508707,0.204100808630228,-0.419707532590095, + -1.21487258364361e-06,-0.00324686121577322,0.212978055286152,-0.44720054964005, + -1.21964228705362e-06,-0.00312320800645915,0.221855301942077,-0.474693566690006, + -1.22441199090773e-06,-0.00299955479714575,0.230732548598002,-0.502186583739961, + -1.22918169453978e-06,-0.00287590158783235,0.239609795253926,-0.529679600789916, + -1.23395139783877e-06,-0.00275224837851806,0.248487041909851,-0.557172617839872, + -1.23872110158185e-06,-0.00262859516920511,0.257364288565775,-0.584665634889827, + -1.24349080532493e-06,-0.00250494195989193,0.266241535221699,-0.612158651939783, + -1.24826050884597e-06,-0.00238128875057786,0.275118781877624,-0.639651668989738, + -1.25303021247802e-06,-0.00225763554126424,0.283996028533548,-0.667144686039693, + -1.25779991599906e-06,-0.00213398233195061,0.292873275189473,-0.694637703089649, + -1.26256961985316e-06,-0.00201032912263743,0.301750521845397,-0.722130720139604, + -1.26733932326317e-06,-0.00188667591332292,0.310627768501322,-0.749623737189559, + -1.27210902689523e-06,-0.00176302270401019,0.319505015157246,-0.777116754239515, + -1.27687873019422e-06,-0.00163936949469612,0.328382261813171,-0.80460977128947, + -8.73291886486771e-05,-0.0127624485212806,0.151902411475711,-0.127284967931506, + -9.34580568415777e-05,-0.0120993984572826,0.16758783910667,-0.149638100422294, + -9.95869250347003e-05,-0.0114363483932849,0.183273266737629,-0.171991232913083, + -0.000105715793227823,-0.0107732983292872,0.198958694368588,-0.194344365403871, + -0.000111844661420668,-0.0101102482652893,0.214644121999547,-0.216697497894659, + -0.000117973529613624,-0.0094471982012917,0.230329549630505,-0.239050630385448, + -0.000124102397806525,-0.00878414813729345,0.246014977261465,-0.261403762876236, + -0.000130231265999703,-0.00812109807329597,0.261700404892424,-0.283756895367024, + -0.000136360134192937,-0.0074580480092985,0.277385832523382,-0.306110027857813, + -0.000142489002385615,-0.00679499794530014,0.293071260154341,-0.328463160348601, + -0.000148617870578516,-0.00613194788130222,0.3087566877853,-0.350816292839389, + -0.000154746738771361,-0.00546889781730409,0.32444211541626,-0.373169425330177, + -0.000160875606964317,-0.00480584775330617,0.340127543047218,-0.395522557820966, + -0.000167004475157606,-0.0041427976893087,0.355812970678177,-0.417875690311754, + -0.00017313334335034,-0.00347974762531078,0.371498398309136,-0.440228822802542, + -0.000179262211543407,-0.00281669756131331,0.387183825940095,-0.462581955293331, + -0.000185391079736252,-0.00215364749731495,0.402869253571054,-0.484935087784119, + -0.000191519947929319,-0.00149059743331703,0.418554681202013,-0.507288220274907, + -0.000197648816121943,-0.000827547369319115,0.434240108832972,-0.529641352765695, + -0.000203777684315898,-0.000164497305322531,0.449925536463931,-0.551994485256484, + -0.000209906552507744,0.00049855275867694,0.46561096409489,-0.574347617747272, + -0.000216035420701588,0.0011616028226733,0.481296391725848,-0.596700750238061, + -0.0002221642888941,0.00182465288667188,0.496981819356807,-0.619053882728849, + -0.000228293157086945,0.00248770295067002,0.512667246987767,-0.641407015219637, + -0.000234422025280234,0.00315075301466727,0.528352674618725,-0.663760147710425, + -8.656088771547e-05,-0.0126556753030974,0.151651922568162,-0.127555576576485, + -9.25941748554093e-05,-0.0119932199685446,0.1672765765241,-0.149954550029706, + -9.86274619952376e-05,-0.0113307646339917,0.182901230480038,-0.172353523482928, + -0.000104660749135455,-0.0106683092994392,0.198525884435976,-0.194752496936149, + -0.000110694036275394,-0.0100058539648865,0.214150538391914,-0.217151470389371, + -0.000116727323415555,-0.00934339863033407,0.229775192347852,-0.239550443842592, + -0.000122760610555384,-0.00868094329578128,0.24539984630379,-0.261949417295814, + -0.000128793897695378,-0.00801848796122862,0.261024500259728,-0.284348390749035, + -0.00013482718483554,-0.00735603262667617,0.276649154215666,-0.306747364202256, + -0.000140860471975313,-0.00669357729212283,0.292273808171605,-0.329146337655478, + -0.000146893759115585,-0.00603112195757061,0.307898462127543,-0.351545311108699, + -0.000152927046255469,-0.00536866662301794,0.323523116083481,-0.373944284561921, + -0.000158960333395464,-0.00470621128846505,0.339147770039419,-0.396343258015142, + -0.000164993620535681,-0.0040437559539126,0.354772423995357,-0.418742231468364, + -0.000171026907675897,-0.00338130061936015,0.370397077951295,-0.441141204921585, + -0.000177060194815448,-0.00271884528480704,0.386021731907233,-0.463540178374807, + -0.000183093481955776,-0.00205638995025481,0.401646385863171,-0.485939151828028, + -0.000189126769095771,-0.00139393461570192,0.417271039819109,-0.508338125281249, + -0.000195160056235766,-0.000731479281149472,0.432895693775047,-0.530737098734471, + -0.000201193343375428,-6.90239465961362e-05,0.448520347730985,-0.553136072187692, + -0.000207226630516311,0.000593431387955423,0.464145001686923,-0.575535045640914, + -0.000213259917655639,0.0012558867225092,0.479769655642861,-0.597934019094135, + -0.000219293204796189,0.00191834205706076,0.495394309598799,-0.620332992547356, + -0.000225326491934852,0.00258079739161543,0.511018963554738,-0.642731966000578, + -0.000231359779075513,0.00324325272616699,0.526643617510675,-0.665130939453799, + -8.55080122962038e-05,-0.0125105253220902,0.151308041069526,-0.127925490462723, + -9.14113310258036e-05,-0.0118490322212319,0.166849370103956,-0.150387127134128, + -9.73146497552646e-05,-0.0111875391203735,0.182390699138386,-0.172848763805533, + -0.000103217968484504,-0.0105260460195149,0.197932028172816,-0.195310400476937, + -0.000109121287213965,-0.00986455291865618,0.213473357207247,-0.217772037148342, + -0.000115024605943592,-0.00920305981779801,0.229014686241677,-0.240233673819746, + -0.000120927924672942,-0.00854156671693929,0.244556015276107,-0.262695310491151, + -0.000126831243402625,-0.00788007361608134,0.260097344310537,-0.285156947162556, + -0.000132734562131809,-0.00721858051522228,0.275638673344968,-0.30761858383396, + -0.000138637880861492,-0.00655708741436434,0.291180002379398,-0.330080220505365, + -0.000144541199591286,-0.00589559431350595,0.306721331413828,-0.35254185717677, + -0.000150444518320469,-0.00523410121264756,0.322262660448258,-0.375003493848174, + -0.000156347837049875,-0.0045726081117885,0.337803989482688,-0.397465130519579, + -0.000162251155779392,-0.00391111501093011,0.353345318517119,-0.419926767190984, + -0.000168154474508686,-0.00324962191007194,0.368886647551548,-0.442388403862388, + -0.000174057793238536,-0.00258812880921355,0.384427976585979,-0.464850040533793, + -0.000179961111968385,-0.00192663570835561,0.399969305620409,-0.487311677205198, + -0.000185864430697014,-0.00126514260749633,0.415510634654839,-0.509773313876602, + -0.000191767749426863,-0.000603649506638604,0.431051963689269,-0.532234950548007, + -0.000197671068156047,5.78435942206745e-05,0.4465932927237,-0.554696587219412, + -0.000203574386886118,0.000719336695078177,0.462134621758129,-0.577158223890816, + -0.000209477705615302,0.00138082979593701,0.47767595079256,-0.599619860562221, + -0.000215381024344818,0.00204232289679496,0.493217279826989,-0.622081497233625, + -0.000221284343074779,0.00270381599765335,0.50875860886142,-0.64454313390503, + -0.000227187661803518,0.00336530909851263,0.52429993789585,-0.667004770576434, + -8.40765343565752e-05,-0.0123153346921183,0.150839373759823,-0.128426721198822, + -8.98050404665729e-05,-0.0116554206815792,0.166267338987168,-0.150973266093856, + -9.55335465764873e-05,-0.0109955066710401,0.181695304214512,-0.173519810988889, + -0.000101262052686402,-0.0103355926605008,0.197123269441857,-0.196066355883923, + -0.000106990558796427,-0.00967567864996166,0.212551234669201,-0.218612900778957, + -0.000112719064906508,-0.00901576463942277,0.227979199896546,-0.24115944567399, + -0.000118447571016311,-0.00835585062888344,0.24340716512389,-0.263705990569024, + -0.000124176077126781,-0.00769593661834467,0.258835130351235,-0.286252535464058, + -0.000129904583236029,-0.007036022607805,0.274263095578579,-0.308799080359092, + -0.000135633089346276,-0.00637610859726601,0.289691060805924,-0.331345625254125, + -0.000141361595455747,-0.00571619458672634,0.305119026033268,-0.353892170149159, + -0.000147090101566105,-0.00505628057618757,0.320546991260613,-0.376438715044193, + -0.000152818607675909,-0.00439636656564857,0.335974956487957,-0.398985259939227, + -0.000158547113785823,-0.00373645255510913,0.351402921715302,-0.42153180483426, + -0.000164275619895626,-0.00307653854456991,0.366830886942646,-0.444078349729294, + -0.000170004126005985,-0.00241662453403158,0.38225885216999,-0.466624894624328, + -0.000175732632115233,-0.00175671052349102,0.397686817397336,-0.489171439519362, + -0.000181461138225147,-0.00109679651295203,0.41311478262468,-0.511717984414395, + -0.000187189644335728,-0.000436882502413471,0.428542747852024,-0.534264529309429, + -0.000192918150445087,0.000223031508126414,0.443970713079369,-0.556811074204463, + -0.000198646656555335,0.000882945518665412,0.459398678306714,-0.579357619099497, + -0.000204375162665471,0.00154285952920397,0.474826643534058,-0.60190416399453, + -0.000210103668775163,0.00220277353974385,0.490254608761402,-0.624450708889564, + -0.000215832174885411,0.00286268755028196,0.505682573988746,-0.646997253784598, + -0.000221560680994881,0.00352260156082229,0.521110539216092,-0.669543798679631, + -8.21511521776341e-05,-0.0120566655294801,0.150206964936421,-0.129097847323293, + -8.76479867296109e-05,-0.0113993623803532,0.165482313665983,-0.151758080631578, + -9.31448212816988e-05,-0.0107420592312264,0.180757662395545,-0.174418313939864, + -9.86416558337311e-05,-0.0100847560820992,0.196033011125107,-0.197078547248149, + -0.000104138490385652,-0.00942745293297198,0.211308359854669,-0.219738780556434, + -0.000109635324937685,-0.00877014978384527,0.226583708584231,-0.24239901386472, + -0.000115132159489939,-0.00811284663471845,0.241859057313794,-0.265059247173005, + -0.000120628994041971,-0.00745554348559141,0.257134406043356,-0.28771948048129, + -0.000126125828593893,-0.00679824033646415,0.272409754772918,-0.310379713789576, + -0.00013162266314598,-0.00614093718733755,0.28768510350248,-0.333039947097861, + -0.00013711949769768,-0.00548363403821006,0.302960452232042,-0.355700180406146, + -0.00014261633224999,-0.00482633088908324,0.318235800961604,-0.378360413714431, + -0.000148113166802299,-0.00416902773995664,0.333511149691166,-0.401020647022717, + -0.000153610001353832,-0.00351172459082871,0.348786498420729,-0.423680880331002, + -0.00015910683590592,-0.00285442144170234,0.364061847150291,-0.446341113639288, + -0.000164603670457897,-0.00219711829257552,0.379337195879853,-0.469001346947573, + -0.000170100505009874,-0.00153981514344803,0.394612544609415,-0.491661580255858, + -0.000175597339562183,-0.000882511994321211,0.409887893338977,-0.514321813564143, + -0.000181094174114271,-0.000225208845194613,0.425163242068539,-0.536982046872429, + -0.000186591008666359,0.000432094303932207,0.440438590798101,-0.559642280180714, + -0.000192087843218003,0.00108939745305969,0.455713939527663,-0.582302513488999, + -0.000197584677770202,0.00174670060218673,0.470989288257226,-0.604962746797284, + -0.00020308151232229,0.00240400375131378,0.486264636986788,-0.62762298010557, + -0.000208578346874155,0.00306130690044037,0.50153998571635,-0.650283213413855, + -0.000214075181426243,0.00371861004956786,0.516815334445912,-0.67294344672214, + -7.9598691956756e-05,-0.0117204850187089,0.149365022520053,-0.129982272811832, + -8.47945646269554e-05,-0.0110674919238278,0.164437803124756,-0.152792327333694, + -8.99904372966831e-05,-0.0104144988289463,0.17951058372946,-0.175602381855556, + -9.51863099667993e-05,-0.00976150573406531,0.194583364334164,-0.198412436377418, + -0.00010038218263686,-0.00910851263918422,0.209656144938868,-0.22122249089928, + -0.000105578055306865,-0.00845551954430324,0.224728925543571,-0.244032545421142, + -0.000110773927976981,-0.00780252644942214,0.239801706148275,-0.266842599943004, + -0.000115969800647042,-0.00714953335454105,0.254874486752979,-0.289652654464866, + -0.000121165673316936,-0.00649654025965951,0.269947267357683,-0.312462708986727, + -0.000126361545986609,-0.00584354716477797,0.285020047962387,-0.335272763508589, + -0.000131557418656891,-0.00519055406989732,0.30009282856709,-0.358082818030451, + -0.000136753291327008,-0.00453756097501623,0.315165609171794,-0.380892872552313, + -0.000141949163996791,-0.00388456788013491,0.330238389776498,-0.403702927074175, + -0.000147145036666907,-0.00323157478525382,0.345311170381202,-0.426512981596037, + -0.00015234090933669,-0.00257858169037251,0.360383950985905,-0.449323036117899, + -0.000157536782006695,-0.00192558859549119,0.375456731590609,-0.472133090639761, + -0.000162732654677367,-0.00127259550061121,0.390529512195313,-0.494943145161623, + -0.000167928527346595,-0.000619602405728337,0.405602292800017,-0.517753199683485, + -0.000173124400017155,3.33906891516467e-05,0.42067507340472,-0.540563254205346, + -0.000178320272686827,0.000686383784033406,0.435747854009424,-0.563373308727208, + -0.00018351614535661,0.0013393768789145,0.450820634614128,-0.58618336324907, + -0.000188712018027282,0.00199236997379471,0.465893415218831,-0.608993417770932, + -0.00019390789069651,0.00264536306867713,0.480966195823535,-0.631803472292794, + -0.00019910376336707,0.00329835616355734,0.496038976428239,-0.654613526814656, + -0.000204299636036853,0.00395134925843887,0.511111757032943,-0.677423581336518, + -7.62792891767228e-05,-0.0112945458857542,0.148264101903325,-0.131123667596917, + -8.10943977086476e-05,-0.01064857893753,0.163073027057669,-0.154127073796322, + -8.59095062408777e-05,-0.0100026119893064,0.177881952212014,-0.177130479995727, + -9.07246147730523e-05,-0.00935664504108236,0.192690877366359,-0.200133886195133, + -9.55397233051158e-05,-0.00871067809285875,0.207499802520703,-0.223137292394539, + -0.00010035483183729,-0.00806471114463458,0.222308727675048,-0.246140698593944, + -0.000105169940369076,-0.00741874419641042,0.237117652829393,-0.269144104793349, + -0.000109985048901251,-0.00677277724818648,0.251926577983738,-0.292147510992755, + -0.000114800157433426,-0.00612681029996276,0.266735503138082,-0.31515091719216, + -0.000119615265965489,-0.00548084335173882,0.281544428292427,-0.338154323391566, + -0.00012443037449783,-0.00483487640351488,0.296353353446771,-0.361157729590971, + -0.000129245483029838,-0.00418890945529138,0.311162278601116,-0.384161135790377, + -0.000134060591561846,-0.00354294250706721,0.325971203755461,-0.407164541989783, + -0.000138875700094188,-0.00289697555884327,0.340780128909806,-0.430167948189188, + -0.000143690808625863,-0.00225100861061889,0.35558905406415,-0.453171354388594, + -0.000148505917158426,-0.00160504166239539,0.370397979218495,-0.476174760587999, + -0.000153321025690656,-0.000959074714171892,0.385206904372839,-0.499178166787405, + -0.000158136134222553,-0.000313107765947507,0.400015829527184,-0.52218157298681, + -0.000162951242754339,0.000332859182276657,0.414824754681529,-0.545184979186215, + -0.000167766351286791,0.000978826130500376,0.429633679835874,-0.568188385385621, + -0.000172581459819021,0.0016247930787241,0.444442604990218,-0.591191791585027, + -0.000177396568350918,0.00227076002694782,0.459251530144563,-0.614195197784432, + -0.000182211676882593,0.00291672697517287,0.474060455298908,-0.637198603983837, + -0.000187026785414601,0.00356269392339659,0.488869380453252,-0.660202010183243, + -0.000191841893946942,0.00420866087162119,0.503678305607598,-0.683205416382648, + -7.20690026665693e-05,-0.0107721304816955,0.146858109530938,-0.132557585748381, + -7.64187099734359e-05,-0.0101373334437707,0.16133167394459,-0.155803896930067, + -8.07684172806078e-05,-0.00950253640584642,0.175805238358242,-0.179050208111753, + -8.51181245872246e-05,-0.0088677393679214,0.190278802771894,-0.202296519293439, + -8.94678318940079e-05,-0.0082329423299965,0.204752367185546,-0.225542830475125, + -9.38175392010132e-05,-0.00759814529207226,0.219225931599198,-0.248789141656811, + -9.8167246507963e-05,-0.00696334825414757,0.23369949601285,-0.272035452838497, + -0.000102516953814635,-0.00632855121622278,0.248173060426502,-0.295281764020183, + -0.000106866661121807,-0.00569375417829843,0.262646624840154,-0.318528075201869, + -0.000111216368428646,-0.00505895714037363,0.277120189253806,-0.341774386383555, + -0.000115566075735485,-0.00442416010244906,0.291593753667458,-0.365020697565241, + -0.000119915783042379,-0.00378936306452426,0.30606731808111,-0.388267008746927, + -0.00012426549034894,-0.00315456602659925,0.320540882494762,-0.411513319928613, + -0.000128615197656057,-0.00251976898867512,0.335014446908414,-0.434759631110299, + -0.000132964904963062,-0.0018849719507501,0.349488011322066,-0.458005942291985, + -0.000137314612269512,-0.00125017491282531,0.363961575735718,-0.481252253473671, + -0.000141664319576518,-0.000615377874900513,0.37843514014937,-0.504498564655357, + -0.000146014026883745,1.94191630233931e-05,0.392908704563022,-0.527744875837043, + -0.000150363734190528,0.000654216200948632,0.407382268976674,-0.550991187018729, + -0.000154713441497201,0.00128901323887343,0.421855833390326,-0.574237498200415, + -0.000159063148804206,0.00192381027679822,0.436329397803979,-0.597483809382101, + -0.0001634128561111,0.00255860731472213,0.45080296221763,-0.620730120563787, + -0.000167762563417884,0.00319340435264737,0.465276526631282,-0.643976431745472, + -0.000172112270724556,0.00382820139057216,0.479750091044934,-0.667222742927159, + -0.000176461978032005,0.00446299842849607,0.494223655458586,-0.690469054108844, + -6.68952954001878e-05,-0.010156644295174,0.14511596475665,-0.13429931895994, + -7.07005536468297e-05,-0.00953893425820018,0.159176361672187,-0.157840678833533, + -7.45058118937769e-05,-0.00892122422122676,0.173236758587724,-0.181382038707125, + -7.83110701403356e-05,-0.00830351418425301,0.187297155503261,-0.204923398580718, + -8.21163283871162e-05,-0.00768580414727915,0.201357552418798,-0.22846475845431, + -8.59215866339524e-05,-0.00706809411030562,0.215417949334335,-0.252006118327903, + -8.97268448806776e-05,-0.00645038407333187,0.229478346249873,-0.275547478201496, + -9.35321031275693e-05,-0.00583267403635834,0.243538743165409,-0.299088838075088, + -9.73373613737949e-05,-0.00521496399938415,0.257599140080947,-0.322630197948681, + -0.000101142619620631,-0.00459725396241062,0.271659536996483,-0.346171557822274, + -0.000104947877867301,-0.00397954392543665,0.285719933912021,-0.369712917695866, + -0.000108753136114581,-0.00336183388846356,0.299780330827558,-0.393254277569459, + -0.000112558394360973,-0.00274412385148959,0.313840727743095,-0.416795637443052, + -0.000116363652607809,-0.00212641381451606,0.327901124658631,-0.440336997316644, + -0.000120168910854535,-0.00150870377754231,0.341961521574168,-0.463878357190237, + -0.000123974169101371,-0.00089099374056878,0.356021918489706,-0.48741971706383, + -0.000127779427347763,-0.000273283703594585,0.370082315405243,-0.510961076937422, + -0.000131584685594821,0.000344426333379166,0.38414271232078,-0.534502436811015, + -0.000135389943841213,0.000962136370352695,0.398203109236317,-0.558043796684608, + -0.000139195202088049,0.001579846407326,0.412263506151853,-0.5815851565582, + -0.000143000460335108,0.00219755644429931,0.42632390306739,-0.605126516431793, + -0.000146805718581722,0.0028152664812735,0.440384299982927,-0.628667876305386, + -0.000150610976828891,0.00343297651824681,0.454444696898464,-0.652209236178978, + -0.000154416235075172,0.00405068655522145,0.468505093814002,-0.675750596052571, + -0.000158221493322341,0.00466839659219387,0.482565490729538,-0.699291955926163, + -6.0780462052018e-05,-0.00946545187349679,0.143036825947692,-0.136330413343041, + -6.39823372760584e-05,-0.00887255943138299,0.156607356780888,-0.160215839539132, + -6.71842125000155e-05,-0.00827966698926896,0.170177887614084,-0.184101265735222, + -7.03860877238061e-05,-0.00768677454715472,0.183748418447281,-0.207986691931312, + -7.35879629475966e-05,-0.00709388210504058,0.197318949280477,-0.231872118127402, + -7.67898381713872e-05,-0.00650098966292656,0.210889480113673,-0.255757544323493, + -7.99917133952888e-05,-0.00590809722081254,0.224460010946869,-0.279642970519583, + -8.31935886192459e-05,-0.0053152047786984,0.238030541780065,-0.303528396715674, + -8.6395463843314e-05,-0.00472231233658471,0.251601072613261,-0.327413822911764, + -8.95973390669935e-05,-0.00412941989447035,0.265171603446458,-0.351299249107854, + -9.27992142909506e-05,-0.00353652745235622,0.278742134279654,-0.375184675303945, + -9.60010895147967e-05,-0.00294363501024231,0.29231266511285,-0.399070101500035, + -9.92029647391979e-05,-0.00235074256812884,0.305883195946046,-0.422955527696125, + -0.000102404839962378,-0.00175785012601404,0.319453726779242,-0.446840953892216, + -0.000105606715186668,-0.00116495768390057,0.333024257612438,-0.470726380088306, + -0.000108808590410403,-0.000572065241786213,0.346594788445635,-0.494611806284396, + -0.00011201046563436,2.08272003276999e-05,0.360165319278831,-0.518497232480487, + -0.000115212340858095,0.000613719642441835,0.373735850112027,-0.542382658676577, + -0.000118414216081719,0.00120661208455619,0.387306380945223,-0.566268084872667, + -0.000121616091305676,0.00179950452667033,0.400876911778419,-0.590153511068757, + -0.000124817966529855,0.00239239696878402,0.414447442611616,-0.614038937264848, + -0.000128019841753702,0.00298528941089815,0.428017973444812,-0.637924363460938, + -0.000131221716976992,0.00357818185301317,0.441588504278008,-0.661809789657028, + -0.000134423592201283,0.00417107429512598,0.455159035111204,-0.685695215853119, + -0.000137625467425462,0.00476396673723967,0.4687295659444,-0.709580642049209, + -5.38781856682657e-05,-0.00873048154270528,0.140664345468733,-0.138589310431118, + -5.64530216378145e-05,-0.00817139984803095,0.153679878558344,-0.162857392608368, + -5.90278576074188e-05,-0.00761231815335672,0.166695411647955,-0.187125474785619, + -6.16026935769121e-05,-0.00705323645868217,0.179710944737566,-0.21139355696287, + -6.41775295465163e-05,-0.00649415476400783,0.192726477827178,-0.235661639140121, + -6.67523655160651e-05,-0.0059350730693335,0.205742010916789,-0.259929721317371, + -6.93272014853363e-05,-0.00537599137465872,0.2187575440064,-0.284197803494622, + -7.19020374552182e-05,-0.00481690967998483,0.231773077096011,-0.308465885671873, + -7.44768734245449e-05,-0.00425782798531027,0.244788610185622,-0.332733967849124, + -7.70517093943157e-05,-0.00369874629063616,0.257804143275233,-0.357002050026375, + -7.96265453638645e-05,-0.00313966459596182,0.270819676364844,-0.381270132203625, + -8.22013813331912e-05,-0.00258058290128682,0.283835209454456,-0.405538214380876, + -8.47762173025179e-05,-0.00202150120661226,0.296850742544067,-0.429806296558127, + -8.73510532720667e-05,-0.00146241951193793,0.309866275633678,-0.454074378735378, + -8.99258892417265e-05,-0.000903337817263816,0.322881808723289,-0.478342460912629, + -9.25007252112753e-05,-0.000344256122589481,0.335897341812901,-0.50261054308988, + -9.50755611812681e-05,0.000214825572083965,0.348912874902511,-0.52687862526713, + -9.76503971504838e-05,0.000773907266759188,0.361928407992123,-0.551146707444381, + -0.000100225233120366,0.0013329889614333,0.374943941081734,-0.575414789621632, + -0.000102800069089248,0.00189207065610786,0.387959474171345,-0.599682871798883, + -0.000105374905059352,0.00245115235078242,0.400975007260957,-0.623950953976133, + -0.000107949741028457,0.00301023404545697,0.413990540350567,-0.648219036153384, + -0.00011052457699845,0.00356931574013064,0.427006073440178,-0.672487118330635, + -0.000113099412967888,0.0041283974348052,0.44002160652979,-0.696755200507886, + -0.000115674248937658,0.00468747912947931,0.453037139619401,-0.721023282685136, + -4.64810320248976e-05,-0.00799368659322441,0.138092214199511,-0.140972902274679, + -4.84502474501491e-05,-0.00747740205714353,0.150510477396081,-0.165644763659224, + -5.04194628750954e-05,-0.00696111752106221,0.162928740592652,-0.19031662504377, + -5.23886783001526e-05,-0.00644483298498111,0.175347003789223,-0.214988486428315, + -5.43578937252098e-05,-0.0059285484488999,0.187765266985793,-0.239660347812861, + -5.63271091501005e-05,-0.00541226391281868,0.200183530182364,-0.264332209197406, + -5.82963245754353e-05,-0.0048959793767378,0.212601793378934,-0.289004070581952, + -6.02655400004926e-05,-0.00437969484065648,0.225020056575505,-0.313675931966498, + -6.22347554256053e-05,-0.0038634103045756,0.237438319772075,-0.338347793351043, + -6.42039708504405e-05,-0.00334712576849405,0.249856582968646,-0.363019654735589, + -6.61731862753312e-05,-0.00283084123241273,0.262274846165217,-0.387691516120134, + -6.81424017007215e-05,-0.00231455669633229,0.274693109361787,-0.41236337750468, + -7.01116171258898e-05,-0.00179827216025097,0.287111372558358,-0.437035238889225, + -7.2080832551058e-05,-0.00128198762417009,0.299529635754928,-0.461707100273771, + -7.40500479757822e-05,-0.000765703088088543,0.311947898951499,-0.486378961658317, + -7.60192634009504e-05,-0.000249418552007663,0.324366162148069,-0.511050823042862, + -7.79884788262297e-05,0.000266865984072995,0.336784425344639,-0.535722684427408, + -7.99576942508429e-05,0.000783150520154985,0.349202688541211,-0.560394545811953, + -8.19269096763442e-05,0.00129943505623586,0.361620951737781,-0.585066407196499, + -8.38961251011794e-05,0.00181571959231652,0.374039214934351,-0.609738268581045, + -8.58653405260146e-05,0.00233200412839807,0.386457478130922,-0.63441012996559, + -8.78345559512939e-05,0.00284828866447917,0.398875741327492,-0.659081991350136, + -8.9803771375907e-05,0.00336457320056072,0.411294004524063,-0.683753852734681, + -9.17729868015194e-05,0.00388085773664137,0.423712267720634,-0.708425714119227, + -9.37422022265766e-05,0.00439714227272248,0.436130530917204,-0.733097575503772, + -3.89821285236847e-05,-0.00729802825722803,0.135453996894149,-0.143352537693825, + -4.04110093917831e-05,-0.00683179390766009,0.147264063411592,-0.168427508069446, + -4.18398902599648e-05,-0.00636555955809226,0.159074129929035,-0.193502478445067, + -4.32687711283686e-05,-0.00589932520852465,0.170884196446478,-0.218577448820688, + -4.46976519963282e-05,-0.0054330908589566,0.18269426296392,-0.243652419196309, + -4.61265328644545e-05,-0.00496685650938855,0.194504329481363,-0.26872738957193, + -4.75554137328027e-05,-0.00450062215982117,0.206314395998806,-0.293802359947551, + -4.89842946007624e-05,-0.00403438781025289,0.218124462516249,-0.318877330323172, + -5.04131754691661e-05,-0.00356815346068551,0.229934529033691,-0.343952300698793, + -5.18420563370703e-05,-0.00310191911111746,0.241744595551134,-0.369027271074413, + -5.32709372054185e-05,-0.00263568476154963,0.253554662068577,-0.394102241450035, + -5.46998180733782e-05,-0.00216945041198136,0.26536472858602,-0.419177211825655, + -5.6128698941893e-05,-0.00170321606241397,0.277174795103463,-0.444252182201277, + -5.75575798100747e-05,-0.00123698171284636,0.288984861620905,-0.469327152576897, + -5.89864606779233e-05,-0.000770747363278312,0.300794928138348,-0.494402122952518, + -6.04153415465492e-05,-0.000304513013710928,0.312604994655791,-0.519477093328139, + -6.18442224145088e-05,0.000161721335857568,0.324415061173234,-0.54455206370376, + -6.32731032823575e-05,0.000627955685425619,0.336225127690677,-0.569627034079381, + -6.47019841513163e-05,0.00109419003499278,0.348035194208119,-0.594702004455002, + -6.6130865019165e-05,0.00156042438456039,0.359845260725562,-0.619776974830623, + -6.75597458875687e-05,0.002026658734128,0.371655327243005,-0.644851945206244, + -6.89886267553064e-05,0.00249289308369649,0.383465393760448,-0.669926915581865, + -7.04175076234881e-05,0.00295912743326499,0.395275460277891,-0.695001885957486, + -7.18463884916698e-05,0.00342536178283215,0.407085526795333,-0.720076856333107, + -7.32752693595184e-05,0.00389159613240064,0.418895593312776,-0.745151826708728, + -3.17964670884519e-05,-0.00667772081892115,0.132897299000605,-0.145600406155269, + -3.27809494870546e-05,-0.00626551471094228,0.144121908926038,-0.171056164268487, + -3.37654318859348e-05,-0.00585330860296396,0.155346518851471,-0.196511922381706, + -3.47499142847596e-05,-0.00544110249498531,0.166571128776903,-0.221967680494924, + -3.57343966835288e-05,-0.00502889638700665,0.177795738702336,-0.247423438608142, + -3.67188790822426e-05,-0.004616690279028,0.189020348627769,-0.27287919672136, + -3.77033614809563e-05,-0.00420448417104913,0.200244958553202,-0.298334954834579, + -3.86878438798366e-05,-0.00379227806307081,0.211469568478635,-0.323790712947797, + -3.96723262785503e-05,-0.00338007195509182,0.222694178404068,-0.349246471061015, + -4.06568086773751e-05,-0.0029678658471135,0.233918788329501,-0.374702229174233, + -4.16412910760888e-05,-0.00255565973913474,0.245143398254934,-0.400157987287452, + -4.26257734748026e-05,-0.00214345363115598,0.256368008180367,-0.42561374540067, + -4.36102558739604e-05,-0.00173124752317766,0.2675926181058,-0.451069503513888, + -4.45947382724521e-05,-0.00131904141519867,0.278817228031233,-0.476525261627106, + -4.55792206711658e-05,-0.000906835307219911,0.290041837956666,-0.501981019740325, + -4.65637030702126e-05,-0.000494629199241814,0.301266447882099,-0.527436777853543, + -4.75481854688153e-05,-8.24230912630508e-05,0.312491057807532,-0.552892535966761, + -4.8532667867307e-05,0.000329783016716156,0.323715667732965,-0.578348294079979, + -4.95171502662428e-05,0.000741989124694697,0.334940277658398,-0.603804052193198, + -5.05016326650676e-05,0.00115419523267324,0.346164887583831,-0.629259810306416, + -5.14861150640034e-05,0.00156640134065178,0.357389497509264,-0.654715568419634, + -5.24705974627171e-05,0.00197860744863032,0.368614107434696,-0.680171326532852, + -5.34550798614308e-05,0.00239081355660931,0.379838717360129,-0.70562708464607, + -5.44395622602556e-05,0.0028030196645874,0.391063327285562,-0.731082842759289, + -5.54240446589693e-05,0.00321522577256594,0.402287937210995,-0.756538600872507, + -2.52727788376539e-05,-0.00615220143011774,0.130551960505155,-0.147615564001963, + -2.59195085329789e-05,-0.00579402623130587,0.141242690388364,-0.173412688796775, + -2.65662382286092e-05,-0.00543585103249455,0.151933420271573,-0.199209813591588, + -2.72129679239619e-05,-0.00507767583368268,0.162624150154781,-0.225006938386401, + -2.78596976193146e-05,-0.00471950063487103,0.17331488003799,-0.250804063181213, + -2.85064273149449e-05,-0.0043613254360596,0.184005609921199,-0.276601187976026, + -2.91531570103531e-05,-0.00400315023724773,0.194696339804408,-0.302398312770838, + -2.97998867058169e-05,-0.00364497503843642,0.205387069687616,-0.328195437565651, + -3.04466164013362e-05,-0.00328679983962465,0.216077799570825,-0.353992562360464, + -3.10933460967444e-05,-0.00292862464081312,0.226768529454033,-0.379789687155276, + -3.17400757922082e-05,-0.00257044944200135,0.237459259337242,-0.405586811950089, + -3.23868054877829e-05,-0.00221227424319004,0.248149989220451,-0.431383936744901, + -3.30335351829136e-05,-0.00185409904437783,0.25884071910366,-0.457181061539714, + -3.36802648788215e-05,-0.00149592384556718,0.269531448986868,-0.482978186334526, + -3.43269945740632e-05,-0.00113774864675498,0.280222178870077,-0.508775311129339, + -3.4973724269638e-05,-0.000779573447943438,0.290912908753286,-0.534572435924152, + -3.56204539648797e-05,-0.000421398249131455,0.301603638636494,-0.560369560718964, + -3.62671836601214e-05,-6.3223050319694e-05,0.312294368519703,-0.586166685513777, + -3.69139133561402e-05,0.000294952148491401,0.322985098402912,-0.611963810308589, + -3.75606430509379e-05,0.00065312734730405,0.333675828286121,-0.637760935103402, + -3.82073727468457e-05,0.00101130254611492,0.344366558169329,-0.663558059898215, + -3.88541024425315e-05,0.00136947774492535,0.355057288052537,-0.689355184693027, + -3.95008321372181e-05,0.00172765294373844,0.365748017935746,-0.71515230948784, + -4.0147561833126e-05,0.00208582814254976,0.376438747818955,-0.740949434282653, + -4.07942915287007e-05,0.00244400334136152,0.387129477702164,-0.766746559077465, + -1.96334074151483e-05,-0.00572576222337406,0.128506016863772,-0.14933910996327, + -2.00413254359821e-05,-0.00541801129124064,0.138733348553683,-0.175428202539342, + -2.04492434565662e-05,-0.00511026035910667,0.148960680243594,-0.201517295115414, + -2.08571614775388e-05,-0.00480250942697347,0.159188011933505,-0.227606387691486, + -2.12650794982894e-05,-0.00449475849484016,0.169415343623416,-0.253695480267558, + -2.1672997519262e-05,-0.00418700756270685,0.179642675313327,-0.27978457284363, + -2.20809155400126e-05,-0.00387925663057298,0.189870007003238,-0.305873665419702, + -2.24888335607631e-05,-0.00357150569843956,0.200097338693149,-0.331962757995774, + -2.28967515816247e-05,-0.00326375476630614,0.21032467038306,-0.358051850571846, + -2.33046696022643e-05,-0.00295600383417249,0.220552002072971,-0.384140943147918, + -2.37125876229038e-05,-0.00264825290203885,0.230779333762882,-0.41023003572399, + -2.41205056435989e-05,-0.00234050196990521,0.241006665452793,-0.436319128300062, + -2.4528423664627e-05,-0.00203275103777201,0.251233997142704,-0.462408220876134, + -2.49363416854331e-05,-0.00172500010563859,0.261461328832615,-0.488497313452206, + -2.53442597062392e-05,-0.00141724917350494,0.271688660522526,-0.514586406028278, + -2.57521777269343e-05,-0.0011094982413713,0.281915992212437,-0.54067549860435, + -2.61600957482955e-05,-0.000801747309238765,0.292143323902348,-0.566764591180422, + -2.65680137689905e-05,-0.000493996377105343,0.302370655592259,-0.592853683756494, + -2.69759317897966e-05,-0.000186245444971256,0.31259798728217,-0.618942776332566, + -2.73838498099366e-05,0.000121505487162388,0.322825318972081,-0.645031868908638, + -2.77917678311868e-05,0.000429256419295587,0.333052650661992,-0.67112096148471, + -2.81996858518818e-05,0.000737007351429231,0.343279982351903,-0.697210054060782, + -2.86076038726879e-05,0.00104475828356287,0.353507314041814,-0.723299146636854, + -2.90155218938271e-05,0.00135250921569563,0.363734645731725,-0.749388239212926, + -2.94234399143001e-05,0.00166026014782972,0.373961977421636,-0.775477331788998, + -1.49608233049603e-05,-0.00539140627700752,0.126797767634769,-0.150754933422575, + -1.52100834727165e-05,-0.00512799092456584,0.13663976283128,-0.177083865749572, + -1.54593436405559e-05,-0.00486457557212427,0.146481758027791,-0.20341279807657, + -1.57086038082288e-05,-0.00460116021968238,0.156323753224302,-0.229741730403567, + -1.59578639760127e-05,-0.00433774486724092,0.166165748420813,-0.256070662730564, + -1.62071241436856e-05,-0.00407432951479891,0.176007743617324,-0.282399595057562, + -1.64563843115251e-05,-0.00381091416235746,0.185849738813835,-0.308728527384559, + -1.67056444788094e-05,-0.0035474988099149,0.195691734010347,-0.335057459711557, + -1.69549046468709e-05,-0.00328408345747366,0.205533729206857,-0.361386392038554, + -1.72041648142107e-05,-0.00302066810503154,0.215375724403368,-0.387715324365552, + -1.74534249820502e-05,-0.00275725275258987,0.22521771959988,-0.414044256692549, + -1.77026851503337e-05,-0.00249383740014864,0.235059714796391,-0.440373189019546, + -1.7951945317618e-05,-0.00223042204770652,0.244901709992902,-0.466702121346544, + -1.82012054855685e-05,-0.00196700669526528,0.254743705189412,-0.493031053673541, + -1.84504656528528e-05,-0.00170359134282272,0.264585700385924,-0.519359986000539, + -1.86997258205812e-05,-0.00144017599038104,0.274427695582435,-0.545688918327536, + -1.89489859885317e-05,-0.00117676063793981,0.284269690778946,-0.572017850654533, + -1.9198246155927e-05,-0.000913345285497469,0.294111685975457,-0.598346782981531, + -1.94475063239885e-05,-0.000649929933056015,0.303953681171968,-0.624675715308529, + -1.9696766491939e-05,-0.000386514580614339,0.313795676368479,-0.651004647635526, + -1.99460266590012e-05,-0.000123099228172219,0.32363767156499,-0.677333579962523, + -2.01952868267297e-05,0.000140316124269457,0.333479666761501,-0.703662512289521, + -2.04445469950132e-05,0.000403731476710689,0.343321661958012,-0.729991444616518, + -2.06938071626306e-05,0.000667146829152809,0.353163657154523,-0.756320376943516, + -2.0943067330137e-05,0.000930562181594929,0.363005652351034,-0.782649309270513, + -1.12229718828294e-05,-0.0051360203707892,0.125422688095384,-0.151879915816704, + -1.13720107837723e-05,-0.00490971168928833,0.134955497843117,-0.178399419570831, + -1.15210496851037e-05,-0.00468340300778758,0.144488307590851,-0.204918923324958, + -1.16700885856025e-05,-0.0044570943262856,0.154021117338585,-0.231438427079086, + -1.18191274869339e-05,-0.00423078564478518,0.163553927086318,-0.257957930833213, + -1.19681663877658e-05,-0.00400447696328388,0.173086736834052,-0.28447743458734, + -1.21172052887086e-05,-0.00377816828178279,0.182619546581785,-0.310996938341467, + -1.22662441899291e-05,-0.00355185960028193,0.192152356329519,-0.337516442095594, + -1.24152830907054e-05,-0.0033255509187804,0.201685166077253,-0.364035945849721, + -1.25643219918703e-05,-0.00309924223727998,0.211217975824986,-0.390555449603849, + -1.27133608925911e-05,-0.00287293355577822,0.22075078557272,-0.417074953357976, + -1.28623997939226e-05,-0.0026466248742778,0.230283595320453,-0.443594457112103, + -1.30114386945879e-05,-0.00242031619277605,0.239816405068187,-0.47011396086623, + -1.31604775958083e-05,-0.00219400751127519,0.24934921481592,-0.496633464620357, + -1.33095164970287e-05,-0.00196769882977454,0.258882024563654,-0.523152968374484, + -1.3458555397361e-05,-0.00174139014827257,0.268414834311387,-0.549672472128611, + -1.36075942983593e-05,-0.00151508146677148,0.277947644059121,-0.576191975882739, + -1.37566331999128e-05,-0.00128877278527129,0.287480453806854,-0.602711479636866, + -1.39056721008002e-05,-0.00106246410377064,0.297013263554587,-0.629230983390993, + -1.40547110014655e-05,-0.000836155422268892,0.306546073302321,-0.65575048714512, + -1.4203749903019e-05,-0.000609846740768472,0.316078883050054,-0.682269990899247, + -1.43527888035733e-05,-0.000383538059266719,0.325611692797788,-0.708789494653374, + -1.45018277047937e-05,-0.000157229377765855,0.335144502545522,-0.735308998407502, + -1.4650866605348e-05,6.90793037358972e-05,0.344677312293256,-0.761828502161629, + -1.47999055070125e-05,0.000295387985235873,0.354210122040989,-0.788348005915756, + -8.31577803500627e-06,-0.00494467412969601,0.124347900164765,-0.152750402278653, + -8.40386687445127e-06,-0.00474822162272148,0.133639642622223,-0.179417365982568, + -8.49195571367423e-06,-0.00455176911574662,0.142931385079682,-0.206084329686484, + -8.58004455289718e-06,-0.00435531660877198,0.15222312753714,-0.232751293390399, + -8.66813339217565e-06,-0.00415886410179722,0.161514869994598,-0.259418257094314, + -8.75622223101002e-06,-0.0039624115948218,0.170806612452057,-0.286085220798229, + -8.84431107045502e-06,-0.00376595908784738,0.180098354909515,-0.312752184502144, + -8.93239990995554e-06,-0.00356950658087274,0.189390097366974,-0.339419148206059, + -9.02048874912298e-06,-0.00337305407389787,0.198681839824432,-0.366086111909974, + -9.10857758806838e-06,-0.00317660156692279,0.20797358228189,-0.39275307561389, + -9.19666642751338e-06,-0.00298014905994859,0.217265324739348,-0.419420039317805, + -9.28475526718042e-06,-0.00278369655297395,0.226557067196807,-0.44608700302172, + -9.37284410640338e-06,-0.0025872440459993,0.235848809654265,-0.472753966725635, + -9.46093294507122e-06,-0.00239079153902422,0.245140552111723,-0.49942093042955, + -9.54902178451622e-06,-0.0021943390320498,0.254432294569181,-0.526087894133466, + -9.63711062396122e-06,-0.00199788652507493,0.26372403702664,-0.552754857837381, + -9.72519946285111e-06,-0.00180143401809985,0.273015779484098,-0.579421821541296, + -9.81328830229611e-06,-0.00160498151112498,0.282307521941557,-0.606088785245211, + -9.90137714129702e-06,-0.00140852900415034,0.291599264399015,-0.632755748949126, + -9.98946598051997e-06,-0.00121207649717503,0.300891006856474,-0.659422712653041, + -1.0077554820187e-05,-0.00101562399020105,0.310182749313932,-0.686089676356957, + -1.0165643659743e-05,-0.000819171483227077,0.31947449177139,-0.712756640060872, + -1.02537324984109e-05,-0.000622718976251324,0.328766234228849,-0.739423603764787, + -1.03418213375228e-05,-0.00042626646927646,0.338057976686307,-0.766090567468702, + -1.04299101771899e-05,-0.000229813962302483,0.347349719143765,-0.792757531172617, + -6.10357661676164e-06,-0.00480328062227675,0.123526931414982,-0.153410240587686, + -6.15554023142284e-06,-0.0046301253796257,0.132634880473999,-0.180188980554842, + -6.20750384611179e-06,-0.00445697013697488,0.141742829533017,-0.206967720521998, + -6.25946746068973e-06,-0.00428381489432383,0.150850778592034,-0.233746460489154, + -6.31143107515664e-06,-0.00411065965167245,0.159958727651052,-0.26052520045631, + -6.36339469017866e-06,-0.00393750440902196,0.169066676710069,-0.287303940423466, + -6.41535830492312e-06,-0.00376434916637103,0.178174625769087,-0.314082680390621, + -6.46732191927901e-06,-0.00359119392371943,0.187282574828105,-0.340861420357777, + -6.51928553385694e-06,-0.00341803868106871,0.196390523887122,-0.367640160324933, + -6.57124914887897e-06,-0.003244883438418,0.20549847294614,-0.394418900292089, + -6.62321276334588e-06,-0.00307172819576684,0.214606422005158,-0.421197640259245, + -6.67517637775727e-06,-0.00289857295311524,0.223714371064175,-0.447976380226401, + -6.72713999216867e-06,-0.00272541771046386,0.232822320123193,-0.474755120193557, + -6.77910360702416e-06,-0.00255226246781337,0.241930269182211,-0.501533860160712, + -6.83106722165761e-06,-0.00237910722516221,0.251038218241228,-0.528312600127868, + -6.88303083629105e-06,-0.00220595198251106,0.260146167300246,-0.555091340095024, + -6.93499445092449e-06,-0.00203279673986034,0.269254116359263,-0.58187008006218, + -6.98695806566896e-06,-0.00185964149720919,0.278362065418281,-0.608648820029336, + -7.03892168052445e-06,-0.00168648625455869,0.287470014477298,-0.635427559996492, + -7.09088529504687e-06,-0.00151333101190732,0.296577963536316,-0.662206299963648, + -7.14284891001338e-06,-0.00134017576925727,0.305685912595333,-0.688985039930803, + -7.19481252464682e-06,-0.00116702052660589,0.314793861654351,-0.715763779897959, + -7.24677613916924e-06,-0.000993865283954065,0.323901810713369,-0.742542519865115, + -7.29873975402473e-06,-0.000820710041304018,0.333009759772386,-0.769321259832271, + -7.35070336865817e-06,-0.000647554798652639,0.342117708831404,-0.796099999799427, + -4.44801885537971e-06,-0.00469981956135423,0.122910765884985,-0.153902641662708, + -4.47887572457839e-06,-0.00454442440526293,0.131880963461904,-0.180764794113541, + -4.50973259363829e-06,-0.00438902924917117,0.140851161038824,-0.207626946564374, + -4.54058946264269e-06,-0.00423363409307931,0.149821358615744,-0.234489099015206, + -4.57144633198014e-06,-0.004078238936988,0.158791556192663,-0.261351251466039, + -4.60230320109556e-06,-0.00392284378089647,0.167761753769583,-0.288213403916872, + -4.63316007021097e-06,-0.00376744862480494,0.176731951346503,-0.315075556367705, + -4.66401693932639e-06,-0.00361205346871318,0.185702148923423,-0.341937708818537, + -4.69487380849731e-06,-0.00345665831262187,0.194672346500342,-0.36879986126937, + -4.72573067777926e-06,-0.00330126315653057,0.203642544077262,-0.395662013720203, + -4.7565875465061e-06,-0.00314586800043881,0.212612741654181,-0.422524166171036, + -4.78744441567702e-06,-0.00299047284434684,0.221582939231101,-0.449386318621868, + -4.81830128473693e-06,-0.00283507768825508,0.230553136808021,-0.476248471072701, + -4.84915815379683e-06,-0.00267968253216377,0.239523334384941,-0.503110623523534, + -4.8800150231898e-06,-0.00252428737607224,0.24849353196186,-0.529972775974366, + -4.91087189258277e-06,-0.00236889221998071,0.25746372953878,-0.556834928425199, + -4.94172876119858e-06,-0.00221349706388918,0.266433927115699,-0.583697080876032, + -4.97258563092462e-06,-0.00205810190779876,0.275404124692619,-0.610559233326865, + -5.00344250009555e-06,-0.00190270675170634,0.284374322269539,-0.637421385777697, + -5.03429936904443e-06,-0.00174731159561459,0.293344519846459,-0.66428353822853, + -5.06515623788228e-06,-0.00159191643952283,0.302314717423378,-0.691145690679363, + -5.09601310771934e-06,-0.00143652128343286,0.311284915000297,-0.718007843130195, + -5.12686997633516e-06,-0.00128112612733977,0.320255112577218,-0.744869995581028, + -5.15772684561711e-06,-0.00112573097124891,0.329225310154137,-0.771732148031861, + -5.18858371423292e-06,-0.000970335815156265,0.338195507731057,-0.798594300482694, + -3.22438332248098e-06,-0.00462463571043847,0.122454373884297,-0.154265820390697, + -3.24295788739493e-06,-0.00448254515153534,0.131322643807124,-0.18118949512744, + -3.26153245189253e-06,-0.00434045459263144,0.140190913729951,-0.208113169864183, + -3.28010701661219e-06,-0.00419836403372775,0.149059183652778,-0.235036844600927, + -3.29868158122082e-06,-0.0040562734748244,0.157927453575604,-0.26196051933767, + -3.31725614638456e-06,-0.00391418291592127,0.166795723498431,-0.288884194074413, + -3.33583071099319e-06,-0.0037720923570177,0.175663993421258,-0.315807868811157, + -3.35440527521325e-06,-0.00363000179811346,0.184532263344085,-0.3427315435479, + -3.37297983982188e-06,-0.00348791123920966,0.193400533266912,-0.369655218284643, + -3.39155440481909e-06,-0.00334582068030653,0.202268803189739,-0.396578893021386, + -3.41012896953874e-06,-0.00320373012140318,0.211137073112565,-0.423502567758129, + -3.42870353464697e-06,-0.00306163956250005,0.220005343035392,-0.450426242494873, + -3.44727809897805e-06,-0.00291954900359603,0.228873612958219,-0.477349917231616, + -3.46585266364219e-06,-0.00277745844469224,0.237741882881046,-0.504273591968359, + -3.48442722819531e-06,-0.00263536788578911,0.246610152803872,-0.531197266705102, + -3.50300179308149e-06,-0.00249327732688531,0.255478422726699,-0.558120941441846, + -3.52157635719053e-06,-0.00235118676798152,0.264346692649526,-0.585044616178589, + -3.54015092218773e-06,-0.00220909620907839,0.273214962572353,-0.611968290915332, + -3.55872548751801e-06,-0.00206700565017526,0.282083232495179,-0.638891965652076, + -3.57730005173806e-06,-0.00192491509127146,0.290951502418006,-0.665815640388819, + -3.5958746168463e-06,-0.00178282453236811,0.299819772340833,-0.692739315125562, + -3.61444918117737e-06,-0.00164073397346387,0.30868804226366,-0.719662989862305, + -3.63302374650765e-06,-0.00149864341456096,0.317556312186487,-0.746586664599048, + -3.6515983107277e-06,-0.00135655285565761,0.326424582109313,-0.773510339335792, + -3.67017287539184e-06,-0.00121446229675293,0.335292852032141,-0.800434014072535, + -2.32827667848157e-06,-0.00457026498761604,0.122119613964616,-0.15453138438555, + -2.33966838714128e-06,-0.0044380134468488,0.130913176657392,-0.181500045523643, + -2.35106009521813e-06,-0.00430576190608123,0.139706739350168,-0.208468706661736, + -2.3624518039056e-06,-0.00417351036531433,0.148500302042944,-0.235437367799828, + -2.37384351248204e-06,-0.00404125882454709,0.15729386473572,-0.262406028937921, + -2.38523522066991e-06,-0.0039090072837793,0.166087427428497,-0.289374690076014, + -2.39662692919085e-06,-0.00377675574301195,0.174880990121273,-0.316343351214107, + -2.4080186377673e-06,-0.00364450420224505,0.183674552814049,-0.343312012352199, + -2.41941034606619e-06,-0.00351225266147748,0.192468115506825,-0.370280673490292, + -2.4308020544761e-06,-0.00338000112071013,0.201261678199602,-0.397249334628385, + -2.44219376299704e-06,-0.00324774957994278,0.210055240892378,-0.424217995766477, + -2.45358547168451e-06,-0.00311549803917566,0.218848803585154,-0.45118665690457, + -2.46497717992789e-06,-0.00298324649840853,0.22764236627793,-0.478155318042663, + -2.47636888839331e-06,-0.00285099495764096,0.236435928970707,-0.505123979180756, + -2.4877605971918e-06,-0.0027187434168745,0.245229491663482,-0.532092640318848, + -2.49915230521314e-06,-0.00258649187610605,0.254023054356259,-0.559061301456941, + -2.51054401390061e-06,-0.00245424033533936,0.262816617049035,-0.586029962595034, + -2.52193572225501e-06,-0.00232198879457179,0.271610179741811,-0.612998623733127, + -2.53332743027634e-06,-0.00218973725380378,0.280403742434588,-0.639967284871219, + -2.5447191394079e-06,-0.00205748571303754,0.289197305127364,-0.666935946009312, + -2.55611084742924e-06,-0.00192523417226953,0.29799086782014,-0.693904607147405, + -2.56750255700489e-06,-0.00179298263150374,0.306784430512916,-0.720873268285498, + -2.5788942649152e-06,-0.00166073109073617,0.315577993205692,-0.747841929423591, + -2.59028597304756e-06,-0.00152847954996815,0.324371555898468,-0.774810590561683, + -2.60167768129094e-06,-0.00139622800920058,0.333165118591245,-0.801779251699776, + -1.67644137261114e-06,-0.00453107958152321,0.121875824737514,-0.154724345946967, + -1.68357980206979e-06,-0.0044060357095308,0.130615011347768,-0.18172569467229, + -1.69071823136191e-06,-0.00428099183753794,0.139354197958022,-0.208727043397613, + -1.69785666087607e-06,-0.00415594796554553,0.148093384568276,-0.235728392122936, + -1.7049950902237e-06,-0.00403090409355278,0.15683257117853,-0.262729740848259, + -1.71213351973787e-06,-0.00390586022156025,0.165571757788784,-0.289731089573582, + -1.71927194902999e-06,-0.0037808163495674,0.174310944399038,-0.316732438298905, + -1.72641037865517e-06,-0.0036557724775752,0.183050131009291,-0.343733787024228, + -1.73354880789178e-06,-0.00353072860558257,0.191789317619545,-0.37073513574955, + -1.74068723712839e-06,-0.00340568473358949,0.2005285042298,-0.397736484474873, + -1.74782566630949e-06,-0.00328064086159663,0.209267690840053,-0.424737833200196, + -1.75496409560161e-06,-0.00315559698960377,0.218006877450308,-0.451739181925519, + -1.76210252567088e-06,-0.00303055311761202,0.226746064060561,-0.478740530650842, + -1.769240954963e-06,-0.00290550924561916,0.235485250670815,-0.505741879376165, + -1.77637938436614e-06,-0.00278046537362675,0.244224437281069,-0.532743228101488, + -1.78351781343622e-06,-0.00265542150163389,0.252963623891323,-0.559744576826811, + -1.79065624295038e-06,-0.00253037762964103,0.261702810501577,-0.586745925552133, + -1.79779467246455e-06,-0.00240533375764884,0.270441997111831,-0.613747274277456, + -1.80493310175667e-06,-0.00228028988565621,0.279181183722085,-0.640748623002779, + -1.81207153138185e-06,-0.00215524601366379,0.287920370332339,-0.667749971728102, + -1.81920996067397e-06,-0.00203020214167093,0.296659556942593,-0.694751320453425, + -1.82634838985507e-06,-0.00190515826967808,0.305398743552847,-0.721752669178748, + -1.83348681981332e-06,-0.00178011439768611,0.3141379301631,-0.748754017904071, + -1.84062524877238e-06,-0.0016550705256928,0.322877116773355,-0.775755366629394, + -1.84776367817552e-06,-0.00153002665369995,0.331616303383609,-0.802756715354716, + -1.20461177616216e-06,-0.00450290613835991,0.121699209898508,-0.154863910318333, + -1.20918555218674e-06,-0.00438310611066661,0.130399018822513,-0.181888901174916, + -1.21375932843337e-06,-0.00426330608297343,0.139098827746517,-0.208913892031499, + -1.21833310390285e-06,-0.00414350605527936,0.147798636670522,-0.235938882888083, + -1.22290687998294e-06,-0.00402370602758606,0.156498445594527,-0.262963873744666, + -1.22748065589651e-06,-0.00390390599989243,0.165198254518532,-0.289988864601249, + -1.23205443181007e-06,-0.00378410597219925,0.173898063442536,-0.317013855457833, + -1.23662820789017e-06,-0.00366430594450584,0.182597872366541,-0.344038846314416, + -1.24120198369271e-06,-0.00354450591681221,0.191297681290545,-0.371063837170999, + -1.24577575971729e-06,-0.00342470588911881,0.19999749021455,-0.398088828027582, + -1.25034953579739e-06,-0.00330490586142562,0.208697299138554,-0.425113818884165, + -1.25492331148891e-06,-0.00318510583373177,0.217397108062559,-0.452138809740749, + -1.25949708773554e-06,-0.00306530580603881,0.226096916986563,-0.479163800597332, + -1.26407086342706e-06,-0.00294550577834496,0.234796725910568,-0.506188791453915, + -1.2686446392296e-06,-0.00282570575065111,0.243496534834573,-0.533213782310498, + -1.27321841558725e-06,-0.00270590572295837,0.252196343758577,-0.560238773167082, + -1.27779219138979e-06,-0.00258610569526452,0.260896152682582,-0.587263764023665, + -1.28236596719233e-06,-0.00246630566757089,0.269595961606587,-0.614288754880248, + -1.28693974266181e-06,-0.00234650563987682,0.278295770530592,-0.641313745736832, + -1.29151351868639e-06,-0.00222670561218363,0.286995579454596,-0.668338736593415, + -1.29608729471098e-06,-0.00210690558449,0.295695388378601,-0.695363727449998, + -1.30066107051352e-06,-0.00198710555679638,0.304395197302605,-0.722388718306581, + -1.30523484676015e-06,-0.00186730552910364,0.31309500622661,-0.749413709163165, + -1.30980862256269e-06,-0.00174750550141001,0.321794815150614,-0.776438700019748, + -1.31438239836523e-06,-0.00162770547371593,0.330494624074619,-0.803463690876331, + -9.74813355643089e-05,-0.0141674375286459,0.162402249079949,-0.132751372904114, + -0.000104267816828707,-0.0135156735364591,0.178340305057565,-0.154321479317847, + -0.000111054298092883,-0.0128639095442722,0.194278361035181,-0.17589158573158, + -0.000117840779357337,-0.0122121455520854,0.210216417012796,-0.197461692145313, + -0.000124627260621624,-0.0115603815598984,0.226154472990412,-0.219031798559046, + -0.000131413741886022,-0.0109086175677116,0.242092528968028,-0.240601904972779, + -0.000138200223150531,-0.0102568535755247,0.258030584945644,-0.262172011386512, + -0.000144986704414818,-0.00960508958333794,0.27396864092326,-0.283742117800245, + -0.000151773185678716,-0.00895332559115047,0.289906696900876,-0.305312224213978, + -0.000158559666943503,-0.00830156159896456,0.305844752878491,-0.326882330627711, + -0.000165346148207846,-0.00764979760677731,0.321782808856107,-0.348452437041444, + -0.000172132629471466,-0.00699803361458984,0.337720864833723,-0.370022543455177, + -0.000178919110736309,-0.00634626962240348,0.353658920811339,-0.39159264986891, + -0.000185705592000263,-0.00569450563021601,0.369596976788955,-0.413162756282643, + -0.000192492073264772,-0.00504274163802965,0.38553503276657,-0.434732862696375, + -0.000199278554529281,-0.00439097764584306,0.401473088744186,-0.456302969110108, + -0.000206065035793346,-0.00373921365365559,0.417411144721802,-0.477873075523841, + -0.000212851517058077,-0.00308744966146879,0.433349200699418,-0.499443181937574, + -0.000219637998322253,-0.00243568566928243,0.449287256677033,-0.521013288351307, + -0.000226424479586318,-0.00178392167709474,0.465225312654649,-0.54258339476504, + -0.000233210960850716,-0.00113215768490837,0.481163368632265,-0.564153501178773, + -0.000239997442115225,-0.000480393692722014,0.49710142460988,-0.585723607592506, + -0.000246783923379956,0.000171370299464346,0.513039480587496,-0.607293714006238, + -0.000253570404643355,0.000823134291652927,0.528977536565112,-0.628863820419972, + -0.000260356885907753,0.00147489828383973,0.544915592542728,-0.650433926833705, + -9.65572740553866e-05,-0.014028497454653,0.162096622487676,-0.133090820295134, + -0.000103230369417728,-0.0133764810638287,0.177965576355787,-0.154714222971821, + -0.000109903464780126,-0.0127244646730047,0.193834530223897,-0.176337625648509, + -0.000116576560142301,-0.0120724482821802,0.209703484092008,-0.197961028325197, + -0.000123249655504754,-0.0114204318913559,0.225572437960119,-0.219584431001884, + -0.000129922750866984,-0.0107684155005316,0.24144139182823,-0.241207833678572, + -0.00013659584622927,-0.0101163991097073,0.25731034569634,-0.262831236355259, + -0.000143268941591779,-0.00946438271888339,0.273179299564451,-0.284454639031947, + -0.000149942036954065,-0.00881236632805904,0.289048253432562,-0.306078041708635, + -0.000156615132316462,-0.00816034993723491,0.304917207300672,-0.327701444385322, + -0.000163288227678748,-0.00750833354641078,0.320786161168783,-0.34932484706201, + -0.000169961323041257,-0.00685631715558643,0.336655115036894,-0.370948249738697, + -0.00017663441840321,-0.00620430076476186,0.352524068905005,-0.392571652415385, + -0.000183307513765607,-0.00555228437393773,0.368393022773115,-0.414195055092073, + -0.000189980609127893,-0.0049002679831136,0.384261976641226,-0.43581845776876, + -0.000196653704490402,-0.00424825159228925,0.400130930509337,-0.457441860445448, + -0.000203326799852799,-0.00359623520146535,0.415999884377447,-0.479065263122136, + -0.000209999895215085,-0.00294421881064122,0.431868838245558,-0.500688665798823, + -0.000216672990577482,-0.00229220241981709,0.447737792113668,-0.52231206847551, + -0.000223346085939324,-0.00164018602899185,0.463606745981779,-0.543935471152198, + -0.000230019181302055,-0.000988169638167946,0.47947569984989,-0.565558873828886, + -0.000236692276664119,-0.00033615324734404,0.495344653718,-0.587182276505574, + -0.000243365372026849,0.000315863143479866,0.511213607586111,-0.608805679182261, + -0.000250038467389024,0.000967879534304661,0.527082561454222,-0.630429081858949, + -0.000256711562751422,0.00161989592512812,0.542951515322332,-0.652052484535637, + -9.52928558560773e-05,-0.0138401336541844,0.161677504997964,-0.133553902126001, + -0.000101812081613084,-0.0131879760277055,0.177451846744137,-0.155250012773586, + -0.00010833130737059,-0.012535818401227,0.193226188490309,-0.176946123421171, + -0.000114850533127819,-0.0118836607747481,0.209000530236482,-0.198642234068756, + -0.000121369758885159,-0.0112315031482696,0.224774871982655,-0.220338344716342, + -0.000127888984642277,-0.0105793455217907,0.240549213728828,-0.242034455363927, + -0.000134408210399339,-0.00992718789531177,0.256323555475001,-0.263730566011512, + -0.000140927436156624,-0.00927503026883314,0.272097897221174,-0.285426676659097, + -0.00014744666191413,-0.00862287264235473,0.287872238967346,-0.307122787306682, + -0.000153965887671081,-0.00797071501587543,0.303646580713519,-0.328818897954267, + -0.000160485113428255,-0.00731855738939657,0.319420922459692,-0.350515008601852, + -0.000167004339185484,-0.00666639976291794,0.335195264205865,-0.372211119249437, + -0.000173523564942935,-0.00601424213643975,0.350969605952038,-0.393907229897022, + -0.00018004279069983,-0.00536208450996045,0.366743947698211,-0.415603340544608, + -0.000186562016457503,-0.00470992688348226,0.382518289444383,-0.437299451192192, + -0.000193081242214621,-0.00405776925700319,0.398292631190556,-0.458995561839777, + -0.00019960046797185,-0.00340561163052455,0.414066972936729,-0.480691672487363, + -0.000206119693728524,-0.00275345400404503,0.429841314682902,-0.502387783134948, + -0.000212638919486308,-0.00210129637756706,0.445615656429075,-0.524083893782533, + -0.000219158145243648,-0.00144913875108843,0.461389998175247,-0.545780004430118, + -0.000225677371000765,-0.000796981124609797,0.47716433992142,-0.567476115077703, + -0.000232196596757661,-0.000144823498130275,0.492938681667593,-0.589172225725288, + -0.000238715822515001,0.000507334128347914,0.508713023413766,-0.610868336372873, + -0.000245235048272341,0.00115949175482699,0.524487365159939,-0.632564447020458, + -0.00025175427402957,0.00181164938130562,0.540261706906112,-0.654260557668043, + -9.35773171724386e-05,-0.0135877673676663,0.16110716638979,-0.134179662358041, + -9.98901491691129e-05,-0.01293579158175,0.176753033212161,-0.155974022934056, + -0.000106202981165704,-0.0122838157958333,0.192398900034533,-0.177768383510071, + -0.000112515813162462,-0.0116318400099168,0.208044766856905,-0.199562744086086, + -0.000118828645158886,-0.0109798642240001,0.223690633679277,-0.221357104662101, + -0.000125141477155644,-0.0103278884380839,0.239336500501648,-0.243151465238116, + -0.000131454309152346,-0.00967591265216727,0.25498236732402,-0.264945825814131, + -0.000137767141149103,-0.00902393686625103,0.270628234146391,-0.286740186390146, + -0.00014407997314575,-0.00837196108033433,0.286274100968763,-0.308534546966161, + -0.000150392805142396,-0.00771998529441764,0.301919967791135,-0.330328907542176, + -0.000156705637138765,-0.00706800950850095,0.317565834613507,-0.35212326811819, + -0.000163018469135578,-0.00641603372258448,0.333211701435879,-0.373917628694206, + -0.000169331301132059,-0.00576405793666801,0.34885756825825,-0.39571198927022, + -0.000175644133128872,-0.00511208215075176,0.364503435080622,-0.417506349846236, + -0.000181956965125463,-0.00446010636483507,0.380149301902994,-0.43930071042225, + -0.000188269797122276,-0.0038081305789186,0.395795168725365,-0.461095070998265, + -0.000194582629118534,-0.00315615479300213,0.411441035547736,-0.48288943157428, + -0.000200895461115125,-0.00250417900708499,0.427086902370109,-0.504683792150295, + -0.000207208293111827,-0.00185220322116852,0.442732769192481,-0.52647815272631, + -0.000213521125108751,-0.00120022743525228,0.458378636014852,-0.548272513302325, + -0.000219833957105675,-0.000548251649336695,0.474024502837223,-0.57006687387834, + -0.000226146789102044,0.000103724136580219,0.489670369659595,-0.591861234454355, + -0.000232459621098746,0.000755699922497133,0.505316236481967,-0.61365559503037, + -0.000238772453095115,0.00140767570841405,0.520962103304339,-0.635449955606385, + -0.00024508528509215,0.00205965149432963,0.53660797012671,-0.6572443161824, + -9.12763325408017e-05,-0.0132549861448596,0.160339171693365,-0.135014457284623, + -9.73166533757563e-05,-0.012603920691451,0.175812526399135,-0.156939888097433, + -0.000103356974210655,-0.0119528552380422,0.191285881104906,-0.178865318910243, + -0.000109397295045666,-0.0113017897846338,0.206759235810677,-0.200790749723053, + -0.000115437615880509,-0.0106507243312249,0.222232590516448,-0.222716180535863, + -0.000121477936715408,-0.00999965887781618,0.237705945222219,-0.244641611348672, + -0.000127518257550474,-0.00934859342440775,0.253179299927989,-0.266567042161482, + -0.000133558578384985,-0.00869752797099843,0.26865265463376,-0.288492472974292, + -0.000139598899220106,-0.00804646251759,0.284126009339531,-0.310417903787102, + -0.000145639220055005,-0.00739539706418135,0.299599364045302,-0.332343334599912, + -0.000151679540889793,-0.0067443316107727,0.315072718751072,-0.354268765412722, + -0.000157719861724637,-0.00609326615736361,0.330546073456844,-0.376194196225532, + -0.00016376018255948,-0.00544220070395474,0.346019428162614,-0.398119627038342, + -0.000169800503394657,-0.00479113525054675,0.361492782868385,-0.420045057851152, + -0.000175840824229168,-0.00414006979713699,0.376966137574156,-0.441970488663961, + -0.000181881145064344,-0.00348900434372923,0.392439492279926,-0.463895919476771, + -0.000187921465898966,-0.00283793889031991,0.407912846985697,-0.485821350289581, + -0.000193961786734143,-0.00218687343691171,0.423386201691468,-0.507746781102391, + -0.000200002107569208,-0.00153580798350306,0.438859556397239,-0.529672211915201, + -0.000206042428403941,-0.000884742530093963,0.45433291110301,-0.551597642728011, + -0.000212082749239451,-0.000233677076686423,0.46980626580878,-0.573523073540821, + -0.00021812307007385,0.000417388376722894,0.485279620514551,-0.595448504353631, + -0.000224163390908694,0.00106845383013132,0.500752975220321,-0.61737393516644, + -0.000230203711743759,0.00171951928354064,0.516226329926093,-0.639299365979251, + -0.000236244032578714,0.00237058473694907,0.531699684631864,-0.66122479679206, + -8.82374095284577e-05,-0.0128253175285241,0.159319636936119,-0.136109234287343, + -9.39254667058353e-05,-0.0121766047217775,0.174564812783837,-0.158206554837878, + -9.9613523883324e-05,-0.011527891915031,0.189809988631556,-0.180303875388413, + -0.000105301581060924,-0.0108791791082846,0.205055164479274,-0.202401195938947, + -0.00011098963823819,-0.0102304663015381,0.220300340326992,-0.224498516489482, + -0.000116677695415845,-0.00958175349479196,0.23554551617471,-0.246595837040017, + -0.000122365752593112,-0.00893304068804524,0.250790692022428,-0.268693157590552, + -0.000128053809770712,-0.00828432788129851,0.266035867870147,-0.290790478141087, + -0.000133741866948089,-0.00763561507455224,0.281281043717865,-0.312887798691621, + -0.000139429924125523,-0.00698690226780552,0.296526219565583,-0.334985119242156, + -0.0001451179813029,-0.0063381894610588,0.311771395413301,-0.357082439792691, + -0.0001508060384805,-0.00568947665431252,0.32701657126102,-0.379179760343226, + -0.000156494095657767,-0.00504076384756602,0.342261747108738,-0.401277080893761, + -0.000162182152835366,-0.00439205104081974,0.357506922956456,-0.423374401444295, + -0.000167870210012744,-0.00374333823407302,0.372752098804174,-0.44547172199483, + -0.000173558267190344,-0.00309462542732675,0.387997274651892,-0.467569042545365, + -0.000179246324367499,-0.00244591262058003,0.40324245049961,-0.4896663630959, + -0.000184934381544877,-0.00179719981383308,0.418487626347329,-0.511763683646435, + -0.000190622438722476,-0.00114848700708681,0.433732802195047,-0.533861004196969, + -0.000196310495899743,-0.000499774200339864,0.448977978042766,-0.555958324747504, + -0.000201998553077343,0.00014893860640619,0.464223153890484,-0.578055645298039, + -0.000207686610254498,0.000797651413153133,0.479468329738202,-0.600152965848574, + -0.000213374667432431,0.00144636421989919,0.49471350558592,-0.622250286399108, + -0.000219062724609587,0.00209507702664569,0.509958681433638,-0.644347606949643, + -0.000224750781787408,0.00274378983339219,0.525203857281357,-0.666444927500178, + -8.43049934345363e-05,-0.0122855440681731,0.157991628026262,-0.137513206647351, + -8.95502806999571e-05,-0.0116417768731061,0.172940957703181,-0.159830963359894, + -9.47955679653223e-05,-0.010998009678039,0.187890287380099,-0.182148720072438, + -0.000100040855230688,-0.0103542424829719,0.202839617057018,-0.204466476784981, + -0.000105286142495997,-0.00971047528790492,0.217788946733937,-0.226784233497524, + -0.000110531429761307,-0.00906670809283783,0.232738276410855,-0.249101990210067, + -0.000115776717026672,-0.00842294089777051,0.247687606087774,-0.27141974692261, + -0.000121022004292204,-0.00777917370270398,0.262636935764693,-0.293737503635154, + -0.00012626729155768,-0.00713540650763678,0.277586265441612,-0.316055260347697, + -0.000131512578822324,-0.00649163931256913,0.29253559511853,-0.33837301706024, + -0.0001367578660878,-0.00584787211750215,0.307484924795449,-0.360690773772783, + -0.000142003153352888,-0.00520410492243473,0.322434254472368,-0.383008530485326, + -0.000147248440618641,-0.00456033772736819,0.337383584149286,-0.405326287197869, + -0.000152493727884173,-0.00391657053230121,0.352332913826205,-0.427644043910413, + -0.00015773901514915,-0.00327280333723379,0.367282243503124,-0.449961800622956, + -0.000162984302414571,-0.00262903614216681,0.382231573180043,-0.472279557335499, + -0.000168229589679658,-0.00198526894709938,0.397180902856961,-0.494597314048042, + -0.00017347487694519,-0.0013415017520324,0.41213023253388,-0.516915070760586, + -0.000178720164210611,-0.000697734556965424,0.427079562210799,-0.539232827473128, + -0.000183965451476253,-5.39673618988878e-05,0.442028891887717,-0.561550584185672, + -0.00018921073874123,0.000589799833168758,0.456978221564636,-0.583868340898215, + -0.000194456026006318,0.00123356702823596,0.471927551241555,-0.606186097610758, + -0.000199701313271627,0.00187733422330361,0.486876880918474,-0.628503854323301, + -0.000204946600537048,0.00252110141837036,0.501826210595393,-0.650821611035845, + -0.000210191887802802,0.00316486861343668,0.516775540272311,-0.673139367748388, + -7.93491674057067e-05,-0.0116305897499808,0.156304265631554,-0.139262949186268, + -8.40577919143937e-05,-0.0109960276981653,0.170879818105791,-0.161855431057774, + -8.8766416422692e-05,-0.0103614656463494,0.185455370580027,-0.184447912929279, + -9.34750409314344e-05,-0.00972690359453376,0.200030923054264,-0.207040394800784, + -9.81836654398993e-05,-0.00909234154271821,0.214606475528501,-0.22963287667229, + -0.000102892289948364,-0.00845777949090232,0.229182028002737,-0.252225358543795, + -0.000107600914456663,-0.00782321743908621,0.243757580476974,-0.274817840415301, + -0.000112309538965294,-0.00718865538727065,0.258333132951211,-0.297410322286806, + -0.000117018163473759,-0.00655409333545487,0.272908685425448,-0.320002804158311, + -0.000121726787982279,-0.00591953128363887,0.287484237899685,-0.342595286029817, + -0.000126435412490911,-0.00528496923182353,0.302059790373921,-0.365187767901322, + -0.000131144036999542,-0.00465040718000798,0.316635342848158,-0.387780249772827, + -0.00013585266150784,-0.00401584512819197,0.331210895322394,-0.410372731644333, + -0.000140561286016583,-0.00338128307637642,0.345786447796631,-0.432965213515838, + -0.00014526991052477,-0.00274672102455997,0.360362000270868,-0.455557695387344, + -0.000149978535033402,-0.00211215897274442,0.374937552745105,-0.478150177258849, + -0.000154687159542144,-0.00147759692092908,0.389513105219341,-0.500742659130354, + -0.000159395784050553,-0.000843034869112858,0.404088657693578,-0.52333514100186, + -0.000164104408558963,-0.0002084728172973,0.418664210167815,-0.545927622873365, + -0.000168813033067816,0.000426089234518034,0.433239762642051,-0.56852010474487, + -0.000173521657576226,0.00106065128633359,0.447815315116288,-0.591112586616376, + -0.000178230282084746,0.00169521333814959,0.462390867590525,-0.613705068487881, + -0.000182938906593266,0.00232977538996559,0.476966420064761,-0.636297550359386, + -0.000187647531101343,0.00296433744178204,0.491541972538998,-0.658890032230892, + -0.000192356155610529,0.00359889949359671,0.506117525013235,-0.681482514102397, + -7.33084283427998e-05,-0.0108690271586309,0.154227234967652,-0.141367541756875, + -7.7395808252001e-05,-0.0102500226536285,0.168345754685598,-0.164290463402033, + -8.14831881611466e-05,-0.00963101814862588,0.182464274403545,-0.187213385047191, + -8.55705680705143e-05,-0.00901201364362358,0.196582794121492,-0.210136306692349, + -8.96579479794934e-05,-0.00839300913862084,0.210701313839439,-0.233059228337508, + -9.37453278886391e-05,-0.00777400463361799,0.224819833557386,-0.255982149982666, + -9.78327077979513e-05,-0.00715500012861559,0.238938353275333,-0.278905071627824, + -0.000101920087707263,-0.00653599562361329,0.253056872993279,-0.301827993272982, + -0.000106007467616687,-0.00591699111861121,0.267175392711226,-0.32475091491814, + -0.000110094847525444,-0.00529798661360847,0.281293912429172,-0.347673836563299, + -0.000114182227434312,-0.00467898210860529,0.295412432147119,-0.370596758208457, + -0.000118269607344068,-0.00405997760360322,0.309530951865066,-0.393519679853615, + -0.000122356987252714,-0.00344097309860025,0.323649471583013,-0.416442601498773, + -0.000126444367162137,-0.00282196859359796,0.33776799130096,-0.439365523143932, + -0.000130531747071783,-0.00220296408859588,0.351886511018906,-0.46228844478909, + -0.000134619126980651,-0.00158395958359314,0.366005030736853,-0.485211366434248, + -0.00013870650688963,-0.000964955078589957,0.3801235504548,-0.508134288079406, + -0.00014279388679872,-0.000345950573587661,0.394242070172747,-0.531057209724564, + -0.000146881266707699,0.000273053931415079,0.408360589890693,-0.553980131369722, + -0.000150968646617455,0.000892058436416931,0.42247910960864,-0.576903053014881, + -0.000155056026526768,0.00151106294141945,0.436597629326587,-0.599825974660039, + -0.000159143406435525,0.00213006744642241,0.450716149044534,-0.622748896305197, + -0.000163230786345059,0.00274907195142449,0.46483466876248,-0.645671817950355, + -0.000167318166253705,0.00336807645642789,0.478953188480428,-0.668594739595514, + -0.00017140554616335,0.00398708096142952,0.493071708198374,-0.691517661240672, + -6.62387076846849e-05,-0.0100268952049943,0.151768758559499,-0.143793472285164, + -6.96463069615461e-05,-0.00943192434013529,0.165350365663682,-0.167097286624643, + -7.30539062381852e-05,-0.00883695347527602,0.178931972767865,-0.190401100964121, + -7.64615055150464e-05,-0.00824198261041698,0.192513579872047,-0.2137049153036, + -7.98691047917965e-05,-0.00764701174555782,0.20609518697623,-0.237008729643079, + -8.32767040687687e-05,-0.00705204088069888,0.219676794080413,-0.260312543982558, + -8.66843033453524e-05,-0.00645707001583928,0.233258401184596,-0.283616358322036, + -9.0091902622158e-05,-0.00586209915098057,0.246840008288779,-0.306920172661515, + -9.34995018992413e-05,-0.00526712828612164,0.260421615392961,-0.330223987000994, + -9.69071011758804e-05,-0.0046721574212627,0.274003222497144,-0.353527801340473, + -0.000100314700452242,-0.00407718655640266,0.287584829601327,-0.376831615679952, + -0.000103722299729547,-0.00348221569154439,0.30116643670551,-0.400135430019431, + -0.000107129899006408,-0.00288724482668568,0.314748043809692,-0.423439244358909, + -0.000110537498283048,-0.00229227396182585,0.328329650913876,-0.446743058698388, + -0.000113945097559465,-0.00169730309696625,0.341911258018059,-0.470046873037867, + -0.000117352696836104,-0.00110233223210687,0.355492865122241,-0.493350687377346, + -0.000120760296113631,-0.000507361367248826,0.369074472226424,-0.516654501716824, + -0.000124167895390159,8.76094976105524e-05,0.382656079330607,-0.539958316056303, + -0.000127575494666909,0.000682580362469709,0.39623768643479,-0.563262130395782, + -0.000130983093942993,0.00127755122732998,0.409819293538973,-0.586565944735261, + -0.000134390693220521,0.00187252209218736,0.423400900643154,-0.60986975907474, + -0.00013779829249716,0.00246749295704696,0.436982507747338,-0.633173573414219, + -0.000141205891773799,0.00306246382190656,0.450564114851521,-0.656477387753697, + -0.000144613491050771,0.00365743468676527,0.464145721955704,-0.679781202093176, + -0.000148021090327299,0.00425240555162532,0.477727329059887,-0.703085016432655, + -5.83493734662988e-05,-0.00914679607477842,0.148990860315642,-0.146456348314583, + -6.1060915826916e-05,-0.00858576022960544,0.161970663058358,-0.17017825790191, + -6.37724581875609e-05,-0.00802472438443202,0.174950465801074,-0.193900167489237, + -6.64840005480949e-05,-0.0074636885392585,0.18793026854379,-0.217622077076563, + -6.91955429087954e-05,-0.00690265269408552,0.200910071286505,-0.24134398666389, + -7.19070852696069e-05,-0.00634161684891255,0.213889874029221,-0.265065896251217, + -7.46186276303629e-05,-0.00578058100373946,0.226869676771936,-0.288787805838544, + -7.73301699908968e-05,-0.00521954515856615,0.239849479514652,-0.312509715425871, + -8.00417123514308e-05,-0.00465850931339284,0.252829282257368,-0.336231625013198, + -8.27532547122423e-05,-0.00409747346821976,0.265809085000084,-0.359953534600524, + -8.54647970731648e-05,-0.0035364376230469,0.278788887742799,-0.383675444187851, + -8.81763394339208e-05,-0.00297540177787403,0.291768690485515,-0.407397353775178, + -9.08878817946768e-05,-0.00241436593270072,0.304748493228231,-0.431119263362505, + -9.35994241548777e-05,-0.00185333008752675,0.317728295970947,-0.454841172949832, + -9.63109665156336e-05,-0.00129229424235366,0.330708098713663,-0.478563082537159, + -9.90225088760566e-05,-0.000731258397180579,0.343687901456378,-0.502284992124486, + -0.000101734051237257,-0.000170222552007715,0.356667704199094,-0.526006901711812, + -0.000104445593597458,0.000390813293166037,0.36964750694181,-0.549728811299139, + -0.000107157135958214,0.000951849138338901,0.382627309684525,-0.573450720886466, + -0.000109868678319414,0.00151288498351176,0.395607112427241,-0.597172630473793, + -0.00011258022068017,0.00207392082868463,0.408586915169957,-0.62089454006112, + -0.000115291763040704,0.00263495667385749,0.421566717912672,-0.644616449648447, + -0.000118003305400793,0.00319599251903213,0.434546520655388,-0.668338359235773, + -0.000120714847761549,0.00375702836420455,0.447526323398104,-0.692060268823101, + -0.000123426390122194,0.0043180642093783,0.46050612614082,-0.715782178410427, + -5.00008437605282e-05,-0.0082806122605158,0.146012545416299,-0.149226898824529, + -5.20510459185441e-05,-0.00776331374063288,0.158352378488708,-0.173383809511919, + -5.41012480767544e-05,-0.00724601522075019,0.170692211561116,-0.19754072019931, + -5.61514502348537e-05,-0.00672871670086739,0.183032044633524,-0.221697630886701, + -5.82016523930085e-05,-0.0062114181809847,0.195371877705932,-0.245854541574092, + -6.02518545513853e-05,-0.005694119661102,0.207711710778341,-0.270011452261483, + -6.23020567090404e-05,-0.00517682114121887,0.220051543850749,-0.294168362948873, + -6.43522588675838e-05,-0.00465952262133662,0.232391376923157,-0.318325273636264, + -6.64024610255165e-05,-0.00414222410145371,0.244731209995565,-0.342482184323655, + -6.84526631838933e-05,-0.00362492558157146,0.257071043067973,-0.366639095011046, + -7.05028653420481e-05,-0.00310762706168832,0.269410876140382,-0.390796005698437, + -7.25530674999808e-05,-0.00259032854180563,0.28175070921279,-0.414952916385828, + -7.46032696582466e-05,-0.00207303002192294,0.294090542285198,-0.439109827073218, + -7.66534718161793e-05,-0.00155573150204003,0.306430375357606,-0.463266737760609, + -7.87036739744451e-05,-0.00103843298215733,0.318770208430015,-0.487423648448, + -8.07538761323778e-05,-0.00052113446227442,0.331110041502423,-0.511580559135391, + -8.28040782908657e-05,-3.83594239217189e-06,0.343449874574831,-0.535737469822782, + -8.48542804487984e-05,0.000513462577490742,0.355789707647239,-0.559894380510173, + -8.69044826065091e-05,0.0010307610973741,0.368129540719647,-0.584051291197563, + -8.89546847649969e-05,0.00154805961725657,0.380469373792056,-0.608208201884954, + -9.10048869232627e-05,0.00206535813713948,0.392809206864464,-0.632365112572345, + -9.30550890809734e-05,0.00258265665702284,0.405149039936873,-0.656522023259736, + -9.51052912396833e-05,0.00309995517690442,0.41748887300928,-0.680678933947127, + -9.7155493397727e-05,0.00361725369678734,0.429828706081689,-0.704835844634518, + -9.92056955558818e-05,0.00413455221666981,0.442168539154097,-0.728992755321908, + -4.1649144156386e-05,-0.00747778791928899,0.1429938539503,-0.151953420834266, + -4.31194110468991e-05,-0.00701196418013939,0.154690116754021,-0.176538419755143, + -4.45896779373012e-05,-0.00654614044099,0.166386379557741,-0.201123418676019, + -4.60599448279808e-05,-0.00608031670184073,0.178082642361462,-0.225708417596895, + -4.75302117183274e-05,-0.00561449296269123,0.189778905165182,-0.250293416517771, + -4.9000478609118e-05,-0.00514866922354185,0.201475167968903,-0.274878415438647, + -5.04707454994646e-05,-0.00468284548439235,0.213171430772624,-0.299463414359523, + -5.19410123900332e-05,-0.00421702174524308,0.224867693576344,-0.324048413280399, + -5.34112792803243e-05,-0.00375119800609336,0.236563956380065,-0.348633412201276, + -5.48815461711705e-05,-0.00328537426694431,0.248260219183785,-0.373218411122152, + -5.6351813061406e-05,-0.00281955052779437,0.259956481987506,-0.397803410043028, + -5.78220799517526e-05,-0.00235372678864443,0.271652744791227,-0.422388408963904, + -5.92923468426543e-05,-0.00188790304949538,0.283349007594947,-0.44697340788478, + -6.07626137333339e-05,-0.00142207931034699,0.295045270398667,-0.471558406805656, + -6.22328806233474e-05,-0.000956255571196385,0.306741533202388,-0.496143405726533, + -6.37031475140271e-05,-0.000490431832047111,0.318437796006109,-0.520728404647409, + -6.51734144045957e-05,-2.46080928978376e-05,0.330134058809829,-0.545313403568285, + -6.66436812952753e-05,0.000441215646250992,0.341830321613549,-0.569898402489161, + -6.81139481855109e-05,0.000907039385401376,0.353526584417271,-0.594483401410037, + -6.95842150765236e-05,0.00137286312454998,0.365222847220991,-0.619068400330913, + -7.10544819670922e-05,0.00183868686369948,0.376919110024712,-0.64365339925179, + -7.25247488566616e-05,0.00230451060284986,0.388615372828432,-0.668238398172666, + -7.39950157475633e-05,0.00277033434199936,0.400311635632153,-0.692823397093541, + -7.54652826381319e-05,0.00323615808114841,0.412007898435873,-0.717408396014418, + -7.69355495288115e-05,0.00370198182029746,0.423704161239594,-0.741993394935294, + -3.37508690498589e-05,-0.00677438140676512,0.140103258196382,-0.154493536871263, + -3.47523332031585e-05,-0.00636407390783766,0.15118765866025,-0.179477356628077, + -3.57537973568189e-05,-0.00595376640891054,0.162272059124119,-0.204461176384891, + -3.67552615102018e-05,-0.00554345890998331,0.173356459587987,-0.229444996141705, + -3.77567256637512e-05,-0.00513315141105608,0.184440860051856,-0.254428815898518, + -3.87581898171896e-05,-0.00472284391212874,0.195525260515725,-0.279412635655332, + -3.97596539704614e-05,-0.00431253641320106,0.206609660979594,-0.304396455412146, + -4.07611181241219e-05,-0.00390222891427427,0.217694061443462,-0.32938027516896, + -4.17625822773382e-05,-0.0034919214153466,0.228778461907331,-0.354364094925773, + -4.27640464311652e-05,-0.00308161391641959,0.239862862371199,-0.379347914682587, + -4.37655105844925e-05,-0.00267130641749236,0.250947262835068,-0.404331734439401, + -4.47669747383195e-05,-0.00226099891856557,0.262031663298936,-0.429315554196214, + -4.57684388915913e-05,-0.0018506914196379,0.273116063762805,-0.454299373953028, + -4.67699030453073e-05,-0.00144038392071111,0.284200464226674,-0.479283193709842, + -4.77713671985791e-05,-0.00103007642178388,0.295284864690542,-0.504267013466656, + -4.8772831352295e-05,-0.000619768922857089,0.30636926515441,-0.529250833223469, + -4.97742955052338e-05,-0.000209461423928969,0.317453665618279,-0.554234652980283, + -5.07757596593938e-05,0.000200846074997596,0.328538066082148,-0.579218472737097, + -5.17772238124437e-05,0.000611153573925272,0.339622466546017,-0.604202292493911, + -5.27786879659375e-05,0.0010214610728525,0.350706867009885,-0.629186112250724, + -5.37801521195425e-05,0.00143176857178018,0.361791267473754,-0.654169932007538, + -5.47816162728143e-05,0.00184207607070741,0.372875667937623,-0.679153751764352, + -5.57830804270854e-05,0.00225238356963331,0.383960068401491,-0.704137571521165, + -5.67845445798021e-05,0.00266269106856232,0.39504446886536,-0.729121391277979, + -5.77860087340731e-05,0.00307299856748777,0.406128869329228,-0.754105211034793, + -2.6667957315929e-05,-0.00618777214258726,0.137481549880341,-0.156742000544548, + -2.73189038292321e-05,-0.00583271698214405,0.148014448552917,-0.182078849119217, + -2.79698503422576e-05,-0.00547766182170062,0.158547347225494,-0.207415697693885, + -2.86207968553387e-05,-0.00512260666125741,0.16908024589807,-0.232752546268554, + -2.92717433685863e-05,-0.00476755150081409,0.179613144570646,-0.258089394843222, + -2.99226898816118e-05,-0.00441249634037066,0.190146043243222,-0.28342624341789, + -3.05736363946929e-05,-0.00405744117992723,0.200678941915799,-0.308763091992559, + -3.12245829076074e-05,-0.00370238601948381,0.211211840588375,-0.334099940567227, + -3.18755294210771e-05,-0.00334733085904082,0.221744739260951,-0.359436789141895, + -3.25264759336585e-05,-0.00299227569859672,0.232277637933528,-0.384773637716564, + -3.31774224470172e-05,-0.00263722053815374,0.242810536606104,-0.410110486291232, + -3.38283689602648e-05,-0.00228216537771053,0.25334343527868,-0.435447334865901, + -3.44793154735124e-05,-0.0019271102172671,0.263876333951256,-0.460784183440569, + -3.51302619864269e-05,-0.0015720550568239,0.274409232623832,-0.486121032015237, + -3.57812084994524e-05,-0.00121699989638069,0.284942131296408,-0.511457880589906, + -3.64321550127e-05,-0.000861944735937481,0.295475029968985,-0.536794729164574, + -3.70831015263917e-05,-0.000506889575494718,0.306007928641561,-0.562131577739243, + -3.77340480390842e-05,-0.0001518344150504,0.316540827314138,-0.587468426313911, + -3.83849945514436e-05,0.000203220745393473,0.327073725986714,-0.612805274888579, + -3.90359410652463e-05,0.000558275905836236,0.33760662465929,-0.638142123463248, + -3.96868875783829e-05,0.000913331066279444,0.348139523331866,-0.663478972037916, + -4.03378340910754e-05,0.00126838622672309,0.358672422004442,-0.688815820612585, + -4.09887806041009e-05,0.00162344138716675,0.369205320677019,-0.714152669187253, + -4.16397271180147e-05,0.00197849654760862,0.379738219349595,-0.739489517761921, + -4.22906736302631e-05,0.00233355170805405,0.390271118022172,-0.76482636633659, + -2.06117743312972e-05,-0.00571810715990129,0.135217681313593,-0.158643951709748, + -2.10185152314524e-05,-0.00541428565188995,0.145276817734889,-0.184279423553027, + -2.14252561317463e-05,-0.00511046414387861,0.155335954156185,-0.209914895396306, + -2.18319970321512e-05,-0.00480664263586728,0.165395090577481,-0.235550367239585, + -2.22387379325006e-05,-0.00450282112785594,0.175454226998777,-0.261185839082864, + -2.26454788325725e-05,-0.0041989996198446,0.185513363420073,-0.286821310926142, + -2.30522197330885e-05,-0.00389517811183371,0.195572499841369,-0.312456782769421, + -2.34589606333269e-05,-0.00359135660382237,0.205631636262665,-0.3380922546127, + -2.38657015336763e-05,-0.00328753509581126,0.215690772683961,-0.363727726455979, + -2.42724424338592e-05,-0.0029837135877997,0.225749909105257,-0.389363198299257, + -2.4679183333931e-05,-0.00267989207978769,0.235809045526554,-0.414998670142536, + -2.5085924234336e-05,-0.0023760705717768,0.24586818194785,-0.440634141985815, + -2.54926651341858e-05,-0.0020722490637648,0.255927318369146,-0.466269613829093, + -2.58994060349238e-05,-0.00176842755575413,0.265986454790442,-0.491905085672372, + -2.63061469346626e-05,-0.00146460604774235,0.276045591211738,-0.517540557515651, + -2.67128878348455e-05,-0.00116078453973079,0.286104727633034,-0.54317602935893, + -2.71196287353614e-05,-0.000856963031720337,0.29616386405433,-0.568811501202208, + -2.75263696358774e-05,-0.000553141523708556,0.306223000475627,-0.594446973045487, + -2.79331105359493e-05,-0.000249320015697219,0.316282136896922,-0.620082444888766, + -2.83398514364652e-05,5.45014923138964e-05,0.326341273318218,-0.645717916732044, + -2.87465923365371e-05,0.000358323000325456,0.336400409739515,-0.671353388575323, + -2.9153333236831e-05,0.000662144508337015,0.346459546160811,-0.696988860418602, + -2.95600741369029e-05,0.00096596601634813,0.356518682582107,-0.722624332261881, + -2.99668150374188e-05,0.00126978752435924,0.366577819003403,-0.748259804105159, + -3.03735559383789e-05,0.00157360903236947,0.376636955424698,-0.773895275948438, + -1.56401730516953e-05,-0.00535386897811518,0.133343846221497,-0.16019196666412, + -1.5886728459702e-05,-0.00509479837193472,0.14301247643955,-0.18607049063933, + -1.61332838677364e-05,-0.00483572776575414,0.152681106657604,-0.211949014614541, + -1.63798392761039e-05,-0.00457665715957412,0.162349736875657,-0.237827538589751, + -1.66263946840273e-05,-0.00431758655339332,0.172018367093711,-0.263706062564962, + -1.68729500921727e-05,-0.00405851594721307,0.181686997311764,-0.289584586540172, + -1.71195055003182e-05,-0.00379944534103283,0.191355627529818,-0.315463110515383, + -1.73660609084636e-05,-0.00354037473485214,0.201024257747871,-0.341341634490593, + -1.7612616316609e-05,-0.00328130412867189,0.210692887965925,-0.367220158465803, + -1.7859171724699e-05,-0.0030222335224912,0.220361518183979,-0.393098682441014, + -1.81057271327889e-05,-0.00276316291631096,0.230030148402032,-0.418977206416224, + -1.83522825406568e-05,-0.00250409231013027,0.239698778620085,-0.444855730391435, + -1.85988379493018e-05,-0.00224502170395069,0.249367408838139,-0.470734254366645, + -1.88453933576138e-05,-0.00198595109777044,0.259036039056192,-0.496612778341856, + -1.90919487651486e-05,-0.00172688049158976,0.268704669274245,-0.522491302317066, + -1.93385041739047e-05,-0.00146780988540973,0.278373299492299,-0.548369826292277, + -1.95850595816616e-05,-0.0012087392792286,0.288041929710353,-0.574248350267487, + -1.98316149898625e-05,-0.000949668673048576,0.297710559928406,-0.600126874242698, + -2.00781703979525e-05,-0.000690598066868109,0.30737919014646,-0.626005398217908, + -2.03247258061534e-05,-0.000431527460687864,0.317047820364513,-0.651883922193118, + -2.05712812143544e-05,-0.000172456854507619,0.326716450582567,-0.677762446168329, + -2.08178366216671e-05,8.66137516739585e-05,0.33638508080062,-0.703640970143539, + -2.10643920308673e-05,0.000345684357853315,0.346053711018674,-0.72951949411875, + -2.13109474387352e-05,0.000604754964034004,0.355722341236727,-0.75539801809396, + -2.1557502846381e-05,0.000863825570214694,0.365390971454781,-0.781276542069171, + -1.16930969399354e-05,-0.00507804538306245,0.131846195381745,-0.161412865062537, + -1.18395365694135e-05,-0.00485620558137778,0.141203732622371,-0.187483080957628, + -1.19859761988916e-05,-0.00463436577969289,0.150561269862996,-0.213553296852719, + -1.21324158283698e-05,-0.00441252597800801,0.159918807103622,-0.239623512747811, + -1.22788554581255e-05,-0.00419068617632368,0.169276344344247,-0.265693728642902, + -1.24252950874371e-05,-0.00396884637463835,0.178633881584873,-0.291763944537993, + -1.25717347168597e-05,-0.00374700657295346,0.187991418825499,-0.317834160433084, + -1.27181743465044e-05,-0.00352516677126924,0.197348956066124,-0.343904376328175, + -1.28646139760935e-05,-0.00330332696958435,0.206706493306749,-0.369974592223267, + -1.30110536054051e-05,-0.00308148716789947,0.216064030547375,-0.396044808118358, + -1.31574932349388e-05,-0.0028596473662148,0.225421567788,-0.422115024013449, + -1.33039328644724e-05,-0.00263780756452947,0.234779105028626,-0.44818523990854, + -1.3450372494006e-05,-0.00241596776284525,0.244136642269251,-0.474255455803631, + -1.35968121236507e-05,-0.00219412796116059,0.253494179509877,-0.500325671698722, + -1.37432517531844e-05,-0.00197228815947548,0.262851716750503,-0.526395887593814, + -1.3889691382829e-05,-0.00175044835779126,0.272209253991128,-0.552466103488905, + -1.40361310118076e-05,-0.00152860855610526,0.281566791231754,-0.578536319383996, + -1.41825706413412e-05,-0.00130676875442082,0.290924328472379,-0.604606535279087, + -1.43290102712079e-05,-0.0010849289527366,0.300281865713005,-0.630676751174178, + -1.44754499006305e-05,-0.00086308915105171,0.30963940295363,-0.656746967069269, + -1.46218895299421e-05,-0.00064124934936638,0.318996940194256,-0.68281718296436, + -1.47683291598089e-05,-0.000419409547681937,0.328354477434881,-0.708887398859452, + -1.49147687897866e-05,-0.000197569745997939,0.337712014675507,-0.734957614754543, + -1.50612084185431e-05,2.42700556878361e-05,0.347069551916133,-0.761027830649634, + -1.52076480481877e-05,0.000246109857371835,0.356427089156758,-0.787098046544725, + -8.64146219878292e-06,-0.00487274493939027,0.13068220539379,-0.162352081725297, + -8.72754007852361e-06,-0.00468071059261466,0.139798559965167,-0.188569762999573, + -8.81361795840307e-06,-0.00448867624583893,0.148914914536545,-0.214787444273849, + -8.89969583817152e-06,-0.00429664189906354,0.158031269107922,-0.241005125548125, + -8.98577371788445e-06,-0.00410460755228781,0.1671476236793,-0.2672228068224, + -9.0718515977084e-06,-0.0039125732055123,0.176263978250677,-0.293440488096676, + -9.15792947747684e-06,-0.00372053885873669,0.185380332822054,-0.319658169370952, + -9.24400735718978e-06,-0.00352850451196107,0.194496687393432,-0.345875850645227, + -9.33008523701373e-06,-0.00333647016518546,0.203613041964809,-0.372093531919503, + -9.41616311667115e-06,-0.00314443581840984,0.212729396536187,-0.398311213193779, + -9.50224099660613e-06,-0.00295240147163445,0.221845751107564,-0.424528894468055, + -9.58831887598599e-06,-0.00276036712485839,0.230962105678942,-0.45074657574233, + -9.67439675603199e-06,-0.00256833277808322,0.240078460250319,-0.476964257016606, + -9.76047463574492e-06,-0.00237629843130738,0.249194814821697,-0.503181938290882, + -9.84655251534683e-06,-0.00218426408453176,0.258311169393074,-0.529399619565157, + -9.93263039517078e-06,-0.00199222973775615,0.267427523964451,-0.555617300839433, + -1.00187082752168e-05,-0.00180019539098142,0.276543878535828,-0.581834982113709, + -1.01047861549297e-05,-0.00160816104420536,0.285660233107206,-0.608052663387985, + -1.01908640346426e-05,-0.00141612669742974,0.294776587678584,-0.63427034466226, + -1.02769419145776e-05,-0.00122409235065435,0.303892942249961,-0.660488025936536, + -1.03630197941795e-05,-0.00103205800387896,0.313009296821338,-0.686705707210812, + -1.04490976741145e-05,-0.000840023657103561,0.322125651392715,-0.712923388485088, + -1.05351755533833e-05,-0.000647989310326835,0.331242005964093,-0.739141069759363, + -1.06212534334293e-05,-0.000455954963551886,0.340358360535471,-0.765358751033639, + -1.07073313136974e-05,-0.000263920616776936,0.349474715106848,-0.791576432307915, + -6.33000884706081e-06,-0.00472178870364792,0.12979697585986,-0.163060852918376, + -6.38055721335906e-06,-0.00455291819349901,0.138730250963072,-0.189389817581125, + -6.43110558001814e-06,-0.00438404768335054,0.147663526066284,-0.215718782243874, + -6.48165394667721e-06,-0.00421517717320241,0.156596801169495,-0.242047746906623, + -6.53220231316975e-06,-0.00404630666305394,0.165530076272707,-0.268376711569372, + -6.58275067955127e-06,-0.00387743615290526,0.174463351375918,-0.294705676232121, + -6.63329904609933e-06,-0.00370856564275646,0.18339662647913,-0.32103464089487, + -6.68384741286943e-06,-0.00353969513260854,0.192329901582342,-0.347363605557619, + -6.73439577908441e-06,-0.00337082462245952,0.201263176685553,-0.373692570220368, + -6.78494414596553e-06,-0.00320195411231161,0.210196451788765,-0.400021534883117, + -6.83549251234705e-06,-0.00303308360216259,0.219129726891977,-0.426350499545865, + -6.88604087883959e-06,-0.00286421309201446,0.228063001995188,-0.452679464208614, + -6.93658924511009e-06,-0.00269534258186543,0.2369962770984,-0.479008428871363, + -6.98713761171366e-06,-0.00252647207171686,0.245929552201611,-0.505337393534112, + -7.03768597798415e-06,-0.00235760156156806,0.254862827304823,-0.531666358196861, + -7.08823434503181e-06,-0.00218873105142081,0.263796102408034,-0.55799532285961, + -7.13878271152435e-06,-0.00201986054127157,0.272729377511246,-0.584324287522359, + -7.18933107768382e-06,-0.00185099003112277,0.281662652614458,-0.610653252185108, + -7.23987944450943e-06,-0.00168211952097463,0.290595927717669,-0.636982216847857, + -7.290427811113e-06,-0.00151324901082672,0.29952920282088,-0.663311181510606, + -7.34097617716145e-06,-0.00134437850067659,0.308462477924093,-0.689640146173355, + -7.39152454387604e-06,-0.00117550799052868,0.317395753027304,-0.715969110836104, + -7.44207291070165e-06,-0.00100663748038077,0.326329028130516,-0.742298075498853, + -7.49262127719419e-06,-0.000837766970232412,0.335262303233727,-0.768627040161602, + -7.54316964357571e-06,-0.000668896460084056,0.344195578336938,-0.794956004824351, + -4.60617266223595e-06,-0.00461173345207377,0.129134773440109,-0.16358800181086, + -4.6360770110665e-06,-0.00446046600189209,0.1379312845014,-0.189999733543656, + -4.6659813601746e-06,-0.00430919855171075,0.146727795562692,-0.216411465276453, + -4.69588570917168e-06,-0.00415793110152907,0.155524306623983,-0.24282319700925, + -4.72579005805773e-06,-0.00400666365134761,0.164320817685275,-0.269234928742047, + -4.75569440705481e-06,-0.00385539620116604,0.173117328746566,-0.295646660474844, + -4.78559875621842e-06,-0.00370412875098491,0.181913839807858,-0.32205839220764, + -4.81550310504897e-06,-0.0035528613008029,0.190710350869149,-0.348470123940437, + -4.84540745371298e-06,-0.00340159385062111,0.199506861930441,-0.374881855673234, + -4.87531180287659e-06,-0.00325032640043998,0.208303372991732,-0.401293587406031, + -4.90521615181816e-06,-0.00309905895025842,0.217099884053024,-0.427705319138827, + -4.93512050103728e-06,-0.00294779150007685,0.225896395114315,-0.454117050871624, + -4.96502484970129e-06,-0.00279652404989505,0.234692906175607,-0.480528782604421, + -4.99492919903144e-06,-0.00264525659971415,0.243489417236898,-0.506940514337218, + -5.02483354802852e-06,-0.0024939891495328,0.25228592829819,-0.533352246070015, + -5.05473789735866e-06,-0.00234272169935168,0.261082439359481,-0.559763977802811, + -5.08464224591165e-06,-0.00219145424916989,0.269878950420772,-0.586175709535608, + -5.11454659557486e-06,-0.00204018679898921,0.278675461482064,-0.612587441268405, + -5.14445094412785e-06,-0.00188891934880653,0.287471972543356,-0.638999173001202, + -5.17435529268084e-06,-0.00173765189862474,0.296268483604647,-0.665410904733998, + -5.20425964178894e-06,-0.00158638444844339,0.305064994665939,-0.691822636466795, + -5.23416399056398e-06,-0.0014351169982616,0.31386150572723,-0.718234368199592, + -5.26406834000515e-06,-0.00128384954808025,0.322658016788522,-0.744646099932389, + -5.29397268922427e-06,-0.00113258209789935,0.331454527849813,-0.771057831665186, + -5.32387703788828e-06,-0.000981314647717557,0.340251038911105,-0.797469563397983, + -3.33536137761548e-06,-0.00453197127607574,0.128645489278008,-0.163975845292442, + -3.35330629214203e-06,-0.00439385947448934,0.137341051779052,-0.190448471905349, + -3.3712512069739e-06,-0.00425574767290315,0.146036614280096,-0.216921098518255, + -3.38919612141719e-06,-0.00411763587131653,0.15473217678114,-0.243393725131162, + -3.40714103619355e-06,-0.00397952406973046,0.163427739282184,-0.269866351744068, + -3.42508595096991e-06,-0.0038414122681445,0.172123301783228,-0.296338978356975, + -3.44303086557973e-06,-0.00370330046655787,0.180818864284272,-0.322811604969881, + -3.46097577996751e-06,-0.00356518866497146,0.189514426785315,-0.349284231582788, + -3.47892069452183e-06,-0.00342707686338506,0.198209989286359,-0.375756858195695, + -3.49686560979778e-06,-0.00328896506179954,0.206905551787403,-0.402229484808601, + -3.51481052418556e-06,-0.00315085326021314,0.215601114288447,-0.428702111421508, + -3.53275543873988e-06,-0.00301274145862673,0.224296676789491,-0.455174738034414, + -3.55070035351623e-06,-0.00287462965704055,0.232992239290534,-0.481647364647321, + -3.5686452678485e-06,-0.0027365178554537,0.241687801791578,-0.508119991260227, + -3.58659018273588e-06,-0.00259840605386774,0.250383364292622,-0.534592617873134, + -3.60453509751224e-06,-0.00246029425228222,0.259078926793666,-0.56106524448604, + -3.6224800122886e-06,-0.00232218245069538,0.26777448929471,-0.587537871098947, + -3.64042492673189e-06,-0.00218407064910897,0.276470051795754,-0.614010497711853, + -3.65836984095314e-06,-0.00204595884752257,0.285165614296797,-0.64048312432476, + -3.67631475572949e-06,-0.00190784704593616,0.293861176797841,-0.666955750937666, + -3.69425967094994e-06,-0.00176973524435065,0.302556739298885,-0.693428377550573, + -3.71220458550425e-06,-0.00163162344276424,0.311252301799929,-0.71990100416348, + -3.73014950005857e-06,-0.00149351164117739,0.319947864300973,-0.746373630776386, + -3.74809441494595e-06,-0.00135539983959188,0.328643426802016,-0.772846257389292, + -3.76603932938924e-06,-0.00121728803800547,0.33733898930306,-0.799318884002199, + -2.40647533106264e-06,-0.00447440157313828,0.128287254317087,-0.164258928304319, + -2.41745189122344e-06,-0.0043460014150305,0.136908960986774,-0.190776001470766, + -2.42842845105118e-06,-0.00421760125692239,0.14553066765646,-0.217293074637212, + -2.43940501060136e-06,-0.00408920109881394,0.154152374326147,-0.243810147803659, + -2.45038157059563e-06,-0.00396080094070594,0.162774080995833,-0.270327220970106, + -2.46135813081194e-06,-0.00383240078259828,0.171395787665519,-0.296844294136552, + -2.47233469019559e-06,-0.00370400062448972,0.180017494335206,-0.323361367302999, + -2.48331125013435e-06,-0.00357560046638183,0.188639201004892,-0.349878440469445, + -2.49428781012861e-06,-0.00344720030827372,0.197260907674579,-0.376395513635892, + -2.50526437001186e-06,-0.00331880015016583,0.205882614344265,-0.402912586802339, + -2.51624092972857e-06,-0.0031903999920575,0.214504321013952,-0.429429659968785, + -2.5272174895008e-06,-0.00306199983394961,0.223126027683638,-0.455946733135232, + -2.53819404938405e-06,-0.00293359967584106,0.231747734353325,-0.482463806301679, + -2.54917060948934e-06,-0.00280519951773339,0.240369441023011,-0.508980879468125, + -2.56014716915054e-06,-0.00267679935962506,0.248991147692698,-0.535497952634572, + -2.57112372914481e-06,-0.00254839920151695,0.257612854362384,-0.562015025801018, + -2.58210028902806e-06,-0.00241999904340928,0.26623456103207,-0.588532098967465, + -2.59307684924437e-06,-0.00229159888530139,0.274856267701757,-0.615049172133912, + -2.60405340890557e-06,-0.00216319872719284,0.283477974371444,-0.641566245300358, + -2.61502996845575e-06,-0.00203479856908428,0.29209968104113,-0.668083318466805, + -2.62600652878309e-06,-0.00190639841097662,0.300721387710817,-0.694600391633251, + -2.63698308833327e-06,-0.00177799825286895,0.309343094380502,-0.721117464799698, + -2.64795964821651e-06,-0.00164959809476084,0.317964801050189,-0.747634537966145, + -2.65893620798874e-06,-0.00152119793665273,0.326586507719875,-0.774151611132592, + -2.66991276809403e-06,-0.00139279777854417,0.335208214389562,-0.800668684299038, + -1.73173381648462e-06,-0.00443296884346656,0.128026715296367,-0.164464346390841, + -1.7385968573147e-06,-0.00431167376626507,0.136594736571357,-0.19101367202599, + -1.74545989839459e-06,-0.0041903786890638,0.145162757846347,-0.217562997661139, + -1.75232293919692e-06,-0.00406908361186265,0.153730779121336,-0.244112323296288, + -1.75918597999924e-06,-0.00394778853466127,0.162298800396326,-0.270661648931437, + -1.76604902096811e-06,-0.00382649345746011,0.170866821671316,-0.297210974566586, + -1.77291206215902e-06,-0.00370519838025896,0.179434842946306,-0.323760300201735, + -1.7797751027393e-06,-0.00358390330305736,0.188002864221296,-0.350309625836884, + -1.78663814376367e-06,-0.0034626082258562,0.196570885496286,-0.376858951472033, + -1.79350118501009e-06,-0.00334131314865527,0.205138906771276,-0.403408277107182, + -1.80036422559038e-06,-0.00322001807145345,0.213706928046266,-0.429957602742331, + -1.80722726617066e-06,-0.00309872299425185,0.222274949321256,-0.456506928377479, + -1.81409030741708e-06,-0.00297742791705091,0.230842970596246,-0.483056254012628, + -1.82095334844146e-06,-0.00285613283984976,0.239410991871236,-0.509605579647777, + -1.82781638924379e-06,-0.00273483776264882,0.247979013146225,-0.536154905282926, + -1.83467943026816e-06,-0.00261354268544767,0.256547034421215,-0.562704230918075, + -1.84154247073742e-06,-0.00249224760824562,0.265115055696205,-0.589253556553224, + -1.8484055117618e-06,-0.00237095253104425,0.273683076971196,-0.615802882188373, + -1.85526855300822e-06,-0.00224965745384376,0.282251098246185,-0.642352207823522, + -1.86213159347748e-06,-0.00212836237664105,0.290819119521176,-0.668901533458671, + -1.86899463494594e-06,-0.002007067299441,0.299387140796165,-0.69545085909382, + -1.8758576754152e-06,-0.00188577222223918,0.307955162071155,-0.722000184728969, + -1.88272071677265e-06,-0.00176447714503825,0.316523183346145,-0.748549510364117, + -1.88958375779702e-06,-0.00164318206783776,0.325091204621134,-0.775098835999267, + -1.89644679871037e-06,-0.00152188699063638,0.333659225896124,-0.801648161634415, + -1.24381567481735e-06,-0.00440320973356756,0.127838147741034,-0.164612777327467, + -1.24820488994759e-06,-0.00428707894052194,0.136367328783441,-0.19118540794135, + -1.25259410488354e-06,-0.00417094814747587,0.144896509825848,-0.217758038555233, + -1.25698331998603e-06,-0.00405481735443025,0.153425690868254,-0.244330669169116, + -1.26137253486647e-06,-0.00393868656138407,0.161954871910661,-0.270903299782999, + -1.26576175007997e-06,-0.00382255576833823,0.170484052953068,-0.297475930396882, + -1.27015096473837e-06,-0.00370642497529206,0.179013233995475,-0.324048561010765, + -1.2745401800629e-06,-0.00359029418224655,0.187542415037882,-0.350621191624647, + -1.27892939499885e-06,-0.00347416338920081,0.196071596080288,-0.37719382223853, + -1.28331861010134e-06,-0.00335803259615486,0.204600777122695,-0.403766452852413, + -1.28770782503729e-06,-0.0032419018031089,0.213129958165102,-0.430339083466296, + -1.29209704036182e-06,-0.00312577101006362,0.221659139207508,-0.456911714080179, + -1.29648625513124e-06,-0.00300964021701722,0.230188320249916,-0.483484344694062, + -1.30087547001168e-06,-0.00289350942397104,0.238717501292323,-0.510056975307944, + -1.30526468522518e-06,-0.00277737863092575,0.247246682334729,-0.536629605921828, + -1.30965389977256e-06,-0.00266124783787891,0.255775863377136,-0.56320223653571, + -1.31404311498606e-06,-0.0025451170448334,0.264305044419543,-0.589774867149593, + -1.31843233008855e-06,-0.00242898625178789,0.27283422546195,-0.616347497763476, + -1.32282154530206e-06,-0.00231285545874149,0.281363406504357,-0.642920128377359, + -1.32721076029352e-06,-0.00219672466569554,0.289892587546764,-0.669492758991242, + -1.33159997572907e-06,-0.00208059387265047,0.29842176858917,-0.696065389605125, + -1.33598918983235e-06,-0.00196446307960363,0.306950949631577,-0.722638020219008, + -1.34037840537893e-06,-0.00184833228655856,0.315480130673984,-0.749210650832891, + -1.34476762025937e-06,-0.00173220149351216,0.324009311716391,-0.775783281446774, + -1.34915683547288e-06,-0.0016160707004671,0.332538492758797,-0.802355912060657, + -0.000109105830328471,-0.01594016039724,0.173284557167582,-0.137133789376549, + -0.000116700637134093,-0.0153082751560351,0.189553833512804,-0.157869207663768, + -0.000124295443939881,-0.0146763899148304,0.205823109858027,-0.178604625950987, + -0.000131890250745614,-0.0140445046736256,0.222092386203249,-0.199340044238205, + -0.000139485057550959,-0.0134126194324204,0.238361662548472,-0.220075462525424, + -0.000147079864356747,-0.0127807341912156,0.254630938893694,-0.240810880812643, + -0.000154674671162314,-0.0121488489500108,0.270900215238916,-0.261546299099862, + -0.000162269477968269,-0.0115169637088064,0.287169491584139,-0.282281717387081, + -0.000169864284774002,-0.0108850784676011,0.303438767929361,-0.3030171356743, + -0.000177459091579402,-0.0102531932263963,0.319708044274584,-0.323752553961518, + -0.000185053898385412,-0.0096213079851919,0.335977320619806,-0.344487972248737, + -0.00019264870519109,-0.00898942274398706,0.352246596965028,-0.365223390535956, + -0.000200243511996878,-0.00835753750278223,0.368515873310251,-0.385958808823175, + -0.000207838318802556,-0.0077256522615774,0.384785149655473,-0.406694227110394, + -0.000215433125608011,-0.00709376702037212,0.401054426000696,-0.427429645397613, + -0.000223027932413689,-0.00646188177916751,0.417323702345918,-0.448165063684831, + -0.000230622739219033,-0.00582999653796201,0.433592978691141,-0.46890048197205, + -0.000238217546024933,-0.0051981112967574,0.449862255036363,-0.489635900259269, + -0.00024581235283061,-0.00456622605555301,0.466131531381585,-0.510371318546488, + -0.000253407159636398,-0.0039343408143484,0.482400807726808,-0.531106736833707, + -0.000261001966441965,-0.00330245557314335,0.49867008407203,-0.551842155120926, + -0.000268596773247864,-0.00267057033193874,0.514939360417253,-0.572577573408145, + -0.000276191580052987,-0.00203868509073324,0.531208636762475,-0.593312991695363, + -0.000283786386859997,-0.00140679984952996,0.547477913107697,-0.614048409982582, + -0.000291381193664564,-0.00077491460832313,0.56374718945292,-0.634783828269801, + -0.000107986145649386,-0.0157563919054167,0.172910847280786,-0.137563969118022, + -0.00011544434687738,-0.015122889278699,0.189100722839485,-0.158362325876307, + -0.00012290254810543,-0.0144893866519814,0.205290598398184,-0.179160682634591, + -0.000130360749333591,-0.0138558840252641,0.221480473956883,-0.199959039392875, + -0.000137818950561586,-0.0132223813985465,0.237670349515582,-0.220757396151159, + -0.00014527715178958,-0.0125888787718289,0.253860225074281,-0.241555752909443, + -0.000152735353017519,-0.0119553761451112,0.27005010063298,-0.262354109667727, + -0.000160193554245958,-0.0113218735183942,0.286239976191679,-0.283152466426011, + -0.000167651755474063,-0.0106883708916767,0.302429851750378,-0.303950823184295, + -0.000175109956702058,-0.0100548682649593,0.318619727309077,-0.324749179942579, + -0.000182568157930163,-0.00942136563824159,0.334809602867776,-0.345547536700863, + -0.000190026359157991,-0.00878786301152368,0.350999478426475,-0.366345893459147, + -0.000197484560386041,-0.00815436038480599,0.367189353985174,-0.387144250217431, + -0.000204942761614424,-0.00752085775808897,0.383379229543872,-0.407942606975715, + -0.000212400962842474,-0.00688735513137151,0.399569105102571,-0.428740963733999, + -0.000219859164070302,-0.00625385250465382,0.41575898066127,-0.449539320492283, + -0.000227317365298796,-0.0056203498779368,0.431948856219969,-0.470337677250567, + -0.000234775566526846,-0.00498684725121934,0.448138731778668,-0.491136034008851, + -0.000242233767754785,-0.00435334462450143,0.464328607337367,-0.511934390767135, + -0.000249691968982613,-0.0037198419977833,0.480518482896066,-0.532732747525419, + -0.000257150170210663,-0.00308633937106562,0.496708358454766,-0.553531104283703, + -0.000264608371438824,-0.00245283674434882,0.512898234013464,-0.574329461041987, + -0.000272066572667096,-0.00181933411763158,0.529088109572162,-0.595127817800271, + -0.000279524773895368,-0.00118583149091389,0.545277985130862,-0.615926174558556, + -0.000286982975122863,-0.000552328864196205,0.561467860689561,-0.636724531316839, + -0.000106456655496245,-0.0155080632490269,0.17239894562501,-0.138149426872396, + -0.000113729904062443,-0.0148726439950433,0.188480277429105,-0.159033440421043, + -0.000121003152628307,-0.0142372247410596,0.2045616092332,-0.179917453969689, + -0.000128276401194283,-0.0136018054870759,0.220642941037294,-0.200801467518335, + -0.000135549649760425,-0.0129663862330924,0.236724272841389,-0.221685481066982, + -0.000142822898326567,-0.0123309669791092,0.252805604645483,-0.242569494615628, + -0.00015009614689232,-0.011695547725125,0.268886936449578,-0.263453508164275, + -0.000157369395458518,-0.0110601284711418,0.284968268253673,-0.284337521712921, + -0.000164642644024382,-0.0104247092171579,0.301049600057767,-0.305221535261567, + -0.000171915892590357,-0.00978928996317419,0.317130931861862,-0.326105548810214, + -0.000179189141156444,-0.00915387070919071,0.333212263665957,-0.34698956235886, + -0.00018646238972253,-0.00851845145520724,0.349293595470051,-0.367873575907507, + -0.000193735638288284,-0.00788303220122333,0.365374927274146,-0.388757589456153, + -0.000201008886854592,-0.00724761294723986,0.381456259078241,-0.409641603004799, + -0.000208282135420568,-0.00661219369325639,0.397537590882335,-0.430525616553446, + -0.000215555383986432,-0.00597677443927247,0.41361892268643,-0.451409630102092, + -0.000222828632552297,-0.00534135518528855,0.429700254490525,-0.472293643650739, + -0.000230101881118827,-0.00470593593130575,0.445781586294619,-0.493177657199385, + -0.000237375129684358,-0.00407051667732161,0.461862918098714,-0.514061670748031, + -0.000244648378250667,-0.00343509742333836,0.477944249902808,-0.534945684296678, + -0.000251921626816864,-0.00279967816935489,0.494025581706903,-0.555829697845324, + -0.000259194875382618,-0.00216425891537098,0.510106913510998,-0.576713711393971, + -0.000266468123948482,-0.00152883966138706,0.526188245315092,-0.597597724942617, + -0.000273741372515235,-0.000893420407404921,0.542269577119186,-0.618481738491264, + -0.000281014621080322,-0.000258001153419674,0.558350908923282,-0.63936575203991, + -0.000104386300676274,-0.0151768206276401,0.171703447155883,-0.138937991401145, + -0.000111412241128483,-0.0145393389677697,0.187637700220449,-0.159937377760249, + -0.000118438181580471,-0.0139018573078993,0.203571953285014,-0.180936764119353, + -0.000125464122032959,-0.0132643756480294,0.21950620634958,-0.201936150478457, + -0.000132490062485169,-0.0126268939881592,0.235440459414145,-0.222935536837561, + -0.000139516002937545,-0.0119894123282891,0.25137471247871,-0.243934923196665, + -0.000146541943389478,-0.0113519306684184,0.267308965543276,-0.264934309555769, + -0.000153567883841965,-0.0107144490085487,0.283243218607841,-0.285933695914873, + -0.000160593824293953,-0.010076967348678,0.299177471672407,-0.306933082273977, + -0.000167619764746607,-0.00943948568880848,0.315111724736972,-0.327932468633081, + -0.00017464570519854,-0.00880200402893783,0.331045977801538,-0.348931854992185, + -0.00018167164565086,-0.0081645223690674,0.346980230866104,-0.369931241351289, + -0.000188697586103181,-0.00752704070919763,0.362914483930669,-0.390930627710393, + -0.00019572352655528,-0.0068895590493272,0.378848736995234,-0.411930014069497, + -0.000202749467007712,-0.00625207738945743,0.3947829900598,-0.432929400428601, + -0.000209775407460033,-0.005614595729587,0.410717243124366,-0.453928786787705, + -0.00021680134791191,-0.00497711406971635,0.426651496188931,-0.474928173146809, + -0.000223827288364231,-0.00433963240984636,0.442585749253496,-0.495927559505913, + -0.000230853228816774,-0.00370215074997637,0.458520002318062,-0.516926945865017, + -0.00023787916926854,-0.00306466909010572,0.474454255382627,-0.537926332224121, + -0.000244905109720861,-0.00242718743023529,0.490388508447193,-0.558925718583225, + -0.000251931050173404,-0.00178970577036575,0.506322761511758,-0.579925104942329, + -0.000258956990625614,-0.00115222411049531,0.522257014576324,-0.600924491301433, + -0.000265982931078046,-0.000514742450625771,0.538191267640889,-0.621923877660537, + -0.000273008871529479,0.000122739209245992,0.554125520705455,-0.642923264019641, + -0.000101618181613972,-0.0147425973284282,0.170768974501748,-0.139985417343589, + -0.000108318973942922,-0.0141032990303317,0.186506307265792,-0.161138049848469, + -0.000115019766271818,-0.013464000732235,0.202243640029836,-0.182290682353348, + -0.000121720558600491,-0.0128247024341381,0.217980972793881,-0.203443314858227, + -0.000128421350929386,-0.0121854041360413,0.233718305557925,-0.224595947363106, + -0.000135122143258115,-0.0115461058379448,0.249455638321969,-0.245748579867986, + -0.000141822935586899,-0.0109068075398477,0.265192971086014,-0.266901212372865, + -0.000148523727915739,-0.010267509241751,0.280930303850058,-0.288053844877744, + -0.000155224520244635,-0.00962821094365451,0.296667636614102,-0.309206477382624, + -0.00016192531257353,-0.00898891264555779,0.312404969378146,-0.330359109887503, + -0.000168626104902536,-0.00834961434746107,0.328142302142191,-0.351511742392382, + -0.00017532689723132,-0.00771031604936456,0.343879634906235,-0.372664374897262, + -0.000182027689559994,-0.00707101775126762,0.359616967670279,-0.393817007402141, + -0.000188728481888889,-0.00643171945317045,0.375354300434324,-0.41496963990702, + -0.000195429274217673,-0.00579242115507395,0.391091633198368,-0.436122272411899, + -0.000202130066547013,-0.00515312285697811,0.406828965962411,-0.457274904916779, + -0.000208830858875686,-0.00451382455888139,0.422566298726456,-0.478427537421658, + -0.000215531651204248,-0.00387452626078399,0.4383036314905,-0.499580169926537, + -0.000222232443533144,-0.00323522796268749,0.454040964254544,-0.520732802431416, + -0.000228933235861817,-0.00259592966459055,0.469778297018588,-0.541885434936296, + -0.000235634028191267,-0.00195663136649493,0.485515629782632,-0.563038067441175, + -0.000242334820519607,-0.0013173330683971,0.501252962546677,-0.584190699946054, + -0.00024903561284928,-0.000678034770301039,0.516990295310721,-0.605343332450933, + -0.000255736405177176,-3.87364722032046e-05,0.532727628074766,-0.626495964955813, + -0.000262437197506737,0.000600561825892854,0.54846496083881,-0.647648597460692, + -9.79777821442096e-05,-0.0141862851340914,0.169532192762625,-0.141351208302306, + -0.00010426064261726,-0.0135462027558207,0.185010077374992,-0.162703666104494, + -0.000110543503090199,-0.0129061203775498,0.200487961987359,-0.184056123906683, + -0.000116826363563138,-0.0122660379992791,0.215965846599726,-0.205408581708871, + -0.000123109224036189,-0.0116259556210084,0.231443731212093,-0.226761039511059, + -0.00012939208450935,-0.0109858732427379,0.24692161582446,-0.248113497313248, + -0.000135674944982123,-0.0103457908644669,0.262399500436827,-0.269465955115436, + -0.000141957805455062,-0.00970570848619601,0.277877385049195,-0.290818412917624, + -0.000148240665928057,-0.00906562610792538,0.293355269661561,-0.312170870719813, + -0.000154523526401051,-0.00842554372965476,0.308833154273928,-0.333523328522001, + -0.000160806386874102,-0.00778546135138392,0.324311038886295,-0.354875786324189, + -0.000167089247347096,-0.00714537897311307,0.339788923498663,-0.376228244126378, + -0.000173372107820091,-0.00650529659484267,0.355266808111029,-0.397580701928566, + -0.000179654968292975,-0.00586521421657138,0.370744692723397,-0.418933159730754, + -0.00018593782876597,-0.00522513183830053,0.386222577335764,-0.440285617532943, + -0.000192220689238742,-0.00458504946002991,0.401700461948131,-0.461638075335131, + -0.000198503549711626,-0.00394496708175884,0.417178346560498,-0.48299053313732, + -0.000204786410184954,-0.00330488470348889,0.432656231172864,-0.504342990939508, + -0.000211069270657838,-0.00266480232521782,0.448134115785232,-0.525695448741696, + -0.000217352131130943,-0.00202471994694742,0.463612000397598,-0.547047906543884, + -0.000223634991603716,-0.00138463756867635,0.479089885009966,-0.568400364346073, + -0.0002299178520766,-0.000744555190405727,0.494567769622332,-0.589752822148261, + -0.000236200712549262,-0.000104472812134215,0.5100456542347,-0.611105279950449, + -0.000242483573022922,0.00053560956613552,0.525523538847066,-0.632457737752638, + -0.000248766433494918,0.00117569194440748,0.541001423459434,-0.653810195554826, + -9.32933258415147e-05,-0.0134943641406834,0.167927850514354,-0.143089848855785, + -9.90547590565272e-05,-0.0128558854187758,0.1830710808969,-0.164696682602766, + -0.000104816192271817,-0.0122174066968684,0.198214311279446,-0.186303516349747, + -0.000110577625486996,-0.0115789279749612,0.213357541661992,-0.207910350096727, + -0.000116339058702009,-0.0109404492530535,0.228500772044538,-0.229517183843708, + -0.00012210049191741,-0.0103019705311462,0.243644002427084,-0.251124017590689, + -0.000127861925132644,-0.00966349180923909,0.258787232809629,-0.27273085133767, + -0.000133623358347434,-0.00902501308733106,0.273930463192176,-0.294337685084651, + -0.000139384791562724,-0.00838653436542369,0.289073693574721,-0.315944518831631, + -0.00014514622477807,-0.00774805564351677,0.304216923957267,-0.337551352578612, + -0.000150907657993193,-0.00710957692160918,0.319360154339813,-0.359158186325593, + -0.00015666909120815,-0.00647109819970138,0.334503384722359,-0.380765020072574, + -0.000162430524423662,-0.00583261947779445,0.349646615104905,-0.402371853819555, + -0.00016819195763873,-0.00519414075588664,0.364789845487451,-0.423978687566536, + -0.000173953390853354,-0.00455566203397884,0.379933075869997,-0.445585521313516, + -0.000179714824068866,-0.00391718331207191,0.395076306252542,-0.467192355060497, + -0.000185476257284267,-0.00327870459016433,0.410219536635089,-0.488799188807478, + -0.00019123769049878,-0.0026402258682563,0.425362767017635,-0.510406022554459, + -0.000196999123714736,-0.00200174714634982,0.44050599740018,-0.53201285630144, + -0.000202760556929249,-0.00136326842444134,0.455649227782726,-0.55361969004842, + -0.000208521990144983,-0.000724789702534867,0.470792458165272,-0.575226523795402, + -0.00021428342335994,-8.63109806270579e-05,0.485935688547818,-0.596833357542382, + -0.00022004485657523,0.000552167741279863,0.501078918930363,-0.618440191289363, + -0.000225806289790631,0.00119064646318723,0.51622214931291,-0.640047025036344, + -0.000231567723006143,0.00182912518509415,0.531365379695455,-0.661653858783325, + -8.74321996301441e-05,-0.0126652446511913,0.165900610755314,-0.145236662353547, + -9.25676095201999e-05,-0.0120327796731364,0.180623854433982,-0.167157590759539, + -9.77030194103667e-05,-0.0114003146950816,0.19534709811265,-0.18907851916553, + -0.000102838429300367,-0.0107678497170266,0.210070341791318,-0.210999447571521, + -0.000107973839190256,-0.0101353847389716,0.224793585469987,-0.232920375977512, + -0.000113109249080201,-0.00950291976091644,0.239516829148655,-0.254841304383503, + -0.000118244658970479,-0.00887045478286175,0.254240072827323,-0.276762232789494, + -0.000123380068860479,-0.00823798980480683,0.268963316505992,-0.298683161195486, + -0.000128515478750646,-0.00760552482675192,0.28368656018466,-0.320604089601477, + -0.000133650888640258,-0.00697305984869656,0.298409803863328,-0.342525018007468, + -0.000138786298530258,-0.00634059487064143,0.313133047541997,-0.364445946413459, + -0.000143921708420591,-0.00570812989258673,0.327856291220665,-0.38636687481945, + -0.000149057118310703,-0.00507566491453182,0.342579534899333,-0.408287803225441, + -0.000154192528200481,-0.00444319993647646,0.357302778578002,-0.430208731631433, + -0.000159327938090703,-0.00381073495842199,0.37202602225667,-0.452129660037424, + -0.000164463347980814,-0.00317826998036708,0.386749265935338,-0.474050588443415, + -0.000169598757870371,-0.0025458050023115,0.401472509614007,-0.495971516849406, + -0.000174734167761037,-0.00191334002425725,0.416195753292675,-0.517892445255397, + -0.000179869577650926,-0.00128087504620233,0.430918996971343,-0.539813373661388, + -0.000185004987540704,-0.000648410068146976,0.445642240650011,-0.56173430206738, + -0.000190140397430705,-1.5945090091396e-05,0.46036548432868,-0.583655230473371, + -0.00019527580732126,0.000616519887962408,0.475088728007348,-0.605576158879362, + -0.000200411217210816,0.00124898486601799,0.489811971686016,-0.627497087285353, + -0.000205546627100706,0.00188144984407357,0.504535215364685,-0.649418015691344, + -0.000210682036990595,0.00251391482212826,0.519258459043353,-0.671338944097335, + -8.03522994982098e-05,-0.0117156773980369,0.163423066677582,-0.147789874344073, + -8.47715379367342e-05,-0.0110961896811264,0.177637083345373,-0.170084356507939, + -8.91907763753697e-05,-0.0104767019642161,0.191851100013164,-0.192378838671805, + -9.36100148137831e-05,-0.00985721424730535,0.206065116680955,-0.214673320835671, + -9.80292532525295e-05,-0.00923772653039512,0.220279133348745,-0.236967802999537, + -0.000102448491691109,-0.00861823881348456,0.234493150016536,-0.259262285163402, + -0.000106867730129467,-0.007998751096574,0.248707166684327,-0.281556767327269, + -0.00011128696856777,-0.00737926337966299,0.262921183352118,-0.303851249491134, + -0.000115706207006794,-0.00675977566275332,0.277135200019908,-0.326145731655, + -0.000120125445445096,-0.00614028794584232,0.2913492166877,-0.348440213818866, + -0.000124544683883454,-0.00552080022893175,0.30556323335549,-0.370734695982732, + -0.000128963922322312,-0.00490131251202142,0.319777250023281,-0.393029178146598, + -0.000133383160760614,-0.00428182479511041,0.333991266691072,-0.415323660310464, + -0.000137802399199249,-0.0036623370782003,0.348205283358863,-0.43761814247433, + -0.000142221637638107,-0.00304284936128996,0.362419300026654,-0.459912624638195, + -0.000146640876075965,-0.00242336164437895,0.376633316694444,-0.482207106802061, + -0.000151060114515045,-0.00180387392746884,0.390847333362235,-0.504501588965927, + -0.000155479352953347,-0.00118438621055805,0.405061350030026,-0.526796071129793, + -0.000159898591392205,-0.000564898493647936,0.419275366697816,-0.549090553293658, + -0.000164317829830507,5.45892232630685e-05,0.433489383365607,-0.571385035457525, + -0.00016873706826892,0.000674076940173407,0.447703400033398,-0.593679517621391, + -0.000173156306707778,0.00129356465708375,0.461917416701189,-0.615973999785256, + -0.000177575545145969,0.00191305237399453,0.47613143336898,-0.638268481949122, + -0.000181994783584494,0.00253254009090487,0.49034545003677,-0.660562964112988, + -0.000186414022022685,0.00315202780781609,0.504559466704562,-0.682857446276854, + -7.21564063035918e-05,-0.0106839855395054,0.16051674839087,-0.150694371754829, + -7.58030394666376e-05,-0.0100869894380015,0.174138615339031,-0.173413803326167, + -7.94496726294613e-05,-0.00948999333649747,0.187760482287193,-0.196133234897505, + -8.30963057922296e-05,-0.00889299723499326,0.201382349235354,-0.218852666468843, + -8.67429389552199e-05,-0.00829600113348927,0.215004216183516,-0.241572098040181, + -9.03895721179881e-05,-0.00769900503198517,0.228626083131678,-0.264291529611519, + -9.40362052809229e-05,-0.00710200893048119,0.242247950079839,-0.287010961182857, + -9.76828384439687e-05,-0.0065050128289772,0.255869817028001,-0.309730392754196, + -0.000101329471606626,-0.00590801672747299,0.269491683976163,-0.332449824325534, + -0.000104976104769783,-0.00531102062596944,0.283113550924324,-0.355169255896872, + -0.000108622737932884,-0.00471402452446545,0.296735417872486,-0.37788868746821, + -0.000112269371095208,-0.0041170284229608,0.310357284820648,-0.400608119039548, + -0.00011591600425831,-0.00352003232145681,0.323979151768809,-0.423327550610886, + -0.000119562637421078,-0.00292303621995305,0.33760101871697,-0.446046982182224, + -0.000123209270583957,-0.00232604011844884,0.351222885665132,-0.468766413753562, + -0.000126855903747169,-0.00172904401694551,0.364844752613293,-0.491485845324901, + -0.00013050253691016,-0.00113204791544108,0.378466619561455,-0.514205276896239, + -0.000134149170072262,-0.000535051813936205,0.392088486509617,-0.536924708467577, + -0.000137795803236029,6.19442875668952e-05,0.405710353457779,-0.559644140038915, + -0.000141442436398798,0.000658940389070661,0.41933222040594,-0.582363571610253, + -0.000145089069561788,0.00125593649057487,0.432954087354102,-0.605083003181591, + -0.000148735702724334,0.00185293259207953,0.446575954302264,-0.627802434752929, + -0.000152382335887324,0.00244992869358285,0.460197821250425,-0.650521866324267, + -0.000156028969050426,0.00304692479508706,0.473819688198587,-0.673241297895606, + -0.000159675602212972,0.00364392089659127,0.487441555146748,-0.695960729466943, + -6.31249316708771e-05,-0.00962659538787658,0.157267814668057,-0.153836009010444, + -6.5993282822141e-05,-0.00906323379249774,0.170233775287234,-0.177015085298738, + -6.8861633973627e-05,-0.0084998721971189,0.183199735906411,-0.200194161587033, + -7.1729985125224e-05,-0.00793651060174061,0.196165696525587,-0.223373237875327, + -7.45983362764324e-05,-0.00737314900636155,0.209131657144764,-0.246552314163621, + -7.74666874279739e-05,-0.00680978741098315,0.222097617763941,-0.269731390451916, + -8.03350385792378e-05,-0.00624642581560386,0.235063578383118,-0.29291046674021, + -8.32033897309459e-05,-0.00568306422022569,0.248029539002295,-0.316089543028504, + -8.60717408822098e-05,-0.00511970262484707,0.260995499621471,-0.339268619316798, + -8.89400920337513e-05,-0.00455634102946822,0.273961460240648,-0.362447695605093, + -9.18084431853483e-05,-0.00399297943408983,0.286927420859825,-0.385626771893387, + -9.46767943366122e-05,-0.00342961783871032,0.299893381479002,-0.408805848181681, + -9.75451454879872e-05,-0.00286625624333214,0.312859342098179,-0.431984924469975, + -0.000100413496639362,-0.0023028946479533,0.325825302717356,-0.45516400075827, + -0.000103281847790404,-0.00173953305257379,0.338791263336533,-0.478343077046564, + -0.000106150198942334,-0.00117617145719606,0.351757223955709,-0.501522153334859, + -0.000109018550093376,-0.000612809861816555,0.364723184574886,-0.524701229623152, + -0.000111886901245306,-4.94482664388229e-05,0.377689145194062,-0.547880305911447, + -0.000114755252396459,0.000513913328940685,0.39065510581324,-0.571059382199741, + -0.000117623603548167,0.00107727492431886,0.403621066432416,-0.594238458488035, + -0.000120491954699542,0.00164063651969792,0.416587027051594,-0.61741753477633, + -0.000123360305850473,0.00220399811507699,0.42955298767077,-0.640596611064624, + -0.000126228657002292,0.00276735971045516,0.442518948289947,-0.663775687352918, + -0.000129097008153445,0.00333072130583423,0.455484908909124,-0.686954763641212, + -0.000131965359305153,0.00389408290121196,0.4684508695283,-0.710133839929507, + -5.36989799683751e-05,-0.00860697714783887,0.153826301483036,-0.157054126272231, + -5.58410042438839e-05,-0.0080881480926922,0.166103784343122,-0.180704036866835, + -5.79830285193927e-05,-0.00756931903754554,0.178381267203208,-0.204353947461439, + -6.01250527950126e-05,-0.00705048998239888,0.190658750063294,-0.228003858056044, + -6.22670770706324e-05,-0.00653166092725233,0.20293623292338,-0.251653768650648, + -6.44091013461412e-05,-0.00601283187210577,0.215213715783466,-0.275303679245252, + -6.65511256217055e-05,-0.005494002816959,0.227491198643552,-0.298953589839857, + -6.86931498969368e-05,-0.00497517376181222,0.239768681503637,-0.322603500434461, + -7.08351741727231e-05,-0.00445634470666589,0.252046164363723,-0.346253411029066, + -7.2977198448454e-05,-0.00393751565151934,0.264323647223809,-0.36990332162367, + -7.51192227238517e-05,-0.00341868659637234,0.276601130083895,-0.393553232218274, + -7.72612469992495e-05,-0.00289985754122579,0.288878612943981,-0.417203142812879, + -7.94032712747583e-05,-0.00238102848607946,0.301156095804066,-0.440853053407483, + -8.15452955508222e-05,-0.00186219943093335,0.313433578664152,-0.464502964002087, + -8.368731982622e-05,-0.00134337037578613,0.325711061524238,-0.488152874596692, + -8.58293441013958e-05,-0.00082454132063936,0.337988544384324,-0.511802785191296, + -8.79713683772376e-05,-0.00030571226549303,0.35026602724441,-0.5354526957859, + -9.01133926527464e-05,0.0002131167896533,0.362543510104495,-0.559102606380505, + -9.22554169279222e-05,0.000731945844800741,0.374820992964582,-0.582752516975109, + -9.43974412039861e-05,0.00125077489994663,0.387098475824667,-0.606402427569713, + -9.6539465479939e-05,0.00176960395509296,0.399375958684753,-0.630052338164318, + -9.86814897548927e-05,0.00228843301024018,0.411653441544839,-0.653702248758922, + -0.000100823514030179,0.00280726206538695,0.423930924404925,-0.677352159353526, + -0.000102965538306021,0.00332609112053284,0.43620840726501,-0.701002069948131, + -0.000105107562582085,0.00384492017567917,0.448485890125097,-0.724651980542735, + -4.44035621398609e-05,-0.00768086929031253,0.150382527841535,-0.160171929786963, + -4.59204429688609e-05,-0.00721496318449477,0.161976967681695,-0.184277998046331, + -4.7437323798083e-05,-0.00674905707867723,0.173571407521856,-0.208384066305698, + -4.89542046269165e-05,-0.00628315097285903,0.185165847362017,-0.232490134565065, + -5.04710854561941e-05,-0.0058172448670416,0.196760287202177,-0.256596202824433, + -5.19879662854161e-05,-0.00535133876122384,0.208354727042338,-0.2807022710838, + -5.35048471145272e-05,-0.0048854326554062,0.219949166882498,-0.304808339343168, + -5.50217279433607e-05,-0.0044195265495881,0.231543606722659,-0.328914407602535, + -5.65386087725273e-05,-0.00395362044377046,0.24313804656282,-0.353020475861902, + -5.80554896018604e-05,-0.00348771433795303,0.25473248640298,-0.37712654412127, + -5.95723704307494e-05,-0.00302180823213516,0.266326926243141,-0.401232612380637, + -6.10892512595829e-05,-0.00255590212631707,0.277921366083302,-0.425338680640005, + -6.26061320891935e-05,-0.00208999602050008,0.289515805923462,-0.449444748899372, + -6.4123012917805e-05,-0.00162408991468155,0.301110245763623,-0.473550817158739, + -6.56398937477487e-05,-0.00115818380886457,0.312704685603783,-0.497656885418107, + -6.71567745762491e-05,-0.000692277703046695,0.324299125443944,-0.521762953677474, + -6.86736554054157e-05,-0.000226371597228825,0.335893565284104,-0.545869021936842, + -7.01905362348043e-05,0.000239534508588601,0.347488005124265,-0.569975090196209, + -7.17074170636378e-05,0.000705440614406694,0.359082444964426,-0.594081158455576, + -7.32242978928044e-05,0.00117134672022434,0.370676884804586,-0.618187226714944, + -7.47411787215269e-05,0.00163725282604288,0.382271324644747,-0.642293294974311, + -7.62580595510265e-05,0.00210315893186008,0.393865764484908,-0.666399363233678, + -7.777494037986e-05,0.00256906503767729,0.405460204325068,-0.690505431493046, + -7.92918212088045e-05,0.00303497114349627,0.417054644165229,-0.714611499752413, + -8.08087020380821e-05,0.00350087724931347,0.42864908400539,-0.738717568011781, + -3.57351169674724e-05,-0.0068846383866169,0.147126696986295,-0.163033675097257, + -3.675587589963e-05,-0.00647582090672838,0.158080307984815,-0.187558437816273, + -3.77766348318431e-05,-0.00606700342684019,0.169033918983334,-0.212083200535288, + -3.87973937637787e-05,-0.00565818594695144,0.179987529981854,-0.236607963254304, + -3.98181526960473e-05,-0.00524936846706325,0.190941140980373,-0.26113272597332, + -4.08389116279828e-05,-0.00484055098717451,0.201894751978893,-0.285657488692335, + -4.18596705600294e-05,-0.00443173350728587,0.212848362977413,-0.310182251411351, + -4.28804294919649e-05,-0.00402291602739746,0.223801973975932,-0.334707014130366, + -4.39011884246221e-05,-0.00361409854750949,0.234755584974452,-0.359231776849382, + -4.49219473565576e-05,-0.00320528106762108,0.245709195972971,-0.383756539568398, + -4.59427062884377e-05,-0.002796463587732,0.256662806971491,-0.408281302287413, + -4.69634652204842e-05,-0.00238764610784359,0.267616417970011,-0.432806065006429, + -4.79842241528639e-05,-0.00197882862795562,0.27857002896853,-0.457330827725444, + -4.90049830847994e-05,-0.00157001114806676,0.28952363996705,-0.48185559044446, + -5.0025742017179e-05,-0.00116119366817857,0.30047725096557,-0.506380353163476, + -5.10465009491146e-05,-0.000752376188289716,0.311430861964089,-0.530905115882491, + -5.20672598811611e-05,-0.000343558708401526,0.322384472962609,-0.555429878601507, + -5.30880188135407e-05,6.52587714866648e-05,0.333338083961128,-0.579954641320523, + -5.41087777455873e-05,0.000474076251375077,0.344291694959648,-0.604479404039538, + -5.51295366776339e-05,0.000882893731263934,0.355245305958168,-0.629004166758554, + -5.61502956092363e-05,0.00129171121115279,0.366198916956687,-0.653528929477569, + -5.7171054541616e-05,0.0017005286910412,0.377152527955207,-0.678053692196585, + -5.81918134735515e-05,0.00210934617092962,0.388106138953726,-0.7025784549156, + -5.92125724054871e-05,0.00251816365081803,0.399059749952246,-0.727103217634616, + -6.02333313378667e-05,0.002926981130706,0.410013360950765,-0.751627980353632, + -2.80616207928297e-05,-0.00623162031375268,0.144208856291756,-0.165533033883148, + -2.87177831424512e-05,-0.00587935717506471,0.154591916809099,-0.190423471238744, + -2.93739454922948e-05,-0.00552709403637697,0.164974977326443,-0.215313908594339, + -3.00301078419163e-05,-0.005174830897689,0.175358037843786,-0.240204345949934, + -3.06862701915378e-05,-0.00482256775900081,0.18574109836113,-0.26509478330553, + -3.13424325412703e-05,-0.00447030462031317,0.196124158878473,-0.289985220661125, + -3.19985948911694e-05,-0.00411804148162553,0.206507219395816,-0.314875658016721, + -3.26547572409019e-05,-0.00376577834293768,0.216890279913159,-0.339766095372316, + -3.33109195904679e-05,-0.00341351520424982,0.227273340430502,-0.364656532727911, + -3.39670819403115e-05,-0.00306125206556218,0.237656400947846,-0.389546970083507, + -3.4623244289822e-05,-0.00270898892687432,0.248039461465189,-0.414437407439102, + -3.52794066397211e-05,-0.00235672578818669,0.258422521982532,-0.439327844794698, + -3.59355689892871e-05,-0.00200446264949861,0.268805582499875,-0.464218282150293, + -3.65917313391861e-05,-0.00165219951081075,0.279188643017219,-0.489108719505888, + -3.72478936885301e-05,-0.00129993637212289,0.289571703534562,-0.513999156861484, + -3.79040560385402e-05,-0.000947673233435031,0.299954764051906,-0.538889594217079, + -3.85602183881062e-05,-0.000595410094747173,0.310337824569249,-0.563780031572675, + -3.92163807378942e-05,-0.000243146956059759,0.320720885086592,-0.58867046892827, + -3.98725430877933e-05,0.000109116182628544,0.331103945603936,-0.613560906283865, + -4.05287054374703e-05,0.000461379321315736,0.341487006121278,-0.638451343639461, + -4.11848677873694e-05,0.000813642460003816,0.351870066638622,-0.663341780995056, + -4.18410301369354e-05,0.00116590559869145,0.362253127155965,-0.688232218350652, + -4.24971924866124e-05,0.00151816873737953,0.372636187673308,-0.713122655706247, + -4.31533548365115e-05,0.00187043187606761,0.383019248190652,-0.738013093061842, + -4.38095171861885e-05,0.00222269501475481,0.393402308707995,-0.762903530417438, + -2.15747166540936e-05,-0.00571608225660958,0.141715902605768,-0.167622889635366, + -2.19807473527678e-05,-0.00541591788672946,0.151614112640134,-0.192819088311429, + -2.23867780511644e-05,-0.0051157535168489,0.161512322674499,-0.218015286987492, + -2.27928087498386e-05,-0.00481558914696845,0.171410532708865,-0.243211485663555, + -2.31988394482907e-05,-0.00451542477708822,0.18130874274323,-0.268407684339618, + -2.36048701467428e-05,-0.00421526040720788,0.191206952777595,-0.293603883015681, + -2.40109008453615e-05,-0.00391509603732754,0.201105162811961,-0.318800081691744, + -2.44169315438691e-05,-0.0036149316674472,0.211003372846326,-0.343996280367807, + -2.48229622423213e-05,-0.00331476729756663,0.220901582880691,-0.36919247904387, + -2.5228992941051e-05,-0.00301460292768652,0.230799792915057,-0.394388677719934, + -2.563502363917e-05,-0.00271443855780573,0.240698002949422,-0.419584876395997, + -2.60410543381218e-05,-0.00241427418792584,0.250596212983787,-0.44478107507206, + -2.64470850361853e-05,-0.00211410981804483,0.260494423018153,-0.469977273748123, + -2.6853115735137e-05,-0.00181394544816516,0.270392633052518,-0.495173472424186, + -2.72591464335337e-05,-0.00151378107828504,0.280290843086883,-0.520369671100249, + -2.76651771315972e-05,-0.00121361670840336,0.290189053121249,-0.545565869776312, + -2.80712078305489e-05,-0.00091345233852369,0.300087263155614,-0.570762068452375, + -2.84772385291676e-05,-0.00061328796864335,0.30998547318998,-0.595958267128438, + -2.88832692273422e-05,-0.00031312359876301,0.319883683224345,-0.621154465804501, + -2.92892999259609e-05,-1.29592288824476e-05,0.32978189325871,-0.646350664480564, + -2.96953306242465e-05,0.000287205140998115,0.339680103293076,-0.671546863156627, + -3.01013613230872e-05,0.000587369510878233,0.349578313327441,-0.69674306183269, + -3.05073920217058e-05,0.000887533880758351,0.359476523361806,-0.721939260508753, + -3.09134227202135e-05,0.00118769825063847,0.369374733396172,-0.747135459184816, + -3.13194534186101e-05,0.00148786262051903,0.379272943430537,-0.77233165786088, + -1.63001788559547e-05,-0.00532077392692598,0.139670925317938,-0.169307643692151, + -1.65442853462539e-05,-0.00506580930210265,0.149173110051875,-0.194750334320838, + -1.6788391836553e-05,-0.00481084467727899,0.158675294785811,-0.220193024949525, + -1.70324983266856e-05,-0.00455588005245511,0.168177479519748,-0.245635715578211, + -1.72766048168183e-05,-0.00430091542763145,0.177679664253684,-0.271078406206898, + -1.75207113071174e-05,-0.0040459508028079,0.187181848987621,-0.296521096835585, + -1.7764817796917e-05,-0.0037909861779839,0.196684033721557,-0.321963787464272, + -1.80089242878267e-05,-0.00353602155316124,0.206186218455493,-0.347406478092958, + -1.82530307779594e-05,-0.00328105692833747,0.21568840318943,-0.372849168721645, + -1.84971372681475e-05,-0.00302609230351369,0.225190587923366,-0.398291859350332, + -1.87412437586687e-05,-0.00277112767869059,0.234692772657302,-0.423734549979019, + -1.89853502483572e-05,-0.00251616305386615,0.244194957391239,-0.449177240607705, + -1.92294567386009e-05,-0.0022611984290426,0.253697142125175,-0.474619931236392, + -1.94735632289555e-05,-0.00200623380421949,0.263199326859112,-0.500062621865079, + -1.97176697189771e-05,-0.00175126917939505,0.272701511593049,-0.525505312493765, + -1.99617762091098e-05,-0.00149630455457128,0.282203696326985,-0.550948003122452, + -2.02058826991314e-05,-0.00124133992974795,0.291705881060921,-0.576390693751139, + -2.04499891895971e-05,-0.000986375304924625,0.301208065794857,-0.601833384379825, + -2.06940956798407e-05,-0.000731410680101074,0.310710250528794,-0.627276075008513, + -2.09382021705284e-05,-0.000476446055277524,0.320212435262731,-0.652718765637199, + -2.11823086608831e-05,-0.000221481430453974,0.329714619996667,-0.678161456265886, + -2.14264151506827e-05,3.34831943695768e-05,0.339216804730603,-0.703604146894573, + -2.16705216405932e-05,0.000288447819194015,0.34871898946454,-0.729046837523259, + -2.1914628131614e-05,0.000543412444016234,0.358221174198476,-0.754489528151946, + -2.21587346217467e-05,0.000798377068840228,0.367723358932412,-0.779932218780633, + -1.21448269517765e-05,-0.00502405522464089,0.138048404985096,-0.170626264827203, + -1.22888283335398e-05,-0.00480646542779262,0.147237416215967,-0.196261879459866, + -1.24328297151921e-05,-0.00458887563094412,0.156426427446838,-0.221897494092528, + -1.25768310970664e-05,-0.00437128583409563,0.16561543867771,-0.247533108725191, + -1.27208324789962e-05,-0.00415369603724758,0.174804449908581,-0.273168723357854, + -1.2864833860482e-05,-0.00393610624039864,0.183993461139452,-0.298804337990516, + -1.30088352421898e-05,-0.00371851644355048,0.193182472370323,-0.324439952623179, + -1.31528366240086e-05,-0.0035009266467021,0.202371483601194,-0.350075567255842, + -1.32968380054943e-05,-0.00328333684985305,0.211560494832066,-0.375711181888504, + -1.34408393874796e-05,-0.00306574705300511,0.220749506062937,-0.401346796521167, + -1.35848407692984e-05,-0.00284815725615672,0.229938517293808,-0.42698241115383, + -1.37288421505621e-05,-0.00263056745930768,0.23912752852468,-0.452618025786492, + -1.3872843532492e-05,-0.00241297766245951,0.248316539755551,-0.478253640419155, + -1.40168449143108e-05,-0.00219538786561113,0.257505550986422,-0.503889255051817, + -1.41608462963516e-05,-0.00197779806876341,0.266694562217293,-0.52952486968448, + -1.43048476775043e-05,-0.00176020827191392,0.275883573448165,-0.555160484317143, + -1.44488490594341e-05,-0.00154261847506576,0.285072584679036,-0.580796098949805, + -1.4592850441475e-05,-0.00132502867821804,0.294261595909907,-0.606431713582468, + -1.47368518227387e-05,-0.00110743888136833,0.303450607140779,-0.632067328215131, + -1.48808532045575e-05,-0.000889849084520389,0.31263961837165,-0.657702942847793, + -1.50248545867093e-05,-0.00067225928767245,0.321828629602521,-0.683338557480456, + -1.5168855968084e-05,-0.000454669490823179,0.331017640833392,-0.708974172113119, + -1.53128573500139e-05,-0.000237079693974795,0.340206652064264,-0.734609786745781, + -1.54568587319437e-05,-1.94898971273005e-05,0.349395663295134,-0.760245401378444, + -1.56008601130964e-05,0.000198099899721971,0.358584674526006,-0.785881016011107, + -8.95157708807881e-06,-0.0048046795498099,0.136794614071217,-0.171634645401195, + -9.03575203842211e-06,-0.00461685737120388,0.145742230488012,-0.19741779355406, + -9.11992698859887e-06,-0.00442903519259796,0.154689846904808,-0.223200941706924, + -9.20410193916421e-06,-0.00424121301399194,0.163637463321604,-0.248984089859788, + -9.28827688967404e-06,-0.00405339083538625,0.1725850797384,-0.274767238012652, + -9.37245183979529e-06,-0.00386556865677967,0.181532696155196,-0.300550386165516, + -9.45662679013859e-06,-0.00367774647817343,0.190480312571992,-0.32633353431838, + -9.54080174025984e-06,-0.0034899242995674,0.199427928988787,-0.352116682471244, + -9.6249766904366e-06,-0.00330210212096071,0.208375545405584,-0.377899830624108, + -9.7091516412795e-06,-0.00311427994235558,0.217323161822379,-0.403682978776972, + -9.79332659145626e-06,-0.00292645776374933,0.226270778239175,-0.429466126929836, + -9.87750154191058e-06,-0.00273863558514309,0.235218394655971,-0.4552492750827, + -9.96167649225388e-06,-0.00255081340653729,0.244166011072767,-0.481032423235564, + -1.00458514427082e-05,-0.00236299122793127,0.253113627489563,-0.506815571388428, + -1.01300263929405e-05,-0.0021751690493248,0.262061243906359,-0.532598719541292, + -1.02142013433948e-05,-0.00198734687071922,0.271008860323154,-0.558381867694156, + -1.02983762936271e-05,-0.0017995246921132,0.27995647673995,-0.58416501584702, + -1.03825512443034e-05,-0.0016117025135074,0.288904093156746,-0.609948163999884, + -1.04667261942026e-05,-0.00142388033490048,0.297851709573542,-0.635731312152748, + -1.0550901144657e-05,-0.00123605815629535,0.306799325990337,-0.661514460305613, + -1.06350760952223e-05,-0.00104823597768933,0.315746942407133,-0.687297608458477, + -1.07192510453435e-05,-0.00086041379908286,0.324694558823929,-0.713080756611341, + -1.08034259959089e-05,-0.000672591620477281,0.333642175240725,-0.738863904764205, + -1.08876009466963e-05,-0.000484769441871702,0.342589791657521,-0.764647052917069, + -1.09717758959293e-05,-0.000296947263264347,0.351537408074317,-0.790430201069933, + -6.54405703920391e-06,-0.00464417901219771,0.135845304757493,-0.172392176104683, + -6.59326360402668e-06,-0.00447939661998475,0.144610491681815,-0.198286156590327, + -6.64247016851638e-06,-0.00431461422777157,0.153375678606136,-0.224180137075972, + -6.69167673317261e-06,-0.00414983183555828,0.162140865530458,-0.250074117561616, + -6.7408832976068e-06,-0.00398504944334488,0.17090605245478,-0.275968098047261, + -6.79008986248508e-06,-0.00382026705113203,0.179671239379102,-0.301862078532905, + -6.83929642719683e-06,-0.00365548465891896,0.188436426303424,-0.32775605901855, + -6.88850299124244e-06,-0.003490702266705,0.197201613227746,-0.353650039504194, + -6.93770955639827e-06,-0.0033259198744926,0.205966800152067,-0.379544019989839, + -6.98691612105451e-06,-0.00316113748227931,0.214731987076389,-0.405438000475483, + -7.0361226854887e-06,-0.00299635509006579,0.223497174000711,-0.431331980961128, + -7.08532925053351e-06,-0.00283157269785339,0.232262360925033,-0.457225961446772, + -7.1345358144681e-06,-0.00266679030563921,0.241027547849355,-0.483119941932417, + -7.18374237940189e-06,-0.00250200791342658,0.249792734773677,-0.509013922418061, + -7.23294894389159e-06,-0.00233722552121307,0.258557921697999,-0.534907902903706, + -7.28215550860334e-06,-0.00217244312899911,0.267323108622321,-0.56080188338935, + -7.33136207287099e-06,-0.00200766073678604,0.276088295546643,-0.586695863874995, + -7.38056863802683e-06,-0.00184287834457386,0.284853482470964,-0.612589844360639, + -7.42977520329369e-06,-0.00167809595236124,0.293618669395286,-0.638483824846284, + -7.47898176722828e-06,-0.00151331356014683,0.302383856319608,-0.664377805331928, + -7.52818833149593e-06,-0.00134853116793376,0.31114904324393,-0.690271785817573, + -7.57739489587461e-06,-0.00118374877571981,0.319914230168252,-0.716165766303217, + -7.62660146136351e-06,-0.00101896638350807,0.328679417092573,-0.742059746788862, + -7.67580802552015e-06,-0.000854183991294111,0.337444604016895,-0.767953727274507, + -7.72501459012087e-06,-0.000689401599081485,0.346209790941217,-0.793847707760151, + -4.75483127965193e-06,-0.00452759542177628,0.135137534898178,-0.172953685658474, + -4.78383286778294e-06,-0.00438026641063038,0.143766897509781,-0.198929819135989, + -4.81283445530334e-06,-0.00423293739948372,0.152396260121385,-0.224905952613504, + -4.84183604326782e-06,-0.00408560838833749,0.161025622732988,-0.250882086091019, + -4.87083763128782e-06,-0.00393827937719138,0.169654985344592,-0.276858219568534, + -4.89983921914128e-06,-0.00379095036604515,0.178284347956195,-0.302834353046049, + -4.92884080693923e-06,-0.00364362135489826,0.186913710567799,-0.328810486523564, + -4.95784239501473e-06,-0.0034962923437527,0.195543073179402,-0.354786620001079, + -4.98684398253513e-06,-0.00334896333260581,0.204172435791006,-0.380762753478594, + -5.01584557038859e-06,-0.00320163432145959,0.212801798402609,-0.406738886956109, + -5.04484715857512e-06,-0.00305430531031337,0.221431161014213,-0.432715020433624, + -5.07384874637307e-06,-0.00290697629916736,0.230060523625816,-0.458691153911139, + -5.10285033417102e-06,-0.00275964728802069,0.23868988623742,-0.484667287388654, + -5.13185192185794e-06,-0.00261231827687425,0.247319248849023,-0.510643420866169, + -5.16085350998896e-06,-0.00246498926572802,0.255948611460627,-0.536619554343684, + -5.18985509767589e-06,-0.00231766025458158,0.26457797407223,-0.5625956878212, + -5.21885668591793e-06,-0.00217033124343602,0.273207336683833,-0.588571821298715, + -5.24785827338281e-06,-0.00202300223228935,0.281836699295437,-0.61454795477623, + -5.27685986151383e-06,-0.0018756732211429,0.290466061907041,-0.640524088253745, + -5.30586144931178e-06,-0.00172834420999646,0.299095424518645,-0.66650022173126, + -5.33486303722075e-06,-0.00158101519885046,0.307724787130248,-0.692476355208775, + -5.3638646250187e-06,-0.00143368618770356,0.316354149741852,-0.71845248868629, + -5.39286621292767e-06,-0.00128635717655756,0.324983512353455,-0.744428622163805, + -5.4218678006146e-06,-0.00113902816541112,0.333612874965059,-0.77040475564132, + -5.45086938952277e-06,-0.000991699154266001,0.342242237576662,-0.796380889118835, + -3.43922470513736e-06,-0.00444332830486172,0.134615878561166,-0.173365776959723, + -3.456573557159e-06,-0.00430901187057042,0.143145234348802,-0.199402202435999, + -3.47392240895861e-06,-0.00417469543627902,0.151674590136438,-0.225438627912275, + -3.49127126109128e-06,-0.00404037900198784,0.160203945924074,-0.251475053388551, + -3.50862011305741e-06,-0.00390606256769666,0.168733301711709,-0.277511478864826, + -3.525968964746e-06,-0.00377174613340459,0.177262657499346,-0.303547904341102, + -3.54331781660111e-06,-0.00363742969911329,0.185792013286981,-0.329584329817378, + -3.56066666862276e-06,-0.003503113264822,0.194321369074617,-0.355620755293654, + -3.57801552119952e-06,-0.00336879683053137,0.202850724862253,-0.38165718076993, + -3.59536437283259e-06,-0.00323448039624008,0.211380080649888,-0.407693606246206, + -3.61271322479872e-06,-0.00310016396194857,0.219909436437524,-0.433730031722482, + -3.6300620769314e-06,-0.00296584752765772,0.22843879222516,-0.459766457198758, + -3.64741092828691e-06,-0.00283153109336509,0.236968148012796,-0.485802882675033, + -3.6647597805306e-06,-0.00269721465907424,0.245497503800432,-0.511839308151309, + -3.68210863277429e-06,-0.00256289822478362,0.254026859588067,-0.537875733627585, + -3.69945748446288e-06,-0.00242858179049144,0.262556215375704,-0.563912159103861, + -3.71680633626248e-06,-0.00229426535620014,0.271085571163339,-0.589948584580137, + -3.73415518806208e-06,-0.00215994892190841,0.279614926950975,-0.615985010056413, + -3.75150403997271e-06,-0.00202563248761711,0.288144282738611,-0.642021435532689, + -3.76885289155027e-06,-0.00189131605332538,0.296673638526247,-0.668057861008965, + -3.78620174457112e-06,-0.0017569996190363,0.305202994313881,-0.694094286485241, + -3.80355059570459e-06,-0.00162268318474323,0.313732350101518,-0.720130711961517, + -3.82089944783726e-06,-0.00148836675045194,0.322261705889154,-0.746167137437792, + -3.83824829952584e-06,-0.00135405031616065,0.33079106167679,-0.772203562914068, + -3.85559715188055e-06,-0.00121973388186936,0.339320417464426,-0.798239988390344, + -2.47942191083927e-06,-0.00438262522385557,0.13423463834927,-0.173666007356582, + -2.49000601110216e-06,-0.00425789771663643,0.14269096035358,-0.199746358755731, + -2.50059011175363e-06,-0.00413317020941784,0.15114728235789,-0.22582671015488, + -2.51117421229408e-06,-0.00400844270219913,0.1596036043622,-0.251907061554029, + -2.52175831255697e-06,-0.0038837151949801,0.168059926366511,-0.277987412953179, + -2.5323424130419e-06,-0.00375898768776128,0.176516248370821,-0.304067764352328, + -2.54292651363786e-06,-0.0036342601805428,0.184972570375131,-0.330148115751477, + -2.55351061434483e-06,-0.00350953267332432,0.193428892379441,-0.356228467150626, + -2.56409471427466e-06,-0.00338480516610473,0.201885214383751,-0.382308818549775, + -2.57467881437101e-06,-0.00326007765888514,0.210341536388062,-0.408389169948924, + -2.58526291518901e-06,-0.0031353501516671,0.218797858392372,-0.434469521348073, + -2.5958470154519e-06,-0.00301062264444774,0.227254180396682,-0.460549872747223, + -2.60643111593684e-06,-0.00288589513722948,0.235710502400992,-0.486630224146372, + -2.61701521631075e-06,-0.00276116763001033,0.244166824405302,-0.512710575545521, + -2.62759931701773e-06,-0.00263644012279163,0.252623146409612,-0.53879092694467, + -2.63818341694755e-06,-0.00251171261557226,0.261079468413923,-0.564871278343819, + -2.64876751787657e-06,-0.00238698510835422,0.269535790418233,-0.590951629742968, + -2.65935161791742e-06,-0.00226225760113508,0.277992112422543,-0.617031981142118, + -2.66993571862439e-06,-0.00213753009391615,0.286448434426853,-0.643112332541267, + -2.68051981955342e-06,-0.00201280258669856,0.294904756431163,-0.669192683940416, + -2.69110391970528e-06,-0.00188807507947875,0.303361078435473,-0.695273035339565, + -2.70168801930204e-06,-0.00176334757225893,0.311817400439784,-0.721353386738714, + -2.71227212034209e-06,-0.00163862006504134,0.320273722444093,-0.747433738137863, + -2.722856220716e-06,-0.00151389255782197,0.328730044448404,-0.773514089537012, + -2.73344032131195e-06,-0.00138916505060394,0.337186366452713,-0.799594440936162, + -1.78318752480644e-06,-0.00433899864963383,0.133957736860613,-0.173883578033694, + -1.78979057968709e-06,-0.00422127725885069,0.142361041414946,-0.199995761628658, + -1.79639363401263e-06,-0.00410355586806677,0.150764345969279,-0.226107945223622, + -1.80299668883777e-06,-0.00398583447728329,0.159167650523613,-0.252220128818586, + -1.80959974349637e-06,-0.00386811308649992,0.167570955077946,-0.278332312413549, + -1.816202798266e-06,-0.00375039169571623,0.17597425963228,-0.304444496008513, + -1.82280585298011e-06,-0.00363267030493275,0.184377564186613,-0.330556679603477, + -1.82940890763872e-06,-0.00351494891414927,0.192780868740946,-0.356668863198441, + -1.83601196235283e-06,-0.00339722752336558,0.20118417329528,-0.382781046793404, + -1.84261501723348e-06,-0.00327950613258277,0.209587477849613,-0.408893230388368, + -1.84921807167004e-06,-0.0031617847417984,0.217990782403947,-0.435005413983332, + -1.85582112677274e-06,-0.00304406335101559,0.22639408695828,-0.461117597578296, + -1.86242418098725e-06,-0.00292634196023167,0.234797391512613,-0.487229781173259, + -1.8690272358679e-06,-0.00280862056944797,0.243200696066947,-0.513341964768223, + -1.87563029052651e-06,-0.00269089917866472,0.25160400062128,-0.539454148363187, + -1.8822333456292e-06,-0.00257317778788146,0.260007305175614,-0.56556633195815, + -1.8888363997327e-06,-0.00245545639709754,0.268410609729947,-0.591678515553114, + -1.89543945450232e-06,-0.00233773500631429,0.27681391428428,-0.617790699148078, + -1.90204250860582e-06,-0.00222001361552948,0.285217218838614,-0.643902882743042, + -1.90864556393056e-06,-0.00210229222474689,0.293620523392947,-0.670015066338005, + -1.91524861914427e-06,-0.00198457083396431,0.30202382794728,-0.696127249932969, + -1.92185167358083e-06,-0.00186684944317994,0.310427132501614,-0.722239433527933, + -1.92845472835046e-06,-0.00174912805239646,0.318830437055948,-0.748351617122897, + -1.93505778334213e-06,-0.00163140666161343,0.327233741610281,-0.774463800717861, + -1.94166083788971e-06,-0.00151368527082996,0.335637046164614,-0.800575984312824, + -1.28023268458621e-06,-0.00430769541124465,0.13375752027218,-0.174040638482477, + -1.28444787067528e-06,-0.00419506150919025,0.142122504725356,-0.200175801180263, + -1.28866305693087e-06,-0.00408242760713606,0.150487489178533,-0.226310963878049, + -1.29287824313096e-06,-0.00396979370508199,0.15885247363171,-0.252446126575835, + -1.29709342916451e-06,-0.00385715980302748,0.167217458084887,-0.27858128927362, + -1.3013086154201e-06,-0.00374452590097341,0.175582442538064,-0.304716451971406, + -1.30552380173121e-06,-0.00363189199891956,0.183947426991241,-0.330851614669192, + -1.30973898798681e-06,-0.00351925809686526,0.192312411444418,-0.356986777366977, + -1.31395417385383e-06,-0.0034066241948103,0.200677395897595,-0.383121940064763, + -1.31816936016493e-06,-0.00329399029275668,0.209042380350771,-0.409257102762549, + -1.32238454653155e-06,-0.00318135639070261,0.217407364803948,-0.435392265460334, + -1.32659973217653e-06,-0.00306872248864742,0.225772349257126,-0.46152742815812, + -1.33081491859866e-06,-0.0029560885865938,0.234137333710302,-0.487662590855906, + -1.33503010513181e-06,-0.00284345468453995,0.242502318163479,-0.513797753553691, + -1.33924529055474e-06,-0.00273082078248432,0.250867302616656,-0.539932916251477, + -1.34346047697687e-06,-0.00261818688043114,0.259232287069832,-0.566068078949263, + -1.34767566317695e-06,-0.00250555297837662,0.26759727152301,-0.592203241647048, + -1.35189084937704e-06,-0.00239291907632255,0.275962255976187,-0.618338404344834, + -1.35610603602121e-06,-0.00228028517426893,0.284327240429363,-0.64447356704262, + -1.36032122188823e-06,-0.00216765127221441,0.29269222488254,-0.670608729740405, + -1.36453640819933e-06,-0.0020550173701599,0.301057209335717,-0.696743892438191, + -1.36875159373329e-06,-0.00194238346810494,0.309422193788894,-0.722879055135977, + -1.37296678082155e-06,-0.0018297495660522,0.31778717824207,-0.749014217833762, + -1.37718196691061e-06,-0.00171711566399724,0.326152162695248,-0.775149380531548, + -1.38139715266661e-06,-0.00160448176194272,0.334517147148425,-0.801284543229334, + -0.000122614663452481,-0.0182265374582882,0.184700687434548,-0.14020061472181, + -0.000131218248003218,-0.0176287050077489,0.201397418238037,-0.160027840678904, + -0.000139821832554121,-0.0170308725572099,0.218094149041525,-0.179855066635997, + -0.000148425417104747,-0.0164330401066703,0.234790879845014,-0.19968229259309, + -0.000157029001655817,-0.0158352076561317,0.251487610648502,-0.219509518550184, + -0.000165632586206443,-0.0152373752055923,0.268184341451991,-0.239336744507277, + -0.000174236170757125,-0.014639542755053,0.284881072255479,-0.25916397046437, + -0.000182839755308362,-0.0140417103045141,0.301577803058968,-0.278991196421464, + -0.000191443339859043,-0.0134438778539749,0.318274533862456,-0.298818422378557, + -0.000200046924409891,-0.012846045403436,0.334971264665945,-0.31864564833565, + -0.000208650508960684,-0.0122482129528969,0.351667995469433,-0.338472874292744, + -0.000217254093511254,-0.0116503805023573,0.368364726272922,-0.358300100249837, + -0.000225857678061936,-0.0110525480518178,0.38506145707641,-0.37812732620693, + -0.000234461262613062,-0.0104547156012789,0.401758187879899,-0.397954552164024, + -0.000243064847163854,-0.00985688315073996,0.418454918683387,-0.417781778121117, + -0.000251668431714425,-0.00925905070020061,0.435151649486876,-0.43760900407821, + -0.000260272016265217,-0.00866121824966148,0.451848380290364,-0.457436230035304, + -0.00026887560081601,-0.00806338579912236,0.468545111093853,-0.477263455992397, + -0.000277479185367469,-0.0074655533485839,0.485241841897341,-0.49709068194949, + -0.000286082769917928,-0.00686772089804411,0.50193857270083,-0.516917907906583, + -0.000294686354469054,-0.00626988844750542,0.518635303504318,-0.536745133863677, + -0.000303289939019624,-0.00567205599696585,0.535332034307807,-0.55657235982077, + -0.000311893523570195,-0.00507422354642673,0.552028765111295,-0.576399585777863, + -0.000320497108121431,-0.00447639109588804,0.568725495914784,-0.596226811734957, + -0.000329100692672002,-0.00387855864534847,0.585422226718272,-0.61605403769205, + -0.00012124524057977,-0.0179782783708148,0.18424235710624,-0.140753479772638, + -0.00012968129392199,-0.0173765912123108,0.200846784262435,-0.160656432524923, + -0.000138117347264211,-0.0167749040538067,0.217451211418631,-0.180559385277208, + -0.000146553400606431,-0.0161732168953023,0.234055638574827,-0.200462338029494, + -0.000154989453948706,-0.0155715297367984,0.250660065731022,-0.220365290781779, + -0.000163425507290871,-0.0149698425782943,0.267264492887218,-0.240268243534064, + -0.000171861560632869,-0.0143681554197899,0.283868920043414,-0.260171196286349, + -0.000180297613975089,-0.0137664682612855,0.30047334719961,-0.280074149038634, + -0.000188733667317309,-0.0131647811027815,0.317077774355806,-0.299977101790919, + -0.000197169720659307,-0.0125630939442771,0.333682201512001,-0.319880054543204, + -0.000205605774001527,-0.0119614067857732,0.350286628668197,-0.339783007295489, + -0.000214041827343858,-0.011359719627269,0.366891055824393,-0.359685960047774, + -0.000222477880685967,-0.0107580324687648,0.383495482980589,-0.37958891280006, + -0.000230913934028076,-0.0101563453102604,0.400099910136784,-0.399491865552345, + -0.000239349987370407,-0.00955465815175627,0.41670433729298,-0.41939481830463, + -0.000247786040712406,-0.0089529709932521,0.433308764449176,-0.439297771056915, + -0.000256222094054626,-0.00835128383474792,0.449913191605372,-0.4592007238092, + -0.000264658147396735,-0.00774959667624375,0.466517618761567,-0.479103676561485, + -0.000273094200738955,-0.00714790951773936,0.483122045917763,-0.49900662931377, + -0.000281530254081508,-0.00654622235923563,0.499726473073959,-0.518909582066055, + -0.000289966307423395,-0.00594453520073124,0.516330900230155,-0.53881253481834, + -0.000298402360764616,-0.00534284804222596,0.532935327386351,-0.558715487570626, + -0.000306838414107946,-0.00474116088372289,0.549539754542546,-0.57861844032291, + -0.000315274467450166,-0.00413947372521895,0.566144181698742,-0.598521393075196, + -0.000323710520791942,-0.00353778656671411,0.582748608854938,-0.618424345827481, + -0.000119378181690943,-0.0176441252191403,0.183615232002131,-0.141503731285682, + -0.000127588016705371,-0.0170376200221406,0.200093694121303,-0.161509447167207, + -0.000135797851719244,-0.0164311148251405,0.216572156240475,-0.181515163048732, + -0.000144007686733449,-0.0158246096281407,0.233050618359647,-0.201520878930258, + -0.000152217521747489,-0.0152181044311408,0.249529080478819,-0.221526594811783, + -0.000160427356761805,-0.0146115992341411,0.266007542597991,-0.241532310693308, + -0.0001686371917759,-0.0140050940371412,0.282486004717163,-0.261538026574833, + -0.000176847026789773,-0.0133985888401411,0.298964466836335,-0.281543742456359, + -0.000185056861803923,-0.012792083643141,0.315442928955508,-0.301549458337884, + -0.000193266696818295,-0.0121855784461413,0.33192139107468,-0.321555174219409, + -0.000201476531832334,-0.0115790732491414,0.348399853193852,-0.341560890100934, + -0.000209686366846373,-0.0109725680521415,0.364878315313024,-0.36156660598246, + -0.000217896201860079,-0.0103660628551412,0.381356777432196,-0.381572321863985, + -0.000226106036874563,-0.00975955765814196,0.397835239551368,-0.40157803774551, + -0.000234315871889046,-0.00915305246114251,0.41431370167054,-0.421583753627035, + -0.000242525706902641,-0.00854654726414172,0.430792163789712,-0.441589469508561, + -0.000250735541916902,-0.00794004206714205,0.447270625908884,-0.461595185390086, + -0.000258945376931052,-0.00733353687014215,0.463749088028056,-0.481600901271611, + -0.000267155211945314,-0.00672703167314248,0.480227550147228,-0.501606617153136, + -0.000275365046959131,-0.00612052647614236,0.4967060122664,-0.521612333034661, + -0.000283574881973836,-0.00551402127914269,0.513184474385572,-0.541618048916187, + -0.00029178471698732,-0.00490751608214213,0.529662936504745,-0.561623764797712, + -0.00029999455200147,-0.00430101088514245,0.546141398623917,-0.581629480679237, + -0.000308204387015398,-0.00369450568814234,0.562619860743089,-0.601635196560763, + -0.000316414222030104,-0.00308800049114355,0.57909832286226,-0.621640912442288, + -0.000116857500888801,-0.0172007722457338,0.182764509922216,-0.142510314726809, + -0.000124765947903338,-0.0165885507931877,0.199072691324401,-0.162653903924753, + -0.000132674394917875,-0.0159763293406416,0.215380872726586,-0.182797493122697, + -0.000140582841932135,-0.0153641078880949,0.231689054128772,-0.202941082320641, + -0.000148491288946673,-0.014751886435549,0.247997235530957,-0.223084671518585, + -0.00015639973596121,-0.014139664983003,0.264305416933141,-0.243228260716529, + -0.000164308182975581,-0.0135274435304569,0.280613598335327,-0.263371849914473, + -0.000172216629990285,-0.0129152220779107,0.296921779737512,-0.283515439112417, + -0.000180125077004878,-0.0123030006253648,0.313229961139696,-0.303659028310361, + -0.000188033524019304,-0.0116907791728189,0.329538142541881,-0.323802617508305, + -0.000195941971033564,-0.0110785577202723,0.345846323944066,-0.343946206706248, + -0.000203850418047935,-0.010466336267726,0.362154505346251,-0.364089795904193, + -0.00021175886506275,-0.00985411481518028,0.378462686748436,-0.384233385102137, + -0.000219667312077121,-0.00924189336263415,0.394770868150621,-0.404376974300081, + -0.000227575759091714,-0.00862967191008779,0.411079049552806,-0.424520563498025, + -0.000235484206106307,-0.0080174504575421,0.427387230954991,-0.444664152695969, + -0.000243392653120789,-0.00740522900499574,0.443695412357177,-0.464807741893913, + -0.000251301100135048,-0.00679300755244938,0.460003593759361,-0.484951331091857, + -0.000259209547149863,-0.00618078609990369,0.476311775161546,-0.5050949202898, + -0.000267117994163901,-0.00556856464735755,0.492619956563731,-0.525238509487744, + -0.000275026441178161,-0.00495634319481031,0.508928137965917,-0.545382098685688, + -0.000282934888193087,-0.00434412174226528,0.525236319368101,-0.565525687883633, + -0.000290843335207902,-0.00373190028971937,0.541544500770286,-0.585669277081576, + -0.000298751782222162,-0.00311967883717301,0.557852682172471,-0.605812866279521, + -0.000306660229236422,-0.00250745738462665,0.574160863574656,-0.625956455477464, + -0.000113499264498385,-0.0166236968541382,0.181623997566467,-0.143840374637536, + -0.000121013399512926,-0.0160052391047554,0.197704930157943,-0.16416614423249, + -0.000128527534527689,-0.0153867813553729,0.21378586274942,-0.184491913827443, + -0.000136041669542286,-0.0147683236059902,0.229866795340896,-0.204817683422397, + -0.000143555804556716,-0.0141498658566074,0.245947727932373,-0.22514345301735, + -0.000151069939571424,-0.0135314081072249,0.26202866052385,-0.245469222612303, + -0.000158584074586021,-0.0129129503578422,0.278109593115326,-0.265794992207257, + -0.000166098209600452,-0.0122944926084594,0.294190525706803,-0.28612076180221, + -0.000173612344615326,-0.011676034859077,0.310271458298279,-0.306446531397163, + -0.000181126479629756,-0.0110575771096939,0.326352390889757,-0.326772300992117, + -0.000188640614644298,-0.0104391193603111,0.342433323481233,-0.34709807058707, + -0.000196154749659061,-0.00982066161092843,0.35851425607271,-0.367423840182024, + -0.000203668884673602,-0.0092022038615458,0.374595188664186,-0.387749609776977, + -0.000211183019688033,-0.00858374611216273,0.390676121255663,-0.408075379371931, + -0.000218697154702685,-0.00796528836278032,0.40675705384714,-0.428401148966884, + -0.000226211289717226,-0.00734683061339725,0.422837986438617,-0.448726918561837, + -0.000233725424731879,-0.00672837286401484,0.438918919030093,-0.469052688156791, + -0.000241239559746531,-0.00610991511463244,0.454999851621569,-0.489378457751744, + -0.000248753694761072,-0.00549145736524936,0.471080784213046,-0.509704227346697, + -0.000256267829775281,-0.00487299961586629,0.487161716804523,-0.530029996941651, + -0.000263781964790377,-0.00425454186648411,0.503242649396,-0.550355766536604, + -0.00027129609980503,-0.00363608411710192,0.519323581987476,-0.570681536131558, + -0.000278810234819682,-0.00301762636771885,0.535404514578953,-0.59100730572651, + -0.000286324369834112,-0.00239916861833578,0.55148544717043,-0.611333075321464, + -0.000293838504849098,-0.00178071086895359,0.567566379761906,-0.631658844916418, + -0.000109103850067294,-0.015891206727496,0.180119204645341,-0.145562895609843, + -0.000116114444255633,-0.0152669061543458,0.195902033200158,-0.166124601610413, + -0.000123125038444472,-0.0146426055811961,0.211684861754975,-0.186686307610983, + -0.000130135632633088,-0.0140183050080465,0.227467690309792,-0.207248013611553, + -0.000137146226821649,-0.0133940044348966,0.243250518864608,-0.227809719612123, + -0.000144156821010155,-0.0127697038617467,0.259033347419425,-0.248371425612694, + -0.000151167415198716,-0.0121454032885968,0.274816175974242,-0.268933131613264, + -0.000158178009387611,-0.0115211027154469,0.290599004529059,-0.289494837613834, + -0.00016518860357595,-0.0108968021422968,0.306381833083876,-0.310056543614404, + -0.0001721991977649,-0.0102725015691476,0.322164661638692,-0.330618249614974, + -0.000179209791953405,-0.00964820099599795,0.337947490193509,-0.351179955615544, + -0.000186220386142022,-0.00902390042284784,0.353730318748326,-0.371741661616114, + -0.000193230980330417,-0.00839959984969796,0.369513147303142,-0.392303367616684, + -0.000200241574519033,-0.00777529927654808,0.385295975857959,-0.412865073617254, + -0.000207252168707539,-0.00715099870339819,0.401078804412776,-0.433426779617824, + -0.000214262762895934,-0.00652669813024809,0.416861632967593,-0.453988485618394, + -0.000221273357084772,-0.0059023975570982,0.43264446152241,-0.474550191618964, + -0.000228283951273611,-0.00527809698394899,0.448427290077226,-0.495111897619534, + -0.000235294545462117,-0.00465379641079888,0.464210118632043,-0.515673603620104, + -0.000242305139650068,-0.00402949583764878,0.47999294718686,-0.536235309620674, + -0.000249315733839128,-0.00340519526449912,0.495775775741677,-0.556797015621244, + -0.000256326328027301,-0.00278089469134857,0.511558604296494,-0.577358721621814, + -0.000263336922216251,-0.00215659411819979,0.52734143285131,-0.597920427622384, + -0.000270347516405423,-0.00153229354505013,0.543124261406127,-0.618482133622954, + -0.000277358110593817,-0.000907992971900029,0.558907089960944,-0.639043839623524, + -0.000103483394497561,-0.0149909277874961,0.178175621500553,-0.147736534938755, + -0.000109871070723244,-0.0143628630069459,0.193576152530571,-0.168595967735466, + -0.000116258746948983,-0.0137347982263959,0.208976683560588,-0.189455400532177, + -0.000122646423174944,-0.0131067334458459,0.224377214590606,-0.210314833328888, + -0.000129034099400849,-0.012478668665296,0.239777745620624,-0.231174266125599, + -0.000135421775626365,-0.0118506038847459,0.255178276650641,-0.25203369892231, + -0.00014180945185216,-0.0112225391041958,0.270578807680659,-0.272893131719021, + -0.000148197128078009,-0.0105944743236457,0.285979338710676,-0.293752564515732, + -0.000154584804303692,-0.0099664095430958,0.301379869740694,-0.314611997312443, + -0.000160972480529487,-0.00933834476254547,0.316780400770712,-0.335471430109154, + -0.000167360156755558,-0.00871027998199603,0.332180931800729,-0.356330862905865, + -0.000173747832981519,-0.00808221520144614,0.347581462830746,-0.377190295702576, + -0.000180135509207147,-0.00745415042089581,0.362981993860764,-0.398049728499287, + -0.000186523185432441,-0.00682608564034526,0.378382524890782,-0.418909161295998, + -0.000192910861658957,-0.00619802085979604,0.393783055920799,-0.439768594092709, + -0.000199298537884474,-0.00556995607924549,0.409183586950817,-0.46062802688942, + -0.000205686214110434,-0.00494189129869649,0.424584117980834,-0.481487459686132, + -0.000212073890336173,-0.00431382651814616,0.439984649010852,-0.502346892482842, + -0.000218461566561912,-0.00368576173759583,0.455385180040869,-0.523206325279553, + -0.000224849242787761,-0.0030576969570455,0.470785711070888,-0.544065758076264, + -0.000231236919014166,-0.00242963217649672,0.486186242100904,-0.564925190872976, + -0.000237624595239572,-0.00180156739594572,0.501586773130923,-0.585784623669687, + -0.000244012271465643,-0.0011735026153965,0.516987304160939,-0.606644056466397, + -0.000250399947690605,-0.000545437834845064,0.532387835190958,-0.627503489263109, + -0.000256787623916233,8.26269457046003e-05,0.547788366220975,-0.648362922059819, + -9.65080703466126e-05,-0.0139279477482086,0.175734129785176,-0.150391361531562, + -0.000102155929316838,-0.0133007690298704,0.190658466457635,-0.171614430100443, + -0.000107803788287064,-0.0126735903115325,0.205582803130094,-0.192837498669323, + -0.000113451647257512,-0.0120464115931944,0.220507139802553,-0.214060567238203, + -0.000119099506227849,-0.0114192328748565,0.235431476475013,-0.235283635807083, + -0.000124747365197964,-0.0107920541565183,0.250355813147472,-0.256506704375964, + -0.000130395224168134,-0.01016487543818,0.265280149819931,-0.277729772944844, + -0.000136043083138415,-0.00953769671984195,0.28020448649239,-0.298952841513724, + -0.000141690942108696,-0.00891051800150411,0.295128823164849,-0.320175910082604, + -0.000147338801078978,-0.0082833392831656,0.310053159837308,-0.341398978651484, + -0.000152986660049148,-0.00765616056482754,0.324977496509767,-0.362622047220365, + -0.00015863451901954,-0.0070289818464897,0.339901833182226,-0.383845115789245, + -0.000164282377990155,-0.00640180312815208,0.354826169854685,-0.405068184358125, + -0.000169930236960325,-0.0057746244098138,0.369750506527144,-0.426291252927005, + -0.000175578095930828,-0.00514744569147618,0.384674843199603,-0.447514321495886, + -0.000181225954900999,-0.0045202669731379,0.399599179872063,-0.468737390064766, + -0.000186873813871058,-0.00389308825479961,0.414523516544522,-0.489960458633646, + -0.000192521672841117,-0.00326590953646155,0.429447853216981,-0.511183527202526, + -0.000198169531811732,-0.00263873081812349,0.44437218988944,-0.532406595771406, + -0.00020381739078168,-0.00201155209978499,0.459296526561899,-0.553629664340286, + -0.000209465249751961,-0.00138437338144692,0.474220863234358,-0.574852732909167, + -0.000215113108721687,-0.000757194663108418,0.489145199906817,-0.596075801478047, + -0.000220760967692302,-0.000130015944771245,0.504069536579276,-0.617298870046927, + -0.000226408826662916,0.000497162773566817,0.518993873251735,-0.638521938615808, + -0.000232056685632753,0.00112434149190532,0.533918209924195,-0.659745007184688, + -8.8167383742177e-05,-0.0127318878404413,0.172773369911458,-0.153507625942697, + -9.29801404675468e-05,-0.0121134777557286,0.187125744444409,-0.175157534147167, + -9.77928971929165e-05,-0.0114950676710156,0.201478118977361,-0.196807442351636, + -0.000102605653918175,-0.0108766575863025,0.215830493510312,-0.218457350556106, + -0.000107418410643711,-0.0102582475015902,0.230182868043263,-0.240107258760576, + -0.000112231167369248,-0.00963983741687757,0.244535242576215,-0.261757166965045, + -0.000117043924094729,-0.00902142733216471,0.258887617109166,-0.283407075169515, + -0.000121856680820098,-0.00840301724745185,0.273239991642118,-0.305056983373984, + -0.00012666943754569,-0.00778460716273943,0.287592366175069,-0.326706891578454, + -0.00013148219427106,-0.00716619707802657,0.30194474070802,-0.348356799782923, + -0.000136294950996541,-0.00654778699331393,0.316297115240971,-0.370006707987393, + -0.000141107707721688,-0.00592937690860063,0.330649489773923,-0.391656616191862, + -0.000145920464447613,-0.00531096682388865,0.345001864306874,-0.413306524396332, + -0.000150733221172539,-0.0046925567391749,0.359354238839826,-0.434956432600801, + -0.000155545977898242,-0.00407414665446293,0.373706613372777,-0.456606340805271, + -0.000160358734623389,-0.00345573656974962,0.388058987905728,-0.47825624900974, + -0.000165171491349203,-0.00283732648503743,0.402411362438679,-0.49990615721421, + -0.000169984248074462,-0.00221891640032479,0.41676373697163,-0.521556065418679, + -0.000174797004800054,-0.00160050631561126,0.431116111504583,-0.543205973623149, + -0.000179609761525645,-0.000982096230899288,0.445468486037533,-0.564855881827618, + -0.000184422518250682,-0.000363686146186204,0.459820860570485,-0.586505790032088, + -0.000189235274976163,0.00025472393852688,0.474173235103436,-0.608155698236558, + -0.000194048031701421,0.000873134023239963,0.488525609636388,-0.629805606441026, + -0.000198860788426458,0.00149154410795305,0.502877984169339,-0.651455514645497, + -0.000203673545152272,0.0021099541926648,0.51723035870229,-0.673105422849966, + -7.86289681380947e-05,-0.0114584727726581,0.169334019550029,-0.156999449137054, + -8.25550523894658e-05,-0.0108598557752654,0.18302882216364,-0.179127637854081, + -8.64811366408369e-05,-0.0102612387778728,0.196723624777251,-0.201255826571108, + -9.04072208925411e-05,-0.0096626217804805,0.210418427390862,-0.223384015288135, + -9.43333051438566e-05,-0.00906400478308766,0.224113230004473,-0.245512204005161, + -9.82593893955053e-05,-0.00846538778569528,0.237808032618083,-0.267640392722188, + -0.000102185473646876,-0.00786677078830267,0.251502835231694,-0.289768581439215, + -0.000106111557898247,-0.00726815379091006,0.265197637845305,-0.311896770156242, + -0.000110037642149785,-0.00666953679351745,0.278892440458916,-0.334024958873268, + -0.000113963726401156,-0.00607091979612462,0.292587243072527,-0.356153147590295, + -0.000117889810652638,-0.00547230279873223,0.306282045686137,-0.378281336307322, + -0.000121815894904453,-0.00487368580133984,0.319976848299748,-0.400409525024349, + -0.000125741979156158,-0.00427506880394768,0.333671650913359,-0.422537713741375, + -0.000129668063407085,-0.0036764518065544,0.34736645352697,-0.444665902458402, + -0.000133594147658234,-0.00307783480916135,0.361061256140581,-0.466794091175429, + -0.000137520231909716,-0.00247921781176896,0.374756058754192,-0.488922279892456, + -0.00014144631616142,-0.00188060081437658,0.388450861367802,-0.511050468609482, + -0.000145372400413013,-0.00128198381698441,0.402145663981413,-0.533178657326509, + -0.000149298484664273,-0.000683366819591136,0.415840466595024,-0.555306846043536, + -0.000153224568916088,-8.47498221991927e-05,0.429535269208634,-0.577435034760563, + -0.000157150653167459,0.000513867175193194,0.443230071822245,-0.59956322347759, + -0.000161076737418275,0.00111248417258691,0.456924874435856,-0.621691412194616, + -0.000165002821670424,0.00171110116997841,0.470619677049467,-0.643819600911643, + -0.000168928905921573,0.00230971816737124,0.484314479663078,-0.66594778962867, + -0.000172854990173166,0.00290833516476408,0.498009282276689,-0.688075978345696, + -6.82638380566924e-05,-0.0101818832773357,0.165533897607265,-0.160714117803524, + -7.13127930284108e-05,-0.0096159520438085,0.178509811924003,-0.183351110527767, + -7.43617479999625e-05,-0.00905002081028106,0.19148572624074,-0.205988103252009, + -7.74107029712368e-05,-0.00848408957675328,0.204461640557478,-0.228625095976252, + -8.04596579429551e-05,-0.00791815834322585,0.217437554874215,-0.251262088700495, + -8.35086129143958e-05,-0.00735222710969841,0.230413469190953,-0.273899081424738, + -8.65575678858921e-05,-0.00678629587617108,0.24338938350769,-0.296536074148981, + -8.96065228574439e-05,-0.00622036464264353,0.256365297824428,-0.319173066873224, + -9.26554778290511e-05,-0.0056544334091162,0.269341212141165,-0.341810059597467, + -9.57044328000478e-05,-0.00508850217558798,0.282317126457903,-0.36444705232171, + -9.87533877719882e-05,-0.0045225709420611,0.29529304077464,-0.387084045045953, + -0.000101802342743373,-0.00395663970853333,0.308268955091378,-0.409721037770196, + -0.00010485129771487,-0.003390708475006,0.321244869408115,-0.432358030494439, + -0.000107900252686366,-0.00282477724147867,0.334220783724852,-0.454995023218682, + -0.000110949207658084,-0.00225884600795134,0.34719669804159,-0.477632015942924, + -0.000113998162629358,-0.00169291477442379,0.360172612358327,-0.500269008667167, + -0.000117047117600966,-0.00112698354089602,0.373148526675065,-0.52290600139141, + -0.000120096072572351,-0.000561052307368692,0.386124440991802,-0.545542994115653, + -0.000123145027543736,4.87892615907981e-06,0.39910035530854,-0.568179986839896, + -0.000126193982515899,0.000570810159685742,0.412076269625277,-0.590816979564139, + -0.000129242937486951,0.00113674139321418,0.425052183942015,-0.613453972288382, + -0.000132291892458669,0.00170267262674129,0.438028098258752,-0.636090965012625, + -0.000135340847430832,0.00226860386026795,0.451004012575489,-0.658727957736868, + -0.000138389802401662,0.00283453509379639,0.463979926892227,-0.681364950461111, + -0.000141438757373047,0.00340046632732349,0.476955841208964,-0.704001943185353, + -5.76086222014993e-05,-0.00897866422883398,0.161561041172487,-0.164453825550056, + -5.98549438223239e-05,-0.0084578203509732,0.173793070280581,-0.187603051923676, + -6.2101265443093e-05,-0.00793697647311231,0.186025099388675,-0.210752278297296, + -6.43475870640287e-05,-0.00741613259525187,0.198257128496769,-0.233901504670916, + -6.65939086847422e-05,-0.00689528871739109,0.210489157604863,-0.257050731044537, + -6.88402303057334e-05,-0.00637444483953065,0.222721186712957,-0.280199957418157, + -7.10865519266135e-05,-0.00585360096167009,0.234953215821051,-0.303349183791777, + -7.33328735476046e-05,-0.00533275708380976,0.247185244929145,-0.326498410165397, + -7.55791951681517e-05,-0.00481191320594854,0.259417274037239,-0.349647636539017, + -7.78255167890318e-05,-0.00429106932808798,0.271649303145333,-0.372796862912638, + -8.00718384098564e-05,-0.0037702254502272,0.283881332253427,-0.395946089286258, + -8.2318160030348e-05,-0.00324938157236643,0.296113361361521,-0.419095315659878, + -8.45644816517277e-05,-0.00272853769450632,0.308345390469615,-0.442244542033498, + -8.68108032721082e-05,-0.0022076938166451,0.32057741957771,-0.465393768407119, + -8.90571248933769e-05,-0.00168684993878498,0.332809448685804,-0.488542994780739, + -9.13034465139795e-05,-0.00116600606092376,0.345041477793898,-0.511692221154359, + -9.35497681350261e-05,-0.00064516218306343,0.357273506901992,-0.534841447527979, + -9.57960897559618e-05,-0.000124318305202875,0.369505536010086,-0.557990673901599, + -9.80424113763423e-05,0.00039652557265768,0.38173756511818,-0.58113990027522, + -0.000100288732997611,0.000917369450518457,0.393969594226274,-0.60428912664884, + -0.000102535054617992,0.00143821332837968,0.406201623334368,-0.62743835302246, + -0.000104781376239038,0.00195905720624001,0.418433652442462,-0.65058757939608, + -0.000107027697860196,0.00247990108410034,0.430665681550556,-0.6737368057697, + -0.000109274019480687,0.00300074496196157,0.44289771065865,-0.696886032143321, + -0.000111520341101068,0.00352158883982234,0.455129739766744,-0.720035258516941, + -4.72626734265291e-05,-0.00790980246243134,0.157640135075173,-0.168015448572707, + -4.88320054694569e-05,-0.00744332688314142,0.169144905200348,-0.191652516051101, + -5.04013375124401e-05,-0.00697685130385139,0.180649675325522,-0.215289583529495, + -5.19706695553124e-05,-0.00651037572456115,0.192154445450698,-0.238926651007889, + -5.35400015984067e-05,-0.00604390014527156,0.203659215575872,-0.262563718486283, + -5.5109333641723e-05,-0.00557742456598165,0.215163985701047,-0.286200785964677, + -5.66786656842622e-05,-0.00511094898669118,0.226668755826222,-0.309837853443071, + -5.82479977276895e-05,-0.00464447340740182,0.238173525951397,-0.333474920921464, + -5.98173297702287e-05,-0.00417799782811112,0.249678296076572,-0.357111988399858, + -6.1386661813323e-05,-0.00371152224882132,0.261183066201747,-0.380749055878252, + -6.29559938565283e-05,-0.00324504666953151,0.272687836326922,-0.404386123356646, + -6.45253258990675e-05,-0.00277857109024127,0.284192606452097,-0.42802319083504, + -6.60946579422728e-05,-0.00231209551095146,0.295697376577272,-0.451660258313434, + -6.7663989985367e-05,-0.00184561993166121,0.307202146702447,-0.475297325791828, + -6.92333220281283e-05,-0.00137914435237096,0.318706916827622,-0.498934393270221, + -7.08026540713336e-05,-0.000912668773081382,0.330211686952797,-0.522571460748615, + -7.23719861140948e-05,-0.000446193193791578,0.341716457077972,-0.546208528227009, + -7.3941318156745e-05,2.02823854995593e-05,0.353221227203147,-0.569845595705403, + -7.55106502005054e-05,0.00048675796478781,0.364725997328321,-0.593482663183797, + -7.70799822429336e-05,0.000953233544079168,0.376230767453497,-0.617119730662191, + -7.86493142861389e-05,0.00141970912336831,0.387735537578671,-0.640756798140585, + -8.0218646328678e-05,0.00188618470265922,0.399240307703847,-0.664393865618979, + -8.17879783723274e-05,0.00235266028194836,0.410745077829021,-0.688030933097372, + -8.33573104147556e-05,0.00281913586123927,0.422249847954197,-0.711668000575766, + -8.4926642458405e-05,0.00328561144052886,0.433754618079372,-0.73530506805416, + -3.77579533709094e-05,-0.00700940703286379,0.153983378606066,-0.171232582099896, + -3.88005017408211e-05,-0.00660167608253526,0.164815467990088,-0.195310305415285, + -3.98430501106772e-05,-0.00619394513220661,0.17564755737411,-0.219388028730674, + -4.08855984803114e-05,-0.00578621418187775,0.186479646758132,-0.243465752046064, + -4.1928146850001e-05,-0.0053784832315491,0.197311736142154,-0.267543475361453, + -4.29706952199682e-05,-0.00497075228122057,0.208143825526177,-0.291621198676842, + -4.40132435897134e-05,-0.00456302133089204,0.218975914910199,-0.315698921992231, + -4.50557919596806e-05,-0.00415529038056328,0.229808004294221,-0.339776645307621, + -4.60983403293147e-05,-0.00374755943023453,0.240640093678243,-0.36385436862301, + -4.71408886992819e-05,-0.00333982847990599,0.251472183062265,-0.387932091938399, + -4.81834370690271e-05,-0.00293209752957768,0.262304272446287,-0.412009815253788, + -4.92259854384391e-05,-0.00252436657924804,0.27313636183031,-0.436087538569177, + -5.02685338086284e-05,-0.00211663562891995,0.283968451214332,-0.460165261884566, + -5.13110821781515e-05,-0.00170890467859097,0.294800540598354,-0.484242985199956, + -5.23536305482297e-05,-0.00130117372826288,0.305632629982376,-0.508320708515345, + -5.33961789178639e-05,-0.000893442777933906,0.316464719366399,-0.532398431830734, + -5.443872728772e-05,-0.000485711827605373,0.327296808750421,-0.556476155146123, + -5.54812756574652e-05,-7.79808772761736e-05,0.338128898134443,-0.580553878461512, + -5.65238240276544e-05,0.000329750073051471,0.348960987518465,-0.604631601776902, + -5.75663723968445e-05,0.000737481023381115,0.359793076902488,-0.62870932509229, + -5.86089207670337e-05,0.00114521197370943,0.37062516628651,-0.65278704840768, + -5.96514691363348e-05,0.00155294292403862,0.381457255670532,-0.676864771723069, + -6.0694017506524e-05,0.00196067387436694,0.392289345054554,-0.700942495038458, + -6.17365658760471e-05,0.00236840482469569,0.403121434438577,-0.725020218353847, + -6.27791142463474e-05,0.00277613577502356,0.413953523822598,-0.749097941669236, + -2.94584137228715e-05,-0.00628396626851779,0.150747391027488,-0.174002534052311, + -3.01208270984121e-05,-0.00593417615710912,0.160988314506727,-0.198459662041367, + -3.07832404738972e-05,-0.00558438604570033,0.171229237985966,-0.222916790030424, + -3.14456538492713e-05,-0.00523459593429121,0.181470161465205,-0.247373918019481, + -3.21080672247009e-05,-0.00488480582288231,0.191711084944444,-0.271831046008538, + -3.27704806001305e-05,-0.00453501571147341,0.201952008423683,-0.296288173997594, + -3.34328939759487e-05,-0.00418522560006473,0.212192931902922,-0.320745301986651, + -3.40953073512673e-05,-0.00383543548865561,0.222433855382161,-0.345202429975708, + -3.47577207264749e-05,-0.00348564537724672,0.2326747788614,-0.369659557964765, + -3.54201341026261e-05,-0.00313585526583848,0.242915702340639,-0.394116685953821, + -3.60825474780002e-05,-0.00278606515442936,0.253156625819878,-0.418573813942878, + -3.67449608530412e-05,-0.0024362750430198,0.263397549299118,-0.443030941931935, + -3.74073742285264e-05,-0.00208648493161134,0.273638472778356,-0.467488069920992, + -3.80697876042335e-05,-0.00173669482020244,0.283879396257595,-0.491945197910048, + -3.87322009793856e-05,-0.00138690470879332,0.294120319736835,-0.516402325899105, + -3.93946143547597e-05,-0.0010371145973842,0.304361243216074,-0.540859453888161, + -4.00570277303558e-05,-0.000687324485975527,0.314602166695312,-0.565316581877218, + -4.0719441106063e-05,-0.000337534374566406,0.324843090174552,-0.589773709866275, + -4.13818544816591e-05,1.22557368418263e-05,0.33508401365379,-0.614230837855332, + -4.20442678568111e-05,0.000362045848250947,0.345324937133029,-0.638687965844388, + -4.27066812322963e-05,0.000711835959660068,0.355565860612269,-0.663145093833445, + -4.33690946081144e-05,0.00106162607106874,0.365806784091508,-0.687602221822502, + -4.40315079831555e-05,0.00141141618247786,0.376047707570747,-0.712059349811559, + -4.46939213585296e-05,0.00176120629388699,0.386288631049986,-0.736516477800615, + -4.53563347346808e-05,0.00211099640529477,0.396529554529224,-0.760973605789672, + -2.25250364927487e-05,-0.00571963385739138,0.148013139703018,-0.176290723976157, + -2.29308207982948e-05,-0.00542286590567631,0.157757349089021,-0.201061268936432, + -2.33366051037298e-05,-0.00512609795396146,0.167501558475022,-0.225831813896707, + -2.37423894093314e-05,-0.00482933000224683,0.177245767861024,-0.250602358856982, + -2.41481737149329e-05,-0.0045325620505321,0.186989977247026,-0.275372903817258, + -2.45539580204235e-05,-0.00423579409881714,0.196734186633028,-0.300143448777533, + -2.49597423256365e-05,-0.00393902614710195,0.206478396019031,-0.324913993737808, + -2.53655266314601e-05,-0.00364225819538766,0.216222605405032,-0.349684538698083, + -2.57713109371172e-05,-0.0033454902436727,0.225966814791035,-0.374455083658358, + -2.61770952424412e-05,-0.00304872229195752,0.235711024177037,-0.399225628618633, + -2.65828795481537e-05,-0.002751954340243,0.245455233563038,-0.423996173578908, + -2.69886638538663e-05,-0.00245518638852849,0.25519944294904,-0.448766718539183, + -2.73944481592459e-05,-0.0021584184368133,0.264943652335043,-0.473537263499459, + -2.78002324645144e-05,-0.00186165048509856,0.274687861721044,-0.498307808459734, + -2.8206016770449e-05,-0.00156488253338405,0.284432071107046,-0.523078353420009, + -2.86118010754954e-05,-0.0012681145816682,0.294176280493049,-0.547848898380284, + -2.9017585381208e-05,-0.000971346629953906,0.303920489879051,-0.572619443340559, + -2.94233696872537e-05,-0.000674578678239168,0.313664699265053,-0.597389988300834, + -2.98291539919671e-05,-0.000377810726523542,0.323408908651055,-0.622160533261109, + -3.02349382976796e-05,-8.1042774809692e-05,0.333153118037056,-0.646931078221385, + -3.06407226035033e-05,0.00021572517690549,0.342897327423059,-0.67170162318166, + -3.10465069094379e-05,0.00051249312861934,0.35264153680906,-0.696472168141935, + -3.14522912144843e-05,0.000809261080335411,0.362385746195063,-0.72124271310221, + -3.18580755203079e-05,0.0011060290320497,0.372129955581065,-0.746013258062485, + -3.22638598256875e-05,0.00140279698376444,0.381874164967066,-0.77078380302276, + -1.69427810465805e-05,-0.00529196453517244,0.145791002598509,-0.178117155137419, + -1.71846844633783e-05,-0.00504087958355992,0.155133302926869,-0.203137869245253, + -1.74265878804536e-05,-0.00478979463194773,0.164475603255229,-0.228158583353087, + -1.76684912975844e-05,-0.00453870968033554,0.173817903583589,-0.253179297460921, + -1.79103947145487e-05,-0.00428762472872313,0.183160203911949,-0.278200011568755, + -1.81522981316795e-05,-0.00403653977711138,0.192502504240309,-0.303220725676589, + -1.83942015486438e-05,-0.00378545482549875,0.20184480456867,-0.328241439784423, + -1.86361049658301e-05,-0.003534369873887,0.211187104897029,-0.353262153892257, + -1.8878008383072e-05,-0.00328328492227503,0.220529405225389,-0.378282868000091, + -1.91199117999252e-05,-0.00303219997066262,0.22987170555375,-0.403303582107925, + -1.93618152167785e-05,-0.00278111501905021,0.23921400588211,-0.428324296215759, + -1.96037186340758e-05,-0.00253003006743868,0.248556306210469,-0.453345010323593, + -1.98456220508181e-05,-0.00227894511582583,0.25789860653883,-0.478365724431427, + -2.00875254680044e-05,-0.00202786016421408,0.26724090686719,-0.503386438539261, + -2.03294288851907e-05,-0.00177677521260144,0.27658320719555,-0.528407152647095, + -2.05713323023771e-05,-0.00152569026098992,0.28592550752391,-0.553427866754929, + -2.08132357187862e-05,-0.00127460530937684,0.29526780785227,-0.578448580862764, + -2.10551391363056e-05,-0.00102352035776532,0.30461010818063,-0.603469294970598, + -2.1297042553492e-05,-0.000772435406153349,0.31395240850899,-0.628490009078432, + -2.15389459705673e-05,-0.000521350454540936,0.32329470883735,-0.653510723186266, + -2.17808493869764e-05,-0.00027026550292808,0.33263700916571,-0.6785314372941, + -2.20227528044958e-05,-1.91805513165555e-05,0.34197930949407,-0.703552151401934, + -2.2264656221016e-05,0.000231904400296301,0.351321609822431,-0.728572865509768, + -2.25065596389795e-05,0.000482989351906937,0.36066391015079,-0.753593579617602, + -2.27484630563879e-05,0.000734074303518462,0.37000621047915,-0.778614293725436, + -1.25796224305641e-05,-0.00497385379081838,0.144041111545111,-0.179535473036997, + -1.27213375839541e-05,-0.00476030761378166,0.153067982140322,-0.204750456377328, + -1.28630527372886e-05,-0.00454676143674471,0.162094852735533,-0.229965439717658, + -1.30047678906786e-05,-0.00433321525970787,0.171121723330744,-0.255180423057988, + -1.31464830440686e-05,-0.00411966908267081,0.180148593925955,-0.280395406398318, + -1.32881981972366e-05,-0.00390612290563386,0.189175464521166,-0.305610389738648, + -1.34299133506266e-05,-0.00369257672859713,0.198202335116377,-0.330825373078978, + -1.35716285043497e-05,-0.0034790305515604,0.207229205711588,-0.356040356419308, + -1.37133436574066e-05,-0.00326548437452323,0.216256076306799,-0.381255339759638, + -1.38550588110187e-05,-0.00305193819748673,0.225282946902009,-0.406470323099968, + -1.39967739640756e-05,-0.00283839202044955,0.23430981749722,-0.431685306440298, + -1.41384891176877e-05,-0.00262484584341283,0.243336688092431,-0.456900289780629, + -1.42802042709667e-05,-0.00241129966637588,0.252363558687642,-0.482115273120959, + -1.44219194244677e-05,-0.00219775348933915,0.261390429282853,-0.507330256461289, + -1.45636345776357e-05,-0.0019842073123022,0.270417299878064,-0.532545239801619, + -1.47053497310257e-05,-0.00177066113526525,0.279444170473275,-0.557760223141949, + -1.48470648845267e-05,-0.00155711495822808,0.288471041068487,-0.582975206482279, + -1.49887800380277e-05,-0.0013435687811918,0.297497911663697,-0.608190189822609, + -1.51304951909736e-05,-0.00113002260415396,0.306524782258909,-0.633405173162939, + -1.52722103444747e-05,-0.000916476427117452,0.315551652854119,-0.658620156503269, + -1.54139254983088e-05,-0.000702930250081835,0.32457852344933,-0.683835139843599, + -1.55556406512547e-05,-0.000489384073043553,0.333605394044542,-0.709050123183929, + -1.56973558047557e-05,-0.000275837896007047,0.342632264639752,-0.73426510652426, + -1.58390709580347e-05,-6.22917189705419e-05,0.351659135234963,-0.75948008986459, + -1.59807861114247e-05,0.000151254458066852,0.360686005830174,-0.78469507320492, + -9.24725226419953e-06,-0.00474026454069099,0.142696821365599,-0.180613532573666, + -9.32962552641081e-06,-0.00455646074887239,0.15148198930787,-0.205976179423591, + -9.41199878878862e-06,-0.00437265695705402,0.16026715725014,-0.231338826273517, + -9.49437205116643e-06,-0.00418885316523576,0.16905232519241,-0.256701473123442, + -9.57674531354424e-06,-0.00400504937341717,0.17783749313468,-0.282064119973368, + -9.65911857586654e-06,-0.00382124558159869,0.18662266107695,-0.307426766823293, + -9.74149183818884e-06,-0.0036374417897802,0.19540782901922,-0.332789413673219, + -9.82386510056665e-06,-0.00345363799796172,0.204192996961491,-0.358152060523144, + -9.90623836272242e-06,-0.00326983420614302,0.212978164903761,-0.383514707373069, + -9.98861162526676e-06,-0.00308603041432498,0.221763332846031,-0.408877354222995, + -1.0070984887478e-05,-0.0029022266225065,0.230548500788301,-0.43424000107292, + -1.01533581498003e-05,-0.00271842283068779,0.239333668730571,-0.459602647922846, + -1.02357314124557e-05,-0.00253461903886976,0.248118836672841,-0.484965294772771, + -1.0318104674556e-05,-0.00235081524705083,0.256904004615111,-0.510327941622697, + -1.04004779368783e-05,-0.00216701145523279,0.265689172557381,-0.535690588472622, + -1.04828511990895e-05,-0.00198320766341409,0.274474340499651,-0.561053235322547, + -1.05652244609677e-05,-0.00179940387159494,0.283259508441922,-0.586415882172473, + -1.06475977237341e-05,-0.00161560007977712,0.292044676384192,-0.611778529022398, + -1.07299709858344e-05,-0.00143179628795842,0.300829844326462,-0.637141175872324, + -1.08123442488228e-05,-0.0012479924961406,0.309615012268732,-0.662503822722249, + -1.08947175113672e-05,-0.00106418870432234,0.318400180211002,-0.687866469572174, + -1.09770907728013e-05,-0.000880384912502752,0.327185348153273,-0.7132291164221, + -1.10594640347905e-05,-0.000696581120684048,0.335970516095543,-0.738591763272025, + -1.11418372986671e-05,-0.000512777328867564,0.344755684037812,-0.763954410121951, + -1.12242105599902e-05,-0.000328973537047528,0.353540851980083,-0.789317056971876, + -6.74659235810893e-06,-0.00457022862622525,0.141683554392096,-0.181419697802315, + -6.79452573076889e-06,-0.00440934959867834,0.15028688080046,-0.206892766371011, + -6.84245910342884e-06,-0.00424847057113109,0.158890207208824,-0.232365834939707, + -6.89039247647738e-06,-0.0040875915435844,0.167493533617189,-0.257838903508403, + -6.93832584935938e-06,-0.00392671251603738,0.176096860025553,-0.283311972077099, + -6.98625922224139e-06,-0.00376583348849047,0.184700186433918,-0.308785040645795, + -7.03419259479032e-06,-0.00360495446094311,0.193303512842282,-0.334258109214491, + -7.08212596745028e-06,-0.00344407543339642,0.201906839250646,-0.359731177783187, + -7.1300593403878e-06,-0.00328319640584906,0.210510165659011,-0.385204246351883, + -7.17799271343633e-06,-0.00312231737830282,0.219113492067375,-0.410677314920579, + -7.22592608604078e-06,-0.00296143835075546,0.227716818475739,-0.436150383489275, + -7.27385945897829e-06,-0.00280055932320855,0.236320144884104,-0.461623452057971, + -7.32179283180479e-06,-0.0026396802956612,0.244923471292469,-0.487096520626666, + -7.36972620463128e-06,-0.00247880126811428,0.253526797700833,-0.512569589195363, + -7.41765957801288e-06,-0.00231792224056826,0.262130124109197,-0.538042657764059, + -7.46559295028426e-06,-0.00215704321302068,0.270733450517562,-0.563515726332755, + -7.51352632311075e-06,-0.00199616418547377,0.279336776925926,-0.588988794901451, + -7.56145969593724e-06,-0.00183528515792597,0.287940103334291,-0.614461863470147, + -7.6093930690968e-06,-0.00167440613037995,0.296543429742655,-0.639934932038842, + -7.65732644147921e-06,-0.00151352710283259,0.305146756151019,-0.665408000607538, + -7.70525981441672e-06,-0.00135264807528568,0.313750082559384,-0.690881069176234, + -7.75319318713219e-06,-0.00119176904773877,0.322353408967748,-0.716354137744931, + -7.80112656051379e-06,-0.0010308900201923,0.330956735376112,-0.741827206313627, + -7.84905993267415e-06,-0.000870010992644055,0.339560061784477,-0.767300274882323, + -7.89699330538962e-06,-0.000709131965097143,0.348163388192841,-0.792773343451019, + -4.89465790221022e-06,-0.00444717617764279,0.140930645269771,-0.182015214934389, + -4.92280312297533e-06,-0.0043036078697839,0.149399041301859,-0.2075698524209, + -4.9509483430743e-06,-0.00416003956192423,0.157867437333948,-0.233124489907411, + -4.97909356389492e-06,-0.00401647125406557,0.166335833366036,-0.258679127393922, + -5.00723878443798e-06,-0.00387290294620612,0.174804229398124,-0.284233764880433, + -5.03538400459247e-06,-0.00372933463834646,0.183272625430213,-0.309788402366944, + -5.06352922508002e-06,-0.00358576633048746,0.191741021462301,-0.335343039853455, + -5.0916744461782e-06,-0.00344219802262891,0.200209417494389,-0.360897677339966, + -5.11981966666575e-06,-0.00329862971476969,0.208677813526477,-0.386452314826477, + -5.14796488682023e-06,-0.0031550614069098,0.217146209558566,-0.412006952312988, + -5.17611010752983e-06,-0.00301149309905102,0.225614605590654,-0.437561589799499, + -5.20425532790636e-06,-0.0028679247911918,0.234083001622742,-0.46311622728601, + -5.23240054794982e-06,-0.00272435648333191,0.242551397654831,-0.488670864772521, + -5.26054576899249e-06,-0.00258078817547314,0.251019793686919,-0.514225502259032, + -5.28869098936902e-06,-0.00243721986761392,0.259488189719007,-0.539780139745543, + -5.31683620974555e-06,-0.00229365155975469,0.267956585751095,-0.565334777232054, + -5.34498143067719e-06,-0.00215008325189658,0.276424981783183,-0.590889414718565, + -5.37312665094269e-06,-0.00200651494403692,0.284893377815272,-0.616444052205076, + -5.40127187143025e-06,-0.00186294663617748,0.29336177384736,-0.641998689691587, + -5.42941709180678e-06,-0.00171937832831803,0.301830169879449,-0.667553327178098, + -5.4575623126274e-06,-0.00157581002045948,0.310298565911536,-0.693107964664609, + -5.48570753344801e-06,-0.00143224171260004,0.318766961943625,-0.71866260215112, + -5.51385275349148e-06,-0.00128867340474059,0.327235357975714,-0.744217239637631, + -5.54199797353494e-06,-0.00114510509688071,0.335703754007802,-0.769771877124142, + -5.57014319502169e-06,-0.00100153678902304,0.34417215003989,-0.795326514610653, + -3.53647106743349e-06,-0.00435847277562251,0.14037710526267,-0.182451163104266, + -3.55325512529925e-06,-0.00422777956714671,0.148746400502972,-0.208065513096975, + -3.57003918277643e-06,-0.00409708635867012,0.157115695743273,-0.233679863089684, + -3.58682324047566e-06,-0.00396639315019387,0.165484990983575,-0.259294213082394, + -3.60360729800835e-06,-0.00383569994171773,0.173854286223876,-0.284908563075103, + -3.62039135559655e-06,-0.00370500673324137,0.182223581464178,-0.310522913067813, + -3.63717541373987e-06,-0.00357431352476589,0.190592876704479,-0.336137263060522, + -3.65395947093949e-06,-0.00344362031628886,0.198962171944781,-0.361751613053232, + -3.67074352863872e-06,-0.00331292710781272,0.207331467185082,-0.387365963045941, + -3.68752758628244e-06,-0.00318223389933658,0.215700762425383,-0.412980313038651, + -3.70431164398166e-06,-0.00305154069086044,0.224070057665685,-0.43859466303136, + -3.72109570168089e-06,-0.00292084748238408,0.232439352905986,-0.46420901302407, + -3.73787975938011e-06,-0.00279015427390772,0.240808648146288,-0.489823363016779, + -3.75466381696832e-06,-0.00265946106543136,0.24917794338659,-0.515437713009489, + -3.7714478744455e-06,-0.00252876785695499,0.257547238626891,-0.541052063002198, + -3.78823193236677e-06,-0.00239807464847908,0.265916533867192,-0.566666412994908, + -3.80501598973293e-06,-0.00226738144000271,0.274285829107494,-0.592280762987617, + -3.82180004732113e-06,-0.00213668823152657,0.282655124347795,-0.617895112980327, + -3.83858410557547e-06,-0.00200599502305066,0.291024419588097,-0.643509462973036, + -3.85536816294163e-06,-0.00187530181457429,0.299393714828398,-0.669123812965746, + -3.87215222064086e-06,-0.00174460860609837,0.3077630100687,-0.694738162958455, + -3.88893627867315e-06,-0.00161391539762201,0.316132305309001,-0.720352512951165, + -3.9057203354842e-06,-0.00148322218914521,0.324501600549303,-0.745966862943874, + -3.92250439329445e-06,-0.00135252898066929,0.332870895789604,-0.771581212936584, + -3.93928845110469e-06,-0.00122183577219293,0.341240191029906,-0.797195562929293, + -2.54748546552053e-06,-0.0042946983083828,0.139973305081111,-0.182768189419938, + -2.55769820090013e-06,-0.0041734757392542,0.148270360578211,-0.208425963005514, + -2.56791093650177e-06,-0.0040522531701257,0.156567416075312,-0.234083736591091, + -2.57812367215893e-06,-0.00393103060099742,0.164864471572412,-0.259741510176667, + -2.58833640753853e-06,-0.0038098080318687,0.173161527069512,-0.285399283762243, + -2.59854914314017e-06,-0.00368858546274065,0.181458582566612,-0.311057057347819, + -2.60876187913039e-06,-0.00356736289361259,0.189755638063712,-0.336714830933395, + -2.61897461462102e-06,-0.00344614032448387,0.198052693560812,-0.362372604518971, + -2.62918735005613e-06,-0.00332491775535537,0.206349749057912,-0.388030378104547, + -2.63940008571328e-06,-0.00320369518622687,0.214646804555013,-0.413688151690124, + -2.64961282137044e-06,-0.0030824726170986,0.222943860052113,-0.4393459252757, + -2.65982555647248e-06,-0.00296125004796988,0.231240915549213,-0.465003698861276, + -2.67003829257373e-06,-0.0028400274788416,0.239537971046313,-0.490661472446852, + -2.68025102823088e-06,-0.00271880490971355,0.247835026543413,-0.516319246032428, + -2.69046376344395e-06,-0.00259758234058483,0.256132082040514,-0.541977019618004, + -2.70067649910111e-06,-0.00247635977145677,0.264429137537613,-0.56763479320358, + -2.71088923453622e-06,-0.00235513720232738,0.272726193034714,-0.593292566789157, + -2.72110197041542e-06,-0.00223391463319977,0.281023248531814,-0.618950340374733, + -2.73131470596155e-06,-0.00211269206407128,0.289320304028914,-0.644608113960309, + -2.74152744139666e-06,-0.00199146949494278,0.297617359526014,-0.670265887545885, + -2.75174017660973e-06,-0.00187024692581339,0.305914415023115,-0.695923661131461, + -2.76195291215586e-06,-0.00174902435668489,0.314211470520215,-0.721581434717037, + -2.77216564825711e-06,-0.00162780178755728,0.322508526017315,-0.747239208302614, + -2.78237838402529e-06,-0.00150657921842923,0.330805581514415,-0.77289698188819, + -2.79259111923835e-06,-0.00138535664929984,0.339102637011516,-0.798554755473766, + -1.83107347795364e-06,-0.00424892861948079,0.139680409510101,-0.182997624279129, + -1.83743084986032e-06,-0.00413461664548964,0.147925093811305,-0.208686823918072, + -1.8437882217115e-06,-0.00402030467149883,0.156169778112509,-0.234376023557014, + -1.85014559356267e-06,-0.00390599269750769,0.164414462413714,-0.260065223195957, + -1.85650296535833e-06,-0.00379168072351677,0.172659146714918,-0.2857544228349, + -1.86286033698746e-06,-0.00367736874952551,0.180903831016122,-0.311443622473842, + -1.86921770861659e-06,-0.00356305677553426,0.189148515317326,-0.337132822112785, + -1.8755750806343e-06,-0.00344874480154367,0.19739319961853,-0.362822021751728, + -1.88193245231894e-06,-0.00333443282755241,0.205637883919735,-0.38851122139067, + -1.88828982417011e-06,-0.00322012085356138,0.213882568220939,-0.414200421029613, + -1.89464719557719e-06,-0.0031058088795699,0.222127252522143,-0.439889620668555, + -1.90100456731734e-06,-0.00299149690557887,0.230371936823347,-0.465578820307498, + -1.90736193916852e-06,-0.00287718493158806,0.238616621124551,-0.491268019946441, + -1.91371931101969e-06,-0.00276287295759681,0.246861305425756,-0.516957219585383, + -1.92007668275984e-06,-0.00264856098360577,0.25510598972696,-0.542646419224326, + -1.92643405449999e-06,-0.00253424900961474,0.263350674028164,-0.568335618863268, + -1.93279142635117e-06,-0.00241993703562349,0.271595358329368,-0.594024818502211, + -1.93914879820234e-06,-0.00230562506163245,0.279840042630573,-0.619714018141154, + -1.94550617016453e-06,-0.00219131308764187,0.288084726931777,-0.645403217780096, + -1.95186354234878e-06,-0.00207700111365128,0.296329411232981,-0.671092417419039, + -1.95822091320075e-06,-0.00196268913965891,0.304574095534185,-0.696781617057982, + -1.96457828538499e-06,-0.00184837716566877,0.312818779835389,-0.722470816696924, + -1.97093565723616e-06,-0.00173406519167818,0.321063464136593,-0.748160016335867, + -1.9772930284212e-06,-0.00161975321768582,0.329308148437798,-0.773849215974809, + -1.98365040060544e-06,-0.00150544124369567,0.337552832739001,-0.799538415613752, + -1.31406032644055e-06,-0.00421612072135213,0.139468833153718,-0.183163088966447, + -1.31811125458903e-06,-0.00410682206736301,0.147675700967806,-0.208874952563745, + -1.32216218279302e-06,-0.003997523413374,0.155882568781895,-0.234586816161043, + -1.32621311105252e-06,-0.00388822475938511,0.164089436595984,-0.260298679758341, + -1.33026403914549e-06,-0.00377892610539576,0.172296304410073,-0.286010543355639, + -1.33431496718295e-06,-0.00366962745140631,0.180503172224162,-0.311722406952936, + -1.33836589555347e-06,-0.00356032879741774,0.18871004003825,-0.337434270550234, + -1.34241682353542e-06,-0.00345103014342829,0.196916907852339,-0.363146134147532, + -1.34646775207248e-06,-0.0033417314894395,0.205123775666428,-0.38885799774483, + -1.35051867988789e-06,-0.00323243283545027,0.213330643480517,-0.414569861342128, + -1.35456960825842e-06,-0.00312313418146104,0.221537511294606,-0.440281724939426, + -1.35862053629587e-06,-0.00301383552747203,0.229744379108695,-0.465993588536723, + -1.36267146444435e-06,-0.00290453687348302,0.237951246922783,-0.491705452134021, + -1.36672239237079e-06,-0.00279523821949357,0.246158114736872,-0.517417315731319, + -1.37077332085234e-06,-0.00268593956550434,0.254364982550962,-0.543129179328617, + -1.37482424944491e-06,-0.00257664091151621,0.26257185036505,-0.568841042925915, + -1.37887517748236e-06,-0.00246734225752698,0.270778718179139,-0.594552906523212, + -1.38292610518675e-06,-0.00235804360353686,0.278985585993228,-0.62026477012051, + -1.38697703377932e-06,-0.00224874494954852,0.287192453807317,-0.645976633717808, + -1.3910279619278e-06,-0.00213944629555929,0.295399321621405,-0.671688497315106, + -1.39507888974322e-06,-0.00203014764157006,0.303606189435494,-0.697400360912404, + -1.39912981811374e-06,-0.00192084898758083,0.311813057249583,-0.723112224509702, + -1.40318074648427e-06,-0.00181155033359248,0.320019925063671,-0.748824088107, + -1.40723167463275e-06,-0.00170225167960325,0.32822679287776,-0.774535951704297, + -1.41128260289225e-06,-0.00159295302561402,0.336433660691849,-0.800247815301595, + -0.000138568490530733,-0.0212571188369073,0.196837434248721,-0.141601576221728, + -0.000148453772764845,-0.0207171610154719,0.214081530925473,-0.160415225126397, + -0.000158339054999124,-0.0201772031940368,0.231325627602226,-0.179228874031065, + -0.000168224337233347,-0.0196372453726016,0.248569724278979,-0.198042522935734, + -0.00017810961946757,-0.0190972875511665,0.265813820955731,-0.216856171840402, + -0.000187994901702071,-0.0185573297297315,0.283057917632484,-0.23566982074507, + -0.000197880183935739,-0.0180173719082957,0.300302014309237,-0.254483469649739, + -0.000207765466170351,-0.0174774140868612,0.31754611098599,-0.273297118554407, + -0.000217650748404574,-0.0169374562654259,0.334790207662742,-0.292110767459076, + -0.000227536030638853,-0.0163974984439905,0.352034304339495,-0.310924416363744, + -0.000237421312873187,-0.0158575406225556,0.369278401016248,-0.329738065268413, + -0.000247306595107633,-0.0153175828011205,0.386522497693001,-0.348551714173081, + -0.000257191877341079,-0.0147776249796845,0.403766594369753,-0.36736536307775, + -0.000267077159575413,-0.0142376671582494,0.421010691046506,-0.386179011982418, + -0.000276962441809858,-0.0136977093368145,0.438254787723259,-0.404992660887087, + -0.000286847724044081,-0.01315775151538,0.455498884400011,-0.423806309791755, + -0.000296733006278638,-0.0126177936939447,0.472742981076764,-0.442619958696424, + -0.000306618288512639,-0.0120778358725095,0.489987077753516,-0.461433607601092, + -0.000316503570747084,-0.0115378780510744,0.507231174430269,-0.48024725650576, + -0.000326388852981307,-0.0109979202296393,0.524475271107022,-0.499060905410429, + -0.000336274135215531,-0.010457962408204,0.541719367783775,-0.517874554315097, + -0.00034615941744931,-0.00991800458676861,0.558963464460527,-0.536688203219766, + -0.000356044699683755,-0.00937804676533327,0.57620756113728,-0.555501852124434, + -0.000365929981918089,-0.00883808894389793,0.593451657814033,-0.574315501029102, + -0.000375815264152646,-0.00829813112246391,0.610695754490785,-0.593129149933771, + -0.000136874769601947,-0.0209124407958453,0.196273770192236,-0.142325544723687, + -0.000146550319085836,-0.0203648595511365,0.213409188946912,-0.161232408717505, + -0.000156225868569337,-0.0198172783064275,0.230544607701589,-0.180139272711322, + -0.000165901418053227,-0.0192696970617188,0.247680026456265,-0.19904613670514, + -0.000175576967537006,-0.0187221158170098,0.264815445210941,-0.217953000698957, + -0.000185252517020618,-0.0181745345723008,0.281950863965617,-0.236859864692775, + -0.000194928066504507,-0.0176269533275921,0.299086282720293,-0.255766728686592, + -0.000204603615988008,-0.017079372082883,0.31622170147497,-0.27467359268041, + -0.000214279165472453,-0.0165317908381748,0.333357120229646,-0.293580456674227, + -0.000223954714955732,-0.0159842095934655,0.350492538984322,-0.312487320668044, + -0.000233630264439677,-0.0154366283487568,0.367627957738998,-0.331394184661862, + -0.000243305813923289,-0.0148890471040477,0.384763376493674,-0.350301048655679, + -0.000252981363406901,-0.0143414658593388,0.40189879524835,-0.369207912649497, + -0.000262656912890735,-0.0137938846146299,0.419034214003027,-0.388114776643314, + -0.000272332462374458,-0.0132463033699208,0.436169632757703,-0.407021640637132, + -0.000282008011858181,-0.0126987221252115,0.45330505151238,-0.425928504630949, + -0.000291683561341793,-0.0121511408805028,0.470440470267056,-0.444835368624767, + -0.000301359110825516,-0.0116035596357937,0.487575889021732,-0.463742232618584, + -0.000311034660309351,-0.0110559783910851,0.504711307776408,-0.482649096612401, + -0.000320710209792852,-0.010508397146376,0.521846726531084,-0.501555960606219, + -0.000330385759276908,-0.00996081590166709,0.53898214528576,-0.520462824600036, + -0.000340061308760742,-0.00941323465695865,0.556117564040436,-0.539369688593853, + -0.000349736858243799,-0.00886565341224888,0.573252982795113,-0.558276552587671, + -0.000359412407728299,-0.00831807216754044,0.590388401549789,-0.577183416581488, + -0.000369087957212244,-0.007770490922832,0.607523820304465,-0.596090280575306, + -0.000134570459241534,-0.0204507692890145,0.195503189223776,-0.143304481362205, + -0.000143963687516679,-0.0198935046999725,0.212490573537839,-0.162337389052376, + -0.000153356915791991,-0.0193362401109307,0.229477957851903,-0.181370296742547, + -0.000162750144066914,-0.0187789755218889,0.246465342165966,-0.200403204432718, + -0.000172143372342115,-0.0182217109328471,0.263452726480029,-0.219436112122889, + -0.000181536600617038,-0.0176644463438049,0.280440110794092,-0.23846901981306, + -0.000190929828892183,-0.0171071817547632,0.297427495108155,-0.257501927503231, + -0.000200323057167218,-0.0165499171657213,0.314414879422218,-0.276534835193402, + -0.000209716285442751,-0.0159926525766798,0.331402263736281,-0.295567742883573, + -0.000219109513717619,-0.0154353879876377,0.348389648050344,-0.314600650573744, + -0.000228502741992598,-0.0148781233985955,0.365377032364407,-0.333633558263915, + -0.00023789597026791,-0.0143208588095538,0.382364416678471,-0.352666465954087, + -0.000247289198542888,-0.0137635942205119,0.399351800992534,-0.371699373644258, + -0.000256682426818311,-0.0132063296314704,0.416339185306597,-0.390732281334429, + -0.000266075655093179,-0.0126490650424285,0.43332656962066,-0.4097651890246, + -0.000275468883368268,-0.0120918004533861,0.450313953934723,-0.428798096714771, + -0.000284862111643691,-0.0115345358643453,0.467301338248785,-0.447831004404942, + -0.000294255339918448,-0.0109772712753027,0.484288722562849,-0.466863912095113, + -0.000303648568193426,-0.0104200066862608,0.501276106876912,-0.485896819785284, + -0.000313041796468183,-0.00986274209721816,0.518263491190975,-0.504929727475455, + -0.000322435024743606,-0.00930547750817645,0.535250875505038,-0.523962635165626, + -0.00033182825301914,-0.00874821291913541,0.552238259819101,-0.542995542855797, + -0.000341221481294229,-0.00819094833009348,0.569225644133164,-0.562028450545968, + -0.000350614709568986,-0.00763368374105111,0.586213028447228,-0.58106135823614, + -0.000360007937844409,-0.00707641915200963,0.603200412761291,-0.600094265926311, + -0.000131468518038691,-0.0198422353376262,0.194459226113996,-0.144611580285915, + -0.000140487205163964,-0.0192731635396821,0.211247011635563,-0.163812784445297, + -0.000149505892289348,-0.0187040917417384,0.228034797157131,-0.18301398860468, + -0.000158524579414621,-0.0181350199437945,0.244822582678699,-0.202215192764063, + -0.000167543266540116,-0.017565948145851,0.261610368200266,-0.221416396923446, + -0.000176561953665277,-0.0169968763479069,0.278398153721834,-0.240617601082828, + -0.000185580640790883,-0.0164278045499635,0.295185939243402,-0.259818805242211, + -0.000194599327915934,-0.0158587327520194,0.311973724764969,-0.279020009401594, + -0.000203618015041873,-0.0152896609540762,0.328761510286537,-0.298221213560976, + -0.000212636702166979,-0.0147205891561322,0.345549295808105,-0.317422417720359, + -0.000221655389292197,-0.0141515173581883,0.362337081329672,-0.336623621879742, + -0.000230674076417636,-0.0135824455602447,0.37912486685124,-0.355824826039124, + -0.000239692763542854,-0.0130133737623008,0.395912652372807,-0.375026030198507, + -0.000248711450668737,-0.0124443019643576,0.412700437894375,-0.39422723435789, + -0.000257730137793843,-0.0118752301664133,0.429488223415943,-0.413428438517273, + -0.000266748824919505,-0.0113061583684702,0.44627600893751,-0.432629642676655, + -0.000275767512044278,-0.0107370865705256,0.463063794459078,-0.451830846836038, + -0.000284786199169829,-0.010168014772582,0.479851579980646,-0.471032050995421, + -0.000293804886295268,-0.00959894297463837,0.496639365502213,-0.490233255154803, + -0.000302823573420485,-0.00902987117669429,0.513427151023781,-0.509434459314186, + -0.000311842260545481,-0.00846079937875066,0.530214936545348,-0.528635663473569, + -0.000320860947671697,-0.00789172758080792,0.547002722066916,-0.547836867632951, + -0.000329879634796804,-0.00732265578286384,0.563790507588483,-0.567038071792334, + -0.00033889832192191,-0.00675358398491932,0.580578293110052,-0.586239275951717, + -0.00034791700904746,-0.00618451218697613,0.597366078631619,-0.6054404801111, + -0.000127352300467731,-0.0190570233465511,0.19306238696977,-0.146327746292757, + -0.000135883755368549,-0.0184744025881373,0.209584739482984,-0.165749916650102, + -0.000144415210269588,-0.0178917818297237,0.226107091996198,-0.185172087007447, + -0.000152946665170073,-0.0173091610713094,0.242629444509412,-0.204594257364791, + -0.000161478120071001,-0.0167265403128957,0.259151797022626,-0.224016427722136, + -0.000170009574971486,-0.0161439195544817,0.275674149535839,-0.243438598079481, + -0.000178541029872525,-0.0155612987960678,0.292196502049054,-0.262860768436826, + -0.00018707248477362,-0.0149786780376544,0.308718854562267,-0.282282938794171, + -0.000195603939674216,-0.0143960572792401,0.325241207075481,-0.301705109151515, + -0.000204135394574756,-0.0138134365208258,0.341763559588696,-0.32112727950886, + -0.000212666849475518,-0.0132308157624117,0.35828591210191,-0.340549449866205, + -0.00022119830437628,-0.0126481950039981,0.374808264615123,-0.35997162022355, + -0.000229729759277597,-0.0120655742455851,0.391330617128337,-0.379393790580894, + -0.000238261214178359,-0.0114829534871708,0.407852969641551,-0.398815960938239, + -0.000246792669079121,-0.0109003327287573,0.424375322154765,-0.418238131295584, + -0.000255324123979883,-0.0103177119703433,0.440897674667978,-0.437660301652929, + -0.000263855578880978,-0.00973509121192961,0.457420027181193,-0.457082472010274, + -0.000272387033781407,-0.00915247045351486,0.473942379694407,-0.476504642367618, + -0.000280918488682058,-0.00856984969510122,0.49046473220762,-0.495926812724963, + -0.00028944994358282,-0.00798722893668735,0.506987084720834,-0.515348983082308, + -0.000297981398483804,-0.00740460817827371,0.523509437234048,-0.534771153439653, + -0.00030651285338501,-0.00682198741986006,0.540031789747262,-0.554193323796997, + -0.000315044308285661,-0.00623936666144598,0.556554142260476,-0.573615494154342, + -0.000323575763186756,-0.00565674590303278,0.573076494773689,-0.593037664511687, + -0.000332107218087407,-0.00507412514461869,0.589598847286904,-0.612459834869032, + -0.000121993621610639,-0.0180715621396583,0.191224773067189,-0.148531923754783, + -0.000129907561818077,-0.0174748032975077,0.207400604084888,-0.168237894578677, + -0.000137821502025792,-0.0168780444553571,0.223576435102588,-0.187943865402571, + -0.000145735442233175,-0.0162812856132063,0.239752266120288,-0.207649836226464, + -0.000153649382440724,-0.0156845267710557,0.255928097137988,-0.227355807050358, + -0.000161563322648328,-0.015087767928905,0.272103928155688,-0.247061777874252, + -0.000169477262855822,-0.0144910090867545,0.288279759173387,-0.266767748698146, + -0.000177391203063426,-0.0138942502446036,0.304455590191087,-0.28647371952204, + -0.000185305143270864,-0.0132974914024528,0.320631421208787,-0.306179690345934, + -0.000193219083478358,-0.0127007325603024,0.336807252226487,-0.325885661169828, + -0.00020113302368574,-0.0121039737181516,0.352983083244186,-0.345591631993721, + -0.000209046963893122,-0.0115072148760007,0.369158914261887,-0.365297602817615, + -0.000216960904100505,-0.0109104560338498,0.385334745279586,-0.385003573641509, + -0.000224874844308331,-0.0103136971916993,0.401510576297286,-0.404709544465403, + -0.000232788784515825,-0.00971693834954879,0.417686407314986,-0.424415515289297, + -0.000240702724723318,-0.00912017950739807,0.433862238332686,-0.444121486113191, + -0.000248616664930923,-0.00852342066524758,0.450038069350385,-0.463827456937085, + -0.000256530605138194,-0.00792666182309665,0.466213900368085,-0.483533427760978, + -0.000264444545345688,-0.00732990298094571,0.482389731385785,-0.503239398584872, + -0.00027235848555307,-0.00673314413879433,0.498565562403485,-0.522945369408766, + -0.000280272425761008,-0.00613638529664451,0.514741393421185,-0.54265134023266, + -0.000288186365968501,-0.0055396264544938,0.530917224438884,-0.562357311056553, + -0.000296100306175773,-0.00494286761234264,0.547093055456584,-0.582063281880447, + -0.000304014246383266,-0.00434610877019193,0.563268886474284,-0.601769252704341, + -0.000311928186590538,-0.00374934992804121,0.579444717491984,-0.621475223528236, + -0.000115189896055634,-0.0168776345346261,0.188861450544414,-0.151284179268307, + -0.000122347392235655,-0.016268394858554,0.204595740450284,-0.171344518745477, + -0.000129504888415732,-0.0156591551824822,0.220330030356154,-0.191404858222648, + -0.000136662384595754,-0.0150499155064102,0.236064320262024,-0.211465197699818, + -0.00014381988077572,-0.0144406758303383,0.251798610167894,-0.231525537176989, + -0.000150977376955963,-0.0138314361542664,0.267532900073764,-0.251585876654159, + -0.000158134873135984,-0.0132221964781944,0.283267189979634,-0.271646216131329, + -0.000165292369315617,-0.012612956802122,0.299001479885504,-0.2917065556085, + -0.000172449865495916,-0.0120037171260503,0.314735769791374,-0.31176689508567, + -0.000179607361676215,-0.0113944774499786,0.330470059697245,-0.33182723456284, + -0.000186764857855737,-0.0107852377739062,0.346204349603115,-0.351887574040011, + -0.000193922354035814,-0.0101759980978344,0.361938639508985,-0.371947913517181, + -0.000201079850216113,-0.00956675842176291,0.377672929414854,-0.392008252994351, + -0.000208237346395745,-0.00895751874569051,0.393407219320725,-0.412068592471522, + -0.000215394842575822,-0.00834827906961833,0.409141509226595,-0.432128931948692, + -0.000222552338755899,-0.00773903939354637,0.424875799132465,-0.452189271425862, + -0.000229709834936309,-0.00712979971747485,0.440610089038335,-0.472249610903033, + -0.00023686733111572,-0.00652056004140245,0.456344378944205,-0.492309950380203, + -0.000244024827295686,-0.00591132036533049,0.472078668850075,-0.512370289857373, + -0.000251182323475763,-0.0053020806892583,0.487812958755945,-0.532430629334544, + -0.000258339819655951,-0.00469284101318657,0.503547248661815,-0.552490968811714, + -0.000265497315836249,-0.00408360133711438,0.519281538567686,-0.572551308288884, + -0.000272654812015771,-0.00347436166104265,0.535015828473555,-0.592611647766055, + -0.00027981230819607,-0.00286512198497091,0.550750118379425,-0.612671987243225, + -0.000286969804376258,-0.00225588230889917,0.566484408285295,-0.632732326720396, + -0.000106823067110629,-0.015492604428486,0.18591066072162,-0.154602313414574, + -0.000113093272265052,-0.014875992531985,0.201099550434247,-0.175089881658487, + -0.000119363477419476,-0.0142593806354839,0.216288440146875,-0.1955774499024, + -0.000125633682573734,-0.0136427687389827,0.231477329859503,-0.216065018146313, + -0.000131903887728102,-0.0130261568424817,0.246666219572131,-0.236552586390226, + -0.000138174092882415,-0.0124095449459802,0.261855109284759,-0.257040154634139, + -0.000144444298036672,-0.011792933049479,0.277043998997386,-0.277527722878051, + -0.000150714503191096,-0.0111763211529778,0.292232888710014,-0.298015291121964, + -0.000156984708345465,-0.0105597092564769,0.307421778422642,-0.318502859365877, + -0.000163254913499777,-0.00994309735997545,0.32261066813527,-0.33899042760979, + -0.000169525118653979,-0.00932648546347403,0.337799557847898,-0.359477995853703, + -0.000175795323808292,-0.00870987356697328,0.352988447560525,-0.379965564097616, + -0.000182065528962716,-0.00809326167047186,0.368177337273153,-0.400453132341529, + -0.000188335734116918,-0.00747664977397067,0.383366226985781,-0.420940700585442, + -0.00019460593927112,-0.00686003787746947,0.398555116698409,-0.441428268829355, + -0.000200876144425655,-0.00624342598096828,0.413744006411036,-0.461915837073267, + -0.000207146349579856,-0.00562681408446708,0.428932896123664,-0.48240340531718, + -0.00021341655473428,-0.00501020218796588,0.444121785836292,-0.502890973561093, + -0.000219686759888704,-0.00439359029146491,0.45931067554892,-0.523378541805006, + -0.000225956965043017,-0.00377697839496349,0.474499565261548,-0.543866110048919, + -0.000232227170197219,-0.00316036649846207,0.489688454974176,-0.564353678292832, + -0.000238497375351199,-0.00254375460196021,0.504877344686804,-0.584841246536745, + -0.000244767580505734,-0.00192714270546013,0.520066234399431,-0.605328814780658, + -0.000251037785660047,-0.00131053080895782,0.53525512411206,-0.62581638302457, + -0.00025730799081447,-0.000693918912457736,0.550444013824687,-0.646303951268484, + -9.69322386731308e-05,-0.0139663759823091,0.182361673096866,-0.158437570616758, + -0.000102216042004166,-0.0133517550950321,0.196902353270231,-0.179418950181251, + -0.000107499845335479,-0.0127371342077555,0.211443033443595,-0.200400329745744, + -0.000112783648666626,-0.0121225133204786,0.22598371361696,-0.221381709310236, + -0.00011806745199755,-0.0115078924332014,0.240524393790325,-0.242363088874729, + -0.000123351255328974,-0.0108932715459247,0.25506507396369,-0.263344468439222, + -0.000128635058660009,-0.0102786506586479,0.269605754137054,-0.284325848003715, + -0.000133918861991322,-0.00966402977137104,0.284146434310419,-0.305307227568208, + -0.000139202665322413,-0.00904940888409422,0.298687114483783,-0.3262886071327, + -0.000144486468653726,-0.00843478799681763,0.313227794657148,-0.347269986697193, + -0.000149770271984373,-0.00782016710953992,0.327768474830513,-0.368251366261686, + -0.000155054075316241,-0.00720554622226421,0.342309155003877,-0.389232745826179, + -0.00016033787864711,-0.00659092533498673,0.356849835177242,-0.410214125390672, + -0.000165621681978201,-0.00597630444770969,0.371390515350607,-0.431195504955165, + -0.000170905485309403,-0.00536168356043287,0.385931195523971,-0.452176884519658, + -0.000176189288640938,-0.00474706267315672,0.400471875697336,-0.47315826408415, + -0.000181473091971918,-0.0041324417858799,0.4150125558707,-0.494139643648643, + -0.000186756895302453,-0.0035178208986022,0.429553236044065,-0.515121023213136, + -0.000192040698633988,-0.00290320001132582,0.444093916217429,-0.536102402777629, + -0.000197324501965301,-0.00228857912404923,0.458634596390794,-0.557083782342121, + -0.000202608305296281,-0.00167395823677241,0.473175276564158,-0.578065161906614, + -0.000207892108627816,-0.00105933734949515,0.487715956737524,-0.599046541471107, + -0.000213175911958685,-0.000444716462218775,0.502256636910888,-0.6200279210356, + -0.000218459715289998,0.000169904425058043,0.516797317084252,-0.641009300600093, + -0.000223743518620534,0.000784525312336193,0.531337997257618,-0.661990680164586, + -8.57746917162783e-05,-0.0123793191099448,0.178282454778791,-0.162660423089042, + -9.00298535422839e-05,-0.0117800103967033,0.192087326528341,-0.184185519084017, + -9.4285015368345e-05,-0.0111807016834615,0.205892198277892,-0.205710615078992, + -9.85401771945726e-05,-0.0105813929702202,0.219697070027442,-0.227235711073967, + -0.000102795339020634,-0.00998208425697877,0.233501941776992,-0.248760807068943, + -0.00010705050084675,-0.00938277554373723,0.247306813526542,-0.270285903063918, + -0.000111305662672812,-0.00878346683049558,0.261111685276093,-0.291810999058893, + -0.00011556082449915,-0.00818415811725459,0.274916557025643,-0.313336095053868, + -0.0001198159863251,-0.00758484940401272,0.288721428775193,-0.334861191048843, + -0.000124071148151161,-0.00698554069077106,0.302526300524744,-0.356386287043818, + -0.000128326309977056,-0.00638623197752941,0.316331172274294,-0.377911383038793, + -0.000132581471803062,-0.00578692326428798,0.330136044023844,-0.399436479033768, + -0.000136836633629622,-0.00518761455104655,0.343940915773395,-0.420961575028744, + -0.000141091795455295,-0.00458830583780445,0.357745787522945,-0.442486671023718, + -0.000145346957281633,-0.00398899712456369,0.371550659272495,-0.464011767018694, + -0.000149602119107417,-0.00338968841132159,0.385355531022045,-0.485536863013669, + -0.0001538572809342,-0.00279037969808082,0.399160402771596,-0.507061959008644, + -0.000158112442760205,-0.00219107098483917,0.412965274521146,-0.528587055003619, + -0.000162367604586322,-0.00159176227159774,0.426770146270696,-0.550112150998594, + -0.000166622766412217,-0.00099245355835631,0.440575018020246,-0.571637246993569, + -0.000170877928237667,-0.000393144845113991,0.454379889769796,-0.593162342988544, + -0.000175133090064561,0.000206163868126552,0.468184761519346,-0.614687438983519, + -0.000179388251890789,0.000805472581367539,0.481989633268896,-0.636212534978495, + -0.000183643413716683,0.00140478129460986,0.495794505018447,-0.65773763097347, + -0.000187898575543022,0.00200409000785129,0.509599376767998,-0.679262726968445, + -7.38370526889853e-05,-0.0108280480267909,0.173832451924669,-0.167068536715419, + -7.70950515421309e-05,-0.0102594896346754,0.186844535993324,-0.189161202575035, + -8.035305039511e-05,-0.00969093124255982,0.199856620061979,-0.211253868434651, + -8.36110492481446e-05,-0.00912237285044426,0.212868704130633,-0.233346534294267, + -8.68690481011791e-05,-0.00855381445832859,0.225880788199288,-0.255439200153884, + -9.01270469540472e-05,-0.00798525606621281,0.238892872267943,-0.2775318660135, + -9.33850458071928e-05,-0.00741669767409725,0.251904956336598,-0.299624531873116, + -9.66430446603384e-05,-0.00684813928198169,0.264917040405252,-0.321717197732732, + -9.9901043513595e-05,-0.00627958088986635,0.277929124473907,-0.343809863592349, + -0.000103159042366574,-0.0057110224977508,0.290941208542562,-0.365902529451965, + -0.00010641704121972,-0.00514246410563524,0.303953292611216,-0.387995195311581, + -0.000109675040072643,-0.00457390571351945,0.316965376679871,-0.410087861171198, + -0.0001129330389259,-0.00400534732140412,0.329977460748526,-0.432180527030814, + -0.000116191037778934,-0.00343678892928834,0.34298954481718,-0.45427319289043, + -0.000119449036632302,-0.00286823053717322,0.356001628885835,-0.476365858750047, + -0.000122707035485115,-0.00229967214505744,0.36901371295449,-0.498458524609663, + -0.00012596503433826,-0.00173111375294188,0.382025797023144,-0.520551190469279, + -0.000129223033191295,-0.00116255536082654,0.395037881091799,-0.542643856328895, + -0.000132481032043774,-0.000593996968710098,0.408049965160454,-0.564736522188511, + -0.000135739030897031,-2.54385765949827e-05,0.421062049229108,-0.586829188048128, + -0.000138997029750954,0.000543119815519688,0.434074133297763,-0.608921853907744, + -0.000142255028603877,0.00111167820763569,0.447086217366418,-0.63101451976736, + -0.000145513027456246,0.00168023659975214,0.460098301435073,-0.653107185626976, + -0.000148771026310057,0.00224879499186681,0.473110385503727,-0.675199851486593, + -0.000152029025162981,0.00281735338398237,0.486122469572382,-0.697292517346209, + -6.17683071474917e-05,-0.00940294183231072,0.169246257044863,-0.171421115161163, + -6.41334024594209e-05,-0.00887964466982916,0.181450787364694,-0.19407420041299, + -6.64984977712946e-05,-0.00835634750734748,0.193655317684524,-0.216727285664817, + -6.88635930831683e-05,-0.00783305034486592,0.205859848004355,-0.239380370916645, + -7.1228688395264e-05,-0.00730975318238425,0.218064378324185,-0.262033456168472, + -7.35937837069156e-05,-0.00678645601990224,0.230268908644016,-0.284686541420299, + -7.59588790186227e-05,-0.00626315885742068,0.242473438963847,-0.307339626672126, + -7.83239743304964e-05,-0.0057398616949389,0.254677969283677,-0.329992711923954, + -8.06890696423146e-05,-0.00521656453245711,0.266882499603508,-0.352645797175781, + -8.30541649542438e-05,-0.00469326736997533,0.279087029923339,-0.375298882427608, + -8.54192602656179e-05,-0.0041699702074931,0.291291560243169,-0.397951967679435, + -8.77843555781022e-05,-0.00364667304501221,0.303496090563,-0.420605052931263, + -9.01494508894762e-05,-0.00312337588252998,0.315700620882831,-0.44325813818309, + -9.25145462017385e-05,-0.00260007872004908,0.327905151202661,-0.465911223434917, + -9.48796415134456e-05,-0.00207678155756708,0.340109681522492,-0.488564308686744, + -9.72447368254858e-05,-0.00155348439508551,0.352314211842322,-0.511217393938571, + -9.96098321375261e-05,-0.00103018723260417,0.364518742162153,-0.533870479190399, + -0.000101974927449122,-0.000506890070122168,0.376723272481983,-0.556523564442226, + -0.000104340022760718,1.64070923598381e-05,0.388927802801814,-0.579176649694053, + -0.000106705118072981,0.000539704254840956,0.401132333121644,-0.601829734945881, + -0.000109070213384355,0.00106300141732341,0.413336863441475,-0.624482820197708, + -0.000111435308696173,0.00158629857980497,0.425541393761306,-0.647135905449535, + -0.000113800404008102,0.00210959574228653,0.437745924081136,-0.669788990701362, + -0.000116165499320364,0.00263289290476809,0.449950454400967,-0.69244207595319, + -0.000118530594632293,0.00315619006724965,0.462154984720798,-0.715095161205017, + -5.02457493531949e-05,-0.00816761850920722,0.164787179220487,-0.175489138843553, + -5.18740934261075e-05,-0.00770009295342611,0.176214713051117,-0.198666005432811, + -5.35024374995752e-05,-0.00723256739764577,0.187642246881747,-0.221842872022069, + -5.51307815720992e-05,-0.00676504184186411,0.199069780712377,-0.245019738611328, + -5.67591256454558e-05,-0.00629751628608344,0.210497314543007,-0.268196605200586, + -5.83874697183684e-05,-0.0058299907303021,0.221924848373637,-0.291373471789844, + -6.0015813791725e-05,-0.00536246517452166,0.233352382204267,-0.314550338379102, + -6.16441578645266e-05,-0.00489493961874055,0.244779916034897,-0.337727204968361, + -6.32725019376612e-05,-0.00442741406295966,0.256207449865527,-0.360904071557619, + -6.49008460109624e-05,-0.00395988850717854,0.267634983696157,-0.384080938146877, + -6.65291900837639e-05,-0.00349236295139765,0.279062517526787,-0.407257804736135, + -6.81575341571206e-05,-0.00302483739561721,0.290490051357417,-0.430434671325393, + -6.97858782299221e-05,-0.0025573118398361,0.301917585188047,-0.453611537914652, + -7.14142223033898e-05,-0.00208978628405476,0.313345119018677,-0.47678840450391, + -7.30425663758583e-05,-0.00162226072827343,0.324772652849307,-0.499965271093168, + -7.46709104492149e-05,-0.0011547351724932,0.336200186679937,-0.523142137682426, + -7.62992545226826e-05,-0.000687209616712536,0.347627720510567,-0.546319004271684, + -7.79275985953731e-05,-0.000219684060930758,0.359055254341197,-0.569495870860942, + -7.95559426683967e-05,0.000247841494849688,0.370482788171827,-0.592672737450201, + -8.11842867418644e-05,0.000715367050630356,0.381910322002457,-0.615849604039459, + -8.2812630814777e-05,0.00118289260641147,0.393337855833087,-0.639026470628717, + -8.44409748874675e-05,0.00165041816219302,0.404765389663717,-0.662203337217975, + -8.60693189610462e-05,0.00211794371797325,0.416192923494346,-0.685380203807234, + -8.76976630342918e-05,0.00258546927375392,0.427620457324976,-0.708557070396492, + -8.93260071060942e-05,0.0030529948295368,0.439047991155607,-0.73173393698575, + -3.98286669491266e-05,-0.00714976942538137,0.16068871371924,-0.179100605803067, + -4.08957117294384e-05,-0.00674272518123153,0.171408449587027,-0.202742469438024, + -4.19627565096947e-05,-0.00633568093708159,0.182128185454815,-0.22638433307298, + -4.30298012898955e-05,-0.00592863669293209,0.192847921322602,-0.250026196707937, + -4.40968460703739e-05,-0.00552159244878214,0.203567657190389,-0.273668060342893, + -4.51638908506857e-05,-0.00511454820463264,0.214287393058177,-0.29730992397785, + -4.6230935630831e-05,-0.00470750396048247,0.225007128925964,-0.320951787612806, + -4.72979804109208e-05,-0.00430045971633253,0.235726864793751,-0.344593651247763, + -4.83650251914547e-05,-0.00389341547218303,0.246446600661539,-0.36823551488272, + -4.94320699717665e-05,-0.00348637122803308,0.257166336529326,-0.391877378517676, + -5.04991147518563e-05,-0.00307932698388336,0.267886072397113,-0.415519242152632, + -5.15661595321681e-05,-0.00267228273973319,0.278605808264901,-0.439161105787589, + -5.26332043121469e-05,-0.00226523849558302,0.289325544132689,-0.462802969422546, + -5.37002490923477e-05,-0.00185819425143308,0.300045280000476,-0.486444833057502, + -5.47672938733257e-05,-0.00145115000728424,0.310765015868263,-0.510086696692459, + -5.58343386533044e-05,-0.00104410576313407,0.32148475173605,-0.533728560327415, + -5.69013834336163e-05,-0.000637061518984128,0.332204487603838,-0.557370423962372, + -5.79684282138171e-05,-0.00023001727483396,0.342924223471625,-0.581012287597328, + -5.90354729941289e-05,0.000177026969315541,0.353643959339413,-0.604654151232285, + -6.01025177747738e-05,0.000584071213464821,0.3643636952072,-0.628296014867241, + -6.11695625541975e-05,0.000991115457615432,0.375083431074987,-0.651937878502198, + -6.22366073348424e-05,0.00139815970176516,0.385803166942775,-0.675579742137154, + -6.33036521147101e-05,0.00180520394591532,0.396522902810562,-0.699221605772111, + -6.4370696895466e-05,0.00221224819006505,0.407242638678349,-0.722863469407067, + -6.54377416753338e-05,0.00261929243421477,0.417962374546136,-0.746505333042024, + -3.08630215203887e-05,-0.00634508766070307,0.157110012297973,-0.182163256815249, + -3.15327649793029e-05,-0.00599745926084072,0.167216241223128,-0.206199454300863, + -3.22025084378286e-05,-0.00564983086097781,0.177322470148283,-0.230235651786478, + -3.28722518966873e-05,-0.00530220246111524,0.187428699073438,-0.254271849272092, + -3.35419953556015e-05,-0.00495457406125288,0.197534927998593,-0.278308046757706, + -3.42117388142937e-05,-0.00460694566139019,0.207641156923748,-0.302344244243321, + -3.48814822726529e-05,-0.00425931726152706,0.217747385848903,-0.326380441728935, + -3.55512257316781e-05,-0.00391168886166482,0.227853614774057,-0.35041663921455, + -3.62209691905369e-05,-0.00356406046180191,0.237959843699213,-0.374452836700164, + -3.68907126495621e-05,-0.00321643206194011,0.248066072624367,-0.398489034185779, + -3.75604561083653e-05,-0.00286880366207765,0.258172301549522,-0.422525231671393, + -3.82301995670575e-05,-0.00252117526221451,0.268278530474677,-0.446561429157007, + -3.88999430260828e-05,-0.00217354686235205,0.278384759399832,-0.470597626642622, + -3.95696864842199e-05,-0.00182591846248914,0.288490988324987,-0.494633824128236, + -4.02394299429121e-05,-0.00147829006262623,0.298597217250142,-0.518670021613851, + -4.09091734019373e-05,-0.00113066166276399,0.308703446175297,-0.542706219099465, + -4.15789168606295e-05,-0.0007830332629013,0.318809675100452,-0.56674241658508, + -4.22486603195438e-05,-0.000435404863039057,0.328915904025607,-0.590778614070694, + -4.29184037781249e-05,-8.7776463176148e-05,0.339022132950762,-0.614814811556309, + -4.35881472364841e-05,0.000259851936687205,0.349128361875917,-0.638851009041923, + -4.42578906960645e-05,0.000607480336548782,0.359234590801072,-0.662887206527538, + -4.49276341543126e-05,0.000955108736412136,0.369340819726227,-0.686923404013152, + -4.55973776126717e-05,0.00130273713627505,0.379447048651382,-0.710959601498766, + -4.6267121071808e-05,0.00165036553613751,0.389553277576537,-0.734995798984381, + -4.69368645303891e-05,0.00199799393599998,0.399659506501691,-0.759031996469996, + -2.34654365861009e-05,-0.00572873408547392,0.154121093793554,-0.184661237270783, + -2.38714375595528e-05,-0.00543511228029048,0.163717912761929,-0.209019064040303, + -2.42774385328937e-05,-0.00514149047510659,0.173314731730304,-0.233376890809823, + -2.46834395060125e-05,-0.00484786866992226,0.182911550698678,-0.257734717579342, + -2.50894404796309e-05,-0.00455424686473882,0.192508369667053,-0.282092544348862, + -2.54954414533048e-05,-0.0042606250595556,0.202105188635427,-0.306450371118381, + -2.59014424264237e-05,-0.00396700325437127,0.211702007603802,-0.330808197887901, + -2.63074433996535e-05,-0.00367338144918739,0.221298826572177,-0.355166024657421, + -2.67134443730499e-05,-0.0033797596440035,0.230895645540552,-0.37952385142694, + -2.71194453466128e-05,-0.00308613783882028,0.240492464508926,-0.40388167819646, + -2.75254463197872e-05,-0.00279251603363617,0.250089283477301,-0.428239504965979, + -2.79314472934056e-05,-0.00249889422845251,0.259686102445676,-0.452597331735499, + -2.8337448266913e-05,-0.00220527242326884,0.26928292141405,-0.476955158505019, + -2.87434492396432e-05,-0.00191165061808407,0.278879740382425,-0.501312985274538, + -2.91494502137057e-05,-0.0016180288129013,0.288476559350799,-0.525670812044058, + -2.9555451186658e-05,-0.00132440700771697,0.298073378319174,-0.550028638813577, + -2.99614521601654e-05,-0.0010307852025333,0.307670197287549,-0.574386465583097, + -3.03674531336728e-05,-0.00073716339734986,0.317267016255923,-0.598744292352617, + -3.07734541065141e-05,-0.000443541592165086,0.326863835224298,-0.623102119122136, + -3.11794550801325e-05,-0.000149919786981645,0.336460654192673,-0.647459945891656, + -3.1585456054084e-05,0.000143702018201353,0.346057473161048,-0.671817772661175, + -3.19914570269253e-05,0.000437323823386127,0.355654292129422,-0.696175599430695, + -3.23974580007658e-05,0.000730945628569568,0.365251111097797,-0.720533426200214, + -3.2803458973385e-05,0.0010245674337539,0.374847930066172,-0.744891252969734, + -3.32094599468924e-05,0.00131818923893734,0.384444749034546,-0.769249079739254, + -1.75698002736757e-05,-0.00526730203784365,0.151715287091405,-0.186634700644663, + -1.78097376261621e-05,-0.0050198819015348,0.160903931766359,-0.211246622121108, + -1.8049674978371e-05,-0.00477246176522572,0.170092576441312,-0.235858543597553, + -1.82896123306908e-05,-0.00452504162891643,0.179281221116265,-0.260470465073998, + -1.85295496830107e-05,-0.00427762149260746,0.188469865791218,-0.285082386550442, + -1.87694870354971e-05,-0.00403020135629872,0.197658510466171,-0.309694308026887, + -1.90094243879835e-05,-0.00378278121998954,0.206847155141125,-0.334306229503332, + -1.92493617401923e-05,-0.0035353610836808,0.216035799816078,-0.358918150979777, + -1.94892990925677e-05,-0.00328794094737161,0.225224444491031,-0.383530072456222, + -1.97292364448876e-05,-0.00304052081106199,0.234413089165985,-0.408141993932666, + -1.99691737972074e-05,-0.00279310067475325,0.243601733840938,-0.432753915409111, + -2.02091111494163e-05,-0.00254568053844384,0.252790378515891,-0.457365836885556, + -2.04490485019582e-05,-0.0022982604021351,0.261979023190845,-0.481977758362001, + -2.0688985853945e-05,-0.00205084026582614,0.271167667865797,-0.506589679838446, + -2.09289232065979e-05,-0.00180342012951695,0.280356312540751,-0.531201601314891, + -2.11688605592508e-05,-0.00155599999320799,0.289544957215705,-0.555813522791335, + -2.14087979112376e-05,-0.00130857985689925,0.298733601890657,-0.58042544426778, + -2.16487352634465e-05,-0.00106115972059007,0.307922246565611,-0.605037365744225, + -2.18886726162104e-05,-0.000813739584281326,0.317110891240564,-0.62964928722067, + -2.21286099686413e-05,-0.000566319447972141,0.326299535915517,-0.654261208697115, + -2.23685473206281e-05,-0.000318899311662069,0.335488180590471,-0.678873130173559, + -2.26084846736141e-05,-7.14791753546606e-05,0.344676825265423,-0.703485051650004, + -2.28484220258229e-05,0.000175940960955412,0.353865469940378,-0.728096973126449, + -2.30883593773656e-05,0.00042336109726504,0.363054114615331,-0.752708894602894, + -2.33282967300186e-05,0.000670781233573337,0.372242759290283,-0.777320816079339, + -1.29988369886869e-05,-0.00492726123474363,0.14983531434508,-0.188154861990617, + -1.31384097043497e-05,-0.00471756382775512,0.15870609417851,-0.212962512942861, + -1.32779824197904e-05,-0.0045078664207665,0.16757687401194,-0.237770163895106, + -1.34175551355642e-05,-0.00429816901377789,0.176447653845371,-0.26257781484735, + -1.35571278511715e-05,-0.00408847160678949,0.185318433678801,-0.287385465799594, + -1.36967005668343e-05,-0.00387877419980098,0.194189213512232,-0.312193116751839, + -1.38362732826081e-05,-0.00366907679281248,0.203059993345662,-0.337000767704083, + -1.39758459979933e-05,-0.00345937938582375,0.211930773179092,-0.361808418656327, + -1.41154187138781e-05,-0.00324968197883568,0.220801553012523,-0.386616069608572, + -1.42549914290413e-05,-0.00303998457184651,0.229672332845953,-0.411423720560816, + -1.43945641449816e-05,-0.00283028716485845,0.238543112679384,-0.436231371513061, + -1.45341368604779e-05,-0.0026205897578695,0.247413892512814,-0.461039022465305, + -1.46737095763072e-05,-0.00241089235088165,0.256284672346244,-0.485846673417549, + -1.48132822920255e-05,-0.0022011949438927,0.265155452179675,-0.510654324369794, + -1.49528550076328e-05,-0.0019914975369042,0.274026232013105,-0.535461975322038, + -1.50924277234621e-05,-0.00178180012991591,0.282897011846536,-0.560269626274282, + -1.52320004380702e-05,-0.00157210272292652,0.291767791679966,-0.585077277226527, + -1.53715731545656e-05,-0.00136240531593845,0.300638571513397,-0.609884928178771, + -1.55111458700619e-05,-0.00115270790894995,0.309509351346827,-0.634692579131016, + -1.56507185856691e-05,-0.000943010501961439,0.318380131180257,-0.65950023008326, + -1.57902913018315e-05,-0.00073331309497382,0.327250911013687,-0.684307881035504, + -1.59298640171057e-05,-0.000523615687984869,0.336121690847118,-0.709115531987749, + -1.60694367321579e-05,-0.000313918280995473,0.344992470680549,-0.733923182939993, + -1.62090094482092e-05,-0.00010422087400741,0.353863250513979,-0.758730833892237, + -1.63485821641496e-05,0.000105476532980653,0.362734030347409,-0.783538484844482, + -9.52952976085442e-06,-0.00467930274466644,0.148399727317786,-0.18930319644232, + -9.61019634404536e-06,-0.00449933484683085,0.15702840182311,-0.214258702029122, + -9.69086292679222e-06,-0.0043193669489946,0.165657076328434,-0.239214207615924, + -9.77152950942806e-06,-0.00413939905115812,0.174285750833759,-0.264169713202726, + -9.85219609250798e-06,-0.0039594311533222,0.182914425339083,-0.289125218789528, + -9.93286267508831e-06,-0.00377946325548595,0.191543099844407,-0.31408072437633, + -1.00135292576686e-05,-0.00359949535764947,0.200171774349731,-0.339036229963132, + -1.00941958409151e-05,-0.00341952745981389,0.208800448855055,-0.363991735549934, + -1.0174862423773e-05,-0.00323955956197763,0.217429123360379,-0.388947241136736, + -1.02555290061312e-05,-0.00305959166414094,0.226057797865703,-0.413902746723538, + -1.03361955895442e-05,-0.00287962376630535,0.234686472371027,-0.43885825231034, + -1.04168621722911e-05,-0.00269965586846954,0.243315146876351,-0.463813757897141, + -1.04975287549269e-05,-0.00251968797063262,0.251943821381676,-0.488769263483943, + -1.05781953376738e-05,-0.00233972007279681,0.260572495886999,-0.513724769070745, + -1.06588619205317e-05,-0.00215975217496078,0.269201170392323,-0.538680274657547, + -1.07395285028344e-05,-0.00197978427712342,0.277829844897648,-0.563635780244349, + -1.08201950864695e-05,-0.00179981637928828,0.286458519402972,-0.588591285831151, + -1.09008616695494e-05,-0.00161984848145291,0.295087193908296,-0.613546791417953, + -1.09815282514081e-05,-0.00143988058361488,0.303715868413621,-0.638502297004755, + -1.10621948348211e-05,-0.00125991268577952,0.312344542918944,-0.663457802591557, + -1.11428614174569e-05,-0.00107994478794371,0.320973217424268,-0.688413308178359, + -1.12235280003148e-05,-0.000899976890107457,0.329601891929592,-0.713368813765161, + -1.13041945828396e-05,-0.000720008992271204,0.338230566434916,-0.738324319351963, + -1.13848611661416e-05,-0.000540041094434951,0.346859240940241,-0.763279824938765, + -1.14655277494435e-05,-0.000360073196599586,0.355487915445565,-0.788235330525567, + -6.93841706522758e-06,-0.00449973119030489,0.1473225677922,-0.190157917874099, + -6.98514141661555e-06,-0.00434258173950808,0.155769928491412,-0.215223473738289, + -7.0318657683921e-06,-0.00418543228871182,0.164217289190624,-0.240289029602479, + -7.07859011983558e-06,-0.00402828283791501,0.172664649889836,-0.265354585466668, + -7.12531447155662e-06,-0.00387113338711842,0.181112010589048,-0.290420141330858, + -7.17203882294459e-06,-0.00371398393632161,0.189559371288261,-0.315485697195048, + -7.2187631744991e-06,-0.00355683448552502,0.198006731987473,-0.340551253059238, + -7.26548752577605e-06,-0.00339968503472821,0.206454092686685,-0.365616808923428, + -7.31221187760811e-06,-0.00324253558393162,0.214901453385898,-0.390682364787618, + -7.35893622894057e-06,-0.00308538613313503,0.223348814085109,-0.415747920651808, + -7.40566058066161e-06,-0.00292823668233888,0.231796174784321,-0.440813476515998, + -7.45238493216061e-06,-0.00277108723154229,0.240243535483533,-0.465879032380188, + -7.49910928377062e-06,-0.00261393778074548,0.248690896182746,-0.490944588244377, + -7.54583363526962e-06,-0.00245678832994889,0.257138256881958,-0.516010144108567, + -7.59255798665759e-06,-0.00229963887915186,0.265585617581171,-0.541075699972757, + -7.63928233860067e-06,-0.00214248942835571,0.274032978280383,-0.566141255836947, + -7.68600668998864e-06,-0.0019853399775589,0.282480338979595,-0.591206811701137, + -7.73273104182071e-06,-0.00182819052676297,0.290927699678807,-0.616272367565327, + -7.77945539343072e-06,-0.00167104107596616,0.299375060378019,-0.641337923429517, + -7.82617974415256e-06,-0.00151389162516891,0.307822421077231,-0.666403479293707, + -7.87290409598462e-06,-0.00135674217437254,0.316269781776443,-0.691469035157897, + -7.91962844748362e-06,-0.00119959272357528,0.324717142475656,-0.716534591022087, + -7.96635279931568e-06,-0.0010424432727798,0.333164503174867,-0.741600146886277, + -8.01307715114774e-06,-0.000885293821983435,0.34161186387408,-0.766665702750467, + -8.05980150186958e-06,-0.000728144371186179,0.350059224573292,-0.791731258614656, + -5.02626280407537e-06,-0.0043702633250704,0.146524908328217,-0.190787121784692, + -5.05359496510982e-06,-0.00423028864211605,0.154838188589072,-0.215933691254391, + -5.08092712597774e-06,-0.00409031395916126,0.163151468849927,-0.24108026072409, + -5.10825928679015e-06,-0.0039503392762068,0.171464749110782,-0.266226830193789, + -5.13559144760256e-06,-0.00381036459325235,0.179778029371637,-0.291373399663488, + -5.16292360847048e-06,-0.00367038991029767,0.188091309632492,-0.316519969133187, + -5.19025576917187e-06,-0.00353041522734276,0.196404589893347,-0.341666538602886, + -5.21758792992877e-06,-0.00339044054438853,0.204717870154201,-0.366813108072586, + -5.24492009107425e-06,-0.00325046586143407,0.213031150415056,-0.391959677542285, + -5.27225225188666e-06,-0.00311049117847939,0.221344430675911,-0.417106247011984, + -5.29958441275458e-06,-0.00297051649552493,0.229657710936766,-0.442252816481683, + -5.3269165736225e-06,-0.0028305418125707,0.237970991197621,-0.467399385951382, + -5.3542487343794e-06,-0.00269056712961557,0.246284271458476,-0.492545955421081, + -5.3815808951363e-06,-0.00255059244666134,0.254597551719331,-0.51769252489078, + -5.40891305611524e-06,-0.00241061776370666,0.262910831980186,-0.542839094360479, + -5.43624521653907e-06,-0.00227064308075198,0.271224112241041,-0.567985663830178, + -5.46357737762904e-06,-0.00213066839779774,0.279537392501896,-0.593132233299878, + -5.49090953838594e-06,-0.00199069371484306,0.287850672762751,-0.618278802769577, + -5.5182416994759e-06,-0.00185071903188883,0.296163953023605,-0.643425372239276, + -5.54557386045484e-06,-0.00171074434893415,0.304477233284461,-0.668571941708974, + -5.57290602054561e-06,-0.00157076966597858,0.312790513545316,-0.693718511178674, + -5.60023818163558e-06,-0.0014307949830239,0.321103793806171,-0.718865080648373, + -5.62757034272554e-06,-0.00129082030007011,0.329417074067025,-0.744011650118072, + -5.65490250359346e-06,-0.00115084561711587,0.33773035432788,-0.769158219587771, + -5.68223466412832e-06,-0.0010108709341603,0.346043634588736,-0.79430478905747, + -3.62755830696226e-06,-0.0042771878494583,0.145939943446299,-0.191246560306296, + -3.64380671474818e-06,-0.00414995611860303,0.15415499479461,-0.216452285115811, + -3.66005512225653e-06,-0.00402272438774809,0.162370046142922,-0.241658009925327, + -3.67630353009796e-06,-0.00389549265689337,0.170585097491233,-0.266863734734842, + -3.69255193793938e-06,-0.00376826092603855,0.178800148839545,-0.292069459544358, + -3.70880034550325e-06,-0.00364102919518361,0.187015200187856,-0.317275184353873, + -3.72504875323365e-06,-0.00351379746432889,0.195230251536167,-0.342480909163389, + -3.74129716124161e-06,-0.00338656573347418,0.203445302884479,-0.367686633972904, + -3.75754556847241e-06,-0.0032593340026188,0.21166035423279,-0.39289235878242, + -3.77379397620281e-06,-0.00313210227176408,0.219875405581101,-0.418098083591935, + -3.79004238360015e-06,-0.00300487054090848,0.228090456929413,-0.443303808401451, + -3.80629079166361e-06,-0.00287763881005398,0.236305508277725,-0.468509533210966, + -3.82253919950504e-06,-0.00275040707919927,0.244520559626036,-0.493715258020482, + -3.83878760701339e-06,-0.00262317534834411,0.252735610974347,-0.518920982829997, + -3.85503601518788e-06,-0.00249594361748984,0.260950662322659,-0.544126707639513, + -3.87128442269624e-06,-0.00236871188663446,0.26916571367097,-0.569332432449028, + -3.88753283009358e-06,-0.00224148015577974,0.277380765019281,-0.594538157258544, + -3.90378123782398e-06,-0.0021142484249248,0.285595816367593,-0.619743882068059, + -3.92002964588745e-06,-0.00198701669406987,0.293810867715905,-0.644949606877575, + -3.93627805361785e-06,-0.00185978496321493,0.302025919064216,-0.67015533168709, + -3.95252646123723e-06,-0.00173255323236043,0.310240970412527,-0.695361056496606, + -3.96877486852354e-06,-0.00160532150150461,0.318456021760839,-0.720566781306121, + -3.98502327647599e-06,-0.00147808977065012,0.32667107310915,-0.745772506115637, + -4.00127168398434e-06,-0.00135085803979562,0.334886124457461,-0.770978230925152, + -4.01752009193679e-06,-0.00122362630894068,0.343101175805773,-0.796183955734667, + -2.61100534154624e-06,-0.00421040060462718,0.145514005514239,-0.191580049986481, + -2.62086634805758e-06,-0.00409252543945515,0.153657584412099,-0.216828713501458, + -2.63072735451342e-06,-0.00397465027428312,0.161801163309958,-0.242077377016434, + -2.64058836130232e-06,-0.00385677510911131,0.169944742207818,-0.267326040531411, + -2.65044936753611e-06,-0.00373889994393917,0.178088321105677,-0.292574704046388, + -2.66031037399195e-06,-0.00362102477876713,0.186231900003537,-0.317823367561364, + -2.67017138078085e-06,-0.00350314961359532,0.194375478901397,-0.343072031076341, + -2.6800323872922e-06,-0.00338527444842329,0.202519057799256,-0.368320694591317, + -2.68989339347048e-06,-0.00326739928325082,0.210662636697116,-0.393569358106294, + -2.69975440014836e-06,-0.00314952411807901,0.218806215594975,-0.418818021621271, + -2.70961540638215e-06,-0.00303164895290631,0.226949794492835,-0.444066685136247, + -2.71947641294901e-06,-0.00291377378773494,0.235093373390695,-0.469315348651224, + -2.72933741940484e-06,-0.00279589862256291,0.243236952288554,-0.4945640121662, + -2.73919842586068e-06,-0.00267802345739065,0.251380531186414,-0.519812675681177, + -2.74905943253856e-06,-0.00256014829221884,0.259524110084273,-0.545061339196154, + -2.75892043855031e-06,-0.00244227312704615,0.267667688982133,-0.57031000271113, + -2.76878144533921e-06,-0.00232439796187478,0.275811267879992,-0.595558666226107, + -2.77864245190607e-06,-0.00220652279670253,0.283954846777852,-0.620807329741083, + -2.78850345847292e-06,-0.00208864763153072,0.292098425675712,-0.64605599325606, + -2.79836446503978e-06,-0.00197077246635891,0.300242004573571,-0.671304656771037, + -2.80822547149562e-06,-0.00185289730118665,0.308385583471431,-0.696553320286013, + -2.81808647784043e-06,-0.00173502213601395,0.316529162369291,-0.72180198380099, + -2.82794748451831e-06,-0.00161714697084303,0.32467274126715,-0.747050647315967, + -2.8378084907521e-06,-0.00149927180567033,0.33281632016501,-0.772299310830943, + -2.84766949720794e-06,-0.00138139664049808,0.34095989906287,-0.79754797434592, + -1.87564079440206e-06,-0.00416253595712757,0.145205466442737,-0.191821075165852, + -1.88176578169719e-06,-0.00405147914047299,0.153297299696321,-0.217100772052476, + -1.88789076921436e-06,-0.00394042232381853,0.161389132949905,-0.2423804689391, + -1.894015756565e-06,-0.00382936550716395,0.169480966203489,-0.267660165825724, + -1.90014074441525e-06,-0.00371830869050993,0.177572799457073,-0.292939862712348, + -1.90626573176589e-06,-0.00360725187385547,0.185664632710657,-0.318219559598971, + -1.91239071928306e-06,-0.00349619505720078,0.193756465964242,-0.343499256485595, + -1.91851570668922e-06,-0.00338513824054631,0.201848299217826,-0.368778953372219, + -1.92464069398435e-06,-0.00327408142389163,0.20994013247141,-0.394058650258843, + -1.93076568111294e-06,-0.00316302460723672,0.218031965724994,-0.419338347145467, + -1.93689066885216e-06,-0.00305196779058226,0.226123798978578,-0.444618044032091, + -1.94301565670241e-06,-0.00294091097392868,0.234215632232162,-0.469897740918715, + -1.94914064421958e-06,-0.00282985415727421,0.242307465485746,-0.495177437805338, + -1.95526563140369e-06,-0.00271879734061931,0.25039929873933,-0.520457134691962, + -1.96139061903189e-06,-0.00260774052396484,0.258491131992915,-0.545736831578586, + -1.967515606216e-06,-0.00249668370730993,0.266582965246499,-0.57101652846521, + -1.97364059362215e-06,-0.00238562689065569,0.274674798500083,-0.596296225351834, + -1.97976558136137e-06,-0.00227457007400167,0.282766631753667,-0.621575922238458, + -1.98589056954468e-06,-0.00216351325734809,0.29085846500725,-0.646855619125081, + -1.99201555639572e-06,-0.0020524564406923,0.298950298260835,-0.672135316011705, + -1.99814054357983e-06,-0.00194139962403783,0.307042131514419,-0.697415012898329, + -2.00426553131905e-06,-0.00183034280738381,0.315133964768003,-0.722694709784953, + -2.01039051850316e-06,-0.0017192859907289,0.323225798021587,-0.747974406671577, + -2.01651550657544e-06,-0.00160822917407533,0.331317631275171,-0.773254103558201, + -2.02264049375955e-06,-0.00149717235742042,0.339409464528755,-0.798533800444825, + -1.3454801545687e-06,-0.00412826093108687,0.144982806035451,-0.191994729850861, + -1.34937590040574e-06,-0.00402214576337145,0.153037310654293,-0.217296785772305, + -1.35327164613175e-06,-0.00391603059565615,0.161091815273134,-0.24259884169375, + -1.35716739207981e-06,-0.00380991542794085,0.169146319891976,-0.267900897615194, + -1.3610631381944e-06,-0.00370380026022588,0.177200824510817,-0.293202953536638, + -1.36495888403143e-06,-0.00359768509251079,0.185255329129659,-0.318505009458083, + -1.36885462981295e-06,-0.00349156992479527,0.193309833748501,-0.343807065379527, + -1.37275037603857e-06,-0.00338545475708041,0.201364338367342,-0.369109121300971, + -1.37664612170907e-06,-0.00327933958936466,0.209418842986184,-0.394411177222416, + -1.38054186749059e-06,-0.00317322442164958,0.217473347605025,-0.41971323314386, + -1.38443761388274e-06,-0.00306710925393472,0.225527852223867,-0.445015289065304, + -1.38833335949773e-06,-0.00296099408621919,0.233582356842708,-0.470317344986749, + -1.39222910533476e-06,-0.00285487891850411,0.24163686146155,-0.495619400908193, + -1.3961248511718e-06,-0.00274876375078881,0.249691366080391,-0.520921456829637, + -1.40002059689781e-06,-0.00264264858307306,0.257745870699233,-0.546223512751082, + -1.40391634295689e-06,-0.00253653341535798,0.265800375318075,-0.571525568672526, + -1.40781208912699e-06,-0.00243041824764334,0.273854879936916,-0.59682762459397, + -1.411707834853e-06,-0.00232430307992759,0.281909384555758,-0.622129680515415, + -1.41560358113413e-06,-0.00221818791221295,0.289963889174599,-0.647431736436859, + -1.4194993266381e-06,-0.00211207274449698,0.298018393793441,-0.672733792358303, + -1.42339507303024e-06,-0.00200595757678235,0.306072898412283,-0.698035848279748, + -1.42729081886728e-06,-0.00189984240906771,0.314127403031124,-0.723337904201192, + -1.43118656459329e-06,-0.00179372724135174,0.322181907649966,-0.748639960122636, + -1.43508230998624e-06,-0.00168761207363577,0.330236412268808,-0.773942016044081, + -1.43897805582327e-06,-0.00158149690592069,0.338290916887649,-0.799244071965525, + -0.000157740819841989,-0.0254151520084142,0.209918431044634,-0.14078812449481, + -0.000169289483192614,-0.0249743980106578,0.227861594053555,-0.158434063167546, + -0.000180838146542961,-0.024533644012901,0.245804757062477,-0.176080001840282, + -0.000192386809893585,-0.0240928900151447,0.263747920071397,-0.193725940513019, + -0.00020393547324421,-0.0236521360173881,0.281691083080319,-0.211371879185755, + -0.000215484136594613,-0.0232113820196314,0.29963424608924,-0.229017817858491, + -0.000227032799945515,-0.0227706280218753,0.317577409098161,-0.246663756531227, + -0.000238581463295862,-0.0223298740241187,0.335520572107082,-0.264309695203964, + -0.000250130126646653,-0.0218891200263625,0.353463735116003,-0.2819556338767, + -0.000261678789996944,-0.0214483660286056,0.371406898124924,-0.299601572549436, + -0.00027322745334768,-0.0210076120308493,0.389350061133845,-0.317247511222172, + -0.000284776116698082,-0.0205668580330929,0.407293224142766,-0.334893449894909, + -0.000296324780048485,-0.0201261040353362,0.425236387151687,-0.352539388567645, + -0.000307873443399664,-0.0196853500375802,0.443179550160609,-0.370185327240381, + -0.000319422106749956,-0.0192445960398235,0.46112271316953,-0.387831265913117, + -0.000330970770100247,-0.0188038420420666,0.479065876178451,-0.405477204585854, + -0.00034251943345065,-0.0183630880443097,0.497009039187372,-0.42312314325859, + -0.000354068096801941,-0.0179223340465546,0.514952202196293,-0.440769081931326, + -0.000365616760151788,-0.0174815800487969,0.532895365205215,-0.458415020604062, + -0.000377165423502857,-0.0170408260510411,0.550838528214135,-0.476060959276798, + -0.000388714086853481,-0.0166000720532851,0.568781691223056,-0.493706897949535, + -0.00040026275020455,-0.0161593180555291,0.586724854231977,-0.511352836622271, + -0.000411811413554508,-0.0157185640577717,0.604668017240898,-0.528998775295007, + -0.000423360076905133,-0.0152778100600148,0.62261118024982,-0.546644713967744, + -0.000434908740255535,-0.0148370560622584,0.640554343258741,-0.56429065264048, + -0.000155619073621271,-0.0249192899988971,0.209225139844652,-0.141760038219477, + -0.000166898779435931,-0.0244643115463761,0.22703863488966,-0.159524034970541, + -0.000178178485250369,-0.0240093330938547,0.244852129934667,-0.177288031721605, + -0.000189458191065361,-0.0235543546413336,0.262665624979675,-0.195052028472669, + -0.000200737896880188,-0.0230993761888126,0.280479120024683,-0.212816025223733, + -0.000212017602694792,-0.0226443977362916,0.29829261506969,-0.230580021974797, + -0.000223297308509895,-0.0221894192837706,0.316106110114698,-0.248344018725861, + -0.000234577014323945,-0.0217344408312488,0.333919605159706,-0.266108015476925, + -0.000245856720138937,-0.021279462378728,0.351733100204713,-0.283872012227989, + -0.000257136425953486,-0.0208244839262066,0.369546595249721,-0.301636008979053, + -0.000268416131768423,-0.0203695054736857,0.387360090294729,-0.319400005730116, + -0.000279695837582916,-0.0199145270211645,0.405173585339736,-0.337164002481181, + -0.000290975543398075,-0.0194595485686433,0.422987080384744,-0.354927999232245, + -0.000302255249212569,-0.0190045701161221,0.440800575429752,-0.372691995983309, + -0.000313534955027284,-0.0185495916636009,0.458614070474759,-0.390455992734372, + -0.000324814660841888,-0.0180946132110797,0.476427565519767,-0.408219989485436, + -0.000336094366656936,-0.0176396347585588,0.494241060564775,-0.425983986236501, + -0.000347374072471429,-0.0171846563060376,0.512054555609782,-0.443747982987564, + -0.000358653778286033,-0.0167296778535164,0.52986805065479,-0.461511979738628, + -0.000369933484101304,-0.0162746994009959,0.547681545699797,-0.479275976489692, + -0.000381213189915464,-0.0158197209484738,0.565495040744805,-0.497039973240756, + -0.000392492895730401,-0.0153647424959531,0.583308535789813,-0.51480396999182, + -0.000403772601545227,-0.0149097640434319,0.601122030834821,-0.532567966742884, + -0.000415052307359276,-0.0144547855909103,0.618935525879829,-0.550331963493948, + -0.000426332013173991,-0.0139998071383887,0.636749020924837,-0.568095960245012, + -0.000152738951035625,-0.0242592096479013,0.208277499919437,-0.14306830791397, + -0.000163657938009709,-0.023786080281894,0.225914700769516,-0.160991219805489, + -0.000174576924983849,-0.0233129509158867,0.243551901619595,-0.178914131697008, + -0.000185495911958045,-0.0228398215498797,0.261189102469674,-0.196837043588528, + -0.00019641489893224,-0.0223666921838725,0.278826303319754,-0.214759955480047, + -0.000207333885906491,-0.0218935628178656,0.296463504169833,-0.232682867371567, + -0.000218252872880409,-0.0214204334518582,0.314100705019912,-0.250605779263086, + -0.000229171859855104,-0.0209473040858514,0.331737905869991,-0.268528691154606, + -0.000240090846829022,-0.0204741747198443,0.34937510672007,-0.286451603046125, + -0.00025100983380355,-0.0200010453538373,0.367012307570149,-0.304374514937644, + -0.000261928820777357,-0.0195279159878297,0.384649508420229,-0.322297426829163, + -0.000272847807751608,-0.0190547866218225,0.402286709270308,-0.340220338720683, + -0.000283766794725526,-0.0185816572558153,0.419923910120387,-0.358143250612203, + -0.000294685781699999,-0.0181085278898083,0.437561110970466,-0.376066162503722, + -0.000305604768674361,-0.0176353985238016,0.455198311820545,-0.393989074395241, + -0.00031652375564839,-0.0171622691577942,0.472835512670625,-0.411911986286761, + -0.000327442742622419,-0.0166891397917868,0.490472713520704,-0.429834898178281, + -0.000338361729596892,-0.0162160104257802,0.508109914370783,-0.4477578100698, + -0.000349280716570921,-0.0157428810597726,0.525747115220862,-0.465680721961319, + -0.000360199703545505,-0.0152697516937661,0.543384316070941,-0.483603633852838, + -0.000371118690519534,-0.0147966223277587,0.56102151692102,-0.501526545744358, + -0.000382037677493785,-0.0143234929617519,0.578658717771099,-0.519449457635877, + -0.000392956664468702,-0.0138503635957452,0.596295918621178,-0.537372369527396, + -0.000403875651442287,-0.0133772342297376,0.613933119471258,-0.555295281418916, + -0.000414794638415761,-0.0129041048637295,0.631570320321337,-0.573218193310436, + -0.000148874044137715,-0.0233963192889641,0.206994283818034,-0.144804588498605, + -0.00015931686130527,-0.0229008707888062,0.224394411085606,-0.162938405889304, + -0.00016975967847277,-0.0224054222886481,0.241794538353179,-0.181072223280002, + -0.000180202495640269,-0.0219099737884899,0.259194665620751,-0.1992060406707, + -0.000190645312807269,-0.0214145252883313,0.276594792888324,-0.217339858061399, + -0.000201088129974991,-0.0209190767881733,0.293994920155897,-0.235473675452097, + -0.000211530947142269,-0.0204236282880148,0.311395047423469,-0.253607492842795, + -0.00022197376430988,-0.019928179787857,0.328795174691042,-0.271741310233494, + -0.000232416581477046,-0.0194327312876985,0.346195301958614,-0.289875127624192, + -0.000242859398644546,-0.0189372827875405,0.363595429226186,-0.30800894501489, + -0.000253302215811657,-0.018441834287382,0.380995556493759,-0.326142762405588, + -0.000263745032979545,-0.0179463857872242,0.398395683761331,-0.344276579796287, + -0.000274187850147212,-0.0174509372870661,0.415795811028904,-0.362410397186985, + -0.000284630667314323,-0.0169554887869077,0.433195938296477,-0.380544214577683, + -0.000295073484481656,-0.0164600402867496,0.450596065564049,-0.398678031968382, + -0.0003055163016491,-0.0159645917865912,0.467996192831621,-0.41681184935908, + -0.000315959118816211,-0.0154691432864327,0.485396320099194,-0.434945666749778, + -0.000326401935983989,-0.0149736947862746,0.502796447366767,-0.453079484140476, + -0.0003368447531511,-0.0144782462861164,0.520196574634339,-0.471213301531175, + -0.000347287570318655,-0.0139827977859581,0.537596701901911,-0.489347118921873, + -0.000357730387485655,-0.0134873492857999,0.554996829169484,-0.507480936312572, + -0.000368173204653433,-0.0129919007856421,0.572396956437056,-0.525614753703269, + -0.000378616021820877,-0.0124964522854834,0.589797083704629,-0.543748571093968, + -0.000389058838988765,-0.012001003785326,0.607197210972201,-0.561882388484667, + -0.000399501656155654,-0.0115055552851673,0.624597338239774,-0.580016205875365, + -0.000143767577879483,-0.0222949748027097,0.205279176829357,-0.147066123530159, + -0.000153595085932656,-0.0217734926577877,0.222365203957992,-0.165474648925405, + -0.000163422593985829,-0.0212520105128657,0.239451231086628,-0.183883174320652, + -0.000173250102039002,-0.0207305283679439,0.256537258215264,-0.202291699715898, + -0.000183077610092119,-0.0202090462230217,0.2736232853439,-0.220700225111144, + -0.000192905118145292,-0.0196875640781,0.290709312472536,-0.23910875050639, + -0.000202732626198465,-0.019166081933178,0.307795339601172,-0.257517275901636, + -0.000212560134251527,-0.0186445997882558,0.324881366729808,-0.275925801296882, + -0.000222387642304978,-0.0181231176433343,0.341967393858443,-0.294334326692128, + -0.000232215150358095,-0.0176016354984121,0.359053420987079,-0.312742852087375, + -0.000242042658411212,-0.0170801533534903,0.376139448115715,-0.331151377482621, + -0.000251870166463886,-0.0165586712085677,0.393225475244351,-0.349559902877867, + -0.000261697674517114,-0.0160371890636457,0.410311502372987,-0.367968428273113, + -0.00027152518257012,-0.0155157069187235,0.427397529501623,-0.386376953668359, + -0.000281352690623349,-0.0149942247738015,0.444483556630259,-0.404785479063605, + -0.000291180198676577,-0.0144727426288798,0.461569583758895,-0.423194004458851, + -0.000301007706729917,-0.0139512604839578,0.478655610887531,-0.441602529854098, + -0.000310835214782812,-0.0134297783390358,0.495741638016166,-0.460011055249344, + -0.00032066272283604,-0.012908296194114,0.512827665144802,-0.47841958064459, + -0.000330490230889713,-0.0123868140491923,0.529913692273438,-0.496828106039836, + -0.000340317738942386,-0.0118653319042701,0.546999719402074,-0.515236631435082, + -0.000350145246994948,-0.011343849759347,0.56408574653071,-0.533645156830328, + -0.000359972755048621,-0.0108223676144257,0.581171773659346,-0.552053682225574, + -0.000369800263101849,-0.0103008854695039,0.598257800787982,-0.570462207620821, + -0.000379627771154745,-0.00977940332458127,0.615343827916618,-0.588870733016067, + -0.000137158942421445,-0.0209320675868468,0.203027578081791,-0.149940972376525, + -0.000146213478226576,-0.0203824734448916,0.219705654351263,-0.168698704827573, + -0.000155268014031817,-0.0198328793029362,0.236383730620736,-0.187456437278621, + -0.000164322549837226,-0.0192832851609813,0.253061806890209,-0.206214169729669, + -0.000173377085642634,-0.0187336910190264,0.269739883159681,-0.224971902180717, + -0.000182431621448154,-0.0181840968770717,0.286417959429154,-0.243729634631765, + -0.000191486157253395,-0.0176345027351161,0.303096035698627,-0.262487367082813, + -0.000200540693058582,-0.017084908593161,0.319774111968099,-0.281245099533861, + -0.000209595228863824,-0.0165353144512057,0.336452188237572,-0.300002831984909, + -0.000218649764669121,-0.0159857203092506,0.353130264507045,-0.318760564435957, + -0.000227704300474696,-0.0154361261672955,0.369808340776517,-0.337518296887005, + -0.000236758836279938,-0.0148865320253406,0.38648641704599,-0.356276029338054, + -0.000245813372085513,-0.014336937883386,0.403164493315462,-0.375033761789102, + -0.000254867907890532,-0.0137873437414302,0.419842569584935,-0.39379149424015, + -0.000263922443695663,-0.0132377495994751,0.436520645854408,-0.412549226691198, + -0.000272976979501349,-0.0126881554575204,0.45319872212388,-0.431306959142246, + -0.000282031515306702,-0.0121385613155651,0.469876798393353,-0.450064691593294, + -0.000291086051111722,-0.0115889671736098,0.486554874662826,-0.468822424044342, + -0.000300140586917186,-0.0110393730316551,0.503232950932298,-0.48758015649539, + -0.000309195122722428,-0.0104897788896996,0.519911027201771,-0.506337888946438, + -0.000318249658527781,-0.0099401847477445,0.536589103471244,-0.525095621397486, + -0.000327304194333355,-0.00939059060578984,0.553267179740716,-0.543853353848534, + -0.000336358730138264,-0.00884099646383385,0.569945256010189,-0.562611086299582, + -0.000345413265943395,-0.00829140232187919,0.586623332279661,-0.58136881875063, + -0.000354467801749303,-0.00774180817992454,0.603301408549134,-0.600126551201678, + -0.000128834306842018,-0.019309768269802,0.200142372870624,-0.15348446737709, + -0.000136952745200314,-0.0187332368399949,0.216304263304367,-0.172672627138416, + -0.000145071183558554,-0.0181567054101879,0.23246615373811,-0.191860786899741, + -0.000153189621917016,-0.0175801739803813,0.248628044171853,-0.211048946661067, + -0.000161308060275256,-0.0170036425505741,0.264789934605596,-0.230237106422392, + -0.000169426498633607,-0.0164271111207674,0.280951825039339,-0.249425266183718, + -0.000177544936992013,-0.0158505796909605,0.297113715473082,-0.268613425945044, + -0.000185663375350253,-0.0152740482611535,0.313275605906825,-0.287801585706369, + -0.000193781813708493,-0.0146975168313463,0.329437496340568,-0.306989745467695, + -0.000201900252066567,-0.0141209854015389,0.345599386774311,-0.32617790522902, + -0.000210018690425029,-0.0135444539717324,0.361761277208054,-0.345366064990346, + -0.000218137128783269,-0.0129679225419252,0.377923167641797,-0.364554224751672, + -0.000226255567141842,-0.0123913911121187,0.39408505807554,-0.383742384512997, + -0.000234374005499749,-0.0118148596823111,0.410246948509283,-0.402930544274323, + -0.000242492443858211,-0.0112383282525046,0.426408838943026,-0.422118704035649, + -0.000250610882216562,-0.0106617968226979,0.442570729376769,-0.441306863796974, + -0.000258729320574802,-0.0100852653928905,0.458732619810512,-0.4604950235583, + -0.000266847758933042,-0.00950873396308349,0.474894510244255,-0.479683183319626, + -0.000274966197290727,-0.00893220253327587,0.491056400677998,-0.498871343080951, + -0.0002830846356493,-0.00835567110346913,0.507218291111741,-0.518059502842277, + -0.00029120307400754,-0.00777913967366217,0.523380181545484,-0.537247662603602, + -0.000299321512365558,-0.00720260824385477,0.539542071979227,-0.556435822364928, + -0.000307439950724908,-0.00662607681404914,0.55570396241297,-0.575623982126254, + -0.000315558389082371,-0.00604954538424129,0.571865852846714,-0.59481214188758, + -0.000323676827441055,-0.00547301395443478,0.588027743280456,-0.614000301648905, + -0.000118701970086121,-0.0174677468674611,0.196560823501357,-0.157689764045413, + -0.000125738109483686,-0.0168703668319528,0.212090992493522,-0.177388739973708, + -0.00013277424888114,-0.0162729867964442,0.227621161485688,-0.197087715902004, + -0.000139810388278538,-0.0156756067609354,0.243151330477853,-0.216786691830299, + -0.000146846527676103,-0.0150782267254269,0.258681499470019,-0.236485667758595, + -0.000153882667073335,-0.014480846689918,0.274211668462184,-0.25618464368689, + -0.000160918806470622,-0.0138834666544092,0.28974183745435,-0.275883619615186, + -0.000167954945868132,-0.0132860866189006,0.305272006446516,-0.295582595543481, + -0.000174991085265641,-0.0126887065833921,0.320802175438681,-0.315281571471777, + -0.000182027224663539,-0.0120913265478839,0.336332344430846,-0.334980547400072, + -0.000189063364060771,-0.0114939465123749,0.351862513423012,-0.354679523328368, + -0.000196099503458336,-0.0108965664768665,0.367392682415178,-0.374378499256664, + -0.00020313564285579,-0.010299186441358,0.382922851407343,-0.394077475184959, + -0.000210171782252688,-0.0097018064058485,0.398453020399509,-0.413776451113255, + -0.000217207921650586,-0.00910442637034037,0.413983189391674,-0.43347542704155, + -0.00022424406104804,-0.00850704633483179,0.42951335838384,-0.453174402969846, + -0.000231280200445494,-0.00790966629932321,0.445043527376005,-0.472873378898142, + -0.000238316339842726,-0.00731228626381419,0.460573696368171,-0.492572354826437, + -0.000245352479240513,-0.00671490622830628,0.476103865360336,-0.512271330754732, + -0.000252388618637633,-0.00611752619279748,0.491634034352501,-0.531970306683028, + -0.000259424758034865,-0.00552014615728824,0.507164203344667,-0.551669282611323, + -0.000266460897432985,-0.00492276612177989,0.522694372336833,-0.571368258539619, + -0.000273497036830106,-0.00432538608627153,0.538224541328998,-0.591067234467914, + -0.000280533176227338,-0.00372800605076229,0.553754710321164,-0.61076621039621, + -0.00028756931562457,-0.00313062601525305,0.56928487931333,-0.630465186324506, + -0.000106877472319467,-0.0154880544387747,0.1922895394295,-0.162461810789138, + -0.000112731347651218,-0.01488173791601,0.207077699558768,-0.182740445851733, + -0.000118585222982803,-0.0142754213932447,0.221865859688037,-0.203019080914328, + -0.000124439098314388,-0.0136691048704799,0.236654019817305,-0.223297715976922, + -0.000130292973646029,-0.0130627883477149,0.251442179946573,-0.243576351039517, + -0.00013614684897767,-0.01245647182495,0.266230340075841,-0.263854986102112, + -0.000142000724309532,-0.0118501553021853,0.28101850020511,-0.284133621164707, + -0.000147854599641173,-0.0112438387794203,0.295806660334378,-0.304412256227301, + -0.000153708474972702,-0.010637522256655,0.310594820463647,-0.324690891289896, + -0.000159562350304565,-0.0100312057338903,0.325382980592915,-0.344969526352491, + -0.000165416225635817,-0.00942488921112505,0.340171140722183,-0.365248161415085, + -0.000171270100967957,-0.00881857268836073,0.354959300851451,-0.38552679647768, + -0.000177123976299431,-0.00821225616559507,0.36974746098072,-0.405805431540275, + -0.000182977851631128,-0.00760593964283074,0.384535621109988,-0.42608406660287, + -0.000188831726962602,-0.00699962312006552,0.399323781239256,-0.446362701665464, + -0.00019468560229452,-0.00639330659730097,0.414111941368524,-0.466641336728059, + -0.000200539477626216,-0.00578699007453576,0.428900101497793,-0.486919971790654, + -0.000206393352957801,-0.00518067355177099,0.443688261627061,-0.507198606853248, + -0.000212247228289497,-0.00457435702900599,0.458476421756329,-0.527477241915843, + -0.00021810110362086,-0.00396804050624056,0.473264581885598,-0.547755876978438, + -0.000223954978953,-0.00336172398347623,0.488052742014866,-0.568034512041033, + -0.000229808854284697,-0.00275540746071146,0.502840902144134,-0.588313147103627, + -0.000235662729615949,-0.00214909093794535,0.517629062273403,-0.608591782166222, + -0.000241516604947534,-0.00154277441518103,0.53241722240267,-0.628870417228817, + -0.000247370480279341,-0.000936457892416254,0.547205382531939,-0.649149052291412, + -9.37423703483709e-05,-0.0134858253268317,0.187435391011737,-0.167609344359392, + -9.83883413782083e-05,-0.0128875503826037,0.201393181293224,-0.188513248832232, + -0.000103034312408656,-0.0122892754383762,0.215350971574711,-0.209417153305071, + -0.000107680283438494,-0.0116910004941481,0.229308761856198,-0.23032105777791, + -0.000112326254468664,-0.0110927255499205,0.243266552137685,-0.25122496225075, + -0.000116972225498502,-0.0104944506056923,0.257224342419172,-0.272128866723589, + -0.000121618196528783,-0.00989617566146483,0.271182132700659,-0.293032771196428, + -0.000126264167558898,-0.00929790071723713,0.285139922982146,-0.313936675669268, + -0.000130910138588625,-0.00869962577300898,0.299097713263633,-0.334840580142107, + -0.000135556109619128,-0.0081013508287815,0.31305550354512,-0.355744484614946, + -0.000140202080649243,-0.00750307588455401,0.327013293826606,-0.376648389087786, + -0.000144848051679247,-0.00690480094032608,0.340971084108094,-0.397552293560625, + -0.000149494022709584,-0.0063065259960986,0.35492887438958,-0.418456198033465, + -0.000154139993739588,-0.00570825105187067,0.368886664671067,-0.439360102506304, + -0.000158785964769814,-0.00510997610764297,0.382844454952554,-0.460264006979143, + -0.000163431935799707,-0.00451170116341504,0.396802245234041,-0.481167911451983, + -0.0001680779068296,-0.00391342621918711,0.410760035515528,-0.502071815924822, + -0.000172723877859937,-0.0033151512749594,0.424717825797015,-0.522975720397661, + -0.000177369848889941,-0.00271687633073192,0.438675616078502,-0.543879624870501, + -0.000182015819919501,-0.00211860138650355,0.452633406359989,-0.56478352934334, + -0.000186661790949949,-0.00152032644227607,0.466591196641476,-0.58568743381618, + -0.000191307761980064,-0.000922051498048138,0.480548986922963,-0.606591338289019, + -0.000195953733010179,-0.000323776553820654,0.49450677720445,-0.627495242761858, + -0.000200599704040072,0.000274498390407718,0.508464567485937,-0.648399147234698, + -0.000205245675070409,0.000872773334635202,0.522422357767424,-0.669303051707537, + -7.99310319722357e-05,-0.0115850845897552,0.182212969751726,-0.172867027973653, + -8.3432421549845e-05,-0.0110141164450552,0.195290504735669,-0.194409581750645, + -8.69338111273432e-05,-0.0104431483003549,0.208368039719613,-0.215952135527636, + -9.04352007047859e-05,-0.0098721801556545,0.221445574703557,-0.237494689304628, + -9.39365902821176e-05,-0.00930121201095435,0.234523109687501,-0.259037243081619, + -9.74379798595604e-05,-0.00873024386625398,0.247600644671445,-0.280579796858611, + -0.00010093936943717,-0.00815927572155406,0.260678179655388,-0.302122350635602, + -0.000104440759014612,-0.00758830757685369,0.273755714639332,-0.323664904412594, + -0.000107942148591667,-0.00701733943215288,0.286833249623276,-0.345207458189585, + -0.000111443538169387,-0.00644637128745318,0.29991078460722,-0.366750011966577, + -0.000114944927746774,-0.00587540314275281,0.312988319591164,-0.388292565743568, + -0.000118446317324494,-0.00530443499805311,0.326065854575107,-0.40983511952056, + -0.000121947706901882,-0.00473346685335274,0.339143389559051,-0.431377673297551, + -0.00012544909647938,-0.00416249870865304,0.352220924542995,-0.452920227074543, + -0.000128950486056767,-0.00359153056395245,0.365298459526939,-0.474462780851534, + -0.000132451875634154,-0.00302056241925186,0.378375994510883,-0.496005334628525, + -0.000135953265211652,-0.00244959427455149,0.391453529494827,-0.517547888405517, + -0.000139454654788707,-0.00187862612985068,0.404531064478771,-0.539090442182508, + -0.000142956044366316,-0.00130765798515142,0.417608599462714,-0.5606329959595, + -0.000146457433944147,-0.000736689840451277,0.430686134446658,-0.582175549736491, + -0.000149958823521423,-0.000165721695751131,0.443763669430601,-0.603718103513483, + -0.000153460213099033,0.000405246448949015,0.456841204414545,-0.625260657290474, + -0.000156961602676309,0.000976214593649161,0.469918739398489,-0.646803211067466, + -0.000160462992253363,0.00154718273834975,0.482996274382433,-0.668345764844457, + -0.000163964381831305,0.0021181508830499,0.496073809366377,-0.689888318621449, + -6.62232921073147e-05,-0.00988886630486607,0.17691406364501,-0.177946250147048, + -6.87240975152381e-05,-0.00936274368892565,0.18911039895448,-0.200105775568715, + -7.1224902923217e-05,-0.00883662107298555,0.20130673426395,-0.222265300990382, + -7.37257083307519e-05,-0.00831049845704479,0.213503069573419,-0.244424826412048, + -7.62265137384532e-05,-0.00778437584110425,0.225699404882889,-0.266584351833715, + -7.87273191462101e-05,-0.00725825322516349,0.237895740192359,-0.288743877255381, + -8.12281245538005e-05,-0.00673213060922295,0.250092075501828,-0.310903402677048, + -8.37289299616684e-05,-0.00620600799328241,0.262288410811298,-0.333062928098715, + -8.62297353697028e-05,-0.00567988537734254,0.274484746120767,-0.355222453520381, + -8.87305407771821e-05,-0.00515376276140134,0.286681081430238,-0.377381978942048, + -9.12313461846059e-05,-0.00462764014546058,0.298877416739707,-0.399541504363715, + -9.37321515922518e-05,-0.00410151752951982,0.311073752049177,-0.421701029785381, + -9.62329570006748e-05,-0.00357539491358017,0.323270087358646,-0.443860555207048, + -9.87337624080986e-05,-0.00304927229763896,0.335466422668116,-0.466020080628714, + -0.000101234567815855,-0.00252314968169842,0.347662757977586,-0.488179606050381, + -0.000103735373223501,-0.00199702706575811,0.359859093287056,-0.510339131472048, + -0.000106236178631369,-0.00147090444981779,0.372055428596525,-0.532498656893715, + -0.000108736984039126,-0.000944781833877251,0.384251763905995,-0.554658182315381, + -0.000111237789446883,-0.00041865921793649,0.396448099215465,-0.576817707737048, + -0.000113738594854751,0.000107463398003826,0.408644434524934,-0.598977233158714, + -0.00011623940026273,0.000633586013944143,0.420840769834404,-0.621136758580381, + -0.000118740205670265,0.00115970862988446,0.433037105143873,-0.643296284002048, + -0.000121241011078244,0.00168583124582522,0.445233440453343,-0.665455809423714, + -0.000123741816485223,0.00221195386176642,0.457429775762813,-0.687615334845381, + -0.000126242621893868,0.0027380764777063,0.469626111072283,-0.709774860267048, + -5.33744927950219e-05,-0.00845796150272471,0.171844843222908,-0.1825957572992, + -5.506927210569e-05,-0.00798891394834234,0.183207975456313,-0.205320057006508, + -5.67640514163026e-05,-0.00751986639396007,0.194571107689718,-0.228044356713816, + -5.84588307267486e-05,-0.00705081883957748,0.205934239923124,-0.250768656421124, + -6.01536100370836e-05,-0.00658177128519477,0.217297372156529,-0.273492956128431, + -6.18483893479183e-05,-0.00611272373081273,0.228660504389935,-0.296217255835739, + -6.35431686584753e-05,-0.00564367617643025,0.24002363662334,-0.318941555543047, + -6.52379479690324e-05,-0.00517462862204798,0.251386768856745,-0.341665855250355, + -6.69327272793119e-05,-0.00470558106766505,0.262749901090151,-0.364390154957663, + -6.8627506590202e-05,-0.00423653351328324,0.274113033323556,-0.38711445466497, + -7.0322285900537e-05,-0.00376748595890031,0.285476165556962,-0.409838754372278, + -7.20170652116492e-05,-0.00329843840451871,0.296839297790366,-0.432563054079586, + -7.37118445216511e-05,-0.00282939085013512,0.308202430023772,-0.455287353786894, + -7.54066238325413e-05,-0.00236034329575352,0.319565562257177,-0.478011653494202, + -7.71014031432093e-05,-0.0018912957413717,0.330928694490582,-0.50073595320151, + -7.87961824537664e-05,-0.00142224818698877,0.342291826723988,-0.523460252908817, + -8.04909617643235e-05,-0.000953200632606288,0.353654958957394,-0.546184552616125, + -8.21857410746585e-05,-0.000484153078224026,0.365018091190799,-0.568908852323433, + -8.38805203851045e-05,-1.51055238410969e-05,0.376381223424204,-0.591633152030741, + -8.55752996959946e-05,0.000453942030540944,0.387744355657609,-0.614357451738049, + -8.72700790065517e-05,0.000922989584923428,0.399107487891015,-0.637081751445357, + -8.89648583171088e-05,0.00139203713930591,0.41047062012442,-0.659806051152664, + -9.06596376273328e-05,0.00186108469368884,0.421833752357826,-0.682530350859972, + -9.23544169381119e-05,0.00233013224807044,0.433196884591231,-0.70525465056728, + -9.40491962486689e-05,0.00279917980245337,0.444560016824637,-0.727978950274588, + -4.19572267271184e-05,-0.00730700058508948,0.167257896503593,-0.186646686184674, + -4.30517227855698e-05,-0.0069002456101086,0.177874401383225,-0.209863051049128, + -4.41462188444097e-05,-0.00649349063512827,0.188490906262858,-0.233079415913582, + -4.52407149028056e-05,-0.00608673566014739,0.19910741114249,-0.256295780778036, + -4.6335210961479e-05,-0.00567998068516706,0.209723916022123,-0.279512145642491, + -4.74297070200413e-05,-0.00527322571018618,0.220340420901755,-0.302728510506945, + -4.85242030786037e-05,-0.00486647073520552,0.230956925781388,-0.325944875371399, + -4.96186991369996e-05,-0.00445971576022464,0.241573430661021,-0.349161240235853, + -5.07131951956175e-05,-0.0040529607852442,0.252189935540653,-0.372377605100308, + -5.18076912542353e-05,-0.00364620581026354,0.262806440420286,-0.395593969964762, + -5.29021873127977e-05,-0.00323945083528288,0.273422945299918,-0.418810334829216, + -5.39966833713601e-05,-0.00283269586030177,0.284039450179551,-0.44202669969367, + -5.50911794302555e-05,-0.00242594088532155,0.294655955059184,-0.465243064558125, + -5.61856754883738e-05,-0.00201918591034045,0.305272459938816,-0.488459429422579, + -5.72801715476023e-05,-0.00161243093536068,0.315888964818448,-0.511675794287033, + -5.83746676054986e-05,-0.00120567596037868,0.326505469698082,-0.534892159151487, + -5.9469163664283e-05,-0.000798920985398688,0.337121974577714,-0.558108524015941, + -6.05636597230674e-05,-0.000392166010418471,0.347738479457346,-0.581324888880396, + -6.16581557811857e-05,1.45889645630781e-05,0.358354984336979,-0.60454125374485, + -6.2752651839304e-05,0.000421343939544627,0.368971489216612,-0.627757618609304, + -6.38471478986435e-05,0.0008280989145244,0.379587994096245,-0.650973983473758, + -6.4941643957428e-05,0.00123485388950417,0.390204498975877,-0.674190348338212, + -6.60361400157683e-05,0.00164160886448528,0.400821003855509,-0.697406713202667, + -6.71306360742197e-05,0.00204836383946638,0.411437508735142,-0.720623078067121, + -6.82251321330041e-05,0.0024551188144466,0.422054013614775,-0.743839442931575, + -3.228021332502e-05,-0.00641532403135203,0.163309010493678,-0.19002690310177, + -3.29584181856246e-05,-0.00606955243326501,0.173287760665244,-0.213653861935045, + -3.36366230463403e-05,-0.00572378083517799,0.183266510836809,-0.237280820768321, + -3.4314827906945e-05,-0.00537800923709075,0.193245261008375,-0.260907779601596, + -3.49930327672721e-05,-0.00503223763900329,0.203224011179941,-0.284534738434872, + -3.56712376280988e-05,-0.00468646604091649,0.213202761351506,-0.308161697268148, + -3.63494424887589e-05,-0.0043406944428297,0.223181511523072,-0.331788656101423, + -3.70276473493636e-05,-0.00399492284474245,0.233160261694638,-0.355415614934699, + -3.77058522095797e-05,-0.00364915124665455,0.243139011866204,-0.379042573767974, + -3.83840570703509e-05,-0.00330337964856797,0.253117762037769,-0.40266953260125, + -3.90622619308445e-05,-0.00295760805048095,0.263096512209334,-0.426296491434525, + -3.97404667922263e-05,-0.0026118364523946,0.2730752623809,-0.449923450267801, + -4.04186716520538e-05,-0.00226606485430669,0.283054012552466,-0.473550409101076, + -4.10968765128805e-05,-0.0019202932562199,0.293032762724031,-0.497177367934352, + -4.17750813735962e-05,-0.00157452165813265,0.303011512895597,-0.520804326767628, + -4.24532862336457e-05,-0.00122875006004497,0.312990263067163,-0.544431285600903, + -4.31314910949165e-05,-0.000882978461958617,0.322969013238728,-0.568058244434179, + -4.38096959555212e-05,-0.00053720686387182,0.332947763410294,-0.591685203267454, + -4.44879008154597e-05,-0.000191435265783468,0.34292651358186,-0.61531216210073, + -4.51661056768415e-05,0.000154336332302663,0.352905263753425,-0.638939120934005, + -4.5844310536558e-05,0.00050010793039057,0.362884013924991,-0.662566079767281, + -4.65225153973847e-05,0.000845879528477145,0.372862764096556,-0.686193038600556, + -4.72007202584335e-05,0.00119165112656416,0.382841514268123,-0.709819997433832, + -4.7878925118594e-05,0.00153742272465163,0.392820264439688,-0.733446956267108, + -4.85571299797538e-05,0.00188319432273865,0.402799014611254,-0.757073915100383, + -2.43985397578306e-05,-0.00574338065697311,0.160050779482165,-0.192747267398463, + -2.48052220699901e-05,-0.00545266413771017,0.169506528338644,-0.216704668094085, + -2.52119043824828e-05,-0.00516194761844779,0.178962277195123,-0.240662068789706, + -2.56185866945313e-05,-0.00487123109918475,0.188418026051603,-0.264619469485328, + -2.60252690066909e-05,-0.00458051457992181,0.197873774908082,-0.28857687018095, + -2.64319513194611e-05,-0.00428979806065977,0.207329523764561,-0.312534270876571, + -2.68386336318427e-05,-0.00399908154139728,0.21678527262104,-0.336491671572193, + -2.72453159438912e-05,-0.00370836502213412,0.22624102147752,-0.360449072267815, + -2.76519982566059e-05,-0.00341764850287185,0.235696770333999,-0.384406472963436, + -2.80586805690985e-05,-0.00312693198360936,0.245152519190478,-0.408363873659058, + -2.84653628811471e-05,-0.00283621546434643,0.254608268046957,-0.43232127435468, + -2.88720451937508e-05,-0.00254549894508371,0.264064016903437,-0.456278675050302, + -2.92787275054662e-05,-0.00225478242582078,0.273519765759916,-0.480236075745923, + -2.96854098182919e-05,-0.00196406590655895,0.282975514616395,-0.504193476441545, + -3.00920921303405e-05,-0.00167334938729535,0.292431263472875,-0.528150877137167, + -3.04987744429441e-05,-0.00138263286803353,0.301887012329353,-0.552108277832788, + -3.09054567555478e-05,-0.00109191634877059,0.311342761185833,-0.57606567852841, + -3.13121390678184e-05,-0.000801199829508104,0.320798510042312,-0.600023079224032, + -3.17188213802e-05,-0.000510483310245835,0.330254258898791,-0.623980479919653, + -3.21255036921375e-05,-0.000219766790982678,0.33971000775527,-0.647937880615275, + -3.25321860048522e-05,7.09497282795901e-05,0.34916575661175,-0.671895281310897, + -3.29388683173448e-05,0.000361666247541859,0.358621505468229,-0.695852682006519, + -3.33455506292824e-05,0.000652382766805459,0.368077254324708,-0.71981008270214, + -3.3752232941664e-05,0.000943099286068172,0.377533003181188,-0.743767483397762, + -3.41589152541566e-05,0.00123381580533044,0.386988752037667,-0.767724884093383, + -1.81829505269682e-05,-0.00524666434754717,0.157454266876236,-0.194873565063733, + -1.84211510676491e-05,-0.0050027046970138,0.166495176237537,-0.219089246520232, + -1.8659351608219e-05,-0.00475874504648033,0.175536085598838,-0.243304927976732, + -1.88975521489554e-05,-0.00451478539594707,0.184576994960139,-0.267520609433231, + -1.91357526897473e-05,-0.00427082574541382,0.19361790432144,-0.29173629088973, + -1.93739532300397e-05,-0.00402686609488012,0.202658813682741,-0.31595197234623, + -1.96121537707206e-05,-0.00378290644434687,0.211699723044042,-0.340167653802729, + -1.98503543111794e-05,-0.00353894679381339,0.220740632405343,-0.364383335259228, + -2.00885548519159e-05,-0.00329498714328014,0.229781541766644,-0.388599016715727, + -2.03267553925413e-05,-0.0030510274927471,0.238822451127945,-0.412814698172227, + -2.05649559330556e-05,-0.00280706784221318,0.247863360489246,-0.437030379628726, + -2.08031564737921e-05,-0.00256310819167949,0.256904269850547,-0.461246061085225, + -2.10413570141954e-05,-0.00231914854114601,0.265945179211848,-0.485461742541724, + -2.12795575551539e-05,-0.00207518889061298,0.274986088573149,-0.509677423998224, + -2.15177580954462e-05,-0.00183122924007906,0.28402699793445,-0.533893105454723, + -2.17559586360716e-05,-0.00158726958954603,0.293067907295751,-0.558108786911222, + -2.1994159176697e-05,-0.00134330993901277,0.302108816657052,-0.582324468367722, + -2.22323597178775e-05,-0.00109935028847996,0.311149726018353,-0.606540149824221, + -2.24705602578368e-05,-0.000855390637945597,0.320190635379654,-0.63075583128072, + -2.27087607982401e-05,-0.00061143098741212,0.329231544740955,-0.654971512737219, + -2.29469613391986e-05,-0.000367471336879532,0.338272454102255,-0.679187194193719, + -2.31851618793799e-05,-0.000123511686345612,0.347313363463556,-0.703402875650218, + -2.34233624196722e-05,0.000120447964188752,0.356354272824858,-0.727618557106717, + -2.36615629608528e-05,0.000364407614720896,0.365395182186158,-0.751834238563217, + -2.38997635013671e-05,0.000608367265254373,0.374436091547459,-0.776049920019716, + -1.34037275033028e-05,-0.00488411261732169,0.155441284111603,-0.196497895335566, + -1.35412940485691e-05,-0.00467807979522517,0.164161710994076,-0.220910883719208, + -1.36788605941685e-05,-0.00447204697312842,0.17288213787655,-0.245323872102851, + -1.38164271393793e-05,-0.00426601415103145,0.181602564759025,-0.269736860486493, + -1.39539936848121e-05,-0.00405998132893481,0.190322991641499,-0.294149848870135, + -1.40915602301894e-05,-0.00385394850683807,0.199043418523973,-0.318562837253777, + -1.42291267754557e-05,-0.0036479156847411,0.207763845406447,-0.342975825637419, + -1.43666933209441e-05,-0.00344188286264413,0.216484272288921,-0.367388814021061, + -1.45042598661549e-05,-0.00323585004054738,0.225204699171395,-0.391801802404704, + -1.46418264117543e-05,-0.00302981721845086,0.233925126053869,-0.416214790788346, + -1.47793929570206e-05,-0.00282378439635433,0.242645552936343,-0.440627779171988, + -1.491695950262e-05,-0.00261775157425759,0.251365979818817,-0.46504076755563, + -1.50545260474422e-05,-0.00241171875216062,0.260086406701291,-0.489453755939272, + -1.51920925927085e-05,-0.00220568593006321,0.268806833583765,-0.513866744322914, + -1.53296591381968e-05,-0.00199965310796668,0.277527260466239,-0.538279732706556, + -1.54672256836852e-05,-0.00179362028587016,0.286247687348713,-0.562692721090199, + -1.56047922290625e-05,-0.00158758746377297,0.294968114231188,-0.587105709473841, + -1.57423587745509e-05,-0.00138155464167644,0.303688541113662,-0.611518697857483, + -1.58799253199282e-05,-0.00117552181957992,0.312408967996135,-0.635931686241125, + -1.60174918654166e-05,-0.000969488997482948,0.32112939487861,-0.660344674624767, + -1.61550584103498e-05,-0.000763456175385979,0.329849821761084,-0.684757663008409, + -1.62926249561712e-05,-0.00055742335328901,0.338570248643558,-0.709170651392051, + -1.64301915013265e-05,-0.000351390531192042,0.347290675526032,-0.733583639775694, + -1.65677580462598e-05,-0.000145357709094629,0.356011102408507,-0.757996628159336, + -1.67053245919702e-05,6.06751130014516e-05,0.36473152929098,-0.782409616542978, + -9.79937217493454e-06,-0.00462161183197185,0.153913503309736,-0.197717181411202, + -9.87842135719008e-06,-0.00444530778400654,0.162391328004467,-0.222278276120918, + -9.95747053961216e-06,-0.00426900373604122,0.170869152699199,-0.246839370830634, + -1.00365197216457e-05,-0.00409269968807568,0.179346977393931,-0.27140046554035, + -1.01155689035681e-05,-0.00391639564010959,0.187824802088662,-0.295961560250066, + -1.01946180861012e-05,-0.00374009159214483,0.196302626783394,-0.320522654959782, + -1.02736672682457e-05,-0.00356378754417896,0.204780451478126,-0.345083749669498, + -1.03527164501127e-05,-0.0033874834962131,0.213258276172857,-0.369644844379214, + -1.04317656323683e-05,-0.00321117944824811,0.221736100867589,-0.39420593908893, + -1.05108148146238e-05,-0.00303487540028269,0.23021392556232,-0.418767033798646, + -1.05898639967128e-05,-0.00285857135231682,0.238691750257052,-0.443328128508362, + -1.06689131789128e-05,-0.00268226730435162,0.247169574951783,-0.467889223218078, + -1.07479623613349e-05,-0.00250596325638663,0.255647399646515,-0.492450317927794, + -1.08270115429798e-05,-0.0023296592084201,0.264125224341247,-0.51701141263751, + -1.0906060725735e-05,-0.00215335516045578,0.272603049035978,-0.541572507347226, + -1.09851099076019e-05,-0.00197705111248925,0.28108087373071,-0.566133602056942, + -1.1064159089913e-05,-0.00180074706452449,0.289558698425441,-0.590694696766658, + -1.11432082723351e-05,-0.00162444301655906,0.298036523120173,-0.615255791476374, + -1.1222257454313e-05,-0.00144813896859386,0.306514347814904,-0.63981688618609, + -1.13013066358469e-05,-0.00127183492062732,0.314992172509637,-0.664377980895806, + -1.138035581838e-05,-0.00109553087266256,0.323469997204368,-0.688939075605522, + -1.14594050009131e-05,-0.000919226824697805,0.331947821899099,-0.713500170315238, + -1.15384541830021e-05,-0.000742922776731714,0.340425646593831,-0.738061265024954, + -1.16175033654242e-05,-0.00056661872876651,0.348903471288563,-0.76262235973467, + -1.16965525469581e-05,-0.000390314680799975,0.357381295983295,-0.787183454444386, + -7.12027086441358e-06,-0.00443249546210334,0.152772460993502,-0.198620425851387, + -7.165846283963e-06,-0.00427891194980523,0.16106944102443,-0.223291237401355, + -7.21142170356792e-06,-0.00412532843750735,0.169366421055358,-0.247962048951324, + -7.25699712311734e-06,-0.00397174492520924,0.177663401086287,-0.272632860501292, + -7.30257254311084e-06,-0.0038181614129118,0.185960381117215,-0.297303672051261, + -7.34814796260475e-06,-0.00366457790061392,0.194257361148143,-0.321974483601229, + -7.39372338215416e-06,-0.00351099438831559,0.202554341179072,-0.346645295151198, + -7.43929880220318e-06,-0.00335741087601815,0.21085132121,-0.371316106701166, + -7.48487422175259e-06,-0.00320382736372027,0.219148301240928,-0.395986918251134, + -7.53044964107996e-06,-0.00305024385142194,0.227445281271857,-0.420657729801103, + -7.57602506151756e-06,-0.00289666033912539,0.235742261302784,-0.445328541351071, + -7.62160048062288e-06,-0.0027430768268264,0.244039241333713,-0.46999935290104, + -7.66717590061639e-06,-0.0025894933145294,0.252336221364641,-0.494670164451008, + -7.71275131994376e-06,-0.00243590980223107,0.260633201395569,-0.519340976000977, + -7.75832673982624e-06,-0.00228232628993341,0.268930181426497,-0.544011787550945, + -7.80390215937565e-06,-0.00212874277763508,0.277227161457426,-0.568682599100913, + -7.84947757925814e-06,-0.00197515926533764,0.285524141488354,-0.593353410650882, + -7.89505299825244e-06,-0.00182157575303865,0.293821121519283,-0.61802422220085, + -7.94062841869003e-06,-0.00166799224074188,0.302118101550211,-0.642695033750819, + -7.9862038380174e-06,-0.00151440872844377,0.310415081581139,-0.667365845300787, + -8.03177925767784e-06,-0.00136082521614522,0.318712061612068,-0.692036656850755, + -8.07735467789339e-06,-0.00120724170384845,0.327009041642996,-0.716707468400724, + -8.12293009699872e-06,-0.00105365819155034,0.335306021673924,-0.741378279950692, + -8.16850551654813e-06,-0.00090007467925135,0.343603001704853,-0.766049091500661, + -8.21408093643061e-06,-0.000746491166954577,0.351899981735781,-0.790719903050629, + -5.15020821351131e-06,-0.00429665988542394,0.151930402708798,-0.199283026385069, + -5.17676778843956e-06,-0.00416012161111801,0.160094109920119,-0.224034323829742, + -5.20332736314577e-06,-0.00402358333681185,0.168257817131441,-0.248785621274415, + -5.22988693807402e-06,-0.00388704506250603,0.176421524342762,-0.273536918719088, + -5.25644651289126e-06,-0.00375050678819999,0.184585231554083,-0.298288216163761, + -5.28300608743093e-06,-0.0036139685138934,0.192748938765405,-0.323039513608434, + -5.30956566263674e-06,-0.00347743023958791,0.200912645976726,-0.347790811053106, + -5.33612523723193e-06,-0.00334089196528153,0.209076353188047,-0.372542108497779, + -5.36268481182711e-06,-0.00320435369097516,0.217240060399368,-0.397293405942452, + -5.38924438675537e-06,-0.00306781541666923,0.22540376761069,-0.422044703387125, + -5.41580396173913e-06,-0.00293127714236352,0.233567474822011,-0.446796000831798, + -5.44236353650085e-06,-0.00279473886805759,0.241731182033332,-0.471547298276471, + -5.46892311181768e-06,-0.00265820059375188,0.249894889244653,-0.496298595721144, + -5.49548268591327e-06,-0.00252166231944484,0.258058596455975,-0.521049893165817, + -5.52204226111908e-06,-0.00238512404513957,0.266222303667295,-0.54580119061049, + -5.5486018358808e-06,-0.00224858577083342,0.274386010878617,-0.570552488055163, + -5.57516141042047e-06,-0.00211204749652683,0.282549718089939,-0.595303785499836, + -5.60172098584832e-06,-0.00197550922222156,0.29071342530126,-0.620055082944509, + -5.62828056016595e-06,-0.00183897094791474,0.298877132512581,-0.644806380389181, + -5.65484013481665e-06,-0.00170243267360837,0.307040839723903,-0.669557677833854, + -5.68139971002246e-06,-0.00156589439930288,0.315204546935224,-0.694308975278527, + -5.7079592848952e-06,-0.00142935612499695,0.323368254146545,-0.7190602727232, + -5.73451885932386e-06,-0.00129281785069102,0.331531961357866,-0.743811570167873, + -5.76107843430762e-06,-0.00115627957638464,0.339695668569187,-0.768562867612546, + -5.78763800929138e-06,-0.00101974130207871,0.347859375780509,-0.793314165057218, + -3.71290802991808e-06,-0.00419927236427542,0.151314443675528,-0.199765611750166, + -3.72864798375838e-06,-0.00407534997793668,0.159380761157111,-0.224575528699211, + -3.74438793754317e-06,-0.00395142759159828,0.167447078638693,-0.249385445648256, + -3.76012789138347e-06,-0.00382750520525965,0.175513396120276,-0.274195362597301, + -3.77586784511275e-06,-0.00370358281892091,0.183579713601859,-0.299005279546346, + -3.79160779939713e-06,-0.00357966043258329,0.191646031083441,-0.323815196495391, + -3.80734775279334e-06,-0.00345573804624411,0.199712348565024,-0.348625113444436, + -3.82308770652262e-06,-0.00333181565990515,0.207778666046607,-0.373435030393481, + -3.8388276607515e-06,-0.00320789327356752,0.215844983528189,-0.398244947342527, + -3.8545676140922e-06,-0.00308397088722812,0.223911301009772,-0.423054864291572, + -3.87030756821005e-06,-0.00296004850089004,0.231977618491355,-0.447864781240616, + -3.8860475217728e-06,-0.00283612611455131,0.240043935972938,-0.472674698189662, + -3.90178747600167e-06,-0.00271220372821346,0.24811025345452,-0.497484615138706, + -3.91752742956442e-06,-0.00258828134187428,0.256176570936103,-0.522294532087751, + -3.93326738357125e-06,-0.00246435895553621,0.264242888417686,-0.547104449036796, + -3.94900733724501e-06,-0.00234043656919769,0.272309205899268,-0.571914365985841, + -3.96474729069674e-06,-0.00221651418285829,0.280375523380851,-0.596724282934887, + -3.98048724448152e-06,-0.00209259179651955,0.288441840862434,-0.621534199883932, + -3.99622719804427e-06,-0.00196866941018081,0.296508158344017,-0.646344116832977, + -4.01196715260621e-06,-0.00184474702384341,0.304574475825599,-0.671154033782022, + -4.027707106391e-06,-0.00172082463750467,0.312640793307182,-0.695963950731067, + -4.04344706017579e-06,-0.00159690225116593,0.320707110788765,-0.720773867680112, + -4.05918701362751e-06,-0.0014729798648272,0.328773428270347,-0.745583784629157, + -4.07492696719025e-06,-0.0013490574784889,0.33683974575193,-0.770393701578202, + -4.09066692119708e-06,-0.00122513509214972,0.344906063233513,-0.795203618527247, + -2.67029393397067e-06,-0.00412952777607445,0.15086676848874,-0.200115249996913, + -2.67982151025414e-06,-0.00401485189495598,0.15886235524972,-0.224967637402412, + -2.68934908675966e-06,-0.00390017601383774,0.166857942010699,-0.249820024807911, + -2.69887666343172e-06,-0.00378550013271939,0.174853528771679,-0.27467241221341, + -2.70840423982621e-06,-0.00367082425160126,0.182849115532658,-0.29952479961891, + -2.71793181605418e-06,-0.00355614837048268,0.190844702293637,-0.324377187024409, + -2.72745939278174e-06,-0.00344147248936499,0.198840289054616,-0.349229574429908, + -2.73698696934277e-06,-0.00332679660824642,0.206835875815596,-0.374081961835407, + -2.7465145454042e-06,-0.00321212072712784,0.214831462576575,-0.398934349240907, + -2.75604212196523e-06,-0.00309744484600971,0.222827049337555,-0.423786736646406, + -2.7655696982487e-06,-0.00298276896489114,0.230822636098534,-0.448639124051905, + -2.77509727475422e-06,-0.00286809308377278,0.238818222859513,-0.473491511457404, + -2.78462485137076e-06,-0.00275341720265465,0.246813809620493,-0.498343898862904, + -2.79415242787628e-06,-0.00263874132153652,0.254809396381472,-0.523196286268403, + -2.80368000449283e-06,-0.00252406544041861,0.262804983142451,-0.548048673673902, + -2.81320758044323e-06,-0.00240938955929937,0.270800569903431,-0.572901061079401, + -2.82273515750386e-06,-0.00229471367818213,0.27879615666441,-0.597753448484901, + -2.83226273323223e-06,-0.00218003779706288,0.286791743425389,-0.6226058358904, + -2.84179031018184e-06,-0.0020653619159452,0.294787330186369,-0.647458223295899, + -2.8513178869094e-06,-0.00195068603482706,0.302782916947348,-0.672310610701398, + -2.86084546297083e-06,-0.00183601015370805,0.310778503708328,-0.697162998106898, + -2.8703730392543e-06,-0.00172133427258991,0.318774090469307,-0.722015385512397, + -2.87990061598187e-06,-0.00160665839147223,0.326769677230286,-0.746867772917896, + -2.88942819237636e-06,-0.00149198251035365,0.334765263991265,-0.771720160323396, + -2.89895576865984e-06,-0.00137730662923508,0.342760850752245,-0.796572547728895, + -1.91711875047185e-06,-0.00407961391361322,0.150542919746702,-0.200367605278461, + -1.92302373297482e-06,-0.00397166725137255,0.158487366641278,-0.225250646206839, + -1.92892871531125e-06,-0.0038637205891312,0.166431813535854,-0.250133687135217, + -1.93483369753666e-06,-0.00375577392688964,0.174376260430431,-0.275016728063596, + -1.94073867998412e-06,-0.00364782726464852,0.182320707325007,-0.299899768991974, + -1.94664366243158e-06,-0.00353988060240762,0.190265154219583,-0.324782809920352, + -1.95254864476802e-06,-0.0034319339401665,0.19820960111416,-0.34966585084873, + -1.95845362699343e-06,-0.00332398727792493,0.206154048008736,-0.374548891777109, + -1.96435860927435e-06,-0.00321604061568381,0.214098494903312,-0.399431932705487, + -1.97026359172181e-06,-0.00310809395344269,0.222042941797889,-0.424314973633865, + -1.97616857389171e-06,-0.00300014729120113,0.229987388692465,-0.449198014562243, + -1.98207355639468e-06,-0.00289220062896045,0.237931835587041,-0.474081055490621, + -1.98797853867561e-06,-0.00278425396671889,0.245876282481618,-0.498964096418999, + -1.99388352073449e-06,-0.00267630730447754,0.253820729376194,-0.523847137347378, + -1.99978850323745e-06,-0.0025683606422362,0.261765176270771,-0.548730178275756, + -2.00569348585145e-06,-0.00246041397999552,0.269709623165347,-0.573613219204134, + -2.01159846802135e-06,-0.00235246731775418,0.277654070059923,-0.598496260132512, + -2.01750345041329e-06,-0.00224452065551306,0.2855985169545,-0.62337930106089, + -2.02340843291626e-06,-0.00213657399327172,0.293542963849076,-0.648262341989269, + -2.02931341519719e-06,-0.00202862733103037,0.301487410743653,-0.673145382917647, + -2.03521839703402e-06,-0.00192068066878903,0.309431857638229,-0.698028423846025, + -2.0411233800921e-06,-0.00181273400654902,0.317376304532805,-0.722911464774403, + -2.04702836203996e-06,-0.00170478734430679,0.325320751427382,-0.747794505702781, + -2.05293334465395e-06,-0.00159684068206589,0.333265198321958,-0.772677546631159, + -2.05883832649079e-06,-0.00148889401982411,0.341209645216535,-0.797560587559538, + -1.37465923455427e-06,-0.00404390747655059,0.150309438262744,-0.200549246064803, + -1.37840823793978e-06,-0.003940833169086,0.158217029323549,-0.225454350846831, + -1.38215724149182e-06,-0.00383775886162163,0.166124620384354,-0.250359455628859, + -1.38590624476631e-06,-0.00373468455415704,0.174032211445159,-0.275264560410887, + -1.38965524848489e-06,-0.0036316102466929,0.181939802505964,-0.300169665192915, + -1.39340425220347e-06,-0.00352853593922875,0.189847393566769,-0.325074769974944, + -1.3971532557e-06,-0.00342546163176438,0.197754984627574,-0.349979874756972, + -1.40090225941858e-06,-0.00332238732430024,0.205662575688379,-0.374884979539, + -1.40465126247102e-06,-0.00321931301683542,0.213570166749184,-0.399790084321028, + -1.4084002661896e-06,-0.00311623870937128,0.221477757809989,-0.424695189103056, + -1.41214927007471e-06,-0.00301316440190735,0.229385348870794,-0.449600293885084, + -1.41589827351574e-06,-0.00291009009444299,0.237292939931598,-0.474505398667112, + -1.41964727695676e-06,-0.0028070157869784,0.245200530992403,-0.499410503449141, + -1.42339628061983e-06,-0.00270394147951425,0.253108122053208,-0.524315608231169, + -1.42714528428289e-06,-0.0026008671720501,0.261015713114013,-0.549220713013197, + -1.43089428783494e-06,-0.00249779286458574,0.268923304174818,-0.574125817795225, + -1.43464329105392e-06,-0.0023947185571207,0.276830895235624,-0.599030922577253, + -1.43839229493903e-06,-0.00229164424965722,0.284738486296428,-0.623936027359281, + -1.44214129815801e-06,-0.00218856994219285,0.292646077357233,-0.648841132141309, + -1.44589030171005e-06,-0.00208549563472804,0.300553668418038,-0.673746236923337, + -1.44963930581721e-06,-0.00198242132726456,0.308461259478843,-0.698651341705366, + -1.45338830892516e-06,-0.00187934701979975,0.316368850539648,-0.723556446487394, + -1.4571373129213e-06,-0.00177627271233627,0.324276441600452,-0.748461551269422, + -1.46088631669539e-06,-0.00167319840487146,0.332184032661258,-0.77336665605145, + -1.46463531969232e-06,-0.00157012409740709,0.340091623722063,-0.798271760833478, + -0.000181201626823391,-0.0313793041347652,0.224181556802017,-0.136858951696573, + -0.000194964032887435,-0.031112869119811,0.243017255725212,-0.153104187665781, + -0.00020872643895159,-0.030846434104857,0.261852954648408,-0.169349423634989, + -0.000222488845015745,-0.0305799990899031,0.280688653571603,-0.185594659604197, + -0.0002362512510799,-0.030313564074949,0.299524352494798,-0.201839895573404, + -0.000250013657144055,-0.0300471290599948,0.318360051417994,-0.218085131542612, + -0.000263776063208598,-0.0297806940450411,0.337195750341189,-0.23433036751182, + -0.000277538469272531,-0.029514259030087,0.356031449264384,-0.250575603481028, + -0.000291300875336686,-0.029247824015133,0.374867148187579,-0.266820839450235, + -0.000305063281400786,-0.0289813890001784,0.393702847110775,-0.283066075419443, + -0.000318825687464996,-0.0287149539852243,0.41253854603397,-0.29931131138865, + -0.000332588093529096,-0.0284485189702708,0.431374244957165,-0.315556547357858, + -0.00034635049959364,-0.0281820839553166,0.450209943880361,-0.331801783327066, + -0.00036011290565785,-0.0279156489403627,0.469045642803556,-0.348047019296274, + -0.000373875311721616,-0.0276492139254083,0.487881341726751,-0.364292255265481, + -0.000387637717786271,-0.027382778910455,0.506717040649946,-0.380537491234689, + -0.000401400123849927,-0.0271163438955002,0.525552739573142,-0.396782727203897, + -0.000415162529914359,-0.0268499088805465,0.544388438496337,-0.413027963173104, + -0.000428924935978126,-0.0265834738655919,0.563224137419533,-0.429273199142312, + -0.000442687342042336,-0.026317038850638,0.582059836342728,-0.44551843511152, + -0.000456449748106991,-0.0260506038356842,0.600895535265924,-0.461763671080728, + -0.000470212154170868,-0.0257841688207301,0.619731234189118,-0.478008907049935, + -0.000483974560234968,-0.0255177338057759,0.638566933112314,-0.494254143019143, + -0.0004977369662994,-0.0252512987908222,0.657402632035509,-0.510499378988351, + -0.000511499372363722,-0.0249848637758681,0.676238330958705,-0.526744614957558, + -0.000178508613633555,-0.0306316557916103,0.223336230760757,-0.138208101102135, + -0.000191916250282753,-0.0303387950758676,0.242015347908285,-0.154608440860078, + -0.000205323886931452,-0.0300459343601241,0.260694465055813,-0.171008780618022, + -0.000218731523580595,-0.0297530736443813,0.279373582203341,-0.187409120375965, + -0.000232139160229516,-0.0294602129286381,0.298052699350868,-0.203809460133909, + -0.000245546796878326,-0.029167352212895,0.316731816498396,-0.220209799891852, + -0.000258954433527248,-0.0288744914971517,0.335410933645924,-0.236610139649796, + -0.000272362070176391,-0.0285816307814089,0.354090050793452,-0.253010479407739, + -0.00028576970682509,-0.0282887700656653,0.37276916794098,-0.269410819165682, + -0.000299177343474288,-0.0279959093499227,0.391448285088507,-0.285811158923626, + -0.000312584980123209,-0.0277030486341792,0.410127402236035,-0.302211498681569, + -0.000325992616772464,-0.0274101879184367,0.428806519383563,-0.318611838439513, + -0.000339400253421052,-0.0271173272026932,0.447485636531091,-0.335012178197456, + -0.000352807890069973,-0.0268244664869499,0.466164753678619,-0.3514125179554, + -0.000366215526718894,-0.0265316057712066,0.484843870826147,-0.367812857713343, + -0.000379623163367926,-0.0262387450554642,0.503522987973674,-0.384213197471287, + -0.000393030800017069,-0.0259458843397209,0.522202105121202,-0.40061353722923, + -0.00040643843666599,-0.025653023623978,0.540881222268729,-0.417013876987174, + -0.000419846073314911,-0.025360162908235,0.559560339416257,-0.433414216745117, + -0.000433253709963721,-0.0250673021924912,0.578239456563785,-0.449814556503061, + -0.000446661346612531,-0.0247744414767479,0.596918573711313,-0.466214896261004, + -0.000460068983261896,-0.0244815807610053,0.615597690858841,-0.482615236018947, + -0.000473476619910262,-0.0241887200452622,0.634276808006368,-0.499015575776891, + -0.000486884256560072,-0.0238958593295195,0.652955925153896,-0.515415915534835, + -0.000500291893208882,-0.0236029986137765,0.671635042301424,-0.531816255292778, + -0.000174860756161854,-0.0296443738569953,0.222178602899426,-0.140013454245716, + -0.000187794628576432,-0.0293178478489339,0.240645149278726,-0.156621344858606, + -0.000200728500990788,-0.0289913218408724,0.259111695658025,-0.173229235471497, + -0.000213662373405477,-0.0286647958328111,0.277578242037325,-0.189837126084387, + -0.000226596245819721,-0.0283382698247495,0.296044788416624,-0.206445016697278, + -0.000239530118234355,-0.0280117438166885,0.314511334795923,-0.223052907310168, + -0.000252463990649043,-0.0276852178086273,0.332977881175223,-0.239660797923059, + -0.000265397863063677,-0.0273586918005659,0.351444427554522,-0.256268688535949, + -0.000278331735477699,-0.0270321657925039,0.369910973933822,-0.272876579148839, + -0.00029126560789261,-0.026705639784443,0.388377520313121,-0.28948446976173, + -0.000304199480307021,-0.0263791137763816,0.406844066692421,-0.306092360374621, + -0.000317133352721433,-0.02605258776832,0.425310613071721,-0.322700250987511, + -0.000330067225136066,-0.0257260617602588,0.44377715945102,-0.339308141600401, + -0.000343001097550477,-0.0253995357521974,0.462243705830319,-0.355916032213292, + -0.000355934969965555,-0.0250730097441367,0.480710252209618,-0.372523922826182, + -0.000368868842379744,-0.0247464837360749,0.499176798588918,-0.389131813439073, + -0.000381802714794155,-0.0244199577280133,0.517643344968218,-0.405739704051963, + -0.00039473658720901,-0.0240934317199522,0.536109891347517,-0.422347594664854, + -0.000407670459623422,-0.023766905711891,0.554576437726816,-0.438955485277744, + -0.000420604332037944,-0.0234403797038298,0.573042984106116,-0.455563375890635, + -0.000433538204452133,-0.0231138536957678,0.591509530485416,-0.472171266503525, + -0.000446472076866433,-0.022787327687706,0.609976076864715,-0.488779157116416, + -0.0004594059492814,-0.022460801679645,0.628442623244015,-0.505387047729306, + -0.000472339821695922,-0.0221342756715841,0.646909169623314,-0.521994938342197, + -0.000485273694110555,-0.0218077496635227,0.665375716002613,-0.538602828955087, + -0.00016998050449446,-0.0283674951077179,0.220608085680564,-0.142390670383804, + -0.000182292630499015,-0.0279996121384419,0.238789416158635,-0.159271855583745, + -0.000194604756503736,-0.0276317291691663,0.256970746636706,-0.176153040783685, + -0.000206916882508346,-0.0272638461998902,0.275152077114777,-0.193034225983625, + -0.000219229008512956,-0.0268959632306144,0.293333407592848,-0.209915411183566, + -0.000231541134517677,-0.0265280802613386,0.311514738070919,-0.226796596383506, + -0.000243853260522064,-0.0261601972920624,0.32969606854899,-0.243677781583446, + -0.000256165386526952,-0.0257923143227867,0.347877399027061,-0.260558966783387, + -0.000268477512531506,-0.0254244313535108,0.366058729505132,-0.277440151983327, + -0.000280789638536394,-0.0250565483842353,0.384240059983203,-0.294321337183267, + -0.000293101764541004,-0.0246886654149594,0.402421390461274,-0.311202522383208, + -0.000305413890545725,-0.0243207824456837,0.420602720939345,-0.328083707583148, + -0.000317726016550224,-0.0239528994764078,0.438784051417416,-0.344964892783088, + -0.000330038142554612,-0.0235850165071316,0.456965381895487,-0.361846077983029, + -0.000342350268559333,-0.0232171335378559,0.475146712373557,-0.378727263182969, + -0.000354662394563943,-0.02284925056858,0.493328042851629,-0.395608448382909, + -0.000366974520568997,-0.022481367599305,0.511509373329699,-0.41248963358285, + -0.000379286646573385,-0.0221134846300288,0.52969070380777,-0.42937081878279, + -0.000391598772577995,-0.0217456016607529,0.547872034285841,-0.44625200398273, + -0.000403910898582716,-0.021377718691477,0.566053364763912,-0.463133189182671, + -0.000416223024587326,-0.0210098357222011,0.584234695241983,-0.480014374382611, + -0.000428535150591602,-0.0206419527529245,0.602416025720055,-0.496895559582551, + -0.000440847276595879,-0.0202740697836483,0.620597356198125,-0.513776744782491, + -0.000453159402601044,-0.0199061868143735,0.638778686676196,-0.530657929982432, + -0.000465471528605543,-0.0195383038450974,0.656960017154267,-0.547539115182373, + -0.000163560643764105,-0.026760430442765,0.218505891058895,-0.145455363009714, + -0.000175075641198785,-0.026344239466899,0.236310613971572,-0.162688877933575, + -0.00018659063863341,-0.0259280484910333,0.254115336884249,-0.179922392857436, + -0.00019810563606798,-0.0255118575151669,0.271920059796926,-0.197155907781297, + -0.00020962063350255,-0.025095666539301,0.289724782709604,-0.214389422705158, + -0.000221135630937397,-0.0246794755634354,0.30752950562228,-0.231622937629019, + -0.000232650628371578,-0.024263284587569,0.325334228534958,-0.248856452552881, + -0.000244165625806148,-0.0238470936117028,0.343138951447635,-0.266089967476742, + -0.000255680623240828,-0.023430902635837,0.360943674360312,-0.283323482400603, + -0.000267195620675342,-0.0230147116599706,0.37874839727299,-0.300556997324464, + -0.000278710618110023,-0.0225985206841048,0.396553120185666,-0.317790512248325, + -0.000290225615544482,-0.0221823297082386,0.414357843098344,-0.335024027172186, + -0.000301740612979273,-0.0217661387323729,0.432162566011021,-0.352257542096047, + -0.000313255610413621,-0.0213499477565064,0.449967288923698,-0.369491057019908, + -0.00032477060784819,-0.0209337567806405,0.467772011836375,-0.386724571943769, + -0.000336285605282982,-0.0205175658047749,0.485576734749052,-0.40395808686763, + -0.000347800602717663,-0.0201013748289094,0.503381457661729,-0.421191601791491, + -0.000359315600152232,-0.019685183853043,0.521186180574406,-0.438425116715352, + -0.00037083059758658,-0.0192689928771768,0.538990903487083,-0.455658631639213, + -0.000382345595021372,-0.0188528019013103,0.556795626399761,-0.472892146563074, + -0.000393860592456052,-0.0184366109254448,0.574600349312438,-0.490125661486936, + -0.000405375589889956,-0.0180204199495781,0.592405072225115,-0.507359176410797, + -0.000416890587324747,-0.0176042289737124,0.610209795137792,-0.524592691334657, + -0.000428405584759317,-0.0171880379978462,0.62801451805047,-0.541826206258519, + -0.000439920582194331,-0.0167718470219809,0.645819240963146,-0.55905972118238, + -0.000155303464255907,-0.0248069936288694,0.215745010319136,-0.149300356239133, + -0.000165827440043398,-0.0243382219842224,0.233063045746992,-0.166975907467563, + -0.000176351415830944,-0.0238694503395758,0.250381081174847,-0.184651458695993, + -0.000186875391618713,-0.0234006786949291,0.267699116602703,-0.202327009924424, + -0.000197399367406148,-0.0229319070502826,0.285017152030558,-0.220002561152854, + -0.000207923343193583,-0.0224631354056357,0.302335187458413,-0.237678112381285, + -0.000218447318981296,-0.021994363760989,0.319653222886269,-0.255353663609715, + -0.000228971294768954,-0.0215255921163426,0.336971258314124,-0.273029214838146, + -0.000239495270556667,-0.0210568204716959,0.35428929374198,-0.290704766066576, + -0.000250019246343824,-0.0205880488270487,0.371607329169835,-0.308380317295006, + -0.000260543222131537,-0.0201192771824024,0.38892536459769,-0.326055868523437, + -0.000271067197919028,-0.0196505055377556,0.406243400025546,-0.343731419751867, + -0.00028159117370663,-0.0191817338931091,0.423561435453401,-0.361406970980298, + -0.000292115149494343,-0.0187129622484625,0.440879470881257,-0.379082522208728, + -0.000302639125281945,-0.018244190603816,0.458197506309112,-0.396758073437158, + -0.000313163101069325,-0.017775418959169,0.475515541736967,-0.414433624665589, + -0.00032368707685726,-0.0173066473145227,0.492833577164823,-0.432109175894019, + -0.000334211052644418,-0.0168378756698753,0.510151612592678,-0.44978472712245, + -0.000344735028431797,-0.0163691040252287,0.527469648020533,-0.46746027835088, + -0.000355259004219399,-0.0159003323805817,0.544787683448389,-0.485135829579311, + -0.000365782980007445,-0.0154315607359363,0.562105718876244,-0.502811380807741, + -0.000376306955794714,-0.0149627890912889,0.5794237543041,-0.520486932036171, + -0.000386830931582427,-0.0144940174466424,0.596741789731955,-0.538162483264601, + -0.000397354907369474,-0.0140252458019949,0.614059825159811,-0.555838034493032, + -0.000407878883157298,-0.0135564741573484,0.631377860587666,-0.573513585721463, + -0.000144990681892998,-0.022532879574928,0.212212649733898,-0.153963066158947, + -0.000154330511624501,-0.0220124161465299,0.228919303189943,-0.172174661780502, + -0.000163670341356059,-0.0214919527181319,0.245625956645989,-0.190386257402058, + -0.000173010171087895,-0.0209714892897342,0.262332610102034,-0.208597853023613, + -0.000182350000819287,-0.0204510258613363,0.279039263558079,-0.226809448645169, + -0.000191689830550901,-0.0199305624329382,0.295745917014124,-0.245021044266724, + -0.00020102966028257,-0.0194100990045405,0.31245257047017,-0.26323263988828, + -0.000210369490014406,-0.0188896355761425,0.329159223926215,-0.281444235509835, + -0.000219709319745798,-0.0183691721477446,0.34586587738226,-0.299655831131391, + -0.000229049149477745,-0.0178487087193469,0.362572530838305,-0.317867426752946, + -0.00023838897920947,-0.0173282452909491,0.379279184294351,-0.336079022374502, + -0.000247728808940972,-0.0168077818625512,0.395985837750396,-0.354290617996057, + -0.000257068638672475,-0.0162873184341532,0.412692491206441,-0.372502213617613, + -0.000266408468403867,-0.0157668550057548,0.429399144662487,-0.390713809239169, + -0.000275748298135703,-0.0152463915773573,0.446105798118532,-0.408925404860724, + -0.000285088127867317,-0.0147259281489593,0.462812451574577,-0.427137000482279, + -0.000294427957598931,-0.0142054647205616,0.479519105030622,-0.445348596103835, + -0.000303767787330766,-0.0136850012921639,0.496225758486667,-0.463560191725391, + -0.00031310761706238,-0.0131645378637661,0.512932411942712,-0.481771787346946, + -0.000322447446793994,-0.012644074435368,0.529639065398758,-0.499983382968502, + -0.000331787276525164,-0.0121236110069698,0.546345718854803,-0.518194978590057, + -0.000341127106256889,-0.0116031475785721,0.563052372310848,-0.536406574211612, + -0.000350466935988725,-0.0110826841501743,0.579759025766893,-0.554618169833168, + -0.000359806765720672,-0.0105622207217766,0.596465679222939,-0.572829765454724, + -0.000369146595452174,-0.0100417572933784,0.613172332678984,-0.591041361076279, + -0.00013258055994525,-0.020018509793014,0.20784707051382,-0.159389803808523, + -0.000140574176482944,-0.0194546836470862,0.223812913552605,-0.178225279607066, + -0.00014856779302036,-0.0188908575011577,0.239778756591391,-0.197060755405609, + -0.000156561409557943,-0.0183270313552296,0.255744599630176,-0.215896231204152, + -0.000164555026095636,-0.0177632052093015,0.271710442668962,-0.234731707002696, + -0.000172548642633163,-0.0171993790633733,0.287676285707748,-0.253567182801239, + -0.000180542259170413,-0.0166355529174447,0.303642128746534,-0.272402658599782, + -0.00018853587570844,-0.0160717267715171,0.319607971785319,-0.291238134398325, + -0.000196529492245856,-0.0155079006255887,0.335573814824105,-0.310073610196868, + -0.000204523108783827,-0.0149440744796612,0.35153965786289,-0.328909085995412, + -0.000212516725320744,-0.0143802483337321,0.367505500901676,-0.347744561793955, + -0.00022051034185866,-0.0138164221878043,0.383471343940462,-0.366580037592498, + -0.000228503958396353,-0.0132525960418759,0.399437186979248,-0.385415513391041, + -0.000236497574933825,-0.0126887698959479,0.415403030018034,-0.404250989189584, + -0.000244491191471297,-0.0121249437500197,0.431368873056819,-0.423086464988127, + -0.000252484808008546,-0.0115611176040911,0.447334716095605,-0.44192194078667, + -0.000260478424546906,-0.0109972914581642,0.46330055913439,-0.460757416585214, + -0.000268472041083934,-0.0104334653122353,0.479266402173176,-0.479592892383757, + -0.000276465657621405,-0.00986963916630645,0.495232245211962,-0.4984283681823, + -0.000284459274158988,-0.00930581302037803,0.511198088250748,-0.517263843980843, + -0.000292452890696904,-0.00874198687445071,0.527163931289533,-0.536099319779386, + -0.000300446507234264,-0.00817816072852251,0.543129774328319,-0.554934795577929, + -0.000308440123772069,-0.00761433458259431,0.559095617367105,-0.573770271376472, + -0.000316433740308875,-0.00705050843666521,0.575061460405891,-0.592605747175016, + -0.000324427356847345,-0.00648668229073834,0.591027303444676,-0.611441222973559, + -0.000118305920004058,-0.0173972325122059,0.202682264387483,-0.165411819387931, + -0.000124858604172773,-0.0168066339551569,0.217789206015731,-0.184939610973252, + -0.00013141128834121,-0.0162160353981077,0.232896147643979,-0.204467402558573, + -0.000137963972509647,-0.0156254368410583,0.248003089272226,-0.223995194143894, + -0.000144516656678251,-0.0150348382840091,0.263110030900474,-0.243522985729215, + -0.000151069340846799,-0.0144442397269602,0.278216972528722,-0.263050777314536, + -0.000157622025015458,-0.0138536411699113,0.293323914156969,-0.282578568899857, + -0.000164174709183951,-0.0132630426128617,0.308430855785217,-0.302106360485178, + -0.00017072739335261,-0.0126724440558126,0.323537797413465,-0.321634152070499, + -0.000177280077521158,-0.0120818454987637,0.338644739041713,-0.34116194365582, + -0.000183832761689873,-0.0114912469417148,0.35375168066996,-0.360689735241141, + -0.000190385445858254,-0.0109006483846652,0.368858622298208,-0.380217526826462, + -0.000196938130026636,-0.0103100498276161,0.383965563926456,-0.399745318411784, + -0.00020349081419524,-0.00971945127056695,0.399072505554704,-0.419273109997105, + -0.000210043498363843,-0.00912885271351782,0.414179447182951,-0.438800901582426, + -0.000216596182532669,-0.00853825415646892,0.429286388811199,-0.458328693167747, + -0.000223148866701162,-0.00794765559941979,0.444393330439447,-0.477856484753068, + -0.000229701550869876,-0.00735705704237066,0.459500272067695,-0.497384276338389, + -0.000236254235038147,-0.00676645848532109,0.474607213695942,-0.51691206792371, + -0.000242806919206418,-0.00617585992827152,0.48971415532419,-0.536439859509031, + -0.000249359603375243,-0.00558526137122239,0.504821096952438,-0.555967651094352, + -0.000255912287543847,-0.00499466281417371,0.519928038580686,-0.575495442679673, + -0.000262464971712006,-0.00440406425712414,0.535034980208933,-0.595023234264994, + -0.000269017655880943,-0.0038134657000759,0.550141921837181,-0.614551025850316, + -0.000275570340049325,-0.00322286714302589,0.565248863465429,-0.634078817435636, + -0.000102721984339249,-0.0148324973710203,0.196881300534295,-0.171751042899428, + -0.00010783666674502,-0.0142382113384385,0.211042239576902,-0.192007617805724, + -0.000112951349151125,-0.0136439253058569,0.225203178619509,-0.21226419271202, + -0.000118066031557229,-0.0130496392732753,0.239364117662116,-0.232520767618316, + -0.000123180713963111,-0.0124553532406937,0.253525056704723,-0.252777342524612, + -0.000128295396369438,-0.0118610672081121,0.26768599574733,-0.273033917430908, + -0.000133410078774987,-0.0112667811755298,0.281846934789937,-0.293290492337204, + -0.000138524761181258,-0.0106724951429484,0.296007873832544,-0.3135470672435, + -0.000143639443587362,-0.0100782091103671,0.310168812875151,-0.333803642149796, + -0.000148754125993356,-0.00948392307778523,0.324329751917758,-0.354060217056092, + -0.00015386880839896,-0.00888963704520296,0.338490690960366,-0.374316791962388, + -0.000158983490805009,-0.00829535101262158,0.352651630002973,-0.394573366868684, + -0.000164098173211502,-0.00770106498004042,0.366812569045579,-0.41482994177498, + -0.000169212855617218,-0.00710677894745815,0.380973508088187,-0.435086516681276, + -0.000174327538023045,-0.00651249291487654,0.395134447130794,-0.455343091587571, + -0.000179442220429316,-0.00591820688229516,0.409295386173401,-0.475599666493867, + -0.00018455690283492,-0.00532392084971289,0.423456325216008,-0.495856241400163, + -0.000189671585241191,-0.00472963481713107,0.437617264258615,-0.516112816306459, + -0.000194786267647018,-0.00413534878454991,0.451778203301222,-0.536369391212755, + -0.000199900950052845,-0.00354106275196786,0.465939142343829,-0.556625966119051, + -0.000205015632458894,-0.0029467767193867,0.480100081386436,-0.576882541025347, + -0.00021013031486472,-0.00235249068680465,0.494261020429043,-0.597139115931643, + -0.000215244997271546,-0.00175820465422349,0.50842195947165,-0.617395690837939, + -0.000220359679677706,-0.00116391862164189,0.522582898514258,-0.637652265744235, + -0.000225474362083755,-0.000569632589060731,0.536743837556864,-0.657908840650531, + -8.6652485557559e-05,-0.0124793789045492,0.190733029769109,-0.178064213728622, + -9.04392157989875e-05,-0.0119066285146803,0.203909185421869,-0.199046576831916, + -9.42259460405825e-05,-0.0113338781248116,0.217085341074628,-0.220028939935211, + -9.80126762819555e-05,-0.0107611277349426,0.230261496727388,-0.241011303038506, + -0.000101799406523106,-0.0101883773450735,0.243437652380147,-0.2619936661418, + -0.000105586136764757,-0.00961562695520479,0.256613808032907,-0.282976029245095, + -0.000109372867006075,-0.00904287656533564,0.269789963685667,-0.30395839234839, + -0.000113159597247336,-0.00847012617546672,0.282966119338427,-0.324940755451684, + -0.000116946327488932,-0.00789737578559802,0.296142274991186,-0.345923118554979, + -0.000120733057730193,-0.00732462539572887,0.309318430643946,-0.366905481658273, + -0.000124519787971455,-0.00675187500585972,0.322494586296706,-0.387887844761568, + -0.000128306518213162,-0.00617912461599124,0.335670741949465,-0.408870207864863, + -0.000132093248454535,-0.00560637422612231,0.348846897602225,-0.429852570968157, + -0.000135879978695352,-0.0050336238362525,0.362023053254985,-0.450834934071452, + -0.000139666708937169,-0.00446087344638424,0.375199208907744,-0.471817297174747, + -0.000143453439178653,-0.00388812305651554,0.388375364560504,-0.492799660278041, + -0.000147240169419693,-0.00331537266664594,0.401551520213264,-0.513782023381336, + -0.000151026899661177,-0.00274262227677746,0.414727675866023,-0.53476438648463, + -0.000154813629902661,-0.00216987188690831,0.427903831518783,-0.555746749587925, + -0.000158600360144145,-0.00159712149703939,0.441079987171543,-0.57672911269122, + -0.000162387090385629,-0.00102437110717046,0.454256142824303,-0.597711475794514, + -0.000166173820627558,-0.00045162071730287,0.467432298477061,-0.618693838897809, + -0.000169960550867931,0.000121129672567832,0.480608454129822,-0.639676202001103, + -0.000173747281108749,0.000693880062437202,0.493784609782582,-0.660658565104398, + -0.000177534011350899,0.00126663045230568,0.506960765435341,-0.681640928207693, + -7.1027321613959e-05,-0.0104478336416512,0.184600051096082,-0.184013605863442, + -7.36838230560588e-05,-0.009918610326345,0.196809197647762,-0.205679935662332, + -7.63403244982697e-05,-0.0093893870110392,0.209018344199441,-0.227346265461221, + -7.8996825940203e-05,-0.00886016369573273,0.221227490751121,-0.249012595260111, + -8.16533273819142e-05,-0.00833094038042614,0.233436637302801,-0.270678925059, + -8.43098288239585e-05,-0.0078017170651199,0.245645783854481,-0.29234525485789, + -8.6966330266558e-05,-0.00727249374981431,0.257854930406161,-0.31401158465678, + -8.96228317078807e-05,-0.00674327043450718,0.270064076957841,-0.335677914455669, + -9.2279333150036e-05,-0.00621404711920093,0.282273223509521,-0.357344244254559, + -9.49358345924134e-05,-0.00568482380389512,0.294482370061201,-0.379010574053448, + -9.75923360340136e-05,-0.00515560048858865,0.306691516612881,-0.400676903852338, + -0.000100248837476169,-0.00462637717328218,0.318900663164561,-0.422343233651227, + -0.000102905338917991,-0.00409715385797549,0.331109809716241,-0.444009563450116, + -0.000105561840360369,-0.00356793054267013,0.343318956267921,-0.465675893249006, + -0.000108218341802191,-0.00303870722736388,0.355528102819601,-0.487342223047896, + -0.000110874843244013,-0.00250948391205696,0.367737249371281,-0.509008552846785, + -0.000113531344686169,-0.00198026059675094,0.379946395922961,-0.530674882645675, + -0.00011618784612788,-0.00145103728144425,0.392155542474641,-0.552341212444564, + -0.000118844347570035,-0.000921813966138441,0.404364689026321,-0.574007542243454, + -0.00012150084901219,-0.00039259065083197,0.416573835578001,-0.595673872042343, + -0.000124157350454346,0.000136632664474057,0.428782982129681,-0.617340201841233, + -0.000126813851896501,0.000665855979780083,0.440992128681361,-0.639006531640122, + -0.000129470353338546,0.00119507929508611,0.45320127523304,-0.660672861439012, + -0.000132126854780035,0.00172430261039347,0.465410421784721,-0.682339191237901, + -0.000134783356221746,0.00225352592569994,0.477619568336401,-0.704005521036791, + -5.66735923779316e-05,-0.00878523326279179,0.178835327103749,-0.189335398970885, + -5.84432627911413e-05,-0.00831420363354363,0.190147432215679,-0.211613544088693, + -6.02129332041845e-05,-0.00784317400429546,0.20145953732761,-0.233891689206501, + -6.19826036174498e-05,-0.0073721443750473,0.21277164243954,-0.256169834324309, + -6.37522740309926e-05,-0.0069011147457998,0.224083747551471,-0.278447979442117, + -6.55219444437027e-05,-0.00643008511655085,0.235395852663401,-0.300726124559925, + -6.72916148570235e-05,-0.00595905548730302,0.246707957775332,-0.323004269677733, + -6.90612852701222e-05,-0.00548802585805497,0.258020062887262,-0.345282414795541, + -7.08309556830544e-05,-0.00501699622880669,0.269332167999193,-0.36756055991335, + -7.26006260964862e-05,-0.00454596659955864,0.280644273111123,-0.389838705031157, + -7.43702965095849e-05,-0.00407493697031036,0.291956378223054,-0.412116850148966, + -7.61399669229057e-05,-0.00360390734106253,0.303268483334984,-0.434394995266774, + -7.79096373356714e-05,-0.00313287771181425,0.314580588446915,-0.456673140384582, + -7.96793077489921e-05,-0.00266184808256598,0.325892693558846,-0.47895128550239, + -8.14489781622019e-05,-0.00219081845331792,0.337204798670776,-0.501229430620198, + -8.32186485754116e-05,-0.00171978882406987,0.348516903782706,-0.523507575738006, + -8.49883189885103e-05,-0.00124875919482181,0.359829008894637,-0.545785720855814, + -8.67579894016091e-05,-0.000777729565573537,0.371141114006567,-0.568063865973622, + -8.85276598142637e-05,-0.000306699936324595,0.382453219118498,-0.590342011091431, + -9.02973302275845e-05,0.000164329692923015,0.393765324230428,-0.612620156209239, + -9.20670006414603e-05,0.000635359322170626,0.405077429342359,-0.634898301327047, + -9.3836671054115e-05,0.00110638895141912,0.416389534454289,-0.657176446444855, + -9.56063414672137e-05,0.00157741858066762,0.42770163956622,-0.679454591562663, + -9.73760118809786e-05,0.00204844820991434,0.43901374467815,-0.701732736680471, + -9.91456822939663e-05,0.00251947783916284,0.450325849790081,-0.724010881798279, + -4.41544366463487e-05,-0.00748260075409668,0.173706046862735,-0.193878339384689, + -4.52796283268442e-05,-0.00707573890148239,0.184228454668077,-0.216678759698467, + -4.64048200072842e-05,-0.00666887704886809,0.194750862473419,-0.239479180012245, + -4.75300116875021e-05,-0.00626201519625336,0.205273270278762,-0.262279600326023, + -4.86552033679977e-05,-0.00585515334363906,0.215795678084104,-0.2850800206398, + -4.97803950484377e-05,-0.00544829149102477,0.226318085889447,-0.307880440953578, + -5.09055867286556e-05,-0.00504142963841026,0.236840493694789,-0.330680861267356, + -5.20307784092622e-05,-0.00463456778579618,0.247362901500131,-0.353481281581134, + -5.31559700895357e-05,-0.00422770593318145,0.257885309305474,-0.376281701894912, + -5.42811617703087e-05,-0.0038208440805676,0.268407717110816,-0.39908212220869, + -5.54063534504712e-05,-0.00341398222795308,0.278930124916158,-0.421882542522468, + -5.65315451309667e-05,-0.00300712037533857,0.289452532721501,-0.444682962836246, + -5.76567368110181e-05,-0.00260025852272383,0.299974940526843,-0.467483383150023, + -5.87819284917357e-05,-0.00219339667010998,0.310497348332185,-0.490283803463801, + -5.99071201718981e-05,-0.00178653481749524,0.321019756137528,-0.513084223777579, + -6.10323118526157e-05,-0.00137967296488095,0.33154216394287,-0.535884644091357, + -6.21575035328892e-05,-0.00097281111226688,0.342064571748212,-0.558685064405135, + -6.32826952133847e-05,-0.000565949259652143,0.352586979553555,-0.581485484718913, + -6.44078868934361e-05,-0.000159087407037628,0.363109387358897,-0.604285905032691, + -6.55330785739316e-05,0.000247774445576887,0.37363179516424,-0.627086325346468, + -6.66582702544272e-05,0.000654636298190958,0.384154202969582,-0.649886745660246, + -6.77834619342566e-05,0.00106149815080636,0.394676610774924,-0.672687165974024, + -6.89086536156402e-05,0.0014683600034191,0.405199018580266,-0.695487586287802, + -7.00338452958027e-05,0.00187522185603362,0.415721426385608,-0.71828800660158, + -7.11590369755211e-05,0.00228208370864946,0.426243834190951,-0.741088426915357, + -3.37148869941073e-05,-0.00649508245527053,0.16935618944763,-0.197604168756539, + -3.44027460754681e-05,-0.00615086794371156,0.17921448092606,-0.220832925805578, + -3.50906051568844e-05,-0.00580665343215259,0.18907277240449,-0.244061682854617, + -3.57784642380787e-05,-0.0054624389205935,0.19893106388292,-0.267290439903655, + -3.64663233196061e-05,-0.00511822440903487,0.208789355361349,-0.290519196952694, + -3.71541824009669e-05,-0.00477400989747623,0.218647646839779,-0.313747954001732, + -3.78420414818836e-05,-0.0044297953859167,0.228505938318209,-0.336976711050771, + -3.8529900563522e-05,-0.00408558087435806,0.238364229796639,-0.360205468099809, + -3.92177596448828e-05,-0.0037413663627992,0.248222521275069,-0.383434225148848, + -3.99056187261326e-05,-0.00339715185124034,0.258080812753498,-0.406662982197887, + -4.05934778077155e-05,-0.0030529373396817,0.267939104231928,-0.429891739246925, + -4.12813368889653e-05,-0.00270872282812262,0.277797395710358,-0.453120496295964, + -4.19691959701041e-05,-0.00236450831656332,0.287655687188788,-0.476349253345002, + -4.26570550516869e-05,-0.0020202938050049,0.297513978667218,-0.499578010394041, + -4.33449141328257e-05,-0.00167607929344604,0.307372270145647,-0.522806767443079, + -4.40327732141865e-05,-0.00133186478188674,0.317230561624077,-0.546035524492118, + -4.47206322956584e-05,-0.0009876502703281,0.327088853102507,-0.569264281541157, + -4.54084913775743e-05,-0.000643435758770572,0.336947144580936,-0.592493038590195, + -4.609635045838e-05,-0.000299221247210379,0.346805436059367,-0.615721795639234, + -4.67842095400739e-05,4.49932643480366e-05,0.356663727537796,-0.638950552688272, + -4.74720686211016e-05,0.000389207775907341,0.366522019016226,-0.662179309737311, + -4.81599277020184e-05,0.000733422287467089,0.376380310494657,-0.685408066786349, + -4.88477867841564e-05,0.00107763679902462,0.386238601973086,-0.708636823835388, + -4.95356458651841e-05,0.00142185131058392,0.396096893451516,-0.731865580884426, + -5.02235049457678e-05,0.00176606582214411,0.405955184929946,-0.755094337933465, + -2.53269074744766e-05,-0.00576359696272943,0.165812589859222,-0.200560773090004, + -2.57347397882857e-05,-0.00547555331318617,0.175133322754538,-0.224129433586372, + -2.61425721022057e-05,-0.00518750966364323,0.184454055649854,-0.24769809408274, + -2.65504044159037e-05,-0.00489946601409996,0.193774788545169,-0.271266754579109, + -2.69582367299903e-05,-0.00461142236455747,0.203095521440484,-0.294835415075477, + -2.73660690439659e-05,-0.00432337871501431,0.2124162543358,-0.318404075571845, + -2.77739013578859e-05,-0.00403533506547138,0.221736987231115,-0.341972736068213, + -2.81817336717505e-05,-0.00374729141592822,0.231057720126431,-0.365541396564581, + -2.8589565985282e-05,-0.00345924776638462,0.240378453021747,-0.38911005706095, + -2.8997398299202e-05,-0.00317120411684213,0.249699185917062,-0.412678717557318, + -2.94052306132331e-05,-0.00288316046729875,0.259019918812378,-0.436247378053686, + -2.98130629272642e-05,-0.00259511681775582,0.268340651707693,-0.459816038550054, + -3.02208952411842e-05,-0.0023070731682131,0.277661384603008,-0.483384699046422, + -3.06287275551043e-05,-0.00201902951867039,0.286982117498324,-0.506953359542791, + -3.10365598688023e-05,-0.00173098586912679,0.29630285039364,-0.530522020039159, + -3.14443921828333e-05,-0.00144294221958408,0.305623583288955,-0.554090680535527, + -3.18522244966424e-05,-0.0011548985700407,0.314944316184271,-0.577659341031895, + -3.22600568100073e-05,-0.000866854920496873,0.324265049079587,-0.601228001528264, + -3.26678891243715e-05,-0.000578811270954827,0.333585781974902,-0.624796662024632, + -3.30757214377364e-05,-0.000290767621410559,0.342906514870218,-0.648365322521, + -3.34835537521005e-05,-2.72397186851236e-06,0.352227247765533,-0.671933983017368, + -3.38913860662426e-05,0.000285319677674423,0.361547980660848,-0.695502643513736, + -3.42992183800517e-05,0.000573363327217802,0.370868713556164,-0.719071304010104, + -3.47070506944158e-05,0.000861406976759849,0.380189446451479,-0.742639964506473, + -3.51148830076697e-05,0.00114945062630367,0.389510179346795,-0.766208625002841, + -1.8783850970705e-05,-0.0052299450629808,0.163017770292857,-0.202846187453344, + -1.90205372084806e-05,-0.004989251250889,0.171916578229367,-0.226677588625522, + -1.92572234464228e-05,-0.00474855743879754,0.180815386165876,-0.2505089897977, + -1.94939096846425e-05,-0.00450786362670641,0.189714194102386,-0.274340390969877, + -1.97305959224181e-05,-0.00426716981461484,0.198613002038896,-0.298171792142055, + -1.99672821603603e-05,-0.00402647600252304,0.207511809975406,-0.322003193314233, + -2.02039683986355e-05,-0.00378578219043213,0.216410617911916,-0.345834594486411, + -2.04406546364666e-05,-0.00354508837834056,0.225309425848426,-0.369665995658589, + -2.06773408743532e-05,-0.0033043945662492,0.234208233784935,-0.393497396830766, + -2.0914027112573e-05,-0.00306370075415785,0.243107041721445,-0.417328798002944, + -2.1150713350182e-05,-0.00282300694206561,0.252005849657956,-0.441160199175122, + -2.13873995880132e-05,-0.00258231312997403,0.260904657594466,-0.464991600347299, + -2.16240858261774e-05,-0.0023416193178829,0.269803465530975,-0.488823001519477, + -2.18607720640085e-05,-0.00210092550579133,0.278702273467485,-0.512654402691655, + -2.20974583020617e-05,-0.0018602316937002,0.287601081403995,-0.536485803863833, + -2.23341445404479e-05,-0.00161953788160907,0.296499889340505,-0.560317205036011, + -2.2570830778279e-05,-0.00137884406951772,0.305398697277014,-0.584148606208188, + -2.28075170155551e-05,-0.00113815025742525,0.314297505213525,-0.607980007380366, + -2.30442032542744e-05,-0.000897456445334566,0.323196313150035,-0.631811408552544, + -2.32808894922165e-05,-0.000656762633243435,0.332095121086544,-0.655642809724722, + -2.35175757300476e-05,-0.000416068821151416,0.340993929023054,-0.6794742108969, + -2.37542619677678e-05,-0.000175375009059398,0.349892736959565,-0.703305612069077, + -2.39909482064871e-05,6.5318803031289e-05,0.358791544896074,-0.727137013241255, + -2.42276344442072e-05,0.000306012615122864,0.367690352832584,-0.750968414413433, + -2.44643206812611e-05,0.000546706427215771,0.376589160769095,-0.774799815585611, + -1.37954632438153e-05,-0.00484425669981303,0.160868623283244,-0.204577197891451, + -1.39311530069075e-05,-0.00464171414675896,0.16944414443389,-0.228607603174059, + -1.40668427697221e-05,-0.00443917159370444,0.178019665584536,-0.252638008456667, + -1.42025325325368e-05,-0.00423662904064992,0.186595186735182,-0.276668413739276, + -1.4338222295518e-05,-0.00403408648759562,0.195170707885828,-0.300698819021884, + -1.44739120585546e-05,-0.00383154393454155,0.203746229036474,-0.324729224304492, + -1.46096018212027e-05,-0.00362900138148681,0.21232175018712,-0.3487596295871, + -1.47452915842394e-05,-0.00342645882843251,0.220897271337766,-0.372790034869709, + -1.48809813473871e-05,-0.00322391627537866,0.229472792488412,-0.396820440152317, + -1.50166711101463e-05,-0.00302137372232392,0.238048313639058,-0.420850845434925, + -1.51523608730164e-05,-0.00281883116926962,0.246623834789704,-0.444881250717534, + -1.52880506358866e-05,-0.00261628861621532,0.25519935594035,-0.468911656000142, + -1.54237403990898e-05,-0.00241374606316125,0.263774877090996,-0.49294206128275, + -1.55594301614048e-05,-0.00221120351010584,0.272350398241642,-0.516972466565358, + -1.56951199247191e-05,-0.00200866095705243,0.280925919392287,-0.541002871847967, + -1.58308096877002e-05,-0.00180611840399814,0.289501440542933,-0.565033277130575, + -1.59664994504594e-05,-0.0016035758509434,0.298076961693579,-0.589063682413183, + -1.61021892132185e-05,-0.00140103329788888,0.306652482844225,-0.613094087695792, + -1.62378789767548e-05,-0.00119849074483547,0.315228003994871,-0.6371244929784, + -1.63735687394029e-05,-0.000995948191780283,0.323803525145518,-0.661154898261008, + -1.650925850194e-05,-0.000793405638725986,0.332379046296163,-0.685185303543616, + -1.66449482655873e-05,-0.000590863085672577,0.340954567446809,-0.709215708826225, + -1.67806380280133e-05,-0.00038832053261828,0.349530088597454,-0.733246114108833, + -1.69163277909945e-05,-0.000185777979562651,0.358105609748101,-0.757276519391441, + -1.70520175530875e-05,1.67645734920896e-05,0.366681130898747,-0.78130692467405, + -1.00576699147426e-05,-0.00456702303964351,0.159247652011238,-0.205868193197421, + -1.0135185701865e-05,-0.00439422047996585,0.167579980382908,-0.230047016633253, + -1.0212701489265e-05,-0.00422141792028874,0.175912308754578,-0.254225840069085, + -1.02902172761654e-05,-0.00404861536061096,0.184244637126249,-0.278404663504917, + -1.03677330632324e-05,-0.00387581280093308,0.192576965497919,-0.302583486940748, + -1.04452488506879e-05,-0.00370301024125586,0.20090929386959,-0.32676231037658, + -1.05227646374773e-05,-0.00353020768157797,0.20924162224126,-0.350941133812412, + -1.06002804247662e-05,-0.00335740512190075,0.21757395061293,-0.375119957248244, + -1.06777962113336e-05,-0.00318460256222242,0.225906278984601,-0.399298780684076, + -1.07553119989001e-05,-0.0030118000025452,0.234238607356271,-0.423477604119908, + -1.08328277860226e-05,-0.00283899744286753,0.242570935727942,-0.447656427555739, + -1.09103435724789e-05,-0.0026661948831892,0.250903264099612,-0.471835250991571, + -1.09878593598234e-05,-0.0024933923235122,0.259235592471282,-0.496014074427403, + -1.10653751469458e-05,-0.00232058976383476,0.267567920842952,-0.520192897863235, + -1.11428909340683e-05,-0.00214778720415709,0.275900249214623,-0.544371721299067, + -1.12204067215238e-05,-0.00197498464447943,0.284232577586293,-0.568550544734899, + -1.12979225077581e-05,-0.00180218208480132,0.292564905957964,-0.592729368170731, + -1.13754382948805e-05,-0.00162937952512321,0.300897234329634,-0.616908191606562, + -1.14529540830022e-05,-0.0014565769654471,0.309229562701304,-0.641087015042394, + -1.15304698701246e-05,-0.00128377440576966,0.317561891072974,-0.665265838478226, + -1.1607985656692e-05,-0.00111097184609177,0.325894219444644,-0.689444661914058, + -1.16855014437034e-05,-0.000938169286413437,0.334226547816315,-0.71362348534989, + -1.17630172306038e-05,-0.000765366726735994,0.342558876187985,-0.737802308785722, + -1.18405330183924e-05,-0.000592564167059439,0.350891204559655,-0.761981132221554, + -1.19180488048487e-05,-0.000419761607380664,0.359223532931326,-0.786159955657385, + -7.29283658090774e-06,-0.00436834400669828,0.158042682794528,-0.206819971217035, + -7.33731940139037e-06,-0.00421817220059251,0.166194578572552,-0.23110821498561, + -7.38180222170648e-06,-0.00406800039448674,0.174346474350575,-0.255396458754186, + -7.42628504235565e-06,-0.00391782858838119,0.182498370128599,-0.279684702522762, + -7.47076786294931e-06,-0.00376765678227553,0.190650265906622,-0.303972946291337, + -7.51525068343195e-06,-0.00361748497616965,0.198802161684646,-0.328261190059913, + -7.55973350391459e-06,-0.00346731317006421,0.206954057462669,-0.352549433828488, + -7.60421632450825e-06,-0.00331714136395855,0.215105953240692,-0.376837677597064, + -7.64869914465782e-06,-0.00316696955785201,0.223257849018716,-0.401125921365639, + -7.69318196547353e-06,-0.00301679775174679,0.23140974479674,-0.425414165134215, + -7.7376647861227e-06,-0.00286662594564135,0.239561640574763,-0.449702408902791, + -7.78214760666085e-06,-0.0027164541395357,0.247713536352787,-0.473990652671366, + -7.82663042686593e-06,-0.00256628233342915,0.255865432130811,-0.498278896439942, + -7.8711132475151e-06,-0.00241611052732416,0.264017327908834,-0.522567140208517, + -7.91559606772019e-06,-0.00226593872121783,0.272169223686857,-0.546855383977093, + -7.96007888870243e-06,-0.00211576691511306,0.28032111946488,-0.571143627745669, + -8.00456170868546e-06,-0.00196559510900607,0.288473015242905,-0.595431871514244, + -8.04904452911259e-06,-0.00181542330290041,0.296624911020928,-0.61972011528282, + -8.09352734987279e-06,-0.00166525149679497,0.304776806798951,-0.644008359051395, + -8.13801017041094e-06,-0.00151507969068909,0.312928702576975,-0.668296602819971, + -8.18249299028295e-06,-0.00136490788458277,0.321080598354999,-0.692584846588546, + -8.22697581137621e-06,-0.00121473607847777,0.329232494133022,-0.716873090357122, + -8.27145863191436e-06,-0.00106456427237234,0.337384389911045,-0.741161334125698, + -8.3159414518974e-06,-0.000914392466265568,0.345536285689069,-0.765449577894273, + -8.36042427254657e-06,-0.000764220660160575,0.353688181467092,-0.789737821662849, + -5.26701267977714e-06,-0.00422618296398847,0.157156541514628,-0.207515707361147, + -5.29283753597509e-06,-0.0040929330193602,0.165175931345386,-0.2318839358308, + -5.31866239233958e-06,-0.00395968307473227,0.173195321176145,-0.256252164300453, + -5.34448724853753e-06,-0.00382643313010433,0.181214711006903,-0.280620392770105, + -5.370312104791e-06,-0.00369318318547585,0.189234100837662,-0.304988621239758, + -5.39613696126651e-06,-0.00355993324084802,0.19725349066842,-0.329356849709411, + -5.42196181751997e-06,-0.0034266832962202,0.205272880499178,-0.353725078179063, + -5.44778667382895e-06,-0.00329343335159193,0.213292270329937,-0.378093306648716, + -5.4736115300269e-06,-0.00316018340696389,0.221311660160695,-0.402461535118369, + -5.49943638605832e-06,-0.0030269334623354,0.229331049991454,-0.426829763588022, + -5.52526124297792e-06,-0.00289368351770847,0.237350439822212,-0.451197992057674, + -5.55108609923138e-06,-0.00276043357307998,0.24536982965297,-0.475566220527327, + -5.57691095515178e-06,-0.00262718362845171,0.253389219483729,-0.49993444899698, + -5.60273581151627e-06,-0.00249393368382322,0.261408609314488,-0.524302677466633, + -5.62856066776973e-06,-0.00236068373919562,0.269427999145246,-0.548670905936285, + -5.65438552424524e-06,-0.0022274337945678,0.277447388976004,-0.573039134405938, + -5.68021038060973e-06,-0.00209418384993931,0.285466778806763,-0.597407362875591, + -5.70603523697422e-06,-0.00196093390531171,0.293486168637521,-0.621775591345244, + -5.73186009300564e-06,-0.00182768396068278,0.30150555846828,-0.646143819814896, + -5.75768494948115e-06,-0.00169443401605562,0.309524948299038,-0.670512048284549, + -5.78350980573461e-06,-0.00156118407142758,0.317544338129796,-0.694880276754202, + -5.80933466187705e-06,-0.00142793412679909,0.325563727960555,-0.719248505223854, + -5.83515951835256e-06,-0.00129468418217193,0.333583117791313,-0.743616733693507, + -5.86098437460603e-06,-0.00116143423754256,0.341602507622072,-0.76798496216316, + -5.88680923063745e-06,-0.00102818429291451,0.349621897452831,-0.792353190632813, + -3.7929089066191e-06,-0.00412453948172586,0.156509992496728,-0.208021117756644, + -3.80816581302401e-06,-0.00400378321276129,0.164432800452917,-0.232447450293115, + -3.82342271937341e-06,-0.0038830269437965,0.172355608409106,-0.256873782829585, + -3.83867962588935e-06,-0.00376227067483215,0.180278416365295,-0.281300115366056, + -3.85393653240529e-06,-0.00364151440586769,0.188201224321484,-0.305726447902526, + -3.86919343864367e-06,-0.00352075813690256,0.196124032277674,-0.330152780438997, + -3.88445034538165e-06,-0.0034000018679381,0.204046840233863,-0.354579112975468, + -3.89970725139799e-06,-0.00327924559897319,0.211969648190052,-0.379005445511938, + -3.91496415808046e-06,-0.00315848933000873,0.219892456146241,-0.403431778048409, + -3.93022106437435e-06,-0.00303773306104405,0.22781526410243,-0.427858110584879, + -3.94547797077927e-06,-0.00291697679207958,0.23573807205862,-0.45228444312135, + -3.96073487718418e-06,-0.0027962205231149,0.243660880014809,-0.476710775657821, + -3.97599178414421e-06,-0.00267546425415066,0.251583687970998,-0.501137108194291, + -3.9912486904381e-06,-0.00255470798518598,0.259506495927187,-0.525563440730762, + -4.00650559684301e-06,-0.00243395171622152,0.267429303883376,-0.549989773267232, + -4.02176250324793e-06,-0.00231319544725683,0.275352111839565,-0.574416105803703, + -4.03701940987489e-06,-0.00219243917829237,0.283274919795754,-0.598842438340174, + -4.05227631583571e-06,-0.0020716829093268,0.291197727751944,-0.623268770876644, + -4.06753322268472e-06,-0.001950926640363,0.299120535708133,-0.647695103413115, + -4.08279012875656e-06,-0.00183017037139832,0.307043343664322,-0.672121435949585, + -4.09804703493943e-06,-0.00170941410243231,0.314966151620512,-0.696547768486056, + -4.11330394201048e-06,-0.0015886578334694,0.3228889595767,-0.720974101022527, + -4.12856084797131e-06,-0.00146790156450338,0.33081176753289,-0.745400433558997, + -4.14381775470929e-06,-0.00134714529553959,0.338734575489079,-0.769826766095468, + -4.15907466067011e-06,-0.00122638902657402,0.346657383445268,-0.794253098631938, + -2.72563913966684e-06,-0.0040518900022144,0.156040960067775,-0.208386606462226, + -2.73485035878762e-06,-0.00394027400304098,0.163893754584341,-0.232854957090053, + -2.74406157790841e-06,-0.00382865800386778,0.171746549100906,-0.257323307717879, + -2.7532727970847e-06,-0.0037170420046948,0.179599343617471,-0.281791658345706, + -2.76248401603896e-06,-0.00360542600552116,0.187452138134037,-0.306260008973533, + -2.77169523510423e-06,-0.00349381000634774,0.195304932650603,-0.33072835960136, + -2.78090645444706e-06,-0.00338219400717477,0.203157727167168,-0.355196710229186, + -2.79011767329029e-06,-0.00327057800800135,0.211010521683733,-0.379665060857013, + -2.79932889218903e-06,-0.00315896200882793,0.218863316200299,-0.40413341148484, + -2.80854011158738e-06,-0.00304734600965517,0.226716110716864,-0.428601762112666, + -2.81775133059714e-06,-0.00293573001048153,0.23456890523343,-0.453070112740493, + -2.8269625496069e-06,-0.00282411401130833,0.242421699749995,-0.47753846336832, + -2.83617376861667e-06,-0.00271249801213469,0.250274494266561,-0.502006813996147, + -2.84538498740439e-06,-0.00260088201296127,0.258127288783126,-0.526475164623973, + -2.85459620708028e-06,-0.00248926601378852,0.265980083299692,-0.5509435152518, + -2.863807425868e-06,-0.00237765001461465,0.273832877816258,-0.575411865879626, + -2.87301864465572e-06,-0.00226603401544168,0.281685672332822,-0.599880216507453, + -2.88222986355446e-06,-0.00215441801626781,0.289538466849388,-0.62434856713528, + -2.89144108323036e-06,-0.00204280201709528,0.297391261365954,-0.648816917763107, + -2.90065230224013e-06,-0.00193118601792186,0.305244055882519,-0.673285268390933, + -2.90986352113887e-06,-0.00181957001874844,0.313096850399085,-0.69775361901876, + -2.91907473981556e-06,-0.00170795401957413,0.320949644915651,-0.722221969646587, + -2.92828595904737e-06,-0.0015963380204016,0.328802439432216,-0.746690320274414, + -2.93749717916736e-06,-0.00148472202122951,0.336655233948781,-0.771158670902241, + -2.94670839717792e-06,-0.00137310602205476,0.344508028465347,-0.795627021530067, + -1.95571859751276e-06,-0.00399997040463507,0.155702119707913,-0.208650044438715, + -1.96141511105141e-06,-0.00389499746393041,0.163504361235841,-0.23314868098453, + -1.96711162464558e-06,-0.00379002452322552,0.17130660276377,-0.257647317530345, + -1.97280813812872e-06,-0.00368505158252086,0.179108844291697,-0.282145954076159, + -1.97850465172289e-06,-0.00358007864181609,0.186911085819626,-0.306644590621974, + -1.98420116492848e-06,-0.00347510570111109,0.194713327347554,-0.331143227167789, + -1.98989767885571e-06,-0.00337013276040632,0.202515568875482,-0.355641863713603, + -1.99559419183926e-06,-0.0032651598197011,0.21031781040341,-0.380140500259418, + -2.00129070571098e-06,-0.003160186878997,0.218120051931338,-0.404639136805233, + -2.00698721930515e-06,-0.00305521393829222,0.225922293459266,-0.429137773351047, + -2.01268373267727e-06,-0.00295024099758701,0.233724534987195,-0.453636409896862, + -2.01838024593837e-06,-0.00284526805688223,0.241526776515123,-0.478135046442677, + -2.02407675964356e-06,-0.00274029511617746,0.249329018043051,-0.502633682988492, + -2.02977327301568e-06,-0.00263532217547247,0.257131259570979,-0.527132319534306, + -2.03546978660984e-06,-0.00253034923476836,0.264933501098906,-0.551630956080121, + -2.04116629987094e-06,-0.00242537629406314,0.272735742626835,-0.576129592625935, + -2.04686281346511e-06,-0.00232040335335815,0.280537984154763,-0.60062822917175, + -2.05255932705928e-06,-0.0022154304126536,0.288340225682691,-0.625126865717565, + -2.0582558404314e-06,-0.00211045747194838,0.29614246721062,-0.64962550226338, + -2.06395235391454e-06,-0.00200548453124361,0.303944708738548,-0.674124138809194, + -2.0696488679528e-06,-0.00190051159053972,0.311746950266475,-0.698622775355009, + -2.0753453812139e-06,-0.0017955386498345,0.319549191794404,-0.723121411900824, + -2.08104189391989e-06,-0.0016905657091284,0.327351433322332,-0.747620048446638, + -2.08673840751405e-06,-0.00158559276842407,0.33515367485026,-0.772118684992453, + -2.09243492121924e-06,-0.0014806198277193,0.342955916378188,-0.796617321538268, + -1.40175146834398e-06,-0.00396286657091116,0.155458068124965,-0.208839477139238, + -1.40536158738103e-06,-0.00386269895458025,0.163223912236866,-0.233359891650814, + -1.408971706085e-06,-0.00376253133824855,0.170989756348769,-0.257880306162391, + -1.41258182501103e-06,-0.00366236372191753,0.17875560046067,-0.282400720673967, + -1.41619194360398e-06,-0.00356219610558584,0.186521444572572,-0.306921135185543, + -1.41980206286307e-06,-0.00346202848925503,0.194287288684474,-0.331441549697119, + -1.42341218123399e-06,-0.00336186087292312,0.202053132796376,-0.355961964208696, + -1.42702230027103e-06,-0.00326169325659209,0.209818976908278,-0.380482378720272, + -1.43063241914154e-06,-0.00316152564026062,0.21758482102018,-0.405002793231848, + -1.43424253751245e-06,-0.00306135802392871,0.225350665132082,-0.429523207743425, + -1.43785265682705e-06,-0.00296119040759812,0.233116509243984,-0.454043622255001, + -1.4414627753645e-06,-0.00286102279126621,0.240882353355886,-0.478564036766577, + -1.44507289445706e-06,-0.00276085517493518,0.248648197467788,-0.503084451278153, + -1.4486830129945e-06,-0.00266068755860349,0.25641404157969,-0.527604865789729, + -1.4522931323091e-06,-0.00256051994227313,0.264179885691591,-0.552125280301306, + -1.45590325040246e-06,-0.00246035232594033,0.271945729803494,-0.576645694812882, + -1.45951336982808e-06,-0.00236018470960975,0.279711573915395,-0.601166109324458, + -1.46312348858757e-06,-0.0022600170932785,0.287477418027297,-0.625686523836035, + -1.46673360712501e-06,-0.00215984947694636,0.295243262139199,-0.650206938347611, + -1.47034372599553e-06,-0.00205968186061511,0.303009106251101,-0.674727352859187, + -1.47395384475502e-06,-0.00195951424428431,0.310774950363003,-0.699247767370763, + -1.47756396406962e-06,-0.00185934662795351,0.318540794474904,-0.72376818188234, + -1.48117408294013e-06,-0.00175917901162226,0.326306638586806,-0.748288596393916, + -1.48478420181064e-06,-0.00165901139529057,0.334072482698708,-0.772809010905492, + -1.48839432012604e-06,-0.00155884377895932,0.34183832681061,-0.797329425417068, + -0.000210381738549925,-0.040452318490265,0.23976229956605,-0.128233328183071, + -0.000227178737724265,-0.0405059289058023,0.259733811745583,-0.142707906705057, + -0.000243975736898605,-0.0405595393213395,0.279705323925116,-0.157182485227043, + -0.00026077273607289,-0.0406131497368766,0.29967683610465,-0.171657063749029, + -0.000277569735247396,-0.0406667601524141,0.319648348284183,-0.186131642271016, + -0.000294366734421903,-0.0407203705679515,0.339619860463717,-0.200606220793002, + -0.000311163733596076,-0.0407739809834884,0.35959137264325,-0.215080799314988, + -0.000327960732770305,-0.0408275913990257,0.379562884822784,-0.229555377836974, + -0.000344757731944867,-0.0408812018145632,0.399534397002317,-0.24402995635896, + -0.000361554731119318,-0.0409348122301005,0.41950590918185,-0.258504534880946, + -0.000378351730293658,-0.0409884226456381,0.439477421361383,-0.272979113402932, + -0.000395148729467887,-0.0410420330611749,0.459448933540917,-0.287453691924918, + -0.000411945728642449,-0.0410956434767127,0.47942044572045,-0.301928270446904, + -0.0004287427278169,-0.04114925389225,0.499391957899984,-0.316402848968891, + -0.000445539726991018,-0.0412028643077869,0.519363470079517,-0.330877427490877, + -0.00046233672616558,-0.0412564747233242,0.539334982259051,-0.345352006012863, + -0.000479133725340142,-0.0413100851388617,0.559306494438584,-0.359826584534849, + -0.000495930724514593,-0.0413636955543994,0.579278006618117,-0.374301163056835, + -0.000512727723688267,-0.0414173059699363,0.59924951879765,-0.388775741578821, + -0.000529524722863051,-0.0414709163854734,0.619221030977185,-0.403250320100808, + -0.000546321722037391,-0.0415245268010109,0.639192543156717,-0.417724898622794, + -0.000563118721211731,-0.0415781372165478,0.659164055336251,-0.432199477144779, + -0.000579915720385737,-0.0416317476320849,0.679135567515784,-0.446674055666765, + -0.000596712719560522,-0.0416853580476224,0.699107079695318,-0.461148634188752, + -0.000613509718734195,-0.0417389684631591,0.719078591874852,-0.475623212710738, + -0.000206932482338329,-0.0392510675745538,0.238768744075897,-0.130194478901327, + -0.000223245994934507,-0.0392539673040582,0.258550278031811,-0.144883058126622, + -0.000239559507530407,-0.0392568670335623,0.278331811987725,-0.159571637351917, + -0.000255873020126418,-0.0392597667630666,0.298113345943639,-0.174260216577211, + -0.000272186532722207,-0.0392626664925708,0.317894879899553,-0.188948795802506, + -0.000288500045318385,-0.0392655662220753,0.337676413855467,-0.203637375027801, + -0.000304813557914396,-0.0392684659515796,0.357457947811381,-0.218325954253096, + -0.000321127070510296,-0.0392713656810839,0.377239481767295,-0.233014533478391, + -0.000337440583105919,-0.0392742654105875,0.397021015723209,-0.247703112703685, + -0.000353754095702263,-0.0392771651400925,0.416802549679122,-0.26239169192898, + -0.000370067608298164,-0.0392800648695968,0.436584083635036,-0.277080271154274, + -0.000386381120893953,-0.0392829645991009,0.456365617590951,-0.291768850379569, + -0.000402694633489742,-0.0392858643286047,0.476147151546865,-0.306457429604863, + -0.000419008146086086,-0.0392887640581094,0.495928685502779,-0.321146008830159, + -0.000435321658681542,-0.0392916637876131,0.515710219458693,-0.335834588055453, + -0.000451635171277887,-0.039294563517118,0.535491753414607,-0.350523167280749, + -0.00046794868387412,-0.0392974632466225,0.555273287370521,-0.365211746506043, + -0.00048426219647002,-0.0393003629761266,0.575054821326434,-0.379900325731337, + -0.000500575709065809,-0.0393032627056311,0.594836355282348,-0.394588904956632, + -0.000516889221661265,-0.0393061624351347,0.614617889238263,-0.409277484181927, + -0.000533202734257388,-0.039309062164639,0.634399423194176,-0.423966063407222, + -0.000549516246854065,-0.039311961894144,0.65418095715009,-0.438654642632516, + -0.000565829759449743,-0.0393148616236485,0.673962491106004,-0.453343221857811, + -0.000582143272045088,-0.0393177613531517,0.693744025061918,-0.468031801083105, + -0.000598456784641432,-0.0393206610826562,0.713525559017833,-0.482720380308401, + -0.000202264694731835,-0.0376818875860169,0.237396666084338,-0.132797734025557, + -0.000217935721911033,-0.0376206160044349,0.256920213240721,-0.147770380366291, + -0.000233606749090343,-0.037559344422853,0.276443760397104,-0.162743026707025, + -0.000249277776269763,-0.0374980728412712,0.295967307553488,-0.177715673047759, + -0.000264948803449017,-0.0374368012596893,0.315490854709871,-0.192688319388494, + -0.000280619830628659,-0.0373755296781078,0.335014401866254,-0.207660965729227, + -0.000296290857808024,-0.037314258096526,0.354537949022637,-0.222633612069962, + -0.000311961884987388,-0.0372529865149442,0.37406149617902,-0.237606258410696, + -0.000327632912166864,-0.0371917149333627,0.393585043335403,-0.25257890475143, + -0.000343303939346118,-0.0371304433517805,0.413108590491786,-0.267551551092164, + -0.000358974966525483,-0.0370691717701987,0.432632137648169,-0.282524197432897, + -0.00037464599370518,-0.0370079001886172,0.452155684804553,-0.297496843773632, + -0.000390317020884101,-0.0369466286070348,0.471679231960936,-0.312469490114365, + -0.000405988048063799,-0.0368853570254533,0.491202779117319,-0.3274421364551, + -0.000421659075243164,-0.0368240854438717,0.510726326273702,-0.342414782795834, + -0.000437330102422528,-0.0367628138622897,0.530249873430086,-0.357387429136568, + -0.000453001129601893,-0.036701542280708,0.549773420586469,-0.372360075477302, + -0.000468672156781369,-0.0366402706991265,0.569296967742852,-0.387332721818036, + -0.000484343183960845,-0.0365789991175447,0.588820514899235,-0.40230536815877, + -0.000500014211140209,-0.0365177275359629,0.608344062055618,-0.417278014499504, + -0.000515685238319241,-0.0364564559543805,0.627867609212001,-0.432250660840238, + -0.000531356265498939,-0.0363951843727994,0.647391156368384,-0.447223307180972, + -0.000547027292678415,-0.0363339127912172,0.666914703524767,-0.462195953521706, + -0.000562698319857668,-0.0362726412096355,0.686438250681151,-0.47716859986244, + -0.000578369347037033,-0.0362113696280537,0.705961797837534,-0.492141246203175, + -0.000196031289594722,-0.0356812992016964,0.235517993312198,-0.136189370655231, + -0.000210864818652567,-0.0355418316680342,0.254695486392783,-0.151532112275925, + -0.000225698347710135,-0.0354023641343714,0.273872979473367,-0.16687485389662, + -0.000240531876767758,-0.0352628966007087,0.293050472553952,-0.182217595517314, + -0.000255365405825658,-0.0351234290670464,0.312227965634536,-0.197560337138008, + -0.000270198934883337,-0.034983961533384,0.33140545871512,-0.212903078758702, + -0.000285032463940793,-0.034844493999721,0.350582951795705,-0.228245820379397, + -0.000299865992998694,-0.0347050264660587,0.369760444876289,-0.243588562000091, + -0.000314699522056427,-0.0345655589323963,0.388937937956873,-0.258931303620785, + -0.00032953305111405,-0.0344260913987338,0.408115431037457,-0.274274045241479, + -0.000344366580171562,-0.0342866238650708,0.427292924118042,-0.289616786862174, + -0.000359200109229518,-0.0341471563314086,0.446470417198626,-0.304959528482868, + -0.000374033638287363,-0.0340076887977463,0.46564791027921,-0.320302270103562, + -0.000388867167345208,-0.0338682212640837,0.484825403359795,-0.335645011724257, + -0.000403700696402387,-0.0337287537304207,0.50400289644038,-0.350987753344951, + -0.000418534225460454,-0.0335892861967584,0.523180389520964,-0.366330494965646, + -0.000433367754518077,-0.0334498186630963,0.542357882601548,-0.38167323658634, + -0.000448201283576033,-0.0333103511294337,0.561535375682132,-0.397015978207034, + -0.000463034812633545,-0.0331708835957709,0.580712868762717,-0.412358719827728, + -0.000477868341690946,-0.0330314160621081,0.599890361843301,-0.427701461448423, + -0.000492701870748902,-0.0328919485284458,0.619067854923885,-0.443044203069116, + -0.000507535399806969,-0.0327524809947839,0.63824534800447,-0.458386944689811, + -0.00052236892886437,-0.0326130134611207,0.657422841085054,-0.473729686310505, + -0.000537202457921881,-0.0324735459274583,0.676600334165638,-0.489072427931199, + -0.000552035986979171,-0.0323340783937951,0.695777827246223,-0.504415169551894, + -0.000187857899902444,-0.0332097375012657,0.232980238268616,-0.140502190333995, + -0.000201627460896747,-0.032979741061566,0.251701447538942,-0.156315546699342, + -0.000215397021891328,-0.0327497446218665,0.270422656809268,-0.172128903064689, + -0.000229166582885576,-0.0325197481821667,0.289143866079594,-0.187942259430037, + -0.000242936143879768,-0.0322897517424668,0.30786507534992,-0.203755615795384, + -0.000256705704874183,-0.0320597553027675,0.326586284620245,-0.219568972160732, + -0.000270475265868653,-0.0318297588630676,0.345307493890572,-0.235382328526079, + -0.000284244826862734,-0.0315997624233679,0.364028703160898,-0.251195684891427, + -0.000298014387857037,-0.0313697659836683,0.382749912431223,-0.267009041256774, + -0.000311783948851785,-0.0311397695439688,0.40147112170155,-0.282822397622121, + -0.000325553509846088,-0.0309097731042691,0.420192330971875,-0.298635753987468, + -0.000339323070840281,-0.0306797766645692,0.438913540242202,-0.314449110352816, + -0.000353092631834917,-0.03044978022487,0.457634749512527,-0.330262466718163, + -0.000366862192828665,-0.0302197837851697,0.476355958782854,-0.346075823083511, + -0.000380631753823524,-0.0299897873454706,0.495077168053179,-0.361889179448858, + -0.000394401314817605,-0.0297597909057707,0.513798377323505,-0.377702535814206, + -0.000408170875811908,-0.0295297944660713,0.532519586593831,-0.393515892179553, + -0.000421940436806323,-0.0292997980263714,0.551240795864157,-0.4093292485449, + -0.000435709997800737,-0.0290698015866722,0.569962005134483,-0.425142604910247, + -0.000449479558795041,-0.028839805146972,0.588683214404809,-0.440955961275595, + -0.00046324911979001,-0.028609808707273,0.607404423675135,-0.456769317640942, + -0.000477018680783758,-0.0283798122675725,0.626125632945461,-0.472582674006289, + -0.000490788241777729,-0.0281498158278723,0.644846842215787,-0.488396030371637, + -0.000504557802772254,-0.0279198193881731,0.663568051486113,-0.504209386736984, + -0.00051832736376678,-0.0276898229484734,0.682289260756439,-0.520022743102332, + -0.000177401834488999,-0.0302751956006273,0.229621574958222,-0.145820252902342, + -0.000189864624830671,-0.0299474196245475,0.247755116306721,-0.162213916084127, + -0.000202327415172232,-0.0296196436484673,0.265888657655219,-0.178607579265912, + -0.000214790205513626,-0.0292918676723869,0.284022199003718,-0.195001242447697, + -0.000227252995855409,-0.0289640916963072,0.302155740352216,-0.211394905629481, + -0.00023971578619697,-0.0286363157202272,0.320289281700715,-0.227788568811266, + -0.000252178576538531,-0.0283085397441472,0.338422823049214,-0.244182231993051, + -0.000264641366879925,-0.0279807637680665,0.356556364397713,-0.260575895174836, + -0.00027710415722193,-0.0276529877919869,0.374689905746211,-0.276969558356621, + -0.000289566947563102,-0.0273252118159064,0.39282344709471,-0.293363221538405, + -0.000302029737905052,-0.0269974358398268,0.410956988443208,-0.30975688472019, + -0.000314492528246446,-0.0266696598637466,0.429090529791707,-0.326150547901975, + -0.000326955318588285,-0.0263418838876666,0.447224071140205,-0.34254421108376, + -0.00033941810892979,-0.0260141079115865,0.465357612488704,-0.358937874265545, + -0.000351880899271295,-0.0256863319355065,0.483491153837203,-0.37533153744733, + -0.000364343689613134,-0.0253585559594265,0.501624695185701,-0.391725200629115, + -0.000376806479954417,-0.025030779983346,0.5197582365342,-0.4081188638109, + -0.000389269270295589,-0.0247030040072653,0.537891777882699,-0.424512526992684, + -0.000401732060637205,-0.0243752280311853,0.556025319231197,-0.440906190174469, + -0.000414194850979155,-0.0240474520551059,0.574158860579696,-0.457299853356254, + -0.000426657641320993,-0.0237196760790259,0.592292401928194,-0.473693516538039, + -0.000439120431662499,-0.0233919001029461,0.610425943276693,-0.490087179719823, + -0.000451583222004004,-0.0230641241268663,0.628559484625191,-0.506480842901608, + -0.000464046012346286,-0.0227363481507865,0.64669302597369,-0.522874506083393, + -0.000476508802687015,-0.0224085721747054,0.664826567322189,-0.539268169265178, + -0.000164451401711507,-0.0269556184686348,0.225304699967009,-0.15213462225805, + -0.000175377221189987,-0.0265318150541448,0.242704578377824,-0.169217309220869, + -0.000186303040668245,-0.0261080116396545,0.260104456788639,-0.186299996183689, + -0.000197228860146503,-0.0256842082251643,0.277504335199454,-0.203382683146508, + -0.000208154679624872,-0.0252604048106744,0.294904213610269,-0.220465370109327, + -0.000219080499103297,-0.0248366013961843,0.312304092021084,-0.237548057072147, + -0.000230006318581777,-0.0244127979816942,0.329703970431899,-0.254630744034966, + -0.000240932138060035,-0.023988994567204,0.347103848842714,-0.271713430997785, + -0.000251857957538459,-0.0235651911527142,0.364503727253529,-0.288796117960605, + -0.000262783777016939,-0.0231413877382243,0.381903605664344,-0.305878804923424, + -0.000273709596495531,-0.0227175843237342,0.399303484075159,-0.322961491886243, + -0.000284635415973455,-0.0222937809092434,0.416703362485974,-0.340044178849063, + -0.000295561235451824,-0.0218699774947533,0.434103240896789,-0.357126865811882, + -0.000306487054929971,-0.0214461740802632,0.451503119307604,-0.374209552774702, + -0.00031741287440834,-0.0210223706657731,0.468902997718419,-0.391292239737521, + -0.000328338693886709,-0.0205985672512832,0.486302876129234,-0.408374926700341, + -0.000339264513365301,-0.0201747638367928,0.50370275454005,-0.42545761366316, + -0.000350190332843892,-0.0197509604223036,0.521102632950864,-0.442540300625979, + -0.00036111615232215,-0.0193271570078133,0.538502511361679,-0.459622987588798, + -0.000372041971800408,-0.0189033535933232,0.555902389772494,-0.476705674551618, + -0.000382967791278888,-0.0184795501788328,0.573302268183309,-0.493788361514437, + -0.000393893610757146,-0.0180557467643427,0.590702146594124,-0.510871048477256, + -0.000404819430235515,-0.0176319433498526,0.608102025004939,-0.527953735440075, + -0.000415745249714439,-0.017208139935363,0.625501903415754,-0.545036422402895, + -0.000426671069192364,-0.0167843365208729,0.642901781826569,-0.562119109365714, + -0.00014905331718873,-0.0234070918642836,0.219970284423855,-0.159304031799408, + -0.000158266061085932,-0.0229009811454691,0.236489905994488,-0.177169044500823, + -0.000167478804982746,-0.0223948704266541,0.253009527565121,-0.195034057202238, + -0.000176691548879948,-0.0218887597078395,0.269529149135755,-0.212899069903653, + -0.000185904292776928,-0.0213826489890248,0.286048770706388,-0.230764082605069, + -0.00019511703667402,-0.0208765382702105,0.302568392277021,-0.248629095306484, + -0.000204329780571222,-0.0203704275513956,0.319088013847654,-0.266494108007899, + -0.00021354252446848,-0.0198643168325814,0.335607635418287,-0.284359120709315, + -0.000222755268365682,-0.0193582061137667,0.352127256988921,-0.30222413341073, + -0.000231968012262662,-0.0188520953949518,0.368646878559554,-0.320089146112145, + -0.000241180756159531,-0.0183459846761369,0.385166500130187,-0.33795415881356, + -0.000250393500056401,-0.0178398739573222,0.40168612170082,-0.355819171514975, + -0.000259606243953714,-0.017333763238508,0.418205743271453,-0.373684184216391, + -0.000268818987851027,-0.0168276525196933,0.434725364842087,-0.391549196917806, + -0.000278031731748229,-0.0163215418008789,0.45124498641272,-0.409414209619221, + -0.00028724447564521,-0.0158154310820642,0.467764607983353,-0.427279222320637, + -0.000296457219542079,-0.0153093203632491,0.484284229553987,-0.445144235022052, + -0.000305669963439392,-0.0148032096444348,0.50080385112462,-0.463009247723467, + -0.000314882707336483,-0.0142970989256206,0.517323472695252,-0.480874260424882, + -0.000324095451233353,-0.013790988206805,0.533843094265886,-0.498739273126297, + -0.000333308195130444,-0.0132848774879908,0.550362715836519,-0.516604285827713, + -0.000342520939027535,-0.0127787667691766,0.566882337407152,-0.534469298529128, + -0.00035173368292496,-0.0122726560503619,0.583401958977785,-0.552334311230543, + -0.000360946426821718,-0.0117665453315472,0.599921580548418,-0.570199323931958, + -0.000370159170719142,-0.0112604346127325,0.616441202119052,-0.588064336633374, + -0.000131622152289179,-0.0198449451573922,0.213695836973503,-0.167042394425382, + -0.00013904439169421,-0.0192822799836783,0.229208963499579,-0.18575181700769, + -0.000146466631099018,-0.0187196148099639,0.244722090025656,-0.204461239589998, + -0.000153888870504104,-0.0181569496362499,0.260235216551733,-0.223170662172306, + -0.000161311109909024,-0.0175942844625356,0.27574834307781,-0.241880084754614, + -0.00016873334931411,-0.0170316192888216,0.291261469603886,-0.260589507336921, + -0.000176155588718807,-0.0164689541151073,0.306774596129963,-0.279298929919229, + -0.000183577828123671,-0.015906288941393,0.32228772265604,-0.298008352501537, + -0.000191000067528591,-0.0153436237676787,0.337800849182116,-0.316717775083845, + -0.000198422306933344,-0.0147809585939647,0.353313975708193,-0.335427197666153, + -0.000205844546338652,-0.0142182934202506,0.36882710223427,-0.35413662024846, + -0.000213266785743516,-0.0136556282465363,0.384340228760346,-0.372846042830769, + -0.000220689025148268,-0.013092963072822,0.399853355286423,-0.391555465413076, + -0.000228111264553132,-0.012530297899108,0.4153664818125,-0.410264887995385, + -0.000235533503958218,-0.0119676327253939,0.430879608338576,-0.428974310577692, + -0.000242955743363304,-0.0114049675516799,0.446392734864653,-0.44768373316, + -0.000250377982767724,-0.0108423023779651,0.46190586139073,-0.466393155742308, + -0.000257800222172921,-0.0102796372042511,0.477418987916806,-0.485102578324616, + -0.000265222461577896,-0.00971697203053679,0.492932114442883,-0.503812000906923, + -0.00027264470098276,-0.00915430685682272,0.50844524096896,-0.522521423489232, + -0.000280066940387069,-0.008591641683108,0.523958367495037,-0.541230846071539, + -0.000287489179792821,-0.0080289765093946,0.539471494021113,-0.559940268653847, + -0.000294911419197574,-0.00746631133568032,0.55498462054719,-0.578649691236155, + -0.000302333658602216,-0.00690364616196604,0.570497747073266,-0.597359113818463, + -0.000309755898007302,-0.00634098098825131,0.586010873599344,-0.616068536400771, + -0.000112959969216286,-0.0164968703529933,0.206728616478026,-0.174951527702971, + -0.000118643263656182,-0.0159114678864911,0.221152550477629,-0.194523994654184, + -0.000124326558096244,-0.0153260654199894,0.235576484477233,-0.214096461605397, + -0.000130009852536084,-0.0147406629534872,0.250000418476836,-0.23366892855661, + -0.000135693146975813,-0.014155260486985,0.26442435247644,-0.253241395507823, + -0.000141376441415653,-0.0135698580204828,0.278848286476043,-0.272813862459036, + -0.000147059735855548,-0.0129844555539809,0.293272220475647,-0.292386329410249, + -0.000152743030295277,-0.0123990530874787,0.30769615447525,-0.311958796361462, + -0.000158426324735506,-0.0118136506209769,0.322120088474854,-0.331531263312675, + -0.000164109619175012,-0.0112282481544745,0.336544022474457,-0.351103730263887, + -0.000169792913614963,-0.0106428456879726,0.350967956474061,-0.3706761972151, + -0.000175476208054914,-0.0100574432214704,0.365391890473664,-0.390248664166313, + -0.000181159502494532,-0.00947204075496844,0.379815824473267,-0.409821131117526, + -0.000186842796934705,-0.00888663828846603,0.394239758472872,-0.429393598068739, + -0.000192526091374656,-0.00830123582196451,0.408663692472474,-0.448966065019952, + -0.000198209385814607,-0.00771583335546255,0.423087626472078,-0.468538531971165, + -0.000203892680254225,-0.00713043088896015,0.437511560471681,-0.488110998922378, + -0.000209575974694065,-0.00654502842245797,0.451935494471285,-0.507683465873591, + -0.000215259269134016,-0.00595962595595623,0.466359428470888,-0.527255932824804, + -0.000220942563572968,-0.00537422348945249,0.480783362470493,-0.546828399776017, + -0.000226625858013696,-0.00478882102295186,0.495207296470096,-0.56640086672723, + -0.000232309152453536,-0.00420341855644946,0.509631230469699,-0.585973333678442, + -0.000237992446893487,-0.0036180160899475,0.524055164469303,-0.605545800629655, + -0.000243675741333216,-0.00303261362344553,0.538479098468906,-0.625118267580868, + -0.000249359035772723,-0.00244721115694269,0.55290303246851,-0.644690734532081, + -9.41349121394985e-05,-0.0135463743684346,0.199460833058139,-0.182597178072164, + -9.82588537443707e-05,-0.0129730888036693,0.212773734995571,-0.203003938145791, + -0.000102382795349465,-0.0123998032389044,0.226086636933003,-0.223410698219418, + -0.000106506736954393,-0.0118265176741392,0.239399538870435,-0.243817458293045, + -0.000110630678559098,-0.0112532321093741,0.252712440807867,-0.264224218366672, + -0.000114754620164248,-0.0106799465446095,0.266025342745299,-0.284630978440299, + -0.000118878561769287,-0.0101066609798444,0.279338244682731,-0.305037738513926, + -0.000123002503374214,-0.00953337541507904,0.292651146620164,-0.325444498587553, + -0.000127126444979253,-0.00896008985031438,0.305964048557596,-0.34585125866118, + -0.000131250386584347,-0.00838680428554972,0.319276950495027,-0.366258018734807, + -0.00013537432818933,-0.00781351872078417,0.33258985243246,-0.386664778808434, + -0.000139498269794425,-0.00724023315601952,0.345902754369892,-0.407071538882061, + -0.000143622211399186,-0.00666694759125419,0.359215656307324,-0.427478298955688, + -0.000147746153003947,-0.00609366202648887,0.372528558244756,-0.447885059029316, + -0.000151870094609707,-0.00552037646172465,0.385841460182188,-0.468291819102943, + -0.000155994036214246,-0.00494709089695933,0.39915436211962,-0.48869857917657, + -0.00016011797781923,-0.00437380533219445,0.412467264057052,-0.509105339250197, + -0.000164241919423991,-0.00380051976742868,0.425780165994485,-0.529512099323824, + -0.000168365861029085,-0.00322723420266424,0.439093067931916,-0.549918859397451, + -0.000172489802633957,-0.00265394863789892,0.452405969869349,-0.570325619471078, + -0.000176613744239718,-0.00208066307313493,0.46571887180678,-0.590732379544705, + -0.000180737685843924,-0.00150737750836871,0.479031773744213,-0.611139139618331, + -0.000184861627448907,-0.000934091943603832,0.492344675681645,-0.631545899691958, + -0.000188985569054445,-0.00036080637883984,0.505657577619076,-0.651952659765586, + -0.000193109510658651,0.000212479185926373,0.518970479556509,-0.672359419839213, + -7.62449419381972e-05,-0.0110943472152419,0.192344360958631,-0.189600278729145, + -7.90809410445292e-05,-0.010561890685425,0.204589464652692,-0.210771216921253, + -8.19169401510833e-05,-0.0100294341556083,0.216834568346753,-0.23194215511336, + -8.47529392573598e-05,-0.00949697762579138,0.229079672040814,-0.253113093305468, + -8.75889383641915e-05,-0.00896452109597501,0.241324775734874,-0.274284031497576, + -9.0424937470579e-05,-0.00843206456615819,0.253569879428935,-0.295454969689684, + -9.32609365772441e-05,-0.0078996080363416,0.265814983122996,-0.316625907881792, + -9.60969356834651e-05,-0.00736715150652456,0.278060086817057,-0.3377968460739, + -9.89329347900192e-05,-0.00683469497670774,0.290305190511118,-0.358967784266008, + -0.000101768933896573,-0.00630223844689115,0.302550294205179,-0.380138722458116, + -0.000104604933003238,-0.00576978191707456,0.314795397899239,-0.401309660650224, + -0.000107440932109126,-0.00523732538725707,0.327040501593301,-0.422480598842332, + -0.000110276931216235,-0.00470486885744137,0.339285605287361,-0.443651537034439, + -0.000113112930322123,-0.00417241232762411,0.351530708981422,-0.464822475226547, + -0.000115948929429122,-0.00363995579780796,0.363775812675483,-0.485993413418655, + -0.000118784928535343,-0.0031074992679907,0.376020916369544,-0.507164351610763, + -0.000121620927642341,-0.00257504273817455,0.388266020063605,-0.528335289802871, + -0.000124456926748784,-0.00204258620835751,0.400511123757666,-0.549506227994979, + -0.000127292925855116,-0.00151012967854047,0.412756227451727,-0.570677166187087, + -0.00013012892496167,-0.000977673148724545,0.425001331145787,-0.591848104379195, + -0.000132964924068002,-0.000445216618907285,0.437246434839848,-0.613019042571303, + -0.000135800923174889,8.72399109090871e-05,0.449491538533909,-0.634189980763411, + -0.000138636922280666,0.000619696440726347,0.46173664222797,-0.655360918955518, + -0.000141472921387775,0.00115215297054228,0.47398174592203,-0.676531857147626, + -0.000144308920494218,0.00168460950035909,0.486226849616091,-0.697702795339735, + -6.01714108874329e-05,-0.00915478219390498,0.185782246156446,-0.195705145934604, + -6.20256715301859e-05,-0.00868132806013711,0.197057399314531,-0.217542247039848, + -6.38799321728833e-05,-0.00820787392636912,0.208332552472616,-0.239379348145093, + -6.57341928155808e-05,-0.00773441979260081,0.219607705630701,-0.261216449250337, + -6.75884534582782e-05,-0.00726096565883272,0.230882858788787,-0.283053550355582, + -6.94427141011977e-05,-0.00678751152506507,0.242158011946872,-0.304890651460826, + -7.12969747433956e-05,-0.00631405739129609,0.253433165104957,-0.326727752566071, + -7.31512353862596e-05,-0.00584060325752822,0.264708318263042,-0.348564853671316, + -7.50054960293456e-05,-0.00536714912376057,0.275983471421127,-0.37040195477656, + -7.6859756672043e-05,-0.0048936949899927,0.287258624579213,-0.392239055881805, + -7.87140173146295e-05,-0.00442024085622417,0.298533777737298,-0.414076156987049, + -8.0568277957549e-05,-0.0039467867224563,0.309808930895383,-0.435913258092294, + -8.24225386000244e-05,-0.00347333258868798,0.321084084053469,-0.457750359197538, + -8.42767992427218e-05,-0.00299987845491967,0.332359237211554,-0.479587460302783, + -8.61310598850862e-05,-0.00252642432115135,0.343634390369639,-0.501424561408027, + -8.79853205285608e-05,-0.00205297018738437,0.354909543527724,-0.523261662513272, + -8.98395811710362e-05,-0.00157951605361539,0.36618469668581,-0.545098763618517, + -9.16938418138447e-05,-0.00110606191984797,0.377459849843895,-0.566935864723761, + -9.3548102455987e-05,-0.000632607786078765,0.38873500300198,-0.588772965829005, + -9.54023630995726e-05,-0.000159153652312227,0.400010156160065,-0.61061006693425, + -9.7256623742048e-05,0.000314300481456531,0.411285309318151,-0.632447168039495, + -9.91108843844124e-05,0.000787754615224845,0.422560462476236,-0.654284269144739, + -0.000100965145027443,0.00126120874899271,0.433835615634321,-0.676121370249984, + -0.000102819405669807,0.00173466288276147,0.445110768792407,-0.697958471355228, + -0.000104673666312505,0.00220811701652979,0.456385921950492,-0.719795572460473, + -4.64321159043823e-05,-0.00767833539457463,0.180048362324907,-0.200801617843962, + -4.75915859728393e-05,-0.00727097094068141,0.190485879215915,-0.223194845800061, + -4.87510560410187e-05,-0.00686360648678785,0.200923396106922,-0.24558807375616, + -4.99105261096422e-05,-0.00645624203289485,0.21136091299793,-0.267981301712259, + -5.10699961777661e-05,-0.0060488775790013,0.221798429888937,-0.290374529668358, + -5.22294662459455e-05,-0.00564151312510752,0.232235946779945,-0.312767757624457, + -5.3388936314458e-05,-0.00523414867121463,0.242673463670952,-0.335160985580557, + -5.45484063825818e-05,-0.00482678421732086,0.25311098056196,-0.357554213536656, + -5.57078764508168e-05,-0.0044194197634273,0.263548497452967,-0.379947441492755, + -5.68673465193292e-05,-0.00401205530953441,0.273986014343975,-0.402340669448854, + -5.80268165875086e-05,-0.00360469085564086,0.284423531234982,-0.424733897404953, + -5.9186286655688e-05,-0.00319732640174708,0.29486104812599,-0.447127125361052, + -6.03457567243115e-05,-0.00278996194785397,0.305298565016997,-0.469520353317151, + -6.1505226792602e-05,-0.00238259749396041,0.315736081908005,-0.49191358127325, + -6.26646968608924e-05,-0.00197523304006708,0.326173598799012,-0.514306809229349, + -6.38241669289608e-05,-0.00156786858617375,0.33661111569002,-0.536700037185448, + -6.49836369975842e-05,-0.00116050413228064,0.347048632581027,-0.559093265141548, + -6.61431070660967e-05,-0.000753139678387527,0.357486149472035,-0.581486493097647, + -6.7302577133499e-05,-0.000345775224492861,0.367923666363043,-0.603879721053746, + -6.84620472021225e-05,6.15892294004716e-05,0.37836118325405,-0.626272949009845, + -6.9621517271079e-05,0.000468953683292916,0.388798700145058,-0.648666176965944, + -7.07809873391474e-05,0.000876318137186249,0.399236217036065,-0.671059404922043, + -7.19404574074378e-05,0.00128368259108047,0.409673733927073,-0.693452632878142, + -7.30999274756172e-05,0.0016910470449738,0.42011125081808,-0.715845860834241, + -7.42593975436856e-05,0.00209841149886758,0.430548767709088,-0.73823908879034, + -3.51721172094921e-05,-0.00658484444939922,0.175262944888296,-0.20490478488057, + -3.58708950935482e-05,-0.00624189134589404,0.185007632277422,-0.227745750291752, + -3.65696729778819e-05,-0.00589893824238907,0.194752319666549,-0.250586715702934, + -3.72684508622156e-05,-0.00555598513888422,0.204497007055675,-0.273427681114117, + -3.79672287464383e-05,-0.00521303203537893,0.214241694444802,-0.296268646525299, + -3.8666006630772e-05,-0.0048700789318743,0.223986381833928,-0.319109611936481, + -3.93647845153833e-05,-0.00452712582836945,0.233731069223054,-0.341950577347663, + -4.00635623994394e-05,-0.00418417272486415,0.243475756612181,-0.364791542758846, + -4.07623402838286e-05,-0.0038412196213593,0.253220444001307,-0.387632508170028, + -4.14611181682734e-05,-0.00349826651785468,0.262965131390433,-0.41047347358121, + -4.21598960526071e-05,-0.0031553134143496,0.27270981877956,-0.433314438992392, + -4.28586739370518e-05,-0.00281236031084475,0.282454506168686,-0.456155404403574, + -4.35574518209414e-05,-0.00246940720733946,0.292199193557812,-0.478996369814757, + -4.42562297052751e-05,-0.00212645410383483,0.301943880946938,-0.501837335225939, + -4.49550075896088e-05,-0.00178350100032931,0.311688568336065,-0.524678300637121, + -4.56537854736094e-05,-0.00144054789682402,0.321433255725192,-0.547519266048303, + -4.63525633582762e-05,-0.00109759479331961,0.331177943114318,-0.570360231459486, + -4.70513412427209e-05,-0.000754641689814761,0.340922630503444,-0.593201196870668, + -4.77501191268326e-05,-0.000411688586309022,0.350667317892571,-0.61604216228185, + -4.84488970108332e-05,-6.8735482804172e-05,0.360412005281697,-0.638883127693032, + -4.9147674895722e-05,0.00027421762069979,0.370156692670823,-0.661724093104215, + -4.98464527801668e-05,0.000617170724205085,0.37990138005995,-0.684565058515397, + -5.05452306637233e-05,0.00096012382771038,0.389646067449076,-0.707406023926579, + -5.12440085487231e-05,0.00130307693121523,0.399390754838202,-0.730246989337762, + -5.19427864327238e-05,0.00164603003472052,0.409135442227329,-0.753087954748944, + -2.62530577582187e-05,-0.00578943242276553,0.171416356244769,-0.208112892612427, + -2.66625151588706e-05,-0.00550383676652244,0.180607883348395,-0.231303926636141, + -2.70719725590784e-05,-0.00521824111027891,0.189799410452021,-0.254494960659856, + -2.74814299592863e-05,-0.00493264545403549,0.198990937555647,-0.277685994683571, + -2.78908873596051e-05,-0.00464704979779218,0.208182464659273,-0.300877028707286, + -2.83003447598129e-05,-0.00436145414154843,0.2173739917629,-0.324068062731, + -2.87098021602983e-05,-0.00407585848530556,0.226565518866525,-0.347259096754715, + -2.91192595606171e-05,-0.00379026282906203,0.235757045970152,-0.37045013077843, + -2.9528716961269e-05,-0.00350466717281939,0.244948573073777,-0.393641164802144, + -2.99381743611438e-05,-0.00321907151657519,0.254140100177404,-0.416832198825859, + -3.03476317614626e-05,-0.00293347586033188,0.26333162728103,-0.440023232849574, + -3.07570891617814e-05,-0.00264788020408857,0.272523154384656,-0.463214266873289, + -3.11665465619893e-05,-0.00236228454784526,0.281714681488282,-0.486405300897003, + -3.15760039624191e-05,-0.00207668889160173,0.290906208591908,-0.509596334920718, + -3.1985461363071e-05,-0.00179109323535886,0.300097735695534,-0.532787368944433, + -3.23949187628347e-05,-0.00150549757911445,0.309289262799161,-0.555978402968147, + -3.28043761632646e-05,-0.00121990192287158,0.318480789902786,-0.579169436991862, + -3.32138335638055e-05,-0.000934306266628493,0.327672317006412,-0.602360471015577, + -3.36232909639023e-05,-0.00064871061038474,0.336863844110039,-0.625551505039292, + -3.40327483643321e-05,-0.00036311495414143,0.346055371213665,-0.648742539063006, + -3.44422057645399e-05,-7.7519297898121e-05,0.355246898317291,-0.671933573086721, + -3.48516631650808e-05,0.000208076358345188,0.364438425420917,-0.695124607110436, + -3.52611205652886e-05,0.000493672014588498,0.373629952524543,-0.718315641134151, + -3.56705779652744e-05,0.000779267670832695,0.382821479628169,-0.741506675157865, + -3.60800353654822e-05,0.001064863327076,0.392013006731796,-0.76469770918158, + -1.93740367441242e-05,-0.00521705261768279,0.168415021404619,-0.210564223650296, + -1.96094253980261e-05,-0.00497943890039421,0.177177095561348,-0.234022746838032, + -1.98448140515395e-05,-0.00474182518310529,0.185939169718077,-0.257481270025767, + -2.00802027054969e-05,-0.0045042114658167,0.194701243874807,-0.280939793213503, + -2.03155913591768e-05,-0.00426659774852811,0.203463318031536,-0.304398316401239, + -2.05509800124681e-05,-0.00402898403123908,0.212225392188265,-0.327856839588975, + -2.07863686663701e-05,-0.00379137031395049,0.220987466344994,-0.351315362776711, + -2.102175732005e-05,-0.00355375659666191,0.229749540501723,-0.374773885964447, + -2.12571459734523e-05,-0.00331614287937221,0.238511614658453,-0.398232409152183, + -2.14925346273542e-05,-0.00307852916208384,0.247273688815182,-0.421690932339919, + -2.17279232810341e-05,-0.0028409154447957,0.25603576297191,-0.445149455527655, + -2.1963311934603e-05,-0.00260330172750667,0.26479783712864,-0.468607978715391, + -2.21987005886159e-05,-0.00236568801021808,0.273559911285369,-0.492066501903127, + -2.24340892420738e-05,-0.00212807429292927,0.282321985442098,-0.515525025090863, + -2.26694778957537e-05,-0.00189046057564024,0.291084059598827,-0.538983548278599, + -2.29048665499887e-05,-0.00165284685835276,0.299846133755556,-0.562442071466335, + -2.31402552033355e-05,-0.00141523314106351,0.308608207912285,-0.585900594654071, + -2.33756438571264e-05,-0.00117761942377514,0.317370282069014,-0.609359117841807, + -2.36110325114725e-05,-0.00094000570648678,0.326132356225743,-0.632817641029543, + -2.38464211640421e-05,-0.000702391989197082,0.334894430382473,-0.656276164217279, + -2.40818098171669e-05,-0.000464778271907829,0.343656504539202,-0.679734687405015, + -2.43171984722901e-05,-0.000227164554620352,0.352418578695931,-0.703193210592751, + -2.45525871248597e-05,1.04491626693459e-05,0.36118065285266,-0.726651733780487, + -2.47879757790948e-05,0.000248062879957711,0.369942727009389,-0.750110256968223, + -2.50233644329967e-05,0.000485676597245632,0.378704801166118,-0.773568780155959, + -1.41751340891894e-05,-0.00480755486317341,0.166126320483516,-0.212404619080298, + -1.43090701665849e-05,-0.00460833740499644,0.174562112230244,-0.236063966158172, + -1.44430062434808e-05,-0.00440911994681903,0.182997903976971,-0.259723313236046, + -1.45769423204878e-05,-0.0042099024886415,0.1914336957237,-0.283382660313919, + -1.47108783976058e-05,-0.00401068503046442,0.199869487470427,-0.307042007391793, + -1.48448144748903e-05,-0.00381146757228734,0.208305279217155,-0.330701354469667, + -1.49787505518972e-05,-0.00361225011410982,0.216741070963883,-0.35436070154754, + -1.51126866289042e-05,-0.00341303265593251,0.225176862710611,-0.378020048625414, + -1.52466227059112e-05,-0.00321381519775521,0.233612654457339,-0.401679395703288, + -1.53805587832512e-05,-0.00301459773957791,0.242048446204067,-0.425338742781161, + -1.55144948602581e-05,-0.0028153802814006,0.250484237950795,-0.448998089859035, + -1.56484309374871e-05,-0.0026161628232233,0.258920029697523,-0.472657436936909, + -1.5782367013828e-05,-0.00241694536504511,0.267355821444251,-0.496316784014782, + -1.5916303091501e-05,-0.00221772790686825,0.275791613190979,-0.519976131092656, + -1.60502391687301e-05,-0.00201851044869161,0.284227404937707,-0.543635478170529, + -1.6184175245626e-05,-0.00181929299051387,0.292663196684435,-0.567294825248403, + -1.6318111322744e-05,-0.00162007553233656,0.301098988431163,-0.590954172326277, + -1.6452047400084e-05,-0.0014208580741597,0.30953478017789,-0.61461351940415, + -1.65859834770909e-05,-0.00122164061598218,0.317970571924619,-0.638272866482024, + -1.67199195540979e-05,-0.0010224231578051,0.326406363671346,-0.661932213559898, + -1.68538556312159e-05,-0.000823205699627572,0.334842155418074,-0.685591560637771, + -1.69877917081118e-05,-0.000623988241450046,0.343277947164802,-0.709250907715645, + -1.71217277856739e-05,-0.000424770783273409,0.35171373891153,-0.732910254793519, + -1.72556638624588e-05,-0.00022555332509544,0.360149530658258,-0.756569601871392, + -1.73895999395768e-05,-2.63358669183589e-05,0.368585322404986,-0.780228948949266, + -1.03052477093413e-05,-0.00451538002871554,0.164411061537537,-0.213768162538806, + -1.03813092477423e-05,-0.00434592557833724,0.172602976442202,-0.237576299435023, + -1.04573707868649e-05,-0.00417647112796005,0.180794891346867,-0.26138443633124, + -1.0533432325488e-05,-0.00400701667758208,0.188986806251533,-0.285192573227456, + -1.06094938642776e-05,-0.00383756222720422,0.197178721156198,-0.309000710123673, + -1.06855554029006e-05,-0.00366810777682636,0.205370636060863,-0.332808847019889, + -1.07616169421898e-05,-0.00349865332644916,0.213562550965528,-0.356616983916106, + -1.08376784808684e-05,-0.0033291988760713,0.221754465870193,-0.380425120812323, + -1.09137400193804e-05,-0.00315974442569322,0.229946380774859,-0.404233257708539, + -1.09898015585586e-05,-0.00299028997531603,0.238138295679523,-0.428041394604756, + -1.10658630970706e-05,-0.0028208355249375,0.246330210584189,-0.451849531500973, + -1.11419246358047e-05,-0.00265138107455964,0.254522125488854,-0.475657668397189, + -1.12179861749828e-05,-0.00248192662418267,0.262714040393519,-0.499465805293406, + -1.12940477134948e-05,-0.00231247217380437,0.270905955298185,-0.523273942189622, + -1.13701092521179e-05,-0.00214301772342629,0.27909787020285,-0.547082079085839, + -1.1446170791074e-05,-0.00197356327304865,0.287289785107515,-0.570890215982055, + -1.15222323296971e-05,-0.00180410882267124,0.29548170001218,-0.594698352878272, + -1.15982938686532e-05,-0.00163465437229338,0.303673614916845,-0.618506489774489, + -1.16743554077203e-05,-0.00146519992191596,0.31186552982151,-0.642314626670705, + -1.17504169463434e-05,-0.00129574547153855,0.320057444726175,-0.666122763566922, + -1.18264784854105e-05,-0.00112629102116069,0.328249359630841,-0.689930900463139, + -1.19025400242556e-05,-0.000956836570782826,0.336441274535506,-0.713739037359355, + -1.19786015624346e-05,-0.000787382120404079,0.344633189440172,-0.737547174255572, + -1.20546631015017e-05,-0.000617927670026663,0.352825104344836,-0.761355311151788, + -1.21307246397917e-05,-0.000448473219648804,0.361017019249501,-0.785163448048005, + -7.4567452583163e-06,-0.00430711202153433,0.163142068736445,-0.214768527274187, + -7.50018834982935e-06,-0.00416020641618919,0.171153907435093,-0.238685823938158, + -7.54363144117587e-06,-0.00401330081084339,0.179165746133742,-0.262603120602129, + -7.58707453291096e-06,-0.00386639520549847,0.187177584832391,-0.2865204172661, + -7.63051762431299e-06,-0.00371948960015311,0.19518942353104,-0.310437713930072, + -7.67396071543747e-06,-0.00357258399480731,0.203201262229689,-0.334355010594043, + -7.71740380722807e-06,-0.00342567838946217,0.211213100928337,-0.358272307258014, + -7.76084689896317e-06,-0.00327877278411726,0.219224939626986,-0.382189603921985, + -7.8042899903652e-06,-0.00313186717877212,0.227236778325635,-0.406106900585956, + -7.84773308171172e-06,-0.00298496157342609,0.235248617024284,-0.430024197249927, + -7.89117617328028e-06,-0.00283805596808118,0.243260455722932,-0.453941493913898, + -7.9346192646268e-06,-0.00269115036273559,0.251272294421581,-0.47785879057787, + -7.97806235652843e-06,-0.00254424475739068,0.25928413312023,-0.501776087241841, + -8.0215054476529e-06,-0.0023973391520451,0.267295971818879,-0.525693383905812, + -8.06494853933248e-06,-0.00225043354670018,0.275307810517527,-0.549610680569783, + -8.10839163123411e-06,-0.00210352794135504,0.283319649216176,-0.573527977233754, + -8.1518347219145e-06,-0.0019566223360088,0.291331487914825,-0.597445273897725, + -8.19527781314999e-06,-0.00180971673066344,0.299343326613474,-0.621362570561697, + -8.23872090505162e-06,-0.00166281112531852,0.307355165312122,-0.645279867225668, + -8.28216399684223e-06,-0.0015159055199736,0.315367004010771,-0.669197163889639, + -8.32560708829977e-06,-0.00136899991462824,0.32337884270942,-0.69311446055361, + -8.36905018009038e-06,-0.00122209430928333,0.331390681408068,-0.717031757217581, + -8.41249327121485e-06,-0.00107518870393752,0.339402520106717,-0.740949053881552, + -8.45593636233932e-06,-0.000928283098591276,0.347414358805366,-0.764866350545523, + -8.49937945457402e-06,-0.000781377493247248,0.355426197504014,-0.788783647209495, + -5.37715498966085e-06,-0.00415866255094555,0.162212126159133,-0.215497165782528, + -5.40228059531245e-06,-0.00402856133269092,0.170092186510175,-0.239493971457097, + -5.42740620079751e-06,-0.00389846011443618,0.177972246861216,-0.263490777131667, + -5.45253180617156e-06,-0.00376835889618121,0.185852307212258,-0.287487582806236, + -5.47765741182316e-06,-0.00363825767792658,0.1937323675633,-0.311484388480806, + -5.50278301758578e-06,-0.0035081564596724,0.201612427914342,-0.335481194155375, + -5.52790862290431e-06,-0.00337805524141732,0.209492488265383,-0.359477999829944, + -5.55303422855591e-06,-0.00324795402316291,0.217372548616425,-0.383474805504514, + -5.57815983381893e-06,-0.00311785280490762,0.225252608967467,-0.407471611179083, + -5.60328543952604e-06,-0.00298775158665343,0.233132669318509,-0.431468416853653, + -5.62841104501111e-06,-0.0028576503683988,0.24101272966955,-0.455465222528222, + -5.65353665071822e-06,-0.00272754915014395,0.248892790020592,-0.479462028202791, + -5.67866225587021e-06,-0.00259744793188887,0.256772850371634,-0.503458833877361, + -5.70378786135528e-06,-0.00246734671363447,0.264652910722676,-0.52745563955193, + -5.72891346695137e-06,-0.00233724549537939,0.272532971073718,-0.5514524452265, + -5.7540390727695e-06,-0.00220714427712521,0.280413031424759,-0.575449250901069, + -5.77916467781048e-06,-0.00207704305886991,0.288293091775801,-0.599446056575639, + -5.80429028385065e-06,-0.00194694184061595,0.296173152126842,-0.623442862250208, + -5.82941588966879e-06,-0.00181684062236132,0.304053212477884,-0.647439667924778, + -5.85454149493181e-06,-0.00168673940410669,0.311933272828926,-0.671436473599347, + -5.87966709975074e-06,-0.00155663818585117,0.319813333179968,-0.695433279273916, + -5.90479270590194e-06,-0.00142653696759698,0.327693393531009,-0.719430084948486, + -5.92991831072087e-06,-0.00129643574934146,0.335573453882051,-0.743426890623055, + -5.95504391631696e-06,-0.00116633453108639,0.343453514233094,-0.767423696297624, + -5.98016952224611e-06,-0.00103623331283265,0.351333574584135,-0.791420501972194, + -3.86791962808664e-06,-0.00405281546913538,0.161535366169486,-0.216025099878753, + -3.88271724793832e-06,-0.00393509034925488,0.169319622460955,-0.240079513704925, + -3.89751486779e-06,-0.00381736522937437,0.177103878752425,-0.264133927531097, + -3.91231248714208e-06,-0.00369964010949331,0.184888135043894,-0.288188341357269, + -3.92711010638314e-06,-0.00358191498961169,0.192672391335364,-0.312242755183441, + -3.94190772623482e-06,-0.00346418986973118,0.200456647626833,-0.336297169009613, + -3.95670534591996e-06,-0.00334646474985045,0.208240903918302,-0.360351582835785, + -3.9715029655496e-06,-0.00322873962996995,0.216025160209771,-0.384405996661957, + -3.98630058506821e-06,-0.00311101451008899,0.223809416501241,-0.408460410488129, + -4.00109820497541e-06,-0.00299328939020804,0.23159367279271,-0.432514824314301, + -4.01589582432749e-06,-0.00287556427032709,0.23937792908418,-0.456569238140473, + -4.03069344367957e-06,-0.0027578391504457,0.247162185375649,-0.480623651966645, + -4.04549106325369e-06,-0.00264011403056497,0.254946441667118,-0.504678065792817, + -4.06028868282782e-06,-0.00252238891068424,0.262730697958588,-0.528732479618989, + -4.07508630273501e-06,-0.00240466379080373,0.270514954250057,-0.552786893445161, + -4.08988392242016e-06,-0.00228693867092256,0.278299210541527,-0.576841307271333, + -4.10468154232735e-06,-0.00216921355104249,0.286083466832995,-0.600895721097505, + -4.11947916167943e-06,-0.0020514884311611,0.293867723124465,-0.624950134923677, + -4.1342767814756e-06,-0.00193376331128103,0.301651979415934,-0.649004548749849, + -4.14907440116075e-06,-0.00181603819139964,0.309436235707404,-0.67305896257602, + -4.16387202029078e-06,-0.00169831307151824,0.317220491998873,-0.697113376402193, + -4.17866964008695e-06,-0.00158058795163774,0.325004748290342,-0.721167790228365, + -4.19346725955005e-06,-0.00146286283175678,0.332789004581812,-0.745222204054537, + -4.20826487912418e-06,-0.00134513771187583,0.340573260873281,-0.769276617880708, + -4.2230624986983e-06,-0.00122741259199488,0.348357517164751,-0.79333103170688, + -2.77730656589315e-06,-0.00397731074550967,0.161045337177822,-0.216406156640815, + -2.78621737304086e-06,-0.00386862330856763,0.168760273910496,-0.24050215136861, + -2.79512818091021e-06,-0.00375993587162637,0.17647521064317,-0.264598146096404, + -2.80403898855752e-06,-0.0036512484346849,0.184190147375844,-0.288694140824198, + -2.81294979592728e-06,-0.00354256099774286,0.191905084108518,-0.312790135551992, + -2.82186060351908e-06,-0.00343387356080171,0.199620020841192,-0.336886130279786, + -2.83077141105537e-06,-0.0033251861238599,0.207334957573866,-0.36098212500758, + -2.83968221859165e-06,-0.00321649868691831,0.21504989430654,-0.385078119735374, + -2.84859302612794e-06,-0.00310781124997672,0.222764831039215,-0.409174114463168, + -2.85750383410832e-06,-0.00299912381303558,0.230479767771889,-0.433270109190962, + -2.86641464142257e-06,-0.00289043637609354,0.238194704504563,-0.457366103918756, + -2.87532544906988e-06,-0.00278174893915217,0.245909641237237,-0.48146209864655, + -2.88423625649514e-06,-0.00267306150221058,0.253624577969911,-0.505558093374344, + -2.89314706380939e-06,-0.00256437406526855,0.261339514702585,-0.529654088102138, + -2.9020578714567e-06,-0.00245568662832674,0.26905445143526,-0.553750082829932, + -2.91096867910401e-06,-0.00234699919138537,0.276769388167934,-0.577846077557726, + -2.91987948686234e-06,-0.00223831175444422,0.284484324900608,-0.60194207228552, + -2.92879029439863e-06,-0.00212962431750263,0.292199261633282,-0.626038067013314, + -2.93770110149083e-06,-0.00202093688056015,0.299914198365956,-0.650134061741108, + -2.94661190913814e-06,-0.00191224944361901,0.30762913509863,-0.674230056468902, + -2.95552271656341e-06,-0.00180356200667697,0.315344071831305,-0.698326051196696, + -2.96443352454379e-06,-0.00169487456973583,0.323059008563979,-0.72242204592449, + -2.97334433163599e-06,-0.00158618713279379,0.330773945296653,-0.746518040652285, + -2.98225513906125e-06,-0.00147749969585176,0.338488882029327,-0.770614035380078, + -2.99116594693061e-06,-0.00136881225891061,0.346203818762001,-0.794710030107872, + -1.99163518083134e-06,-0.00392342676600754,0.16069180837979,-0.216680441945902, + -1.99713398812973e-06,-0.00382129905779505,0.168356760924067,-0.240806366677367, + -2.00263279531709e-06,-0.00371917134958222,0.176021713468344,-0.264932291408831, + -2.00813160283753e-06,-0.00361704364136983,0.183686666012621,-0.289058216140296, + -2.01363040985836e-06,-0.00351491593315689,0.191351618556898,-0.31318414087176, + -2.01912921754532e-06,-0.00341278822494484,0.199016571101175,-0.337310065603225, + -2.02462802495473e-06,-0.00331066051673212,0.206681523645452,-0.36143599033469, + -2.03012683197556e-06,-0.00320853280851918,0.214346476189728,-0.385561915066154, + -2.03562563916293e-06,-0.00310640510030646,0.222011428734005,-0.409687839797619, + -2.04112444668336e-06,-0.00300427739209419,0.229676381278282,-0.433813764529083, + -2.04662325387073e-06,-0.00290214968388125,0.237341333822559,-0.457939689260548, + -2.05212206094707e-06,-0.00280002197566809,0.245006286366836,-0.482065613992012, + -2.0576208684675e-06,-0.00269789426745581,0.252671238911113,-0.506191538723477, + -2.06311967587691e-06,-0.00259576655924354,0.26033619145539,-0.530317463454941, + -2.06861848306428e-06,-0.00249363885103016,0.268001143999667,-0.554443388186406, + -2.07411729069573e-06,-0.00239151114281833,0.275666096543944,-0.57856931291787, + -2.07961609743901e-06,-0.00228938343460516,0.283331049088221,-0.602695237649335, + -2.0851149047374e-06,-0.00218725572639222,0.290996001632498,-0.626821162380799, + -2.09061371170272e-06,-0.00208512801817973,0.298660954176774,-0.650947087112264, + -2.09611251988928e-06,-0.00198300030996812,0.306325906721051,-0.675073011843728, + -2.10161132663256e-06,-0.00188087260175429,0.313990859265328,-0.699198936575193, + -2.10711013404197e-06,-0.00177874489354179,0.321655811809605,-0.723324861306658, + -2.11260894189547e-06,-0.00167661718533019,0.329320764353882,-0.747450786038122, + -2.11810774897181e-06,-0.00157448947711725,0.336985716898158,-0.771576710769587, + -2.12360655582611e-06,-0.00147236176890431,0.344650669442435,-0.795702635501051, + -1.42689878224189e-06,-0.00388495795118449,0.160437426371332,-0.216877481495571, + -1.43037733996154e-06,-0.00378757069459368,0.168066426163253,-0.241024907176358, + -1.43385589768119e-06,-0.00369018343800287,0.175695425955175,-0.265172332857146, + -1.4373344551788e-06,-0.00359279618141173,0.183324425747097,-0.289319758537934, + -1.44081301306498e-06,-0.00349540892482114,0.190953425539019,-0.313467184218722, + -1.44429157089565e-06,-0.00339802166823056,0.198582425330941,-0.33761460989951, + -1.44777012844877e-06,-0.00330063441163952,0.206211425122863,-0.361762035580298, + -1.4512486861129e-06,-0.00320324715504849,0.213840424914785,-0.385909461261086, + -1.45472724366602e-06,-0.00310585989845746,0.221469424706707,-0.410056886941873, + -1.45820580144118e-06,-0.0030084726418671,0.229098424498628,-0.434204312622661, + -1.4616843589943e-06,-0.00291108538527607,0.23672742429055,-0.458351738303449, + -1.4651629169915e-06,-0.00281369812868548,0.244356424082472,-0.482499163984237, + -1.46864147421155e-06,-0.00271631087209401,0.251985423874394,-0.506646589665025, + -1.47212003254182e-06,-0.00261892361550409,0.259614423666316,-0.530794015345813, + -1.47559858998392e-06,-0.00252153635891328,0.267243423458237,-0.554941441026601, + -1.47907714753703e-06,-0.0024241491023218,0.27487242325016,-0.579088866707388, + -1.48255570542322e-06,-0.00232676184573144,0.282501423042081,-0.603236292388176, + -1.4860342633094e-06,-0.0022293745891413,0.290130422834003,-0.627383718068964, + -1.48951282097354e-06,-0.00213198733254982,0.297759422625925,-0.651531143749752, + -1.49299137885972e-06,-0.00203460007595968,0.305388422417847,-0.67567856943054, + -1.49646993619079e-06,-0.00193721281936776,0.313017422209769,-0.699825995111328, + -1.49994849341084e-06,-0.00183982556277673,0.320646422001691,-0.723973420792116, + -1.50342705140805e-06,-0.00174243830618659,0.328275421793613,-0.748120846472904, + -1.50690560929423e-06,-0.001645051049596,0.335904421585534,-0.772268272153691, + -1.51038416784655e-06,-0.00154766379300586,0.343533421377456,-0.796415697834479, + -0.000246864452599971,-0.0554140565176802,0.256198145899963,-0.111877456940221, + -0.000267960892454677,-0.0560975627866294,0.277583211357556,-0.123950075503243, + -0.000289057332309883,-0.0567810690555792,0.298968276815148,-0.136022694066265, + -0.000310153772164756,-0.0574645753245284,0.320353342272741,-0.148095312629287, + -0.000331250212019796,-0.058148081593478,0.341738407730333,-0.160167931192309, + -0.000352346651874613,-0.0588315878624271,0.363123473187926,-0.172240549755331, + -0.000373443091729431,-0.0595150941313765,0.384508538645519,-0.184313168318354, + -0.000394539531584803,-0.0601986004003265,0.405893604103111,-0.196385786881376, + -0.000415635971439232,-0.0608821066692755,0.427278669560703,-0.208458405444397, + -0.000436732411294383,-0.0615656129382252,0.448663735018296,-0.22053102400742, + -0.000457828851149422,-0.0622491192071746,0.470048800475889,-0.232603642570442, + -0.000478925291004351,-0.0629326254761238,0.491433865933482,-0.244676261133464, + -0.000500021730859057,-0.063616131745073,0.512818931391074,-0.256748879696486, + -0.000521118170714208,-0.0642996380140228,0.534203996848667,-0.268821498259509, + -0.000542214610569136,-0.0649831442829722,0.55558906230626,-0.280894116822531, + -0.000563311050424398,-0.0656666505519221,0.576974127763852,-0.292966735385553, + -0.000584407490278771,-0.0663501568208709,0.598359193221445,-0.305039353948575, + -0.000605503930134144,-0.0670336630898207,0.619744258679036,-0.317111972511596, + -0.000626600369988961,-0.0677171693587701,0.641129324136629,-0.329184591074618, + -0.000647696809844112,-0.0684006756277196,0.662514389594222,-0.341257209637641, + -0.000668793249699262,-0.0690841818966692,0.683899455051814,-0.353329828200662, + -0.00068988968955408,-0.0697676881656186,0.705284520509407,-0.365402446763685, + -0.000710986129408564,-0.0704511944345674,0.726669585966999,-0.377475065326706, + -0.000732082569263937,-0.0711347007035172,0.748054651424592,-0.389547683889728, + -0.000753179009118865,-0.0718182069724667,0.769439716882185,-0.401620302452752, + -0.00024249693930406,-0.0533044069831468,0.255189035588836,-0.114923501968334, + -0.000262910922894488,-0.0538835958385343,0.276349286939148,-0.127312425600976, + -0.000283324906484694,-0.0544627846939217,0.297509538289459,-0.139701349233619, + -0.000303738890075289,-0.0550419735493095,0.31866978963977,-0.152090272866262, + -0.000324152873665662,-0.0556211624046972,0.339830040990082,-0.164479196498905, + -0.00034456685725609,-0.0562003512600846,0.360990292340393,-0.176868120131548, + -0.000364980840846518,-0.0567795401154723,0.382150543690705,-0.18925704376419, + -0.00038539482443678,-0.0573587289708597,0.403310795041016,-0.201645967396833, + -0.000405808808027208,-0.0579379178262474,0.424471046391327,-0.214034891029476, + -0.000426222791617969,-0.0585171066816352,0.445631297741639,-0.226423814662119, + -0.000446636775208398,-0.0590962955370229,0.46679154909195,-0.238812738294761, + -0.000467050758798604,-0.0596754843924101,0.487951800442262,-0.251201661927405, + -0.000487464742389032,-0.0602546732477978,0.509112051792572,-0.263590585560047, + -0.000507878725979682,-0.0608338621031854,0.530272303142884,-0.27597950919269, + -0.000528292709569889,-0.0614130509585733,0.551432554493196,-0.288368432825333, + -0.000548706693160206,-0.0619922398139603,0.572592805843507,-0.300757356457976, + -0.000569120676750523,-0.062571428669348,0.593753057193819,-0.313146280090619, + -0.000589534660340951,-0.0631506175247356,0.614913308544129,-0.325535203723261, + -0.000609948643931602,-0.0637298063801237,0.63607355989444,-0.337924127355903, + -0.000630362627521697,-0.0643089952355109,0.657233811244752,-0.350313050988547, + -0.000650776611112347,-0.0648881840908986,0.678394062595063,-0.362701974621189, + -0.000671190594702997,-0.0654673729462862,0.699554313945375,-0.375090898253833, + -0.000691604578293314,-0.0660465618016737,0.720714565295686,-0.387479821886475, + -0.000712018561884076,-0.0666257506570616,0.741874816645998,-0.399868745519118, + -0.000732432545473727,-0.0672049395124485,0.763035067996309,-0.412257669151761, + -0.000236561234025101,-0.050590201727908,0.253743175509646,-0.118920198092828, + -0.000256072781308236,-0.0510390282996631,0.274595800509578,-0.131724143576508, + -0.000275584328591427,-0.0514878548714186,0.295448425509511,-0.144528089060189, + -0.00029509587587484,-0.0519366814431742,0.316301050509443,-0.157332034543869, + -0.00031460742315792,-0.0523855080149295,0.337153675509376,-0.170135980027549, + -0.000334118970441166,-0.0528343345866849,0.358006300509309,-0.18293992551123, + -0.000353630517724635,-0.0532831611584403,0.378858925509241,-0.19574387099491, + -0.000373142065007881,-0.0537319877301961,0.399711550509174,-0.20854781647859, + -0.000392653612290905,-0.0541808143019511,0.420564175509106,-0.22135176196227, + -0.000412165159574318,-0.0546296408737068,0.441416800509039,-0.234155707445952, + -0.000431676706857398,-0.0550784674454621,0.462269425508971,-0.246959652929631, + -0.0004511882541407,-0.0555272940172176,0.483122050508904,-0.259763598413312, + -0.000470699801423891,-0.0559761205889728,0.503974675508837,-0.272567543896992, + -0.00049021134870697,-0.0564249471607281,0.52482730050877,-0.285371489380673, + -0.000509722895990383,-0.0568737737324838,0.545679925508702,-0.298175434864354, + -0.000529234443273463,-0.0573226003042391,0.566532550508635,-0.310979380348034, + -0.000548745990556765,-0.0577714268759943,0.587385175508568,-0.323783325831715, + -0.000568257537840289,-0.0582202534477503,0.608237800508499,-0.336587271315394, + -0.000587769085122924,-0.0586690800195051,0.629090425508432,-0.349391216799074, + -0.000607280632406559,-0.0591179065912608,0.649943050508365,-0.362195162282755, + -0.000626792179689306,-0.0595667331630156,0.670795675508297,-0.374999107766435, + -0.000646303726972608,-0.0600155597347714,0.69164830050823,-0.387803053250116, + -0.000665815274256021,-0.0604643863065271,0.712500925508162,-0.400606998733796, + -0.000685326821539101,-0.0609132128782819,0.733353550508095,-0.413410944217476, + -0.000704838368822625,-0.0613620394500378,0.754206175508028,-0.426214889701157, + -0.000228604507525432,-0.0471982040778014,0.251685206284882,-0.124049020172528, + -0.000246947949845921,-0.0474906853328141,0.272122032292897,-0.13738554886165, + -0.000265291392166356,-0.0477831665878266,0.292558858300913,-0.150722077550772, + -0.000283634834487123,-0.0480756478428391,0.312995684308928,-0.164058606239893, + -0.000301978276807724,-0.0483681290978517,0.333432510316943,-0.177395134929015, + -0.000320321719128325,-0.0486606103528644,0.353869336324959,-0.190731663618137, + -0.000338665161448648,-0.0489530916078766,0.374306162332974,-0.204068192307259, + -0.000357008603769304,-0.0492455728628893,0.394742988340989,-0.217404720996381, + -0.000375352046089628,-0.0495380541179016,0.415179814349005,-0.230741249685503, + -0.000393695488410173,-0.049830535372914,0.43561664035702,-0.244077778374625, + -0.000412038930731051,-0.050123016627927,0.456053466365035,-0.257414307063747, + -0.000430382373051152,-0.050415497882939,0.476490292373051,-0.27075083575287, + -0.000448725815371809,-0.0507079791379517,0.496927118381066,-0.284087364441991, + -0.000467069257692354,-0.0510004603929641,0.517363944389082,-0.297423893131113, + -0.000485412700013232,-0.0512929416479773,0.537800770397097,-0.310760421820236, + -0.000503756142333445,-0.0515854229029888,0.558237596405113,-0.324096950509357, + -0.000522099584654101,-0.0518779041580018,0.578674422413128,-0.33743347919848, + -0.000540443026974424,-0.052170385413014,0.599111248421143,-0.350770007887601, + -0.000558786469295192,-0.0524628666680271,0.619548074429157,-0.364106536576722, + -0.000577129911615293,-0.0527553479230389,0.639984900437173,-0.377443065265845, + -0.000595473353935949,-0.0530478291780514,0.660421726445189,-0.390779593954967, + -0.00061381679625705,-0.0533403104330645,0.680858552453204,-0.404116122644089, + -0.000632160238576929,-0.0536327916880763,0.701295378461219,-0.41745265133321, + -0.000650503680897918,-0.0539252729430895,0.721732204469235,-0.430789180022333, + -0.000668847123218019,-0.0542177541981013,0.742169030477251,-0.444125708711455, + -0.000218148077783364,-0.0431136784634787,0.248799188503801,-0.130446240532712, + -0.000235022199236046,-0.0432286149130472,0.268684249767171,-0.144447064467877, + -0.000251896320688283,-0.0433435513626149,0.288569311030542,-0.158447888403041, + -0.000268770442140964,-0.0434584878121833,0.308454372293912,-0.172448712338206, + -0.000285644563593479,-0.0435734242617516,0.328339433557283,-0.18644953627337, + -0.000302518685046049,-0.0436883607113197,0.348224494820653,-0.200450360208535, + -0.000319392806498564,-0.0438032971608879,0.368109556084024,-0.2144511841437, + -0.000336266927951079,-0.0439182336104562,0.387994617347394,-0.228452008078864, + -0.000353141049403427,-0.0440331700600241,0.407879678610765,-0.242452832014029, + -0.000370015170855997,-0.0441481065095923,0.427764739874136,-0.256453655949194, + -0.000386889292308568,-0.0442630429591604,0.447649801137506,-0.270454479884358, + -0.000403763413761471,-0.0443779794087291,0.467534862400877,-0.284455303819523, + -0.000420637535213486,-0.0444929158582967,0.487419923664247,-0.298456127754687, + -0.000437511656666278,-0.0446078523078652,0.507304984927618,-0.312456951689852, + -0.000454385778118627,-0.0447227887574333,0.527190046190988,-0.326457775625017, + -0.000471259899571308,-0.0448377252070016,0.547075107454359,-0.340458599560182, + -0.000488134021023878,-0.0449526616565696,0.56696016871773,-0.354459423495347, + -0.000505008142476338,-0.0450675981061379,0.586845229981099,-0.368460247430511, + -0.000521882263928908,-0.0451825345557062,0.60673029124447,-0.382461071365675, + -0.000538756385381256,-0.045297471005274,0.626615352507841,-0.39646189530084, + -0.00055563050683427,-0.0454124074548425,0.646500413771211,-0.410462719236004, + -0.000572504628286397,-0.0455273439044106,0.666385475034582,-0.42446354317117, + -0.000589378749739189,-0.0456422803539791,0.686270536297951,-0.438464367106333, + -0.000606252871191315,-0.0457572168035463,0.706155597561323,-0.452465191041498, + -0.000623126992644107,-0.0458721532531152,0.726040658824693,-0.466466014976664, + -0.000204781344414262,-0.0384164175417704,0.244854401331128,-0.138148586646411, + -0.000219875354801669,-0.0383437017482647,0.264026326545991,-0.152949231694281, + -0.000234969365188853,-0.0382709859547589,0.283198251760854,-0.167749876742151, + -0.000250063375576426,-0.0381982701612533,0.302370176975716,-0.182550521790021, + -0.000265157385963721,-0.0381255543677477,0.321542102190579,-0.197351166837891, + -0.000280251396351294,-0.038052838574242,0.340714027405442,-0.212151811885762, + -0.000295345406738423,-0.0379801227807364,0.359885952620305,-0.226952456933632, + -0.000310439417125774,-0.0379074069872305,0.379057877835168,-0.241753101981502, + -0.000325533427512958,-0.0378346911937246,0.39822980305003,-0.256553747029372, + -0.000340627437900753,-0.0377619754002194,0.417401728264893,-0.271354392077243, + -0.000355721448288104,-0.037689259606714,0.436573653479755,-0.286155037125113, + -0.000370815458675122,-0.0376165438132077,0.455745578694619,-0.300955682172983, + -0.000385909469062362,-0.037543828019702,0.474917503909481,-0.315756327220853, + -0.000401003479449824,-0.0374711122261961,0.494089429124344,-0.330556972268724, + -0.000416097489837397,-0.0373983964326907,0.513261354339207,-0.345357617316594, + -0.000431191500224415,-0.0373256806391844,0.53243327955407,-0.360158262364464, + -0.000446285510611766,-0.0372529648456787,0.551605204768933,-0.374958907412334, + -0.000461379520999783,-0.0371802490521742,0.570777129983795,-0.389759552460204, + -0.000476473531386579,-0.0371075332586681,0.589949055198657,-0.404560197508074, + -0.000491567541774152,-0.0370348174651627,0.60912098041352,-0.419360842555945, + -0.000506661552161169,-0.0369621016716561,0.628292905628383,-0.434161487603815, + -0.000521755562549076,-0.0368893858781512,0.647464830843246,-0.448962132651685, + -0.000536849572935871,-0.0368166700846446,0.666636756058109,-0.463762777699555, + -0.000551943583323333,-0.0367439542911394,0.685808681272971,-0.478563422747425, + -0.000567037593710684,-0.0366712384976333,0.704980606487835,-0.493364067795296, + -0.000188312302296323,-0.0333027545366644,0.239663682021648,-0.147037492107954, + -0.000201350409809231,-0.0330495379784752,0.257946336683769,-0.162761172053508, + -0.000214388517322417,-0.0327963214202862,0.27622899134589,-0.178484851999062, + -0.00022742662483527,-0.0325431048620969,0.29451164600801,-0.194208531944617, + -0.000240464732348455,-0.032289888303908,0.31279430067013,-0.209932211890171, + -0.000253502839861142,-0.0320366717457181,0.331076955332251,-0.225655891835725, + -0.000266540947374383,-0.0317834551875296,0.349359609994372,-0.24137957178128, + -0.000279579054887291,-0.0315302386293399,0.367642264656493,-0.257103251726834, + -0.000292617162400588,-0.0312770220711511,0.385924919318613,-0.272826931672388, + -0.000305655269913441,-0.0310238055129615,0.404207573980734,-0.288550611617943, + -0.000318693377426404,-0.0307705889547725,0.422490228642854,-0.304274291563497, + -0.000331731484939479,-0.0305173723965833,0.440772883304975,-0.319997971509052, + -0.000344769592452665,-0.0302641558383943,0.459055537967095,-0.335721651454606, + -0.00035780769996574,-0.0300109392802053,0.477338192629216,-0.351445331400161, + -0.000370845807478482,-0.0297577227220156,0.495620847291336,-0.367169011345715, + -0.000383883914991556,-0.0295045061638264,0.513903501953457,-0.38289269129127, + -0.000396922022504409,-0.0292512896056372,0.532186156615578,-0.398616371236824, + -0.000409960130017373,-0.0289980730474479,0.550468811277698,-0.414340051182378, + -0.00042299823753067,-0.0287448564892592,0.568751465939818,-0.430063731127932, + -0.000436036345043411,-0.0284916399310693,0.587034120601939,-0.445787411073487, + -0.000449074452556486,-0.0282384233728803,0.605316775264059,-0.461511091019041, + -0.000462112560069672,-0.0279852068146913,0.62359942992618,-0.477234770964596, + -0.000475150667582969,-0.0277319902565027,0.6418820845883,-0.49295845091015, + -0.000488188775095377,-0.027478773698312,0.660164739250422,-0.508682130855704, + -0.000501226882608563,-0.0272255571401239,0.678447393912542,-0.524405810801259, + -0.000168941576360493,-0.0280720748629026,0.233169446040873,-0.156807605866084, + -0.000179740730544442,-0.027665828520984,0.250392748099001,-0.173545826464828, + -0.000190539884728114,-0.0272595821790648,0.267616050157129,-0.190284047063573, + -0.000201339038912007,-0.0268533358371459,0.284839352215256,-0.207022267662317, + -0.000212138193095956,-0.0264470894952271,0.302062654273384,-0.223760488261062, + -0.000222937347279906,-0.0260408431533083,0.319285956331511,-0.240498708859806, + -0.000233736501463522,-0.0256345968113891,0.336509258389639,-0.257236929458551, + -0.00024453565564786,-0.0252283504694708,0.353732560447767,-0.273975150057295, + -0.00025533480983142,-0.0248221041275516,0.370955862505894,-0.290713370656039, + -0.000266133964015536,-0.0244158577856328,0.388179164564022,-0.307451591254784, + -0.000276933118198985,-0.0240096114437136,0.40540246662215,-0.324189811853528, + -0.00028773227238299,-0.0236033651017944,0.422625768680278,-0.340928032452273, + -0.000298531426566773,-0.0231971187598758,0.439849070738405,-0.357666253051017, + -0.000309330580750444,-0.0227908724179564,0.457072372796533,-0.374404473649762, + -0.000320129734934116,-0.0223846260760372,0.474295674854661,-0.391142694248507, + -0.000330928889118454,-0.0219783797341189,0.491518976912789,-0.407880914847251, + -0.000341728043302014,-0.0215721333921997,0.508742278970916,-0.424619135445995, + -0.00035252719748613,-0.0211658870502809,0.525965581029044,-0.441357356044739, + -0.000363326351669913,-0.0207596407083621,0.543188883087171,-0.458095576643484, + -0.000374125505854139,-0.0203533943664436,0.560412185145299,-0.474833797242228, + -0.000384924660037145,-0.0199471480245239,0.577635487203426,-0.491572017840973, + -0.000395723814221371,-0.0195409016826051,0.594858789261554,-0.508310238439718, + -0.000406522968405043,-0.0191346553406864,0.612082091319682,-0.525048459038462, + -0.00041732212258927,-0.0187284089987676,0.629305393377809,-0.541786679637206, + -0.000428121276773386,-0.0183221626568488,0.646528695435937,-0.558524900235951, + -0.000147375830275187,-0.0230680050143636,0.225524121968931,-0.166987261886944, + -0.000155899325228193,-0.0225537475345226,0.241552403347803,-0.184782550512154, + -0.000164422820181032,-0.0220394900546814,0.257580684726674,-0.202577839137364, + -0.000172946315134093,-0.0215252325748405,0.273608966105546,-0.220373127762575, + -0.000181469810086932,-0.0210109750949994,0.289637247484418,-0.238168416387785, + -0.000189993305040048,-0.0204967176151585,0.30566552886329,-0.255963705012995, + -0.000198516799992776,-0.0199824601353171,0.321693810242162,-0.273758993638206, + -0.000207040294945671,-0.019468202655476,0.337722091621034,-0.291554282263416, + -0.000215563789898954,-0.0189539451756355,0.353750372999905,-0.309349570888626, + -0.000224087284851904,-0.0184396876957944,0.369778654378777,-0.327144859513836, + -0.000232610779804965,-0.0179254302159535,0.385806935757649,-0.344940148139046, + -0.000241134274757582,-0.0174111727361124,0.401835217136521,-0.362735436764257, + -0.000249657769710421,-0.016896915256271,0.417863498515393,-0.380530725389467, + -0.000258181264663593,-0.0163826577764301,0.433891779894265,-0.398326014014678, + -0.000266704759616432,-0.0158684002965892,0.449920061273137,-0.416121302639888, + -0.000275228254569604,-0.0153541428167483,0.465948342652009,-0.433916591265098, + -0.000283751749522332,-0.0148398853369067,0.481976624030881,-0.451711879890309, + -0.000292275244475615,-0.014325627857066,0.498004905409752,-0.469507168515518, + -0.000300798739428454,-0.0138113703772256,0.514033186788623,-0.487302457140728, + -0.000309322234380627,-0.0132971128973836,0.530061468167496,-0.505097745765939, + -0.000317845729334132,-0.0127828554175426,0.546089749546368,-0.522893034391149, + -0.000326369224287193,-0.0122685979377022,0.562118030925239,-0.54068832301636, + -0.000334892719239921,-0.0117543404578608,0.578146312304111,-0.55848361164157, + -0.000343416214192427,-0.011240082978019,0.594174593682983,-0.57627890026678, + -0.000351939709146154,-0.010725825498179,0.610202875061855,-0.594074188891991, + -0.000124781340769542,-0.0185925649659061,0.217111911363614,-0.177019598206651, + -0.000131163698672054,-0.0180240798120679,0.23187134262974,-0.195856656999005, + -0.000137546056574456,-0.0174555946582301,0.246630773895866,-0.214693715791358, + -0.000143928414476857,-0.016887109504392,0.261390205161992,-0.233530774583712, + -0.000150310772379314,-0.016318624350554,0.276149636428119,-0.252367833376066, + -0.000156693130281715,-0.0157501391967159,0.290909067694245,-0.27120489216842, + -0.00016307548818445,-0.0151816540428782,0.305668498960371,-0.290041950960773, + -0.000169457846086518,-0.0146131688890396,0.320427930226497,-0.308879009753127, + -0.000175840203988864,-0.0140446837352017,0.335187361492623,-0.327716068545481, + -0.000182222561891598,-0.0134761985813641,0.349946792758749,-0.346553127337835, + -0.000188604919794333,-0.0129077134275264,0.364706224024875,-0.365390186130188, + -0.000194987277696734,-0.0123392282736887,0.379465655291,-0.384227244922542, + -0.000201369635598803,-0.0117707431198495,0.394225086557127,-0.403064303714896, + -0.000207751993501204,-0.011202257966012,0.408984517823253,-0.42190136250725, + -0.000214134351403827,-0.0106337728121741,0.423743949089379,-0.440738421299604, + -0.000220516709306451,-0.0100652876583365,0.438503380355505,-0.459575480091957, + -0.000226899067208963,-0.00949680250449858,0.453262811621631,-0.478412538884311, + -0.000233281425111587,-0.00892831735066091,0.468022242887757,-0.497249597676664, + -0.000239663783013544,-0.00835983219682257,0.482781674153882,-0.516086656469018, + -0.000246046140916056,-0.00779134704298423,0.497541105420009,-0.534923715261372, + -0.000252428498819235,-0.00722286188914678,0.512300536686135,-0.553760774053725, + -0.000258810856720637,-0.006654376735308,0.527059967952261,-0.57259783284608, + -0.000265193214623483,-0.0060858915814701,0.541819399218387,-0.591434891638433, + -0.000271575572525773,-0.00551740642763221,0.556578830484513,-0.610271950430787, + -0.000277957930428285,-0.00494892127379343,0.57133826175064,-0.629109009223141, + -0.000102547718876467,-0.0148346633131522,0.208478544432048,-0.186378973240234, + -0.000107073886912112,-0.0142630400592851,0.221972677914883,-0.206187921070433, + -0.000111600054947925,-0.013691416805418,0.235466811397719,-0.225996868900631, + -0.000116126222983792,-0.013119793551551,0.248960944880554,-0.245805816730829, + -0.00012065239101966,-0.012548170297684,0.262455078363389,-0.265614764561028, + -0.000125178559055361,-0.0119765470438169,0.275949211846224,-0.285423712391226, + -0.000129704727091229,-0.0114049237899503,0.289443345329059,-0.305232660221425, + -0.000134230895126985,-0.0108333005360828,0.302937478811895,-0.325041608051623, + -0.000138757063162798,-0.0102616772822159,0.31643161229473,-0.344850555881822, + -0.000143283231198388,-0.00969005402834866,0.329925745777565,-0.36465950371202, + -0.000147809399234422,-0.00911843077448182,0.3434198792604,-0.384468451542219, + -0.000152335567270012,-0.00854680752061454,0.356914012743236,-0.404277399372417, + -0.000156861735306046,-0.00797518426674793,0.37040814622607,-0.424086347202615, + -0.000161387903341415,-0.0074035610128802,0.383902279708906,-0.443895295032814, + -0.000165914071377116,-0.00683193775901314,0.397396413191741,-0.463704242863013, + -0.000170440239413594,-0.00626031450514697,0.410890546674576,-0.483513190693211, + -0.000174966407449073,-0.00568869125127947,0.424384680157412,-0.503322138523409, + -0.000179492575484885,-0.00511706799741241,0.437878813640247,-0.523131086353608, + -0.000184018743521031,-0.00454544474354579,0.451372947123082,-0.542940034183806, + -0.000188544911556843,-0.00397382148967873,0.464867080605917,-0.562748982014005, + -0.000193071079592544,-0.00340219823581167,0.478361214088752,-0.582557929844203, + -0.000197597247628134,-0.00283057498194417,0.491855347571588,-0.602366877674401, + -0.000202123415663724,-0.00225895172807666,0.505349481054423,-0.622175825504599, + -0.000206649583700425,-0.00168732847421094,0.518843614537258,-0.641984773334798, + -0.000211175751735793,-0.00111570522034343,0.532337748020093,-0.661793721164997, + -8.19545731325921e-05,-0.011847105218636,0.200193061642561,-0.194674142680212, + -8.49986958874061e-05,-0.0113114945378022,0.212499956188785,-0.215344471127903, + -8.8042818642442e-05,-0.0107758838569688,0.224806850735009,-0.236014799575595, + -9.10869413977555e-05,-0.0102402731761357,0.237113745281232,-0.256685128023287, + -9.41310641523474e-05,-0.00970466249530189,0.249420639827456,-0.277355456470978, + -9.71751869071613e-05,-0.00916905181446825,0.26172753437368,-0.29802578491867, + -0.000100219309662086,-0.00863344113363507,0.274034428919903,-0.318696113366361, + -0.000103263432417566,-0.00809783045280188,0.286341323466127,-0.339366441814053, + -0.000106307555172047,-0.00756221977196825,0.29864821801235,-0.360036770261745, + -0.000109351677927028,-0.00702660909113439,0.310955112558574,-0.380707098709436, + -0.000112395800682008,-0.00649099841030099,0.323262007104798,-0.401377427157128, + -0.000115439923436877,-0.00595538772946735,0.335568901651021,-0.422047755604819, + -0.000118484046191747,-0.00541977704863417,0.347875796197245,-0.442718084052511, + -0.000121528168946616,-0.00488416636780054,0.360182690743468,-0.463388412500203, + -0.000124572291701708,-0.00434855568696735,0.372489585289692,-0.484058740947894, + -0.000127616414456466,-0.00381294500613305,0.384796479835916,-0.504729069395586, + -0.000130660537211669,-0.00327733432530053,0.397103374382139,-0.525399397843278, + -0.000133704659966316,-0.00274172364446645,0.409410268928363,-0.546069726290969, + -0.000136748782721297,-0.00220611296363327,0.421717163474586,-0.56674005473866, + -0.000139792905476055,-0.00167050228279875,0.434024058020811,-0.587410383186352, + -0.000142837028231368,-0.001134891601966,0.446330952567034,-0.608080711634044, + -0.000145881150986682,-0.000599280921133261,0.458637847113258,-0.628751040081736, + -0.000148925273741218,-6.36702402991851e-05,0.470944741659481,-0.649421368529427, + -0.000151969396495755,0.00047194044053489,0.483251636205705,-0.670091696977119, + -0.000155013519250624,0.00100755112136763,0.495558530751928,-0.690762025424811, + -6.39008497230753e-05,-0.00957315228300548,0.192711109273746,-0.201698592911911, + -6.58509058489853e-05,-0.00909685774987279,0.203964276096877,-0.223098348928492, + -6.7800961975284e-05,-0.00862056321674054,0.215217442920008,-0.244498104945073, + -6.9751018101083e-05,-0.00814426868360751,0.226470609743139,-0.265897860961655, + -7.17010742274926e-05,-0.00766797415047549,0.23772377656627,-0.287297616978236, + -7.36511303534026e-05,-0.00719167961734257,0.248976943389401,-0.308697372994817, + -7.56011864792572e-05,-0.00671538508420966,0.260230110212532,-0.330097129011399, + -7.75512426053337e-05,-0.00623909055107719,0.271483277035663,-0.35149688502798, + -7.95012987311328e-05,-0.00576279601794405,0.282736443858794,-0.372896641044561, + -8.14513548572648e-05,-0.00528650148481158,0.293989610681925,-0.394296397061142, + -8.34014109832859e-05,-0.00481020695167911,0.305242777505056,-0.415696153077724, + -8.5351467109307e-05,-0.00433391241854642,0.316495944328187,-0.437095909094305, + -8.7301523235439e-05,-0.00385761788541372,0.327749111151318,-0.458495665110886, + -8.92515793613491e-05,-0.00338132335228125,0.339002277974449,-0.479895421127468, + -9.12016354879253e-05,-0.00290502881914878,0.35025544479758,-0.501295177144049, + -9.31516916135022e-05,-0.00242873428601587,0.361508611620711,-0.52269493316063, + -9.51017477400784e-05,-0.00195243975288406,0.372761778443842,-0.544094689177212, + -9.70518038657664e-05,-0.0014761452197507,0.384014945266973,-0.565494445193793, + -9.90018599917875e-05,-0.000999850686618231,0.395268112090103,-0.586894201210374, + -0.000100951916118031,-0.000523556153486204,0.406521278913234,-0.608293957226955, + -0.000102901972243497,-4.72616203519571e-05,0.417774445736366,-0.629693713243537, + -0.00010485202836974,0.000429032912779626,0.429027612559496,-0.651093469260118, + -0.000106802084496538,0.000905327445911652,0.440280779382627,-0.672493225276699, + -0.000108752140621338,0.0013816219790459,0.451533946205759,-0.693892981293281, + -0.000110702196747803,0.00185791651217793,0.46278711302889,-0.715292737309862, + -4.88033117650999e-05,-0.00789628497602224,0.186300283828706,-0.207421042720615, + -5.00010394403061e-05,-0.00748802205088783,0.196662254302952,-0.229415024977596, + -5.11987671155123e-05,-0.00707975912575354,0.207024224777197,-0.251409007234577, + -5.2396494790663e-05,-0.00667149620061913,0.217386195251442,-0.273402989491558, + -5.35942224660912e-05,-0.00626323327548528,0.227748165725687,-0.295396971748539, + -5.47919501410754e-05,-0.00585497035035032,0.238110136199933,-0.31739095400552, + -5.59896778162261e-05,-0.00544670742521602,0.248472106674178,-0.339384936262501, + -5.71874054916544e-05,-0.00503844450008195,0.258834077148423,-0.361378918519482, + -5.8385133166694e-05,-0.00463018157494743,0.269196047622668,-0.383372900776463, + -5.95828608419557e-05,-0.00422191864981358,0.279558018096913,-0.405366883033444, + -6.07805885175505e-05,-0.00381365572467929,0.289919988571159,-0.427360865290425, + -6.19783161924792e-05,-0.00340539279954455,0.300281959045404,-0.449354847547406, + -6.31760438671858e-05,-0.00299712987440959,0.310643929519649,-0.471348829804387, + -6.43737715432247e-05,-0.0025888669492764,0.321005899993894,-0.493342812061368, + -6.55714992182643e-05,-0.00218060402414189,0.33136787046814,-0.515336794318349, + -6.6769226893304e-05,-0.00177234109900715,0.341729840942385,-0.53733077657533, + -6.79669545685657e-05,-0.00136407817387307,0.35209181141663,-0.559324758832311, + -6.91646822438274e-05,-0.000955815248738556,0.362453781890876,-0.581318741089292, + -7.0362409918201e-05,-0.000547552323603373,0.372815752365121,-0.603312723346273, + -7.15601375936847e-05,-0.000139289398469966,0.383177722839365,-0.625306705603254, + -7.27578652691685e-05,0.000268973526664773,0.393539693313611,-0.647300687860235, + -7.39555929444302e-05,0.000677236451798624,0.403901663787856,-0.669294670117216, + -7.51533206195809e-05,0.00108549937693292,0.414263634262101,-0.691288652374197, + -7.63510482952867e-05,0.00149376230206677,0.424625604736346,-0.713282634631178, + -7.75487759702154e-05,0.00190202522720151,0.434987575210592,-0.735276616888159, + -3.6657207693358e-05,-0.00668517436174343,0.181040341264463,-0.211937548857577, + -3.73682522203378e-05,-0.0063431899145856,0.190678143685197,-0.234400530677896, + -3.80792967470955e-05,-0.00600120546742733,0.200315946105931,-0.256863512498215, + -3.87903412739643e-05,-0.00565922102026928,0.209953748526665,-0.279326494318535, + -3.9501385800722e-05,-0.00531723657311112,0.219591550947399,-0.301789476138854, + -4.02124303273688e-05,-0.00497525212595296,0.229229353368133,-0.324252457959174, + -4.09234748546261e-05,-0.00463326767879524,0.238867155788867,-0.346715439779493, + -4.16345193815504e-05,-0.0042912832316373,0.248504958209601,-0.369178421599812, + -4.23455639082526e-05,-0.00394929878447869,0.258142760630335,-0.391641403420132, + -4.30566084352879e-05,-0.00360731433732098,0.267780563051069,-0.414104385240451, + -4.37676529622122e-05,-0.00326532989016304,0.277418365471803,-0.43656736706077, + -4.44786974886924e-05,-0.00292334544300443,0.287056167892537,-0.45903034888109, + -4.51897420157277e-05,-0.00258136099584649,0.296693970313271,-0.481493330701409, + -4.59007865424299e-05,-0.00223937654868833,0.306331772734005,-0.503956312521729, + -4.66118310696872e-05,-0.00189739210153061,0.315969575154739,-0.526419294342048, + -4.73228755961674e-05,-0.00155540765437268,0.325607377575472,-0.548882276162367, + -4.80339201235358e-05,-0.00121342320721474,0.335245179996206,-0.571345257982687, + -4.8744964650127e-05,-0.000871438760056353,0.34488298241694,-0.593808239803006, + -4.94560091767182e-05,-0.000529454312897748,0.354520784837675,-0.616271221623325, + -5.01670537036425e-05,-0.000187469865740031,0.364158587258408,-0.638734203443645, + -5.08780982301227e-05,0.000154514581419019,0.373796389679143,-0.661197185263964, + -5.15891427580462e-05,0.000496499028575403,0.383434192099876,-0.683660167084283, + -5.23001872844153e-05,0.000838483475734009,0.39307199452061,-0.706123148904603, + -5.30112318110065e-05,0.00118046792289261,0.402709796941344,-0.728586130724922, + -5.37222763382639e-05,0.00152245237004989,0.412347599362078,-0.751049112545242, + -2.71794826884886e-05,-0.00582096312288161,0.176871403320773,-0.215413996228058, + -2.75910491914777e-05,-0.00553759727282632,0.185939311595505,-0.238237976627652, + -2.80026156946889e-05,-0.00525423142277137,0.195007219870237,-0.261061957027245, + -2.84141821976225e-05,-0.00497086557271609,0.204075128144968,-0.283885937426838, + -2.88257487006116e-05,-0.00468749972266069,0.2131430364197,-0.306709917826431, + -2.92373152036562e-05,-0.0044041338726053,0.222210944694432,-0.329533898226025, + -2.96488817068674e-05,-0.00412076802255057,0.231278852969163,-0.352357878625618, + -3.00604482095235e-05,-0.00383740217249473,0.240346761243895,-0.375181859025211, + -3.04720147126236e-05,-0.00355403632243934,0.249414669518627,-0.398005839424804, + -3.08835812159458e-05,-0.00327067047238461,0.258482577793358,-0.420829819824398, + -3.1295147719157e-05,-0.00298730462232943,0.26755048606809,-0.443653800223991, + -3.1706714221702e-05,-0.00270393877227337,0.276618394342822,-0.466477780623584, + -3.21182807252463e-05,-0.00242057292221909,0.285686302617553,-0.489301761023178, + -3.25298472279023e-05,-0.00213720707216369,0.294754210892285,-0.512125741422771, + -3.29414137306694e-05,-0.00185384122210808,0.303822119167017,-0.534949721822364, + -3.33529802343246e-05,-0.00157047537205357,0.312890027441748,-0.557773702221957, + -3.37645467367587e-05,-0.00128710952199773,0.32195793571648,-0.58059768262155, + -3.41761132395257e-05,-0.00100374367194211,0.331025843991212,-0.603421663021144, + -3.4587679743292e-05,-0.00072037782188783,0.340093752265943,-0.626245643420737, + -3.4999246245726e-05,-0.000437011971831769,0.349161660540675,-0.64906962382033, + -3.54108127487152e-05,-0.000153646121776596,0.358229568815407,-0.671893604219924, + -3.58223792520374e-05,0.000129719728277689,0.367297477090138,-0.694717584619517, + -3.62339457548044e-05,0.000413085578333749,0.37636538536487,-0.71754156501911, + -3.66455122579046e-05,0.000696451428389366,0.385433293639602,-0.740365545418703, + -3.70570787603386e-05,0.000979817278445427,0.394501201914334,-0.763189525818296, + -1.99549688742473e-05,-0.00520790955741457,0.173654690367246,-0.218038603065309, + -2.01892717745511e-05,-0.004973198377072,0.182285150774053,-0.24113512587341, + -2.04235746748549e-05,-0.00473848719672942,0.190915611180859,-0.264231648681511, + -2.06578775754362e-05,-0.00450377601638707,0.199546071587666,-0.287328171489611, + -2.0892180475296e-05,-0.00426906483604395,0.208176531994472,-0.310424694297712, + -2.11264833759883e-05,-0.00403435365570193,0.216806992401279,-0.333521217105813, + -2.13607862764031e-05,-0.00379964247535947,0.225437452808085,-0.356617739913913, + -2.15950891762628e-05,-0.00356493129501589,0.234067913214892,-0.379714262722014, + -2.18293920768442e-05,-0.00333022011467365,0.242698373621699,-0.402810785530115, + -2.2063694977259e-05,-0.00309550893433119,0.251328834028505,-0.425907308338215, + -2.22979978773408e-05,-0.00286079775398851,0.259959294435312,-0.449003831146316, + -2.25323007779776e-05,-0.00262608657364605,0.268589754842118,-0.472100353954416, + -2.27666036783924e-05,-0.00239137539330403,0.277220215248924,-0.495196876762517, + -2.30009065782522e-05,-0.00215666421296024,0.285850675655732,-0.518293399570617, + -2.3235209478667e-05,-0.00192195303261822,0.294481136062538,-0.541389922378718, + -2.34695123793038e-05,-0.00168724185227576,0.303111596469344,-0.564486445186819, + -2.37038152792746e-05,-0.00145253067193285,0.311742056876151,-0.587582967994919, + -2.39381181798004e-05,-0.00121781949159061,0.320372517282957,-0.61067949080302, + -2.41724210798822e-05,-0.000983108311247705,0.329002977689764,-0.633776013611121, + -2.440672398063e-05,-0.000748397130905687,0.33763343809657,-0.656872536419221, + -2.46410268810449e-05,-0.000513685950563225,0.346263898503377,-0.679969059227322, + -2.48753297809046e-05,-0.000278974770220319,0.354894358910183,-0.703065582035423, + -2.51096326808753e-05,-4.42635898769694e-05,0.36352481931699,-0.726162104843523, + -2.53439355815122e-05,0.000190447590465492,0.372155279723797,-0.749258627651624, + -2.5578238482149e-05,0.00042515877080751,0.380785740130603,-0.772355150459724, + -1.45437579358587e-05,-0.00477388014024482,0.171222799841025,-0.219991290632827, + -1.46760576720806e-05,-0.00457783107770926,0.179523785723102,-0.243290582924403, + -1.48083574079694e-05,-0.00438178201517347,0.18782477160518,-0.266589875215978, + -1.49406571438027e-05,-0.00418573295263736,0.196125757487258,-0.289889167507553, + -1.5072956879858e-05,-0.0039896838901019,0.204426743369335,-0.313188459799129, + -1.52052566158578e-05,-0.00379363482756623,0.212727729251412,-0.336487752090704, + -1.53375563515801e-05,-0.00359758576503033,0.22102871513349,-0.35978704438228, + -1.54698560872468e-05,-0.00340153670249421,0.229329701015567,-0.383086336673855, + -1.56021558235242e-05,-0.00320548763995898,0.237630686897645,-0.40638562896543, + -1.57344555596906e-05,-0.00300943857742375,0.245931672779722,-0.429684921257006, + -1.58667552953018e-05,-0.00281338951488719,0.2542326586618,-0.452984213548581, + -1.59990550313571e-05,-0.00261734045235174,0.262533644543877,-0.476283505840157, + -1.61313547669684e-05,-0.00242129138981562,0.270834630425954,-0.499582798131732, + -1.62636545031347e-05,-0.00222524232728016,0.279135616308032,-0.522882090423307, + -1.63959542386349e-05,-0.0020291932647436,0.28743660219011,-0.546181382714883, + -1.65282539746903e-05,-0.00183314420220793,0.295737588072187,-0.569480675006458, + -1.66605537109676e-05,-0.00163709513967292,0.304038573954264,-0.592779967298034, + -1.67928534466899e-05,-0.00144104607713658,0.312339559836342,-0.616079259589609, + -1.69251531828563e-05,-0.00124499701460135,0.320640545718419,-0.639378551881185, + -1.70574529181344e-05,-0.00104894795206434,0.328941531600497,-0.66267784417276, + -1.71897526540787e-05,-0.000852898889529108,0.337242517482574,-0.685977136464335, + -1.73220523910222e-05,-0.000656849826993877,0.345543503364652,-0.70927642875591, + -1.74543521264114e-05,-0.000460800764458202,0.353844489246729,-0.732575721047486, + -1.75866518623558e-05,-0.000264751701922528,0.362145475128806,-0.755875013339061, + -1.77189515983001e-05,-6.87026393868528e-05,0.370446461010884,-0.779174305630637, + -1.05428704574306e-05,-0.00446653785499607,0.16941205445849,-0.221428303171678, + -1.06175524133278e-05,-0.00430028647719183,0.177468386034947,-0.244876816616242, + -1.06922343692251e-05,-0.00413403509938748,0.185524717611403,-0.268325330060805, + -1.07669163251223e-05,-0.00396778372158346,0.193581049187859,-0.291773843505368, + -1.0841598280853e-05,-0.003801532343779,0.201637380764316,-0.315222356949931, + -1.09162802365281e-05,-0.00363528096597454,0.209693712340772,-0.338670870394494, + -1.09909621924253e-05,-0.0034690295881703,0.217750043917228,-0.362119383839057, + -1.10656441482115e-05,-0.00330277821036562,0.225806375493685,-0.38556789728362, + -1.11403261041643e-05,-0.00313652683256183,0.233862707070141,-0.409016410728183, + -1.12150080595619e-05,-0.0029702754547567,0.241919038646597,-0.432464924172746, + -1.12896900158477e-05,-0.00280402407695313,0.249975370223053,-0.455913437617309, + -1.13643719718004e-05,-0.00263777269914911,0.25803170179951,-0.479361951061872, + -1.1439053927087e-05,-0.00247152132134443,0.266088033375966,-0.502810464506435, + -1.15137358831507e-05,-0.00230526994353975,0.274144364952423,-0.526258977950998, + -1.15884178389924e-05,-0.00213901856573573,0.282200696528879,-0.549707491395561, + -1.16630997948342e-05,-0.00197276718793171,0.290257028105335,-0.573156004840124, + -1.17377817503428e-05,-0.00180651581012681,0.298313359681791,-0.596604518284687, + -1.18124637062955e-05,-0.00164026443232279,0.306369691258247,-0.62005303172925, + -1.18871456620262e-05,-0.00147401305451789,0.314426022834704,-0.643501545173812, + -1.1961827618534e-05,-0.00130776167671476,0.32248235441116,-0.666950058618376, + -1.20365095735986e-05,-0.00114151029890985,0.330538685987616,-0.690398572062939, + -1.21111915298844e-05,-0.000975258921106281,0.338595017564072,-0.713847085507502, + -1.21858734856151e-05,-0.000809007543301377,0.346651349140529,-0.737295598952065, + -1.22605554413457e-05,-0.000642756165496916,0.354707680716985,-0.760744112396628, + -1.23352373974095e-05,-0.0004765047876929,0.362764012293442,-0.784192625841191, + -7.61258073717075e-06,-0.00424864627727706,0.16807888994616,-0.222477349273512, + -7.65503377453403e-06,-0.00410486947323174,0.1759554472951,-0.246034796958118, + -7.69748681206384e-06,-0.00396109266918687,0.183832004644041,-0.269592244642725, + -7.7399398493716e-06,-0.00381731586514178,0.191708561992982,-0.293149692327332, + -7.78239288673488e-06,-0.00367353906109646,0.199585119341923,-0.316707140011938, + -7.82484592409816e-06,-0.00352976225705137,0.207461676690864,-0.340264587696544, + -7.86729896146143e-06,-0.0033859854530065,0.215338234039804,-0.363822035381151, + -7.90975199910227e-06,-0.00324220864896163,0.223214791388745,-0.387379483065758, + -7.9522050362435e-06,-0.00309843184491632,0.231091348737686,-0.410936930750364, + -7.99465807377331e-06,-0.00295465504087122,0.238967906086627,-0.434494378434971, + -8.03711111108107e-06,-0.00281087823682591,0.246844463435568,-0.458051826119577, + -8.07956414838884e-06,-0.00266710143278082,0.254721020784508,-0.481609273804184, + -8.12201718569661e-06,-0.0025233246287355,0.262597578133449,-0.50516672148879, + -8.16447022300437e-06,-0.00237954782469085,0.270474135482389,-0.528724169173396, + -8.20692326042316e-06,-0.00223577102064509,0.278350692831331,-0.552281616858003, + -8.24937629806399e-06,-0.00209199421660067,0.286227250180271,-0.57583906454261, + -8.29182933537176e-06,-0.00194821741255513,0.294103807529212,-0.599396512227216, + -8.33428237323464e-06,-0.00180444060851048,0.301980364878153,-0.622953959911823, + -8.37673540976525e-06,-0.0016606638044645,0.309856922227094,-0.646511407596429, + -8.41918844685097e-06,-0.00151688700041941,0.317733479576034,-0.670068855281036, + -8.46164148438078e-06,-0.00137311019637432,0.325610036924975,-0.693626302965642, + -8.50409452179957e-06,-0.00122933339232967,0.333486594273916,-0.717183750650249, + -8.54654755888529e-06,-0.00108555658828413,0.341363151622857,-0.740741198334855, + -8.58900059730328e-06,-0.000941779784239927,0.349239708971798,-0.764298646019462, + -8.63145363372286e-06,-0.000798002980193502,0.357116266320739,-0.787856093704068, + -5.48107768499895e-06,-0.00409394044038736,0.167105395083023,-0.223238683404435, + -5.50553729483649e-06,-0.00396685621611603,0.174850863792921,-0.246875188963453, + -5.52999690445199e-06,-0.00383977199184504,0.182596332502818,-0.270511694522472, + -5.55445651478914e-06,-0.00371268776757483,0.190341801212715,-0.294148200081491, + -5.5789161246822e-06,-0.00358560354330417,0.198087269922612,-0.317784705640509, + -5.60337573435321e-06,-0.00345851931903307,0.205832738632509,-0.341421211199528, + -5.62783534435729e-06,-0.00333143509476219,0.213578207342407,-0.365057716758546, + -5.65229495425035e-06,-0.00320435087049131,0.221323676052304,-0.388694222317565, + -5.67675456442096e-06,-0.00307726664622088,0.229069144762201,-0.412330727876584, + -5.70121417409197e-06,-0.00295018242195,0.236814613472098,-0.435967233435602, + -5.72567378398503e-06,-0.0028230981976789,0.244560082181996,-0.459603738994621, + -5.75013339398911e-06,-0.00269601397340846,0.252305550891893,-0.48324024455364, + -5.77459300377114e-06,-0.0025689297491378,0.26005101960179,-0.506876750112658, + -5.79905261399727e-06,-0.0024418455248667,0.267796488311687,-0.530513255671677, + -5.82351222366828e-06,-0.00231476130059582,0.275541957021584,-0.554149761230695, + -5.84797183345032e-06,-0.00218767707632472,0.283287425731482,-0.577786266789714, + -5.87243144301031e-06,-0.0020605928520534,0.291032894441379,-0.601422772348733, + -5.89689105345848e-06,-0.00193350862778363,0.298778363151276,-0.625059277907751, + -5.92135066279642e-06,-0.00180642440351209,0.306523831861173,-0.64869578346677, + -5.94581027291152e-06,-0.00167934017924187,0.31426930057107,-0.672332289025788, + -5.97026988313765e-06,-0.00155225595497122,0.322014769280967,-0.695968794584807, + -5.99472949314173e-06,-0.00142517173070011,0.329760237990865,-0.719605300143826, + -6.01918910325683e-06,-0.0012980875064299,0.337505706700762,-0.743241805702844, + -6.0436487127058e-06,-0.0011710032821588,0.345251175410659,-0.766878311261863, + -6.06810832293192e-06,-0.00104391905788859,0.352996644120556,-0.790514816820882, + -3.93827156464077e-06,-0.00398393860121116,0.166398779280903,-0.223788859236162, + -3.95263214225672e-06,-0.00386911732963868,0.174049192917986,-0.247482495731576, + -3.9669927195396e-06,-0.00375429605806565,0.18169960655507,-0.27117613222699, + -3.98135329715554e-06,-0.00363947478649318,0.189350020192153,-0.294869768722404, + -3.99571387471598e-06,-0.00352465351492026,0.197000433829236,-0.318563405217818, + -4.01007445205437e-06,-0.00340983224334757,0.20465084746632,-0.342257041713232, + -4.02443502950378e-06,-0.00329501097177465,0.212301261103403,-0.365950678208646, + -4.03879560728626e-06,-0.0031801897002024,0.219951674740486,-0.389644314704059, + -4.05315618479118e-06,-0.00306536842862926,0.22760208837757,-0.413337951199473, + -4.06751676207406e-06,-0.00295054715705634,0.235252502014653,-0.437031587694887, + -4.08187733980103e-06,-0.00283572588548409,0.242902915651736,-0.460725224190301, + -4.09623791708391e-06,-0.00272090461391117,0.25055332928882,-0.484418860685715, + -4.11059849447781e-06,-0.00260608334233825,0.258203742925903,-0.508112497181129, + -4.12495907253785e-06,-0.00249126207076644,0.265854156562986,-0.531806133676543, + -4.13931964948766e-06,-0.00237644079919286,0.27350457020007,-0.555499770171957, + -4.15368022710361e-06,-0.00226161952762038,0.281154983837153,-0.579193406667371, + -4.1680408049416e-06,-0.00214679825604813,0.288805397474236,-0.602887043162785, + -4.18240138266857e-06,-0.00203197698447521,0.29645581111132,-0.626580679658198, + -4.19676195950736e-06,-0.00191715571290141,0.304106224748404,-0.650274316153612, + -4.21112253734535e-06,-0.00180233444132982,0.311756638385486,-0.673967952649026, + -4.2254831145172e-06,-0.00168751316975646,0.31940705202257,-0.69766158914444, + -4.23984369168906e-06,-0.0015726918981831,0.327057465659653,-0.721355225639854, + -4.25420426986012e-06,-0.00145787062661151,0.334707879296736,-0.745048862135268, + -4.26856484692095e-06,-0.00134304935503771,0.34235829293382,-0.768742498630682, + -4.2829254245369e-06,-0.00122822808346523,0.350008706570903,-0.792436135126095, + -2.8255415050471e-06,-0.00390562563951535,0.165888096140561,-0.224185216446855, + -2.8341668102394e-06,-0.00379974294697316,0.173469861687616,-0.247920011163492, + -2.84279211559824e-06,-0.00369386025443141,0.18105162723467,-0.271654805880129, + -2.85141742067951e-06,-0.003587977561889,0.188633392781724,-0.295389600596766, + -2.86004272620488e-06,-0.00348209486934703,0.196215158328779,-0.319124395313403, + -2.86866803156371e-06,-0.00337621217680484,0.203796923875833,-0.34285919003004, + -2.87729333714459e-06,-0.00327032948426331,0.211378689422887,-0.366593984746677, + -2.88591864228138e-06,-0.0031644467917209,0.218960454969942,-0.390328779463314, + -2.89454394719613e-06,-0.00305856409917871,0.226542220516996,-0.414063574179951, + -2.903169252777e-06,-0.00295268140663674,0.23412398606405,-0.437798368896589, + -2.91179455791379e-06,-0.00284679871409454,0.241705751611105,-0.461533163613225, + -2.92041986360569e-06,-0.00274091602155258,0.249287517158159,-0.485267958329863, + -2.92904516874248e-06,-0.00263503332901038,0.256869282705213,-0.5090027530465, + -2.93767047421234e-06,-0.00252915063646864,0.264451048252267,-0.532737547763137, + -2.94629577912708e-06,-0.00242326794392644,0.272032813799322,-0.556472342479774, + -2.9549210843749e-06,-0.00231738525138403,0.279614579346376,-0.580207137196411, + -2.96354638995577e-06,-0.0022115025588425,0.28719634489343,-0.603941931913048, + -2.97217169487052e-06,-0.00210561986629942,0.294778110440485,-0.627676726629685, + -2.9807970004514e-06,-0.00199973717375768,0.302359875987539,-0.651411521346322, + -2.98942230636534e-06,-0.00189385448121637,0.309941641534593,-0.675146316062959, + -2.99804761072497e-06,-0.00178797178867374,0.317523407081648,-0.698881110779596, + -3.0066729165279e-06,-0.00168208909613199,0.325105172628702,-0.722615905496233, + -3.01529822188673e-06,-0.0015762064035898,0.332686938175756,-0.746350700212871, + -3.02392352746761e-06,-0.00147032371104805,0.340268703722811,-0.770085494929508, + -3.03254883204929e-06,-0.00136444101850497,0.347850469269865,-0.793820289646145, + -2.02504840152162e-06,-0.00384981663134298,0.165520168050654,-0.224470125042806, + -2.03035955431696e-06,-0.00375041303838319,0.173052500907214,-0.248234505019163, + -2.0356707066127e-06,-0.00365100944542318,0.180584833763774,-0.271998884995521, + -2.04098185996315e-06,-0.00355160585246428,0.188117166620333,-0.295763264971879, + -2.04629301253645e-06,-0.00345220225950427,0.195649499476893,-0.319527644948237, + -2.05160416527628e-06,-0.0033527986665447,0.203181832333453,-0.343292024924595, + -2.05691531823815e-06,-0.00325339507358557,0.210714165190012,-0.367056404900952, + -2.06222647081145e-06,-0.00315399148062534,0.218246498046572,-0.39082078487731, + -2.06753762377332e-06,-0.00305458788766622,0.225778830903131,-0.414585164853668, + -2.0728487762911e-06,-0.00295518429470643,0.233311163759691,-0.438349544830026, + -2.07815992914195e-06,-0.00285578070174686,0.240843496616251,-0.462113924806384, + -2.08347108188178e-06,-0.00275637710878729,0.248375829472811,-0.485878304782741, + -2.08878223462161e-06,-0.00265697351582772,0.25590816232937,-0.509642684759099, + -2.09409338736144e-06,-0.00255756992286815,0.26344049518593,-0.533407064735457, + -2.09940454010127e-06,-0.00245816632990836,0.27097282804249,-0.557171444711815, + -2.10471569306314e-06,-0.00235876273694902,0.278505160899049,-0.580935824688173, + -2.11002684569195e-06,-0.00225935914398923,0.286037493755609,-0.60470020466453, + -2.11533799843178e-06,-0.00215995555102921,0.293569826612169,-0.628464584640888, + -2.12064915150467e-06,-0.00206055195807009,0.301102159468729,-0.652228964617246, + -2.12596030435552e-06,-0.00196114836511052,0.308634492325288,-0.675993344593604, + -2.13127145720637e-06,-0.0018617447721514,0.316166825181848,-0.699757724569962, + -2.13658260961314e-06,-0.00176234117919138,0.323699158038407,-0.723522104546319, + -2.14189376246399e-06,-0.00166293758623137,0.331231490894968,-0.747286484522677, + -2.1472049146487e-06,-0.00156353399327092,0.338763823751528,-0.771050864499035, + -2.15251606783262e-06,-0.00146413040031224,0.346296156608087,-0.794815244475393, + -1.45023219166873e-06,-0.00381001374802681,0.165255684628993,-0.224674594955478, + -1.45358602143819e-06,-0.00371528779198183,0.172752496235725,-0.248460207339553, + -1.45693985115214e-06,-0.00362056183593662,0.180249307842458,-0.272245819723629, + -1.46029368097711e-06,-0.00352583587989197,0.187746119449191,-0.296031432107704, + -1.46364751058004e-06,-0.00343110992384665,0.195242931055924,-0.31981704449178, + -1.46700134051603e-06,-0.003336383967802,0.202739742662657,-0.343602656875855, + -1.47035516978589e-06,-0.00324165801175647,0.21023655426939,-0.36738826925993, + -1.47370899999943e-06,-0.00314693205571204,0.217733365876122,-0.391173881644006, + -1.47706282938032e-06,-0.00305220609966694,0.225230177482855,-0.414959494028081, + -1.48041665892773e-06,-0.0029574801436214,0.232726989089588,-0.438745106412157, + -1.48377048891923e-06,-0.00286275418757653,0.240223800696321,-0.462530718796232, + -1.48712431857767e-06,-0.00276802823153144,0.247720612303054,-0.486316331180307, + -1.49047814823611e-06,-0.00267330227548612,0.255217423909787,-0.510101943564383, + -1.49383197789454e-06,-0.00257857631944147,0.262714235516519,-0.533887555948458, + -1.49718580799707e-06,-0.0024838503633966,0.270211047123252,-0.557673168332534, + -1.50053963721142e-06,-0.00238912440735128,0.277707858729985,-0.581458780716609, + -1.5038934670919e-06,-0.00229439845130619,0.285204670336718,-0.605244393100684, + -1.50724729730545e-06,-0.00219967249526176,0.292701481943451,-0.62903000548476, + -1.51060112685286e-06,-0.00210494653921689,0.300198293550183,-0.652815617868835, + -1.51395495706641e-06,-0.00201022058317246,0.307695105156916,-0.676601230252911, + -1.51730878605871e-06,-0.00191549462712626,0.315191916763649,-0.700386842636986, + -1.52066261605022e-06,-0.00182076867108183,0.322688728370382,-0.724172455021062, + -1.52401644559763e-06,-0.00172604271503651,0.330185539977115,-0.747958067405137, + -1.52737027558913e-06,-0.00163131675899209,0.337682351583847,-0.771743679789213, + -1.53072410569166e-06,-0.00153659080294766,0.34517916319058,-0.795529292173288, + -0.000290365556621486,-0.0831048794773134,0.270183118729893,-0.0811597439040615, + -0.000317727021539316,-0.0851696668271098,0.293139119567801,-0.089629629797002, + -0.000345088486457201,-0.0872344541769061,0.316095120405709,-0.0980995156899426, + -0.000372449951375031,-0.0892992415267024,0.339051121243617,-0.106569401582883, + -0.000399811416292473,-0.0913640288764984,0.362007122081525,-0.115039287475824, + -0.000427172881210525,-0.093428816226295,0.384963122919433,-0.123509173368764, + -0.000454534346128355,-0.0954936035760914,0.407919123757341,-0.131979059261705, + -0.000481895811046018,-0.0975583909258875,0.430875124595249,-0.140448945154645, + -0.000509257275963848,-0.0996231782756838,0.453831125433157,-0.148918831047585, + -0.000536618740881512,-0.10168796562548,0.476787126271066,-0.157388716940526, + -0.000563980205799286,-0.103752752975276,0.499743127108973,-0.165858602833466, + -0.000591341670717282,-0.105817540325073,0.522699127946882,-0.174328488726407, + -0.000618703135634613,-0.107882327674869,0.54565512878479,-0.182798374619348, + -0.00064606460055272,-0.109947115024665,0.568611129622698,-0.191268260512289, + -0.000673426065470495,-0.112011902374461,0.591567130460606,-0.199738146405229, + -0.000700787530388602,-0.114076689724258,0.614523131298514,-0.208208032298169, + -0.000728148995305933,-0.116141477074054,0.637479132136422,-0.21667791819111, + -0.00075551046022404,-0.118206264423851,0.66043513297433,-0.22514780408405, + -0.000782871925141593,-0.120271051773646,0.683391133812238,-0.233617689976991, + -0.000810233390059145,-0.122335839123443,0.706347134650147,-0.242087575869932, + -0.000837594854977031,-0.124400626473239,0.729303135488054,-0.250557461762871, + -0.000864956319894805,-0.126465413823035,0.752259136325962,-0.259027347655812, + -0.000892317784812802,-0.128530201172832,0.77521513716387,-0.267497233548752, + -0.000919679249730465,-0.130594988522628,0.798171138001779,-0.275967119441694, + -0.000947040714648462,-0.132659775872424,0.821127138839687,-0.284437005334635, + -0.000285439044318658,-0.0788884600813667,0.269908099348282,-0.0863975780654059, + -0.000311814613315697,-0.0807116562214574,0.292640773346268,-0.0953862696122311, + -0.000338190182312514,-0.0825348523615481,0.315373447344253,-0.104374961159056, + -0.00036456575130972,-0.0843580485016392,0.338106121342238,-0.113363652705881, + -0.000390941320307037,-0.0861812446417302,0.360838795340224,-0.122352344252706, + -0.000417316889304076,-0.088004440781821,0.38357146933821,-0.131341035799531, + -0.000443692458300948,-0.0898276369219116,0.406304143336196,-0.140329727346357, + -0.000470068027297932,-0.0916508330620025,0.429036817334181,-0.149318418893182, + -0.000496443596295304,-0.0934740292020937,0.451769491332166,-0.158307110440007, + -0.000522819165292066,-0.0952972253421842,0.474502165330152,-0.167295801986832, + -0.000549194734289049,-0.097120421482275,0.497234839328137,-0.176284493533656, + -0.000575570303286366,-0.0989436176223661,0.519967513326123,-0.185273185080482, + -0.000601945872283127,-0.100766813762457,0.542700187324108,-0.194261876627307, + -0.000628321441280444,-0.102590009902548,0.565432861322094,-0.203250568174133, + -0.000654697010277649,-0.104413206042639,0.588165535320079,-0.212239259720957, + -0.000681072579274633,-0.106236402182729,0.610898209318065,-0.221227951267783, + -0.000707448148271617,-0.10805959832282,0.63363088331605,-0.230216642814608, + -0.000733823717268933,-0.109882794462911,0.656363557314036,-0.239205334361433, + -0.000760199286265473,-0.111705990603002,0.679096231312021,-0.248194025908258, + -0.000786574855262789,-0.113529186743093,0.701828905310007,-0.257182717455083, + -0.000812950424259884,-0.115352382883184,0.724561579307992,-0.266171409001908, + -0.000839325993256868,-0.117175579023274,0.747294253305977,-0.275160100548733, + -0.000865701562253851,-0.118998775163365,0.770026927303963,-0.284148792095558, + -0.000892077131250613,-0.120821971303456,0.792759601301949,-0.293137483642384, + -0.000918452700247707,-0.122645167443546,0.815492275299935,-0.30212617518921, + -0.000278517917485899,-0.0735827109712001,0.269214791543963,-0.0931462226777854, + -0.000303590963914135,-0.0751102086031479,0.291626147898498,-0.102803365128765, + -0.000328664010342372,-0.0766377062350957,0.314037504253033,-0.112460507579744, + -0.000353737056770553,-0.0781652038670434,0.336448860607568,-0.122117650030723, + -0.000378810103198957,-0.0796927014989917,0.358860216962103,-0.131774792481703, + -0.000403883149626971,-0.0812201991309393,0.381271573316638,-0.141431934932682, + -0.000428956196055541,-0.0827476967628875,0.403682929671172,-0.151089077383661, + -0.000454029242483833,-0.0842751943948354,0.426094286025707,-0.160746219834641, + -0.000479102288912125,-0.0858026920267834,0.448505642380242,-0.17040336228562, + -0.000504175335339863,-0.0873301896587306,0.470916998734777,-0.180060504736599, + -0.000529248381768377,-0.088857687290679,0.493328355089311,-0.189717647187578, + -0.000554321428196447,-0.0903851849226263,0.515739711443847,-0.199374789638558, + -0.000579394474624739,-0.0919126825545744,0.538151067798381,-0.209031932089537, + -0.000604467521053254,-0.0934401801865226,0.560562424152916,-0.218689074540517, + -0.000629540567481546,-0.0949676778184705,0.58297378050745,-0.228346216991495, + -0.000654613613909394,-0.096495175450418,0.605385136861986,-0.238003359442475, + -0.000679686660337797,-0.0980226730823657,0.627796493216521,-0.247660501893454, + -0.000704759706765978,-0.0995501707143136,0.650207849571056,-0.257317644344434, + -0.00072983275319416,-0.101077668346262,0.67261920592559,-0.266974786795413, + -0.000754905799622563,-0.102605165978209,0.695030562280125,-0.276631929246392, + -0.000779978846050855,-0.104132663610157,0.717441918634659,-0.286289071697371, + -0.000805051892478925,-0.105660161242105,0.739853274989195,-0.295946214148351, + -0.000830124938907328,-0.107187658874053,0.762264631343729,-0.30560335659933, + -0.000855197985335399,-0.108715156506001,0.784675987698264,-0.31526049905031, + -0.000880271031763469,-0.110242654137948,0.8070873440528,-0.324917641501289, + -0.000268932171180125,-0.0671413516680254,0.267806399191215,-0.101606868718142, + -0.000292324722309001,-0.0683235465568256,0.28976151765628,-0.11210203521991, + -0.000315717273438099,-0.0695057414456262,0.311716636121344,-0.122597201721679, + -0.000339109824566919,-0.0706879363344263,0.333671754586409,-0.133092368223448, + -0.00036250237569585,-0.0718701312232265,0.355626873051473,-0.143587534725217, + -0.000385894926824615,-0.0730523261120266,0.377581991516538,-0.154082701226985, + -0.000409287477953768,-0.0742345210008273,0.399537109981602,-0.164577867728754, + -0.000432680029082755,-0.0754167158896277,0.421492228446667,-0.175073034230523, + -0.000456072580211631,-0.076598910778428,0.443447346911731,-0.185568200732291, + -0.000479465131340673,-0.0777811056672282,0.465402465376796,-0.196063367234061, + -0.000502857682469271,-0.0789633005560282,0.48735758384186,-0.206558533735829, + -0.000526250233598202,-0.0801454954448284,0.509312702306925,-0.217053700237598, + -0.000549642784727467,-0.0813276903336293,0.53126782077199,-0.227548866739367, + -0.000573035335856065,-0.0825098852224291,0.553222939237055,-0.238044033241136, + -0.000596427886985218,-0.0836920801112297,0.575178057702118,-0.248539199742904, + -0.000619820438113927,-0.0848742750000295,0.597133176167183,-0.259034366244673, + -0.000643212989243191,-0.08605646988883,0.619088294632248,-0.269529532746442, + -0.000666605540371901,-0.0872386647776302,0.641043413097313,-0.280024699248211, + -0.000689998091501165,-0.0884208596664307,0.662998531562377,-0.290519865749979, + -0.000713390642629874,-0.0896030545552307,0.684953650027442,-0.301015032251749, + -0.000736783193758694,-0.0907852494440313,0.706908768492506,-0.311510198753517, + -0.000760175744887959,-0.0919674443328318,0.728863886957571,-0.322005365255286, + -0.000783568296016446,-0.0931496392216316,0.750819005422635,-0.332500531757054, + -0.000806960847145488,-0.0943318341104322,0.7727741238877,-0.342995698258824, + -0.000830353398274863,-0.0955140289992329,0.794729242352764,-0.353490864760592, + -0.000255971318819492,-0.0596655614004283,0.265296336351817,-0.111857495529336, + -0.000277264898083718,-0.0604683600995755,0.286619086203558,-0.123367983055347, + -0.000298558477347832,-0.0612711587987222,0.307941836055298,-0.134878470581358, + -0.000319852056612002,-0.0620739574978694,0.329264585907038,-0.14638895810737, + -0.000341145635876283,-0.0628767561970165,0.350587335758779,-0.157899445633381, + -0.000362439215140398,-0.0636795548961633,0.371910085610519,-0.169409933159392, + -0.000383732794404346,-0.0644823535953101,0.393232835462259,-0.180920420685404, + -0.000405026373668849,-0.0652851522944573,0.414555585314,-0.192430908211415, + -0.000426319952932963,-0.0660879509936041,0.43587833516574,-0.203941395737426, + -0.000447613532197133,-0.0668907496927511,0.45720108501748,-0.215451883263438, + -0.000468907111461636,-0.0676935483918983,0.47852383486922,-0.226962370789448, + -0.000490200690725473,-0.0684963470910449,0.499846584720961,-0.23847285831546, + -0.000511494269989754,-0.0692991457901919,0.521169334572701,-0.249983345841471, + -0.000532787849253813,-0.0701019444893389,0.542492084424442,-0.261493833367483, + -0.000554081428518316,-0.0709047431884862,0.563814834276182,-0.273004320893494, + -0.000575375007782264,-0.071707541887633,0.585137584127922,-0.284514808419505, + -0.000596668587046212,-0.0725103405867795,0.606460333979663,-0.296025295945517, + -0.000617962166310493,-0.0733131392859265,0.627783083831403,-0.307535783471528, + -0.000639255745574885,-0.074115937985074,0.649105833683143,-0.319046270997539, + -0.000660549324839055,-0.0749187366842208,0.670428583534884,-0.330556758523551, + -0.000681842904103336,-0.075721535383368,0.691751333386624,-0.342067246049562, + -0.000703136483367506,-0.0765243340825146,0.713074083238364,-0.353577733575573, + -0.000724430062631565,-0.0773271327816618,0.734396833090104,-0.365088221101584, + -0.000745723641896179,-0.0781299314808093,0.755719582941845,-0.376598708627596, + -0.000767017221160127,-0.0789327301799561,0.777042332793585,-0.388109196153607, + -0.000239062339685736,-0.0514489907115763,0.261271124276077,-0.123774896546407, + -0.00025784440303811,-0.0518660262219388,0.281749032288758,-0.13646579850266, + -0.000276626466390317,-0.0522830617323016,0.302226940301438,-0.149156700458914, + -0.00029540852974258,-0.0527000972426643,0.322704848314118,-0.161847602415167, + -0.000314190593094898,-0.053117132753027,0.343182756326799,-0.174538504371421, + -0.000332972656447106,-0.0535341682633895,0.363660664339479,-0.187229406327674, + -0.000351754719799424,-0.0539512037737524,0.384138572352159,-0.199920308283928, + -0.000370536783151854,-0.0543682392841154,0.40461648036484,-0.212611210240181, + -0.000389318846504172,-0.0547852747944781,0.42509438837752,-0.225302112196435, + -0.000408100909856213,-0.0552023103048405,0.445572296390201,-0.237993014152688, + -0.000426882973208476,-0.0556193458152032,0.466050204402881,-0.250683916108941, + -0.000445665036561071,-0.0560363813255664,0.486528112415561,-0.263374818065195, + -0.00046444709991289,-0.0564534168359285,0.507006020428241,-0.276065720021448, + -0.000483229163265153,-0.0568704523462913,0.527483928440922,-0.288756621977703, + -0.000502011226617749,-0.0572874878566543,0.547961836453602,-0.301447523933956, + -0.000520793289970345,-0.0577045233670175,0.568439744466282,-0.314138425890209, + -0.000539575353321942,-0.0581215588773794,0.588917652478963,-0.326829327846463, + -0.000558357416674315,-0.0585385943877421,0.609395560491643,-0.339520229802717, + -0.000577139480026911,-0.0589556298981053,0.629873468504323,-0.352211131758969, + -0.000595921543379063,-0.0593726654084679,0.650351376517004,-0.364902033715223, + -0.000614703606731437,-0.0597897009188304,0.670829284529684,-0.377592935671477, + -0.000633485670083589,-0.0602067364291932,0.691307192542365,-0.39028383762773, + -0.000652267733435852,-0.0606237719395564,0.711785100555044,-0.402974739583983, + -0.000671049796787893,-0.0610408074499182,0.732263008567725,-0.415665641540237, + -0.000689831860140711,-0.0614578429602819,0.752740916580406,-0.428356543496491, + -0.000218035455180232,-0.0429684642126457,0.255419200877421,-0.13698336251664, + -0.000233971756844753,-0.0430296346636544,0.274822998954568,-0.150982558438187, + -0.000249908058509163,-0.0430908051146629,0.294226797031714,-0.164981754359735, + -0.000265844360173906,-0.043151975565672,0.31363059510886,-0.178980950281283, + -0.000281780661838038,-0.0432131460166802,0.333034393186007,-0.192980146202831, + -0.000297716963502836,-0.0432743164676892,0.352438191263153,-0.206979342124378, + -0.000313653265167191,-0.0433354869186977,0.3718419893403,-0.220978538045926, + -0.000329589566831545,-0.0433966573697064,0.391245787417446,-0.234977733967474, + -0.000345525868496344,-0.0434578278207156,0.410649585494592,-0.248976929889022, + -0.000361462170160975,-0.0435189982717241,0.430053383571739,-0.26297612581057, + -0.000377398471825496,-0.0435801687227328,0.449457181648885,-0.276975321732117, + -0.000393334773490017,-0.0436413391737418,0.468860979726031,-0.290974517653665, + -0.000409271075154649,-0.0437025096247508,0.488264777803178,-0.304973713575213, + -0.000425207376819059,-0.0437636800757588,0.507668575880325,-0.318972909496761, + -0.000441143678483802,-0.043824850526768,0.52707237395747,-0.332972105418308, + -0.000457079980148323,-0.0438860209777769,0.546476172034617,-0.346971301339857, + -0.000473016281812622,-0.0439471914287854,0.565879970111763,-0.360970497261404, + -0.000488952583477475,-0.0440083618797946,0.585283768188909,-0.374969693182952, + -0.000504888885141996,-0.0440695323308034,0.604687566266056,-0.3889688891045, + -0.000520825186806628,-0.0441307027818123,0.624091364343202,-0.402968085026048, + -0.000536761488470594,-0.0441918732328201,0.643495162420348,-0.416967280947595, + -0.000552697790135337,-0.0442530436838289,0.662898960497495,-0.430966476869143, + -0.000568634091800302,-0.0443142141348383,0.682302758574641,-0.444965672790691, + -0.000584570393464712,-0.0443753845858472,0.701706556651787,-0.458964868712239, + -0.000600506695128789,-0.0444365550368553,0.721110354728934,-0.472964064633787, + -0.000193380070825533,-0.0347963517830426,0.247690675273858,-0.150869206911089, + -0.000206297447399584,-0.0345671484551668,0.26580912793042,-0.166243790895506, + -0.000219214823973413,-0.0343379451272909,0.283927580586982,-0.181618374879923, + -0.000232132200547241,-0.034108741799415,0.302046033243544,-0.19699295886434, + -0.000245049577121015,-0.0338795384715389,0.320164485900106,-0.212367542848757, + -0.000257966953695288,-0.0336503351436634,0.338282938556668,-0.227742126833174, + -0.00027088433026895,-0.0334211318157873,0.35640139121323,-0.243116710817591, + -0.000283801706843057,-0.0331919284879116,0.374519843869792,-0.258491294802008, + -0.000296719083416663,-0.0329627251600353,0.392638296526354,-0.273865878786425, + -0.000309636459990825,-0.0327335218321598,0.410756749182916,-0.289240462770842, + -0.000322553836564765,-0.0325043185042841,0.428875201839477,-0.304615046755259, + -0.000335471213138705,-0.0322751151764085,0.446993654496039,-0.319989630739676, + -0.000348388589712423,-0.0320459118485321,0.465112107152602,-0.335364214724093, + -0.000361305966286585,-0.0318167085206564,0.483230559809164,-0.350738798708511, + -0.000374223342860192,-0.0315875051927805,0.501349012465725,-0.366113382692927, + -0.000387140719434131,-0.0313583018649044,0.519467465122288,-0.381487966677344, + -0.000400058096007627,-0.0311290985370283,0.537585917778849,-0.396862550661761, + -0.000412975472581567,-0.0308998952091526,0.555704370435411,-0.412237134646179, + -0.000425892849156062,-0.0306706918812774,0.573822823091973,-0.427611718630595, + -0.000438810225729891,-0.0304414885534012,0.591941275748535,-0.442986302615013, + -0.000451727602303831,-0.0302122852255255,0.610059728405097,-0.458360886599429, + -0.000464644978877105,-0.0299830818976488,0.628178181061659,-0.473735470583847, + -0.000477562355451155,-0.0297538785697733,0.646296633718221,-0.489110054568264, + -0.000490479732025428,-0.0295246752418978,0.664415086374783,-0.504484638552681, + -0.000503397108599146,-0.0292954719140215,0.682533539031345,-0.519859222537098, + -0.000166324389982486,-0.0274564673426033,0.238401607945775,-0.164679292003469, + -0.000176271908794268,-0.0270259757527455,0.255082980230495,-0.181421760118207, + -0.000186219427605883,-0.0265954841628874,0.271764352515215,-0.198164228232945, + -0.000196166946417442,-0.0261649925730291,0.288445724799935,-0.214906696347682, + -0.000206114465229335,-0.0257345009831713,0.305127097084655,-0.23164916446242, + -0.000216061984040949,-0.0253040093933132,0.321808469369375,-0.248391632577158, + -0.000226009502852509,-0.0248735178034551,0.338489841654094,-0.265134100691896, + -0.000235957021664346,-0.0244430262135971,0.355171213938815,-0.281876568806633, + -0.000245904540476238,-0.0240125346237394,0.371852586223534,-0.298619036921371, + -0.000255852059287576,-0.0235820430338809,0.388533958508254,-0.315361505036109, + -0.000265799578099468,-0.023151551444023,0.405215330792974,-0.332103973150846, + -0.000275747096911139,-0.0227210598541647,0.421896703077694,-0.348846441265584, + -0.000285694615722809,-0.0222905682643069,0.438578075362414,-0.365588909380322, + -0.000295642134534257,-0.0218600766744488,0.455259447647134,-0.38233137749506, + -0.00030558965334615,-0.0214295850845909,0.471940819931854,-0.399073845609797, + -0.00031553717215782,-0.0209990934947326,0.488622192216574,-0.415816313724535, + -0.000325484690969269,-0.0205686019048741,0.505303564501294,-0.432558781839273, + -0.000335432209781161,-0.0201381103150167,0.521984936786014,-0.449301249954011, + -0.000345379728593054,-0.0197076187251586,0.538666309070734,-0.466043718068748, + -0.000355327247404613,-0.0192771271353007,0.555347681355453,-0.482786186183487, + -0.000365274766216506,-0.0188466355454429,0.572029053640173,-0.499528654298224, + -0.000375222285028065,-0.0184161439555846,0.588710425924893,-0.516271122412962, + -0.00038516980383918,-0.0179856523657258,0.605391798209613,-0.533013590527699, + -0.000395117322651295,-0.0175551607758679,0.622073170494333,-0.549756058642438, + -0.000405064841462965,-0.0171246691860101,0.638754542779053,-0.566498526757175, + -0.000138622115878562,-0.0212920465336244,0.228199271739853,-0.177676571694251, + -0.000145877422407792,-0.0207537564373693,0.24338353329062,-0.195706415846676, + -0.000153132728936911,-0.0202154663411143,0.258567794841388,-0.213736259999102, + -0.00016038803546653,-0.0196771762448595,0.273752056392155,-0.231766104151527, + -0.00016764334199576,-0.0191388861486044,0.288936317942923,-0.249795948303953, + -0.000174898648524879,-0.0186005960523494,0.304120579493691,-0.267825792456378, + -0.000182153955054554,-0.0180623059560949,0.319304841044458,-0.285855636608804, + -0.00018940926158395,-0.01752401585984,0.334489102595226,-0.303885480761229, + -0.000196664568113292,-0.016985725763585,0.349673364145993,-0.321915324913655, + -0.000203919874642411,-0.0164474356673299,0.364857625696761,-0.33994516906608, + -0.000211175181172085,-0.0159091455710758,0.380041887247528,-0.357975013218505, + -0.000218430487701093,-0.0153708554748202,0.395226148798296,-0.376004857370931, + -0.000225685794230324,-0.014832565378565,0.410410410349064,-0.394034701523357, + -0.000232941100759554,-0.0142942752823099,0.425594671899831,-0.412064545675782, + -0.000240196407289339,-0.0137559851860558,0.440778933450598,-0.430094389828207, + -0.00024745171381868,-0.0132176950898006,0.455963195001366,-0.448124233980633, + -0.000254707020347911,-0.0126794049935457,0.471147456552134,-0.466154078133058, + -0.000261962326877141,-0.012141114897291,0.486331718102901,-0.484183922285484, + -0.000269217633406926,-0.0116028248010362,0.501515979653669,-0.502213766437909, + -0.000276472939935712,-0.0110645347047806,0.516700241204437,-0.520243610590335, + -0.000283728246464388,-0.0105262446085255,0.531884502755204,-0.53827345474276, + -0.000290983552994617,-0.00998795451227119,0.547068764305972,-0.556303298895186, + -0.000298238859523958,-0.00944966441601647,0.562253025856739,-0.574333143047611, + -0.000305494166053522,-0.0089113743197613,0.577437287407507,-0.592362987200037, + -0.00031274947258253,-0.00837308422350613,0.592621548958274,-0.610392831352463, + -0.00011210914715587,-0.0164124571966151,0.217886694365635,-0.189288791136236, + -0.00011712027451094,-0.015846179191027,0.23161477766408,-0.208468821589921, + -0.000122131401865733,-0.0152799011854385,0.245342860962524,-0.227648852043607, + -0.00012714252922047,-0.0147136231798504,0.259070944260969,-0.246828882497292, + -0.000132153656575318,-0.014147345174262,0.272799027559414,-0.266008912950978, + -0.000137164783930332,-0.0135810671686738,0.286527110857858,-0.285188943404664, + -0.000142175911284903,-0.013014789163085,0.300255194156304,-0.304368973858349, + -0.000147187038639973,-0.0124485111574972,0.313983277454748,-0.323549004312035, + -0.000152198165994766,-0.0118822331519086,0.327711360753193,-0.34272903476572, + -0.000157209293349836,-0.0113159551463204,0.341439444051638,-0.361909065219406, + -0.000162220420704684,-0.0107496771407323,0.355167527350082,-0.381089095673092, + -0.00016723154805931,-0.0101833991351439,0.368895610648527,-0.400269126126777, + -0.00017224267541438,-0.00961712112955571,0.382623693946972,-0.419449156580463, + -0.000177253802769117,-0.00905084312396709,0.396351777245417,-0.438629187034149, + -0.000182264930123632,-0.00848456511837847,0.410079860543861,-0.457809217487834, + -0.000187276057478813,-0.00791828711279052,0.423807943842306,-0.47698924794152, + -0.000192287184833773,-0.00735200910720213,0.437536027140751,-0.496169278395205, + -0.000197298312188177,-0.00678573110161351,0.451264110439196,-0.515349308848891, + -0.00020230943954247,-0.00621945309602445,0.464992193737641,-0.534529339302576, + -0.000207320566897984,-0.00565317509043695,0.478720277036085,-0.553709369756262, + -0.000212331694252832,-0.00508689708484855,0.49244836033453,-0.572889400209948, + -0.000217342821607569,-0.0045206190792606,0.506176443632974,-0.592069430663633, + -0.000222353948962306,-0.00395434107367221,0.519904526931419,-0.611249461117319, + -0.000227365076318042,-0.0033880630680847,0.533632610229864,-0.630429491571005, + -0.000232376203672779,-0.00282178506249631,0.547360693528309,-0.64960952202469, + -8.8252642437836e-05,-0.0127305715463246,0.208199928740099,-0.199191115234022, + -9.15396858167106e-05,-0.0121922018181925,0.220597832748001,-0.219351967449199, + -9.48267291958627e-05,-0.011653832090061,0.232995736755904,-0.239512819664375, + -9.81137725746262e-05,-0.0111154623619287,0.245393640763806,-0.259673671879552, + -0.000101400815953945,-0.0105770926337971,0.257791544771709,-0.279834524094729, + -0.000104687859332653,-0.0100387229056651,0.270189448779611,-0.299995376309906, + -0.000107974902712138,-0.0095003531775335,0.282587352787513,-0.320156228525083, + -0.000111261946091012,-0.00896198344940147,0.294985256795416,-0.34031708074026, + -0.000114548989470165,-0.00842361372126987,0.307383160803318,-0.360477932955437, + -0.000117836032848762,-0.00788524399313695,0.319781064811221,-0.380638785170614, + -0.000121123076227914,-0.00734687426500558,0.332178968819123,-0.40079963738579, + -0.000124410119606955,-0.00680850453687354,0.344576872827026,-0.420960489600967, + -0.000127697162985885,-0.00627013480874172,0.356974776834928,-0.441121341816144, + -0.000130984206365037,-0.00573176508061013,0.369372680842831,-0.461282194031321, + -0.000134271249743745,-0.00519339535247787,0.381770584850733,-0.481443046246498, + -0.000137558293123008,-0.00465502562434605,0.394168488858636,-0.501603898461675, + -0.000140845336501494,-0.00411665589621357,0.406566392866538,-0.521764750676852, + -0.00014413237988109,-0.0035782861680822,0.418964296874441,-0.541925602892029, + -0.00014741942326002,-0.00303991643995083,0.431362200882343,-0.562086455107206, + -0.000150706466638728,-0.00250154671181813,0.443760104890246,-0.582247307322383, + -0.00015399351001788,-0.00196317698368631,0.456158008898148,-0.602408159537559, + -0.000157280553397143,-0.00142480725555494,0.46855591290605,-0.622569011752737, + -0.00016056759677574,-0.000886437527422235,0.480953816913953,-0.642729863967913, + -0.000163854640155225,-0.000348067799290863,0.493351720921855,-0.66289071618309, + -0.000167141683534044,0.000190301928840952,0.505749624929758,-0.683051568398267, + -6.7900446304836e-05,-0.0100484153455295,0.199649903255621,-0.207305209546609, + -6.99593405395493e-05,-0.00956890453904014,0.210897166783117,-0.228269759984343, + -7.2018234773874e-05,-0.00908939373255058,0.222144430310613,-0.249234310422078, + -7.40771290089204e-05,-0.00860988292606191,0.233391693838108,-0.270198860859812, + -7.61360232434671e-05,-0.00813037211957224,0.244638957365605,-0.291163411297547, + -7.81949174783469e-05,-0.00765086131308301,0.255886220893101,-0.312127961735281, + -8.02538117129492e-05,-0.00717135050659357,0.267133484420597,-0.333092512173015, + -8.23127059474404e-05,-0.00669183970010412,0.278380747948092,-0.35405706261075, + -8.43716001817096e-05,-0.00621232889361445,0.289628011475588,-0.375021613048484, + -8.64304944167005e-05,-0.00573281808712567,0.300875275003084,-0.395986163486218, + -8.84893886513582e-05,-0.00525330728063622,0.31212253853058,-0.416950713923953, + -9.05482828864601e-05,-0.00477379647414766,0.323369802058076,-0.437915264361687, + -9.26071771205628e-05,-0.00429428566765755,0.334617065585572,-0.458879814799422, + -9.46660713553316e-05,-0.00381477486116788,0.345864329113068,-0.479844365237156, + -9.67249655898783e-05,-0.0033352640546791,0.357111592640563,-0.50080891567489, + -9.87838598248691e-05,-0.00285575324818965,0.36835885616806,-0.521773466112624, + -0.000100842754058972,-0.00237624244169976,0.379606119695556,-0.542738016550359, + -0.000102901648293519,-0.00189673163521054,0.390853383223051,-0.563702566988093, + -0.000104960542528953,-0.00141722082872198,0.402100646750547,-0.584667117425828, + -0.000107019436762945,-0.000937710022232086,0.413347910278043,-0.605631667863562, + -0.000109078330997492,-0.000458199215742638,0.424595173805539,-0.626596218301297, + -0.000111137225232816,2.13115907459205e-05,0.435842437333035,-0.647560768739031, + -0.000113196119467585,0.000500822397234923,0.447089700860531,-0.668525319176765, + -0.000115255013701243,0.000980333203725703,0.458336964388027,-0.6894898696145, + -0.000117313907936345,0.00145984401021426,0.469584227915522,-0.710454420052234, + -5.12825533630079e-05,-0.00813890729406974,0.192477680464014,-0.213739503442444, + -5.25229836055852e-05,-0.00772934970987138,0.202773660265388,-0.235341368455074, + -5.376341384844e-05,-0.00731979212567313,0.213069640066761,-0.256943233467705, + -5.50038440911838e-05,-0.00691023454147488,0.223365619868134,-0.278545098480336, + -5.6244274333872e-05,-0.00650067695727663,0.233661599669507,-0.300146963492966, + -5.74847045764493e-05,-0.00609111937307794,0.243957579470881,-0.321748828505597, + -5.87251348191931e-05,-0.00568156178887969,0.254253559272254,-0.343350693518228, + -5.99655650618258e-05,-0.00527200420468121,0.264549539073627,-0.364952558530858, + -6.12059953043476e-05,-0.00486244662048252,0.274845518875001,-0.386554423543489, + -6.24464255468693e-05,-0.00445288903628427,0.285141498676374,-0.408156288556119, + -6.36868557896131e-05,-0.0040433314520858,0.295437478477747,-0.42975815356875, + -6.49272860324679e-05,-0.00363377386788799,0.30573345827912,-0.451360018581381, + -6.61677162752117e-05,-0.00322421628368952,0.316029438080493,-0.472961883594011, + -6.74081465179555e-05,-0.00281465869949105,0.326325417881867,-0.494563748606642, + -6.86485767604772e-05,-0.00240510111529213,0.33662139768324,-0.516165613619272, + -6.98890070028879e-05,-0.00199554353109388,0.346917377484613,-0.537767478631903, + -7.11294372457427e-05,-0.00158598594689519,0.357213357285987,-0.559369343644534, + -7.23698674884865e-05,-0.00117642836269694,0.36750933708736,-0.580971208657164, + -7.36102977311193e-05,-0.000766870778498685,0.377805316888733,-0.602573073669795, + -7.48507279738631e-05,-0.000357313194300879,0.388101296690106,-0.624174938682426, + -7.60911582162738e-05,5.22443898982594e-05,0.39839727649148,-0.645776803695056, + -7.73315884589065e-05,0.000461801974096954,0.408693256292853,-0.667378668707687, + -7.85720187022054e-05,0.00087135955829476,0.418989236094226,-0.688980533720317, + -7.98124489443941e-05,0.00128091714249345,0.4292852158956,-0.710582398732948, + -8.10528791872489e-05,0.00169047472669126,0.439581195696972,-0.732184263745579, + -3.81757486992429e-05,-0.00679672951586896,0.186699188153392,-0.218710345952779, + -3.89005039367896e-05,-0.00645542283383593,0.196236719270698,-0.240804571189024, + -3.96252591742252e-05,-0.0061141161518028,0.205774250388003,-0.262898796425268, + -4.03500144119939e-05,-0.00577280946977021,0.215311781505308,-0.284993021661513, + -4.10747696494851e-05,-0.00543150278773674,0.224849312622614,-0.307087246897757, + -4.17995248871428e-05,-0.00509019610570416,0.234386843739919,-0.329181472134002, + -4.25242801246339e-05,-0.00474888942367069,0.243924374857225,-0.351275697370246, + -4.32490353621806e-05,-0.00440758274163744,0.25346190597453,-0.373369922606491, + -4.39737906002824e-05,-0.0040662760596053,0.262999437091835,-0.395464147842735, + -4.46985458375515e-05,-0.00372496937757183,0.272536968209141,-0.41755837307898, + -4.54233010751537e-05,-0.00338366269553902,0.282074499326446,-0.439652598315224, + -4.61480563125338e-05,-0.00304235601350578,0.291612030443752,-0.461746823551469, + -4.68728115498029e-05,-0.00270104933147275,0.301149561561057,-0.483841048787713, + -4.75975667874051e-05,-0.0023597426494395,0.310687092678362,-0.505935274023958, + -4.83223220252293e-05,-0.0020184359674067,0.320224623795668,-0.528029499260202, + -4.90470772626095e-05,-0.00167712928537367,0.329762154912973,-0.550123724496447, + -4.97718325007668e-05,-0.00133582260334131,0.339299686030278,-0.572217949732691, + -5.04965877374808e-05,-0.000994515921306949,0.348837217147584,-0.594312174968936, + -5.1221342975305e-05,-0.000653209239274588,0.358374748264889,-0.61640640020518, + -5.19460982125741e-05,-0.000311902557240895,0.367912279382195,-0.638500625441425, + -5.26708534508424e-05,2.94041247910215e-05,0.3774498104995,-0.660594850677669, + -5.33956086882226e-05,0.00037071080682427,0.386987341616805,-0.682689075913913, + -5.41203639256027e-05,0.000712017488857075,0.39652487273411,-0.704783301150158, + -5.4845119163538e-05,0.00105332417089032,0.406062403851416,-0.726877526386403, + -5.5569874400363e-05,0.00139463085292402,0.415599934968721,-0.748971751622647, + -2.81086657295537e-05,-0.0058582927484967,0.182186600295054,-0.222473732939845, + -2.8522836899858e-05,-0.00557694440341794,0.191136273053259,-0.244940720349634, + -2.89370080704399e-05,-0.0052955960583394,0.200085945811464,-0.267407707759422, + -2.93511792405776e-05,-0.00501424771326042,0.209035618569669,-0.289874695169211, + -2.9765350411104e-05,-0.00473289936818189,0.217985291327874,-0.312341682578999, + -3.01795215812417e-05,-0.00445155102310313,0.226934964086079,-0.334808669988788, + -3.05936927514905e-05,-0.00417020267802437,0.235884636844284,-0.357275657398576, + -3.10078639221834e-05,-0.00388885433294606,0.244834309602489,-0.379742644808365, + -3.14220350923211e-05,-0.0036075059878673,0.253783982360694,-0.402209632218153, + -3.18362062626809e-05,-0.00332615764278854,0.262733655118899,-0.424676619627942, + -3.22503774327076e-05,-0.00304480929770956,0.271683327877104,-0.44714360703773, + -3.26645486031785e-05,-0.00276346095263058,0.280633000635309,-0.469610594447519, + -3.30787197734272e-05,-0.00248211260755182,0.289582673393514,-0.492077581857307, + -3.3492890943676e-05,-0.00220076426247307,0.298532346151719,-0.514544569267096, + -3.39070621141468e-05,-0.00191941591739475,0.307482018909924,-0.537011556676884, + -3.43212332846177e-05,-0.00163806757231622,0.316431691668129,-0.559478544086673, + -3.47354044548664e-05,-0.00135671922723724,0.325381364426334,-0.581945531496461, + -3.51495756250042e-05,-0.00107537088215803,0.334331037184539,-0.60441251890625, + -3.55637467959191e-05,-0.000794022537080608,0.343280709942744,-0.626879506316038, + -3.59779179657238e-05,-0.000512674192000961,0.352230382700949,-0.649346493725826, + -3.63920891357505e-05,-0.000231325846921759,0.361180055459154,-0.671813481135615, + -3.68062603063324e-05,5.00224981561104e-05,0.370129728217358,-0.694280468545403, + -3.72204314766922e-05,0.000331370843234868,0.379079400975564,-0.716747455955192, + -3.76346026468299e-05,0.00061271918831407,0.388029073733769,-0.73921444336498, + -3.80487738168567e-05,0.000894067533393272,0.396978746491974,-0.761681430774769, + -2.05280434074639e-05,-0.00520245193650515,0.178744939275501,-0.225279580287028, + -2.07614683601087e-05,-0.00497047325737787,0.187248675554571,-0.248024485901711, + -2.09948933129755e-05,-0.00473849457825071,0.195752411833641,-0.270769391516394, + -2.12283182656203e-05,-0.00450651589912354,0.204256148112712,-0.293514297131077, + -2.14617432184316e-05,-0.0042745372199966,0.212759884391782,-0.31625920274576, + -2.16951681712985e-05,-0.00404255854086966,0.221263620670852,-0.339004108360442, + -2.19285931237767e-05,-0.00381057986174205,0.229767356949922,-0.361749013975125, + -2.2162018076588e-05,-0.00357860118261533,0.238271093228992,-0.384493919589808, + -2.23954430293993e-05,-0.00334662250348772,0.246774829508063,-0.407238825204491, + -2.26288679820996e-05,-0.00311464382436077,0.255278565787133,-0.429983730819174, + -2.28622929349109e-05,-0.00288266514523383,0.263782302066203,-0.452728636433857, + -2.30957178875002e-05,-0.00265068646610644,0.272286038345273,-0.47547354204854, + -2.33291428398674e-05,-0.00241870778697839,0.280789774624344,-0.498218447663223, + -2.35625677929008e-05,-0.00218672910785234,0.289293510903413,-0.520963353277906, + -2.3795992745379e-05,-0.00195475042872451,0.297797247182484,-0.543708258892589, + -2.40294176978573e-05,-0.00172277174959712,0.306300983461554,-0.566453164507271, + -2.42628426507796e-05,-0.00149079307047062,0.314804719740624,-0.589198070121954, + -2.44962676037019e-05,-0.00125881439134323,0.323308456019695,-0.611942975736637, + -2.47296925564022e-05,-0.00102683571221629,0.331812192298765,-0.63468788135132, + -2.49631175094356e-05,-0.000794857033089347,0.340315928577835,-0.657432786966003, + -2.51965424620249e-05,-0.00056287835396196,0.348819664856905,-0.680177692580686, + -2.54299674149472e-05,-0.000330899674835461,0.357323401135975,-0.702922598195369, + -2.56633923676475e-05,-9.89209957080739e-05,0.365827137415045,-0.725667503810052, + -2.58968173197927e-05,0.000133057683419757,0.374330873694116,-0.748412409424735, + -2.61302422731591e-05,0.000365036362546256,0.382834609973186,-0.771157315039417, + -1.49022873956461e-05,-0.0047431163486723,0.176165965720026,-0.227347679160473, + -1.50330628788109e-05,-0.00455008684554492,0.184336833146563,-0.250297429250045, + -1.51638383614205e-05,-0.00435705734241676,0.192507700573101,-0.273247179339616, + -1.52946138442522e-05,-0.00416402783928871,0.200678567999639,-0.296196929429188, + -1.5425389327306e-05,-0.00397099833616132,0.208849435426176,-0.31914667951876, + -1.55561648103597e-05,-0.00377796883303372,0.217020302852714,-0.342096429608332, + -1.56869402929138e-05,-0.00358493932990545,0.225191170279251,-0.365046179697903, + -1.58177157763562e-05,-0.00339190982677851,0.233362037705789,-0.387995929787475, + -1.59484912586327e-05,-0.00319888032364979,0.241532905132327,-0.410945679877047, + -1.60792667412979e-05,-0.00300585082052174,0.249703772558864,-0.433895429966618, + -1.62100422251843e-05,-0.00281282131739524,0.257874639985401,-0.45684518005619, + -1.63408177078495e-05,-0.00261979181426719,0.266045507411939,-0.479794930145762, + -1.64715931906256e-05,-0.00242676231113936,0.274216374838476,-0.502744680235334, + -1.66023686732908e-05,-0.00223373280801109,0.282387242265014,-0.525694430324905, + -1.6733144156178e-05,-0.00204070330488326,0.290558109691552,-0.548644180414477, + -1.68639196392872e-05,-0.0018476738017561,0.298728977118089,-0.571593930504049, + -1.69946951216193e-05,-0.00165464429862716,0.306899844544627,-0.594543680593621, + -1.71254706046176e-05,-0.00146161479549933,0.315070711971165,-0.617493430683192, + -1.72562460880599e-05,-0.00126858529237239,0.323241579397702,-0.640443180772764, + -1.73870215702809e-05,-0.00107555578924323,0.331412446824241,-0.663392930862336, + -1.75177970536122e-05,-0.000882526286116736,0.339583314250777,-0.686342680951908, + -1.76485725363884e-05,-0.000689496782988908,0.347754181677315,-0.709292431041479, + -1.77793480189425e-05,-0.000496467279860635,0.355925049103853,-0.732242181131051, + -1.79101235027179e-05,-0.000303437776733695,0.36409591653039,-0.755191931220623, + -1.804089898505e-05,-0.000110408273605422,0.372266783956928,-0.778141681310195, + -1.07712484989642e-05,-0.00442036204083607,0.174258432220366,-0.228859164670614, + -1.08446213992752e-05,-0.00425717645452517,0.182183774364055,-0.251958626874825, + -1.09179942997528e-05,-0.00409399086821471,0.190109116507744,-0.275058089079037, + -1.09913672003414e-05,-0.00393080528190426,0.198034458651433,-0.298157551283248, + -1.10647401009856e-05,-0.0037676196955938,0.205959800795122,-0.321257013487459, + -1.11381130011301e-05,-0.00360443410928268,0.213885142938811,-0.344356475691671, + -1.12114859012746e-05,-0.00344124852297201,0.2218104850825,-0.367455937895882, + -1.12848588020853e-05,-0.003278062936662,0.229735827226188,-0.390555400100093, + -1.13582317026184e-05,-0.00311487735035132,0.237661169369877,-0.413654862304304, + -1.14316046024854e-05,-0.00295169176403998,0.245586511513566,-0.436754324508516, + -1.15049775036846e-05,-0.00278850617773019,0.253511853657255,-0.459853786712727, + -1.15783504037736e-05,-0.00262532059141907,0.261437195800944,-0.482953248916938, + -1.16517233040847e-05,-0.00246213500510817,0.269362537944633,-0.506052711121149, + -1.17250962045068e-05,-0.00229894941879794,0.277287880088322,-0.529152173325361, + -1.1798469105373e-05,-0.0021357638324877,0.285213222232011,-0.552251635529572, + -1.1871842005462e-05,-0.00197257824617658,0.2931385643757,-0.575351097733783, + -1.19452149058841e-05,-0.00180939265986613,0.301063906519389,-0.598450559937995, + -1.20185878065282e-05,-0.00164620707355567,0.308989248663077,-0.621550022142206, + -1.20919607065062e-05,-0.00148302148724477,0.316914590806766,-0.644649484346417, + -1.21653336073724e-05,-0.00131983590093432,0.324839932950455,-0.667748946550628, + -1.22387065073504e-05,-0.00115665031462298,0.332765275094144,-0.690848408754839, + -1.23120794081055e-05,-0.000993464728312521,0.340690617237833,-0.713947870959051, + -1.23854523091937e-05,-0.000830279142002954,0.348615959381522,-0.737047333163262, + -1.24588252090607e-05,-0.000667093555691611,0.356541301525211,-0.760146795367474, + -1.25321981098159e-05,-0.000503907969381601,0.3644666436689,-0.783246257571685, + -7.76088377574258e-06,-0.00419280416168544,0.172860897402497,-0.2299570273921, + -7.80239348163736e-06,-0.00405202629696622,0.180606714051988,-0.253165232517441, + -7.84390318747663e-06,-0.00391124843224722,0.188352530701478,-0.276373437642782, + -7.88541289303835e-06,-0.00377047056752744,0.196098347350968,-0.299581642768123, + -7.92692259915517e-06,-0.00362969270280877,0.203844164000458,-0.322789847893463, + -7.96843230521649e-06,-0.00348891483808988,0.211589980649948,-0.345998053018804, + -8.00994201066718e-06,-0.00334813697337055,0.219335797299439,-0.369206258144145, + -8.05145171633992e-06,-0.003207359108651,0.227081613948929,-0.392414463269486, + -8.09296142190163e-06,-0.00306658124393122,0.23482743059842,-0.415622668394826, + -8.13447112790744e-06,-0.00292580337921278,0.242573247247909,-0.438830873520167, + -8.17598083402427e-06,-0.00278502551449344,0.2503190638974,-0.462039078645508, + -8.21749053914189e-06,-0.00264424764977411,0.25806488054689,-0.485247283770848, + -8.25900024570281e-06,-0.00250346978505567,0.26581069719638,-0.508455488896189, + -8.3005099511535e-06,-0.00236269192033589,0.273556513845871,-0.53166369402153, + -8.34201965627113e-06,-0.00222191405561545,0.281302330495361,-0.554871899146871, + -8.38352936261e-06,-0.00208113619089723,0.289048147144851,-0.578080104272211, + -8.42503906806069e-06,-0.00194035832617745,0.296793963794342,-0.601288309397552, + -8.46654877417752e-06,-0.001799580461459,0.304539780443832,-0.624496514522893, + -8.50805848051639e-06,-0.00165880259674056,0.312285597093322,-0.647704719648234, + -8.54956818596708e-06,-0.00151802473202078,0.320031413742812,-0.670912924773574, + -8.59107789119573e-06,-0.00137724686730101,0.327777230392303,-0.694121129898915, + -8.63258759720154e-06,-0.00123646900258167,0.335523047041793,-0.717329335024256, + -8.67409730309632e-06,-0.00109569113786279,0.343268863691283,-0.740537540149596, + -8.71560700843599e-06,-0.000954913273143454,0.351014680340773,-0.763745745274937, + -8.7571167149969e-06,-0.000814135408425454,0.358760496990263,-0.786953950400278, + -5.57919022814435e-06,-0.00403186925423415,0.171844067904429,-0.230750875751321, + -5.60301505503347e-06,-0.00390767760895838,0.179459449028108,-0.254037711280834, + -5.62683988203361e-06,-0.0037834859636825,0.187074830151787,-0.277324546810346, + -5.65066470875619e-06,-0.00365929431840595,0.194690211275466,-0.300611382339859, + -5.67448953586736e-06,-0.00353510267313029,0.202305592399145,-0.323898217869371, + -5.69831436292301e-06,-0.0034109110278544,0.209920973522825,-0.347185053398883, + -5.72213918964559e-06,-0.0032867193825783,0.217536354646504,-0.370471888928396, + -5.74596401631267e-06,-0.00316252773730175,0.225151735770183,-0.393758724457908, + -5.76978884359036e-06,-0.00303833609202631,0.232767116893862,-0.417045559987421, + -5.79361367047948e-06,-0.0029141444467502,0.240382498017542,-0.440332395516933, + -5.81743849725758e-06,-0.00278995280147409,0.247997879141221,-0.463619231046445, + -5.84126332459078e-06,-0.00266576115619843,0.2556132602649,-0.486906066575958, + -5.86508815114684e-06,-0.0025415695109221,0.263228641388579,-0.51019290210547, + -5.88891297859107e-06,-0.00241737786564689,0.270844022512258,-0.533479737634983, + -5.91273780492507e-06,-0.00229318622037011,0.278459403635938,-0.556766573164495, + -5.93656263170317e-06,-0.00216899457509379,0.286074784759617,-0.580053408694007, + -5.96038745881433e-06,-0.0020448029298179,0.293690165883296,-0.60334024422352, + -5.98421228614754e-06,-0.00192061128454268,0.301305547006975,-0.626627079753032, + -6.00803711248155e-06,-0.00179641963926569,0.308920928130655,-0.649913915282545, + -6.03186193992578e-06,-0.00167222799399047,0.316536309254334,-0.673200750812057, + -6.05568676670387e-06,-0.00154803634871437,0.324151690378013,-0.69648758634157, + -6.07951159348197e-06,-0.00142384470343737,0.331767071501693,-0.719774421871082, + -6.10333642070415e-06,-0.0012996530581626,0.339382452625371,-0.743061257400594, + -6.12716124748225e-06,-0.00117546141288649,0.34699783374905,-0.766348092930107, + -6.15098607414932e-06,-0.00105126976760994,0.35461321487273,-0.789634928459619, + -4.00427115482271e-06,-0.00391775816821938,0.171107928801608,-0.231323029683396, + -4.01821553702719e-06,-0.00380572057059281,0.178628976152715,-0.254666536861095, + -4.03215991912065e-06,-0.00369368297296635,0.186150023503821,-0.278010044038794, + -4.04610430149166e-06,-0.00358164537534011,0.193671070854928,-0.301353551216494, + -4.06004868425125e-06,-0.00346960777771432,0.201192118206035,-0.324697058394193, + -4.07399306651124e-06,-0.00335757018008764,0.208713165557141,-0.348040565571892, + -4.08793744866021e-06,-0.00324553258246119,0.216234212908248,-0.371384072749591, + -4.10188183114224e-06,-0.00313349498483539,0.223755260259354,-0.394727579927291, + -4.11582621306916e-06,-0.00302145738720827,0.231276307610461,-0.41807108710499, + -4.12977059560671e-06,-0.00290941978958226,0.238797354961568,-0.441414594282689, + -4.14371497814425e-06,-0.00279738219195647,0.246318402312674,-0.464758101460388, + -4.15765936045975e-06,-0.00268534459432979,0.253839449663781,-0.488101608638087, + -4.17160374266423e-06,-0.00257330699670355,0.261360497014888,-0.511445115815787, + -4.18554812486871e-06,-0.00246126939907687,0.268881544365994,-0.534788622993486, + -4.19949250674012e-06,-0.00234923180144975,0.276402591717102,-0.558132130171185, + -4.21343688927767e-06,-0.00223719420382396,0.283923639068208,-0.581475637348884, + -4.22738127181521e-06,-0.00212515660619772,0.291444686419315,-0.604819144526584, + -4.24132565413071e-06,-0.00201311900857171,0.298965733770421,-0.628162651704283, + -4.2552700358911e-06,-0.0019010814109448,0.306486781121528,-0.651506158881982, + -4.26921441831762e-06,-0.0017890438133179,0.314007828472635,-0.674849666059681, + -4.28315880063312e-06,-0.00167700621569233,0.321528875823741,-0.698193173237381, + -4.2971031828376e-06,-0.00156496861806543,0.329049923174848,-0.72153668041508, + -4.31104756548617e-06,-0.00145293102043942,0.336570970525955,-0.744880187592779, + -4.32499194802372e-06,-0.00134089342281341,0.344092017877061,-0.768223694770478, + -4.3389363297841e-06,-0.0012288558251865,0.351613065228168,-0.791567201948177, + -2.87057071801655e-06,-0.00383668148470795,0.170576916653393,-0.231734433685972, + -2.87892447570215e-06,-0.00373348668952855,0.178029965902923,-0.255118690287191, + -2.88727823333224e-06,-0.00363029189434916,0.185483015152453,-0.27850294688841, + -2.89563199079579e-06,-0.00352709709916943,0.192936064401983,-0.301887203489629, + -2.90398574842587e-06,-0.00342390230399015,0.200389113651512,-0.325271460090848, + -2.91233950572289e-06,-0.00332070750881019,0.207842162901043,-0.348655716692067, + -2.92069326313094e-06,-0.00321751271363047,0.215295212150573,-0.372039973293286, + -2.92904702076102e-06,-0.00311431791845096,0.222748261400103,-0.395424229894505, + -2.93740077805804e-06,-0.00301112312327101,0.230201310649633,-0.418808486495724, + -2.94575453607671e-06,-0.00290792832809217,0.237654359899163,-0.442192743096943, + -2.95410829320719e-06,-0.002804733532912,0.245107409148693,-0.465576999698162, + -2.96246205100381e-06,-0.00270153873773316,0.252560458398222,-0.488961256299381, + -2.97081580824532e-06,-0.00259834394255254,0.260013507647753,-0.5123455129006, + -2.97916956570887e-06,-0.00249514914737348,0.267466556897282,-0.535729769501819, + -2.98752332350549e-06,-0.00239195435219397,0.274919606146812,-0.559114026103038, + -2.99587708119109e-06,-0.00228875955701469,0.282372655396342,-0.582498282704257, + -3.00423083832158e-06,-0.00218556476183496,0.289825704645872,-0.605882539305476, + -3.01258459567411e-06,-0.00208236996665478,0.297278753895402,-0.629266795906695, + -3.02093835380379e-06,-0.00197917517147594,0.304731803144932,-0.652651052507914, + -3.02929211082326e-06,-0.00187598037629577,0.312184852394462,-0.676035309109133, + -3.03764586828681e-06,-0.00177278558111604,0.319637901643993,-0.699419565710352, + -3.04599962586138e-06,-0.00166959078593676,0.327090950893522,-0.722803822311571, + -3.05435338299187e-06,-0.00156639599075659,0.334544000143052,-0.74618807891279, + -3.06270714112156e-06,-0.00146320119557819,0.341997049392582,-0.769572335514009, + -3.07106089836306e-06,-0.00136000640039757,0.349450098642112,-0.792956592115228, + -2.05612452663928e-06,-0.0037789849183788,0.170194865165181,-0.232029752203881, + -2.0612574225809e-06,-0.00368219117200408,0.177599016650932,-0.255443260001695, + -2.06639031807843e-06,-0.00358539742562858,0.185003168136682,-0.27885676779951, + -2.07152321335391e-06,-0.00348860367925297,0.192407319622433,-0.302270275597324, + -2.07665610912899e-06,-0.00339180993287802,0.199811471108184,-0.325683783395139, + -2.08178900473754e-06,-0.00329501618650263,0.207215622593935,-0.349097291192953, + -2.08692190029058e-06,-0.00319822244012724,0.214619774079686,-0.372510798990768, + -2.09205479589913e-06,-0.00310142869375207,0.222023925565437,-0.395924306788582, + -2.09718769117462e-06,-0.00300463494737624,0.229428077051188,-0.419337814586397, + -2.1023205869497e-06,-0.00290784120100152,0.236832228536938,-0.442751322384211, + -2.1074534822807e-06,-0.00281104745462613,0.244236380022689,-0.466164830182026, + -2.1125863781668e-06,-0.00271425370825118,0.25164053150844,-0.48957833797984, + -2.11771927338678e-06,-0.00261745996187512,0.259044682994191,-0.512991845777655, + -2.12285216905084e-06,-0.00252066621549996,0.266448834479942,-0.536405353575469, + -2.1279850647149e-06,-0.00242387246912501,0.273852985965693,-0.559818861373284, + -2.13311796060101e-06,-0.00232707872275006,0.281257137451443,-0.583232369171098, + -2.13825085615404e-06,-0.0022302849763749,0.288661288937194,-0.606645876968913, + -2.14338375104095e-06,-0.00213349122999862,0.296065440422945,-0.630059384766727, + -2.14851664726012e-06,-0.00203669748362412,0.303469591908696,-0.653472892564542, + -2.1536495424801e-06,-0.00193990373724828,0.310873743394447,-0.676886400362356, + -2.15878243803314e-06,-0.00184310999087334,0.318277894880198,-0.700299908160171, + -2.16391533314209e-06,-0.00174631624449795,0.325682046365948,-0.723713415957986, + -2.16904822947228e-06,-0.001649522498123,0.333086197851699,-0.7471269237558, + -2.17418112413714e-06,-0.00155272875174672,0.34049034933745,-0.770540431553615, + -2.17931402035632e-06,-0.00145593500537178,0.347894500823201,-0.793953939351429, + -1.47187275956195e-06,-0.00373787746490029,0.1699204992793,-0.232241484069083, + -1.4751082436093e-06,-0.00364570050518198,0.177289548415884,-0.255675963834583, + -1.47834372749012e-06,-0.00355352354546423,0.184658597552467,-0.279110443600084, + -1.48157921137093e-06,-0.00346134658574559,0.192027646689052,-0.302544923365584, + -1.48481469558481e-06,-0.00336916962602807,0.199396695825635,-0.325979403131084, + -1.48805017990972e-06,-0.00327699266631076,0.206765744962219,-0.349413882896584, + -1.49128566345746e-06,-0.0031848157065919,0.214134794098803,-0.372848362662084, + -1.49452114761583e-06,-0.00309263874687393,0.221503843235387,-0.396282842427584, + -1.49775663160767e-06,-0.00300046178715641,0.228872892371971,-0.419717322193085, + -1.50099211559951e-06,-0.00290828482743799,0.236241941508555,-0.443151801958585, + -1.50422760014646e-06,-0.00281610786772113,0.243610990645138,-0.466586281724085, + -1.5074630836942e-06,-0.00272393090800227,0.250980039781722,-0.490020761489585, + -1.51069856757502e-06,-0.00263175394828452,0.258349088918306,-0.513455241255086, + -1.51393405167788e-06,-0.00253957698856633,0.26571813805489,-0.536889721020586, + -1.51716953578074e-06,-0.00244740002884858,0.273087187191474,-0.560324200786086, + -1.52040501966155e-06,-0.00235522306913016,0.280456236328058,-0.583758680551586, + -1.52364050398646e-06,-0.0022630461094133,0.287825285464641,-0.607193160317086, + -1.52687598808932e-06,-0.00217086914969489,0.295194334601225,-0.630627640082587, + -1.53011147241422e-06,-0.00207869218997736,0.302563383737809,-0.654062119848087, + -1.53334695596197e-06,-0.0019865152302585,0.309932432874393,-0.677496599613587, + -1.53658243962074e-06,-0.00189433827054053,0.317301482010977,-0.700931079379087, + -1.53981792416769e-06,-0.001802161310823,0.32467053114756,-0.724365559144588, + -1.54305340782646e-06,-0.00170998435110459,0.332039580284144,-0.747800038910088, + -1.5462888923734e-06,-0.00161780739138706,0.339408629420728,-0.771234518675588, + -1.54952437636524e-06,-0.00152563043166998,0.346777678557311,-0.794668998441088, + -0.000323545292728211,-0.143721951397625,0.262809707514684,-0.0183122212470148, + -0.000359716535790588,-0.149368024920156,0.286311810441876,-0.0204552043030264, + -0.000395887778852799,-0.155014098442687,0.309813913369068,-0.0225981873590377, + -0.000432059021915121,-0.160660171965218,0.33331601629626,-0.0247411704150492, + -0.000468230264977498,-0.166306245487748,0.356818119223452,-0.026884153471061, + -0.000504401508039765,-0.171952319010279,0.380320222150643,-0.029027136527072, + -0.000540572751101975,-0.17759839253281,0.403822325077835,-0.0311701195830837, + -0.000576743994164408,-0.183244466055341,0.427324428005027,-0.0333131026390954, + -0.000612915237226841,-0.188890539577872,0.450826530932219,-0.0354560856951064, + -0.00064908648028883,-0.194536613100402,0.474328633859411,-0.0375990687511183, + -0.000685257723351262,-0.200182686622933,0.497830736786603,-0.0397420518071297, + -0.000721428966413806,-0.205828760145464,0.521332839713795,-0.0418850348631413, + -0.000757600209475906,-0.211474833667994,0.544834942640986,-0.0440280179191523, + -0.000793771452538339,-0.217120907190525,0.568337045568179,-0.0461710009751648, + -0.000829942695600772,-0.222766980713056,0.591839148495371,-0.0483139840311763, + -0.000866113938662871,-0.228413054235587,0.615341251422563,-0.0504569670871878, + -0.000902285181725748,-0.234059127758118,0.638843354349756,-0.0525999501432002, + -0.000938456424787515,-0.239705201280648,0.662345457276945,-0.0547429331992102, + -0.000974627667850281,-0.24535127480318,0.685847560204138,-0.0568859162552222, + -0.00101079891091238,-0.25099734832571,0.70934966313133,-0.0590288993112338, + -0.0010469701539747,-0.256643421848241,0.73285176605852,-0.0611718823672436, + -0.00108314139703725,-0.262289495370772,0.756353868985712,-0.0633148654232551, + -0.00111931264009957,-0.267935568893303,0.779855971912905,-0.0654578484792677, + -0.00115548388316145,-0.273581642415833,0.803358074840098,-0.0676008315352801, + -0.00119165512622399,-0.279227715938364,0.82686017776729,-0.0697438145912916, + -0.000322833005258871,-0.133606204982444,0.267703994909201,-0.0290324854660902, + -0.00035771689080849,-0.138578795784722,0.291287261216504,-0.032190471351649, + -0.00039260077635811,-0.143551386587001,0.314870527523807,-0.0353484572372077, + -0.000427484661907618,-0.148523977389279,0.338453793831109,-0.0385064431227663, + -0.00046236854745707,-0.153496568191558,0.362037060138413,-0.0416644290083254, + -0.000497252433006634,-0.158469158993836,0.385620326445715,-0.0448224148938838, + -0.000532136318556031,-0.163441749796115,0.409203592753018,-0.0479804007794428, + -0.000567020204105595,-0.168414340598393,0.432786859060321,-0.0511383866650018, + -0.000601904089655325,-0.173386931400672,0.456370125367623,-0.05429637255056, + -0.000636787975204944,-0.17835952220295,0.479953391674926,-0.0574543584361193, + -0.000671671860754453,-0.183332113005229,0.503536657982228,-0.0606123443216776, + -0.00070655574630385,-0.188304703807507,0.527119924289532,-0.0637703302072369, + -0.00074143963185358,-0.193277294609786,0.550703190596833,-0.0669283160927949, + -0.000776323517403088,-0.198249885412064,0.574286456904138,-0.0700863019783549, + -0.000811207402952485,-0.203222476214342,0.59786972321144,-0.0732442878639134, + -0.000846091288501993,-0.208195067016621,0.621452989518743,-0.0764022737494724, + -0.000880975174051501,-0.213167657818899,0.645036255826046,-0.079560259635032, + -0.00091585905960101,-0.218140248621178,0.668619522133348,-0.0827182455205895, + -0.000950742945150629,-0.223112839423457,0.69220278844065,-0.0858762314061485, + -0.00098562683070047,-0.228085430225735,0.715786054747954,-0.0890342172917074, + -0.00102051071624976,-0.233058021028014,0.739369321055255,-0.092192203177265, + -0.00105539460179949,-0.238030611830292,0.762952587362556,-0.095350189062823, + -0.00109027848734866,-0.24300320263257,0.786535853669861,-0.0985081749483831, + -0.00112516237289828,-0.247975793434849,0.810119119977164,-0.101666160833942, + -0.0011600462584479,-0.252948384237127,0.833702386284467,-0.104824146719501, + -0.000319722084197338,-0.121234499692456,0.272498538517763,-0.0424019007092795, + -0.000352837493021008,-0.125407366617773,0.29605906878887,-0.0468257130729845, + -0.000385952901844566,-0.129580233543089,0.319619599059976,-0.0512495254366894, + -0.000419068310668347,-0.133753100468406,0.343180129331083,-0.0556733378003942, + -0.000452183719492016,-0.137925967393722,0.36674065960219,-0.0600971501640996, + -0.000485299128316019,-0.142098834319039,0.390301189873296,-0.0645209625278041, + -0.000518414537139578,-0.146271701244355,0.413861720144403,-0.0689447748915092, + -0.000551529945963414,-0.150444568169672,0.437422250415509,-0.0733685872552143, + -0.000584645354786972,-0.154617435094989,0.460982780686615,-0.0777923996189187, + -0.000617760763610642,-0.158790302020305,0.484543310957723,-0.0822162119826243, + -0.0006508761724342,-0.162963168945621,0.508103841228829,-0.086640024346329, + -0.000683991581257981,-0.167136035870938,0.531664371499935,-0.0910638367100341, + -0.000717106990081429,-0.171308902796254,0.555224901771041,-0.0954876490737386, + -0.00075022239890532,-0.175481769721571,0.578785432042149,-0.0999114614374448, + -0.000783337807729101,-0.179654636646887,0.602345962313255,-0.104335273801149, + -0.000816453216552993,-0.183827503572204,0.625906492584362,-0.108759086164855, + -0.000849568625376218,-0.18800037049752,0.64946702285547,-0.11318289852856, + -0.000882684034199888,-0.192173237422837,0.673027553126574,-0.117606710892264, + -0.000915799443024112,-0.196346104348154,0.696588083397681,-0.122030523255969, + -0.00094891485184756,-0.20051897127347,0.720148613668788,-0.126454335619675, + -0.000982030260671118,-0.204691838198787,0.743709143939893,-0.130878147983378, + -0.00101514566949512,-0.208864705124103,0.767269674210999,-0.135301960347083, + -0.00104826107831879,-0.21303757204942,0.790830204482107,-0.139725772710789, + -0.00108137648714246,-0.217210438974736,0.814390734753214,-0.144149585074494, + -0.00111449189596602,-0.221383305900053,0.83795126502432,-0.148573397438199, + -0.000312715712178169,-0.106800559708677,0.276342593792607,-0.0584958444777561, + -0.00034347305752791,-0.110076911119946,0.299693251877458,-0.0644434437677676, + -0.000374230402877984,-0.113353262531215,0.32304390996231,-0.0703910430577789, + -0.000404987748227947,-0.116629613942485,0.346394568047161,-0.0763386423477902, + -0.000435745093577744,-0.119905965353754,0.369745226132014,-0.0822862416378018, + -0.000466502438927874,-0.123182316765024,0.393095884216865,-0.0882338409278129, + -0.000497259784277837,-0.126458668176293,0.416446542301716,-0.0941814402178245, + -0.000528017129627689,-0.129735019587562,0.439797200386569,-0.100129039507836, + -0.000558774474977763,-0.133011370998832,0.46314785847142,-0.106076638797847, + -0.000589531820327727,-0.136287722410101,0.486498516556272,-0.112024238087859, + -0.000620289165677468,-0.139564073821371,0.509849174641123,-0.11797183737787, + -0.000651046511027209,-0.14284042523264,0.533199832725975,-0.123919436667881, + -0.000681803856377283,-0.146116776643909,0.556550490810826,-0.129867035957892, + -0.000712561201727246,-0.149393128055179,0.579901148895679,-0.135814635247905, + -0.000743318547077321,-0.152669479466448,0.60325180698053,-0.141762234537916, + -0.000774075892427284,-0.155945830877718,0.626602465065382,-0.147709833827928, + -0.000804833237777136,-0.159222182288987,0.649953123150235,-0.15365743311794, + -0.000835590583126988,-0.162498533700256,0.673303781235085,-0.15960503240795, + -0.000866347928477063,-0.165774885111526,0.696654439319937,-0.165552631697962, + -0.000897105273827248,-0.169051236522795,0.720005097404789,-0.171500230987974, + -0.000927862619176989,-0.172327587934065,0.743355755489639,-0.177447830277984, + -0.000958619964526952,-0.175603939345334,0.766706413574491,-0.183395429567995, + -0.000989377309876693,-0.178880290756603,0.790057071659344,-0.189343028858007, + -0.00102013465522666,-0.182156642167873,0.813407729744196,-0.195290628148019, + -0.00105089200057684,-0.185432993579142,0.836758387829047,-0.20123822743803, + -0.000300226167247397,-0.0909098300988948,0.278161344227518,-0.0770649790909155, + -0.000327972985308955,-0.0932514493842631,0.301022119671934,-0.0847707182727651, + -0.000355719803370458,-0.0955930686696315,0.32388289511635,-0.0924764574546145, + -0.000383466621432071,-0.0979346879549998,0.346743670560766,-0.100182196636464, + -0.000411213439493463,-0.100276307240368,0.369604446005182,-0.107887935818314, + -0.000438960257554688,-0.102617926525736,0.392465221449598,-0.115593675000163, + -0.000466707075616246,-0.104959545811104,0.415325996894014,-0.123299414182013, + -0.00049445389367786,-0.107301165096473,0.43818677233843,-0.131005153363862, + -0.000522200711739362,-0.109642784381841,0.461047547782846,-0.138710892545711, + -0.000549947529800865,-0.111984403667209,0.483908323227262,-0.146416631727561, + -0.000577694347862145,-0.114326022952577,0.506769098671678,-0.15412237090941, + -0.000605441165923981,-0.116667642237946,0.529629874116094,-0.16182811009126, + -0.00063318798398504,-0.119009261523314,0.552490649560509,-0.169533849273109, + -0.000660934802046986,-0.121350880808683,0.575351425004927,-0.17723958845496, + -0.000688681620108267,-0.123692500094051,0.598212200449342,-0.184945327636809, + -0.000716428438169769,-0.126034119379419,0.621072975893758,-0.192651066818658, + -0.00074417525623105,-0.128375738664787,0.643933751338175,-0.200356806000508, + -0.000771922074292553,-0.130717357950155,0.66679452678259,-0.208062545182357, + -0.000799668892354055,-0.133058977235524,0.689655302227006,-0.215768284364207, + -0.000827415710415669,-0.135400596520892,0.712516077671422,-0.223474023546056, + -0.000855162528476949,-0.13774221580626,0.735376853115837,-0.231179762727905, + -0.000882909346538674,-0.140083835091628,0.758237628560253,-0.238885501909754, + -0.000910656164600065,-0.142425454376997,0.781098404004669,-0.246591241091604, + -0.000938402982662234,-0.144767073662366,0.803959179449086,-0.254296980273454, + -0.000966149800723071,-0.147108692947734,0.826819954893502,-0.262002719455303, + -0.000281097607381264,-0.0745591789974794,0.27692713919708,-0.097469902305907, + -0.00030521667784883,-0.0760086017583467,0.298943520713897,-0.107107595250898, + -0.000329335748316006,-0.0774580245192134,0.320959902230715,-0.116745288195888, + -0.00035345481878335,-0.0789074472800804,0.342976283747533,-0.126382981140879, + -0.000377573889250749,-0.0803568700409474,0.36499266526435,-0.13602067408587, + -0.000401692959718258,-0.0818062928018146,0.387009046781168,-0.14565836703086, + -0.000425812030185435,-0.0832557155626814,0.409025428297985,-0.155296059975851, + -0.000449931100652945,-0.0847051383235486,0.431041809814803,-0.164933752920842, + -0.000474050171120233,-0.0861545610844154,0.45305819133162,-0.174571445865832, + -0.000498169241587521,-0.0876039838452825,0.475074572848438,-0.184209138810823, + -0.000522288312055252,-0.0890534066061497,0.497090954365255,-0.193846831755813, + -0.00054640738252254,-0.0905028293670165,0.519107335882073,-0.203484524700804, + -0.000570526452989717,-0.0919522521278837,0.54112371739889,-0.213122217645795, + -0.000594645523457338,-0.093401674888751,0.563140098915708,-0.222759910590786, + -0.000618764593924515,-0.0948510976496175,0.585156480432526,-0.232397603535776, + -0.000642883664392024,-0.0963005204104848,0.607172861949344,-0.242035296480767, + -0.000667002734859312,-0.0977499431713515,0.629189243466162,-0.251672989425758, + -0.000691121805326711,-0.0991993659322183,0.651205624982979,-0.261310682370748, + -0.00071524087579411,-0.100648788693086,0.673222006499796,-0.270948375315739, + -0.00073935994626162,-0.102098211453953,0.695238388016614,-0.28058606826073, + -0.000763479016728796,-0.10354763421482,0.717254769533431,-0.29022376120572, + -0.000787598087196195,-0.104997056975687,0.739271151050249,-0.29986145415071, + -0.000811717157663372,-0.106446479736553,0.761287532567066,-0.309499147095702, + -0.000835836228130993,-0.107895902497421,0.783303914083884,-0.319136840040692, + -0.000859955298598503,-0.109345325258288,0.805320295600701,-0.328774532985683, + -0.000255218721438244,-0.058936460766477,0.272042139066151,-0.118724503273827, + -0.000275265659824275,-0.0596188450044045,0.292838171279937,-0.130374598122583, + -0.000295312598210362,-0.0603012292423324,0.313634203493722,-0.14202469297134, + -0.000315359536596282,-0.06098361348026,0.334430235707507,-0.153674787820096, + -0.000335406474982314,-0.0616659977181875,0.355226267921293,-0.165324882668852, + -0.000355453413368567,-0.0623483819561157,0.376022300135077,-0.176974977517608, + -0.00037550035175421,-0.0630307661940428,0.396818332348863,-0.188625072366364, + -0.000395547290140352,-0.0637131504319706,0.417614364562648,-0.20027516721512, + -0.000415594228526661,-0.0643955346698986,0.438410396776433,-0.211925262063876, + -0.000435641166912637,-0.0650779189078261,0.459206428990219,-0.223575356912633, + -0.000455688105298613,-0.0657603031457537,0.480002461204004,-0.235225451761389, + -0.000475735043684589,-0.0664426873836814,0.500798493417789,-0.246875546610145, + -0.000495781982070564,-0.067125071621609,0.521594525631574,-0.258525641458901, + -0.000515828920456651,-0.0678074558595372,0.54239055784536,-0.270175736307657, + -0.000535875858842738,-0.0684898400974645,0.563186590059145,-0.281825831156413, + -0.000555922797228603,-0.0691722243353923,0.583982622272931,-0.29347592600517, + -0.000575969735614579,-0.0698546085733198,0.604778654486716,-0.305126020853926, + -0.000596016674000999,-0.070536992811248,0.625574686700501,-0.316776115702682, + -0.000616063612387197,-0.071219377049176,0.646370718914286,-0.328426210551438, + -0.000636110550773061,-0.0719017612871033,0.667166751128071,-0.340076305400194, + -0.000656157489158704,-0.0725841455250305,0.687962783341857,-0.35172640024895, + -0.000676204427545235,-0.0732665297629589,0.708758815555641,-0.363376495097706, + -0.000696251365931433,-0.0739489140008867,0.729554847769427,-0.375026589946463, + -0.000716298304316965,-0.0746312982388133,0.750350879983213,-0.386676684795219, + -0.00073634524270294,-0.0753136824767413,0.771146912196998,-0.398326779643975, + -0.000223871184812041,-0.045098615770738,0.263637109831037,-0.139665866113582, + -0.000239703543307102,-0.0451977038120701,0.282890682208818,-0.153298705240143, + -0.000255535901802328,-0.0452967918534022,0.302144254586599,-0.166931544366704, + -0.000271368260297389,-0.0453958798947341,0.32139782696438,-0.180564383493265, + -0.000287200618792449,-0.0454949679360661,0.340651399342161,-0.194197222619826, + -0.000303032977287565,-0.0455940559773984,0.359904971719942,-0.207830061746387, + -0.000318865335782681,-0.0456931440187305,0.379158544097723,-0.221462900872947, + -0.00033469769427763,-0.0457922320600626,0.398412116475504,-0.235095739999509, + -0.000350530052772524,-0.0458913201013942,0.417665688853285,-0.248728579126069, + -0.000366362411267862,-0.0459904081427265,0.436919261231066,-0.26236141825263, + -0.0003821947697632,-0.0460894961840586,0.456172833608847,-0.275994257379191, + -0.000398027128257872,-0.0461885842253902,0.475426405986628,-0.289627096505752, + -0.00041385948675321,-0.0462876722667225,0.494679978364409,-0.303259935632313, + -0.000429691845248215,-0.0463867603080546,0.51393355074219,-0.316892774758874, + -0.000445524203743441,-0.0464858483493866,0.533187123119971,-0.330525613885435, + -0.000461356562238779,-0.0465849363907187,0.552440695497753,-0.344158453011996, + -0.000477188920733451,-0.0466840244320506,0.571694267875534,-0.357791292138557, + -0.0004930212792289,-0.0467831124733831,0.590947840253314,-0.371424131265118, + -0.000508853637723683,-0.0468822005147147,0.610201412631095,-0.385056970391679, + -0.000524685996219132,-0.046981288556047,0.629454985008876,-0.39868980951824, + -0.000540518354714248,-0.0470803765973791,0.648708557386657,-0.4123226486448, + -0.000556350713209253,-0.0471794646387109,0.667962129764438,-0.425955487771361, + -0.000572183071704035,-0.047278552680043,0.687215702142219,-0.439588326897922, + -0.000588015430199706,-0.0473776407213751,0.706469274520001,-0.453221166024483, + -0.000603847788694822,-0.0474767287627076,0.725722846897781,-0.466854005151044, + -0.000189516698970216,-0.0336932637551542,0.252584505134946,-0.159197450637036, + -0.000201351568739128,-0.0334103525741689,0.270095208912561,-0.174679555150319, + -0.000213186438508317,-0.0331274413931841,0.287605912690177,-0.190161659663601, + -0.000225021308277285,-0.0328445302121992,0.305116616467792,-0.205643764176884, + -0.000236856178046307,-0.0325616190312144,0.322627320245407,-0.221125868690167, + -0.000248691047815663,-0.0322787078502296,0.340138024023023,-0.236607973203449, + -0.000260525917584797,-0.0319957966692448,0.357648727800638,-0.252090077716732, + -0.000272360787353931,-0.03171288548826,0.375159431578253,-0.267572182230014, + -0.000284195657123121,-0.031429974307275,0.392670135355869,-0.283054286743297, + -0.000296030526891866,-0.0311470631262898,0.410180839133484,-0.298536391256579, + -0.000307865396661389,-0.0308641519453052,0.4276915429111,-0.314018495769862, + -0.000319700266430356,-0.0305812407643204,0.445202246688715,-0.329500600283145, + -0.000331535136199657,-0.0302983295833357,0.46271295046633,-0.344982704796427, + -0.000343370005968735,-0.0300154184023507,0.480223654243946,-0.36046480930971, + -0.000355204875737702,-0.0297325072213659,0.497734358021561,-0.375946913822992, + -0.000367039745507225,-0.0294495960403816,0.515245061799176,-0.391429018336275, + -0.000378874615276081,-0.0291666848593959,0.532755765576792,-0.406911122849558, + -0.000390709485045049,-0.0288837736784111,0.550266469354407,-0.42239322736284, + -0.000402544354814127,-0.0286008624974263,0.567777173132023,-0.437875331876123, + -0.000414379224583983,-0.028317951316442,0.585287876909638,-0.453357436389405, + -0.000426214094353061,-0.0280350401354572,0.602798580687253,-0.468839540902688, + -0.000438048964121918,-0.0277521289544715,0.620309284464869,-0.48432164541597, + -0.000449883833890996,-0.0274692177734868,0.637819988242484,-0.499803749929253, + -0.000461718703660075,-0.027186306592502,0.6553306920201,-0.515285854442536, + -0.000473553573429264,-0.0269033954115176,0.672841395797715,-0.530767958955818, + -0.000155076897248696,-0.0248683996732791,0.240199290946024,-0.176504129057341, + -0.000163442452789819,-0.024382692674357,0.255920282762325,-0.193624843142897, + -0.000171808008330776,-0.0238969856754347,0.271641274578625,-0.210745557228453, + -0.000180173563872121,-0.0234112786765133,0.287362266394926,-0.227866271314008, + -0.000188539119413522,-0.0229255716775913,0.303083258211227,-0.244986985399564, + -0.00019690467495459,-0.0224398646786694,0.318804250027527,-0.262107699485119, + -0.000205270230495547,-0.0219541576797473,0.334525241843828,-0.279228413570675, + -0.000213635786036948,-0.0214684506808258,0.350246233660129,-0.296349127656231, + -0.000222001341578015,-0.0209827436819037,0.36596722547643,-0.313469841741786, + -0.000230366897118861,-0.0204970366829813,0.381688217292731,-0.330590555827342, + -0.000238732452659929,-0.0200113296840594,0.397409209109031,-0.347711269912898, + -0.000247098008201441,-0.0195256226851377,0.413130200925332,-0.364831983998454, + -0.00025546356374273,-0.0190399156862162,0.428851192741632,-0.381952698084009, + -0.00026382911928402,-0.0185542086872943,0.444572184557933,-0.399073412169565, + -0.000272194674825199,-0.0180685016883724,0.460293176374234,-0.416194126255121, + -0.000280560230366156,-0.0175827946894502,0.476014168190535,-0.433314840340677, + -0.000288925785907446,-0.0170970876905281,0.491735160006836,-0.450435554426232, + -0.000297291341448513,-0.0166113806916062,0.507456151823136,-0.467556268511788, + -0.00030565689698947,-0.0161256736926838,0.523177143639437,-0.484676982597343, + -0.000314022452530649,-0.0156399666937621,0.538898135455738,-0.501797696682899, + -0.000322388008072494,-0.0151542596948411,0.554619127272038,-0.518918410768454, + -0.000330753563613118,-0.0146685526959187,0.570340119088339,-0.53603912485401, + -0.000339119119154407,-0.0141828456969963,0.58606111090464,-0.553159838939566, + -0.000347484674695697,-0.0136971386980749,0.60178210272094,-0.570280553025122, + -0.000355850230236654,-0.013211431699153,0.617503094537241,-0.587401267110677, + -0.000123104875927371,-0.0183781797131825,0.227809902064159,-0.191156643533338, + -0.000128708047047621,-0.0178233055562346,0.241835420990147,-0.209664668915444, + -0.000134311218167482,-0.0172684313992865,0.255860939916135,-0.228172694297549, + -0.000139914389287454,-0.0167135572423387,0.269886458842123,-0.246680719679654, + -0.000145517560407482,-0.0161586830853908,0.283911977768111,-0.265188745061759, + -0.000151120731527343,-0.0156038089284429,0.297937496694099,-0.283696770443864, + -0.000156723902647593,-0.015048934771495,0.311963015620087,-0.30220479582597, + -0.000162327073767177,-0.0144940606145465,0.325988534546075,-0.320712821208075, + -0.000167930244887371,-0.0139391864575988,0.340014053472063,-0.33922084659018, + -0.000173533416007232,-0.0133843123006507,0.354039572398051,-0.357728871972285, + -0.000179136587127204,-0.0128294381437026,0.368065091324039,-0.37623689735439, + -0.000184739758247177,-0.012274563986755,0.382090610250026,-0.394744922736496, + -0.00019034292936726,-0.0117196898298071,0.396116129176014,-0.413252948118601, + -0.000195946100487454,-0.0111648156728592,0.410141648102002,-0.431760973500706, + -0.000201549271607426,-0.0106099415159115,0.42416716702799,-0.450268998882811, + -0.000207152442727065,-0.010055067358963,0.438192685953978,-0.468777024264916, + -0.000212755613846816,-0.00950019320201467,0.452218204879966,-0.487285049647022, + -0.000218358784967121,-0.00894531904506768,0.466243723805953,-0.505793075029127, + -0.000223961956085983,-0.0083904448881178,0.480269242731942,-0.524301100411232, + -0.000229565127207065,-0.00783557073117125,0.49429476165793,-0.542809125793337, + -0.00023516829832726,-0.00728069657422381,0.508320280583917,-0.561317151175442, + -0.000240771469446788,-0.00672582241727548,0.522345799509905,-0.579825176557547, + -0.000246374640567315,-0.00617094826032805,0.536371318435893,-0.598333201939653, + -0.000251977811686843,-0.00561607410337928,0.550396837361881,-0.616841227321758, + -0.000257580982807593,-0.00506119994643273,0.564422356287869,-0.635349252703863, + -9.5259225765143e-05,-0.0137772956582463,0.216428773426664,-0.20309124885627, + -9.8831983422254e-05,-0.0132370386761339,0.228951189487147,-0.222729251813998, + -0.000102404741079476,-0.0126967816940213,0.24147360554763,-0.242367254771726, + -0.000105977498736809,-0.0121565247119089,0.253996021608114,-0.262005257729454, + -0.000109550256394364,-0.0116162677297968,0.266518437668597,-0.281643260687182, + -0.000113123014051308,-0.0110760107476839,0.27904085372908,-0.301281263644909, + -0.000116695771708697,-0.0105357537655719,0.291563269789563,-0.320919266602637, + -0.000120268529365974,-0.00999549678345923,0.304085685850047,-0.340557269560365, + -0.000123841287023474,-0.00945523980134721,0.31660810191053,-0.360195272518093, + -0.000127414044680418,-0.00891498281923409,0.329130517971013,-0.379833275475821, + -0.000130986802338029,-0.00837472583712229,0.341652934031496,-0.399471278433549, + -0.000134559559995084,-0.0078344688550096,0.35417535009198,-0.419109281391277, + -0.000138132317652695,-0.0072942118728978,0.366697766152463,-0.438747284349005, + -0.000141705075309528,-0.00675395489078445,0.379220182212946,-0.458385287306732, + -0.000145277832966917,-0.00621369790867199,0.39174259827343,-0.47802329026446, + -0.000148850590624083,-0.00567344092655975,0.404265014333913,-0.497661293222188, + -0.00015242334828125,-0.00513318394444684,0.416787430394396,-0.517299296179916, + -0.000155996105938638,-0.00459292696233504,0.429309846454879,-0.536937299137644, + -0.000159568863596582,-0.00405266998022347,0.441832262515362,-0.556575302095372, + -0.000163141621253193,-0.00351241299811011,0.454354678575846,-0.5762133050531, + -0.000166714378910249,-0.00297215601599721,0.466877094636329,-0.595851308010827, + -0.000170287136567748,-0.00243189903388519,0.479399510696812,-0.615489310968555, + -0.000173859894224582,-0.00189164205177228,0.491921926757296,-0.635127313926283, + -0.000177432651882303,-0.0013513850696607,0.504444342817779,-0.654765316884011, + -0.000181005409539692,-0.000811128087548685,0.516966758878262,-0.674403319841739, + -7.22157827551806e-05,-0.0105906202215608,0.206629817519026,-0.212509482039568, + -7.43988167827836e-05,-0.0101075774870291,0.217888653401413,-0.23303921053083, + -7.6581850809887e-05,-0.00962453475249658,0.2291474892838,-0.253568939022092, + -7.8764884837601e-05,-0.00914149201796488,0.240406325166187,-0.274098667513354, + -8.0947918865093e-05,-0.00865844928343318,0.251665161048574,-0.294628396004616, + -8.31309528921964e-05,-0.00817540654890059,0.262923996930961,-0.315158124495878, + -8.53139869194663e-05,-0.00769236381436844,0.274182832813348,-0.33568785298714, + -8.74970209470138e-05,-0.00720932107983674,0.285441668695735,-0.356217581478402, + -8.96800549744503e-05,-0.00672627834530459,0.296700504578122,-0.376747309969664, + -9.18630890021088e-05,-0.00624323561077311,0.307959340460509,-0.397277038460926, + -9.40461230293232e-05,-0.00576019287624097,0.319218176342896,-0.417806766952188, + -9.62291570567597e-05,-0.00527715014170882,0.330477012225283,-0.43833649544345, + -9.84121910838631e-05,-0.00479410740717623,0.341735848107671,-0.458866223934713, + -0.000100595225111522,-0.00431106467264475,0.352994683990058,-0.479395952425975, + -0.000102778259138847,-0.00382802193811282,0.364253519872444,-0.499925680917237, + -0.000104961293166062,-0.00334497920358023,0.375512355754832,-0.520455409408499, + -0.000107144327193942,-0.0028619364690492,0.386771191637218,-0.540985137899761, + -0.000109327361220934,-0.00237889373451683,0.398030027519605,-0.561514866391023, + -0.000111510395248593,-0.00189585099998446,0.409288863401993,-0.582044594882285, + -0.000113693429276251,-0.00141280826545298,0.42054769928438,-0.602574323373547, + -0.000115876463303355,-0.000929765530920612,0.431806535166767,-0.623104051864809, + -0.000118059497331013,-0.000446722796389132,0.443065371049153,-0.643633780356071, + -0.000120242531358339,3.63199381432366e-05,0.454324206931541,-0.664163508847334, + -0.00012242556538522,0.000519362672675605,0.465583042813928,-0.684693237338596, + -0.000124608599413656,0.0010024054072062,0.476841878696314,-0.705222965829858, + -5.38861574215788e-05,-0.00840911598937211,0.198597059407067,-0.219758117421436, + -5.51742842593295e-05,-0.00799786761214571,0.208836897178451,-0.240974152264164, + -5.64624110964695e-05,-0.00758661923491832,0.219076734949836,-0.262190187106893, + -5.77505379337762e-05,-0.00717537085769093,0.229316572721221,-0.283406221949622, + -5.90386647713603e-05,-0.00676412248046443,0.239556410492605,-0.304622256792351, + -6.0326791608889e-05,-0.00635287410323748,0.24979624826399,-0.325838291635079, + -6.16149184463621e-05,-0.00594162572601076,0.260036086035374,-0.347054326477808, + -6.29030452834467e-05,-0.00553037734878292,0.270275923806759,-0.368270361320537, + -6.41911721213084e-05,-0.00511912897155664,0.280515761578144,-0.389486396163266, + -6.5479298958282e-05,-0.00470788059432903,0.290755599349528,-0.410702431005994, + -6.67674257960327e-05,-0.00429663221710275,0.300995437120912,-0.431918465848723, + -6.80555526336724e-05,-0.00388538383987558,0.311235274892298,-0.453134500691452, + -6.93436794707569e-05,-0.00347413546264841,0.321475112663682,-0.474350535534181, + -7.06318063086186e-05,-0.00306288708542168,0.331714950435066,-0.495566570376909, + -7.19199331457032e-05,-0.00265163870819451,0.341954788206451,-0.516782605219638, + -7.32080599835649e-05,-0.00224039033096757,0.352194625977836,-0.537998640062367, + -7.44961868213156e-05,-0.00182914195374129,0.36243446374922,-0.559214674905096, + -7.57843136581782e-05,-0.00141789357651323,0.372674301520605,-0.580430709747824, + -7.70724404960399e-05,-0.00100664519928673,0.38291413929199,-0.601646744590553, + -7.83605673330134e-05,-0.000595396822059335,0.393153977063374,-0.622862779433282, + -7.96486941704311e-05,-0.000184148444832388,0.403393814834759,-0.64407881427601, + -8.09368210075156e-05,0.000227099932395003,0.413633652606143,-0.665294849118739, + -8.22249478458215e-05,0.000638348309620618,0.423873490377528,-0.686510883961468, + -8.3513074682573e-05,0.0010495966868489,0.434113328148913,-0.707726918804197, + -8.48012015206567e-05,0.0014608450640754,0.444353165920297,-0.728942953646926, + -3.97336811269189e-05,-0.00692027245687898,0.192250117530069,-0.225230161146074, + -4.04737021136303e-05,-0.00657935348492511,0.201693916018145,-0.246964293281035, + -4.12137231006193e-05,-0.00623843451297157,0.211137714506222,-0.268698425415996, + -4.19537440876638e-05,-0.00589751554101814,0.220581512994299,-0.290432557550956, + -4.26937650747083e-05,-0.00555659656906449,0.230025311482376,-0.312166689685917, + -4.34337860619749e-05,-0.0052156775971115,0.239469109970452,-0.333900821820878, + -4.41738070489639e-05,-0.00487475862515763,0.248912908458529,-0.355634953955839, + -4.49138280361749e-05,-0.00453383965320442,0.258356706946606,-0.377369086090799, + -4.56538490228864e-05,-0.00419292068125054,0.267800505434683,-0.39910321822576, + -4.6393870010264e-05,-0.00385200170929734,0.277244303922759,-0.420837350360721, + -4.71338909971974e-05,-0.00351108273734368,0.286688102410836,-0.442571482495681, + -4.78739119839089e-05,-0.00317016376538959,0.296131900898913,-0.464305614630642, + -4.86139329715085e-05,-0.00282924479343682,0.30557569938699,-0.486039746765603, + -4.9353953958442e-05,-0.00248832582148339,0.315019497875066,-0.507773878900564, + -5.00939749458196e-05,-0.00214740684953063,0.324463296363143,-0.529508011035525, + -5.083399593242e-05,-0.00180648787757587,0.33390709485122,-0.551242143170485, + -5.15740169193535e-05,-0.00146556890562266,0.343350893339297,-0.572976275305446, + -5.2314037906509e-05,-0.00112464993366901,0.352794691827374,-0.594710407440407, + -5.30540588929984e-05,-0.000783730961714912,0.362238490315451,-0.616444539575367, + -5.37940798813752e-05,-0.000442811989763037,0.371682288803527,-0.638178671710328, + -5.45341008675315e-05,-0.000101893017808496,0.381126087291604,-0.659912803845289, + -5.5274121854465e-05,0.0002390259541456,0.390569885779681,-0.681646935980249, + -5.60141428422867e-05,0.000579944926097031,0.400013684267757,-0.70338106811521, + -5.67541638294422e-05,0.000920863898050683,0.409457482755833,-0.725115200250171, + -5.74941848158206e-05,0.00126178287000567,0.418901281243911,-0.746849332385132, + -2.90430991169432e-05,-0.0059015538369479,0.187370408683567,-0.229301071953837, + -2.94603848240982e-05,-0.00562201581875277,0.196207044092587,-0.251420641042988, + -2.98776705318082e-05,-0.00534247780055863,0.205043679501608,-0.273540210132138, + -3.02949562390187e-05,-0.00506293978236383,0.213880314910628,-0.295659779221289, + -3.07122419463401e-05,-0.00478340176416903,0.222716950319648,-0.31777934831044, + -3.11295276536061e-05,-0.004503863745974,0.231553585728669,-0.339898917399591, + -3.15468133611496e-05,-0.00422432572777987,0.240390221137689,-0.362018486488742, + -3.1964099068138e-05,-0.0039447877095844,0.24922685654671,-0.384138055577892, + -3.23813847760146e-05,-0.00366524969139026,0.25806349195573,-0.406257624667043, + -3.2798670482892e-05,-0.00338571167319524,0.26690012736475,-0.428377193756194, + -3.32159561907686e-05,-0.00310617365500132,0.275736762773771,-0.450496762845345, + -3.3633241897868e-05,-0.00282663563680607,0.284573398182791,-0.472616331934496, + -3.40505276055225e-05,-0.00254709761861216,0.293410033591811,-0.494735901023647, + -3.4467813312955e-05,-0.00226755960041758,0.302246669000831,-0.516855470112797, + -3.48850990199434e-05,-0.00198802158222211,0.311083304409852,-0.538975039201948, + -3.53023847272649e-05,-0.00170848356402775,0.319919939818872,-0.561094608291099, + -3.57196704350304e-05,-0.00142894554583339,0.328756575227893,-0.58321417738025, + -3.61369561417968e-05,-0.0011494075276377,0.337593210636913,-0.605333746469401, + -3.65542418493403e-05,-0.000869869509443788,0.346429846045933,-0.627453315558551, + -3.69715275567728e-05,-0.000590331491248985,0.355266481454954,-0.649572884647702, + -3.73888132637612e-05,-0.000310793473053295,0.364103116863975,-0.671692453736853, + -3.78060989716378e-05,-3.12554548602684e-05,0.372939752272994,-0.693812022826004, + -3.82233846790703e-05,0.000248282563334534,0.381776387682015,-0.715931591915155, + -3.86406703868358e-05,0.000527820581528449,0.390613023091035,-0.738051161004305, + -3.90579560939353e-05,0.000807358599723251,0.399449658500055,-0.760170730093456, + -2.1094599880922e-05,-0.00520062882525585,0.183693463991894,-0.232296782006268, + -2.13273514954038e-05,-0.00497121951867519,0.192075151284544,-0.254699987218334, + -2.15601031103851e-05,-0.0047418102120953,0.200456838577194,-0.2771031924304, + -2.17928547247559e-05,-0.00451240090551441,0.208838525869844,-0.299506397642466, + -2.20256063397928e-05,-0.00428299159893464,0.217220213162494,-0.321909602854531, + -2.2258357953886e-05,-0.00405358229235331,0.225601900455144,-0.344312808066597, + -2.24911095688118e-05,-0.00382417298577331,0.233983587747794,-0.366716013278662, + -2.27238611839597e-05,-0.00359476367919331,0.242365275040444,-0.389119218490728, + -2.29566127979419e-05,-0.00336535437261265,0.250746962333093,-0.411522423702794, + -2.31893644129233e-05,-0.00313594506603199,0.259128649625744,-0.43392562891486, + -2.34221160275716e-05,-0.00290653575945155,0.267510336918394,-0.456328834126925, + -2.36548676416648e-05,-0.00267712645287066,0.275892024211044,-0.478732039338991, + -2.38876192572013e-05,-0.00244771714629133,0.284273711503693,-0.501135244551057, + -2.41203708717386e-05,-0.00221830783971066,0.292655398796343,-0.523538449763122, + -2.43531224862759e-05,-0.00198889853313,0.301037086088993,-0.545941654975188, + -2.45858741012572e-05,-0.00175948922654978,0.309418773381643,-0.568344860187253, + -2.48186257155725e-05,-0.00153007991996956,0.317800460674293,-0.590748065399319, + -2.50513773297767e-05,-0.00130067061338845,0.326182147966943,-0.613151270611385, + -2.52841289450911e-05,-0.00107126130680868,0.334563835259593,-0.635554475823451, + -2.55168805597394e-05,-0.000841852000228016,0.342945522552243,-0.657957681035516, + -2.57496321747208e-05,-0.000612442693648241,0.351327209844893,-0.680360886247582, + -2.5982383788703e-05,-0.000383033387066689,0.359708897137543,-0.702764091459648, + -2.62151354034623e-05,-0.00015362408048647,0.368090584430193,-0.725167296671713, + -2.64478870183327e-05,7.57852260933056e-05,0.376472271722843,-0.747570501883779, + -2.66806386326479e-05,0.000305194532674857,0.384853959015493,-0.769973707095844, + -1.52516158616334e-05,-0.00471515731396943,0.180963243355894,-0.234483634114199, + -1.53809743794753e-05,-0.00452500583453941,0.189008458957277,-0.257093892159291, + -1.55103328973172e-05,-0.00433485435510939,0.197053674558659,-0.279704150204383, + -1.56396914151591e-05,-0.00414470287567981,0.205098890160041,-0.302314408249476, + -1.5769049933001e-05,-0.00395455139624956,0.213144105761424,-0.324924666294568, + -1.5898408451176e-05,-0.00376439991681998,0.221189321362806,-0.34753492433966, + -1.60277669687958e-05,-0.00357424843738974,0.229234536964189,-0.370145182384752, + -1.61571254866377e-05,-0.00338409695795994,0.237279752565571,-0.392755440429844, + -1.62864840047572e-05,-0.00319394547853036,0.245324968166954,-0.415365698474936, + -1.64158425223215e-05,-0.00300379399909989,0.253370183768336,-0.437975956520028, + -1.654520104033e-05,-0.00281364251967009,0.261415399369719,-0.46058621456512, + -1.66745595583384e-05,-0.00262349104024029,0.269460614971101,-0.483196472610212, + -1.68039180765689e-05,-0.00243333956081093,0.277505830572484,-0.505806730655304, + -1.69332765936892e-05,-0.00224318808138002,0.285551046173866,-0.528416988700396, + -1.70626351118086e-05,-0.00205303660195066,0.293596261775249,-0.551027246745488, + -1.7191993629817e-05,-0.00186288512252064,0.301641477376631,-0.573637504790581, + -1.73213521474924e-05,-0.0016727336430904,0.309686692978014,-0.596247762835673, + -1.74507106655009e-05,-0.0014825821636606,0.317731908579396,-0.618858020880765, + -1.75800691829542e-05,-0.00129243068423035,0.325777124180779,-0.641468278925857, + -1.77094277005185e-05,-0.00110227920479966,0.333822339782162,-0.664078536970949, + -1.7838786218749e-05,-0.000912127725370304,0.341867555383544,-0.686688795016041, + -1.79681447374236e-05,-0.000721976245941391,0.349912770984926,-0.709299053061133, + -1.80975032540998e-05,-0.000531824766509814,0.357957986586309,-0.731909311106225, + -1.82268617722192e-05,-0.000341673287080013,0.366003202187692,-0.754519569151317, + -1.83562202904497e-05,-0.000151521807650656,0.374048417789074,-0.777129827196409, + -1.09910423647386e-05,-0.0043767277368314,0.178957515472806,-0.236070680673172, + -1.10631729136057e-05,-0.00421647787845592,0.186756241005505,-0.258831201502377, + -1.11353034624173e-05,-0.00405622802008065,0.194554966538204,-0.281591722331581, + -1.12074340113399e-05,-0.00389597816170517,0.202353692070903,-0.304352243160786, + -1.12795645599295e-05,-0.00373572830332969,0.210152417603602,-0.32711276398999, + -1.13516951090187e-05,-0.00357547844495465,0.217951143136301,-0.349873284819195, + -1.14238256578303e-05,-0.00341522858657917,0.225749868669001,-0.3726338056484, + -1.14959562066419e-05,-0.00325497872820368,0.2335485942017,-0.395394326477604, + -1.1568086755398e-05,-0.00309472886982842,0.241347319734399,-0.418154847306809, + -1.16402173040431e-05,-0.0029344790114525,0.249146045267098,-0.440915368136014, + -1.17123478530212e-05,-0.00277422915307768,0.256944770799797,-0.463675888965218, + -1.17844784019994e-05,-0.00261397929470242,0.264743496332496,-0.486436409794423, + -1.18566089507555e-05,-0.00245372943632693,0.272542221865195,-0.509196930623628, + -1.19287394994005e-05,-0.00229347957795123,0.280340947397894,-0.531957451452832, + -1.20008700482677e-05,-0.00213322971957597,0.288139672930593,-0.554717972282037, + -1.20730005969127e-05,-0.00197297986120004,0.295938398463293,-0.577478493111241, + -1.21451311455578e-05,-0.00181273000282456,0.303737123995992,-0.600239013940446, + -1.22172616944249e-05,-0.00165248014444908,0.311535849528691,-0.62299953476965, + -1.22893922435141e-05,-0.00149223028607448,0.31933457506139,-0.645760055598855, + -1.23615227921592e-05,-0.00133198042769855,0.327133300594089,-0.66852057642806, + -1.24336533406932e-05,-0.00117173056932307,0.334932026126788,-0.691281097257264, + -1.25057838896714e-05,-0.00101148071094759,0.342730751659487,-0.714041618086469, + -1.25779144382054e-05,-0.000851230852572105,0.350529477192186,-0.736802138915674, + -1.26500449874056e-05,-0.000690980994197066,0.358328202724886,-0.759562659744878, + -1.27221755361617e-05,-0.000530731135821583,0.366126928257585,-0.782323180574083, + -7.90215576385034e-06,-0.00413945281520123,0.177495362116764,-0.237217535088211, + -7.94276612925415e-06,-0.00400155104414346,0.185114758704036,-0.260086640972089, + -7.98337649526859e-06,-0.0038636492730868,0.192734155291306,-0.282955746855967, + -8.02398686083894e-06,-0.00372574750202936,0.200353551878578,-0.305824852739845, + -8.06459722652031e-06,-0.00358784573097193,0.207972948465849,-0.328693958623724, + -8.10520759236821e-06,-0.00344994395991471,0.21559234505312,-0.351563064507602, + -8.14581795838265e-06,-0.00331204218885817,0.22321174164039,-0.37443217039148, + -8.18642832367544e-06,-0.00317414041780029,0.230831138227662,-0.397301276275358, + -8.22703868941232e-06,-0.00303623864674285,0.238450534814933,-0.420170382159236, + -8.26764905503818e-06,-0.00289833687568564,0.246069931402204,-0.443039488043115, + -8.30825942088609e-06,-0.00276043510462864,0.253689327989475,-0.465908593926993, + -8.34886978640093e-06,-0.00262253333357076,0.261308724576746,-0.488777699810871, + -8.38948015213781e-06,-0.00248463156251333,0.268928121164018,-0.511646805694749, + -8.43009051776367e-06,-0.00234672979145634,0.276547517751288,-0.534515911578627, + -8.47070088338953e-06,-0.00220882802039912,0.284166914338559,-0.557385017462506, + -8.51131124912641e-06,-0.00207092624934213,0.29178631092583,-0.580254123346384, + -8.55192161508533e-06,-0.00193302447828492,0.299405707513102,-0.603123229230262, + -8.59253198048915e-06,-0.00179512270722748,0.307025104100373,-0.62599233511414, + -8.63314234644807e-06,-0.00165722093617049,0.314644500687643,-0.648861440998018, + -8.67375271185189e-06,-0.00151931916511261,0.322263897274915,-0.671730546881896, + -8.71436307736673e-06,-0.00138141739405517,0.329883293862186,-0.694599652765775, + -8.75497344310361e-06,-0.00124351562299818,0.337502690449457,-0.717468758649653, + -8.79558380861845e-06,-0.00110561385194075,0.345122087036728,-0.740337864533531, + -8.83619417468839e-06,-0.000967712080883754,0.352741483623999,-0.763206970417409, + -8.87680454009221e-06,-0.000829810309825874,0.360360880211271,-0.786076076301288, + -5.67187185163132e-06,-0.00397231155957245,0.176435385492517,-0.238043740567624, + -5.69509122033685e-06,-0.00385089488842016,0.183924964287591,-0.260991072219287, + -5.71831058870931e-06,-0.00372947821726743,0.191414543082666,-0.283938403870949, + -5.74152995813648e-06,-0.00360806154611626,0.19890412187774,-0.306885735522612, + -5.76474932639792e-06,-0.00348664487496331,0.206393700672815,-0.329833067174275, + -5.7879686953255e-06,-0.00336522820381124,0.213883279467889,-0.352780398825938, + -5.81118806392e-06,-0.00324381153265918,0.221372858262963,-0.375727730477601, + -5.83440743240349e-06,-0.00312239486150623,0.228862437058038,-0.398675062129264, + -5.8576268014976e-06,-0.00300097819035461,0.236352015853112,-0.421622393780926, + -5.88084617014761e-06,-0.00287956151920232,0.243841594648187,-0.444569725432589, + -5.90406553901968e-06,-0.00275814484805004,0.251331173443262,-0.467517057084252, + -5.92728490811378e-06,-0.00263672817689842,0.258820752238336,-0.490464388735915, + -5.95050427609767e-06,-0.00251531150574524,0.266310331033411,-0.513411720387578, + -5.97372364519178e-06,-0.00239389483459318,0.273799909828485,-0.53635905203924, + -5.99694301395282e-06,-0.00227247816344134,0.281289488623559,-0.559306383690903, + -6.02016238260283e-06,-0.00215106149228905,0.288779067418634,-0.582253715342566, + -6.04338175136387e-06,-0.00202964482113677,0.296268646213708,-0.605201046994229, + -6.06660112023594e-06,-0.00190822814998493,0.303758225008782,-0.628148378645892, + -6.08982048899698e-06,-0.00178681147883264,0.311247803803857,-0.651095710297555, + -6.11303985742495e-06,-0.00166539480768035,0.318737382598931,-0.674043041949217, + -6.1362592267411e-06,-0.00154397813652851,0.326226961394006,-0.69699037360088, + -6.15947859505805e-06,-0.00142256146537623,0.33371654018908,-0.719937705252543, + -6.18269796359705e-06,-0.00130114479422305,0.341206118984155,-0.742885036904206, + -6.20591733369036e-06,-0.00117972812307299,0.348695697779229,-0.765832368555869, + -6.22913670111913e-06,-0.00105831145191893,0.356185276574304,-0.788779700207532, + -4.06620205822827e-06,-0.00385413357897368,0.175670034072985,-0.238637626337883, + -4.07974980204395e-06,-0.00374476611156715,0.183065973785591,-0.261641187549277, + -4.09329754547105e-06,-0.00363539864416018,0.190461913498196,-0.284644748760671, + -4.10684528900918e-06,-0.00352603117675376,0.197857853210801,-0.307648309972065, + -4.12039303265832e-06,-0.00341666370934712,0.205253792923407,-0.330651871183459, + -4.13394077586338e-06,-0.00330729624194004,0.212649732636012,-0.353655432394853, + -4.14748851934599e-06,-0.00319792877453295,0.220045672348618,-0.376658993606247, + -4.16103626310615e-06,-0.00308856130712676,0.227441612061223,-0.399662554817641, + -4.17458400614468e-06,-0.00297919383971945,0.234837551773829,-0.422666116029035, + -4.1881317501824e-06,-0.00286982637231348,0.242233491486434,-0.445669677240429, + -4.20167949344297e-06,-0.00276045890490639,0.249629431199039,-0.468673238451823, + -4.21522723770273e-06,-0.00265109143750042,0.257025370911645,-0.491676799663217, + -4.22877498051921e-06,-0.00254172397009311,0.26442131062425,-0.514680360874611, + -4.24232272400182e-06,-0.00243235650268647,0.271817250336855,-0.537683922086005, + -4.25587046826159e-06,-0.00232298903528028,0.279213190049461,-0.560687483297399, + -4.26941821163318e-06,-0.00221362156787341,0.286609129762066,-0.583691044508793, + -4.28296595456068e-06,-0.00210425410046611,0.294005069474671,-0.606694605720187, + -4.29651369782125e-06,-0.0019948866330588,0.301401009187277,-0.629698166931581, + -4.31006144185897e-06,-0.00188551916565283,0.308796948899882,-0.652701728142975, + -4.32360918556363e-06,-0.00177615169824685,0.316192888612487,-0.675705289354369, + -4.3371569293793e-06,-0.00166678423083955,0.323588828325093,-0.698708850565763, + -4.35070467263987e-06,-0.00155741676343357,0.330984768037698,-0.721712411777157, + -4.36425241612248e-06,-0.00144804929602627,0.338380707750304,-0.744715972988551, + -4.37780015949407e-06,-0.00133868182861896,0.34577664746291,-0.767719534199945, + -4.39134790308771e-06,-0.00122931436121254,0.353172587175515,-0.790723095411339, + -2.91260403556537e-06,-0.00377033534021953,0.17511900170741,-0.239063836644894, + -2.92069931934202e-06,-0.00366971807965799,0.182447572705915,-0.262107751774695, + -2.92879460289663e-06,-0.00356910081909634,0.18977614370442,-0.285151666904496, + -2.93688988639573e-06,-0.00346848355853435,0.197104714702926,-0.308195582034297, + -2.94498516989483e-06,-0.00336786629797214,0.204433285701431,-0.331239497164098, + -2.95308045367149e-06,-0.00326724903741105,0.211761856699936,-0.3542834122939, + -2.96117573728161e-06,-0.00316663177684906,0.219090427698441,-0.377327327423701, + -2.96927102072519e-06,-0.00306601451628685,0.226418998696946,-0.400371242553502, + -2.97736630461287e-06,-0.00296539725572575,0.233747569695451,-0.423415157683303, + -2.98546158772339e-06,-0.0028647799951631,0.241076140693957,-0.446459072813104, + -2.99355687161107e-06,-0.002764162734602,0.248404711692461,-0.469502987942905, + -3.0016521552767e-06,-0.00266354547404024,0.255733282690966,-0.492546903072706, + -3.00974743894233e-06,-0.00256292821347825,0.263061853689472,-0.515590818202507, + -3.01784272271899e-06,-0.00246231095291671,0.270390424687977,-0.538634733332308, + -3.02593800616258e-06,-0.00236169369235539,0.277718995686481,-0.561678648462109, + -3.03403328971719e-06,-0.00226107643179319,0.285047566684987,-0.58472256359191, + -3.04212857338282e-06,-0.00216045917123164,0.292376137683492,-0.607766478721712, + -3.05022385715947e-06,-0.0020598419106701,0.299704708681997,-0.630810393851513, + -3.05831914093613e-06,-0.00195922465010812,0.307033279680502,-0.653854308981314, + -3.06641442393563e-06,-0.00185860738954569,0.314361850679007,-0.676898224111115, + -3.07450970771228e-06,-0.00175799012898503,0.321690421677512,-0.699942139240916, + -3.08260499148894e-06,-0.00165737286842305,0.329018992676017,-0.722986054370717, + -3.09070027570968e-06,-0.00155675560786195,0.336347563674522,-0.746029969500518, + -3.09879555826509e-06,-0.00145613834729907,0.343676134673027,-0.769073884630319, + -3.10689084259685e-06,-0.00135552108673798,0.351004705671532,-0.79211779976012, + -2.08501737136713e-06,-0.00371078691206617,0.174723090188211,-0.239369361772837, + -2.08998080425404e-06,-0.00361649511294615,0.182003282468652,-0.262442204255829, + -2.09494423708545e-06,-0.00352220331382602,0.189283474749094,-0.28551504673882, + -2.09990766980583e-06,-0.00342791151470556,0.196563667029536,-0.308587889221812, + -2.10487110263724e-06,-0.00333361971558599,0.203843859309977,-0.331660731704803, + -2.10983453541314e-06,-0.00323932791646553,0.211124051590418,-0.354733574187795, + -2.11479796846659e-06,-0.00314503611734618,0.218404243870859,-0.377806416670786, + -2.11976140118697e-06,-0.00305074431822572,0.225684436151301,-0.400879259153778, + -2.12472483385184e-06,-0.00295645251910526,0.232964628431743,-0.423952101636769, + -2.12968826696081e-06,-0.00286216071998546,0.240244820712184,-0.447024944119761, + -2.13465169940363e-06,-0.00276786892086522,0.247525012992626,-0.470097786602753, + -2.1396151325126e-06,-0.00267357712174543,0.254805205273067,-0.493170629085744, + -2.14457856528849e-06,-0.00257928532262519,0.262085397553509,-0.516243471568736, + -2.14954199795336e-06,-0.00248499352350517,0.26936558983395,-0.539316314051727, + -2.1545054309513e-06,-0.00239070172438494,0.276645782114392,-0.562389156534719, + -2.1594688637272e-06,-0.00229640992526559,0.283925974394833,-0.58546199901771, + -2.16443229639207e-06,-0.0022021181261449,0.291206166675275,-0.608534841500702, + -2.16939572916797e-06,-0.00210782632702466,0.298486358955716,-0.631607683983693, + -2.17435916261e-06,-0.00201353452790531,0.305766551236157,-0.654680526466685, + -2.1793225949418e-06,-0.00191924272878463,0.313046743516599,-0.677753368949676, + -2.18428602816179e-06,-0.00182495092966484,0.320326935797041,-0.700826211432668, + -2.18924946071564e-06,-0.0017306591305446,0.327607128077482,-0.723899053915659, + -2.19421289371358e-06,-0.00163636733142436,0.334887320357924,-0.746971896398651, + -2.19917632637845e-06,-0.00154207553230412,0.342167512638365,-0.770044738881642, + -2.20413975959843e-06,-0.00144778373318477,0.349447704918807,-0.793117581364634, + -1.49193246151702e-06,-0.00366840305462612,0.174439051280189,-0.239588194789053, + -1.49505556684693e-06,-0.00357866906832982,0.181684548038225,-0.262681756549678, + -1.49817867245439e-06,-0.00348893508203418,0.18893004479626,-0.285775318310302, + -1.50130177756225e-06,-0.00339920109573755,0.196175541554295,-0.308868880070927, + -1.50442488316971e-06,-0.00330946710944158,0.203421038312331,-0.331962441831552, + -1.50754798861064e-06,-0.00321973312314561,0.210666535070366,-0.355056003592177, + -1.51067109394054e-06,-0.00312999913684919,0.217912031828402,-0.378149565352802, + -1.513794199548e-06,-0.00304026515055322,0.225157528586437,-0.401243127113426, + -1.51691730487791e-06,-0.00295053116425725,0.232403025344472,-0.424336688874051, + -1.52004040987475e-06,-0.00286079717796039,0.239648522102508,-0.447430250634676, + -1.52316351553772e-06,-0.00277106319166465,0.246894018860543,-0.470523812395301, + -1.52628662097865e-06,-0.00268132920536845,0.254139515618579,-0.493617374155926, + -1.5294097265306e-06,-0.00259159521907226,0.261385012376614,-0.51671093591655, + -1.53253283152743e-06,-0.00250186123277563,0.26863050913465,-0.539804497677175, + -1.53565593741245e-06,-0.00241212724648032,0.275876005892685,-0.5628980594378, + -1.53877904252031e-06,-0.00232239326018324,0.283121502650721,-0.585991621198425, + -1.54190214762817e-06,-0.00223265927388683,0.290366999408756,-0.60908518295905, + -1.54502525373523e-06,-0.00214292528759197,0.297612496166791,-0.632178744719675, + -1.5481483593982e-06,-0.00205319130129578,0.304857992924827,-0.655272306480299, + -1.55127146395095e-06,-0.0019634573149987,0.312103489682862,-0.678365868240924, + -1.55439456961393e-06,-0.00187372332870339,0.319348986440897,-0.701459430001549, + -1.55751767483281e-06,-0.00178398934240587,0.326594483198934,-0.724552991762174, + -1.5606407806068e-06,-0.00169425535611012,0.333839979956969,-0.747646553522799, + -1.56376388549262e-06,-0.00160452136981393,0.341085476715004,-0.770740115283423, + -1.5668869907115e-06,-0.00151478738351685,0.34833097347304,-0.793833677044048, + -0.000146583299647174,-0.271218885405731,0.0808864238687777,0.145747218847474, + -0.000185387331537445,-0.286478911886419,0.0924894516929451,0.158574501684756, + -0.000224191363427551,-0.301738938367107,0.104092479517112,0.171401784522039, + -0.000262995395317656,-0.316998964847794,0.115695507341279,0.184229067359322, + -0.000301799427208038,-0.332258991328482,0.127298535165447,0.197056350196604, + -0.000340603459098199,-0.34751901780917,0.138901562989613,0.209883633033887, + -0.000379407490988304,-0.362779044289858,0.150504590813782,0.222710915871169, + -0.000418211522878353,-0.378039070770546,0.16210761863795,0.235538198708452, + -0.000457015554768625,-0.393299097251232,0.173710646462114,0.248365481545736, + -0.000495819586658786,-0.408559123731921,0.185313674286284,0.261192764383017, + -0.000534623618549057,-0.423819150212607,0.196916702110448,0.274020047220302, + -0.000573427650439107,-0.439079176693298,0.20851972993462,0.286847330057582, + -0.000612231682329156,-0.454339203173983,0.220122757758783,0.299674612894867, + -0.000651035714219317,-0.469599229654672,0.231725785582953,0.312501895732148, + -0.000689839746109477,-0.48485925613536,0.243328813407121,0.32532917856943, + -0.00072864377799986,-0.500119282616049,0.25493184123129,0.338156461406712, + -0.00076744780988991,-0.515379309096736,0.266534869055455,0.350983744243995, + -0.000806251841779959,-0.530639335577424,0.278137896879625,0.363811027081277, + -0.000845055873670231,-0.54589936205811,0.289740924703787,0.376638309918562, + -0.000883859905560502,-0.561159388538799,0.301343952527958,0.389465592755843, + -0.000922663937450663,-0.576419415019487,0.312946980352125,0.402292875593126, + -0.000961467969340934,-0.591679441500176,0.324550008176294,0.415120158430407, + -0.0010002720012311,-0.606939467980861,0.336153036000456,0.427947441267693, + -0.00103907603312114,-0.62219949446155,0.347756063824626,0.440774724104974, + -0.00107788006501119,-0.637459520942238,0.359359091648795,0.453602006942256, + -0.000209464172506113,-0.261658472207287,0.133817819798418,0.114148304246229, + -0.000249874389631366,-0.275727544859501,0.149145262602714,0.12411016579477, + -0.000290284606756397,-0.289796617511715,0.164472705407009,0.134072027343312, + -0.000330694823881594,-0.303865690163928,0.179800148211304,0.144033888891853, + -0.000371105041006847,-0.317934762816142,0.1951275910156,0.153995750440394, + -0.000411515258131878,-0.332003835468356,0.210455033819895,0.163957611988936, + -0.000451925475256965,-0.34607290812057,0.225782476624191,0.173919473537476, + -0.000492335692382273,-0.360141980772784,0.241109919428488,0.183881335086017, + -0.00053274590950747,-0.374211053424997,0.25643736223278,0.19384319663456, + -0.000573156126632557,-0.388280126077211,0.271764805037078,0.2038050581831, + -0.000613566343757754,-0.402349198729424,0.28709224784137,0.213766919731643, + -0.000653976560882841,-0.416418271381639,0.302419690645669,0.223728781280182, + -0.000694386778008038,-0.430487344033852,0.317747133449961,0.233690642828725, + -0.000734796995133347,-0.444556416686066,0.333074576254259,0.243652504377265, + -0.000775207212258322,-0.45862548933828,0.348402019058555,0.253614365925806, + -0.000815617429383741,-0.472694561990494,0.363729461862852,0.263576227474346, + -0.000856027646508606,-0.486763634642708,0.379056904667147,0.273538089022888, + -0.000896437863633803,-0.500832707294922,0.394384347471443,0.283499950571429, + -0.000936848080759112,-0.514901779947134,0.409711790275735,0.293461812119972, + -0.000977258297884309,-0.528970852599349,0.425039233080033,0.303423673668512, + -0.00101766851500917,-0.543039925251562,0.440366675884328,0.313385535217053, + -0.00105807873213459,-0.557108997903777,0.455694118688625,0.323347396765593, + -0.00109848894925979,-0.57117807055599,0.471021561492917,0.333309258314136, + -0.00113889916638488,-0.585247143208204,0.486349004297215,0.343271119862676, + -0.00117930938351007,-0.599316215860418,0.50167644710151,0.353232981411218, + -0.000265515191711585,-0.236985506141874,0.185195266788547,0.0776044839146968, + -0.000306381893174612,-0.248929044705287,0.20393791292456,0.0842525151601619, + -0.000347248594637306,-0.2608725832687,0.222680559060573,0.0909005464056268, + -0.000388115296100167,-0.272816121832113,0.241423205196585,0.0975485776510922, + -0.000428981997563194,-0.284759660395527,0.260165851332598,0.104196608896557, + -0.000469848699026054,-0.296703198958939,0.27890849746861,0.110844640142022, + -0.000510715400488915,-0.308646737522353,0.297651143604623,0.117492671387487, + -0.000551582101951942,-0.320590276085766,0.316393789740637,0.124140702632952, + -0.000592448803414802,-0.332533814649179,0.335136435876647,0.130788733878418, + -0.000633315504877774,-0.344477353212592,0.353879082012662,0.137436765123882, + -0.000674182206340634,-0.356420891776004,0.372621728148672,0.144084796369349, + -0.000715048907803606,-0.368364430339418,0.391364374284688,0.150732827614812, + -0.000755915609266355,-0.380307968902831,0.410107020420697,0.157380858860279, + -0.000796782310729105,-0.392251507466244,0.428849666556712,0.164028890105743, + -0.000837649012192299,-0.404195046029658,0.447592312692726,0.170676921351207, + -0.000878515713655159,-0.41613858459307,0.466334958828739,0.177324952596672, + -0.000919382415117798,-0.428082123156483,0.485077604964751,0.183972983842137, + -0.000960249116580769,-0.440025661719897,0.503820251100765,0.190621015087602, + -0.00100111581804385,-0.451969200283309,0.522562897236774,0.197269046333069, + -0.00104198251950682,-0.463912738846723,0.541305543372789,0.203917077578533, + -0.00108284922096968,-0.475856277410136,0.560048189508802,0.210565108823998, + -0.00112371592243232,-0.487799815973549,0.578790835644814,0.217213140069463, + -0.00116458262389507,-0.499743354536961,0.597533481780825,0.223861171314929, + -0.00120544932535838,-0.511686893100375,0.61627612791684,0.230509202560393, + -0.00124631602682101,-0.523630431663788,0.635018774052852,0.237157233805858, + -0.000306608637818284,-0.201449472070623,0.229584395024278,0.0373423139113528, + -0.000346281658001768,-0.210696435852848,0.250981984107072,0.0403393311737625, + -0.000385954678185307,-0.219943399635072,0.272379573189866,0.0433363484361724, + -0.000425627698368847,-0.229190363417296,0.29377716227266,0.0463333656985824, + -0.000465300718552331,-0.238437327199521,0.315174751355454,0.0493303829609921, + -0.000504973738735703,-0.247684290981745,0.336572340438247,0.0523274002234024, + -0.000544646758919298,-0.25693125476397,0.357969929521041,0.055324417485812, + -0.000584319779102782,-0.266178218546194,0.379367518603836,0.0583214347482216, + -0.000623992799286266,-0.275425182328419,0.400765107686628,0.0613184520106327, + -0.000663665819469861,-0.284672146110643,0.422162696769424,0.0643154692730413, + -0.000703338839653345,-0.293919109892868,0.443560285852215,0.0673124865354527, + -0.000743011859836828,-0.303166073675092,0.464957874935012,0.0703095037978607, + -0.000782684880020201,-0.312413037457316,0.486355464017804,0.0733065210602717, + -0.000822357900204018,-0.321660001239541,0.507753053100599,0.076303538322681, + -0.000862030920387169,-0.330906965021766,0.529150642183394,0.0793005555850902, + -0.000901703940570764,-0.34015392880399,0.550548231266187,0.0822975728475001, + -0.000941376960754359,-0.349400892586215,0.571945820348981,0.0852945901099099, + -0.000981049980938176,-0.35864785636844,0.593343409431776,0.0882916073723191, + -0.00102072300112155,-0.367894820150664,0.614740998514567,0.091288624634731, + -0.00106039602130481,-0.377141783932888,0.636138587597363,0.0942856418971395, + -0.00110006904148863,-0.386388747715113,0.657536176680156,0.0972826591595499, + -0.00113974206167167,-0.395635711497337,0.67893376576295,0.10027967642196, + -0.00117941508185537,-0.404882675279561,0.700331354845744,0.10327669368437, + -0.00121908810203908,-0.414129639061786,0.721728943928538,0.10627371094678, + -0.00125876112222223,-0.42337660284401,0.743126533011331,0.109270728209189, + -0.000326480061561718,-0.161175547115598,0.262275619882452,-0.00471439479227425, + -0.000363081683064648,-0.167624575368612,0.285206297846787,-0.00553112208326205, + -0.000399683304567522,-0.174073603621626,0.308136975811121,-0.00634784937424984, + -0.000436284926070452,-0.180522631874639,0.331067653775456,-0.0071645766652375, + -0.000472886547573326,-0.186971660127653,0.353998331739791,-0.00798130395622549, + -0.0005094881690762,-0.193420688380667,0.376929009704125,-0.00879803124721289, + -0.000546089790579241,-0.199869716633681,0.39985968766846,-0.00961475853820119, + -0.000582691412082004,-0.206318744886695,0.422790365632795,-0.0104314858291892, + -0.000619293033584767,-0.212767773139709,0.445721043597129,-0.011248213120176, + -0.000655894655087863,-0.219216801392723,0.468651721561465,-0.0120649404111648, + -0.000692496276590959,-0.225665829645737,0.491582399525798,-0.0128816677021519, + -0.0007290978980935,-0.232114857898751,0.514513077490135,-0.0136983949931409, + -0.000765699519596597,-0.238563886151765,0.537443755454468,-0.0145151222841275, + -0.00080230114109936,-0.245012914404779,0.560374433418803,-0.015331849575116, + -0.000838902762602234,-0.251461942657792,0.583305111383138,-0.016148576866104, + -0.00087550438410533,-0.257910970910807,0.606235789347473,-0.0169653041570921, + -0.000912106005607982,-0.26435999916382,0.629166467311808,-0.0177820314480802, + -0.0009487076271113,-0.270809027416835,0.652097145276143,-0.0185987587390683, + -0.00098530924861373,-0.277258055669848,0.675027823240476,-0.0194154860300546, + -0.00102191087011705,-0.283707083922862,0.697958501204813,-0.0202322133210438, + -0.0010585124916197,-0.290156112175876,0.720889179169146,-0.0210489406120308, + -0.00109511411312258,-0.29660514042889,0.743819857133482,-0.0218656679030194, + -0.00113171573462567,-0.303054168681904,0.766750535097815,-0.0226823951940058, + -0.00116831735612843,-0.309503196934918,0.789681213062151,-0.0234991224849944, + -0.00120491897763164,-0.315952225187932,0.812611891026486,-0.0243158497759829, + -0.000323103273302039,-0.12215307045556,0.280851438272442,-0.046269541276926, + -0.000354957525579735,-0.126120709649369,0.30405227637425,-0.0508545309559264, + -0.000386811777857266,-0.130088348843178,0.327253114476057,-0.0554395206349269, + -0.000418666030134962,-0.134055988036987,0.350453952577865,-0.0600245103139272, + -0.000450520282412714,-0.138023627230797,0.373654790679672,-0.0646094999929277, + -0.000482374534690244,-0.141991266424606,0.39685562878148,-0.0691944896719279, + -0.000514228786968052,-0.145958905618415,0.420056466883287,-0.0737794793509285, + -0.000546083039245415,-0.149926544812224,0.443257304985095,-0.0783644690299291, + -0.000577937291523334,-0.153894184006033,0.466458143086902,-0.0829494587089288, + -0.000609791543800808,-0.157861823199842,0.48965898118871,-0.0875344483879299, + -0.000641645796078283,-0.161829462393652,0.512859819290517,-0.0921194380669296, + -0.000673500048355979,-0.165797101587461,0.536060657392326,-0.0967044277459313, + -0.000705354300633787,-0.16976474078127,0.559261495494132,-0.10128941742493, + -0.000737208552911484,-0.173732379975079,0.58246233359594,-0.105874407103932, + -0.000769062805188958,-0.177700019168888,0.605663171697749,-0.110459396782933, + -0.000800917057466433,-0.181667658362697,0.628864009799556,-0.115044386461933, + -0.000832771309744351,-0.185635297556507,0.652064847901364,-0.119629376140933, + -0.000864625562021604,-0.189602936750315,0.675265686003171,-0.124214365819934, + -0.000896479814299411,-0.193570575944125,0.698466524104978,-0.128799355498933, + -0.000928334066577219,-0.197538215137934,0.721667362206786,-0.133384345177935, + -0.000960188318854804,-0.201505854331743,0.744868200308594,-0.137969334856935, + -0.000992042571132279,-0.205473493525552,0.768069038410402,-0.142554324535936, + -0.0010238968234102,-0.209441132719362,0.791269876512208,-0.147139314214935, + -0.00105575107568756,-0.213408771913171,0.814470714614016,-0.151724303893936, + -0.00108760532796537,-0.21737641110698,0.837671552715824,-0.156309293572937, + -0.000299425426667388,-0.0885790639556613,0.285877782085161,-0.0851334078088358, + -0.00032546758613089,-0.0906303354860626,0.308211697068309,-0.0932426119087632, + -0.000351509745594281,-0.092681607016464,0.330545612051456,-0.101351816008691, + -0.000377551905057893,-0.0947328785468653,0.352879527034604,-0.109461020108618, + -0.000403594064521506,-0.0967841500772668,0.375213442017752,-0.117570224208545, + -0.00042963622398523,-0.0988354216076682,0.397547357000899,-0.125679428308472, + -0.000455678383448621,-0.10088669313807,0.419881271984047,-0.1337886324084, + -0.000481720542912178,-0.102937964668471,0.442215186967195,-0.141897836508328, + -0.000507762702375958,-0.104989236198873,0.464549101950342,-0.150007040608254, + -0.000533804861839293,-0.107040507729274,0.48688301693349,-0.158116244708182, + -0.000559847021303073,-0.109091779259676,0.509216931916637,-0.166225448808109, + -0.000585889180766741,-0.111143050790077,0.531550846899785,-0.174334652908037, + -0.000611931340230298,-0.113194322320478,0.553884761882932,-0.182443857007964, + -0.000637973499693967,-0.11524559385088,0.57621867686608,-0.190553061107892, + -0.000664015659157635,-0.117296865381281,0.598552591849228,-0.198662265207819, + -0.000690057818620859,-0.119348136911682,0.620886506832376,-0.206771469307747, + -0.000716099978084306,-0.121399408442084,0.643220421815524,-0.214880673407674, + -0.000742142137547974,-0.123450679972485,0.665554336798672,-0.222989877507602, + -0.000768184297012087,-0.125501951502887,0.687888251781818,-0.231099081607528, + -0.0007942264564752,-0.127553223033288,0.710222166764966,-0.239208285707456, + -0.000820268615938868,-0.129604494563689,0.732556081748114,-0.247317489807383, + -0.000846310775402426,-0.131655766094091,0.754889996731262,-0.255426693907311, + -0.000872352934865983,-0.133707037624492,0.777223911714408,-0.263535898007237, + -0.000898395094329651,-0.135758309154894,0.799557826697556,-0.271645102107165, + -0.000924437253792987,-0.137809580685295,0.821891741680704,-0.279754306207093, + -0.000261985993152636,-0.0622658778388391,0.280334409439723,-0.119656171768983, + -0.000281965775723203,-0.0630193698510431,0.300990676594572,-0.130895934751895, + -0.000301945558293659,-0.0637728618632469,0.32164694374942,-0.142135697734808, + -0.000321925340864559,-0.0645263538754512,0.342303210904269,-0.15337546071772, + -0.000341905123435182,-0.0652798458876551,0.362959478059118,-0.164615223700632, + -0.000361884906005583,-0.0660333378998589,0.383615745213966,-0.175854986683544, + -0.000381864688576372,-0.0667868299120633,0.404272012368815,-0.187094749666457, + -0.000401844471146551,-0.0675403219242665,0.424928279523664,-0.198334512649369, + -0.000421824253717507,-0.068293813936471,0.445584546678512,-0.20957427563228, + -0.000441804036288018,-0.0690473059486747,0.466240813833361,-0.220814038615193, + -0.000461783818858752,-0.0698007979608792,0.486897080988209,-0.232053801598105, + -0.000481763601429486,-0.0705542899730831,0.507553348143058,-0.243293564581018, + -0.000501743384000219,-0.0713077819852874,0.528209615297906,-0.254533327563929, + -0.000521723166570731,-0.0720612739974911,0.548865882452755,-0.265773090546842, + -0.000541702949141243,-0.0728147660096949,0.569522149607604,-0.277012853529754, + -0.000561682731711866,-0.0735682580218988,0.590178416762453,-0.288252616512666, + -0.000581662514282377,-0.0743217500341029,0.610834683917301,-0.299492379495578, + -0.000601642296853,-0.075075242046307,0.63149095107215,-0.310732142478491, + -0.000621622079423401,-0.0758287340585109,0.652147218226998,-0.321971905461402, + -0.000641601861994023,-0.0765822260707145,0.672803485381847,-0.333211668444315, + -0.000661581644564868,-0.0773357180829186,0.693459752536695,-0.344451431427227, + -0.000681561427135602,-0.0780892100951227,0.714116019691544,-0.35569119441014, + -0.000701541209706114,-0.0788427021073268,0.734772286846392,-0.366930957393051, + -0.000721520992276736,-0.0795961941195311,0.755428554001241,-0.378170720375964, + -0.000741500774847581,-0.080349686131735,0.77608482115609,-0.389410483358876, + -0.000218368860962048,-0.0430705668063568,0.268246837935423,-0.148947894182783, + -0.000232778845944137,-0.0430577750698555,0.286810059265156,-0.162843859951379, + -0.000247188830926337,-0.0430449833333544,0.305373280594888,-0.176739825719975, + -0.000261598815908648,-0.0430321915968532,0.323936501924621,-0.190635791488571, + -0.00027600880089057,-0.0430193998603519,0.342499723254354,-0.204531757257167, + -0.000290418785872826,-0.0430066081238507,0.361062944584086,-0.218427723025763, + -0.000304828770855081,-0.0429938163873498,0.379626165913819,-0.232323688794359, + -0.000319238755837281,-0.0429810246508484,0.398189387243552,-0.246219654562955, + -0.000333648740819092,-0.0429682329143473,0.416752608573284,-0.26011562033155, + -0.000348058725801348,-0.0429554411778461,0.435315829903016,-0.274011586100147, + -0.000362468710783159,-0.0429426494413443,0.453879051232749,-0.287907551868742, + -0.000376878695765859,-0.0429298577048436,0.472442272562482,-0.301803517637339, + -0.000391288680747781,-0.0429170659683422,0.491005493892214,-0.315699483405934, + -0.000405698665729703,-0.0429042742318411,0.509568715221947,-0.32959544917453, + -0.000420108650711959,-0.0428914824953397,0.528131936551679,-0.343491414943126, + -0.000434518635694103,-0.0428786907588383,0.546695157881412,-0.357387380711723, + -0.000448928620676026,-0.0428658990223372,0.565258379211145,-0.371283346480319, + -0.000463338605658614,-0.0428531072858362,0.583821600540877,-0.385179312248915, + -0.000477748590640426,-0.0428403155493344,0.60238482187061,-0.39907527801751, + -0.000492158575623014,-0.0428275238128342,0.620948043200342,-0.412971243786106, + -0.000506568560605047,-0.0428147320763328,0.639511264530075,-0.426867209554702, + -0.000520978545587081,-0.0428019403398312,0.658074485859808,-0.440763175323298, + -0.000535388530568892,-0.0427891486033296,0.67663770718954,-0.454659141091894, + -0.000549798515550926,-0.042776356866828,0.695200928519273,-0.46855510686049, + -0.000564208500533514,-0.0427635651303278,0.713764149849005,-0.482451072629086, + -0.000174967021522532,-0.0297769214803709,0.253361158310299,-0.1728493494608, + -0.000184775542161619,-0.0293828081671382,0.269761054268607,-0.188912723181529, + -0.000194584062800762,-0.0289886948539053,0.286160950226915,-0.204976096902259, + -0.000204392583440072,-0.028594581540673,0.302560846185223,-0.221039470622989, + -0.000214201104079159,-0.0282004682274399,0.318960742143531,-0.237102844343719, + -0.000224009624718302,-0.0278063549142074,0.335360638101839,-0.253166218064448, + -0.000233818145357445,-0.0274122416009743,0.351760534060147,-0.269229591785178, + -0.000243626665996755,-0.027018128287742,0.368160430018455,-0.285292965505908, + -0.000253435186635564,-0.0266240149745089,0.384560325976763,-0.301356339226637, + -0.000263243707274929,-0.0262299016612761,0.400960221935071,-0.317419712947367, + -0.00027305222791385,-0.0258357883480433,0.417360117893379,-0.333483086668097, + -0.000282860748552993,-0.0254416750348103,0.433760013851687,-0.349546460388827, + -0.000292669269192136,-0.025047561721578,0.450159909809995,-0.365609834109556, + -0.000302477789831279,-0.0246534484083452,0.466559805768303,-0.381673207830286, + -0.000312286310470089,-0.0242593350951117,0.482959701726611,-0.397736581551016, + -0.000322094831109454,-0.0238652217818789,0.49935959768492,-0.413799955271746, + -0.000331903351748486,-0.0234711084686459,0.515759493643228,-0.429863328992475, + -0.000341711872387962,-0.0230769951554142,0.532159389601535,-0.445926702713205, + -0.000351520393026883,-0.0226828818421809,0.548559285559843,-0.461990076433934, + -0.000361328913666248,-0.0222887685289481,0.564959181518152,-0.478053450154664, + -0.000371137434305391,-0.021894655215716,0.581359077476459,-0.494116823875394, + -0.000380945954944645,-0.0215005419024834,0.597758973434767,-0.510180197596124, + -0.000390754475583233,-0.0211064285892495,0.614158869393076,-0.526243571316853, + -0.000400562996222487,-0.0207123152760169,0.630558765351384,-0.542306945037583, + -0.000410371516861963,-0.0203182019627843,0.646958661309692,-0.558370318758313, + -0.000135915154038768,-0.0208785239313828,0.238404005590504,-0.191738634151289, + -0.000142251668475646,-0.0203450207610709,0.252804682258477,-0.209514907165056, + -0.000148588182912579,-0.0198115175907591,0.26720535892645,-0.227291180178823, + -0.000154924697349568,-0.0192780144204472,0.281606035594422,-0.245067453192591, + -0.000161261211786667,-0.0187445112501357,0.296006712262395,-0.262843726206358, + -0.000167597726223712,-0.0182110080798239,0.310407388930368,-0.280619999220125, + -0.000173934240660256,-0.0176775049095115,0.324808065598341,-0.298396272233893, + -0.000180270755096967,-0.0171440017391995,0.339208742266314,-0.31617254524766, + -0.000186607269534345,-0.016610498568888,0.353609418934286,-0.333948818261427, + -0.000192943783971056,-0.016076995398576,0.368010095602259,-0.351725091275194, + -0.000199280298407989,-0.0155434922282642,0.382410772270231,-0.369501364288962, + -0.000205616812845144,-0.0150099890579527,0.396811448938204,-0.387277637302729, + -0.000211953327282077,-0.0144764858876409,0.411212125606177,-0.405053910316496, + -0.000218289841719344,-0.0139429827173294,0.425612802274149,-0.422830183330264, + -0.000224626356156166,-0.0134094795470174,0.440013478942122,-0.440606456344031, + -0.000230962870592766,-0.0128759763767052,0.454414155610095,-0.458382729357798, + -0.000237299385030032,-0.0123424732063937,0.468814832278068,-0.476159002371565, + -0.000243635899466965,-0.0118089700360819,0.483215508946041,-0.493935275385333, + -0.000249972413904231,-0.0112754668657704,0.497616185614013,-0.5117115483991, + -0.000256308928340943,-0.010741963695458,0.512016862281986,-0.529487821412867, + -0.000262645442777321,-0.0102084605251456,0.526417538949959,-0.547264094426635, + -0.00026898195721492,-0.00967495735483492,0.540818215617931,-0.565040367440402, + -0.000275318471651187,-0.00914145418452206,0.555218892285904,-0.582816640454169, + -0.000281654986088897,-0.00860795101421097,0.569619568953877,-0.600592913467937, + -0.000287991500525497,-0.00807444784389899,0.58402024562185,-0.618369186481704, + -0.000103125863562259,-0.0150314249109791,0.224956510323409,-0.206293031537416, + -0.000107037643296282,-0.0144908805500709,0.237642401206236,-0.225389111912964, + -0.000110949423030471,-0.0139503361891626,0.250328292089064,-0.244485192288512, + -0.00011486120276416,-0.0134097918282541,0.263014182971891,-0.263581272664061, + -0.000118772982498516,-0.012869247467346,0.275700073854718,-0.282677353039609, + -0.00012268476223265,-0.0123287031064379,0.288385964737546,-0.301773433415157, + -0.000126596541966839,-0.01178815874553,0.301071855620373,-0.320869513790705, + -0.000130508321700695,-0.0112476143846212,0.3137577465032,-0.339965594166254, + -0.000134420101434607,-0.0107070700237131,0.326443637386027,-0.359061674541802, + -0.000138331881168741,-0.0101665256628045,0.339129528268855,-0.37815775491735, + -0.000142243660903207,-0.00962598130189707,0.351815419151681,-0.397253835292898, + -0.000146155440637008,-0.00908543694098807,0.364501310034509,-0.416349915668447, + -0.000150067220371031,-0.00854489258007973,0.377187200917336,-0.435445996043995, + -0.000153979000105275,-0.00800434821917206,0.389873091800164,-0.454542076419543, + -0.000157890779839853,-0.0074638038582644,0.402558982682991,-0.473638156795092, + -0.000161802559573543,-0.00692325949735562,0.415244873565818,-0.49273423717064, + -0.000165714339307343,-0.00638271513644684,0.427930764448646,-0.511830317546188, + -0.000169626119041255,-0.00584217077553828,0.440616655331473,-0.530926397921737, + -0.0001735378987755,-0.00530162641463017,0.4533025462143,-0.550022478297285, + -0.000177449678509745,-0.00476108205372228,0.465988437097127,-0.569118558672833, + -0.000181361458243434,-0.0042205376928135,0.478674327979955,-0.588214639048381, + -0.000185273237977457,-0.00367999333190516,0.491360218862782,-0.60731071942393, + -0.000189185017711702,-0.00313944897099772,0.504046109745609,-0.626406799799478, + -0.000193096797445502,-0.00259890461008849,0.516732000628437,-0.645502880175026, + -0.000197008577180635,-0.00205836024918193,0.529417891511264,-0.664598960550575, + -7.69013150269116e-05,-0.0112124089945802,0.213686155491768,-0.217289751280164, + -7.92265923220126e-05,-0.0107256090212421,0.224975770084113,-0.237383025238303, + -8.1551869616947e-05,-0.0102388090479035,0.236265384676458,-0.257476299196442, + -8.38771469119926e-05,-0.0097520090745653,0.247554999268803,-0.277569573154581, + -8.62024242070936e-05,-0.0092652091012273,0.258844613861147,-0.297662847112721, + -8.85277015023056e-05,-0.0087784091278893,0.270134228453492,-0.31775612107086, + -9.08529787969625e-05,-0.00829160915455063,0.281423843045837,-0.337849395028999, + -9.3178256091786e-05,-0.00780480918121174,0.292713457638182,-0.357942668987138, + -9.55035333870535e-05,-0.00731800920787395,0.304003072230526,-0.378035942945277, + -9.78288106822101e-05,-0.00683120923453595,0.315292686822871,-0.398129216903416, + -0.000100154087977367,-0.00634440926119773,0.326582301415216,-0.418222490861555, + -0.00010247936527219,-0.00585760928785928,0.337871916007561,-0.438315764819694, + -0.00010480464256768,-0.00537080931452172,0.349161530599905,-0.458409038777833, + -0.000107129919862503,-0.00488400934118283,0.36045114519225,-0.478502312735972, + -0.000109455197157105,-0.00439720936784394,0.371740759784595,-0.498595586694111, + -0.000111780474452372,-0.00391040939450638,0.38303037437694,-0.518688860652251, + -0.000114105751747307,-0.00342360942116771,0.394319988969285,-0.53878213461039, + -0.000116431029042463,-0.0029368094478297,0.405609603561629,-0.558875408568529, + -0.000118756306336842,-0.00245000947449059,0.416899218153974,-0.578968682526668, + -0.000121081583632443,-0.00196320950115325,0.428188832746319,-0.599061956484807, + -0.000123406860927822,-0.00147640952781503,0.439478447338664,-0.619155230442946, + -0.000125732138222534,-0.0009896095544768,0.450768061931008,-0.639248504401085, + -0.000128057415517246,-0.000502809581138131,0.462057676523353,-0.659341778359224, + -0.000130382692812514,-1.6009607799905e-05,0.473347291115698,-0.679435052317363, + -0.000132707970107671,0.000470790365538321,0.484636905708043,-0.699528326275502, + -5.66326000286943e-05,-0.00871038022143844,0.204675808860634,-0.225476040497143, + -5.79740674953588e-05,-0.00829704609557247,0.214869738915819,-0.246311655377245, + -5.93155349618013e-05,-0.00788371196970594,0.225063668971004,-0.267147270257348, + -6.06570024283548e-05,-0.00747037784383964,0.235257599026188,-0.28798288513745, + -6.19984698949638e-05,-0.00705704371797378,0.245451529081373,-0.308818500017552, + -6.33399373611843e-05,-0.00664370959210681,0.255645459136558,-0.329654114897655, + -6.46814048279043e-05,-0.00623037546624117,0.265839389191742,-0.350489729777757, + -6.60228722945133e-05,-0.00581704134037442,0.276033319246927,-0.371325344657859, + -6.73643397609558e-05,-0.00540370721450811,0.286227249302112,-0.392160959537962, + -6.87058072276203e-05,-0.00499037308864203,0.296421179357297,-0.412996574418064, + -7.00472746938408e-05,-0.00457703896277573,0.306615109412481,-0.433832189298166, + -7.13887421601722e-05,-0.00416370483690898,0.316809039467666,-0.454667804178269, + -7.27302096271698e-05,-0.00375037071104356,0.32700296952285,-0.475503419058371, + -7.40716770935013e-05,-0.00333703658517681,0.337196899578035,-0.496339033938474, + -7.54131445597217e-05,-0.00292370245931028,0.34739082963322,-0.517174648818576, + -7.67546120263862e-05,-0.00251036833344376,0.357584759688405,-0.538010263698678, + -7.80960794933838e-05,-0.00209703420757834,0.367778689743589,-0.558845878578781, + -7.94375469600483e-05,-0.00168370008171248,0.377972619798774,-0.579681493458883, + -8.07790144256026e-05,-0.00127036595584507,0.388166549853959,-0.600517108338986, + -8.21204818929333e-05,-0.000857031829979427,0.398360479909143,-0.621352723219088, + -8.34619493590427e-05,-0.0004436977041129,0.408554409964328,-0.64218833809919, + -8.48034168255962e-05,-3.03635782463729e-05,0.418748340019513,-0.663023952979293, + -8.61448842924828e-05,0.000382970547619266,0.428942270074697,-0.683859567859395, + -8.74863517583702e-05,0.000796304673487125,0.439136200129883,-0.704695182739497, + -8.88278192258118e-05,0.00120963879935099,0.449330130185066,-0.7255307976196, + -4.13373688740171e-05,-0.00705668573501761,0.19770366328409,-0.231503080603621, + -4.20943384865091e-05,-0.00671586427299242,0.207060224147296,-0.252885233529322, + -4.28513080990567e-05,-0.00637504281096724,0.216416785010503,-0.274267386455022, + -4.36082777115487e-05,-0.00603422134894172,0.22577334587371,-0.295649539380723, + -4.43652473240408e-05,-0.00569339988691642,0.235129906736916,-0.317031692306424, + -4.51222169367549e-05,-0.00535257842489134,0.244486467600123,-0.338413845232125, + -4.587918654958e-05,-0.00501175696286627,0.25384302846333,-0.359795998157826, + -4.6636156161739e-05,-0.00467093550084052,0.263199589326536,-0.381178151083527, + -4.73931257741755e-05,-0.004330114038815,0.272556150189743,-0.402560304009228, + -4.81500953869451e-05,-0.00398929257678993,0.28191271105295,-0.423942456934929, + -4.89070649996037e-05,-0.00364847111476485,0.291269271916156,-0.44532460986063, + -4.96640346119293e-05,-0.00330764965273933,0.300625832779363,-0.466706762786331, + -5.04210042249209e-05,-0.0029668281907147,0.309982393642569,-0.488088915712032, + -5.11779738375795e-05,-0.0026260067286894,0.319338954505776,-0.509471068637732, + -5.1934943449794e-05,-0.0022851852666641,0.328695515368983,-0.530853221563433, + -5.26919130625636e-05,-0.0019443638046388,0.338052076232189,-0.552235374489135, + -5.34488826750001e-05,-0.00160354234261328,0.347408637095396,-0.573617527414835, + -5.42058522873257e-05,-0.00126272088058776,0.356765197958603,-0.594999680340536, + -5.49628219004283e-05,-0.000921899418563132,0.36612175882181,-0.616381833266237, + -5.57197915128649e-05,-0.000581077956537612,0.375478319685016,-0.637763986191938, + -5.64767611251904e-05,-0.000240256494512092,0.384834880548223,-0.659146139117639, + -5.72337307371829e-05,0.000100564967513872,0.39419144141143,-0.68052829204334, + -5.79907003502855e-05,0.000441386429538504,0.403548002274636,-0.701910444969041, + -5.87476699631662e-05,0.00078220789156358,0.412904563137843,-0.723292597894742, + -5.95046395752696e-05,0.00112302935358954,0.42226112400105,-0.744674750820443, + -2.99853015393037e-05,-0.00595090937629139,0.192430927252515,-0.235904339215501, + -3.04062288902784e-05,-0.00567297890198493,0.201159555945985,-0.257685602689234, + -3.08271562415308e-05,-0.00539504842767902,0.209888184639455,-0.279466866162968, + -3.12480835929496e-05,-0.00511711795337288,0.218616813332924,-0.301248129636701, + -3.16690109442574e-05,-0.00483918747906675,0.227345442026394,-0.323029393110435, + -3.20899382953987e-05,-0.00456125700476062,0.236074070719864,-0.344810656584168, + -3.2510865646429e-05,-0.00428332653045405,0.244802699413334,-0.366591920057902, + -3.29317929976813e-05,-0.00400539605614791,0.253531328106803,-0.388373183531635, + -3.33527203489892e-05,-0.003727465581842,0.262259956800273,-0.410154447005369, + -3.3773647700297e-05,-0.00344953510753565,0.270988585493743,-0.431935710479102, + -3.41945750516048e-05,-0.00317160463322996,0.279717214187212,-0.453716973952836, + -3.46155024023576e-05,-0.00289367415892272,0.288445842880682,-0.475498237426569, + -3.50364297537764e-05,-0.00261574368461726,0.297174471574152,-0.497279500900303, + -3.54573571051953e-05,-0.00233781321031112,0.305903100267621,-0.519060764374036, + -3.5878284456059e-05,-0.00205988273600455,0.314631728961091,-0.54084202784777, + -3.62992118074779e-05,-0.00178195226169886,0.323360357654561,-0.562623291321504, + -3.67201391587857e-05,-0.00150402178739295,0.33208898634803,-0.584404554795237, + -3.71410665098715e-05,-0.00122609131308637,0.3408176150415,-0.606185818268971, + -3.75619938611793e-05,-0.000948160838780243,0.34954624373497,-0.627967081742704, + -3.79829212123761e-05,-0.000670230364473667,0.35827487242844,-0.649748345216437, + -3.8403848563795e-05,-0.00039229989016798,0.367003501121909,-0.671529608690171, + -3.88247759145477e-05,-0.000114369415861848,0.375732129815379,-0.693310872163905, + -3.92457032656335e-05,0.000163561058444728,0.384460758508849,-0.715092135637638, + -3.96666306177185e-05,0.000441491532749971,0.393189387202318,-0.736873399111371, + -4.00875579681381e-05,0.000719422007057435,0.401918015895788,-0.758654662585105, + -2.16559292193774e-05,-0.00520240192210908,0.18850753240315,-0.239099249711944, + -2.1888209712384e-05,-0.00497540519491824,0.196771646142004,-0.26117023087591, + -2.21204902053351e-05,-0.00474840846772784,0.205035759880858,-0.283241212039876, + -2.23527706981197e-05,-0.004521411740537,0.213299873619712,-0.305312193203842, + -2.25850511909598e-05,-0.00429441501334638,0.221563987358565,-0.327383174367808, + -2.28173316838554e-05,-0.00406741828615553,0.229828101097419,-0.349454155531774, + -2.30496121766954e-05,-0.00384042155896491,0.238092214836273,-0.371525136695741, + -2.32818926698686e-05,-0.00361342483177474,0.246356328575126,-0.393596117859707, + -2.35141731628197e-05,-0.00338642810458367,0.25462044231398,-0.415667099023673, + -2.37464536556597e-05,-0.00315943137739305,0.262884556052834,-0.437738080187639, + -2.39787341484998e-05,-0.00293243465020288,0.271148669791687,-0.459809061351605, + -2.42110146414509e-05,-0.00270543792301181,0.279412783530541,-0.481880042515572, + -2.4443295134069e-05,-0.00247844119582075,0.287676897269395,-0.503951023679538, + -2.46755756274641e-05,-0.00225144446863079,0.295941011008249,-0.526022004843504, + -2.49078561201932e-05,-0.00202444774143995,0.304205124747102,-0.54809298600747, + -2.51401366134774e-05,-0.00179745101425,0.312469238485956,-0.570163967171436, + -2.53724171062064e-05,-0.00157045428705871,0.32073335222481,-0.592234948335402, + -2.56046975987134e-05,-0.00134345755986764,0.328997465963663,-0.614305929499369, + -2.58369780917755e-05,-0.00111646083267702,0.337261579702517,-0.636376910663335, + -2.60692585846156e-05,-0.000889464105486404,0.345525693441371,-0.658447891827301, + -2.63015390778998e-05,-0.000662467378296228,0.353789807180224,-0.680518872991267, + -2.65338195698517e-05,-0.000435470651104275,0.362053920919079,-0.702589854155233, + -2.67661000635799e-05,-0.000208473923915431,0.370318034657931,-0.724660835319199, + -2.69983805567531e-05,1.85228032747453e-05,0.378582148396785,-0.746731816483166, + -2.72306610492601e-05,0.000245519530466698,0.386846262135639,-0.768802797647132, + -1.55925830145898e-05,-0.00468990617347764,0.185621615830676,-0.241408431591227, + -1.57206274770672e-05,-0.00450249796473789,0.193545439625256,-0.263688811685504, + -1.5848671939489e-05,-0.00431508975599804,0.201469263419836,-0.28596919177978, + -1.59767164019109e-05,-0.00412768154725818,0.209393087214416,-0.308249571874057, + -1.61047608645548e-05,-0.00394027333851876,0.217316911008995,-0.330529951968334, + -1.62328053266436e-05,-0.00375286512977868,0.225240734803575,-0.35281033206261, + -1.63608497889545e-05,-0.00356545692103838,0.233164558598155,-0.375090712156887, + -1.64888942512098e-05,-0.00337804871229852,0.241088382392735,-0.397371092251164, + -1.66169387137982e-05,-0.00319064050355933,0.249012206187315,-0.419651472345441, + -1.67449831757205e-05,-0.00300323229481858,0.256936029981895,-0.441931852439717, + -1.68730276385309e-05,-0.00281582408607961,0.264859853776475,-0.464212232533994, + -1.70010721008973e-05,-0.00262841587733953,0.272783677571055,-0.486492612628271, + -1.71291165630416e-05,-0.002441007668599,0.280707501365635,-0.508772992722547, + -1.7257161025408e-05,-0.00225359945985892,0.288631325160215,-0.531053372816824, + -1.73852054876633e-05,-0.00206619125111929,0.296555148954795,-0.553333752911101, + -1.75132499499187e-05,-0.00187878304237921,0.304478972749375,-0.575614133005378, + -1.7641294412396e-05,-0.00169137483363935,0.312402796543955,-0.597894513099654, + -1.77693388750955e-05,-0.00150396662490015,0.320326620338534,-0.620174893193931, + -1.78973833372398e-05,-0.00131655841616007,0.328250444133114,-0.642455273288208, + -1.80254277994951e-05,-0.00112915020742044,0.336174267927694,-0.664735653382484, + -1.81534722619725e-05,-0.000941741998680357,0.344098091722274,-0.687016033476761, + -1.82815167245609e-05,-0.00075433378994072,0.352021915516854,-0.709296413571037, + -1.84095611867052e-05,-0.000566925581200639,0.359945739311434,-0.731576793665314, + -1.85376056488495e-05,-0.000379517372460558,0.367869563106014,-0.753857173759591, + -1.86656501113269e-05,-0.000192109163720922,0.375793386900594,-0.776137553853868, + -1.12028670707365e-05,-0.00433551896378215,0.183516180734126,-0.24307221295256, + -1.12738184348538e-05,-0.00417808149301435,0.191192455390847,-0.265503466410455, + -1.1344769798749e-05,-0.00402064402224633,0.198868730047568,-0.28793471986835, + -1.14157211631993e-05,-0.00386320655147876,0.206545004704288,-0.310365973326245, + -1.14866725270391e-05,-0.00370576908071052,0.214221279361009,-0.33279722678414, + -1.15576238910453e-05,-0.0035483316099425,0.22189755401773,-0.355228480242035, + -1.16285752549405e-05,-0.00339089413917448,0.229573828674451,-0.37765973369993, + -1.16995266195019e-05,-0.00323345666840713,0.237250103331172,-0.400090987157825, + -1.17704779830641e-05,-0.00307601919763889,0.244926377987892,-0.42252224061572, + -1.18414293469593e-05,-0.00291858172687065,0.252602652644613,-0.444953494073615, + -1.19123807117427e-05,-0.00276114425610374,0.260278927301334,-0.46738474753151, + -1.1983332075638e-05,-0.0026037067853355,0.267955201958055,-0.489816000989405, + -1.20542834393111e-05,-0.00244626931456682,0.275631476614776,-0.5122472544473, + -1.21252348037615e-05,-0.00228883184379969,0.283307751271496,-0.534678507905195, + -1.21961861673237e-05,-0.002131394373031,0.290984025928217,-0.55710976136309, + -1.2267137531774e-05,-0.00197395690226343,0.298660300584938,-0.579541014820985, + -1.23380888957803e-05,-0.00181651943149586,0.306336575241658,-0.60197226827888, + -1.24090402602306e-05,-0.00165908196072806,0.314012849898379,-0.624403521736775, + -1.24799916237928e-05,-0.00150164448995938,0.321689124555101,-0.64683477519467, + -1.255094298791e-05,-0.00134420701919202,0.329365399211821,-0.669266028652565, + -1.26218943524714e-05,-0.00118676954842423,0.337041673868542,-0.69169728211046, + -1.26928457166997e-05,-0.00102933207765687,0.344717948525262,-0.714128535568355, + -1.27637970801509e-05,-0.000871894606888191,0.352394223181983,-0.73655978902625, + -1.28347484440461e-05,-0.000714457136119506,0.360070497838705,-0.758991042484145, + -1.29056998080523e-05,-0.00055701966535171,0.367746772495425,-0.78142229594204, + -8.03686207367926e-06,-0.00408846834833199,0.181989111659815,-0.244268273295922, + -8.07661456186937e-06,-0.00395332636317081,0.189486202698229,-0.266807986706121, + -8.1163670497264e-06,-0.00381818437800963,0.196983293736642,-0.289347700116319, + -8.15611953774997e-06,-0.003683042392848,0.204480384775056,-0.311887413526517, + -8.19587202582905e-06,-0.00354790040768704,0.211977475813469,-0.334427126936716, + -8.2356245137416e-06,-0.00341275842252609,0.219474566851882,-0.356966840346914, + -8.27537700182068e-06,-0.00327761643736446,0.226971657890296,-0.379506553757112, + -8.31512948973323e-06,-0.00314247445220306,0.23446874892871,-0.402046267167311, + -8.35488197747924e-06,-0.00300733246704166,0.241965839967123,-0.424585980577509, + -8.39463446578037e-06,-0.00287219048188092,0.249462931005537,-0.447125693987707, + -8.43438695330434e-06,-0.00273704849671907,0.25696002204395,-0.469665407397906, + -8.47413944171649e-06,-0.00260190651155789,0.264457113082364,-0.492205120808104, + -8.51389192968455e-06,-0.00246676452639649,0.271954204120777,-0.514744834218302, + -8.55364441731954e-06,-0.00233162254123487,0.279451295159191,-0.5372845476285, + -8.59339690562066e-06,-0.00219648055607413,0.286948386197604,-0.559824261038699, + -8.6331493934777e-06,-0.00206133857091295,0.294445477236017,-0.582363974448897, + -8.67290188222292e-06,-0.00192619658575222,0.301942568274431,-0.604903687859096, + -8.71265436952484e-06,-0.00179105460059015,0.309439659312845,-0.627443401269294, + -8.75240685727086e-06,-0.00165591261542852,0.316936750351258,-0.649983114679492, + -8.79215934546096e-06,-0.00152077063026779,0.324433841389672,-0.672522828089691, + -8.83191183320697e-06,-0.00138562864510572,0.331930932428086,-0.695062541499889, + -8.87166432161912e-06,-0.00125048665994498,0.339428023466499,-0.717602254910087, + -8.91141680980923e-06,-0.0011153446747838,0.346925114504913,-0.740141968320285, + -8.95116929822137e-06,-0.000980202689623511,0.354422205543325,-0.762681681730484, + -8.99092178541228e-06,-0.000845060704461442,0.361919296581739,-0.785221395140682, + -5.75947413478106e-06,-0.00391513906929497,0.180886146395829,-0.245126702100606, + -5.7821156230764e-06,-0.00379638611201094,0.188254003136995,-0.267744258696333, + -5.80475711159378e-06,-0.0036776331547268,0.195621859878162,-0.29036181529206, + -5.82739860011117e-06,-0.0035588801974431,0.202989716619328,-0.312979371887788, + -5.85004008840651e-06,-0.00344012724015896,0.210357573360494,-0.335596928483515, + -5.87268157681287e-06,-0.00332137428287504,0.21772543010166,-0.358214485079242, + -5.8953230651082e-06,-0.00320262132559046,0.225093286842826,-0.380832041674969, + -5.91796455362559e-06,-0.00308386836830676,0.232461143583992,-0.403449598270696, + -5.94060604219848e-06,-0.00296511541102262,0.239829000325158,-0.426067154866423, + -5.96324753054933e-06,-0.00284636245373893,0.247196857066324,-0.44868471146215, + -5.98588901912223e-06,-0.00272760949645523,0.25456471380749,-0.471302268057877, + -6.00853050769512e-06,-0.00260885653917153,0.261932570548656,-0.493919824653604, + -6.03117199549086e-06,-0.0024901035818865,0.269300427289823,-0.516537381249331, + -6.0538134842858e-06,-0.00237135062460281,0.276668284030988,-0.539154937845058, + -6.07645497308074e-06,-0.00225259766731933,0.284036140772154,-0.561772494440785, + -6.09909646132056e-06,-0.00213384471003542,0.29140399751332,-0.584390051036512, + -6.12173794978244e-06,-0.00201509175275127,0.298771854254487,-0.607007607632239, + -6.14437943846635e-06,-0.00189633879546802,0.306139710995652,-0.629625164227966, + -6.16702092659516e-06,-0.00177758583818299,0.313507567736819,-0.652242720823693, + -6.18966241516805e-06,-0.0016588328808993,0.320875424477985,-0.67486027741942, + -6.21230390318583e-06,-0.00154007992361471,0.328243281219151,-0.697477834015147, + -6.23494539142566e-06,-0.00142132696633057,0.335611137960317,-0.720095390610874, + -6.25758688044264e-06,-0.00130257400904732,0.342978994701483,-0.742712947206601, + -6.28022836857145e-06,-0.00118382105176273,0.350346851442649,-0.765330503802328, + -6.30286985670026e-06,-0.00106506809447815,0.357714708183816,-0.787948060398055, + -4.12432709961941e-06,-0.00379293354838373,0.180091873156102,-0.245742089933523, + -4.13749656824614e-06,-0.00368612884327413,0.187366759910271,-0.268415450515543, + -4.15066603637326e-06,-0.00357932413816386,0.19464164666444,-0.291088811097563, + -4.16383550483346e-06,-0.00347251943305427,0.201916533418609,-0.313762171679582, + -4.17700497290507e-06,-0.00336571472794378,0.209191420172778,-0.336435532261602, + -4.1901744415318e-06,-0.00325891002283396,0.216466306926947,-0.359108892843622, + -4.20334390976995e-06,-0.00315210531772414,0.223741193681116,-0.381782253425642, + -4.21651337823015e-06,-0.00304530061261454,0.231016080435285,-0.404455614007662, + -4.22968284641279e-06,-0.0029384959075045,0.238290967189454,-0.427128974589681, + -4.24285231470645e-06,-0.00283169120239446,0.245565853943623,-0.449802335171701, + -4.25602178277806e-06,-0.00272488649728375,0.252840740697792,-0.472475695753721, + -4.2691912509607e-06,-0.00261808179217371,0.260115627451961,-0.495149056335741, + -4.28236071947641e-06,-0.00251127708706345,0.267390514206131,-0.51782241691776, + -4.29553018788109e-06,-0.00240447238195385,0.274665400960299,-0.54049577749978, + -4.30869965584169e-06,-0.00229766767684381,0.281940287714468,-0.5631691380818, + -4.32186912435739e-06,-0.00219086297173354,0.289215174468638,-0.585842498663819, + -4.33503859309514e-06,-0.00208405826662439,0.296490061222806,-0.608515859245839, + -4.34820806094471e-06,-0.00197725356151368,0.303764947976976,-0.631189219827859, + -4.36137752968246e-06,-0.00187044885640431,0.311039834731144,-0.653862580409879, + -4.37454699775408e-06,-0.00176364415129404,0.318314721485313,-0.676535940991898, + -4.38771646571467e-06,-0.00165683944618333,0.325589608239483,-0.699209301573918, + -4.40088593467447e-06,-0.0015500347410744,0.332864494993651,-0.721882662155938, + -4.414055402302e-06,-0.00144323003596281,0.340139381747821,-0.744556022737958, + -4.42722487126179e-06,-0.00133642533085432,0.347414268501989,-0.767229383319977, + -4.4403943397775e-06,-0.0012296206257445,0.354689155256158,-0.789902743901997, + -2.95183580645286e-06,-0.00370645370112288,0.179521113872734,-0.246182878501342, + -2.95968487706855e-06,-0.00360830965049797,0.186729241529835,-0.268896210233067, + -2.96753394729565e-06,-0.00351016559987261,0.193937369186937,-0.291609541964792, + -2.97538301768929e-06,-0.00341202154924747,0.201145496844038,-0.314322873696518, + -2.98323208819395e-06,-0.00331387749862233,0.20835362450114,-0.337036205428243, + -2.99108115892066e-06,-0.00321573344799742,0.215561752158241,-0.359749537159968, + -2.99893022920328e-06,-0.00311758939737206,0.222769879815343,-0.382462868891694, + -3.00677929976345e-06,-0.00301944534674714,0.229978007472444,-0.405176200623419, + -3.01462837004607e-06,-0.00292130129612178,0.237186135129546,-0.427889532355144, + -3.0224774408838e-06,-0.00282315724549731,0.244394262786647,-0.45060286408687, + -3.03032651116641e-06,-0.00272501319487173,0.251602390443749,-0.473316195818595, + -3.03817558156005e-06,-0.00262686914424637,0.258810518100851,-0.496029527550321, + -3.04602465206472e-06,-0.00252872509362123,0.266018645757953,-0.518742859282046, + -3.05387372245836e-06,-0.00243058104299587,0.273226773415054,-0.541456191013771, + -3.061722792852e-06,-0.00233243699237118,0.280434901072155,-0.564169522745497, + -3.06957186324563e-06,-0.00223429294174537,0.287643028729258,-0.586882854477222, + -3.07742093397234e-06,-0.0021361488911209,0.294851156386359,-0.609596186208947, + -3.08527000469905e-06,-0.00203800484049621,0.30205928404346,-0.632309517940673, + -3.09311907475962e-06,-0.00193986078987018,0.309267411700562,-0.655022849672398, + -3.10096814515326e-06,-0.00184171673924549,0.316475539357663,-0.677736181404123, + -3.10881721599099e-06,-0.00174357268861991,0.323683667014766,-0.700449513135849, + -3.11666628627361e-06,-0.00164542863799522,0.330891794671867,-0.723162844867574, + -3.12451535711133e-06,-0.00154728458737052,0.338099922328968,-0.745876176599299, + -3.13236442717191e-06,-0.0014491405367445,0.34530804998607,-0.768589508331025, + -3.14021349756555e-06,-0.00135099648611936,0.352516177643172,-0.79130284006275, + -2.11186936349694e-06,-0.00364508743395964,0.179111593840341,-0.246498416416352, + -2.11667157173911e-06,-0.00355319561261913,0.186271846596139,-0.269240361442884, + -2.12147378031435e-06,-0.00346130379127874,0.193432099351938,-0.291982306469417, + -2.12627598883408e-06,-0.00336941196993856,0.200592352107736,-0.31472425149595, + -2.13107819735381e-06,-0.00327752014859817,0.207752604863535,-0.337466196522482, + -2.13588040542945e-06,-0.00318562832725733,0.214912857619333,-0.360208141549015, + -2.1406826140602e-06,-0.00309373650591716,0.222073110375132,-0.382950086575547, + -2.14548482235788e-06,-0.00300184468457654,0.229233363130931,-0.40569203160208, + -2.15028703065556e-06,-0.00290995286323592,0.236393615886729,-0.428433976628613, + -2.15508923928631e-06,-0.00281806104189575,0.243553868642528,-0.451175921655145, + -2.15989144791706e-06,-0.00272616922055557,0.250714121398326,-0.473917866681678, + -2.16469365588168e-06,-0.00263427739921429,0.257874374154125,-0.49665981170821, + -2.16949586451243e-06,-0.00254238557787434,0.265034626909923,-0.519401756734743, + -2.17429807269909e-06,-0.0024504937565335,0.272194879665722,-0.542143701761276, + -2.17910028144086e-06,-0.00235860193519355,0.27935513242152,-0.564885646787808, + -2.18390249007161e-06,-0.00226671011385338,0.286515385177319,-0.587627591814341, + -2.18870469870236e-06,-0.00217481829251343,0.293675637933117,-0.610369536840874, + -2.19350690688902e-06,-0.00208292647117192,0.300835890688917,-0.633111481867406, + -2.19830911574181e-06,-0.00199103464983219,0.307996143444715,-0.655853426893939, + -2.20311132392847e-06,-0.00189914282849157,0.315156396200513,-0.678595371920471, + -2.20791353200411e-06,-0.00180725100715051,0.322316648956312,-0.701337316947004, + -2.21271574074589e-06,-0.00171535918581034,0.329476901712111,-0.724079261973537, + -2.21751794904357e-06,-0.00162346736447017,0.336637154467909,-0.746821207000069, + -2.22232015700818e-06,-0.00153157554312955,0.343797407223707,-0.769563152026602, + -2.227122365972e-06,-0.00143968372178938,0.350957659979506,-0.792305097053135, + -1.51051496311005e-06,-0.00360145408282586,0.178818082363727,-0.246724196957689, + -1.51353127442189e-06,-0.00351406289403688,0.185944034848802,-0.269486615990304, + -1.51654758584474e-06,-0.0034266717052478,0.193069987333877,-0.292249035022918, + -1.51956389665697e-06,-0.00333928051645849,0.200195939818952,-0.315011454055533, + -1.52258020852392e-06,-0.00325188932766984,0.207321892304027,-0.337773873088148, + -1.52559651944717e-06,-0.00316449813888009,0.214447844789102,-0.360536292120762, + -1.52861283087002e-06,-0.00307710695009167,0.221573797274176,-0.383298711153377, + -1.53162914162674e-06,-0.00298971576130191,0.228699749759252,-0.406061130185991, + -1.53464545293858e-06,-0.0029023245725126,0.235825702244327,-0.428823549218606, + -1.53766176391734e-06,-0.00281493338372285,0.242951654729402,-0.451585968251221, + -1.54067807556224e-06,-0.00272754219493465,0.250077607214476,-0.474348387283835, + -1.54369438676305e-06,-0.00264015100614512,0.257203559699552,-0.49711080631645, + -1.54671069829693e-06,-0.0025527598173567,0.264329512184626,-0.519873225349065, + -1.54972700905365e-06,-0.00246536862856672,0.271455464669702,-0.542635644381679, + -1.55274332069855e-06,-0.00237797743977808,0.278581417154776,-0.565398063414294, + -1.55575963167731e-06,-0.00229058625098877,0.285707369639851,-0.588160482446909, + -1.55877594287812e-06,-0.00220319506219946,0.292833322124926,-0.610922901479523, + -1.56179225396791e-06,-0.00211580387340993,0.299959274610001,-0.633685320512138, + -1.56480856550179e-06,-0.00202841268462173,0.307085227095076,-0.656447739544753, + -1.56782487592544e-06,-0.00194102149583086,0.314211179580152,-0.679210158577367, + -1.57084118757034e-06,-0.00185363030704266,0.321337132065226,-0.701972577609982, + -1.57385749932626e-06,-0.00176623911825446,0.328463084550301,-0.724734996642597, + -1.57687381008298e-06,-0.00167884792946404,0.335589037035376,-0.747497415675211, + -1.57989012128379e-06,-0.0015914567406754,0.342714989520451,-0.770259834707826, + -1.58290643315073e-06,-0.0015040655518872,0.349840942005526,-0.793022253740441 +}; + +} /* namespace DSP */ + +#endif /* _VS_TAB_H_ */ diff --git a/plugins/LadspaEffect/caps/dsp/util.h b/plugins/LadspaEffect/caps/dsp/util.h new file mode 100644 index 000000000..09416b5a5 --- /dev/null +++ b/plugins/LadspaEffect/caps/dsp/util.h @@ -0,0 +1,75 @@ +/* + dsp/util.h + + Copyright 2002-4 Tim Goetze + + http://quitte.de/dsp/ + + Common math utility functions. + +*/ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA or point your web browser to http://www.gnu.org. +*/ + +#ifndef _DSP_UTIL_H_ +#define _DSP_UTIL_H_ + +namespace DSP { + +inline int next_power_of_2 (int n) +{ + assert (n <= 0x40000000); + + int m = 1; + + while (m < n) + m <<= 1; + + return m; +} + +inline bool +isprime (int v) +{ + if (v <= 3) + return true; + + if (!(v & 1)) + return false; + + for (int i = 3; i < (int) sqrt (v) + 1; i += 2) + if ((v % i) == 0) + return false; + + return true; +} + +inline double +db2lin (double db) +{ + return pow (10., db * .05); +} + +inline double +lin2db (double lin) +{ + return 20. * log10 (lin); +} + +} /* namespace DSP */ + +#endif /* _DSP_UTIL_H_ */ diff --git a/plugins/LadspaEffect/caps/dsp/windows.h b/plugins/LadspaEffect/caps/dsp/windows.h new file mode 100644 index 000000000..949a95818 --- /dev/null +++ b/plugins/LadspaEffect/caps/dsp/windows.h @@ -0,0 +1,162 @@ +/* + dsp/windows.h + + Copyright 2004-11 Tim Goetze + + http://quitte.de/dsp/ + + select few common windowing algorithms. + +*/ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA or point your web browser to http://www.gnu.org. +*/ + +#ifndef _DSP_WINDOWS_H_ +#define _DSP_WINDOWS_H_ + +namespace DSP { + +/* prototypes for window value application ... */ +typedef void (*window_sample_func_t) (sample_t &, sample_t); + +/* ... which go as template parameters for the window calculation below */ +inline void +store_sample (sample_t & d, sample_t s) +{ + d = s; +} + +inline void +apply_window (sample_t &d, sample_t s) +{ + d *= s; +} + +template +void +hanning (sample_t * s, int n) +{ + /* could speed up by using DSP::Sine but we rarely use this window */ + for (int i = 0; i < n; ++i) + { + register double f = (double) i / n - 1; + F (s[i], .5 - .5 * cos (2 * M_PI * f)); + } +} + +template +void +blackman (sample_t * s, int n) +{ + register float w = n; + + for (int i = 0; i < n; ++i) + { + register float f = (float) i; + + register double b = .42f - + .5f * cos (2.f * f * M_PI / w) + + .08 * cos (4.f * f * M_PI / w); + + F (s[i], b); + } +} + +template +void +blackman_harris (sample_t * s, int n) +{ + register double w1 = 2.f * M_PI / (n - 1); + register double w2 = 2.f * w1; + register double w3 = 3.f * w1; + + for (int i = 0; i < n; ++i) + { + register double f = (double) i; + + register double bh = .35875f - + .48829f * cos (w1 * f) + + .14128f * cos (w2 * f) - + .01168f * cos (w3 * f); + + bh *= .761f; + + F (s[i], bh); + } +} + +/* helper for the kaiser window, courtesy of R. Dobson, courtesy of csound */ +inline double +besseli (double x) +{ + double ax, ans; + double y; + + if ((ax = fabs (x)) < 3.75) + { + y = x / 3.75; + y *= y; + ans = (1.0 + y * (3.5156229 + + y * (3.0899424 + + y * (1.2067492 + + y * (0.2659732 + + y * (0.360768e-1 + + y * 0.45813e-2)))))); + } + else + { + y = 3.75 / ax; + ans = ((exp (ax) / sqrt (ax)) + * (0.39894228 + + y * (0.1328592e-1 + + y * (0.225319e-2 + + y * (-0.157565e-2 + + y * (0.916281e-2 + + y * (-0.2057706e-1 + + y * (0.2635537e-1 + + y * (-0.1647633e-1 + + y * 0.392377e-2))))))))); + } + + return ans; +} + +template +void +kaiser (sample_t * s, int n, double beta) +{ + double bb = besseli (beta); + int si = 0; + + for (double i = -n / 2 + .1; si < n; ++si, ++i) + { + double k = besseli ((beta * sqrt (1 - pow ((2 * i / (n - 1)), 2)))) / bb; + + /* can you spell hack */ + if (!isfinite (k) || isnan(k)) + k = 0; + + F (s[si], k); + } + /* asymmetrical hack: sort out first value! + win[0] = win[len-1]; + */ +} + +}; /* namespace DSP */ + +#endif /* _DSP_WINDOWS_H_ */ diff --git a/plugins/LadspaEffect/caps/elev0.h b/plugins/LadspaEffect/caps/elev0.h new file mode 100644 index 000000000..cf78883f6 --- /dev/null +++ b/plugins/LadspaEffect/caps/elev0.h @@ -0,0 +1,344 @@ +#ifndef _ELEV_0_H_ +#define _ELEV_0_H_ + +static struct { + struct {double a[31], b[31];} left, right; +} +elev0 [] = +{ + { /* 0 deg */ + { /* left */ + { /* a */ 0.00016115992608954982025, -0.00010768917854458648288, -0.00063346856180946037665, 0.00046347742029473120925, -0.0015439852840736303929, 0.002322097197441415177, -0.0030171705384801628114, 0.0040049622633845857744, -0.0061951205789184497774, 0.007477237413920645448, -0.0077387794749934207816, 0.011064070674173843989, -0.0039638879209113325741, 0.18900346994412650647, 0.11180546019300675875, -0.30157903765100790849, 0.1347944936894422685, -0.11208456287521188777, -0.10407312479763883295, 0.36646565042846751536, -0.03021948747062653054, 0.12118534476775748299, 0.38955804570991658942, 0.10541328915312503378, -0.3230797648386828369, -0.047446774889543630316, 0.074881148756352045037, -0.35284433955617594547, -0.17940547664191497379, -0.031687898661414630463, -0.079669760381518725523}, + { /* b */ 0, 0.060872553612196914075, 0.028134109258271672305, 0.19714624090581839289, 0.080867126093135940912, 0.015075818698181541605, 0.09631379420052403606, 0.10062956273363155013, 0.078554087002350780899, -0.015526584402269706653, -0.046159578846992205259, 0.08942137063482573367, -0.0031327716162594778163, 0.044707285945433258845, 0.019012234566775400302, 0.023245822417901004786, 0.099133288024720767062, -0.016901102476781122708, -0.0080432755625650560749, -0.059588888105196691214, 0.025493274350173785597, 0.052825597092033604874, 0.052130256044543292482, 0.014949928868884798661, -0.015431476841200410938, -0.0083606347897418296922, 0.019454219693235737937, 0.0028516212312724819981, -0.044967056642177052894, -0.03421366827611452277, -0.063356553650132305111}, + }, { /* right */ + { /* a */ 0.00016115992608954982025, -0.00010768917854458648288, -0.00063346856180946037665, 0.00046347742029473120925, -0.0015439852840736303929, 0.002322097197441415177, -0.0030171705384801628114, 0.0040049622633845857744, -0.0061951205789184497774, 0.007477237413920645448, -0.0077387794749934207816, 0.011064070674173843989, -0.0039638879209113325741, 0.18900346994412650647, 0.11180546019300675875, -0.30157903765100790849, 0.1347944936894422685, -0.11208456287521188777, -0.10407312479763883295, 0.36646565042846751536, -0.03021948747062653054, 0.12118534476775748299, 0.38955804570991658942, 0.10541328915312503378, -0.3230797648386828369, -0.047446774889543630316, 0.074881148756352045037, -0.35284433955617594547, -0.17940547664191497379, -0.031687898661414630463, -0.079669760381518725523}, + { /* b */ 0, 0.060872553612196914075, 0.028134109258271672305, 0.19714624090581839289, 0.080867126093135940912, 0.015075818698181541605, 0.09631379420052403606, 0.10062956273363155013, 0.078554087002350780899, -0.015526584402269706653, -0.046159578846992205259, 0.08942137063482573367, -0.0031327716162594778163, 0.044707285945433258845, 0.019012234566775400302, 0.023245822417901004786, 0.099133288024720767062, -0.016901102476781122708, -0.0080432755625650560749, -0.059588888105196691214, 0.025493274350173785597, 0.052825597092033604874, 0.052130256044543292482, 0.014949928868884798661, -0.015431476841200410938, -0.0083606347897418296922, 0.019454219693235737937, 0.0028516212312724819981, -0.044967056642177052894, -0.03421366827611452277, -0.063356553650132305111}, + }, + }, + { /* 5 deg */ + { /* left */ + { /* a */ -0.00017696253206769471666, 0.00021107918665545769466, -2.0620763396513567709e-05, -0.00018186803582760145237, 8.373679531671252463e-05, -0.0011082651235009427504, 0.0013814999459888562677, -0.0022305356427783796375, 0.0034326663959655806524, -0.0048009305045435424902, 0.0056349419483249160723, -0.0071918462710358118523, 0.0095052705275961314052, 0.0007448483104648476183, 0.17757056636691290197, 0.080751512987945209265, -0.25584565078920767922, 0.11313029183314063375, -0.11130775557262871656, -0.068744404280904225502, 0.30732662377751773786, -0.027707718907452515145, 0.12364106832536264635, 0.35026569867066370545, 0.07471421608637314471, -0.25776067100019012246, -0.055371338162804373262, -0.012256460040568777775, -0.25866536683473279057, -0.17782894990620184972, -0.064670654485651041243}, + { /* b */ 0, 0.055090796937088862273, 0.055437560430932439348, 0.22990052867708210549, 0.099428824021023237689, -0.0027769955961815754458, 0.10085574251165992099, 0.16312061234767347151, 0.039470376556444738969, -0.041848049583603372237, -0.032542858026161185225, 0.02139343730159100343, 0.048098231701239960167, 0.037733893377851102091, 0.019373785721910955632, 0.061746578342221650204, 0.035488211745084013993, -0.01806919754088130714, -0.027128260233510496924, -0.042503705793375312627, 0.051926493757134692397, 0.07069393657400141473, 0.019673226352204746525, -0.00012103498389409196589, -0.027627741515316259213, 0.009635983304503818736, 0.018631749546224596337, -0.016615904545286074023, -0.044341341793715960407, -0.030215378264473007064, -0.041358753534985123745}, + }, { /* right */ + { /* a */ 0.00021674611259610464188, -0.0010589548271123022313, 0.0010969447757948318917, -0.0021209537250143142839, 0.0028729385414139746446, -0.0035972033027254976534, 0.0044402795492401794797, -0.006073245440653581885, 0.0067101547727077218847, -0.0060717874211108089147, 0.0086287155143119700917, -0.0062948148262572563294, 0.16059210095363563031, 0.20386616350646591389, -0.35114984389089032302, 0.086216963151213521499, -0.024061119790435951671, -0.22331071743275801578, 0.43099142324044042995, 0.031472736270457199459, 0.027458263182878438202, 0.45513707401194097857, 0.15478327645377623623, -0.42059874974912558887, -0.063648009970495300625, 0.14751824494855145242, -0.3619823099623888929, -0.19283311769574695838, -0.011882636463899330648, -0.089521111340056691574, -0.026022800212665765651}, + { /* b */ 0, 0.079572218898552926625, 0.053165668189737030902, 0.17176014787903778891, 0.086820173277007889334, 0.060694063956346300248, 0.029633229388448603658, 0.084867011888823756793, 0.042640077616905060209, -0.029035195885816392214, 0.029653473189723660031, 0.085308978346717134755, 0.0048636815673216080014, 0.01605369931437055156, -0.015454426947098148445, 0.042357713858054937828, 0.097316348725284551602, 0.0052640081186572720839, -0.0050867430431700277893, -0.058963722940593224497, 0.01239314631939524014, 0.049900557159985092781, 0.043026255599535281893, 0.035562415292306887027, -0.020192113930755928308, 0.00095028634658748944997, 0.027622002386662635603, 0.0053820468586939663319, -0.050497180968884017305, -0.041024391020222893134, -0.067588730417863646105}, + }, + }, + { /* 10 deg */ + { /* left */ + { /* a */ -7.1010261369361740713e-05, -2.5406000913078783136e-05, 0.00026759211721569383866, -8.4826521543719497699e-05, -6.8403155187606121818e-05, 9.9131511745002002427e-05, -0.001071700570934656406, 0.001098798497419818665, -0.0016933689074365935318, 0.0027481963651477848976, -0.0036606743705400422717, 0.0042060653153788429837, -0.0062821160138389776223, 0.0076862441225774222331, 0.0058233041551466677155, 0.16799390464336699802, 0.041851271057766162298, -0.22290193556303047884, 0.10546865511928886494, -0.106571152734197927, -0.05232811055746418305, 0.26763450404808436511, -0.00068426453713908361176, 0.10572562194246151734, 0.30292254127254580887, 0.047280029708680913758, -0.26546206167345709481, -0.050352179118358361687, -0.0083467693297659146384, -0.25140273187294914781, -0.13705105321611377178}, + { /* b */ 0, 0.085263325112734211775, 0.12395856358757566251, 0.21451203553535497237, 0.11368862237752869193, 0.045975440610246019746, 0.083841885720174272323, 0.10819905319188556636, 0.017486735496958213942, -0.05191158900020079181, -0.028267552250675329062, 0.051676694820251889428, 0.024780584746461171985, 0.045146936514918814543, 0.035293885693133908443, 0.023177674056059194285, 0.026807353374273618085, -0.049021533124109263613, 0.0011432617002724524552, -0.014547714109382908765, 0.058036283161763971283, 0.045635673184493387444, -0.0059891149151256751343, -0.0012376581991289520301, -0.019638054713496739395, 0.011740972931786674421, 0.0070604429584699562872, -0.017821868007230894093, -0.043622648597657895375, -0.015285888173058835571, -0.030656316135630173186}, + }, { /* right */ + { /* a */ -0.0011216376818203241394, 0.0014367662570877876016, -0.0025198357459085482524, 0.0025096953781399834564, -0.0032299692564715168364, 0.0035089721995293712831, -0.0040294036972093535964, 0.0036878989368056844592, -0.0019541662377772078818, 0.0022472517084747394012, -0.0005003840012913342121, 0.11928409575778700646, 0.29902193960400280659, -0.33871176061436253368, -0.029905872073465733507, 0.049693450022043894609, -0.28970435882155598506, 0.45366820402683577518, 0.09535253759394757278, 0.0024675934431721262968, 0.49110597895532337454, 0.19050822857905158614, -0.41285791290153855959, -0.18341018858515711898, 0.13888828001019423719, -0.2208057176764740559, -0.23909434820313357761, -0.060380123254846998493, -0.033071856447566480575, -0.071881204823059763331, -0.036764849742506287844}, + { /* b */ 0, 0.048428266517714681216, 0.029860695413591771541, 0.23466227365818198569, 0.085941189405338319629, 0.044706680082991917535, 0.020668341355824411398, 0.080504621225128858431, -0.053243345596708929746, 0.014347828952276237002, 0.057257699183194593617, 0.10270797432433603769, 0.075890406819505484837, -0.061027205690788143, -0.022290009665058146959, 0.026499148640187108333, 0.08706458016097509689, 0.047083089686696284748, 0.019236465222853896262, -0.071824516859942622027, 0.016260258014978885843, 0.013562271183576411759, 0.05466513346106918747, 0.041512450833693780028, -0.0083719999989691172571, 0.021910246791019868939, 0.021244709892120912376, -0.0015736893779544000593, -0.057791902480916139406, -0.053290959980646299132, -0.056723042022796543726}, + }, + }, + { /* 15 deg */ + { /* left */ + { /* a */ -2.3034189992013315946e-05, 0.00024731908682368210911, -0.00021574284523261577293, 0.00051389676229479305802, -0.00040052734994627293714, 0.00015362020114751537476, -9.7371630267258237708e-05, -0.00037603622009404547629, 0.0002572275934744837041, -0.0015722688641566645584, 0.0018871578089975343112, -0.0026390305604912303594, 0.0044552306132121174964, -0.0051638664595472089092, 0.0058601946919547252823, 0.0062588950906924088746, 0.15092144486019995475, 0.0099448016942541832969, -0.18453753620347421172, 0.1114543447477359811, -0.14402726113297464883, -0.024507724738784635726, 0.25757743305304819925, -0.013476042841332157296, 0.11613418986197675264, 0.25394558785192672401, -0.016719111244215333761, -0.27302452491092155107, -0.018530595274781173909, -0.055725585873423050254, -0.21319498722583413164}, + { /* b */ 0, 0.22058127507023964076, 0.066638548713839174109, 0.24589498965493170046, 0.22418170335686704586, 0.066699912495684771097, 0.017692407245350268152, -0.0085239509346052289018, 0.020142743144099965746, -0.12941267987335691725, 0.051998998636554896735, 0.073490792657822143208, 0.023168188775066381885, 0.11108377267495579688, -0.084872666928730286506, -0.0042479536929002342099, -0.0070616745589371816838, 0.019184876108773011444, 0.054142940329746425121, -0.0041972999708067126184, -0.017760334508399627101, 0.00029087332720613727141, 0.0015107269032326241069, 0.045117303832109524608, 0.00061607549538982876725, -0.01586494033253469868, -0.017623046137960902968, -0.015727943013500934183, -0.027390319948145405715, 0.011098882581240697084, -0.037335305543559987873}, + }, { /* right */ + { /* a */ 0.0013800413829036378699, -0.0015945865447638749024, 0.001441061774076768387, -0.0018400002827411929274, 0.00081415159166025458104, -3.6541798449987185869e-06, -0.0023947168327270382249, 0.0060372912386117555394, -0.0079721892125425228293, 0.011425654544714239358, 0.061862177923783547018, 0.36620909077115043617, -0.25889177344254588053, -0.18653313956236422522, 0.16218219769577690847, -0.37467524215994219006, 0.40581752873141435645, 0.22834841562013005745, -0.06840666565317407577, 0.49400293320883370551, 0.27528320440222048271, -0.3919047384840718129, -0.31990047663825482704, 0.21386477926686497941, -0.20486652355001294668, -0.31035711367531787497, 0.023166421866086150255, -0.085451721164105515216, -0.12985289364082702734, -0.017432175610271501143, 0.035672848704699881839}, + { /* b */ 0, 0.073725628815923066606, 0.015390993798134605663, 0.2124990748692205389, 0.10259839572077958381, 0.065254899181072217873, 0.030885702765035875916, 0.0059236228567302942616, -0.015551106356376763473, 0.045129370224812268009, 0.040489463356448152087, 0.1405222487957555888, 0.021308824891246722771, -0.052224936798331650367, -0.03569736412508371648, -0.0011315094965852479092, 0.10462683156774776894, 0.0707489055921939336, 0.035186628731939326165, -0.082713931987719563343, -0.013492902896563435666, 0.0074634101167011038247, 0.063222517807061034967, 0.061186927189146173012, 0.011493852096039973432, 0.0030603490119027530574, 0.011353160845064234896, -0.0052093273690718977509, -0.056452439121564002011, -0.044554455604682921543, -0.065044801859899914476}, + }, + }, + { /* 20 deg */ + { /* left */ + { /* a */ -1.280464119543479537e-05, 5.0847061283666207532e-05, -0.00010881943401930269165, -9.3295295100479555105e-06, 0.00018214684718853571478, -0.00016714467226952578471, 3.8897084095323997133e-05, -8.6690768452699420998e-06, -0.00023930660994486751061, 0.00071371038218304150291, -0.0010748950257655209839, 0.0014994882018698474369, -0.0025345205104804202634, 0.0029200474736118531283, -0.0032896042424790383762, 0.0051489509612229200641, 0.008226002461003689703, 0.13635910042254784091, 0.040811705554130717211, -0.12913078637682984251, 0.08933326884147385627, -0.073730698277943429453, 0.014957473944005039712, 0.2228220708940659156, 0.013110312729186501812, 0.1325955850479260123, 0.27241754762964698333, 0.1078490562880785042, -0.050076992741537873499, 0.062667886178355280968, 0.091717117197270825457}, + { /* b */ 0, -0.025158955952384043364, -0.062687203468275720653, 0.10856821347889067386, -0.031139900499438377679, -0.26394215694752753976, -0.20012513910774853976, 0.014278312291601813477, -0.074773034303560192981, -0.077797089910458527839, -0.077518931664924406455, -0.048200302791706617356, 0.013312597278228310849, -0.060823018845704290847, -0.12047847469359718175, -0.080758707132477791646, 0.014496285603640690631, 0.024176297966430060349, 0.030498046991178640042, -0.097021462282728676563, -0.072063053678794730672, -0.030360872356541279693, 0.036410577287371292954, 0.060757926768420511543, 0.0026579726669639916134, -0.046553056477285914561, -0.024262156919224731055, -0.01133193016360223293, 0.0053419247464381305543, 0.017221495934721664511, -0.017836842867227642451}, + }, { /* right */ + { /* a */ -0.00036599626872854673643, -0.0002460058195520581489, 0.001771055531804219263, -0.0025798946401336259049, 0.004338330896903190223, -0.0083341804897000444641, 0.012345621434499756686, -0.015540479481844504672, 0.021682746444567913002, 0.011508763580149114492, 0.37385080964059264064, -0.067135215764081365708, -0.36356326706210229105, 0.18127847719926099002, -0.35357578125112620882, 0.24597069823393058474, 0.39826579050225030532, -0.061438050383000319954, 0.42367882073686397026, 0.37232726266096677348, -0.31491476121032047075, -0.45397206381806498587, 0.22065950816309298776, -0.17315503013207861338, -0.33798287901752616103, 0.015306755417106993056, -0.14347429792658547565, -0.12428129176521134081, -0.06877797614801214876, 0.078433037183928827618, 0.054698817074467706578}, + { /* b */ 0, 0.048889005590125461653, -0.016041040104873907635, 0.24226714422677714245, 0.13214897408713416338, 0.11581965776929874223, -0.026343158066582245125, -0.043469803567581372095, 0.050182432390893233487, 0.059005150016260693446, 0.11712934066232007224, 0.10913298414466296449, -0.052970566889378595254, -0.041796521766095801054, -0.085321521280405307475, 0.051627174717985155339, 0.10872628148092013112, 0.07994668585422151641, 0.016498059996527050797, -0.087325778447147950345, -0.034046925974987041208, 0.036057834351442899501, 0.047799563959215543574, 0.099378425802562272984, -0.0093373522400217665029, 0.0010294654363175760603, -0.0028328873103410090462, -0.0010957144530761298018, -0.04991883841052625892, -0.057430845556592433065, -0.065998025744829283412}, + }, + }, + { /* 25 deg */ + { /* left */ + { /* a */ 5.4851695726303682787e-05, -6.9900108687348527781e-05, 0.00020257180634308816149, -6.0375831348324806962e-05, 4.7622701199179218179e-05, 4.3511237113325919312e-05, -1.8460715942027545235e-05, 8.4488357907084823311e-05, 0.00036921527953037713843, -0.00026485096144002531759, 0.00055643892715728825518, -0.0012241930933548604565, 0.0014098272716617245813, -0.0018170794729988060112, 0.0030765460808102034623, -0.002557592370458494635, 0.0040626938255239365694, 0.0062155450463591277455, 0.11813763723118875237, 0.036915229743791910799, -0.10863854615301982154, 0.071427932468587362891, -0.090269999915917886746, 0.0041725637770634281531, 0.20269035461810414045, 0.014055537838481013679, 0.12304199409125804454, 0.24661633430483886897, 0.050829375524627518068, -0.058588412423787872285, 0.026858601453252917146}, + { /* b */ 0, 0.030312183511849170175, -0.095541000844981405216, 0.1892261747966222929, 0.12808694865439063104, -0.1294162586626401712, -0.23340276657783654013, 0.070083589599131967951, -0.16393473066693420304, -0.038721197898189396724, -0.0071446294807459009846, -0.078586084721193882885, 0.1042302939213007873, -0.057276855840310281209, -0.10131559666906597705, -0.068958661479864846733, 0.0053298328402118233527, 0.034128981517000944734, 0.084083984187854898806, -0.1060379653611276396, -0.056291907571809352007, -0.035088677719993799364, 0.033487980128643624056, 0.083839894129689174207, 0.0064468873873374521466, -0.040191723771829113154, -0.021859064198159749992, -0.0074521605177013672261, 0.0068960510733739877054, 0.020068191506558696879, -0.032594931639526314449}, + }, { /* right */ + { /* a */ -0.0021078233190400252894, 0.0033911920282320151543, -0.0050816297403333265947, 0.0070429241880685944377, -0.010690185705680699257, 0.013587756297721298449, -0.015591114736097921867, 0.020843633502798386559, -0.012948727955118533028, 0.29853930777651016548, 0.16678964803161847041, -0.46891720194919617182, 0.10671347466639086177, -0.19485400919129133857, 0.020296222080044834524, 0.50175032885310333342, -0.062426652745247585008, 0.35287342243971148159, 0.46181252928104832289, -0.21215736966683634845, -0.39772241165672927998, 0.11779767228724952188, -0.11684806370437089695, -0.34157516678375399177, -0.12471035998072588225, -0.083290919299407184528, -0.03285571473570295109, -0.18135912101915549477, 0.17043289762173896573, 0.094838956789539824443, -0.1597664824630647129}, + { /* b */ 0, 0.073618220206590062604, -0.0022034661454478632336, 0.18948155049250750559, 0.10488342872512837478, 0.1018566136577053749, -0.031429803589201610325, -0.036141501734993780603, 0.06141191135917295485, 0.13766930493647536182, 0.064430777704134467587, -0.04979451200932960564, 0.025701316421090220077, -0.059124346167005459307, -0.02257216690736835174, 0.16212608510750292634, 0.036696102518347234467, 0.055920596136981026714, -0.041643049307846922991, -0.096430747652202081222, 0.041209812920335597841, 0.037813250066461717713, 0.098343702773055763355, 0.048742335630406335989, -0.045791237814445107102, 0.023916124844060998589, 0.0008038992096136357568, 0.019401014685008904914, -0.063873397769254047773, -0.070877111835333100887, -0.048087413353891522716}, + }, + }, + { /* 30 deg */ + { /* left */ + { /* a */ -5.5564638593561861978e-06, 9.3852107960201930706e-05, -3.1084894380750682785e-06, 0.00028840725196932481822, 6.4946293412693228324e-05, 0.000155365044510191757, 5.7003061507132635199e-05, 2.4933508036006904319e-06, -0.00013672519873220156938, 0.00028540432156498596328, -0.0003096984341893760373, 0.00059548038278123185257, -0.00076294144120414401911, 0.0011346642860010636156, -0.0015290288656044648263, 0.0025263433554162384453, -0.0018363250559039192775, 0.003292358995918287512, 0.0044893145683538842466, 0.099393432492281275081, 0.044378238408873671439, -0.099042449494685103062, 0.046096231459888392656, -0.069686141489361252965, -0.0044478077054072029384, 0.18077959408453747603, 0.026777358766022496539, 0.09446026603660007126, 0.20126013716523227792, 0.055686081012890069342, -0.061474581435280728492}, + { /* b */ 0, 0.025180167786686968867, -0.040991063065334842896, 0.26971809175449501517, 0.19181840837760588681, -0.15250762307253418193, -0.24123727501546010643, 0.037160259659663186227, -0.11575978546930765223, -0.0019633931924722958229, -0.0063613286760411114074, -0.080834549709765668446, 0.10457219077671109364, -0.041267150275581254704, -0.073405901137024720526, -0.038209215752968428426, -0.008657436421921627101, 0.04235425265723680166, 0.058400869357641549406, -0.092083706177692459249, -0.024897575410173788946, -0.015314459922213807808, 0.025318966408588439165, 0.066904667133937945067, -0.017951122045153925649, -0.019282834278142035878, 0.012661929285409656565, -0.0046187674564157621404, -0.00082718411884008524737, -0.012980776141549577041, -0.049460302773279840594}, + }, { /* right */ + { /* a */ 0.0033885300294439271718, -0.0048613774544705584679, 0.005302865794605711447, -0.0070892003638982695191, 0.0070361738768297960034, -0.0063941087232333854162, 0.0081928188122495221313, -0.0089060004377240070683, 0.17020867472563366851, 0.35789768856113390871, -0.39521414506180546633, -0.12407235017989748371, -0.0089740119029986867294, -0.14021003585508545752, 0.50678090343772674853, 0.01377337314436687804, 0.17528644143745444883, 0.56933646082806399491, -0.072240746769574454289, -0.35931102012550142355, 0.013416561081202801886, -0.033982538129653794279, -0.36652241223536613512, -0.19744384675815446206, -0.091076149317218135781, -0.10323197357604668722, -0.054589396278610473334, 0.14291346832079576679, 0.044643159462969331241, -0.11546406559509028722, -0.012902913224164223871}, + { /* b */ 0, 0.10605423311031529632, 0.014864888313219706828, 0.15043223924465926045, 0.11450889378892231685, 0.041507161879618739708, -0.03674693254257770797, 0.040977443315154751802, 0.10157898434947321142, 0.15279684507974583552, -0.061822560485326125135, 0.004772237741598212013, -0.016819258489976333937, -0.066786210621604474857, 0.1081005394898459232, 0.093086116443072242088, 0.048463595010632236348, -0.0058250974846723452272, -0.081800519183662989686, -0.032885530861031207761, 0.052918311400137335587, 0.073362721889048077006, 0.065072441811087039509, 0.0058499565193945515795, -0.029018687889527036705, 0.034235417789990618687, 0.014857609548302522229, -0.011971843220984736827, -0.076724286436182287385, -0.040299204163377760901, -0.048631300045695255441}, + }, + }, + { /* 35 deg */ + { /* left */ + { /* a */ 2.2246319549504983693e-05, -1.7981306166259231711e-05, 0.00013168464332857961196, 9.9034379204276934416e-05, 0.0003615243665544558456, 0.00041192910880949624997, 0.00055513530303891254342, 0.0004627765871206843476, 0.00030127446919159267145, -8.1061927205416939302e-05, 0.00023778236973165040101, -0.00033298576951335152885, 0.00084825840306751616737, -0.00069129572830007104955, 0.001420559255088660322, -0.0012973704223082083153, 0.0019848520281529093146, -0.0013496792289693941222, 0.0019496759876003223744, 0.0035721438084931889101, 0.079964526305924266136, 0.060786211180906268847, -0.072227985409185901933, 0.033541081923930959885, -0.047731446357855700224, -0.020688550877619171775, 0.15226630594781381811, 0.031397312903122531758, 0.092806103290377084392, 0.19568936619800136878, 0.096992123180227041157}, + { /* b */ 0, -0.056091597445684371337, -0.12532019980467795639, 0.21619816714720657691, 0.24292246036838882617, -0.18441540976129461304, -0.16877038135500177507, 0.046285230921004616444, -0.12996636591072752154, 0.0011975693127094788615, -0.086536047550177241927, -0.082626417097879378826, 0.12612621449737543289, -0.0067070476921643473744, -0.031313081347780769015, -0.054627413082521114607, -0.050072452026928004898, 0.043095265048753716997, 0.061391567137795977072, -0.031588886056574394523, -0.015918232628454875854, -0.039366355925538054628, -0.015517509680679220097, 0.059049611165241933097, 0.0093687542665824019572, 0.030141503283322157447, 0.0095184589911020967001, -0.023527488786957706512, -0.040401343824290891771, -0.038667213391636867659, -0.059674745198669276736}, + }, { /* right */ + { /* a */ -0.0013714152522657646616, 0.0006273793896546808746, 0.00043122457778210776524, -0.0021922389323563579167, 0.0055708395088355927571, -0.0075242460363320051719, 0.010591462743974114358, 0.048398020978598910169, 0.41619284829983088647, -0.14382476555407414098, -0.35882374610701062156, 0.039668989509555538375, -0.1620882671571429734, 0.38019200426458643616, 0.14583130894703361102, 0.06383703585639832756, 0.5445344840782336826, 0.12599765399910417552, -0.28518956246040627622, -0.11700115479775820282, 0.0039966079479203386882, -0.38531175783483723185, -0.22423262908750918321, -0.10515959452829688747, -0.1399597004266011635, 0.043707663783861684659, 0.04139732538284597585, 0.015522465146040196476, -0.052820550344454333946, 0.0032102282042194285605, 0.015984710792678324953}, + { /* b */ 0, 0.13427337041599388123, 0.0048139154348175727804, 0.1572444113827342338, 0.10908352866460453712, 0.025770956456642665766, -0.0050018096122567134998, 0.055807560734215735931, 0.21187737349172824919, 0.011038836686726512248, -0.080848400150794128005, 0.042421610143179855346, -0.075470694051683537285, 0.066863221023921726172, 0.13083208495369075264, 0.033121454529102395403, -0.050277280289135257985, -0.039128620222435295251, -0.012052262736315584243, 0.010345718716008728277, 0.087596569448757793941, 0.022997773874034593833, -0.025031434367365004712, 0.052202915093862989337, -0.0089830303802527350365, 0.068664492264150847611, -0.028446270625478303762, -0.049388113445691245174, -0.0848237667824044278, -0.0093243400765309625289, -0.022253412473574249453}, + }, + }, + { /* 40 deg */ + { /* left */ + { /* a */ 2.1793835894011746233e-06, -0.00027154751197633331117, 0.0005671281328931141244, 9.0822337706075701542e-05, 0.00099206136663226862638, 0.00073251131878920849871, 0.00067401960485158330088, 0.0010339520481461583756, 0.001261491156673288927, 0.00081585154267788454179, 0.0013721862622898001877, 0.00056652749939184432991, 0.00017514670911517038476, 0.0018149465347977447247, -0.0009629098705887795262, 0.0021172863388929652473, -0.0012859543649379467922, 0.0012650418609871942523, -0.00080761000567641804977, 0.002045207774387101593, 0.00012780165967174808572, 0.059086023985258084856, 0.044267535707145921897, -0.085465943991669401925, 0.052769026021581844077, -0.039779355975461117012, -0.042237528407387814333, 0.1643077306221277234, -0.02446083998811077187, 0.061938320602659968639, 0.16384587098797892546}, + { /* b */ 0, 0.33422749822261538233, -0.11487095431066823847, 0.16644427691021174143, 0.38071775606933477842, -0.39012462081940146863, -0.053576722369511053934, 0.068011811522050713563, -0.22451887863150776781, 0.19746958958965360464, -0.065277732785341824329, -0.017461553695752307647, 0.089348993440457880055, -0.075603194818196772786, -0.019483190216752765966, 0.046489056814216778157, 0.014291576027163077622, 0.030426427107856091059, 0.019112163865651898842, -0.091943596894211720993, 0.00084339433090163673512, 0.025779716876124514346, 0.02709668019695160579, 0.04270873769130628661, -0.04509487662892469606, -0.037299422899345069382, 0.0029375173199799875512, -0.0014709831565318243207, -0.033163954348824908891, -0.029644025426878162222, -0.082647976311391035953}, + }, { /* right */ + { /* a */ -0.0039789246353439718801, 0.006133535092132241795, -0.009010367649220363262, 0.012938576527919687376, -0.01631979618553144884, 0.02221570561540889277, -0.017115080265671555465, 0.32623476405816531631, 0.17063411234871997402, -0.45850444292681674652, -0.044599086886291765264, -0.072363693609748216962, 0.1893440694816350689, 0.21226201381446715977, -0.0040666736535709159528, 0.54388239423168593945, 0.29842581082375013724, -0.23242339948278389894, -0.14737358160892799486, 0.032063708780309327362, -0.34195980604076975373, -0.26555148095350827875, -0.14613400600363329884, -0.18983946477948737686, 0.074588566864848854232, -0.024440181328726912069, -0.019429265748025642546, -0.0080576389074145035596, 0.074790705429606918475, 0.019974100701055860774, -0.067154806391257426679}, + { /* b */ 0, 0.16460431381272111473, 0.0027972040284951842602, 0.10698578598074351409, 0.04041523264294942519, 0.087410249710898862974, 0.028702626391889109886, 0.10146221100793439973, 0.18156553983888379378, -0.071713879295784793699, -0.039211217036441703421, 0.030793778252199113105, -0.01910649119353687031, 0.053438277835419004114, 0.12370544227754264044, 0.0047416582382763319825, -0.10684133284608565706, 0.037659786684316430561, 0.0088382827167620553466, 0.043525054958149130002, 0.044306391668120712057, -0.049406157896095606596, 0.010671084977429030893, 0.067328644708557622289, 0.030307410623826858131, 0.044862049177331157768, -0.085971974419243063492, -0.028695458295538260607, -0.08142448996261655858, 0.026977203326033163955, -0.035164209142325708601}, + }, + }, + { /* 45 deg */ + { /* left */ + { /* a */ 0.00016150711548268382404, -0.0019440537467503571367, 0.00060534014269947300762, 0.0029997960951551327913, 0.0017473438424821241544, -0.0034913008790417314649, -0.0013297336088485822714, 0.0029546740437647045496, 0.0017854343836894155488, -0.0023195419721240544825, 0.0038098928129871867387, 0.005714340667335032764, -0.0043362884876059493156, -0.0076623794658531325236, 0.0071344829064012849074, 0.0085652865194213445577, -0.0065424164318386712758, -0.0076128530448159315025, 0.011673780507467923506, 0.0042333848121640909462, -0.016075536998505498415, -0.00062319470183272093755, 0.067045896686504513617, 0.05542911650422560621, -0.11456365746859847876, -0.017773627792316837315, 0.043664478116614557912, -0.026494992388624571955, 0.071614826367208395119, 0.069981694853296638748, 0.05410009876933435935}, + { /* b */ 0, 0.32113328027076204485, 0.29373423297325218506, 0.38933482938681784891, -0.090586007813944074973, -0.21987920577531960831, -0.057359431636112151454, -0.22344633226157803452, -0.12363438135674920115, 0.33827945463841063711, 0.23367396812070881373, -0.20292402709079504497, -0.13842849880823723807, 0.11751149999315868566, 0.081481066321800049712, -0.12070609368596690869, -0.037213914143678639146, 0.13644485314354831695, 0.031379917151685976506, -0.14910167035159932469, 0.037218743909137735892, 0.12517705391255906644, -0.059856545310699865725, -0.055103064822512731746, 0.00172123115449798747, 0.0095876042228992819361, -0.05475981256181788881, -0.045525117256077496375, 0.045296337271901604415, 0.042633212967158051754, -0.11473134600864867694}, + }, { /* right */ + { /* a */ 0.004417449235734144386, -0.00620600649388087372, 0.0063726741346805185207, -0.0066460159533262442438, 0.0072749496685510887939, -0.010562132644713340124, 0.1412531184820029484, 0.41189149595716445518, -0.29560082071015386651, -0.31284630781385347476, 0.013791284580906559842, 0.073780292975883843276, 0.27143177757182124221, -0.049788461825507793201, 0.43780067747246809162, 0.52900554641297115044, -0.18903325950267421685, -0.18045978026173392639, 0.053681675569795278546, -0.20352403802022145385, -0.27235779954244454526, -0.19356389785279901061, -0.28417610303460733023, 0.025695652746474118011, -0.026884398969355405296, -0.055587273835120548648, 0.07687468227252683417, 0.063709559864257719886, 0.046913219828460112071, -0.10119045335950105358, -0.073455519061875987341}, + { /* b */ 0, 0.12523694267447316175, 0.030106660207185158284, 0.091163028595100129015, 0.010834765787190100972, 0.071592206550095252582, 0.058714390304081230665, 0.12465362164220200603, 0.090861745203670657434, -0.003444280655042625261, -0.03959819336804993456, 0.020380346085020425301, -0.01277437795050694741, 0.0098684267116778273676, 0.095808865982682456242, 0.010206453529616223153, -0.027353704550592272682, 0.051750464218872256617, 0.0434786225811953711, 0.015354926024562126283, -0.010280446025986642034, -0.043444088830705065996, 0.03676543185066136199, 0.077987256491148446158, 0.029809860226468615219, 0.0077312126460418045815, -0.082362130505542030523, -0.018751972524978961776, -0.052424431011004364589, 0.010904743472919462, -0.038141478777217741047}, + }, + }, + { /* 50 deg */ + { /* left */ + { /* a */ -7.0597622706974894058e-05, -0.0014187129521170413829, -0.0041973382672311210229, -0.0058731709218912131476, -0.0051930623767848516081, -0.0029746939450570053509, 0.00074269907814061798465, 0.0068509220603474299191, 0.008540351205538199153, 0.0052652735571534492465, 0.0044591066482302394586, 0.011150738290360839855, 0.012062318974492836077, 0.0022383464427094819198, -0.005308597948033844105, -0.0029183510540098378527, -0.0091992071743485243768, -0.021803415056753649992, -0.017754068490916097289, -0.0019571380532878990266, -0.0032260693465929746182, -0.012139060934640566458, 0.0086345886406852256911, 0.066564554163928146835, 0.09702719796146619391, -0.034108301861165979396, -0.013453636385357681249, 0.051139938249747385335, -0.037622455357141926235, 0.037629351289369949995, 0.053611444630619065066}, + { /* b */ 0, 0.13449444518795483638, 0.16598922760596712678, 0.28643099415512351946, 0.061039639002585799332, -0.14318519554738784461, 0.030355409185375825665, 0.018292234915534555384, -0.010792444827129044072, 0.29406308138177350564, 0.16978117316310270546, -0.19761376468752089863, -0.14479296715406986262, 0.028158686575310842848, -0.014840610429028844308, -0.13835806041959108903, -0.12487480125847327805, 0.060761864553032784997, 0.078122467536342887762, -0.071426222519668791655, 0.059574263595527081339, 0.1423682842825041428, 0.024943297676841003074, -0.0088567426092395207249, 0.047857365474066049238, 0.064262716563054378405, -0.0040174613885612941999, -0.10083010619624244164, -0.1174901659180965785, -0.035432070135468785033, -0.10903701903458573597}, + }, { /* right */ + { /* a */ 0.0035403829431335867572, -0.0063994790363381941906, 0.0094807609668512426992, -0.01338496440375386981, 0.017607435620764499973, -0.00054243706903381967363, 0.38819394139654789244, 0.11542622008901651243, -0.50122674108308362673, -0.063632383809830370125, 0.037142079636945900256, 0.21196427083662505719, 0.047035520659341988059, 0.19612761644393400529, 0.7247137348377837851, 8.1468708675903889205e-05, -0.25420295892867450505, 0.06339404868670878157, -0.12628198942908777647, -0.25323361607423072739, -0.22324934898687293083, -0.30038007421886431247, -0.061813695789816359982, -0.022059680251655836708, -0.1396998528962117847, 0.049196289436822214503, 0.069781770804478920889, 0.0099113580072232934648, -0.10035101637286514276, -0.022883120806838075367, 0.045852482443127853817}, + { /* b */ 0, 0.10359200124467059234, 0.0052610111223993366592, 0.068536565964016221697, 0.036899271175761486075, 0.054564604864992288791, 0.099686898476871774188, 0.12172863702120204077, 0.041674938768762603836, 0.069604512032048732051, -0.059011297680986070369, 0.051313382834683098077, -0.023223897932292923707, 0.02582365530437620571, 0.13896725418573549482, -0.036231211028676588159, -0.015840360248773124874, 0.050522971645401183738, 0.033836980910442043813, -0.002528124984245084389, -0.0011833207609092404218, -0.028868936378292221756, 0.053324252075556168029, 0.04659001444153997723, 0.013013853236939522395, -0.043392750016090636533, -0.042388805764409162591, -0.016981208463182597551, -0.037989579387181005021, -0.004257499909570035268, -0.024568667484287445846}, + }, + }, + { /* 55 deg */ + { /* left */ + { /* a */ 1.1578368860037852297e-05, -0.00011816999108404946384, 0.00087640537979605248609, -0.0020280251725873776891, -0.0021068047360156549885, 0.00027187084084001611473, 0.0031304327319237042031, 0.00089292948111940884104, 0.00045933324546720832871, 0.0051687820153134556023, 0.0065643674857646105991, -0.00055561873747722589911, -0.0032679994507733844955, 0.0015441048749342829293, -0.0029191626319674530803, -0.014514898701023515315, -0.012984473763688608727, -0.0046561391591620759911, -0.0083716584381443581719, -0.01356103312845358122, 0.0018988103912126463868, 0.020432107407306054903, 0.012447960186859341469, 0.013390889061007382743, 0.050401262412999581208, 0.1024391092795812197, 0.0076396060180033975584, -0.011690786411236442355, 0.05990382429044149859, -0.036577009552216099841, -0.021380778457980031959}, + { /* b */ 0, 0.10623619191692246222, -0.0067788270131929895257, 0.18852906559209403614, -0.049206343541163821698, -0.01126637043082079348, 0.24317483738434120255, 0.096263757482575873503, 0.05760214667596685878, 0.33866109073667216567, 0.2547586839746901477, -0.059317376256765030895, -0.013459832727269471775, 0.075663009614992948748, -0.035307654850449954331, -0.1798777472163115565, -0.15813077589243995646, -0.049518167965986736867, -0.14129805415867557894, -0.2164595138297309429, -0.022427379978498529489, 0.031400080641869054787, -0.061226279240850223218, 0.010520714239237172194, 0.1198982523673702838, 0.092899746554145345989, 0.025864164006697554221, 0.010682328837122168075, 0.035779475401134797075, 0.023278286305425388569, -0.11316441404674026927}, + }, { /* right */ + { /* a */ -0.0048765805688135432927, 0.0053151709295158611202, -0.0056105185624460915395, 0.0058353469265925300702, -0.0095124904947408925326, 0.1474736271262454268, 0.45015598574916032559, -0.31617058194011959937, -0.37500561058249115565, 0.1024040461535024038, 0.09880224296723426336, 0.13507025371908992772, -0.0076921438847904824443, 0.70384742117252319105, 0.39354022432035029588, -0.35987631054416541199, -0.016295617248206911709, 0.0037069899110325136952, -0.18230754888878106246, -0.25574618730660003685, -0.22473349359278305126, -0.086128208326026980957, -0.066843673532245156954, -0.2811472454940759369, -0.071489158758016368989, 0.12593590396064910375, -0.084427226536140737023, -0.075750225784808708496, 0.078348230738386523409, 0.075996002542261575918, -0.0088596280720283637766}, + { /* b */ 0, 0.10992763307071229395, -0.031950991955910876263, 0.067764336110112510791, 0.011642549958236145247, 0.065471901287065897845, 0.1673034870980578126, 0.028095206047705489905, 0.027267773057104531531, 0.084579867348890197531, 0.0099220485684850534547, 0.088989181038956643999, -0.021794892683911493148, 0.11813758800985002528, 0.054176192981242488056, -0.10363299382656462888, -0.018662590133854996266, 0.070475304695992779802, 0.051096625691584955653, -0.027165719683553204988, 0.048772571120754747154, -0.0011836521868419450088, 0.026143533279308905914, 0.010018324394546467004, -0.027326001794422516422, -0.054777896142175867833, -0.013206742436717121281, -0.0049659044408859077946, -0.041443238983922443819, -0.01206157172231516958, -0.0033435101275689320388}, + }, + }, + { /* 60 deg */ + { /* left */ + { /* a */ -7.7511870492402576904e-05, 0.0016441118738663718091, -0.0014490512186687842799, 0.0013291594554154519906, -0.0033660169662663719237, -0.0035405112611824867547, -0.0018534540596054638328, 0.0026523822617419146042, 0.0035696953020608597311, 0.0010309818936765626982, 0.0015555973072872710753, 0.0069861562371903440649, 0.005884164429037497257, 0.0020504561617368248679, 0.0051656079144007938098, 0.0018480741443421826349, -0.0098740636215316479607, -0.015193873352109532604, -0.010129356530011455681, -0.011786926255030749644, -0.017737538763468174707, -0.013045360977154141224, 0.007715513063652479353, 0.0077814785513774520354, 0.0056104852005217642485, 0.032549948194363076404, 0.095042192724825724781, 0.041711508438485589423, -0.0079170798496924765786, 0.06418245741109107616, -0.014766641064020702423}, + { /* b */ 0, 0.13754721824368876248, -0.063493641654088772697, 0.22830296737448574351, -0.06090628577308521141, -0.046004693137549623749, 0.21580730819120708119, 0.12307782917671261647, 0.089740574449950760716, 0.32648577436567016719, 0.24035205934268277783, -0.072543872172078915916, -0.012821880001484542433, 0.061865137137434578207, -0.05044571494396132838, -0.20687345392352007867, -0.19352544602058152634, -0.081534524324355928115, -0.11527908326446067999, -0.19205089159229915552, -0.014435573776200305574, 0.091578567882680261825, -0.016821578118150770642, 0.022722319119941603027, 0.083369554422021985296, 0.059078833427872456951, 0.062862807790400876407, 0.050723340750263856691, 0.021365973798814774653, 0.0016529181815633231523, -0.15764243352166251722}, + }, { /* right */ + { /* a */ -0.0082355372166692739078, 0.011221317614100445592, -0.015398602139821311596, 0.019928042385439565659, -0.016098624365389231639, 0.35687158954924280696, 0.25056043621692913881, -0.58374093063797949377, -0.096587696990415444764, 0.1417547393039359227, 0.12297834557525599841, 0.022570043259149269455, 0.33375919715316915148, 0.760382535490139011, -0.16254361373105752353, -0.19917812853966368469, 0.070067615832109297891, -0.10829091532814275056, -0.18484059920915038577, -0.1432702217603286643, -0.12124479647419947326, -0.15236845595713283119, -0.18674136242612379699, -0.25923778948833559044, 0.0083936426743206477008, -0.099921477749484607922, -0.11575635007653031772, 0.11489835825258340463, 0.05190968921625193494, 0.041271947034530499787, 0.031437997309678028524}, + { /* b */ 0, 0.10868828192197363403, -0.074118270899444116395, 0.090777214578766446396, -0.013578916722286824004, 0.070883676521874855458, 0.11959741347631475117, -0.01478983329482146114, 0.072627013198334366972, 0.061154270063062954321, 0.053538843911089990801, 0.10606045726597232437, 0.084565973879056371976, 0.12939459925111462812, -0.071073677257657563722, -0.045887381062256933639, -0.032179006816211025432, 0.040614594623645042248, 0.051338232550410083099, -0.0046888299313390183198, 0.08651005715390544526, -0.012422527402296091453, 0.036899877754051693679, -0.022144609442510329589, -0.063400842038184745952, -0.026440060318911294546, -0.023673563205560410605, 0.0010511162089202694819, -0.047472031235924229409, -0.0013554914729107421512, -0.0048621235097193868033}, + }, + }, + { /* 65 deg */ + { /* left */ + { /* a */ 0.00021209643066757990983, -0.00031257144469942722484, 0.0016441805216621534387, -0.00081058611586804288351, -4.3648113456917552941e-05, -0.0012284241081988998053, -0.0013372660613575335694, -0.0012448771791878643356, 0.0011663351290325252307, 0.0042197117786080262647, 0.0023254717276821601502, 0.00025887355412090818849, 0.0052097013800850300314, 0.0068133846221896101833, 0.0012296601063083159242, -0.0012431805547497014504, -8.8048805399475269656e-05, -0.0038129513141305082513, -0.013960404317975294575, -0.014560488715287256412, -0.010102471322895321612, -0.012002486002929415101, -0.016113745186924210984, 0.0018967118588925058718, 0.013449767355400155111, 0.012584539113361103979, 0.020867824729736694778, 0.073836201193860917513, 0.067122965072344276116, -0.0018477671601818679292, 0.05223682330510182048}, + { /* b */ 0, 0.13309668338776226015, -0.034796214140597747644, 0.20259809733892686356, -0.074229467116257441539, -0.033589853999302365928, 0.17194460518329957033, 0.14053069634131776233, 0.10398223014011775955, 0.28622058494381930061, 0.25553069116036886133, -0.033340385994645727052, 0.0493901404229751817, 0.065507437268241819339, -0.14259732883797893166, -0.22103298760553502511, -0.14786809695042923973, -0.12633674696810315297, -0.12873024948879818741, -0.1027909150680406114, 0.0014565313397746360025, 0.023432772310455485254, -0.066093717438972521272, 0.043814867214386765681, 0.11896612672430972868, 0.044357594944782752222, 0.040347747146118884132, 0.077413706726509046163, 0.040768513366040703971, -0.045448434075889831973, -0.11511235099577465935}, + }, { /* right */ + { /* a */ -0.0043138529817596110716, 0.0075413039075933347571, -0.011521651041039235319, 0.013325571083565648789, 0.041007771396277606368, 0.5053361523397409405, -0.094698397193346620093, -0.61958974147486567396, 0.13570958419739470591, 0.14441422292394201499, 0.085033815695051417904, 0.092603593314331822395, 0.6701887476182314396, 0.36261635455576279874, -0.3621843326644283434, 0.0042299442428242461922, -0.002366041054087388365, -0.12368382816733622387, -0.088272849346890044919, -0.049419563996561458041, -0.2125426294795428328, -0.1586871870165506293, -0.190927188977616763, -0.17006683683656526052, -0.060741253294065850055, -0.19496219647700138711, 0.036515091593278953264, 0.06314691771158037481, -0.015262096579524153661, 0.048691056102282553875, 0.021226484220801533631}, + { /* b */ 0, 0.089542514489504565489, -0.058716409615418296841, 0.10736888709090598726, -0.02331315160544743248, 0.091213288884433446624, 0.017298834005556238541, -0.016589287472655936395, 0.079801817869399827021, 0.035479049186560793205, 0.068019632837512306045, 0.11886793181633235894, 0.13836077542754027236, 0.070163159715686679307, -0.079640800716906573475, -0.0062391578820996523858, -0.024478254830942465514, 0.038586029342448785462, 0.042690244877749763952, 0.0082479014534321548613, 0.096996213193910676975, -0.013540957110730333923, 0.043726799693584783579, -0.050859473091123888477, -0.051383908254952481709, -0.018315577251619419297, -0.026445801315291839195, -0.0068531948455192986253, -0.042271390394759897347, 0.0064541724220136438561, -0.012350604079308658001}, + }, + }, + { /* 70 deg */ + { /* left */ + { /* a */ -5.1811224841032703294e-07, 0.0001195077510562910048, 0.00054565132884265522481, 0.00036921285875846077389, 0.00033238357281806241161, 0.0012172851626690581531, 0.00026386278322021471977, 0.00076749530397712774007, 0.0027338096357520935697, 0.0016283443813464026917, -0.00062622425994751651501, 0.00012757274674146668048, -0.0011569955119666852639, -0.0045294448897115202612, -0.0047029865648390289934, -0.0036212338211383254816, -0.0092852833147305524619, -0.014348328680399702328, -0.0074853254233148147634, -0.0050769693650531966256, -0.0098573400794665921865, -0.0040309461902393595167, 0.010067145221129281119, 0.004994392654444901325, 0.0063956208098958633457, 0.026055905177485572111, 0.030774492283322522207, 0.020200953112017860924, 0.051526075933797099715, 0.081379623049979143978, 0.0023131432713013877489}, + { /* b */ 0, 0.10894635247324369054, 0.08226281338868934867, 0.13188409788832122782, -0.10259859632821832776, -0.036453212321138628305, 0.053734255601595171115, -0.0047133499977286552607, 0.12938685340448119465, 0.34471458269645649519, 0.23193048383982062255, 0.031865410002815397483, 0.15000719272233176138, 0.11166707115740914791, -0.12525365639212693303, -0.12533914392043321584, -0.013940020445260548065, -0.076263219169064866421, -0.13523188830209809108, -0.12570995087821112968, -0.12364896750882703458, -0.11644943785832362337, -0.057756822422969089637, 0.02441554646979982035, 0.0003564445640730218301, -0.021530279351658632159, 0.034706834490041971186, 0.056194495670694455391, 0.033570314935671419221, 0.042081857466388927769, 0.021545695715191603981}, + }, { /* right */ + { /* a */ 0.0035836200210229286582, -0.0031072734051323207261, 0.0019421304212324103089, -0.0058643234854055224792, 0.15128443576764849521, 0.52834049315792519508, -0.43710112538159973106, -0.47925878830830015431, 0.29492476075622842124, 0.11155941490950406492, 0.042356073563245243141, 0.29913230770566656691, 0.71528723603458332914, -0.047873961502792675149, -0.27559532028674138537, 0.072072004801736505586, -0.052072379004377590539, -0.039855623428972607181, 0.015994912410223841026, -0.16099078872106220572, -0.2483811542539591799, -0.061804120649365870688, -0.23081587273945508576, -0.14671726044973676384, -0.13359308987310225536, -0.11866357264318513898, 0.057726807929955707699, -0.052300350854971928982, 0.0070598896143025946515, 0.040982578067495951946, 0.010737637321303616922}, + { /* b */ 0, 0.085990202435275248094, -0.045241177450963329654, 0.10617869357694004195, -0.027274277623547289739, 0.081604490424743256205, -0.044586295972629322315, -3.5857159416154138487e-05, 0.065533207614784261263, 0.013976222370463801947, 0.081284503898977275571, 0.15219632615988584745, 0.14536894803318561875, -0.0047486841226037877772, -0.028328518717180534159, 0.012226862885177103291, -0.023973643258740594264, 0.052947342934830943229, 0.027989269883246792325, 0.019243641513648143682, 0.081454590263969284258, -0.00708365997103155981, 0.048979713260849030987, -0.060966803987036639889, -0.028789221111322378654, -0.032056881092154890234, -0.013506612710420529133, -0.019305102195920839647, -0.036637922409973010252, 0.0051001653031878674271, -0.012499719609549049537}, + }, + }, + { /* 75 deg */ + { /* left */ + { /* a */ -6.5923442983146108426e-05, 0.0011271001093549047091, 0.00025601249190043554645, 0.0018847194721560711628, 5.0876901303009702815e-06, 0.00012011933336886215784, 0.00083171514300706128608, 0.00052309243540882353722, 0.0011673413852220091477, 0.0026861263670296948829, 0.0010904448629472929255, -0.0025833300498073752394, -0.0036355509377972161644, -0.0054094004553473240549, -0.0060745633297804024764, -0.005798110979324255787, -0.0058363766689689677847, -0.0064945304305980000592, -0.0096925802501451885362, -0.0107794127797433692, -0.0055240783044391283951, -0.00062055389930815163524, 0.00099273240065922419006, 0.011862141140531190509, 0.012128941204794796427, 0.007469531601092538331, 0.019089850497380767003, 0.027868375799752764799, 0.02564535563215342151, 0.040200335544512966202, 0.075140591824576774549}, + { /* b */ 0, 0.16821546891768179854, 0.052070955596089651962, 0.15059408780382366189, -0.034484929464922986497, -0.09681834645926257199, 0.038993096989556330634, 0.025165602614909965418, 0.068217434327291756602, 0.28588626697426122725, 0.25322530989441149885, 0.023257670143314590483, 0.084631528479706119583, 0.087623863125815826258, -0.063289424224385881779, -0.04111210934180931087, 0.0062099315267100108073, -0.086630674442783606182, -0.14520617328789287015, -0.11845477998956299714, -0.09507741318859341817, -0.067074376130724089329, -0.049297931923528159892, -0.032629951249585342765, -0.032322618598035202098, -0.028774768976724818259, 0.0050862628908632245839, 0.030059867262149930767, 0.03619620949003865551, 0.040048636948536442404, 0.074784483329731754608}, + }, { /* right */ + { /* a */ 0.011019275525695253204, -0.013849992827126740569, 0.016917266614222860321, -0.024593574280674067312, 0.2755979158975589427, 0.45173428558416955925, -0.65405270132110782111, -0.27540548350881166595, 0.32271395364772170744, 0.050144850607296634348, 0.097796546761367855738, 0.52489190531289731112, 0.53222901585795523438, -0.28672062269614356778, -0.099921138514967006161, 0.074086470897411355052, -0.054510924206991988317, 0.037202647828410775888, 0.01654229015551119536, -0.26427705887042252098, -0.17851612488609874818, -0.087535243016548386352, -0.25308108532219603104, -0.11270654329725227072, -0.19911311611538287658, -0.087208381822291847207, 0.041575970333826602066, -0.046835263936002749507, -0.0031789718109168432769, 0.017733383501500332713, 0.022284914124549512482}, + { /* b */ 0, 0.063654984772485573297, -0.072258235141275717339, 0.11143147791531111956, 0.0087840137916747988711, 0.064463015400774259511, -0.11346145969663629094, 0.02100129439068075532, 0.064648989334362388925, 0.038270361198741026376, 0.071675930769700912926, 0.15879780912824276173, 0.14156427256304554563, 0.0029008342249592002776, 0.013453795811311022868, -0.031978426252195213397, -0.0047055545557023736869, 0.057295800200696245241, 0.019880527866045910601, 0.023882626203728003766, 0.0816614286701679154, -0.011451559711870597236, 0.036329458605499818924, -0.041088532580567209418, -0.023652412022372691636, -0.026671112082336280447, -0.024258466376539916665, -0.018453252246660931113, -0.03518859123466042127, 2.2642044285488299076e-05, -0.017197498276247558113}, + }, + }, + { /* 80 deg */ + { /* left */ + { /* a */ 1.7418901153948339409e-05, 0.0024829349213467679855, 0.00080662799356590042521, -0.0040748995594475090343, -0.0043772687331744553063, -0.0045817695894234677922, -0.0026921600358026384972, 0.0020317311486689479741, 0.0021593746597770016246, 0.00066712085501630102868, -9.5710687916805595003e-05, -0.0060753720715345238546, -0.015743200903750587116, -0.01434605846804826168, -0.0073507314333337570034, -0.0062768288260767191034, -0.00052040153811216960378, 0.0089624149056388713319, 0.0087255307387040792477, 0.0041380932427198535706, 0.0025873059441433587935, -0.00056427236265477176674, -0.00042937015477806351159, 0.0051603085642754065177, 0.013367090647350976518, 0.026507895717620133524, 0.03763876907939001093, 0.037489388889297425855, 0.028338574035793876599, 0.023157443746341099811, 0.018735089226257217732}, + { /* b */ 0, 0.14534882996838915936, 0.14803175382258060289, 0.094844719201528371322, 0.067106074548503591437, 0.0076561274135744650238, -0.045065770755345346821, -0.048916309039123695435, -0.065139716880976972213, -0.040503460437060767596, 0.061896597042185308446, 0.14430131906391363561, 0.12502812778689142981, 0.13307255907833714925, 0.15846438120380168524, 0.072443959380358302624, -0.022362089126953810236, -0.045059346560211155364, -0.054526658792158899658, -0.054612633246867159365, -0.023133071334960342291, 0.0073895288997538610687, 0.024334450270876994971, 0.010667863612340289237, -0.044504676902160089647, -0.098200245560384202825, -0.11766865822868122216, -0.11382238342308448331, -0.093681436951140173441, -0.019605847884629490352, 0.090021698045603115723}, + }, { /* right */ + { /* a */ 0.015512396634440192567, -0.020391464096575218079, 0.024050195860016859717, -0.029979857909256946158, 0.36905414956375964808, 0.35065405180331060686, -0.82070459684360974606, -0.17294854510044505025, 0.5091349998282543865, 0.070519733383666086124, -0.077559956631959026119, 0.61125406796720882507, 0.52623629698317675452, -0.46897902004352903793, -0.1714417829200720611, 0.26948853777138070953, 0.097069492238713306342, -0.14707004524472033768, -0.096403658302783926115, -0.13634031166999754925, -0.098303552232116911402, -0.18241456272988593179, -0.21530248155336156879, -0.11279416724501584168, -0.23690606176759601564, -0.056911240660061090946, 0.037438849309527962028, -0.04578389942453200967, 0.0046264186300080251124, 0.042007640021230613359, 0.022151274334351871154}, + { /* b */ 0, 0.041982195862818455501, 0.08254722741980052847, 0.072664427252597960094, -0.11829377132001502038, 0.070236617743524298874, -0.011901997620548596113, 0.0077893227590393396276, -0.0089008987991332638723, 0.090522189974536967916, 0.095324643530981037487, 0.11754453832870694063, 0.13654235503493533654, 0.034013562766714577901, 0.02340727949840144817, -0.040713847604418457182, 0.015732261217336895864, 0.023791283777080396433, -0.0028896805095383198969, 0.0169974431277371274, 0.072837038118719221735, 0.0039342201881270161268, 0.012312494370343705571, -0.021651764233942757953, -0.021179489185238833948, -0.0081668579190747464525, -0.03054195555383248939, -0.019423375638861345438, -0.04295726081561708487, 0.0067010462456371100437, -0.019120058380112447266}, + }, + }, + { /* 85 deg */ + { /* left */ + { /* a */ 5.4207905774400502404e-05, 7.5793917808653077373e-05, -0.00036713129453191939433, -0.0015618904773695430066, -0.0024990267563640422566, -0.0026372051095679980084, -0.0019537977059835842653, -0.00080050034712009221494, -0.0018979737133328900001, -0.003172980689997162429, -0.0025624502986154595874, -0.0049276394160913117304, -0.0082707509296842118829, -0.007992069046836025592, -0.0092253530901975633327, -0.0105164612737573826, -0.0039970754482643311434, 0.0015139378144179982399, 0.00047514063947207141325, 0.0032575344298402253429, 0.006201190368149145371, 0.0016213095890837969648, 0.0040644636932485322944, 0.016439269262674693906, 0.02129002660264389668, 0.027932376313460904882, 0.040271769366495568931, 0.039282525111511423788, 0.029202236994929631209, 0.023979121666767300169, 0.012741959251327816816}, + { /* b */ 0, 0.058008692718908294594, 0.077001205963933561094, 0.095079889668447936657, 0.05750192471398740679, 0.055385520693063128306, 0.068756639874378855382, 0.023913171111333841878, -0.0029203640386499252202, -0.0029721632491264138309, -0.03824664324664217574, -0.035867937897005042203, 0.053236292890807002109, 0.097727381831724802197, 0.10594328185259405117, 0.15491145954144025509, 0.13646633487365833481, 0.042836349739144852222, 0.005589485785606473911, -0.018748615375624444468, -0.082901956566933110437, -0.080797429955759003661, -0.039435179337715675629, -0.046340158566526845618, -0.048427734634648444967, -0.034067592635106391796, -0.060826253589774115227, -0.084456034839947013992, -0.06411890376520346102, -0.041638553569395275744, -0.011361247130581286768}, + }, { /* right */ + { /* a */ 0.017637404019566080282, -0.023146976510304839714, 0.026545048936775856446, -0.030274109689290909508, 0.41203671504139649517, 0.29639804351685683503, -0.89791623818012644698, -0.10535778408185016153, 0.60757898399007725931, 0.024978129788012087831, -0.14743139188086634705, 0.71873064564674038479, 0.49418969158774794792, -0.62062564666938124791, -0.1537079765276824217, 0.45739395065715737765, 0.073932804114116082439, -0.32371044784339197964, -0.039912490742135750543, -0.012636479730003882804, -0.14847117245701110799, -0.20037727215219974797, -0.12919185722683890205, -0.16960876451316783675, -0.27984633351919496747, -0.037881302318437670706, 0.011410078671189247124, -0.083369129763727345406, 0.026709242074499095487, 0.075985860814370073668, 0.021280055718898502337}, + { /* b */ 0, 0.012410399428397497074, 0.15419767583516708065, 0.044336732203144324505, -0.16155512807170341327, 0.097794779635425668762, 0.028450550355408124603, -0.021886728378568004461, -0.053240842936555163312, 0.12024645298295937035, 0.089631044274977519914, 0.072930089746372356307, 0.15639732412983112231, 0.088433184541984732885, 0.024345740863166279166, -0.020881518480592164977, 0.036574638166480696877, -0.0095547481038585346802, -0.014256673297645752752, -0.011645669012270293274, 0.059601517433541598145, -0.0071614952672649674625, 0.02250688614354422884, -0.010717105567844815647, -0.013790642205040518076, 0.0052048230799340358677, -0.034950820363846904493, -0.013621506644743638925, -0.033005877849209136476, -0.011242747822229337551, -0.018391922098279223086}, + }, + }, + { /* 90 deg */ + { /* left */ + { /* a */ -0.00021027350211119634135, -0.00076954670552575963477, -0.0011207516659172984258, -0.00042666875046948500583, -0.00054082018030587875046, -0.00081260628920221122939, -0.00090837626309792085522, -0.0019174726827164700893, -0.0023521897586642470657, -0.0023920627754969734161, -0.0025815123637362704864, -0.0025258929374494254461, -0.0058967493983541618974, -0.012319825143519702593, -0.014053078285086728627, -0.0091114297819105960485, -0.00068447180839870114255, 0.0067545738888230566488, 0.0060516706282265353423, -0.00056778821963532344341, -0.0024491019702532765626, -0.0015151936721968795041, -0.00056192173400471156011, 0.0046321597563236949213, 0.010342522776957130404, 0.015535668206057007268, 0.02835261129333077959, 0.042384537828482615751, 0.048529210478764905901, 0.049409287418838987449, 0.033861063585272077603}, + { /* b */ 0, 0.11751352912328649758, 0.066881041690391995758, 0.011611767165436992499, 0.03294226308819814264, 0.025103883935645443515, 0.029312215250876239026, 0.067710098670265006504, 0.042243824341647862042, 0.0026960360979821906824, -0.047575363222307487376, -0.093041097951607198979, 0.00046041687407072373617, 0.17926292561601386844, 0.21698522719396096115, 0.15024545135314260058, 0.11181873055793323246, 0.058785092002106020814, -0.015643363836109758225, -0.056250849052585927268, -0.088323964511638486385, -0.1180599631592227361, -0.098079574614301501256, -0.054691967391884421801, -0.0042877756914472264782, 0.02967474956150351062, 0.0041033038782056774352, -0.052367108693135433484, -0.096005862271902886462, -0.097642108675688454866, -0.049513994578587183781}, + }, { /* right */ + { /* a */ 0.018150091886578817446, -0.023845130864017311662, 0.02775998848373803507, -0.033769769876715663437, 0.40491345429583497362, 0.30159629298977624901, -0.91025359983279008347, -0.081343437060522535975, 0.6034854052168470151, -0.016960078838921387179, -0.10269926345311472526, 0.76352954683775542399, 0.40219093258717791839, -0.67920968317533791936, -0.056851256921459925042, 0.50905276924295583818, -0.026665421050103131628, -0.34920467562186752186, 0.0904739783458112512, -0.036397887595374447955, -0.23393069424555568148, -0.091199150924403324381, -0.08447542487670205158, -0.2564507423497264238, -0.25721831617591872643, -0.002125597952633978549, -0.023743067912420159904, -0.14477973281574843534, 0.022873577043523718455, 0.10671418109207270186, 0.019985873195510830969}, + { /* b */ 0, 0.022491626840903319873, 0.14018081549356001259, 0.036298385305407951384, -0.12830863123070554432, 0.1263510274922885479, 7.3727942596565898548e-05, -0.040013158347134217263, -0.040805047872806074483, 0.10760179031267538829, 0.050746002994671302044, 0.056791978592174836848, 0.19465630967095987058, 0.090536167472289943992, 0.012593323203309580993, 0.023442724816696527967, 0.052788767871281977451, -0.02033437245395515458, -0.013196282948289839165, -0.03588112911393463722, 0.045571940713064196249, -0.036429356549544406052, 0.012429019951958051801, 0.015175738110519865209, -0.005163890233013043729, 0.0095466567671172869458, -0.024098419125345715841, -0.0027907433619838569946, -0.029257612807875116312, -0.017229223565869491996, -0.027034952156425318126}, + }, + }, + { /* 95 deg */ + { /* left */ + { /* a */ 4.3144119567767368149e-05, 0.0021302951028895344976, -0.00072025735438352445072, -0.00013430419547322269835, 0.0021619131040928616164, 0.0029562742718397547539, 0.00096759804273094471988, -0.00066731916388562597525, 0.0019554424952883397992, 0.0010573150741738377226, -0.0057630517610873779541, -0.0042654429244920457828, 0.0015852209983568954499, -0.00080285248435507682897, -0.0069895806820152728278, -0.0091754745607658394491, -0.0046974684961287316298, -0.0031730985117911503224, -0.0059280793673899268015, -0.0064032724680918038165, -0.006423050928003326554, -0.0070405610571450116808, -0.0077339430447354029496, -0.0014087955666625129325, 0.011971743844804705326, 0.013240980043030536883, 0.0092823699160415884535, 0.015909933135591081133, 0.035265748517532280459, 0.056161277110985952099, 0.062561299477500997845}, + { /* b */ 0, 0.20709919017362909965, 0.0098618492626323384087, -0.022612805280972092525, 0.084165341115993719256, 0.16295141133805535194, 0.13525992009599807631, 0.076210698016637712371, 0.13542574322733536007, 0.12770426112175548017, -0.15277262657230339382, -0.19301078065525612004, 0.030943661178395309719, 0.16248284197585560751, 0.21971897027288356252, 0.07839165727906161063, -0.06874609237615680879, -0.016754077436093028908, 0.029805198816373890125, -0.077448460786694317548, -0.15288485929854100931, -0.15750109847730009438, -0.14646534862002014155, -0.085980202811780648275, -0.012868257388554127374, 0.047737443159209802523, 0.026936777247771326316, -0.030203923302996038558, -0.015646012142198073569, 0.051186183679524654977, 0.1190345000479098303}, + }, { /* right */ + { /* a */ 0.01692233902813708446, -0.022198608990108524563, 0.028099027819879392187, -0.039354076304459403857, 0.34863248838263793949, 0.37030810409398823291, -0.81202423172712479005, -0.10771914287425415901, 0.38881054615390941986, -0.0028186697992533052415, 0.15279498696206239572, 0.64893570506150766164, 0.24152380950455987207, -0.46843371022348617716, 0.040251807388405093369, 0.22185368445738418153, 0.026645189291616723504, -0.039489443724228558141, -0.030196096577209466383, -0.28276446496745261117, -0.10981838965732558522, -0.014211428795898178867, -0.23828445961990032953, -0.20240959014934223337, -0.14479536848323548703, -0.09799054788940303462, -0.05841732980083247373, -0.079964546967404639966, -0.019575448765071085111, 0.084889554289851065771, 0.056574151995427736372}, + { /* b */ 0, 0.044253003048792295682, -0.058688959402343476857, 0.11139315219106762922, 0.017428467999755184459, 0.079856031028604626543, -0.094212947161441934485, 0.047957245507034521048, 0.0050481755695976071596, 0.035439933418202063109, 0.084984660605178799497, 0.13136657987866395825, 0.12922176951737388007, 0.037151492684652648313, 0.060936255183892382159, 0.019033300477288780939, 0.046573677877307567696, 0.011154648339030230619, -0.020788905402422175328, -0.029532534082383869734, 0.017164554652654588629, -0.046263076050861294541, -0.0079167598297791019757, 0.022379966080907434667, -0.0091716797912888906041, 0.022277703175120792262, -0.02238749197036766711, 0.0071438113455552301745, -0.036059010862666412978, -0.0043682279381737978974, -0.028520125641734627581}, + }, + }, + { /* 100 deg */ + { /* left */ + { /* a */ 3.8678007732439994838e-06, 0.00036880559217689068419, -0.00071422931596787375425, 0.0015315462861820172691, 0.0013974373520159177886, 0.0013013753347168579774, 0.0025956690450495995687, 0.0032526644595798348547, 0.0036340130423612171384, 0.0031337673469383755739, -0.0031445933911661283489, -0.006291570253877387664, -0.0031212408654196499569, -0.0059143209433371035644, -0.0094436593248842237713, -0.010033109807058848695, -0.0091828205094068859893, -0.0050242048843518460899, 0.00022635591977182570257, 0.0026831373144825532151, -0.0025832568337907928398, -0.011199233881722947537, -0.0090800117833605975548, 0.0047504101117340491456, 0.0074455714467458466999, 0.005686961780868027283, 0.012409919323344564823, 0.017226539487935621509, 0.028654026888730310674, 0.068762734723379348445, 0.072600415099710602362}, + { /* b */ 0, 0.1413129266600310352, -0.0073914337867658774783, 0.022834191067966358446, 0.050140980169949278533, 0.049027788577155062555, 0.11641762768903329839, 0.16322290968165398262, 0.19894767328013096552, 0.22894987291049995193, -0.027045810778655865469, -0.26571378944677259692, -0.047611977908035285623, 0.11705887087903876775, 0.065492599011507390827, 0.080517969516941123587, 0.064856092412760024679, -0.02627393330616178968, 0.0076090381427584841134, 0.078206132751237888989, -0.053194635189005023967, -0.20185179645061668285, -0.21971235027985758226, -0.16978804320735840783, -0.09891850269103108495, -0.02115339760265511071, 0.025780282346676841598, 0.022902251530926287515, 0.020839531242738962291, 0.074518988234795191516, 0.14546865989319146539}, + }, { /* right */ + { /* a */ 0.011966198050782757278, -0.01496833593309099264, 0.016450527454028689156, -0.025926850401778410438, 0.23555114438391683285, 0.4722188962311174576, -0.75234591910942427706, -0.27801732081729912949, 0.53915520795346294491, 0.058085551110777060291, -0.058566576042035599359, 0.51853021102951979415, 0.48054627214607975594, -0.48585026237959572093, -0.15351342024705222356, 0.31670886696633759883, 0.16315084986006778145, -0.10738911933637247664, -0.11149882163329602469, -0.17039061038015274052, 0.0042422902277487392619, -0.0078028915498091350189, -0.36061792668445225019, -0.15431112049922079965, 0.0056192329624029507817, -0.161735335935920016, -0.16088938293551427461, -0.014354427764549752833, 0.062287468304296059185, 0.024598150199371844604, -0.029702161103367999417}, + { /* b */ 0, 0.11504375649924208913, 0.021651963885253810993, 0.10021424308853918439, -0.10065297428003720792, 0.095000281296097124906, 0.023494773330606733008, -0.016304743455830727344, -0.084119092396599648431, -0.0018681129193348286477, 0.16086967464476359391, 0.1547736184561407935, 0.035506119840447707137, 0.0021680979266731487121, 0.14736967829420749565, 0.032388603988108173592, -0.014040054102954644538, -0.0074069314810135834098, -0.0068700930707776136641, 0.0046630860661743883319, 0.0017586704099742042628, -0.032198686096395617851, 0.0050750934625035867831, 0.02081839662318105133, -0.029219757397332818405, 0.029697584116748429461, -0.03943419296503075655, 0.032075243587325115435, -0.035072374385213510306, 0.0035978369066023275884, -0.031802406372611821683}, + }, + }, + { /* 105 deg */ + { /* left */ + { /* a */ 9.4464175203451297529e-05, -0.00034244421284745647348, 0.0026178336597765267807, 0.002987633016607316172, 0.0018853869852841764754, 0.00045206286006238376174, -0.001268446398333677571, 0.0020279656421512415321, 0.0030288385766130687671, -0.0038811095125906858172, -0.0075575813094502786171, -0.010229789842788883369, -0.011581592352233327503, -0.0073160070666877796697, -0.004986785201444021709, -0.0045074024905555898357, -0.0032919373525036607978, -0.0014195923712934097657, 0.0015888908617284211791, 0.0045270852556261731436, 0.0061991054128851530436, 0.0029025465434623365368, 0.0019189911238531860531, 0.0066606047902095788515, 0.0079475207345747200804, 0.0057883047890894302745, 0.011572011089297510461, 0.018921730568569050668, 0.042937813008875336251, 0.071911292230178447404, 0.025067402116066284101}, + { /* b */ 0, 0.08696686852271984236, 0.01578577589152196925, 0.080596070642993677957, 0.078967631586684960965, 0.027571309059240545203, -0.017849018280266526482, 0.03678492740549765827, 0.26450544155613708863, 0.28130387428208780687, 0.028682499716783937949, -0.083076202529522302775, -0.11054641272073562064, -0.070511572391532273407, 0.072697528049545101503, 0.08803285558675599809, 0.060692369318604555417, 0.091712773311602990844, 0.056769837322862004569, -0.029069460460717788663, -0.053468190293962103432, -0.049532799916429670617, -0.097734676907518247546, -0.1433145927644957629, -0.12552474600482921296, -0.10327250824185285616, -0.097065348691610653376, -0.057873120256762833336, -0.0013652695425581118371, 0.081695758853764233187, 0.15936741351876837491}, + }, { /* right */ + { /* a */ 0.0015668016976515403149, 0.00045427934985357160125, -0.0040624383178386076765, 0.0033630907472987142323, 0.090224127649338028978, 0.55691589500825799952, -0.45046585761131857639, -0.51700272135909752791, 0.40994229687848926513, 0.12186291752863150084, -0.017702323542065183382, 0.3852700380226054544, 0.60735360287334350105, -0.34406050321392755986, -0.25331881626544316966, 0.32373118512070442332, 0.17009464975948093701, -0.11799552026600904076, -0.053982922896562278436, -0.10496289068836175962, -0.17613957317129758096, -0.010978053477058748177, -0.22407543854546807527, -0.22678697091639107852, -0.099112038357802939581, -0.10828770800024090093, -0.096155268437089880251, -0.071548024391486636508, 0.0031216356084383112268, 0.055150743162330623237, 0.0020468437013712518883}, + { /* b */ 0, 0.074935774006172503614, -0.082168941655711369432, 0.13844432786310970074, -0.058480690143646735235, 0.11667134772661268138, 0.041131301620027371779, -0.059720708901109774425, -0.015459233266758992675, 0.014607460522074285775, 0.11341577404696766285, 0.14390743799855879037, 0.10101969001017635508, 0.018064679750528361835, 0.093985627682125455484, 0.023710957272608974844, 0.020682315887456118736, -0.0082715441267720846152, -0.023816672842006357536, 0.016464978742749061813, -0.010626858727223569001, -0.029205347423567375176, -0.025576540012752640996, 0.023889155526357452874, -0.028413243782442719476, 0.035434099354063164355, -0.041507684576278999766, 0.044291022458608879375, -0.043082373704919282864, 0.015778813708729882981, -0.0355929261714078779}, + }, + }, + { /* 110 deg */ + { /* left */ + { /* a */ -1.309667384352426468e-05, -0.00061238318339873476503, -0.0016670731304430086439, -0.0014611074396903012129, -0.0013514815526416419471, -0.0014923048672482728313, -0.0047851932726689083708, -0.0084144403305480564015, -0.0081578614171545771327, -0.0071634186354224693716, -0.0048760878632037041314, -0.0019702122355108563079, -0.00039475779929631568677, 0.0013245241139991958176, 0.0013479559485968274635, 0.0020580642721979014453, 0.0056999761501724810486, 0.0090073449320743348423, 0.010529556221730573817, 0.01158655953362175417, 0.01127516438069464666, 0.0077818288692077519642, 0.0073530654720599386565, 0.011622573802480551386, 0.014405918050339194814, 0.016984436818426318361, 0.021012748511878287516, 0.030158607004018844755, 0.061966094625845451194, 0.027403379903104263526, -0.023880726698483067949}, + { /* b */ 0, 0.053318079201170043291, 0.011064278072347999426, 0.054140974536862063182, 0.031002934313129060229, -0.053491157458798725688, -0.13046741982040976904, -0.029661942213682346292, 0.22939319402809354997, 0.24193695175984963885, 0.15020956842450028379, 0.131262422400565959, 0.066188955555809836362, 0.05079161501511664234, -0.01867327535411134054, -0.069402381644226296409, 0.022429179740643401253, 0.024520253971427319328, 0.0085418548669696815756, 0.059209236950297228219, 0.022315975949510624687, -0.061762492375855293503, -0.047355749546590386601, -0.0008467798533889903112, -0.0042025996453004532682, -0.014104953056232050201, -0.024569466304663611922, -0.052179779108096902007, -0.088391765753551010398, -0.11757297369387187391, -0.11682440156687845523}, + }, { /* right */ + { /* a */ -0.0097350431312497598402, 0.015482519303677139133, -0.0236709560834293814, 0.032716952161958127998, -0.021186002237671280879, 0.49063496764359487701, -0.053611641899699476188, -0.69339229561045856443, 0.2531354733319123862, 0.19514698973700089768, -0.0034329576007472231702, 0.19370032104909776227, 0.61944910438216083115, -0.023758962855663715019, -0.39063671190927723442, 0.24685431267866464466, 0.24316308284436491394, -0.071477629128430184013, -0.12323689128967714457, -0.025006304592077414906, -0.18000479907094349419, -0.085949375769707014872, -0.15130158860041317825, -0.24225203164662723054, -0.13477995139787868339, -0.10915578320838900672, -0.052342989122419747439, -0.088876098193230390621, -0.030830002652761610837, 0.073681981632048226816, 0.00916070516668136825}, + { /* b */ 0, 0.093839709295710768688, -0.13940626207778822332, 0.14604782141311858923, -0.030637347776664262955, 0.089197237289730460508, 0.12447339357294055773, -0.08808459118423306311, -0.0030632245232508556465, 0.023143885267244691112, 0.088977747081065997059, 0.15688125838616676089, 0.10509645690274375951, 0.031561154657990669881, 0.056260543647721261706, 0.028330076578537782828, 0.017823918696284149488, -0.015781512822110599359, -0.029762747061987809838, 0.031778403531169951979, -0.012599544304873165623, -0.027143550201066436733, -0.033725115150895837446, 0.007539852218147596874, -0.022102951250232635849, 0.025737829876023434611, -0.039906391082608280718, 0.051619486429567776331, -0.03681355675302314806, 0.021735208940261083188, -0.032249935928698944543}, + }, + }, + { /* 115 deg */ + { /* left */ + { /* a */ 0.00013942449105569176761, -0.00029118390563326237291, 0.00022469527204138639576, 0.00037784487202235927938, 6.8148422981140210908e-05, -0.00055012036023760306491, -0.00017107817051886797799, 0.00086004933896877133748, 0.0017649907087941008044, 0.0024257156893206510695, 0.0017981001016950659555, -0.000523941382189748589, -0.0035758145046360621799, -0.0045305571148845889817, -0.0047015341152548094372, -0.0071128570323930641328, -0.0084398977100511064775, -0.0080221088034210207007, -0.0097193916145238423709, -0.0095620836841614487156, -0.0047173685237961171524, 0.0029446533543128765482, 0.011042163645669234029, 0.018131401262645729933, 0.019064528837507699333, 0.022336489023215555516, 0.030683382765510358592, 0.072432990680347530965, 0.05566116299669798817, -0.022451281695354263768, -0.0016246083237719845249}, + { /* b */ 0, 0.10160865983710465343, -0.0084893985911882463569, 0.098656925751963719939, 0.11538695058401632343, 0.0029827292803707994295, -0.1115621224458476779, 0.00024371850308735343305, 0.29946499607094723139, 0.25129923915422069935, 0.085404819556295086258, 0.10125239327595653149, 0.13313095025790228076, 0.12516283172010755909, 0.033605136931132151279, -0.072097613554103490152, -0.14633661861489233313, -0.17418014311789548065, -0.098961418529240618991, -0.061263955812435044734, -0.085098411928968831219, -0.04496168292497659813, -0.032656829860241987085, -0.088768874276570763904, -0.039613918116597479635, 0.037358619477956267474, 0.026565492379435062809, 0.040526936886213504874, 0.053534521469930651527, 0.014505389111275910838, -0.024861739940824911788}, + }, { /* right */ + { /* a */ -0.011093287405129442433, 0.014294408261423564854, -0.018378514697486338092, 0.022532777726584116151, -0.030699638831704033348, 0.25907586376942981499, 0.35366673996007236269, -0.66341804511645396936, -0.10190680423687648037, 0.39806769439849831738, -0.074577292316266766137, 0.058450823929609249663, 0.57243656900714623426, 0.22754131074863476192, -0.43903162085690844441, 0.16412776225961495102, 0.3403615484415121184, -0.049543018421195975098, -0.14402901381840427231, -0.038975851083568324729, -0.13613905270452761331, -0.12963800935446376239, -0.086825198761480759657, -0.24036202841746270864, -0.17799756582542053396, -0.14065958789134627716, -0.10391730580476109258, 0.0086228976871197474119, -0.016981458250357045481, 0.0026454871184357700575, 0.045309008599547596907}, + { /* b */ 0, 0.068192103314683172322, -0.061669001785108826241, 0.01395546386205766265, 0.068994778020183222811, 0.092885954115612900939, 0.087322007906250234677, -0.05372210536269423492, 0.029172058847717546176, 0.044405376757425570056, 0.057849167924908816152, 0.14699406690442545775, 0.089944467205095551821, 0.075583888107812677304, 0.052866776009121915769, 0.0029402623440057946806, -0.0042458379854006314535, -0.023984315872921900537, -0.035880772482231246268, 0.019422392492089886329, 0.030931664043963580379, -0.013971230482688265506, -0.054088307483422283506, 0.015147931433324643424, -0.060471716411530249125, 0.02539520388936124598, -0.036192334006072787722, 0.038136007919063227845, -0.0023172886767179011469, 0.013993189017700267962, -0.016096950709648318034}, + }, + }, + { /* 120 deg */ + { /* left */ + { /* a */ -7.2262671827473773205e-06, 0.00021137481615723910833, 0.00047060124644393683431, 7.9837206741482360725e-05, -0.0015860829008507160154, -0.003324635078419402312, -0.0020038651385792527471, 0.0010743732347523477638, 0.0035367302569574987636, 0.0037129599008908767063, 0.0033303416441948785476, 0.0034552064656981351654, 0.0031470039602021766638, 0.0032199891907003226448, 0.0011094837919917166502, -0.0045865829201990893083, -0.010334055626989857579, -0.013081917360317774079, -0.011671678229047133257, -0.0095789163916809583199, -0.0042091261113694211637, -0.00031535904488483312846, 0.0016833268137381174334, 0.004271428691686451895, 0.015849235636376801661, 0.023900184131717128189, 0.064088261183432859713, 0.073371531546864710016, -0.020243074718567788395, -0.01291555641776132024, 0.027781266974009899418}, + { /* b */ 0, 0.1153786319833122187, 0.033470230237989118116, 0.065880011802729732118, 0.14410401144287349195, 0.073978442038033498385, -0.073173764431264110009, 0.10942576385807034622, 0.36433920385721407786, 0.1935859346975654649, 0.043272615446177102594, 0.036373710836958006443, -0.040599685044405420253, 0.01509110368821953152, 0.040262603654243889206, -0.073363608563761784076, -0.10625240212336350965, -0.13942337976260987809, -0.18241885025176846069, -0.11843255686854597952, -0.069344142937972919061, -0.044163662314966600775, 0.019034985302424090037, 0.059005661138498977092, 0.066810227270786004539, 0.050514892022991697562, 0.069291521255163135429, 0.072269225925743196814, -0.020010108109196067527, -0.050848664101162122098, -0.054208314001352730926}, + }, { /* right */ + { /* a */ 0.00042043829732560378254, -0.0026942172581595124833, 0.0059841555066471631419, -0.01070625760087127315, 0.013960005139680710731, 0.033288064213549649339, 0.46415670738615477653, -0.23584123219842412222, -0.49742803604778829119, 0.32618315423010030285, 0.10695757597020510987, -0.024407046527426604077, 0.25862288808148653496, 0.43593051408603211705, -0.097845318288349691915, -0.12989829461206447991, 0.24916628389953562883, 0.20835511501327691475, -0.084299476675381068702, -0.21365480676733850096, -0.052461013067177722502, -0.047057771811738306755, -0.16149470478124788864, -0.21587916625733602483, -0.15596401194622733222, -0.13849896023468763473, -0.14956880244593814822, -0.039030618517181710214, -0.021206352760830340931, -0.0088528002070362155074, 0.048871936650565078741}, + { /* b */ 0, 0.085351109527296825652, -0.11590278249875042571, 0.053546767390562494127, 0.074919546368423864391, -0.0035077009333294197069, 0.16797329487910725443, 0.022317478922057387009, -0.11473244788613998213, 0.11005313665454834193, 0.06016798586990554365, 0.13623473513239403587, 0.091448580907950410834, 0.072340642627592710578, 0.047742713236860995218, 0.020330236324720904473, 0.00068758880059690413722, -0.037753658176874725638, -0.018234949665778960037, 0.00050008863222792548919, 0.043357848545674641805, -0.021018098479127021727, -0.043587923975502325391, -0.0027822357407097236814, -0.046056280136991777086, 0.0099491877322529023719, -0.02693354394970193938, 0.025567960137179608637, 0.013183576335847914385, 0.015280040867320272835, -0.01665173962277395614}, + }, + }, + { /* 125 deg */ + { /* left */ + { /* a */ -5.7581132945960734806e-05, 0.00064948927000485490169, -0.00030281755231814709399, -0.0016139543534271494352, -0.0028540076139893510998, -0.00069932054189147940804, 0.00040557645956951215993, 0.002287262538813731455, 0.0052463534689142811429, 0.0032526905361166011214, 0.0023591679716716863757, 0.0036377204579163299573, 0.00069868315931420968412, -0.0028582077860397868407, -0.0034227549605345165828, -0.0052880765379764750611, -0.0091447628576893404129, -0.0091561620299898671682, -0.0099534071835646886761, -0.0072195747947978450298, 0.0004740145097964497704, 0.0054870306801999002566, 0.0052488173069020760408, 0.012925204477994001184, 0.018778806908058276459, 0.053969855680208178583, 0.093038142662399403449, -0.0068153728441378014224, -0.034268778804982802377, 0.026583882200004183005, -0.0024075520452249143943}, + { /* b */ 0, 0.099092019363866690185, 0.0087517440291312587064, 0.096491267048796902639, 0.16342077613768629663, 0.041201858055478490783, -0.1175707893002683746, 0.15420751412906219535, 0.43588039982098147895, 0.18642586019690376986, 0.056413400277011138684, 0.031866802650444558953, -0.077302578875594607499, 0.029927363015720687134, 0.0017402496533050482164, -0.13997630338099392722, -0.113035329772255555, -0.13352392733995827045, -0.10298695693605752766, -0.04326825474416928774, -0.11393581492328413995, -0.06559839813850137924, 0.038815055255700385561, 0.030781327476601946097, 0.056987065056787744588, 0.098012456777943346431, 0.068958606987759574203, 0.011201442200667321991, 0.0026327055667116350257, -0.013589254772850001274, -0.095569145918267262019}, + }, { /* right */ + { /* a */ 0.0075183561421753863918, -0.010436048359461352897, 0.012740024716386723347, -0.016114742188342266738, 0.020025116608144918895, -0.027263264945716000898, 0.24753853818150456378, 0.27118531986500399311, -0.58866565184274277645, -0.071171008282390368915, 0.44792919886633941751, -0.068263227306014959139, -0.09652718239072137496, 0.52032593224742407223, 0.1901601808898969459, -0.3318782249512020055, 0.23531611286604497968, 0.350087143838723025, -0.096030647934270838006, -0.1960682593386528505, -0.01274418685537088633, -0.099505400015498790545, -0.12575831107495658023, -0.12198877743594112311, -0.21599050364756824938, -0.17300979780852390744, -0.084674809326234362628, -0.093016237510280097567, -0.081152149354491581734, 0.020578498556179242174, 0.059782309145633115433}, + { /* b */ 0, 0.079288650579058719825, 0.039894740617003009164, -0.052060688524599788018, -0.0054613514197847726206, 0.11873078078229983012, 0.062957485088546372154, 0.048153345581620175808, -0.041180981923197274019, 0.076072955387394947113, 0.054709085033151534649, 0.15295131928289695811, 0.10385187848640624331, 0.0068785110194377954707, 0.063340427332151699735, 0.041550837520348653242, -0.02648256370923682268, -0.042126265048679154002, -0.010657528361768279709, -0.0061631088717119877907, 0.039875390696639083365, 0.0095109303333137593106, -0.050126654616640571593, -0.0049517103930521097488, -0.042935357546479424595, -0.024702225965536787206, -0.0089685459519865708133, 0.015917359637452496018, 0.014042791065134972717, 0.035103098473886019948, -0.015108788392181160543}, + }, + }, + { /* 130 deg */ + { /* left */ + { /* a */ 1.1812758242913043642e-05, -5.5901626799801859558e-05, -0.00051669836013956975569, -0.0012710223678408238968, -0.00071126548338573680752, 0.00059890656135819231309, 0.0015958964632439842646, 0.0024059881895133194973, 0.0025038508332658748756, 0.0018244612608186998488, 0.0013785031645341394579, 0.0008901754070672653063, -0.00044113225364239214144, -0.0016912166763555190607, -0.0035638006112836927153, -0.0082546755705153983251, -0.0099357213378253837754, -0.010172744588574086227, -0.0066835498931799852684, 0.0024028444645801672053, 0.0052078603414440483022, 0.0042555749380640550683, 0.013549694026088188181, 0.021317888175206856083, 0.046844200248669087827, 0.10684921842064876163, 0.011220217490531814164, -0.054044667341171526154, 0.029068939411819316732, 0.0053611345657289533051, -0.01814694018408002929}, + { /* b */ 0, 0.12251311485703131332, -0.0048966409354339601734, 0.043225474417180054232, 0.13288643283357326474, 0.0024753584727116306752, -0.13493550284474076228, 0.25001905995872264477, 0.46116198007706277195, 0.16767002957919496797, 0.12022113801239686648, 0.035092266079117528932, -0.082874925052406345216, 0.09299057500647411878, -0.010335927920560039617, -0.22303158437285419691, -0.17736799351152077175, -0.15576870378924967397, -0.09553559118941068462, -0.010527352803241241119, -0.039461536134599572989, -0.04397576750678200419, 0.0022546490695968257612, 0.045224075152991427551, 0.070264909304215694696, 0.061617087093734923542, 0.035144339289305825957, 0.023098222545966939911, -0.016722037124855537726, -0.041553072690561632108, -0.040322919942353818712}, + }, { /* right */ + { /* a */ -0.0003954638475309746326, 0.0016802147026744734815, -0.0041307781481307566732, 0.0069268081880503179493, -0.011149805097107265417, 0.014711395451955620872, 0.012661300819154924779, 0.376705963309491354, -0.091160582263321632279, -0.49515815498233545222, 0.23973469451584847323, 0.25725972791418044716, -0.1364809441059457451, 0.097772769740633494462, 0.46604942100162649599, -0.076037106709709686991, -0.041141158584846390656, 0.35232917095899790594, 0.13782727738610198176, -0.13520175195935402179, -0.150874719704523097, -0.083235944983574144951, -0.078215007079862383654, -0.064032710649359989019, -0.22784168154062375833, -0.1887778082459686535, -0.054015447047816439463, -0.098555610973257296026, -0.12211294722235141452, -0.043146183514660048364, 0.0049622785846126921117}, + { /* b */ 0, 0.068255698670396408589, -0.019626044183932569304, 0.027022734233770818318, -0.029199728361064755666, 0.053847894874170493251, 0.074286951068278456178, 0.093327301540100923716, 0.0046883292136945808881, -0.014905365299500671072, 0.077121161747451066892, 0.098097439175047873583, 0.078872250090676374046, 0.022649650580929860111, 0.10118989200943753759, 0.032708378546854668945, 0.018610044422722078761, 0.013278570298379081815, -0.018196151545185959564, -0.028528768151272497489, 0.0049331955231501209078, -0.015694823528042758931, -0.045042267051635491437, 0.022953317535046903475, -0.049253424540020296352, 0.01848907971264186767, -0.013561713523798677589, 0.017034870128463178163, -5.9926623485577479311e-05, 0.01361690711632057571, -0.014890291483199591394}, + }, + }, + { /* 135 deg */ + { /* left */ + { /* a */ 0.00010640586492385905107, -0.0020863220798889004458, -0.0027546738669975696749, -0.00057689734912769186082, 0.00066419501364156662872, 0.0020730048205103157599, 0.0042753920946603241049, 0.0024273015306053302709, 0.0041430994752317245461, 0.0090535447899720046527, 0.006478835994985780028, 0.0019980716855355629136, 3.7437150879338076948e-05, -0.0060434387033625469599, -0.010258699474491317361, -0.010462940875158310838, -0.017758528357350589211, -0.019186225865344685992, -0.0056492490439069530106, -0.0015221615476401738343, 0.00065944081514835188249, 0.01116663625060076992, 0.019168392713514448289, 0.041054080523461600194, 0.12181615837242310008, 0.041202139539203708196, -0.067452937283843383831, 0.024205569470678308525, 0.018561269636285793183, -0.014617104953928983235, 0.012766910383738006018}, + { /* b */ 0, 0.15611339107442223639, 0.016778431063749214142, 0.081041717545221603203, 0.16997935467485958405, -0.064237394333324648876, -0.1467946458799662679, 0.31367196839646172002, 0.41053110185970687063, 0.092442334293230121745, 0.054708062922834144182, -0.05471108079559138665, -0.10471127127917312372, 0.12256479566694067351, -0.041264754456551977491, -0.26877304811281921282, -0.15682178410143798875, -0.12960269481887554122, -0.074410637441665872238, 0.040540669179120469856, -0.011041781803264316686, -0.0015913537167872027212, 0.11404907080604653746, 0.089380662718768766339, 0.040644184712002040527, 0.057264541138690727706, 0.03605762351477359573, 0.002108751488011373354, -0.036946082845115690851, -0.027051392492011272495, -0.14859598965757947475}, + }, { /* right */ + { /* a */ -0.0039158275946397091971, 0.0045651814713915106481, -0.0053509730125501937109, 0.0060881631249679723367, -0.0069729162432800844557, 0.0074547800273452868858, -0.010667169556234295386, 0.12038098870040858657, 0.32619730270482744094, -0.33417848277127332191, -0.25402146762454541618, 0.31913744062667975809, 0.096220172381067059497, -0.12010643039258775411, 0.23997327133401527566, 0.32270779230925061842, -0.14215569908666408905, 0.164853962412100985, 0.32719285053214147707, -0.029655260724431586894, -0.17571807629752189683, -0.095723928936843727389, -0.090418165187601373667, -0.10250068810447621193, -0.07679258050520215706, -0.21946952455217211275, -0.15779039960212257188, -0.0097222428803184907098, -0.085743480977948399735, -0.10062298804902622407, -0.039130299227052925404}, + { /* b */ 0, 0.060566366555303216557, -0.033585461857244328088, 0.097375755251810053315, -0.0057979207029488586539, -0.013037187911631165083, 0.099547705230398603193, 0.065450202271855356662, 0.079607690447289047864, -0.016594043229971669473, 0.0039141099964726949745, 0.11239923309603364054, 0.060828670912557031292, 0.037661575031187194407, 0.067372873971643737478, 0.06127743996696152079, 0.00425967189704272442, 0.049933361264478656749, -0.011891207176021113476, -0.043937700071649057887, -0.01454360809969700713, -0.036771014605774601791, -0.031196266083756418741, 0.03340208106078057515, -0.037511987641784816372, 0.021432249770140368583, 0.00047072404577540305493, -0.0042222493704937736486, 0.0066621020424406339477, -0.0071434454623851111055, -0.0015815756864876948096}, + }, + }, + { /* 140 deg */ + { /* left */ + { /* a */ -2.8322500534026556936e-06, -0.00053066106186355809296, 0.00082483518027906630593, -0.00042863322878908282666, -1.1879332136033315948e-05, -0.00066783173309145670363, 7.7773664591825947327e-06, 0.00214109388265923406, 0.00019600041728518038876, -0.00012057335090423157431, -0.00083007319325381981323, -0.0016636900295081960208, 0.0032933505128562882633, 0.0011374034858575837043, -0.0017964573410626802699, -1.5318938721698739658e-05, -0.0039285770478056369903, 0.0026668064562369859886, 0.0064403246606559161336, -0.0039511678598391775097, -0.0042266883104082053624, 0.0068954789365915933677, -0.0011256836162168446305, 0.085086384090781591594, 0.0044761479967535267033, -0.13405338016282686286, 0.049965532002184398497, 0.048763835001040811701, -0.050795157665751294873, 0.066932538639891819843, 0.12590629103302261593}, + { /* b */ 0, 0.58045527243727446098, 0.11532640933909973913, -0.070294737643389337833, 0.181548564083585523, -0.018736087559288044924, -0.40284097321803180591, 0.14967265663310205803, 0.13808262017332012528, -0.14681980457335874757, 0.095308802128581115998, -0.090946576570358900193, -0.070282983278130428673, 0.16869505144689184162, -0.0056995287795943982978, -0.11145719903146375507, 0.010645899981859968664, -0.029949005576172804677, 0.020448635869082382177, 0.062096271982760298247, -0.061559281084502120995, -0.010155868739088885766, 0.022991411353021073971, 0.032517242832784398754, 0.053763405399084168712, -0.044022531706967849008, -0.056791172460615713113, -0.010048509774783498383, -0.011135553684340354641, 0.012392231463938252478, -0.028022778311032753296}, + }, { /* right */ + { /* a */ 0.0018361282853110241775, -0.0033872857336473410905, 0.0046059858721698987427, -0.0065776919334296218844, 0.0083542195671026941994, -0.011143260589185560033, 0.014031371980195189719, -0.015337968677412404384, 0.21316430420635706922, 0.18207602262459615661, -0.41531887067146328052, -0.031187790338876170138, 0.29269849220073268503, -0.054235962098389371711, -0.042109054573871707028, 0.3423878607439811983, 0.16665370514435465243, -0.12828009228750011927, 0.26039154286775512137, 0.25358554767330221402, -0.13060052607320907225, -0.16234915440849845281, -0.060712808823515200529, -0.11670474881265904821, -0.13121958987003162767, -0.11982151889132144906, -0.18541725949783305349, -0.10845374594194448492, -0.032077652783813255521, -0.071363329167328279357, -0.023880378233289735468}, + { /* b */ 0, 0.063936342454143688108, -0.009966133409831066936, 0.11085760377685827116, 0.044677819807104057759, -0.034361268819236949479, 0.062743239678210147026, 0.062943407025382550057, 0.083058071853022163999, 0.13134064665964562124, -0.009268611908543576694, 0.065924378272914974097, 0.031868980523838338903, 4.2139580657379909672e-05, 0.069306867166024632709, 0.015998377618240203213, 0.023748490644913237968, 0.040251817749930099422, 0.012188030292016073519, -0.042057852935031489472, -0.0057086301428208377495, -0.043725723377226709265, -0.041252225482777717114, 0.02142720307404984148, -0.048367296921177430069, 0.032738401870443196995, 0.011597842342267461468, -0.0043165727307750041686, 0.014759019374048845674, -0.012598826880840656092, 0.0059455537992827295346}, + }, + }, + { /* 145 deg */ + { /* left */ + { /* a */ 2.3996799380029271154e-05, -3.6983924603382553609e-05, -0.00010885427087492863252, 9.4027203384472457515e-06, 2.4325316760817870956e-06, 0.00013631801319691230442, 0.0003569147487281192771, -0.00021825674274833503706, 0.00049352887651621379916, -0.00034778795489354185147, 0.00010764262883821917806, -0.00013369431908771822748, 0.0001612257009148132796, -0.00082230832962326520785, 0.00098596277656181480209, -0.00076071996507610234461, 0.00048347716170849507067, 0.00024596005544775048635, 0.001122381176055228108, -0.0020218050363063327229, 0.0057335193050928046077, 0.00098351229257942485162, 0.07911624124667948621, 0.046474585830846848467, -0.10163739703000773673, -0.0031500376619642000975, 0.02685673447709591502, -0.0098010597263803456158, 0.019079556105860977222, 0.13571862275116308716, 0.16518685852055792207}, + { /* b */ 0, 0.29209289431744722698, -0.088683859083907301546, 0.19870288442330741319, 0.056117942729694281212, 0.0055233992313913349292, -0.034417842552231237008, -0.18642029961095374357, 0.03188050946213716319, -0.12215473870355597619, 0.058564694857057841837, 0.027133066872742084286, -0.098321742115492494207, 0.10165847932147586974, -0.036326745038034458091, -0.081706909303494446029, 0.05666085919578400798, -0.065230034060614894287, -0.023126302295464751246, 0.034088858653635867313, -0.054637137087559795035, -0.0062919689342716411673, 0.00337558118006231608, 0.0067879138795912119519, 0.032772559692278990795, 0.064759985108769901885, -0.015975298047754549202, -0.027683987494919737316, -0.037109281432953777902, -0.033246283187224334732, -0.0065407641535591941329}, + }, { /* right */ + { /* a */ -5.9295322625916386996e-05, 0.00025361030688269420308, -0.0014975462105494886413, 0.0023321644056564800468, -0.0040143723665109903864, 0.0056496033224969280373, -0.0083177157733822781882, 0.010418731344547307871, 0.0037317150503252466062, 0.25774726845881812398, 0.03548555282497853347, -0.37577294565440211294, 0.13177411199254401852, 0.18278456868343551101, -0.13825278210365615772, 0.072251944089277819749, 0.37727001604717619321, 0.061230184483984304022, -0.046667811543061286927, 0.29825638920078673122, 0.11633725609713846394, -0.14742657162931566139, -0.078501906429860102143, -0.054583903007854664424, -0.14088563291174288628, -0.12188196573843396164, -0.16632804680378696083, -0.16103868772087179262, -0.062667853368376519319, -0.090920878374582722592, -0.067120396724383718512}, + { /* b */ 0, 0.058538717682757313021, -0.0067235800765147457625, 0.10061999071942813455, 0.032009963128213844707, -0.0085750658654045221196, 0.0016715560854918543043, 0.051641640912733315083, 0.08213774559567066369, 0.14615828567515251613, 0.069892761402653755254, 0.03775384784469610483, 0.035962486104601509851, -0.0038619656431799556651, 0.07389376333252321849, -0.016166609451647752371, 0.048384225398525639028, 0.041847242283617011593, -0.0053303041007467626133, -0.03351417438249727071, -0.025366513586497739519, -0.0029940071307734909128, -0.035054287279749976602, 0.020758025097121490798, -0.060317252944543611748, 0.034924170228588589937, -0.010758538361728933047, 0.019019207899853916854, -0.0063627382651402011882, 0.0041195717837743143705, -0.0023809626018564782057}, + }, + }, + { /* 150 deg */ + { /* left */ + { /* a */ -5.7808969703442882049e-06, 7.859375997232387963e-05, -0.00020195202801720404245, 0.00031595442082088791985, -0.00038697247538299443803, 0.00034207817356524117258, -0.00014974415749047315853, -0.00011228781855721113939, 0.0001483494695142529012, -7.6482351424324215156e-05, -0.00039344251322182000052, 0.00074616616850542438755, -0.00077416060895174783341, 0.00073700183421399230455, -0.00013666060560968244786, 0.00021771677245763058905, -0.00032895946806832474657, 0.0019676944930380199997, -0.002446887221799197952, 0.004275371799714045018, 0.0014554996183996360415, 0.077215344536710195378, 0.093552337016925002366, -0.077496570637172745855, -0.054258581771438052499, 0.015401699340680807815, 0.0022501846647787751218, 0.019689311409679107617, 0.14642282391945371511, 0.23487005904862523487, 0.086820381211688557599}, + { /* b */ 0, -0.033799469500717105319, -0.096279236524443589929, 0.22091500173217204495, 0.12148875439946250909, -0.0076572573475680583144, -0.030131378491796145802, -0.14024308381335726104, -0.11888930525678909067, -0.099487028630620977232, 0.022130821356672325528, -0.0073011246190524126121, -0.024081928838987076702, 0.039823506357977711545, -0.040895948917110680476, -0.04829093947618379179, 0.022019905220257984801, -0.074358003629357294351, -0.0014864981615070327337, -0.015010722241373675168, -0.078612975309214072617, 0.019454143961178393951, -0.038257495985904999003, -0.017326638979547892561, 0.036913624998496930019, 0.03219274391251525369, 0.0068989239107586364241, 0.046842982808978361753, -0.060166361891406117124, 0.0039340002654791907111, -0.04171936477739834892}, + }, { /* right */ + { /* a */ -0.00074478344217444522601, 0.0007511785498183834453, -0.00095975582467544540664, 0.0003837616212743652196, 2.7485100289465424443e-05, -0.0013624965539919126067, 0.0023531580862221406977, -0.0042316079678110102291, 0.004840207769030158147, 0.031003830564175528794, 0.25958893247698433537, -0.084294597014668987134, -0.26906499788472909573, 0.1985279390908638586, 0.031028247903159594107, -0.11486513800822001352, 0.15741827212653530799, 0.34498012878014588933, 0.025665866484748771359, 0.018993532817268739266, 0.24502951514964954605, 0.0052309987987704175891, -0.12440272003277369484, -0.038543594725226788811, -0.06620071414478256866, -0.13099098239792078546, -0.13456166221842535968, -0.19553646171913985352, -0.097051768685255085378, -0.057685786296096837333, -0.10554790331524466218}, + { /* b */ 0, 0.10296905720001520157, -0.031916632292636540336, 0.1371772093303840756, 0.025581835101807365307, 0.0037329793989293587157, 0.017041252381062854671, 0.0096940844390236771688, 0.083133380807689172265, 0.15137376358411169797, 0.08291163369970458441, 0.04345817582482400937, 0.032173172324003081191, 0.018586719340587219695, 0.028174870867589581203, -0.060814479048063550815, 0.047343284532777578366, 0.090803696340692977018, -0.024400418685635583138, 0.01192035672426071044, -0.076481246590415954967, -0.0051987080044437958271, -0.030485298389941462016, 0.01697330043399884747, -0.014962470605548762459, 0.029782567270843045282, -0.02811451573473626106, 0.015568336049018999256, -0.019634447613083035045, 0.018551872579303414768, -0.0031451728171741702433}, + }, + }, + { /* 155 deg */ + { /* left */ + { /* a */ -7.846684997090895401e-06, -1.1967299512471996081e-05, 1.7571946397955742758e-05, 2.3839611326683177173e-05, -9.8824770589072309798e-06, 0.00012370376389902930999, -0.0001906069247575863275, 3.6766283073585981356e-05, 9.5089872087506020857e-05, -0.00012925669250207598437, 0.00029605806355082007336, -0.00021290917223693115595, 0.00046180190858835512557, -0.00039533474840980353804, 0.0008719665658268871411, -0.0011835970670920365616, 0.0020615578255611666236, -0.0020408909146701903481, 0.0033778563048036955654, 0.00052249169449347654393, 0.075086891007103417905, 0.10799162756168489974, -0.090613576457787559093, -0.086873763159647787724, 0.027096272833398993285, 0.021638942594090493365, 0.015445631834157258488, 0.1481240784572540603, 0.25527186229550025143, 0.056256086679792871585, -0.054761228196753553021}, + { /* b */ 0, 0.015162328826992532704, 0.051460910327205677817, 0.25159007800437671598, 0.089044318617378936942, -0.071396716489688372143, -0.027379932088927860789, -0.13151821887623371676, -0.12205488260252916888, -0.034882323086196653783, -0.023718234665251469728, 0.031729017745465992739, -0.0024102467378883662974, -0.0018285683795610241376, -0.0028123056431544890543, -0.070871822570248155237, 0.010888903779204817113, -0.02650154579134089694, -0.0091602423032965951677, -0.022468559707222723887, -0.075005627228411086982, 0.011826150009136560115, -0.032163875408469655426, 0.0060877235611572766416, 0.0060017553941277279606, 0.0012837575007196289079, 0.0098048556126939523381, 0.017781482509124372365, -0.027803873140497255972, 0.016507726800299438175, -0.027745125743341980673}, + }, { /* right */ + { /* a */ 0.00075439313840242397391, -0.0009466484373081228941, 0.001117362672074795121, -0.0014999605847621955319, 0.0016130037250750729055, -0.0010427407160298850231, 0.00018687770332505987403, -0.00077652318897052118908, -0.00090588186742266568752, 0.0015874841468015831597, 0.056834941265862526372, 0.24021804398403312497, -0.13156983644280922929, -0.18774733377208435714, 0.15910464303583024548, -0.029387909936760131524, -0.066336326890658964262, 0.17600750420838770505, 0.31933440250999356458, 0.058621487908495764629, 0.053661208389622384873, 0.15542385504150191267, -0.078959879496191764936, -0.074108004601744492668, -0.0063690900763265986817, -0.17126990566013439166, -0.14328044992083904807, -0.099481795226936550747, -0.15814941178761987572, -0.10715729861463489658, -0.05079474350469341537}, + { /* b */ 0, 0.041837716966783983219, 0.043280733016035598248, 0.1618483912770071198, 0.047340245106636258399, 0.0031153111105684458404, 0.05045513278414959224, 0.056800988297829903273, 0.083928671198514714913, 0.091601980773403729463, 0.014031960039830905507, 0.15350077616926702251, 0.012928372237460199548, -0.083614777794745298589, 0.02619391224583256933, -0.035909758683057992068, 0.13051397315322144088, -0.016959957605281961168, 0.014304710495411342153, 0.0039130715491280873564, -0.054039861922456668142, -0.036287732663882986406, -0.078426592983126514058, 0.056537939498906356062, 0.031549020181593882828, 0.039827905272487272581, -0.038563172179047200405, -0.021165137341089962364, -0.025250491764430491037, 0.036724720661475938888, 0.0033189175586024327602}, + }, + }, + { /* 160 deg */ + { /* left */ + { /* a */ -3.7149558527515245954e-05, 4.1919578780416459629e-05, -5.8159129318057683003e-05, 0.00011254862958276544514, -7.3107186415732666393e-05, 6.5512044955529091794e-05, -7.4440959507706197518e-05, 0.00013568662041163210424, -0.00010189252337700028736, 0.00033243663814797042022, -0.000401587946230464116, 0.00067368910020015838544, -0.00083517900248408728434, 0.0011976710675293275946, -0.0013152957472478687961, 0.0021443953957672734489, -0.0018815142202588393087, 0.0037106122421914911058, -0.00017044498791529661633, 0.073961320379498096678, 0.12068648584967478499, -0.085907113320793371258, -0.073179540880097260214, 0.039265139187560915701, -0.00064392313717242903592, 0.0031548102298606384153, 0.16699928175344103121, 0.27331661117895034163, 0.055941628567326984189, -0.00013439361352951534464, 0.063545655250157873084}, + { /* b */ 0, 0.077243387544764785524, -0.062916283022906860367, 0.07204284067405253289, 0.091071494507100059224, -0.063047357928280867156, -0.0051944896203165447091, -0.110764290783549324, -0.10636944939058923243, -0.049625576369546897659, -0.064948907208470241237, 0.013479571139007884284, -0.040799955185258363066, 0.024249363108699850677, -0.013429698593608874191, -0.058369924720511057181, -0.0036411935396690742195, -0.03473734107251047476, -0.0089189182392312993386, -0.028110515997228913143, -0.063925976663548045309, -0.012325351390687910857, -0.035356944142472812587, -0.013074194403078776006, -0.0054812757612626716863, -0.0065053700493838961805, 0.0022551694686678835922, -0.012557569879015349421, -0.014525072829715823808, -0.022243763452348130905, 0.014447532142719543558}, + }, { /* right */ + { /* a */ -0.00044383087323665549543, 0.00075264275358963295126, -0.0011084317211133842829, 0.0015064296893978550932, -0.001913399413399143132, 0.0020827856229543167954, -0.00262639912518378843, 0.0020921307683496870311, -0.0025292965287471158575, 0.0027619283838892921823, -0.0027051536817968725029, 0.074579262764962267473, 0.20716610339513352734, -0.15270625867165765754, -0.11899492661092578305, 0.11041565204819833723, -0.066124249006130147999, -0.028881576291817784297, 0.20122834414620333066, 0.29345582399218328451, 0.046628516668419800473, 0.062649396769284729225, 0.080578444427042511533, -0.096966963434950134704, -0.034589843090214629495, -0.044983954419234792321, -0.19708491210074569056, -0.12473633591782173902, -0.075757846912942697348, -0.13561377678227309884, -0.070620516137197747453}, + { /* b */ 0, 0.076700172241986136479, 0.097031324089486045703, 0.12607736701479729802, 0.054803947831198004947, 0.056108645304260573727, 0.031710589549764807427, 0.071202750919399010465, 0.11568453878672926849, 0.0081356648562588493312, 0.025496606300130612854, 0.13118928657870976284, -0.0039962511106262504912, -0.10255093474432377953, 0.017731740670247349984, 0.05153480708222722001, 0.086564962476945131464, -0.0029973253242322056566, -0.027265078521871571882, -0.028460734340868612535, -0.03770221949125473343, 0.0030526263578587176095, -0.049991694319084956089, 0.038639510098717640141, 0.0075666518905073698598, 0.034827489302385362946, -0.0081345578607739943422, -0.0078819762681881996857, -0.031609262095906760781, 0.012555574735251609497, 0.0037631991324808475308}, + }, + }, + { /* 165 deg */ + { /* left */ + { /* a */ 1.6032358884032509494e-05, -2.0618572127428181555e-05, 7.6373596474832493395e-05, -1.3536907012001353945e-05, 3.4933854420335863443e-06, 1.6362994709193858786e-05, 0.00020972907258109840952, -2.5256253477489408465e-05, 0.00039309818927746298899, -0.00027020741019678816766, 0.0008771638958238181516, -0.00079800995589351941817, 0.0014095308371875328243, -0.00099036352715908696279, 0.0021987588748328948038, -0.0012523736038494441732, 0.0036145935512765792197, 0.00026645679829240243551, 0.073071940605157204018, 0.13836674623374234372, -0.077092070428358416834, -0.09434908569569411263, 0.057399978942024310058, 0.028636249922858736383, -0.021592044304602486804, 0.15781165319680989789, 0.31786629420146872427, 0.064473943994503013499, -0.0062786139784498616601, 0.12491529823840941127, 0.061071277870083928718}, + { /* b */ 0, 0.027214061265740108198, -0.0086497991384770767098, -3.2940689898009319026e-05, -0.075158699224670000305, -0.055577653949451244486, -0.0047999396921016845852, -0.08780777413688878319, -0.080424568475456759131, -0.060754304003485248842, -0.072840781644434304809, -0.018781093659853143052, -0.051867299993568760641, -0.024221852314987302179, 0.024312080425248350224, -0.06347898491576575708, -0.021541957671705747046, -0.025194329854871799768, -0.030851700042189289519, -0.02876187536651752738, -0.051425569297935957991, -0.025301806133859461312, -0.060655013523758238847, 0.0016406946004576816733, -0.035637107960312386368, 0.0017071477050045746893, -0.0080116049747114212454, -0.041229325803970866271, -0.031203173601196398934, -0.010422760565592659177, -0.013613842045900881317}, + }, { /* right */ + { /* a */ 0.00024507018937369750601, -0.00036103168107003104012, 0.00062721293653169446491, -0.00099399394534738227946, 0.0015420607719094162058, -0.0022155908981774663502, 0.0021943216735754306201, -0.0030760841178596731726, 0.0032577844373072109563, -0.0036687244225159718058, 0.0043774992430477971395, -0.0046297866164099477082, 0.084871246778502398844, 0.17731062929576502096, -0.1375195862328166263, -0.085910592216953435285, 0.042853910962566479914, -0.054304062404994177249, 0.0029573622616291647854, 0.17139734238236412067, 0.30171044478694875046, 0.076820024231594938313, 0.0069952166036318236264, 0.053998326361680282215, -0.042834848103449722767, -0.068257583462445384215, -0.12962925817370279935, -0.16877151750987853807, -0.096130845080358684474, -0.11173355687788871782, -0.084937499051003145789}, + { /* b */ 0, 0.10156275271398867988, 0.077185566288041296268, 0.13282149838280954413, 0.08171816697032448229, 0.065019220953049655654, 0.10019105873802339191, 0.072012868194281015599, 0.055492568684905457799, 0.064212004771331043784, 0.010854841299193750126, 0.014918743122863641071, -0.045033301591780941497, -0.031706095040356062353, 0.089564090825565129128, 0.022024871724492765812, 0.070052222587587240077, -0.030671518055237073641, -0.031950765902958457032, -0.0033956392862712764247, -0.055116051972375207368, 0.020522665861114758323, -0.053010372439558396673, 0.039559117300537981199, 0.008336639543545999731, 0.031089458806289597959, 0.0058377015975212484533, -0.0083504315081823349276, -0.015804329272896613934, -0.010019162080842670959, 0.0015402341953458034696}, + }, + }, + { /* 170 deg */ + { /* left */ + { /* a */ 3.1302173760794381822e-06, 9.0499071014882737779e-05, 4.1432883721159718959e-05, 9.3300330586410179859e-05, 3.0958006921876900924e-05, 0.00030591771116306133368, 3.4937743809137188078e-05, 0.0005286897953454814704, -7.7097293896266627655e-05, 0.0010526264265092732941, -0.00059039595483312257672, 0.0016554385683792412036, -0.00081576048305276229605, 0.0024720344257711523994, -0.0010712973259885414171, 0.0038707551676397940026, 0.00035560747645158063447, 0.073630880141617449652, 0.14661407056075492772, -0.078085169269020981986, -0.1085137050343965015, 0.047500582381204692339, 0.017874880158738615243, -0.02261152729082782642, 0.17893430052470793434, 0.34360192665262856426, 0.053606962467575569597, -0.026329075153777581342, 0.11186902796209152733, 0.01673664825244114418, -0.032569655570580113846}, + { /* b */ 0, 0.053914155213885539553, 0.015830023390450698173, 0.020072501148854504649, 0.012655482483289737239, 0.020659117037705176934, -0.036430595746206329011, -0.092725103952862042433, -0.087702484986157402957, -0.071331118872211551896, -0.055194423238813516974, 0.0030397885680127911812, -0.037054498365218790923, -0.00066159090580941715132, 0.03453582545144551208, -0.079728062440387326149, -0.016901163871901880853, -0.031621694144279288707, -0.010376069900994155937, -0.020804253498749036844, -0.062761266384006586527, -0.03055738570310884139, -0.034919971965419183135, 0.0067210583352961261738, -0.018044902997532696887, -0.012390824741873029957, -0.034925941218427729307, 0.0019679796761651324744, -0.046916920430073449921, -0.001926393056322917019, -0.043422184307362332589}, + }, { /* right */ + { /* a */ -0.00012554898192080455157, 0.00017247319621539056113, -0.00052640243619356957838, 0.00078473489119584155516, -0.0010021108972691795957, 0.0013892594930291386757, -0.0019935503377168503278, 0.0019212312861796600715, -0.0028198965807725573374, 0.0034947162689657335077, -0.0040898955417896856734, 0.0051162537699099217003, -0.004885681522894154416, 0.08688474323844917746, 0.15813922660799484277, -0.11585092003650954151, -0.095210034436674195746, 0.0056687868211797304285, -0.027443531844821480309, 0.004389007744525982857, 0.16430947455392352907, 0.31363566378326407369, 0.056519924958118465674, -0.014416914733167852242, 0.059496911787165755736, -0.067927300887186875533, -0.10596882274465810325, -0.14491118769143784828, -0.16207943488078788152, -0.10543191067505575109, -0.061618897190486243698}, + { /* b */ 0, 0.12235116841116192021, 0.085685636739992132593, 0.15071367068084445817, 0.11999752191271674528, 0.096732633326932923601, 0.097546664174340963482, 0.044232293409446080124, 0.1363900499191263993, 0.017644008448738056349, -0.14868778347587457977, 0.045368560833557475265, -0.046122428467992582224, 0.01830430837505836808, 0.13364735242459227504, 0.014238310704218614527, 0.036885293430335579223, -0.087165827746189125658, -0.0012216042663201753804, -0.0089679957372733667964, -0.014654928771533435455, -0.0018582758058304105903, -0.053026415433481702277, 0.032246281499307472007, 0.023017491024904506575, 0.039495641088039872002, -0.0061943089637748680043, 0.0029509240232947725295, -0.047081833601529801681, 0.026892462378347564006, -0.011464508826155780929}, + }, + }, + { /* 175 deg */ + { /* left */ + { /* a */ 0.00014791617587631145092, 0.000285910551379997492, 0.00012692619729554049804, 0.00040438895197725276999, 0.00029066876152533671629, 0.00016507225739092941949, 0.00040071421306131515833, 0.00027735693519659234546, 0.00081157671666387543041, -0.00048502720052107117267, 0.0016187447863386097632, -0.00064023663697010402274, 0.0026127689616017857333, -0.001428850716564400436, 0.0036199114237731029424, -0.00021464509485785707231, 0.075591000634582516948, 0.14738894320017598139, -0.090538848975703356547, -0.13055765949530895309, 0.032117835465639288373, 0.016143228745123250345, -0.038226437773861143832, 0.17392064687423575142, 0.37274723141852289521, 0.040910440487311454383, -0.08476188187521438433, 0.062153593309993704352, -0.044583141086268485154, -0.12590025666951026873, -0.067260170498982529974}, + { /* b */ 0, 0.11842983119354777433, 0.099103374896943041694, 0.12024966287153826539, 0.063220438431613179553, 0.14988272645351241597, 0.07228893489249349491, -0.10464217060759950506, -0.082634139336214273985, -0.10798282870583958415, -0.043442174670269007031, 0.039613032465045383557, 0.022400956780355141262, 0.040843572178851650367, 0.038353247796031608718, -0.04998345091756367653, -0.049227045004901492931, 0.0015240723438836312198, 0.0055340797093517135607, -0.035845162634114136058, -0.04118472436785008961, -0.016152787545783975354, -0.015680433024141404719, 0.041462862682487000576, -0.042056545545322843171, 0.008567650860054343287, -0.00230326459824820029, 0.003062478046954308919, -0.045793547300658488108, -0.0049872007967452502974, -0.034906317380872797784}, + }, { /* right */ + { /* a */ -2.6286289642291852525e-06, -0.00017077534716653690935, 7.4272678877389209859e-05, -0.00013287330160411834831, 0.00040045161805264337107, -0.00056894292294095219487, 0.00088913424170587013716, -0.0015036768604738406322, 0.0015723919800491449432, -0.0020893795767270781361, 0.0025485069730176064529, -0.0033080076535896112133, 0.0042371007784964762055, -0.0032218224161424321994, 0.083844912285675393671, 0.1496127653714211525, -0.10289831272694256736, -0.12129415487574513044, 0.0028921886841243122854, -0.0016166957512390297755, -0.0042121147670812217681, 0.16185108144442361677, 0.31174473329193308491, 0.052425807425518416993, -0.040640843909603860395, 0.036208208063514615849, -0.0729609243242863581, -0.12242990870115746938, -0.13585684803994743652, -0.15817574423506386427, -0.085508421111451085594}, + { /* b */ 0, 0.13055355297732951225, 0.12756246882044364188, 0.15909574579012766837, 0.1369194323142817471, 0.10740926008837287098, 0.049654510518590780355, 0.1251822474353236625, 0.10966935207374262085, -0.12088604357909142617, -0.085642514571738492801, 0.035567864082081318555, -0.032137217958537335483, 0.052516747987079649695, 0.11296002551350671494, 0.02020028482228879152, -0.0074679857903648533268, -0.047169535066008072555, -0.036124457824004196915, -0.0028072058675244863923, 0.015793363116794936069, -0.013593318103706682198, -0.052801939558321624169, 0.036735233879708145688, 0.018116300454979784862, 0.033374630253686560222, 0.012518645296619081847, -0.021356743399605047917, -0.026839107781398245656, 0.0027055497416701361317, 0.0080514686745915622912}, + }, + }, + { /* 180 deg */ + { /* left */ + { /* a */ -3.7346135617535164419e-06, -8.984158843630088865e-05, -6.4019064466941996011e-05, 0.00017983139599295761544, -0.00036096701588926875717, 0.00041559948135705469634, -0.00073226175846888372917, 0.0010489358635856500107, -0.0014871849499012005681, 0.0015217921538472787765, -0.0020253943033149424124, 0.0024041410881373882769, -0.0027338250369914052218, 0.003546028232389620248, -0.0017319271452512392806, 0.078317721315781116398, 0.1456521503947636742, -0.10293337788602949234, -0.1375738668682491006, 0.0081216237324363959454, 0.013184690158497477941, -0.014014253666613232449, 0.14577791035449927382, 0.33195957443370960327, 0.054534511669034113623, -0.086101008923252425609, 0.0092129082075557977571, -0.084077471088312816239, -0.13684081102824682818, -0.15318119974974245268, -0.11230157584427044593}, + { /* b */ 0, 0.1666384464706137658, 0.13608019535398821476, 0.20224660094906901642, 0.14926961513838893358, 0.073384972730091965754, 0.15686389072040762827, 0.096143170518754386689, -0.056347703479486407896, -0.1152601897366377498, -0.085029587197256589759, 0.060132780117322551239, 0.0069822793384761733942, 0.094093296548866611761, 0.081554016876462839813, -0.054404436604773884212, 0.021259701144760105584, -0.061703475341862205894, 0.012044605759416269347, -0.0013065382791313008559, -0.038045451921514553129, 0.00033388944627459234138, -0.0034356779476680393559, 0.021952832657257385918, 0.0026729239074668119901, 0.029827744301169373947, -0.0043862222358814935419, 0.0099212081615504717214, -0.020663956459189152665, -0.0088133274362810903879, 0.0044341780491049653107}, + }, { /* right */ + { /* a */ -3.7346135617535164419e-06, -8.984158843630088865e-05, -6.4019064466941996011e-05, 0.00017983139599295761544, -0.00036096701588926875717, 0.00041559948135705469634, -0.00073226175846888372917, 0.0010489358635856500107, -0.0014871849499012005681, 0.0015217921538472787765, -0.0020253943033149424124, 0.0024041410881373882769, -0.0027338250369914052218, 0.003546028232389620248, -0.0017319271452512392806, 0.078317721315781116398, 0.1456521503947636742, -0.10293337788602949234, -0.1375738668682491006, 0.0081216237324363959454, 0.013184690158497477941, -0.014014253666613232449, 0.14577791035449927382, 0.33195957443370960327, 0.054534511669034113623, -0.086101008923252425609, 0.0092129082075557977571, -0.084077471088312816239, -0.13684081102824682818, -0.15318119974974245268, -0.11230157584427044593}, + { /* b */ 0, 0.1666384464706137658, 0.13608019535398821476, 0.20224660094906901642, 0.14926961513838893358, 0.073384972730091965754, 0.15686389072040762827, 0.096143170518754386689, -0.056347703479486407896, -0.1152601897366377498, -0.085029587197256589759, 0.060132780117322551239, 0.0069822793384761733942, 0.094093296548866611761, 0.081554016876462839813, -0.054404436604773884212, 0.021259701144760105584, -0.061703475341862205894, 0.012044605759416269347, -0.0013065382791313008559, -0.038045451921514553129, 0.00033388944627459234138, -0.0034356779476680393559, 0.021952832657257385918, 0.0026729239074668119901, 0.029827744301169373947, -0.0043862222358814935419, 0.0099212081615504717214, -0.020663956459189152665, -0.0088133274362810903879, 0.0044341780491049653107}, + }, + } +}; + +#endif diff --git a/plugins/LadspaEffect/caps/interface.cc b/plugins/LadspaEffect/caps/interface.cc new file mode 100644 index 000000000..d0289d934 --- /dev/null +++ b/plugins/LadspaEffect/caps/interface.cc @@ -0,0 +1,145 @@ +/* + interface.cc + + Copyright 2004-11 Tim Goetze + + http://quitte.de/dsp/ + + LADSPA descriptor factory, host interface. + +*/ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA or point your web browser to http://www.gnu.org. +*/ +/* + LADSPA ID ranges 1761 - 1800 and 2581 - 2660 + (2541 - 2580 donated to artemio@kdemail.net) +*/ + +#include + +#include "basics.h" + +#include "Cabinet.h" +#include "Chorus.h" +#include "Phaser.h" +#include "Sin.h" +#include "Lorenz.h" +#include "Roessler.h" +#include "Reverb.h" +#include "Compress.h" +#include "Click.h" +#include "Eq.h" +#include "Clip.h" +#include "White.h" +#include "SweepVF.h" +#include "VCO.h" +#include "Amp.h" +#include "HRTF.h" +#include "Pan.h" +#include "Scape.h" +#include "ToneStack.h" + +#include "Descriptor.h" + +#define N 39 +static DescriptorStub * descriptors [N]; + +/*static inline void +seed() +{ + static struct timeval tv; + gettimeofday (&tv, 0); + + srand (tv.tv_sec ^ tv.tv_usec); +}*/ + +extern "C" { + +__attribute__ ((constructor)) +void _init() +{ + DescriptorStub ** d = descriptors; + + *d++ = new Descriptor(); + *d++ = new Descriptor(); + *d++ = new Descriptor(); + *d++ = new Descriptor(); + *d++ = new Descriptor(); + + *d++ = new Descriptor(); + *d++ = new Descriptor(); + *d++ = new Descriptor(); + *d++ = new Descriptor(); + *d++ = new Descriptor(); + *d++ = new Descriptor(); + *d++ = new Descriptor(); + *d++ = new Descriptor(); + *d++ = new Descriptor(); + *d++ = new Descriptor(); + *d++ = new Descriptor(); + + *d++ = new Descriptor(); + *d++ = new Descriptor(); + *d++ = new Descriptor(); + *d++ = new Descriptor(); + *d++ = new Descriptor(); + *d++ = new Descriptor(); + *d++ = new Descriptor(); + *d++ = new Descriptor(); + *d++ = new Descriptor(); + *d++ = new Descriptor(); + + *d++ = new Descriptor(); + *d++ = new Descriptor(); + *d++ = new Descriptor(); + *d++ = new Descriptor(); + *d++ = new Descriptor(); + *d++ = new Descriptor(); + *d++ = new Descriptor(); + + *d++ = new Descriptor(); + *d++ = new Descriptor(); + *d++ = new Descriptor(); + + *d++ = new Descriptor(); + *d++ = new Descriptor(); + *d++ = new Descriptor(); + + /* make sure N is correct */ + assert (d - descriptors == N); + + //seed(); +} + +__attribute__ ((destructor)) +void _fini() +{ + for (ulong i = 0; i < N; ++i) + delete descriptors[i]; +} + +/* /////////////////////////////////////////////////////////////////////// */ + +const LADSPA_Descriptor * +ladspa_descriptor (unsigned long i) +{ + if (i < N) + return descriptors[i]; + return 0; +} + +}; /* extern "C" */ diff --git a/plugins/LadspaEffect/caps/waves/click.h b/plugins/LadspaEffect/caps/waves/click.h new file mode 100644 index 000000000..35950d618 --- /dev/null +++ b/plugins/LadspaEffect/caps/waves/click.h @@ -0,0 +1,520 @@ +float click [] = { + -0.013062, -0.013062, -0.012817, -0.011078, -0.031097, -0.266479, + -0.610718, -0.255005, 0.698975, 0.999969, 0.505188, -0.724579, + -1.000000, -0.493225, 0.532135, 0.789459, 0.131744, -0.270599, + -0.080780, -0.065796, 0.584381, 0.718567, -0.355316, -0.760559, + -0.649994, -0.039032, 0.442017, 0.700043, 0.434845, -0.556427, + -1.000000, -0.400391, 0.590729, 0.999969, 0.999969, 0.592896, + -0.248932, -0.662750, -0.074615, 0.424774, 0.274933, -0.416504, + -0.772736, -0.359833, -0.218140, -0.254456, -0.379547, -0.768280, + -0.707428, 0.108124, 0.755127, 0.680847, 0.429352, 0.126129, + -0.424316, -0.451813, 0.197510, 0.862762, 0.964508, 0.263824, + -0.383057, -0.753571, -0.848297, -0.491425, -0.042114, -0.222504, + -0.664490, -0.690155, -0.227905, 0.286682, 0.742981, 0.812225, + 0.326691, 0.182770, 0.381195, 0.536194, 0.446930, 0.085754, + -0.650604, -1.000000, -1.000000, -0.774658, -0.152191, -0.112122, + -0.416290, -0.491547, -0.253235, 0.241760, 0.749847, 0.618042, + 0.338440, 0.431335, 0.773712, 0.936890, 0.752563, 0.291595, + -0.206970, -0.552460, -0.447449, -0.152069, -0.315735, -0.891846, + -1.000000, -1.000000, -0.682281, 0.066925, 0.477264, 0.447144, + 0.209167, 0.149994, 0.374176, 0.621185, 0.597046, 0.315826, + 0.034210, -0.004089, 0.084534, 0.127075, 0.060608, -0.134949, + -0.275421, -0.347870, -0.505371, -0.618835, -0.443878, -0.217682, + -0.157898, -0.241058, -0.424103, -0.494690, -0.286438, 0.111542, + 0.487793, 0.654907, 0.571869, 0.484650, 0.413208, 0.254089, + 0.136414, 0.021118, -0.223724, -0.366364, -0.290771, -0.126251, + -0.080048, -0.175262, -0.290100, -0.281403, -0.071808, 0.078613, + 0.216339, 0.275787, 0.223938, 0.178131, 0.162659, 0.110779, + 0.104553, 0.158661, 0.208252, 0.271484, 0.256531, 0.153046, + 0.068054, -0.009003, -0.116119, -0.155304, -0.099213, 0.066589, + 0.293732, 0.392303, 0.313416, 0.196320, 0.123932, 0.145874, + 0.279053, 0.291016, 0.081818, -0.092133, -0.090363, 0.030029, + 0.099762, -0.021912, -0.133942, -0.025299, 0.257782, 0.466980, + 0.406006, 0.150085, -0.007385, -0.027588, 0.048920, 0.128998, + 0.058868, -0.066589, -0.146759, -0.168427, -0.119751, -0.087677, + -0.082581, -0.029694, -0.041138, -0.139984, -0.156036, -0.033325, + 0.164612, 0.331726, 0.320435, 0.205811, 0.209717, 0.275909, + 0.240479, 0.081238, -0.104828, -0.239624, -0.286652, -0.254120, + -0.304688, -0.428223, -0.479248, -0.534729, -0.453003, -0.144928, + -0.001709, 0.059448, 0.016937, -0.127991, -0.186432, -0.122986, + 0.086090, 0.278351, 0.258026, 0.172882, -0.032043, -0.267242, + -0.289276, -0.293365, -0.288971, -0.256073, -0.212250, -0.214783, + -0.182709, -0.149170, -0.132599, -0.221649, -0.233063, 0.002472, + 0.208008, 0.119659, -0.018250, -0.182861, -0.267731, -0.164001, + -0.052063, 0.009979, 0.058472, 0.147156, 0.111298, 0.017426, + -0.067780, -0.049835, 0.002167, -0.028259, 0.003418, 0.023743, + -0.056702, -0.074066, -0.070984, -0.075439, -0.056915, -0.189575, + -0.324524, -0.241882, -0.051514, 0.075623, 0.160095, 0.094238, + 0.004425, 0.010193, 0.032898, 0.040222, 0.163605, 0.273682, + 0.192261, -0.019989, -0.217682, -0.327728, -0.337372, -0.227386, + -0.043945, 0.107788, 0.244690, 0.226227, -0.034332, -0.252106, + -0.364136, -0.377136, -0.246277, -0.021973, 0.194763, 0.300110, + 0.295532, 0.246246, 0.198425, 0.209991, 0.272064, 0.249451, + 0.078094, -0.143616, -0.276459, -0.257782, -0.228638, -0.161224, + -0.006012, 0.169342, 0.267456, 0.246094, 0.232147, 0.290436, + 0.280670, 0.220886, 0.162811, 0.187286, 0.178223, 0.036804, + -0.043304, -0.098694, -0.101990, 0.008698, 0.102844, 0.132050, + 0.142578, 0.152924, 0.058960, -0.074615, -0.079041, 0.026123, + 0.136322, 0.253510, 0.382782, 0.447357, 0.419800, 0.294952, + 0.129059, 0.004028, -0.119781, -0.257538, -0.320526, -0.211609, + -0.054565, 0.012085, -0.016663, 0.006592, 0.144958, 0.193237, + 0.072174, -0.018951, 0.038483, 0.085175, -0.023407, -0.089661, + -0.029999, -0.023956, -0.079498, -0.135223, -0.154205, -0.095276, + -0.031830, -0.105988, -0.252563, -0.284424, -0.153198, 0.017273, + 0.073456, 0.072571, 0.175751, 0.222260, 0.105316, -0.053345, + -0.180115, -0.192932, -0.185211, -0.167511, -0.079529, -0.070007, + -0.151276, -0.215210, -0.206390, -0.133820, -0.099060, -0.082855, + 0.047852, 0.108429, 0.014099, -0.049377, -0.050751, -0.081207, + -0.060944, -0.028564, -0.124420, -0.139526, -0.033508, 0.054108, + 0.042664, -0.004669, -0.069611, -0.105774, -0.090881, -0.128601, + -0.090027, -0.012634, 0.004578, 0.046387, 0.085144, 0.055511, + 0.036469, 0.001770, -0.019867, 0.016998, 0.031891, 0.089935, + 0.066254, -0.069183, -0.020081, 0.046356, 0.005554, -0.023224, + -0.042847, -0.133057, -0.104004, 0.065674, 0.146484, 0.145782, + 0.006897, -0.059509, 0.070923, 0.058319, -0.002655, 0.000641, + -0.036011, 0.049988, 0.076752, 0.016998, 0.063049, 0.105835, + 0.041870, -0.092072, -0.154358, -0.081879, 0.089905, 0.090820, + 0.054047, -0.110565, -0.285980, -0.219116, -0.103058, 0.083405, + 0.192200, 0.124146, 0.080994, 0.118896, 0.231659, 0.259644, + 0.175018, 0.110840, 0.005096, -0.156128, -0.202209, -0.167572, + -0.145050, -0.126068, -0.139221, -0.039856, 0.078674, 0.062866, + -0.069672, -0.143311, -0.049530, 0.082611, 0.142487, 0.039612, + -0.035736, -0.006287, 0.017181, 0.013580, -0.019043, -0.017303, + 0.007904, -0.073944, -0.121704, -0.065369, -0.098083, -0.063568, + 0.056885, 0.083984, 0.148987, 0.298431, 0.253815, 0.052643, + -0.139740, -0.217743, -0.073181, 0.097351, 0.124786, 0.091156, + 0.056152, -0.007446, 0.048553, 0.129333, 0.021118, -0.003235, + 0.093872, 0.080658, 0.025482, -0.037598, -0.055481, -0.078796, + -0.130676, -0.140930, -0.126770, -0.048004, 0.026093, 0.035767, + 0.049957, 0.009247, -0.076599, -0.066101, 0.002747, 0.076813, + 0.173492, 0.091949, -0.071960, -0.080902, -0.061157, -0.061066, + -0.073029, -0.070251, -0.008545, 0.035187, -0.036194, -0.086456, + -0.158691, -0.199036, -0.150177, -0.099030, -0.027802, -0.001465, + 0.003662, 0.089020, 0.056122, -0.108551, -0.125610, -0.056610, + -0.053284, -0.128998, -0.166504, -0.124725, -0.095459, -0.088531, + -0.087433, -0.065399, -0.084045, -0.053284, -0.006317, -0.008698, + 0.025879, -0.019714, -0.055511, -0.076874, -0.084442, -0.111450, + -0.097198, -0.040924, -0.047729, 0.025604, 0.077301, 0.027100, + -0.052612, -0.046265, 0.021271, 0.022186, -0.060669, -0.109283, + -0.022858, 0.126740, 0.199036, 0.255798, 0.210114, 0.167450, + 0.034515, -0.140167, -0.106354, -0.056549, -0.016449, 0.092529, + 0.082977, 0.035645, 0.066132, 0.113098, 0.123657, 0.150513, + 0.123840, 0.125702, 0.146637, 0.131683, 0.114014, 0.019806, + 0.017670, 0.017914, -0.029480, 0.074280, 0.118622, 0.049805, + 0.057922, 0.033569, 0.028870, 0.095551, 0.030121, -0.080963, + -0.042938, 0.091400, 0.075287, 0.011597, -0.023834, -0.035278, + -0.009552, -0.030884, -0.058044, -0.038818, 0.016785, 0.037354, + -0.004852, -0.048157, -0.051849, 0.014618, 0.067535, 0.060547, + 0.029022, -0.019257, -0.078705, -0.057495, 0.056549, -0.016022, + -0.145416, -0.142548, -0.124207, -0.015961, 0.118011, 0.059906, + -0.050842, -0.037537, -0.042084, -0.060059, -0.034454, -0.011414, + 0.040009, 0.084778, 0.039246, -0.029663, -0.059631, -0.023285, + 0.033173, 0.044617, -0.023254, -0.044983, -0.039337, -0.037506, + 0.024750, 0.034637, -0.024902, -0.007019, -0.006195, 0.021271, + 0.067657, 0.043182, 0.004089, -0.043091, -0.077576, -0.118225, + -0.100006, -0.084015, -0.117065, -0.140533, -0.091675, 0.001709, + 0.019196, -0.053619, -0.090454, -0.007599, 0.064209, 0.048920, + -0.077576, -0.158813, 0.000214, 0.086823, 0.027100, 0.065979, + 0.028351, -0.032745, -0.089844, -0.026672, 0.033234, -0.002045, + -0.068665, -0.114441, -0.152344, -0.166840, -0.129181, -0.077667, + -0.001678, 0.082428, 0.123138, 0.048737, -0.080750, -0.094452, + -0.066895, -0.061401, -0.009613, -0.021729, 0.015442, 0.051270, + -0.017273, -0.013519, 0.007172, -0.065338, -0.133209, -0.104095, + -0.069153, -0.047638, -0.011871, -0.043182, -0.056427, 0.028900, + 0.031128, -0.004974, -0.057983, -0.129303, -0.086914, -0.039917, + -0.016266, 0.033936, 0.017426, 0.021576, 0.037964, -0.003693, + -0.009979, 0.064392, 0.022491, -0.075836, -0.030457, 0.040741, + 0.075745, 0.076447, 0.034851, -0.042816, -0.058960, -0.049591, + -0.033905, -0.005127, -0.015778, -0.011963, 0.043091, 0.093231, + 0.070007, 0.060211, 0.045074, 0.039642, 0.041260, 0.015594, + 0.016663, 0.032867, 0.031250, 0.009583, -0.011230, 0.009247, + 0.050415, 0.087524, 0.040375, -0.017792, -0.023621, -0.033478, + 0.012543, 0.010864, 0.016724, 0.047638, 0.089905, 0.132141, + 0.089111, 0.045471, -0.019409, -0.041229, 0.011597, -0.053101, + -0.105194, -0.104187, -0.087799, -0.061951, -0.055634, 0.003082, + 0.064270, 0.062744, 0.022552, 0.045837, 0.096985, 0.080139, + 0.028015, -0.003204, -0.035553, -0.006714, 0.071960, 0.052155, + -0.085815, -0.133209, -0.086212, -0.063507, -0.040466, -0.048065, + -0.071106, -0.006256, 0.013641, 0.026611, 0.101166, 0.072357, + 0.070557, 0.060333, -0.004028, -0.012787, -0.003387, 0.000793, + -0.042328, -0.083740, -0.114532, -0.106598, 0.000183, 0.052155, + -0.011536, -0.042480, 0.040649, 0.096161, 0.074463, 0.033417, + -0.013824, 0.006500, 0.001068, 0.052094, 0.065125, 0.027496, + -0.009613, -0.042542, -0.053436, -0.047607, -0.063080, -0.003693, + 0.001129, -0.113068, -0.136444, -0.046387, 0.056641, 0.095581, + 0.071533, 0.006836, 0.015869, 0.094147, 0.035950, -0.057190, + 0.013245, 0.040802, 0.020050, -0.008636, -0.041199, -0.051025, + -0.049683, -0.065826, -0.073303, -0.081909, -0.105347, -0.019348, + 0.024902, 0.007904, 0.010712, -0.030792, -0.059875, -0.052521, + -0.065125, -0.029419, 0.076965, 0.043243, 0.022247, 0.019684, + -0.016968, 0.026611, 0.010071, -0.047852, -0.037903, -0.015839, + -0.032013, -0.055054, -0.145294, -0.203003, -0.141785, -0.069946, + -0.011261, 0.027435, -0.020538, -0.047455, -0.046051, -0.035400, + -0.006287, 0.014496, 0.004425, 0.001251, 0.003479, 0.023132, + 0.102905, 0.105377, 0.013947, -0.088074, -0.138519, -0.089172, + 0.021210, 0.031830, -0.057739, -0.066895, -0.024292, 0.001801, + -0.027924, -0.053284, -0.022003, 0.012726, 0.011047, -0.005920, + -0.033295, -0.049042, -0.025055, 0.031738, 0.031097, 0.004059, + 0.008698, 0.054688, 0.046570, -0.022980, -0.080597, -0.092163, + -0.052277, -0.003967, -0.026337, -0.039886, 0.025238, 0.037323, + 0.005829, -0.014282, 0.028442, 0.057098, 0.003662, -0.038483, + -0.050537, -0.017151, 0.031555, -0.025391, -0.038452, -0.011871, + -0.042664, 0.015411, 0.065277, 0.015594, -0.015778, -0.036652, + -0.097076, -0.057983, 0.001434, 0.002991, -0.016724, -0.071564, + -0.036926, 0.038452, 0.049683, 0.071075, 0.066925, 0.007935, + -0.028351, -0.003754, 0.020569, -0.008881, -0.016998, -0.024841, + -0.031677, 0.005615, 0.019470, -0.028290, -0.035645, -0.012756, + -0.014191, -0.027496, -0.002411, -0.018066, 0.012177, 0.103668, + 0.134277, 0.056885, 0.027893, -0.002533, -0.008148, 0.018707, + -0.005615, 0.004822, 0.055634, 0.054718, 0.003296, -0.046875, + -0.058838, -0.034149, 0.031616, 0.020233, -0.014771, -0.005981, + 0.025391, 0.043091, 0.010376, 0.006866, 0.037842, 0.053589, + 0.037567, 0.042938, 0.063629, -0.000092, -0.056000, -0.045074, + -0.034454, -0.006531, 0.004303, -0.034882, -0.026886, 0.056580, + 0.066437, 0.025757, 0.036255, 0.066376, 0.017395, -0.030701, + -0.042419, -0.049744, -0.013733, 0.006653, -0.036713, -0.045166, + -0.008270, 0.011841, 0.049622, 0.086792, 0.052460, 0.037872, + -0.009338, -0.074890, -0.007385, 0.029053, 0.002991, -0.001862, + -0.055817, -0.109833, -0.082581, -0.018097, -0.005829, -0.006561, + -0.038422, -0.026855, 0.067139, 0.051575, -0.023956, 0.005768, + 0.032318, -0.009094, -0.031799, -0.019714, -0.075714, -0.137512, + -0.110962, -0.081360, -0.014679, -0.015259, -0.067322, -0.077271, + -0.073303, -0.035583, 0.033325, 0.059540, 0.034912, 0.015411, + -0.013214, -0.019135, -0.013306, -0.024170, -0.043640, -0.067596, + -0.077026, -0.050446, -0.039398, -0.074158, -0.079590, -0.077148, + -0.119843, -0.070496, 0.023834, 0.030396, -0.002869, -0.011810, + -0.001465, 0.025299, 0.031250, 0.045990, 0.034027, -0.058624, + -0.070892, -0.031067, -0.025360, -0.042572, -0.063507, -0.054352, + -0.028412, -0.001923, -0.037018, -0.048157, -0.007141, -0.003357, + 0.013916, 0.035767, 0.035034, 0.038391, 0.011749, -0.011780, + -0.033905, -0.065521, -0.075470, -0.065491, -0.065125, -0.079376, + -0.044281, -0.014130, -0.000458, 0.024017, 0.021973, -0.004120, + 0.026245, 0.043976, -0.009155, -0.035187, -0.030853, -0.042633, + 0.002563, 0.055603, 0.021820, -0.057800, -0.074646, -0.015411, + 0.045898, 0.007233, -0.055756, -0.016113, 0.035370, 0.023315, + -0.017120, -0.024292, 0.004974, 0.041718, 0.045227, -0.000793, + 0.025970, 0.086670, 0.042450, -0.023834, -0.054077, -0.036926, + 0.028320, 0.006622, 0.005341, 0.059265, 0.049164, 0.011841, + 0.019470, 0.004242, -0.035248, -0.009949, 0.027069, 0.029419, + 0.042816, 0.043671, 0.012878, 0.023865, 0.027802, -0.000854, + 0.006348, 0.039337, 0.040802, -0.013275, -0.055634, -0.029480, + -0.013092, -0.033936, -0.040649, -0.001404, 0.038910, 0.046722, + 0.033447, -0.020294, -0.040283, -0.014923, -0.003143, -0.001312, + 0.005493, 0.002899, 0.037140, 0.062469, 0.038696, 0.002747, + -0.012482, -0.009827, -0.004486, -0.011780, -0.018097, -0.014862, + -0.008057, -0.056702, -0.049561, 0.025269, 0.046844, 0.003296, + 0.014130, 0.043182, 0.018280, 0.007294, 0.008270, -0.004517, + -0.014679, -0.026764, -0.019745, -0.041779, -0.027863, 0.028412, + 0.033722, 0.020264, 0.004913, -0.004578, -0.007935, -0.006226, + -0.005737, -0.032074, -0.040955, -0.010468, -0.040863, -0.031433, + -0.004547, -0.032654, -0.038239, 0.027496, 0.010681, -0.000702, + 0.020782, -0.010376, -0.005768, 0.013733, -0.007324, -0.027466, + -0.018005, -0.033600, -0.028778, -0.036316, -0.073090, -0.050781, + -0.029938, -0.037567, -0.035828, -0.036163, -0.035828, -0.005249, + -0.005646, -0.002289, 0.011078, -0.014038, -0.035309, 0.000061, + 0.010101, -0.028961, -0.035950, -0.053802, -0.066620, -0.048981, + -0.030823, -0.034515, 0.008972, 0.030731, -0.021942, -0.069214, + -0.046722, -0.000854, 0.028656, -0.000580, -0.027313, -0.026886, + -0.060364, -0.051880, -0.022766, -0.019531, -0.016418, -0.047089, + -0.072510, -0.054871, -0.046570, -0.053772, -0.021820, 0.003204, + 0.010406, 0.000793, -0.037170, -0.023926, 0.025269, 0.054657, + 0.057159, 0.007996, -0.063232, -0.097137, -0.066803, -0.021606, + -0.015015, -0.037842, -0.045776, -0.054840, -0.068481, -0.033081, + 0.026459, 0.048157, 0.017700, -0.011230, -0.020599, -0.040405, + 0.001526, 0.048492, 0.023407, -0.011658, 0.004059, 0.006165, + -0.013245, 0.008118, 0.049591, 0.050262, 0.008606, -0.029175, + -0.039368, 0.003937, 0.027863, -0.005646, -0.046082, -0.043152, + -0.002838, 0.018341, 0.006012, -0.001282, 0.015137, 0.004425, + -0.018524, -0.001343, 0.009308, 0.002350, -0.013306, -0.014832, + -0.008759, 0.000671, 0.023254, 0.035645, 0.005646, -0.028717, + -0.028931, -0.008484, -0.019043, -0.019928, 0.006042, 0.016083, + 0.023682, 0.034363, 0.020844, 0.016235, 0.008636, 0.003601, + 0.018646, 0.029480, 0.034088, 0.016327, 0.004761, -0.029022, + -0.027893, -0.006836, -0.015350, -0.021820, -0.018250, -0.008026, + -0.001343, 0.004669, -0.015900, -0.004303, 0.032898, 0.041046, + 0.023132, 0.020844, 0.032196, 0.020355, -0.002716, 0.003662, + 0.031433, 0.043213, 0.043304, -0.007507, -0.015747, 0.000916, + -0.009094, 0.004852, 0.004272, 0.007507, 0.021088, 0.024017, + 0.010254, 0.023987, 0.035431, 0.006561, -0.015869, -0.004791, + 0.013885, 0.019440, -0.015106, -0.038666, -0.028625, -0.036438, + -0.051361, -0.020905, -0.019531, -0.038666, -0.015747, -0.001587, + 0.006317, 0.024994, 0.022797, 0.012726, -0.004822, 0.001404, + -0.006042, 0.000732, 0.008118, -0.024506, -0.045654, -0.037537, + -0.024933, -0.026733, -0.038605, -0.051971, -0.050171, -0.031372, + -0.041199, -0.012268, -0.006500, -0.038208, -0.053650, -0.021118, + 0.007324, 0.006561, -0.026459, -0.052338, -0.015717, -0.015106, + -0.037018, -0.037720, -0.047852, -0.032562, -0.014557, -0.059265, + -0.101318, -0.091644, -0.050659, -0.037628, -0.000763, 0.016144, + -0.018799, -0.022827, -0.005707, -0.010712, -0.012054, -0.007019, + -0.008881, -0.000702, -0.000427, -0.015594, -0.030426, -0.015778, + -0.019501, -0.064423, -0.072540, -0.041229, -0.012177, -0.007294, + -0.034027, -0.059723, -0.034729, -0.007629, 0.003418, -0.007751, + -0.032043, -0.034149, -0.024170, 0.007233, 0.023834, 0.008575, + 0.004669, -0.008148, -0.037811, -0.033783, 0.007996, 0.016602, + 0.014038, 0.012238, -0.009979, -0.028748, -0.014862, 0.013000, + 0.000977, -0.049530, -0.061859, -0.022247, 0.006226, 0.009369, + -0.029236, -0.031128, 0.006226, 0.009399, -0.006653, 0.001190, + -0.011993, -0.000916, 0.011322, -0.002350, 0.004333, 0.004517, + -0.014191, -0.012177, 0.010986, 0.011566, -0.000092, -0.010651, + -0.014038, -0.005280, -0.000732, -0.007935, -0.017303, -0.019073, + -0.009399, 0.007935, 0.015778, 0.019073, 0.004272, -0.012726, + 0.001434, 0.011963, 0.010162, 0.018555, 0.018036, 0.008789, + 0.000946, 0.009552, 0.014923, 0.033722, 0.048553, 0.019989, + -0.010803, -0.026733, -0.012207, 0.012512, -0.003967, -0.018097, + 0.002289, 0.032410, 0.036804, 0.025970, 0.013550, 0.008301, + 0.011108, 0.012421, 0.010101, 0.001404, -0.010956, 0.010498, + 0.029999, 0.014221, 0.003937, 0.002563, -0.001709, -0.013428, + -0.023102, -0.005188, 0.011780, 0.002655, -0.002045, 0.006348, + 0.005981, -0.011841, -0.016327, -0.004486, -0.004944, -0.030151, + -0.029114, -0.023376, -0.024261, -0.009857, 0.008423, 0.016235, + 0.021606, 0.012054, -0.005432, -0.006744, -0.003937, -0.004974, + -0.024506, -0.029541, -0.015839, -0.028381, -0.030823, -0.018036, + -0.006104, -0.003998, -0.022858, -0.030975, -0.005798, -0.001709, + -0.008850, -0.011780, -0.013031, -0.018921, -0.029480, -0.024689, + -0.012909, -0.006104, -0.006042, -0.013763, -0.018188, -0.034576, + -0.036713, -0.004517, 0.009583, -0.002106, -0.026093, -0.033875, + -0.008575, 0.006226, -0.008148, -0.032654, -0.037842, -0.024811, + -0.019714, -0.013062, -0.014771, -0.028992, -0.023376, -0.012695, + -0.007690, -0.014343, -0.031708, -0.044586, -0.036865, -0.027985, + -0.022552, -0.025208, -0.028168, -0.024933, -0.028717, -0.030212, + -0.018066, -0.004547, 0.001282, -0.008148, -0.024200, -0.023834, + -0.019623, -0.037048, -0.042877, -0.031952, -0.016998, -0.009338, + -0.014893, -0.018280, -0.013550, -0.003418, 0.013306, 0.008606, + -0.002991, -0.015350, -0.023102, -0.021118, -0.025269, -0.032654, + -0.040375, -0.028992, -0.016357, -0.034027, -0.036011, -0.016022, + -0.010284, -0.000793, 0.006805, 0.005096, 0.021973, 0.009796, + -0.012207, -0.013489, -0.014648, -0.017120, -0.017578, -0.012329, + -0.002472, 0.000397, -0.013031, -0.018890, -0.009338, -0.018280, + -0.017670, -0.005920, -0.004944, -0.006073, -0.003479, 0.000610, + 0.009003, 0.010559, 0.011475, -0.003693, -0.016357, -0.006378, + -0.007507, 0.000366, 0.011322, 0.012390, 0.004639, -0.002655, + 0.003754, 0.027283, 0.016052, -0.008575, -0.005615, 0.004303, + 0.013550, 0.018677, 0.003662, -0.022858, -0.028168, -0.017975, + -0.002197, -0.012360, -0.022736, -0.016144, 0.003784, 0.018951, + 0.008270, -0.005707, -0.008514, 0.007446, 0.015717, 0.012177, + 0.011414, 0.010590, 0.013367, 0.008331, 0.002686, -0.003876, + -0.009857, -0.024902, -0.021973, -0.014557, -0.012756, -0.001251, + 0.004303, 0.005402, 0.009460, 0.002960, -0.009003, -0.003784, + 0.009430, 0.008484, 0.006012, 0.014130, 0.008148, -0.002441, + 0.000397, 0.002686, -0.000214, -0.014557, -0.026489, -0.014587, + -0.009918, -0.006805, -0.001221, -0.004089, -0.003601, -0.006226, + -0.020142, -0.023315, -0.005341, 0.012421, 0.008545, -0.002472, + -0.000366, 0.000580, -0.020508, -0.033752, -0.029205, 0.000031, + 0.017365, 0.012390, -0.008514, -0.017181, -0.018311, -0.016663, + -0.008301, -0.013519, -0.010376, 0.011841, 0.002930, -0.016510, + -0.025116, -0.029968, -0.015289, -0.003082, -0.007355, -0.010590, + -0.012451, -0.021759, -0.028351, -0.040375, -0.041840, -0.027374, + -0.014343, -0.018005, -0.024628, -0.018188, -0.009644, -0.003723, + -0.009644, -0.005341, 0.003204, 0.002045, 0.007629, -0.003815, + -0.013062, -0.010193, -0.003540, -0.012268, -0.019501, -0.025330, + -0.040314, -0.039520, -0.035187, -0.034180, -0.032257, -0.036285, + -0.029572, -0.008575, -0.002045, -0.012787, -0.010559, -0.006317, + -0.005371, -0.003693, 0.000519, 0.000854, -0.010101, -0.017090, + -0.023499, -0.034790, -0.033569, -0.025818, -0.007507, 0.004913, + -0.004089, -0.011780, -0.008759, -0.004150, -0.002411, -0.004059, + -0.002960, -0.007416, -0.012177, -0.015289, -0.024750, -0.033478, + -0.035461, -0.029419, -0.022003, -0.013306, -0.006958, -0.007996, + -0.011658, -0.013916, -0.017303, -0.011261, -0.000061, 0.009674, + -0.001404, -0.013245, -0.006226, 0.010773, 0.012482, 0.002075, + -0.006165, -0.007172, -0.014618, -0.021759, -0.029266, -0.024841, + -0.018005, -0.015350, -0.010590, -0.002075, -0.000427, -0.009308, + -0.007721, 0.007782, 0.010223, -0.001434, -0.007141, -0.005127, + 0.000458, 0.005920, -0.006500, -0.018921, -0.012726, -0.007416, + -0.009033, -0.015900, -0.021088, -0.017761, -0.007172, 0.002289, + 0.004333, 0.003174, -0.000427, -0.001678, 0.002289, 0.004974, + 0.009552, 0.002380, -0.014374, -0.013824, -0.005890, 0.003998, + -0.002014, -0.013367, -0.010315, -0.002380, 0.001129, -0.001160, + -0.001404, -0.001190, -0.001526, 0.001007, 0.003082, 0.006836, + 0.008820, 0.000153, -0.008972, -0.013184, -0.014343, -0.009430, + 0.003571, 0.000214, -0.013214, -0.011261, -0.001312, 0.003754, + 0.002899, -0.000946, 0.000641, 0.006195, 0.011322, 0.013245, + 0.004120, -0.001862, 0.003448, -0.003998, -0.018250, -0.020447, + -0.012054, -0.001129, 0.005615, 0.000366, -0.010773, -0.015564, + -0.014343, -0.011566, -0.001862, 0.015198, 0.010162, -0.002991, + -0.011261, -0.014008, -0.009399, -0.007416, -0.005219, -0.015411, + -0.026123, -0.031647, -0.035095, -0.028290, -0.016052, -0.008423, + 0.005615, 0.007233, 0.001984, 0.000610, -0.002319, -0.006866, + -0.002045, 0.008636, 0.003754, -0.008575, -0.016907, -0.011536, + -0.000336, -0.003998, -0.022400, -0.038818, -0.039948, -0.029755, + -0.016785, -0.009705, -0.006805, -0.004303, -0.004578, 0.000610, + 0.003265, 0.004669, 0.009857, 0.002899, -0.009552, -0.020294, + -0.019928, -0.016083, -0.013214, -0.015503, -0.017700, -0.026581, + -0.025879, -0.020721, -0.018066, -0.015503, -0.007690, -0.002258, + -0.009827, -0.018951, -0.014099, 0.002808, -0.002075, -0.026947, + -0.024506, -0.009277, -0.004822, -0.011108, -0.018372, -0.022125, + -0.023804, -0.016144, -0.012726, -0.012939, -0.015900, -0.017456, + -0.020294, -0.023834, -0.023499, -0.018311, -0.011108, -0.010162, + -0.014404, -0.022705, -0.025330, -0.021057, -0.012543, -0.008575, + -0.014557, -0.022614, -0.021637, -0.015259, -0.015778, -0.022156, + -0.021210, -0.009552, -0.002014, -0.002991, -0.004242, -0.007141, + -0.006256, 0.002106, 0.003235, -0.003021, -0.017426, -0.015259, + -0.001312, -0.001801, -0.014191, -0.020935, -0.021057, -0.015533, + -0.015717, -0.018311, -0.010223, -0.008209, -0.012451, -0.011780, + -0.009735, -0.007355, -0.002075, -0.002441, -0.004578, -0.003204, + -0.001556, 0.004944, 0.002563, -0.006073, -0.011993, -0.016632, + -0.019226, -0.006805, -0.000183, -0.006500, -0.015717, -0.014038, + -0.000397, 0.008484, 0.005920, -0.000946, -0.011963, -0.019440, + -0.017731, -0.018921, -0.017548, -0.013885, -0.005188, -0.006653, + -0.008759, -0.006958, -0.001801, 0.008545, 0.005371, -0.000854, + 0.009125, 0.016113, 0.010284, 0.000671, 0.000427, 0.001129, + -0.002319, -0.002441, -0.004639, -0.016052, -0.027039, -0.020142, + -0.014404, -0.010834, -0.014771, -0.016449, -0.005493, 0.006958, + 0.014160, 0.011536, 0.011383, 0.012939, 0.011261, 0.014923, + 0.015015, 0.006653, -0.001007, -0.004852, -0.007660, -0.005371, + -0.011505, -0.018555, -0.018219, -0.016571, -0.016296, -0.012878, + -0.010834, -0.004333, 0.006073, 0.015350, 0.016510, 0.006653, + 0.004761, 0.005463, 0.004578, 0.005615, -0.005066, -0.016602, + -0.022308, -0.018890, -0.014191, -0.016937, -0.015198, -0.017548, + -0.023987, -0.020905, -0.009735, 0.002838, 0.008484, 0.005280, + 0.002258, -0.002075, -0.007416, -0.008423, 0.001434, 0.002167, + -0.007843, -0.008911, -0.010223, -0.019226, -0.026428, -0.023224, + -0.016083, -0.008850, -0.007965, -0.013062, -0.014496, -0.011932, + -0.012146, -0.006561, -0.003876, -0.009155, -0.013916, -0.009735, + -0.004211, -0.001007, -0.003510, -0.014709, -0.022949, -0.021484, + -0.018311, -0.014404, -0.010406, -0.010162, -0.011993, -0.018890, + -0.022430, -0.016144, -0.008514, -0.009796, -0.012207, -0.007843, + -0.007629, -0.009552, -0.012970, -0.012115, -0.012360, -0.016022, + -0.018768, -0.015167, -0.009979, -0.018616, -0.029205, -0.025421, + -0.019531, -0.024902, -0.026733, -0.019989, -0.008331, -0.004913, + -0.007202, -0.002045, -0.007599, -0.011841, -0.006897, -0.009277, + -0.016449, -0.015991, -0.009674, -0.008331, -0.008636, -0.023621, + -0.036377, -0.031158, -0.025909, -0.023895, -0.022827, -0.025177, + -0.027008, -0.023590, -0.016907, -0.007324, -0.000671, -0.000610, + -0.002167, -0.003876, -0.002350, 0.000061, -0.001801, -0.008392, + -0.008636, -0.007385, -0.014893, -0.015808, -0.013458, -0.015198, + -0.015320, -0.011108, -0.010956, -0.016937, -0.018463, -0.015839, + -0.013367, -0.010223, -0.006500, -0.000977, -0.001221, -0.005981, + -0.010162, -0.005768, 0.003784, 0.003204, -0.008118, -0.015747, + -0.014709, -0.012238, -0.012604, -0.008453, 0.000916, 0.003510, + 0.000305, -0.000305, 0.003998, 0.001526, 0.003571, 0.006500, + 0.003937, -0.001678, -0.004547, -0.003815, -0.001740, -0.007568, + -0.011597, -0.011841, -0.015015, -0.013550, -0.012543, -0.006470, + -0.002197, -0.006775, -0.002075, 0.008118, 0.005157, -0.002197, + -0.004211, -0.000397, 0.005280, 0.001587, -0.003357, 0.001526, + 0.003876, 0.008209, 0.004669, -0.004700, -0.007050, -0.007294, + -0.005280, -0.003357, -0.007416, -0.008423, -0.002808, -0.000336, + -0.005280, -0.012787, -0.008026, 0.002869, 0.000336, -0.000580, + -0.000488, -0.002960, 0.002380, 0.002991, -0.001526, -0.002197, + -0.006226, -0.009552, -0.007568, -0.001160, 0.000153, 0.001923, + -0.005798, -0.014557, -0.013367, -0.006805, -0.000610, 0.006104, + 0.003143, -0.001343, -0.000610, 0.001526, 0.005249, 0.000244, + -0.009064, -0.010223, -0.010651, -0.012787, -0.010101, -0.012970, + -0.016266, -0.014404, -0.009064, -0.006287, -0.005219, -0.004089, + -0.007629, -0.009796, -0.011566, -0.007294, -0.001251, -0.005035, + -0.015533, -0.016998, -0.011566, -0.005981, -0.007782, -0.008026, + -0.007599, -0.011230, -0.014740, -0.016907, -0.019073, -0.020477, + -0.016113, -0.012146, -0.009918, -0.009186, -0.020874, -0.031067, + -0.026611, -0.017303, -0.009125, -0.004517, -0.008972, -0.015198, + -0.019714, -0.022827, -0.020172, -0.020660, -0.021454, -0.022186, + -0.023254, -0.018036, -0.010864, -0.016266, -0.027252, -0.028656, + -0.022003, -0.016174, -0.017212, -0.020203, -0.025421, -0.025757, + -0.021362, -0.015717, -0.008392, -0.006927, -0.019958, -0.031830, + -0.027588, -0.021820, -0.019470, -0.021454, -0.024261, -0.020508, + -0.019043, -0.015411, -0.010132, -0.007294, -0.004272, -0.002014, + -0.003448, -0.009735, -0.011780, -0.013611, -0.019714, -0.020172, + -0.016846, -0.018127, -0.017578, -0.018402, -0.018860, -0.013245, + -0.007629, -0.010132, -0.009064, -0.005676, -0.004395, -0.006256, + -0.011292, -0.013367, -0.003784, 0.003387, 0.001434, 0.000336, + -0.004059, -0.006592, -0.003845, -0.003815, -0.002472, -0.004150, + -0.012390, -0.016998, -0.015350, -0.013214, -0.012360, -0.016418, + -0.014496, 0.000580, 0.008881, 0.005951, -0.000122, -0.006378, + -0.008850, -0.005432, 0.001007, 0.002441, -0.002869, -0.007690, + -0.006866, -0.001434, 0.000641, -0.004303, -0.006592, -0.005096, + -0.005280, -0.002838, 0.000946, 0.001160, -0.001465, -0.004822, + -0.006439, 0.003113, 0.008392, 0.001556, -0.005768, -0.010437, + -0.009705, -0.006042, -0.000183, 0.002869, -0.003876, -0.012512, + -0.007843, 0.003845, 0.009796, 0.009583, 0.005035, 0.005737, + 0.006104, 0.001007, 0.003143, 0.004791, 0.003143, 0.001068, + -0.005798, -0.008423, -0.002563, 0.001678, -0.002747, -0.008911, + -0.010468, -0.002808, 0.005646, 0.002075, -0.003235, -0.006866, + -0.007019, -0.001160, 0.002167, 0.001343, -0.000519, -0.005615, + -0.009399, -0.009613, -0.013336, -0.015533, -0.016418, -0.012970, + -0.011078, -0.015320, -0.020721, -0.014709, -0.002625, -0.004547, + -0.011932, -0.007599, -0.000671, 0.000336, -0.002747, -0.008148, + -0.012939, -0.017944, -0.020538, -0.018494, -0.014221, -0.013824, + -0.019470, -0.023163, -0.020203, -0.016968, -0.017578, -0.018372, + -0.015533, -0.012726, -0.010101, -0.011017, -0.015533, -0.014130, + -0.005890, -0.002625, -0.003693, -0.005676, -0.009369, -0.013184, + -0.013855, -0.010925, -0.013184, -0.020294, -0.029968, -0.031219, + -0.023285, -0.019897, -0.019623, -0.016327, -0.013855, -0.016724, + -0.020813, -0.016602, -0.010651, -0.011505, -0.016449, -0.019623, + -0.019440, -0.016449, -0.014465, -0.010742, -0.011658, -0.013184, + -0.011017, -0.009277, -0.010284, -0.015991, -0.017731, -0.017487, + -0.021362, -0.018799, -0.017151, -0.020599, -0.023529, -0.024567, + -0.026733, -0.024414, -0.019440, -0.019257, -0.022400, -0.019501, + -0.015320, -0.016235, -0.016815, -0.011505, -0.003601, -0.002014, + -0.007141, -0.013214, -0.009186, -0.001862, -0.000214, -0.003784, + -0.008972, -0.011871, -0.012512, -0.010986, -0.008789, -0.010010, + -0.014496, -0.018829, -0.018005, -0.018677, -0.015625, -0.011108, + -0.011902, -0.012970, -0.009338, -0.003265, -0.002136, -0.004608, + -0.001556, 0.001312, -0.000580, -0.000793, -0.001526, -0.003998, + -0.006653, -0.008698, -0.007599, -0.002319, -0.002045, -0.005280, + -0.009521, -0.008911, -0.003693, -0.002594, -0.002319, 0.003296, + 0.004761, -0.001495, -0.008972, -0.011627, -0.002655, 0.006042, + 0.002441, -0.002960, -0.006226, -0.012512, -0.013763, -0.004333, + 0.002838, 0.004913, 0.000854, -0.008057, -0.007050, 0.005707, + 0.013733, 0.010284, 0.002319, 0.001495, 0.007111, 0.002594, + -0.005615, -0.010315, -0.011383, -0.011566, -0.004608, 0.003754, + 0.001587, -0.008179, -0.013885, -0.005798, 0.004761, 0.004547, + -0.000122, -0.002960, -0.001862, 0.002350, 0.002075, -0.000458, + -0.002045, 0.000488, 0.003113, -0.000061, -0.005127, -0.008575, + -0.013306, -0.017914, -0.019897, -0.016449, -0.010254, -0.004974, + -0.003845, -0.003754, -0.007477, -0.011780, -0.007965, 0.001221, + 0.006195, 0.001282, -0.008453, -0.015778, -0.012177, -0.005676, + -0.002319, -0.003021, -0.009064, -0.014832, -0.016693, -0.014740, + -0.011658, -0.009583, -0.010559, -0.012421, -0.005920, -0.002563, + -0.007324, -0.013000, -0.013031, -0.008057, -0.007965, -0.011230, + -0.015594, -0.017822, -0.019257, -0.018280, -0.014008, -0.012604, + -0.016388, -0.018280, -0.014099, -0.008820, -0.009674, -0.010742, + -0.008087, -0.006287, -0.008667, -0.010742, -0.011505, -0.013489, + -0.010864, -0.007874, -0.013336, -0.020386, -0.019928, -0.016479, + -0.014038, -0.014313, -0.017303, -0.017822, -0.017761, -0.018524, + -0.015137, -0.011749, -0.012238, -0.014832, -0.018097, -0.018616, + -0.015564, -0.014252, -0.014923, -0.013306, -0.012817, -0.014618, + -0.017059, -0.019623, -0.019012, -0.016052, -0.011261, -0.007538, + -0.005249, -0.005554, -0.007416, -0.005096, -0.004547, -0.011108, + -0.017639, -0.018829, -0.017639, -0.018921, -0.019073, -0.016968, + -0.013031, -0.008179, -0.004395, -0.005066, -0.005341, -0.004059, + -0.004120, -0.005463, -0.008698, -0.007538, -0.003723, -0.001068, + -0.003448, -0.007507, -0.007477, -0.005096, -0.005493, -0.009277, + -0.014526, -0.014587, -0.009613, -0.004333, -0.003082, -0.003845, + -0.004089, -0.004730, -0.003082, 0.002167, 0.002960, -0.001587, + -0.004944, -0.004333, 0.000336, 0.002686, -0.000610, -0.007721, + -0.010895, -0.006561, -0.003143, 0.000214, 0.004242, 0.003082, + -0.001221, -0.002747, -0.000305, 0.004822, 0.005341, 0.000702, + -0.001343, -0.000519, -0.001678, -0.004944, -0.006104, -0.004913, + -0.003998, -0.005066, -0.005188, -0.002289, -0.000214, -0.000061, + -0.000031, 0.000732, 0.002563, 0.005432, 0.004272, 0.001160, + 0.000244, -0.000580, -0.001251, -0.002228, -0.003143, -0.001953, + -0.001740, -0.004669, -0.006592, -0.006805, -0.005981, -0.004425, + -0.005737, -0.005920, -0.004120, -0.001984, -0.000092, 0.000702, + 0.001282, 0.001068, 0.001862, 0.001923, 0.000763, -0.001038, + -0.004578, -0.007111, -0.007355, -0.005035, -0.003113, -0.004395, + -0.006500, -0.006958, -0.005951, -0.004181, -0.005341, -0.006348, + -0.004761, -0.003723, -0.003235, -0.003510, -0.002869, -0.002136, + -0.003784, -0.005585, -0.005463, -0.004761, -0.003998, -0.003876, + -0.004700, -0.004578, -0.005066, -0.006714, -0.007812, -0.007568, + -0.005737, -0.004028, -0.004517, -0.005341, -0.005981, -0.006317, + -0.005310, -0.005066, -0.006348, -0.006989, -0.005737, -0.005005, + -0.006042, -0.005920, -0.004150, -0.003784, -0.005127, -0.006653, + -0.006500, -0.003906, -0.002594, -0.003967, -0.005798, -0.006927, + -0.006927, -0.006836, -0.006378, -0.005188, -0.004059, -0.003906, + -0.004944, -0.005371, -0.005066, -0.004639, -0.004578, -0.004608, + -0.004150, -0.003815, -0.003326, -0.002777, -0.002686, -0.002991, + -0.003082, -0.003540, -0.003998, -0.003906, -0.004517, -0.005280, + -0.005371, -0.004730, -0.003723, -0.003693, -0.004028, -0.003845, + -0.003082, -0.002655, -0.002991, -0.003754, -0.003479, -0.002808, + -0.003174, -0.002991, -0.002563, -0.002136, -0.001678, -0.001526, + -0.002350, -0.003021, -0.003540, -0.003845, -0.003052, -0.002106, + -0.002258, -0.002869, -0.002838, -0.002777, -0.002319, -0.001434, + -0.000977, -0.000793, -0.001007, -0.001129, -0.001343, -0.001526, + -0.001892, -0.002441, -0.002960, -0.003021, -0.002197, -0.001587, + -0.001526, -0.001373, -0.001282, -0.001007, -0.000549, 0.000366, + 0.000763, 0.000336, -0.000244, -0.000854, -0.001190, -0.000946, + -0.000610, -0.000854, -0.001465, -0.001923, -0.001892, -0.001648, + -0.001068, -0.000366, -0.000061, -0.000244, -0.000580, -0.000671, + -0.000549, -0.000183, 0.000000, -0.000031, 0.000000, -0.000031, + -0.000336, -0.000519, -0.000610, -0.000671, -0.000519, -0.000671, + -0.000824, -0.000519, -0.000244, -0.000183, -0.000092, -0.000092, + -0.000244, -0.000366, -0.000366, -0.000305, -0.000153, -0.000092 +}; diff --git a/plugins/LadspaEffect/caps/waves/money.h b/plugins/LadspaEffect/caps/waves/money.h new file mode 100644 index 000000000..c20a11b66 --- /dev/null +++ b/plugins/LadspaEffect/caps/waves/money.h @@ -0,0 +1,2715 @@ +#ifndef _MONEY_H_ +#define _MONEY_H_ + +float money [] = { + 0.000000, 0.000000, 0.000000, 0.000226, 0.000454, + 0.000684, 0.000686, 0.000688, 0.000690, 0.000693, 0.000926, + 0.000929, 0.001165, 0.001169, 0.001173, 0.001412, 0.001416, + 0.001421, 0.001425, 0.001668, 0.001673, 0.001918, 0.001924, + 0.002171, 0.002178, 0.002670, 0.002678, 0.002687, 0.002940, + 0.003194, 0.003697, 0.003708, 0.003967, 0.004228, 0.004490, + 0.004754, 0.004266, 0.005034, 0.004796, 0.005064, 0.005078, + 0.005093, 0.005108, 0.005379, 0.005652, 0.005668, 0.005943, + 0.005960, 0.005977, 0.005994, 0.006011, 0.006553, 0.006309, + 0.006590, 0.006873, 0.007157, 0.007178, 0.007464, 0.007485, + 0.008042, 0.008064, 0.008087, 0.008109, 0.008402, 0.008426, + 0.008994, 0.009018, 0.008769, 0.009067, 0.009092, 0.009117, + 0.009141, 0.009166, 0.009469, 0.009494, 0.009799, 0.009545, + 0.009852, 0.009878, 0.010187, 0.010213, 0.010525, 0.010552, + 0.011152, 0.010894, 0.010922, 0.011239, 0.011268, 0.011297, + 0.011616, 0.011646, 0.011676, 0.011413, 0.011735, 0.012059, + 0.012385, 0.012416, 0.013040, 0.012776, 0.013106, 0.013106, + 0.012808, 0.013106, 0.013106, 0.013106, 0.013106, 0.013106, + 0.012808, 0.013106, 0.013106, 0.013106, 0.012808, 0.013403, + 0.012808, 0.013106, 0.013106, 0.013403, 0.013701, 0.013701, + 0.013701, 0.013403, 0.013403, 0.013403, 0.013403, 0.013701, + 0.013701, 0.013701, 0.013403, 0.013701, 0.013403, 0.013403, + 0.013106, 0.012808, 0.013106, 0.012808, 0.013106, 0.012808, + 0.012510, 0.012510, 0.012510, 0.012510, 0.012510, 0.012510, + 0.012212, 0.012510, 0.011914, 0.011914, 0.011616, 0.011616, + 0.011616, 0.011318, 0.011318, 0.011021, 0.011021, 0.010723, + 0.010723, 0.010127, 0.010127, 0.010127, 0.010127, 0.009829, + 0.010127, 0.009531, 0.009829, 0.009233, 0.009233, 0.008936, + 0.008638, 0.008340, 0.008340, 0.008042, 0.008042, 0.008042, + 0.007744, 0.007446, 0.007149, 0.007149, 0.006553, 0.006851, + 0.006553, 0.006255, 0.005957, 0.006255, 0.005659, 0.005659, + 0.005361, 0.005064, 0.004766, 0.004766, 0.004468, 0.004468, + 0.003872, 0.003872, 0.003276, 0.003276, 0.002681, 0.002383, + 0.002383, 0.001787, 0.001787, 0.001787, 0.001489, 0.001489, + 0.000596, 0.000894, 0.000596, 0.000298, 0.000298, 0.000000, + 0.000000, -0.000298, -0.000596, -0.000894, -0.000894, -0.001489, + -0.001787, -0.002085, -0.001787, -0.002681, -0.002681, -0.003276, + -0.003574, -0.003872, -0.004170, -0.004170, -0.004766, -0.004468, + -0.004468, -0.004766, -0.005361, -0.005361, -0.005659, -0.005957, + -0.006255, -0.006851, -0.006851, -0.007744, -0.007744, -0.008042, + -0.008340, -0.008638, -0.008638, -0.008936, -0.009233, -0.009531, + -0.009829, -0.009531, -0.009829, -0.009829, -0.009829, -0.010127, + -0.010723, -0.010723, -0.010723, -0.011318, -0.011318, -0.011616, + -0.011914, -0.012212, -0.012510, -0.012212, -0.012510, -0.012510, + -0.013106, -0.012808, -0.013403, -0.013403, -0.013403, -0.013701, + -0.013701, -0.013701, -0.013999, -0.014297, -0.014595, -0.014595, + -0.014297, -0.014893, -0.014893, -0.015191, -0.015191, -0.015488, + -0.015191, -0.015786, -0.015786, -0.016084, -0.016382, -0.016680, + -0.016680, -0.016978, -0.017276, -0.017276, -0.017573, -0.017573, + -0.018169, -0.017871, -0.018169, -0.018467, -0.018169, -0.018765, + -0.018765, -0.018467, -0.019063, -0.019361, -0.019361, -0.019361, + -0.019361, -0.019361, -0.019658, -0.019956, -0.019658, -0.019956, + -0.019956, -0.020254, -0.020552, -0.020552, -0.020552, -0.020552, + -0.020850, -0.021148, -0.021148, -0.020850, -0.020850, -0.021148, + -0.021446, -0.021743, -0.021446, -0.021446, -0.021743, -0.021743, + -0.021743, -0.022041, -0.022041, -0.022041, -0.022637, -0.022339, + -0.022935, -0.022339, -0.022339, -0.022041, -0.021743, -0.022339, + -0.022339, -0.022339, -0.022339, -0.022339, -0.022637, -0.022637, + -0.022637, -0.022637, -0.022637, -0.022935, -0.022637, -0.022637, + -0.022637, -0.022339, -0.022339, -0.022339, -0.022637, -0.022041, + -0.022339, -0.022041, -0.022041, -0.022637, -0.022339, -0.022339, + -0.022339, -0.022339, -0.022637, -0.022339, -0.022041, -0.022041, + -0.021743, -0.021743, -0.021743, -0.021446, -0.021446, -0.021446, + -0.021446, -0.021446, -0.021148, -0.020850, -0.020850, -0.020552, + -0.020850, -0.020254, -0.019956, -0.019361, -0.019361, -0.018765, + -0.018467, -0.018467, -0.017871, -0.017871, -0.017871, -0.017871, + -0.018169, -0.017871, -0.017573, -0.016978, -0.016382, -0.016084, + -0.016084, -0.016084, -0.015488, -0.015191, -0.015191, -0.014893, + -0.014297, -0.013701, -0.013403, -0.013106, -0.012808, -0.012510, + -0.011914, -0.011318, -0.010723, -0.010425, -0.010127, -0.008936, + -0.008936, -0.008340, -0.007744, -0.007744, -0.006851, -0.006553, + -0.006255, -0.005957, -0.005361, -0.004468, -0.003872, -0.003574, + -0.002979, -0.002383, -0.001489, -0.000894, -0.000298, 0.000000, + 0.000596, 0.000894, 0.001489, 0.002085, 0.002383, 0.002979, + 0.003872, 0.004170, 0.005064, 0.005659, 0.006553, 0.007149, + 0.007446, 0.008638, 0.009233, 0.009829, 0.010723, 0.011021, + 0.011616, 0.012212, 0.013106, 0.013701, 0.014297, 0.014893, + 0.015488, 0.016382, 0.017276, 0.017871, 0.018765, 0.019658, + 0.020552, 0.021148, 0.021743, 0.022637, 0.023233, 0.023828, + 0.024424, 0.025615, 0.026211, 0.027105, 0.027998, 0.027998, + 0.028892, 0.029488, 0.030381, 0.030977, 0.031573, 0.032168, + 0.032764, 0.033658, 0.034253, 0.034849, 0.035445, 0.035743, + 0.036636, 0.037232, 0.037530, 0.038125, 0.038721, 0.039317, + 0.040210, 0.040806, 0.041104, 0.041700, 0.041997, 0.042593, + 0.043189, 0.043487, 0.043785, 0.044380, 0.044678, 0.044976, + 0.045870, 0.046167, 0.046167, 0.046763, 0.047061, 0.047359, + 0.047061, 0.047657, 0.047955, 0.047955, 0.048550, 0.048550, + 0.048848, 0.048550, 0.048848, 0.048848, 0.048848, 0.049146, + 0.049146, 0.049742, 0.049742, 0.049742, 0.049742, 0.049444, + 0.049742, 0.049742, 0.049742, 0.049742, 0.049444, 0.049146, + 0.049146, 0.048848, 0.048848, 0.048550, 0.048550, 0.048550, + 0.048550, 0.048252, 0.048252, 0.048252, 0.047657, 0.047359, + 0.046763, 0.046763, 0.046167, 0.045870, 0.045274, 0.045274, + 0.044976, 0.044678, 0.044380, 0.043785, 0.043487, 0.042891, + 0.042593, 0.042295, 0.041997, 0.041402, 0.041104, 0.039913, + 0.039615, 0.038721, 0.038423, 0.037828, 0.037530, 0.036636, + 0.036338, 0.035445, 0.035147, 0.034551, 0.034253, 0.033658, + 0.033062, 0.032168, 0.031573, 0.030679, 0.030083, 0.029488, + 0.028892, 0.027998, 0.027403, 0.026807, 0.025913, 0.025318, + 0.024424, 0.023828, 0.023233, 0.022339, 0.021743, 0.020850, + 0.019956, 0.019361, 0.018467, 0.017573, 0.016978, 0.015786, + 0.015191, 0.014297, 0.013701, 0.012808, 0.012510, 0.011318, + 0.010425, 0.009531, 0.008936, 0.008042, 0.007149, 0.006553, + 0.005659, 0.005064, 0.003872, 0.002979, 0.002383, 0.001489, + 0.000298, -0.000298, -0.000894, -0.001489, -0.002681, -0.003276, + -0.004170, -0.005064, -0.005659, -0.006553, -0.007446, -0.008340, + -0.008936, -0.010425, -0.011021, -0.011914, -0.012808, -0.013403, + -0.014297, -0.015191, -0.016382, -0.016978, -0.017573, -0.018467, + -0.019361, -0.019956, -0.021148, -0.021743, -0.022637, -0.023531, + -0.023828, -0.025020, -0.025615, -0.026211, -0.026807, -0.027700, + -0.028296, -0.029190, -0.030083, -0.030977, -0.031573, -0.032466, + -0.033062, -0.033955, -0.034849, -0.035445, -0.036338, -0.036636, + -0.037530, -0.038423, -0.039019, -0.039615, -0.040210, -0.040806, + -0.041700, -0.042295, -0.043189, -0.043487, -0.044380, -0.044976, + -0.045870, -0.046465, -0.047061, -0.047657, -0.048252, -0.048848, + -0.049146, -0.050040, -0.050337, -0.050933, -0.051529, -0.051827, + -0.052125, -0.053316, -0.053614, -0.054210, -0.054805, -0.055699, + -0.055997, -0.056592, -0.056890, -0.057486, -0.058082, -0.058380, + -0.058975, -0.059273, -0.059571, -0.060464, -0.061060, -0.061656, + -0.062549, -0.062847, -0.063741, -0.064634, -0.065528, -0.065826, + -0.066422, -0.067613, -0.068209, -0.069102, -0.069400, -0.069996, + -0.070889, -0.072081, -0.072379, -0.073272, -0.073868, -0.074166, + -0.075059, -0.075655, -0.076251, -0.077144, -0.077740, -0.078336, + -0.079527, -0.079825, -0.080421, -0.081314, -0.082208, -0.082506, + -0.083399, -0.083995, -0.085186, -0.086378, -0.087867, -0.088463, + -0.089356, -0.090846, -0.091739, -0.092633, -0.093228, -0.093824, + -0.094718, -0.095611, -0.096207, -0.097101, -0.097696, -0.098590, + -0.099483, -0.100377, -0.101568, -0.102164, -0.103356, -0.104249, + -0.105143, -0.106036, -0.106334, -0.106930, -0.107823, -0.108717, + -0.109313, -0.109908, -0.109908, -0.110802, -0.110802, -0.111100, + -0.111100, -0.110504, -0.109908, -0.109313, -0.109313, -0.109610, + -0.109610, -0.108717, -0.108717, -0.107823, -0.108121, -0.107228, + -0.106334, -0.104547, -0.103058, -0.101866, -0.100377, -0.097994, + -0.095611, -0.092633, -0.089654, -0.087271, -0.083995, -0.080719, + -0.077442, -0.075357, -0.073272, -0.072379, -0.071187, -0.069996, + -0.068507, -0.066422, -0.063443, -0.059869, -0.055401, -0.050635, + -0.046763, -0.042295, -0.039019, -0.036040, -0.033360, -0.030381, + -0.027105, -0.024126, -0.019956, -0.016084, -0.011914, -0.007744, + -0.004468, -0.000894, 0.002085, 0.005957, 0.010127, 0.014893, + 0.019658, 0.024126, 0.029190, 0.033360, 0.037530, 0.040508, + 0.043487, 0.046167, 0.049146, 0.053018, 0.056592, 0.060762, + 0.064932, 0.069102, 0.073272, 0.076846, 0.080421, 0.083101, + 0.086378, 0.089059, 0.092335, 0.095313, 0.097696, 0.100377, + 0.103356, 0.106632, 0.109313, 0.112291, 0.114972, 0.117653, + 0.121823, 0.125099, 0.127780, 0.130460, 0.132843, 0.134630, + 0.136715, 0.138502, 0.139992, 0.142077, 0.143864, 0.145949, + 0.148332, 0.150417, 0.151906, 0.153097, 0.154289, 0.155480, + 0.156374, 0.157565, 0.158459, 0.159650, 0.160544, 0.161139, + 0.161437, 0.161437, 0.161139, 0.160544, 0.160246, 0.160246, + 0.160841, 0.161139, 0.161437, 0.161437, 0.162033, 0.161437, + 0.160841, 0.159650, 0.158756, 0.157863, 0.157565, 0.156374, + 0.156374, 0.155778, 0.155480, 0.155480, 0.155182, 0.154289, + 0.153693, 0.152502, 0.151310, 0.150417, 0.148927, 0.147438, + 0.145651, 0.144162, 0.142375, 0.140885, 0.138800, 0.137311, + 0.135822, 0.134035, 0.132843, 0.131056, 0.129269, 0.127482, + 0.125695, 0.123610, 0.121227, 0.119142, 0.117355, 0.114972, + 0.113185, 0.111100, 0.109015, 0.106930, 0.104845, 0.102760, + 0.101271, 0.099186, 0.097696, 0.096207, 0.094420, 0.092335, + 0.090846, 0.088761, 0.086378, 0.083697, 0.080719, 0.078634, + 0.076251, 0.073868, 0.072379, 0.070294, 0.067911, 0.065826, + 0.063741, 0.061060, 0.058380, 0.055997, 0.053018, 0.050635, + 0.048252, 0.045870, 0.043785, 0.041402, 0.039615, 0.037232, + 0.035147, 0.032764, 0.030381, 0.028296, 0.026509, 0.024126, + 0.022339, 0.020254, 0.018169, 0.016382, 0.014297, 0.012212, + 0.010127, 0.008340, 0.006553, 0.004468, 0.002681, 0.000596, + -0.000894, -0.002383, -0.003872, -0.005659, -0.007149, -0.008638, + -0.010425, -0.012212, -0.013701, -0.015488, -0.016978, -0.018765, + -0.020552, -0.021446, -0.022339, -0.023828, -0.024722, -0.025913, + -0.027105, -0.028296, -0.029488, -0.030679, -0.031870, -0.033062, + -0.033658, -0.034551, -0.035445, -0.035743, -0.036338, -0.036636, + -0.036934, -0.037232, -0.037828, -0.037828, -0.038125, -0.038423, + -0.039019, -0.039019, -0.039317, -0.039317, -0.039615, -0.039615, + -0.039913, -0.040210, -0.040508, -0.040806, -0.040806, -0.041104, + -0.040806, -0.040806, -0.040806, -0.040806, -0.041104, -0.041104, + -0.041104, -0.041402, -0.041402, -0.041402, -0.041402, -0.041402, + -0.041104, -0.040806, -0.039913, -0.039615, -0.039019, -0.039019, + -0.038125, -0.037828, -0.037232, -0.036934, -0.036934, -0.036338, + -0.036338, -0.035743, -0.035743, -0.035445, -0.035147, -0.034849, + -0.034253, -0.033955, -0.033658, -0.033658, -0.033062, -0.033062, + -0.032764, -0.032764, -0.032764, -0.032466, -0.032466, -0.032466, + -0.031870, -0.032168, -0.032168, -0.032466, -0.032168, -0.032168, + -0.032168, -0.032466, -0.032168, -0.032168, -0.032466, -0.032466, + -0.032764, -0.033062, -0.033360, -0.033658, -0.033955, -0.034253, + -0.034849, -0.035445, -0.035743, -0.036338, -0.036934, -0.037232, + -0.038125, -0.038721, -0.039913, -0.040806, -0.041402, -0.042593, + -0.043487, -0.044678, -0.045572, -0.047061, -0.048252, -0.049742, + -0.050933, -0.052125, -0.053614, -0.054805, -0.056295, -0.057188, + -0.058677, -0.059869, -0.061358, -0.062847, -0.064337, -0.065826, + -0.067911, -0.068804, -0.070889, -0.072379, -0.074464, -0.076251, + -0.077740, -0.079825, -0.081016, -0.083399, -0.085186, -0.087271, + -0.089059, -0.090846, -0.092931, -0.095313, -0.097994, -0.100377, + -0.102462, -0.104547, -0.107526, -0.111100, -0.114078, -0.116461, + -0.118546, -0.121525, -0.124503, -0.127184, -0.129567, -0.132545, + -0.135226, -0.138205, -0.141183, -0.144459, -0.148034, -0.151310, + -0.154289, -0.157863, -0.161139, -0.164416, -0.167990, -0.171266, + -0.174543, -0.177521, -0.179904, -0.181989, -0.184372, -0.186457, + -0.187946, -0.188840, -0.190329, -0.191818, -0.193605, -0.194797, + -0.195988, -0.196882, -0.196882, -0.193605, -0.187648, -0.181096, + -0.175734, -0.171564, -0.167990, -0.165607, -0.165607, -0.168586, + -0.173947, -0.179904, -0.182883, -0.181989, -0.177819, -0.172458, + -0.166799, -0.159948, -0.153097, -0.147438, -0.144757, -0.144459, + -0.145055, -0.143864, -0.141779, -0.137311, -0.132545, -0.126290, + -0.120035, -0.114972, -0.111695, -0.109610, -0.107823, -0.103951, + -0.097994, -0.090250, -0.080719, -0.070592, -0.060464, -0.052422, + -0.045870, -0.041997, -0.039615, -0.038423, -0.037530, -0.034253, + -0.028892, -0.021148, -0.012510, -0.004766, 0.002085, 0.007744, + 0.013106, 0.017573, 0.021743, 0.024722, 0.028296, 0.031870, + 0.036636, 0.041700, 0.045870, 0.049742, 0.053912, 0.057784, + 0.062847, 0.068507, 0.074166, 0.081016, 0.087569, 0.093824, + 0.098888, 0.103058, 0.106036, 0.108717, 0.112291, 0.115270, + 0.118844, 0.122418, 0.126886, 0.131950, 0.136715, 0.139992, + 0.142375, 0.144757, 0.147438, 0.151012, 0.153991, 0.157863, + 0.160841, 0.163820, 0.165011, 0.165905, 0.165607, 0.164416, + 0.163522, 0.163522, 0.165011, 0.167692, 0.170969, 0.174245, + 0.177521, 0.179308, 0.179904, 0.179308, 0.177521, 0.175436, + 0.174245, 0.173649, 0.174841, 0.176032, 0.178415, 0.179904, + 0.181393, 0.182585, 0.183478, 0.183181, 0.182585, 0.181393, + 0.180500, 0.180202, 0.179606, 0.179308, 0.177819, 0.176926, + 0.175734, 0.175139, 0.173649, 0.172160, 0.170969, 0.169777, + 0.168884, 0.167692, 0.166203, 0.164714, 0.163224, 0.162033, + 0.159650, 0.157267, 0.154587, 0.151906, 0.149523, 0.146842, + 0.144162, 0.141779, 0.139992, 0.139098, 0.138502, 0.137907, + 0.137311, 0.135822, 0.134332, 0.131950, 0.128971, 0.125397, + 0.121823, 0.117950, 0.114674, 0.112291, 0.110206, 0.108717, + 0.107823, 0.106632, 0.104845, 0.102760, 0.100079, 0.096505, + 0.092931, 0.089356, 0.086080, 0.083101, 0.080719, 0.077740, + 0.075655, 0.072974, 0.070889, 0.067911, 0.065230, 0.061954, + 0.058975, 0.056295, 0.054507, 0.052422, 0.050635, 0.048252, + 0.046465, 0.044082, 0.041402, 0.039317, 0.037232, 0.035147, + 0.032764, 0.030381, 0.027998, 0.026807, 0.025020, 0.022339, + 0.019956, 0.017276, 0.015191, 0.013106, 0.011021, 0.008042, + 0.005957, 0.003276, 0.001489, 0.000000, -0.001191, -0.002979, + -0.004170, -0.005064, -0.005064, -0.005659, -0.006255, -0.007744, + -0.009829, -0.011616, -0.013701, -0.015488, -0.016680, -0.017276, + -0.017276, -0.016680, -0.015191, -0.015191, -0.015191, -0.016382, + -0.017573, -0.018467, -0.019063, -0.020254, -0.020254, -0.019956, + -0.019063, -0.017871, -0.017276, -0.016978, -0.016978, -0.017573, + -0.017276, -0.016978, -0.015786, -0.014893, -0.013701, -0.012510, + -0.011616, -0.010425, -0.010127, -0.009829, -0.008936, -0.008340, + -0.007446, -0.006553, -0.005361, -0.004468, -0.003276, -0.002085, + -0.000596, 0.000298, 0.001489, 0.002681, 0.004468, 0.005361, + 0.005957, 0.006255, 0.006553, 0.008042, 0.008638, 0.009531, + 0.010127, 0.011914, 0.013403, 0.015191, 0.016978, 0.017871, + 0.019361, 0.019658, 0.020254, 0.020552, 0.021743, 0.022041, + 0.022935, 0.024424, 0.026211, 0.027403, 0.028892, 0.029488, + 0.029785, 0.030083, 0.030381, 0.030679, 0.030679, 0.031275, + 0.031573, 0.032764, 0.033360, 0.034253, 0.033955, 0.033360, + 0.033062, 0.032764, 0.032764, 0.032764, 0.032764, 0.032764, + 0.032764, 0.032466, 0.032764, 0.031870, 0.030977, 0.030381, + 0.029488, 0.029190, 0.028594, 0.027998, 0.027105, 0.026807, + 0.026211, 0.025913, 0.025318, 0.024722, 0.023828, 0.023233, + 0.022339, 0.021148, 0.019658, 0.018467, 0.017276, 0.015786, + 0.014893, 0.013701, 0.012510, 0.011616, 0.010723, 0.009531, + 0.007446, 0.005659, 0.003872, 0.002085, 0.000000, -0.001787, + -0.003574, -0.005361, -0.007446, -0.008936, -0.011021, -0.012808, + -0.014595, -0.016382, -0.018467, -0.020254, -0.022339, -0.024126, + -0.026211, -0.027700, -0.029190, -0.031275, -0.033360, -0.035743, + -0.037828, -0.040210, -0.042593, -0.044678, -0.047061, -0.049146, + -0.051231, -0.053018, -0.055103, -0.057188, -0.059869, -0.062252, + -0.064634, -0.066719, -0.069102, -0.071187, -0.073570, -0.075655, + -0.078038, -0.080123, -0.082506, -0.084293, -0.086974, -0.089356, + -0.091739, -0.094420, -0.096505, -0.099186, -0.101568, -0.104249, + -0.106632, -0.108717, -0.111100, -0.113185, -0.114972, -0.117057, + -0.118844, -0.121227, -0.123014, -0.125397, -0.127780, -0.130758, + -0.133141, -0.135524, -0.138502, -0.140290, -0.143268, -0.145949, + -0.148927, -0.151608, -0.154289, -0.156969, -0.159948, -0.162926, + -0.165011, -0.167692, -0.170373, -0.173351, -0.176330, -0.179308, + -0.182585, -0.185563, -0.189138, -0.193010, -0.195988, -0.198967, + -0.201350, -0.204328, -0.207605, -0.211179, -0.214157, -0.217136, + -0.220412, -0.223391, -0.226072, -0.227859, -0.229348, -0.231135, + -0.233220, -0.234709, -0.236199, -0.237688, -0.240071, -0.241858, + -0.242454, -0.241560, -0.239475, -0.237390, -0.233518, -0.226965, + -0.218923, -0.211775, -0.207605, -0.205818, -0.204924, -0.203733, + -0.204328, -0.207307, -0.212072, -0.214753, -0.213264, -0.208200, + -0.201350, -0.194797, -0.188244, -0.181096, -0.173351, -0.167692, + -0.164416, -0.163522, -0.163224, -0.160841, -0.156672, -0.151310, + -0.144757, -0.138502, -0.132545, -0.127482, -0.122716, -0.117950, + -0.112589, -0.106036, -0.097994, -0.087569, -0.076549, -0.065528, + -0.055699, -0.048848, -0.043785, -0.040210, -0.037828, -0.035743, + -0.033062, -0.027700, -0.018765, -0.008042, 0.002681, 0.011914, + 0.019361, 0.025615, 0.030977, 0.035445, 0.038721, 0.041402, + 0.044380, 0.049146, 0.054507, 0.059869, 0.065230, 0.070294, + 0.075655, 0.081314, 0.087569, 0.093228, 0.099186, 0.105441, + 0.112291, 0.118546, 0.123312, 0.126588, 0.129567, 0.131950, + 0.134928, 0.138205, 0.141481, 0.145055, 0.150119, 0.155480, + 0.161139, 0.165309, 0.168288, 0.170969, 0.173351, 0.176628, + 0.179011, 0.181096, 0.182287, 0.183478, 0.184074, 0.184968, + 0.184968, 0.184074, 0.183776, 0.184670, 0.186755, 0.190031, + 0.193010, 0.195690, 0.196882, 0.196882, 0.196286, 0.194499, + 0.191818, 0.188840, 0.187351, 0.187053, 0.188840, 0.190925, + 0.192712, 0.194499, 0.195393, 0.196286, 0.195690, 0.194797, + 0.192712, 0.190627, 0.188840, 0.187648, 0.186755, 0.185563, + 0.184670, 0.183478, 0.181989, 0.180798, 0.179606, 0.177819, + 0.176628, 0.175139, 0.173947, 0.172756, 0.171266, 0.168884, + 0.166501, 0.164118, 0.161139, 0.157863, 0.154884, 0.151608, + 0.148629, 0.146544, 0.144757, 0.143268, 0.142375, 0.141779, + 0.141183, 0.139992, 0.138205, 0.135524, 0.132843, 0.129567, + 0.125992, 0.121823, 0.118248, 0.115568, 0.113483, 0.111993, + 0.110504, 0.109908, 0.108717, 0.107228, 0.105143, 0.102164, + 0.098292, 0.094420, 0.090250, 0.086974, 0.084293, 0.081910, + 0.080123, 0.078634, 0.077442, 0.076846, 0.075357, 0.073570, + 0.070592, 0.067613, 0.065230, 0.063145, 0.060464, 0.057784, + 0.055401, 0.053316, 0.051529, 0.049146, 0.046167, 0.043487, + 0.040508, 0.038125, 0.036636, 0.035147, 0.033658, 0.032764, + 0.031870, 0.030977, 0.030083, 0.027998, 0.025615, 0.022935, + 0.020254, 0.017573, 0.015786, 0.014893, 0.014893, 0.014595, + 0.014893, 0.015191, 0.014595, 0.013701, 0.011914, 0.009829, + 0.007446, 0.005659, 0.004170, 0.002681, 0.002085, 0.001489, + 0.001787, 0.002085, 0.002383, 0.002979, 0.003276, 0.003276, + 0.002979, 0.002979, 0.002383, 0.000894, 0.000298, -0.000596, + -0.001489, -0.001489, -0.000894, 0.000000, 0.001191, 0.002681, + 0.003574, 0.004766, 0.005659, 0.006553, 0.007149, 0.008042, + 0.008638, 0.010425, 0.011616, 0.012808, 0.013403, 0.013106, + 0.012808, 0.012510, 0.012510, 0.013106, 0.014297, 0.015786, + 0.017573, 0.019658, 0.021148, 0.021743, 0.021743, 0.021446, + 0.021148, 0.020552, 0.019956, 0.020254, 0.020552, 0.021446, + 0.022637, 0.023828, 0.025020, 0.026211, 0.027105, 0.027403, + 0.027998, 0.028296, 0.028296, 0.028296, 0.028296, 0.028296, + 0.029190, 0.029785, 0.030977, 0.031275, 0.032168, 0.032466, + 0.032466, 0.032764, 0.032764, 0.033062, 0.032764, 0.032764, + 0.032168, 0.031573, 0.030977, 0.030381, 0.029488, 0.028594, + 0.027700, 0.027105, 0.026211, 0.025615, 0.024722, 0.023828, + 0.022935, 0.022041, 0.021148, 0.020552, 0.019658, 0.018169, + 0.016680, 0.014893, 0.013106, 0.011616, 0.010127, 0.008936, + 0.008638, 0.008042, 0.007744, 0.006851, 0.006255, 0.004766, + 0.002681, 0.000596, -0.001191, -0.003276, -0.005064, -0.006851, + -0.008340, -0.009829, -0.011616, -0.013403, -0.015488, -0.017573, + -0.019658, -0.021743, -0.024126, -0.026509, -0.029190, -0.031870, + -0.033955, -0.036636, -0.039019, -0.041402, -0.044082, -0.046465, + -0.048848, -0.050635, -0.053018, -0.055103, -0.056890, -0.059273, + -0.061060, -0.062847, -0.065230, -0.067613, -0.070592, -0.073570, + -0.075953, -0.078931, -0.081612, -0.083995, -0.086378, -0.088463, + -0.090250, -0.092335, -0.094122, -0.096505, -0.098590, -0.101271, + -0.103653, -0.106334, -0.109908, -0.112887, -0.116163, -0.119142, + -0.121525, -0.124205, -0.126886, -0.129269, -0.131652, -0.133737, + -0.135822, -0.138205, -0.141183, -0.143566, -0.145949, -0.148629, + -0.151608, -0.154587, -0.157267, -0.159948, -0.162926, -0.165607, + -0.168288, -0.170671, -0.172756, -0.175139, -0.177521, -0.180202, + -0.183478, -0.185563, -0.188244, -0.191223, -0.194499, -0.198371, + -0.201350, -0.204924, -0.207903, -0.212072, -0.215945, -0.220115, + -0.223689, -0.226667, -0.230539, -0.235305, -0.239773, -0.244539, + -0.248411, -0.253474, -0.258538, -0.263006, -0.266282, -0.268665, + -0.271346, -0.273728, -0.276111, -0.277898, -0.279685, -0.280281, + -0.278792, -0.275515, -0.268665, -0.258836, -0.248113, -0.238582, + -0.232029, -0.228454, -0.227859, -0.231135, -0.238284, -0.247517, + -0.255261, -0.257942, -0.254666, -0.246624, -0.235901, -0.224582, + -0.213860, -0.205222, -0.200158, -0.198967, -0.201350, -0.204328, + -0.204924, -0.202243, -0.195690, -0.187648, -0.179904, -0.173054, + -0.168586, -0.165011, -0.162629, -0.159650, -0.154587, -0.145651, + -0.132843, -0.117950, -0.102462, -0.089356, -0.080123, -0.074464, + -0.072081, -0.070889, -0.069698, -0.067315, -0.061060, -0.050635, + -0.036934, -0.022637, -0.009829, 0.000000, 0.007446, 0.012808, + 0.016978, 0.020254, 0.023531, 0.027403, 0.032466, 0.039317, + 0.045572, 0.051529, 0.056592, 0.061954, 0.067315, 0.073868, + 0.081612, 0.089952, 0.098888, 0.108419, 0.115865, 0.121823, + 0.125397, 0.127482, 0.128971, 0.131354, 0.134630, 0.139694, + 0.146544, 0.153693, 0.161735, 0.168586, 0.174543, 0.178117, + 0.180798, 0.183181, 0.186457, 0.190329, 0.194499, 0.198073, + 0.200456, 0.202243, 0.202839, 0.202243, 0.201052, 0.200158, + 0.200456, 0.203435, 0.207605, 0.212966, 0.217434, 0.220115, + 0.221306, 0.220115, 0.217434, 0.213562, 0.209392, 0.206413, + 0.205520, 0.206711, 0.210285, 0.213860, 0.217136, 0.219817, + 0.221604, 0.221604, 0.220710, 0.218030, 0.215349, 0.212668, + 0.210583, 0.209392, 0.208498, 0.207903, 0.207307, 0.206711, + 0.205818, 0.204626, 0.203137, 0.201945, 0.200754, 0.199265, + 0.197775, 0.196286, 0.193903, 0.191520, 0.188542, 0.185266, + 0.181393, 0.178117, 0.174543, 0.171564, 0.168586, 0.166203, + 0.164416, 0.163224, 0.162629, 0.162331, 0.161139, 0.160246, + 0.157863, 0.154884, 0.151310, 0.146842, 0.142077, 0.137311, + 0.133439, 0.130162, 0.128375, 0.127184, 0.126588, 0.125992, + 0.125397, 0.123908, 0.121227, 0.116759, 0.111695, 0.106334, + 0.100675, 0.095909, 0.092037, 0.089059, 0.086974, 0.086080, + 0.083995, 0.082506, 0.080123, 0.076846, 0.073272, 0.069102, + 0.065230, 0.061358, 0.058677, 0.055699, 0.053614, 0.051529, + 0.050337, 0.048252, 0.045274, 0.041402, 0.038423, 0.036636, + 0.034253, 0.032764, 0.030679, 0.029785, 0.028594, 0.027700, + 0.025913, 0.024126, 0.021148, 0.017573, 0.014297, 0.011318, + 0.008638, 0.006851, 0.005361, 0.004766, 0.004766, 0.004766, + 0.004170, 0.003276, 0.002085, 0.000298, -0.001191, -0.002979, + -0.004766, -0.005957, -0.006851, -0.007446, -0.006851, -0.006553, + -0.006255, -0.006255, -0.005957, -0.005659, -0.005659, -0.006255, + -0.006851, -0.007744, -0.008042, -0.007744, -0.007446, -0.006851, + -0.005957, -0.005064, -0.003276, -0.001489, -0.000298, 0.000298, + 0.000596, 0.001489, 0.002383, 0.003574, 0.005064, 0.007149, + 0.008638, 0.010723, 0.012212, 0.012808, 0.013106, 0.013403, + 0.013999, 0.014893, 0.016084, 0.017276, 0.019063, 0.021148, + 0.022935, 0.024424, 0.025913, 0.026807, 0.027403, 0.027998, + 0.028296, 0.028594, 0.029190, 0.030381, 0.031573, 0.033360, + 0.035445, 0.037530, 0.039019, 0.040508, 0.041402, 0.041997, + 0.042295, 0.043189, 0.043189, 0.043785, 0.044678, 0.045870, + 0.047359, 0.048252, 0.049444, 0.049742, 0.050040, 0.050040, + 0.050635, 0.049742, 0.049742, 0.049444, 0.049444, 0.049444, + 0.048848, 0.048252, 0.048252, 0.047955, 0.047657, 0.047061, + 0.046167, 0.045274, 0.044082, 0.043189, 0.041997, 0.041700, + 0.040806, 0.039913, 0.039317, 0.038423, 0.037232, 0.035743, + 0.033658, 0.031870, 0.030083, 0.028594, 0.026807, 0.025913, + 0.024722, 0.023531, 0.022041, 0.020850, 0.018765, 0.016382, + 0.014297, 0.011616, 0.009531, 0.007446, 0.005361, 0.003276, + 0.001787, 0.000000, -0.001787, -0.003574, -0.005957, -0.008638, + -0.011021, -0.013701, -0.016680, -0.019361, -0.022339, -0.024722, + -0.026807, -0.029190, -0.031573, -0.033955, -0.036338, -0.039019, + -0.041700, -0.044380, -0.047061, -0.049742, -0.052422, -0.054805, + -0.057784, -0.060167, -0.062847, -0.065528, -0.068209, -0.071187, + -0.073868, -0.077144, -0.080123, -0.082506, -0.085186, -0.087867, + -0.090250, -0.092931, -0.095313, -0.097994, -0.101271, -0.104249, + -0.107228, -0.110504, -0.113185, -0.115865, -0.118546, -0.120929, + -0.123610, -0.125992, -0.128673, -0.131354, -0.134035, -0.136715, + -0.139694, -0.142672, -0.145949, -0.148332, -0.151012, -0.153395, + -0.156374, -0.159352, -0.162629, -0.165607, -0.167990, -0.170373, + -0.173649, -0.176330, -0.179904, -0.182585, -0.185266, -0.188244, + -0.190925, -0.194499, -0.197775, -0.200754, -0.203137, -0.205818, + -0.209094, -0.212668, -0.216540, -0.219221, -0.222497, -0.225774, + -0.230242, -0.234412, -0.237986, -0.241858, -0.246028, -0.250496, + -0.254964, -0.259729, -0.264197, -0.269261, -0.274324, -0.279983, + -0.284451, -0.288323, -0.292195, -0.296067, -0.300237, -0.303216, + -0.305897, -0.307684, -0.309769, -0.310067, -0.309173, -0.303812, + -0.293982, -0.282366, -0.271643, -0.262112, -0.255261, -0.250198, + -0.249602, -0.254070, -0.263601, -0.274324, -0.282664, -0.284153, + -0.278792, -0.268963, -0.256751, -0.243943, -0.231135, -0.220710, + -0.214753, -0.214753, -0.218327, -0.222795, -0.223987, -0.220115, + -0.212668, -0.204030, -0.195393, -0.187351, -0.181096, -0.176926, + -0.174245, -0.172160, -0.167394, -0.157267, -0.142077, -0.124503, + -0.108121, -0.094718, -0.084293, -0.077442, -0.074166, -0.074166, + -0.074464, -0.072379, -0.064337, -0.050635, -0.033658, -0.016978, + -0.002383, 0.009233, 0.018467, 0.025020, 0.028594, 0.030083, + 0.031870, 0.036040, 0.042891, 0.051529, 0.058975, 0.065826, + 0.072379, 0.078931, 0.085782, 0.092633, 0.100377, 0.108717, + 0.117950, 0.127780, 0.136120, 0.141779, 0.144757, 0.145353, + 0.146544, 0.149225, 0.153693, 0.159352, 0.166799, 0.175734, + 0.185266, 0.193605, 0.199563, 0.202541, 0.203733, 0.205222, + 0.207903, 0.211775, 0.216242, 0.220710, 0.224880, 0.228454, + 0.230242, 0.229646, 0.227263, 0.224582, 0.224582, 0.227263, + 0.232327, 0.237986, 0.242751, 0.246624, 0.247815, 0.247219, + 0.243347, 0.237688, 0.231135, 0.226667, 0.225178, 0.227263, + 0.231731, 0.236497, 0.241560, 0.245134, 0.246921, 0.246326, + 0.243347, 0.238582, 0.233816, 0.229348, 0.227263, 0.225476, + 0.224880, 0.224582, 0.224284, 0.224582, 0.223987, 0.223391, + 0.221902, 0.219817, 0.218625, 0.216540, 0.214455, 0.211477, + 0.208498, 0.205222, 0.201945, 0.198073, 0.194499, 0.190627, + 0.187946, 0.184968, 0.183181, 0.180798, 0.178415, 0.176628, + 0.174841, 0.173947, 0.172756, 0.171266, 0.168884, 0.165905, + 0.162629, 0.158161, 0.153395, 0.148034, 0.143268, 0.139396, + 0.137311, 0.136715, 0.136715, 0.136715, 0.136120, 0.134928, + 0.131950, 0.127184, 0.120929, 0.114078, 0.106632, 0.101568, + 0.097398, 0.095016, 0.094122, 0.093824, 0.094420, 0.094122, + 0.093228, 0.089356, 0.085484, 0.080719, 0.075655, 0.070889, + 0.067315, 0.064634, 0.062549, 0.061656, 0.060464, 0.059869, + 0.058380, 0.056295, 0.053614, 0.051231, 0.048848, 0.046763, + 0.044380, 0.042295, 0.040806, 0.038721, 0.036338, 0.033360, + 0.030083, 0.027403, 0.025318, 0.023531, 0.022339, 0.021446, + 0.021148, 0.021446, 0.022041, 0.021446, 0.019956, 0.018169, + 0.016382, 0.014297, 0.011914, 0.009233, 0.007149, 0.005361, + 0.004766, 0.004468, 0.005361, 0.006255, 0.008340, 0.009233, + 0.010723, 0.011021, 0.010723, 0.008936, 0.006553, 0.003574, + 0.001489, 0.000000, -0.000298, 0.000596, 0.002681, 0.006553, + 0.010127, 0.012510, 0.013701, 0.014595, 0.013999, 0.013701, + 0.012510, 0.011616, 0.011021, 0.011318, 0.012808, 0.014595, + 0.016382, 0.017871, 0.018765, 0.019658, 0.020552, 0.021446, + 0.022339, 0.023233, 0.024424, 0.025913, 0.027403, 0.028296, + 0.028892, 0.028892, 0.028296, 0.027998, 0.028296, 0.027998, + 0.028296, 0.029488, 0.031275, 0.033360, 0.035743, 0.036934, + 0.037828, 0.037828, 0.037530, 0.036934, 0.035445, 0.034551, + 0.033360, 0.033360, 0.033955, 0.034551, 0.035445, 0.036636, + 0.037828, 0.039019, 0.039913, 0.039913, 0.039317, 0.037828, + 0.036338, 0.034253, 0.032764, 0.031870, 0.031275, 0.030977, + 0.031275, 0.032168, 0.032466, 0.032466, 0.031573, 0.030679, + 0.029190, 0.027403, 0.025318, 0.023233, 0.021446, 0.020254, + 0.018765, 0.017573, 0.015786, 0.013999, 0.011914, 0.009829, + 0.007744, 0.005659, 0.003872, 0.002085, 0.000894, -0.000596, + -0.002383, -0.004468, -0.007149, -0.009829, -0.012808, -0.015786, + -0.018765, -0.020850, -0.022637, -0.023828, -0.025020, -0.026211, + -0.027105, -0.028892, -0.031275, -0.034253, -0.037232, -0.040508, + -0.044082, -0.047359, -0.050635, -0.053018, -0.055997, -0.058082, + -0.060464, -0.062252, -0.064039, -0.066124, -0.068804, -0.071485, + -0.074464, -0.078038, -0.081612, -0.084591, -0.088463, -0.091441, + -0.094122, -0.096803, -0.099483, -0.102164, -0.104547, -0.106930, + -0.109313, -0.112291, -0.115270, -0.117950, -0.121227, -0.123908, + -0.127184, -0.130162, -0.133737, -0.137013, -0.139992, -0.142672, + -0.145651, -0.148629, -0.151310, -0.153991, -0.156374, -0.158756, + -0.161735, -0.164714, -0.167990, -0.171564, -0.174841, -0.178415, + -0.182287, -0.186159, -0.189733, -0.192414, -0.195095, -0.198073, + -0.200754, -0.203733, -0.206711, -0.209690, -0.213264, -0.216838, + -0.221306, -0.226072, -0.229944, -0.233220, -0.236497, -0.240964, + -0.245134, -0.248113, -0.250794, -0.254368, -0.258240, -0.262708, + -0.267176, -0.272239, -0.277005, -0.282366, -0.287430, -0.293089, + -0.299642, -0.307088, -0.313939, -0.319002, -0.323470, -0.328831, + -0.333895, -0.336278, -0.337171, -0.337171, -0.334491, -0.327938, + -0.320492, -0.313939, -0.307088, -0.296067, -0.284749, -0.277600, + -0.277600, -0.281175, -0.285047, -0.289515, -0.295174, -0.300535, + -0.302918, -0.299642, -0.290110, -0.276409, -0.261814, -0.250794, + -0.243347, -0.237688, -0.234114, -0.234412, -0.237688, -0.240964, + -0.239773, -0.233816, -0.224284, -0.214753, -0.206711, -0.199265, + -0.193308, -0.188244, -0.184074, -0.177521, -0.169181, -0.158161, + -0.144459, -0.127482, -0.110504, -0.097696, -0.091144, -0.087867, + -0.085484, -0.082208, -0.077144, -0.069698, -0.058677, -0.043189, + -0.024722, -0.006553, 0.008340, 0.018467, 0.023828, 0.027403, + 0.030381, 0.033062, 0.035743, 0.040508, 0.047955, 0.058082, + 0.069102, 0.078931, 0.086974, 0.094420, 0.101568, 0.109313, + 0.116461, 0.124205, 0.131950, 0.139396, 0.145949, 0.151906, + 0.155778, 0.157565, 0.159650, 0.163522, 0.170373, 0.178713, + 0.187351, 0.195393, 0.204328, 0.210881, 0.215945, 0.217732, + 0.219221, 0.220412, 0.222795, 0.227263, 0.232327, 0.237688, + 0.241262, 0.244539, 0.246028, 0.246028, 0.244836, 0.243943, + 0.244539, 0.247815, 0.252283, 0.257346, 0.261516, 0.264197, + 0.263601, 0.260623, 0.255857, 0.250794, 0.246624, 0.243645, + 0.244539, 0.248113, 0.254070, 0.259729, 0.263899, 0.265984, + 0.265686, 0.263006, 0.257644, 0.251389, 0.245730, 0.241560, + 0.239177, 0.238879, 0.239475, 0.240667, 0.240964, 0.240964, + 0.240071, 0.238582, 0.235901, 0.232624, 0.229348, 0.226667, + 0.223689, 0.220412, 0.217136, 0.213860, 0.210881, 0.207903, + 0.205222, 0.202839, 0.199860, 0.197478, 0.195393, 0.193308, + 0.190925, 0.188840, 0.186457, 0.184670, 0.182287, 0.180202, + 0.177223, 0.173947, 0.170671, 0.166799, 0.162629, 0.158459, + 0.154289, 0.151310, 0.148927, 0.147736, 0.146842, 0.145949, + 0.144459, 0.141183, 0.137311, 0.131652, 0.125397, 0.118248, + 0.111695, 0.106334, 0.103356, 0.101271, 0.100973, 0.100377, + 0.100079, 0.098888, 0.095909, 0.091739, 0.086378, 0.080123, + 0.074762, 0.070294, 0.067613, 0.065826, 0.064634, 0.063443, + 0.063443, 0.062847, 0.060464, 0.056890, 0.053316, 0.050040, + 0.047359, 0.045870, 0.044678, 0.043487, 0.042295, 0.041402, + 0.039913, 0.038423, 0.035445, 0.031870, 0.028594, 0.026509, + 0.025615, 0.024424, 0.023233, 0.021743, 0.020850, 0.020254, + 0.018765, 0.016978, 0.014893, 0.013106, 0.012510, 0.012510, + 0.012212, 0.011021, 0.010127, 0.009829, 0.010425, 0.010723, + 0.011318, 0.011318, 0.012212, 0.012510, 0.013403, 0.012510, + 0.011914, 0.010425, 0.009233, 0.008340, 0.009531, 0.011318, + 0.013403, 0.015786, 0.017871, 0.020254, 0.021446, 0.021148, + 0.019956, 0.018765, 0.017871, 0.018169, 0.018467, 0.019658, + 0.020552, 0.022935, 0.025020, 0.026509, 0.027998, 0.028296, + 0.028594, 0.029190, 0.029785, 0.030977, 0.031573, 0.032764, + 0.034551, 0.036040, 0.037232, 0.038125, 0.038423, 0.038423, + 0.039019, 0.039615, 0.040508, 0.041700, 0.042593, 0.043487, + 0.044380, 0.045274, 0.044976, 0.045274, 0.044678, 0.044380, + 0.044082, 0.044082, 0.044082, 0.044082, 0.044082, 0.043785, + 0.043487, 0.043487, 0.043487, 0.043189, 0.043785, 0.043487, + 0.043189, 0.042593, 0.041700, 0.040508, 0.039019, 0.038423, + 0.037530, 0.037232, 0.037232, 0.037530, 0.037232, 0.036934, + 0.036040, 0.034849, 0.032764, 0.030977, 0.028892, 0.026807, + 0.024722, 0.022935, 0.021743, 0.020552, 0.019063, 0.017573, + 0.015488, 0.012808, 0.010127, 0.007446, 0.004468, 0.002085, + -0.000596, -0.002979, -0.005361, -0.007446, -0.010127, -0.012510, + -0.015191, -0.017871, -0.020254, -0.022339, -0.024722, -0.026509, + -0.028594, -0.030679, -0.033360, -0.035743, -0.038125, -0.041104, + -0.043487, -0.046465, -0.048848, -0.051231, -0.053614, -0.055997, + -0.058677, -0.061060, -0.064039, -0.066719, -0.069698, -0.072677, + -0.075655, -0.078336, -0.081016, -0.084293, -0.087271, -0.090548, + -0.094122, -0.097696, -0.100973, -0.104249, -0.106930, -0.110206, + -0.112589, -0.115270, -0.118248, -0.121227, -0.124205, -0.127482, + -0.131056, -0.134630, -0.138205, -0.141183, -0.144459, -0.147438, + -0.149821, -0.152799, -0.155778, -0.158459, -0.161735, -0.165011, + -0.168288, -0.171862, -0.174841, -0.178415, -0.181393, -0.184670, + -0.187053, -0.190031, -0.193605, -0.196882, -0.200158, -0.203137, + -0.206711, -0.211179, -0.214753, -0.218327, -0.221008, -0.224880, + -0.228454, -0.232327, -0.235901, -0.239475, -0.243049, -0.247517, + -0.251985, -0.256751, -0.260325, -0.264197, -0.268665, -0.273431, + -0.277005, -0.279983, -0.283558, -0.288621, -0.293982, -0.299642, + -0.305003, -0.311258, -0.318407, -0.325853, -0.333299, -0.340746, + -0.347894, -0.353851, -0.358021, -0.361595, -0.365170, -0.366361, + -0.363978, -0.356532, -0.347001, -0.338065, -0.329725, -0.319598, + -0.307982, -0.298450, -0.295770, -0.299642, -0.305003, -0.309173, + -0.313343, -0.317811, -0.321087, -0.320194, -0.311854, -0.297855, + -0.282366, -0.269856, -0.260921, -0.254368, -0.249602, -0.247517, + -0.248411, -0.251091, -0.251985, -0.249602, -0.242454, -0.232922, + -0.223391, -0.215051, -0.208796, -0.202839, -0.196584, -0.188840, + -0.180202, -0.170075, -0.158459, -0.143566, -0.126290, -0.111100, + -0.101271, -0.096207, -0.092335, -0.087867, -0.081612, -0.074762, + -0.065230, -0.052422, -0.034551, -0.014595, 0.003276, 0.017573, + 0.027105, 0.033658, 0.037530, 0.040210, 0.041700, 0.044380, + 0.050040, 0.057486, 0.067911, 0.079825, 0.091441, 0.102462, + 0.111993, 0.121227, 0.130162, 0.138205, 0.144459, 0.149225, + 0.152799, 0.156672, 0.161139, 0.165011, 0.168884, 0.172756, + 0.179904, 0.189138, 0.198967, 0.207009, 0.213860, 0.220412, + 0.225774, 0.229050, 0.230242, 0.230837, 0.232922, 0.237092, + 0.242454, 0.247517, 0.251985, 0.255261, 0.258240, 0.259729, + 0.259729, 0.259431, 0.259729, 0.261516, 0.264793, 0.268665, + 0.272537, 0.275515, 0.276707, 0.275218, 0.271941, 0.267473, + 0.263303, 0.259729, 0.258538, 0.259729, 0.263899, 0.269856, + 0.275515, 0.279388, 0.280281, 0.279090, 0.275218, 0.269558, + 0.262112, 0.254964, 0.249602, 0.246326, 0.246028, 0.246326, + 0.248113, 0.249900, 0.251389, 0.251985, 0.250496, 0.247219, + 0.242454, 0.237092, 0.231433, 0.226072, 0.221008, 0.216540, + 0.213860, 0.212072, 0.210285, 0.209094, 0.207903, 0.206413, + 0.204626, 0.201648, 0.197775, 0.194499, 0.190925, 0.187946, + 0.185861, 0.183776, 0.181393, 0.179606, 0.177223, 0.174245, + 0.170373, 0.166501, 0.162331, 0.158459, 0.155480, 0.152799, + 0.151012, 0.149821, 0.148629, 0.146544, 0.143268, 0.139098, + 0.133141, 0.126886, 0.119440, 0.112887, 0.107823, 0.104547, + 0.102760, 0.102164, 0.102462, 0.102462, 0.102164, 0.100973, + 0.097994, 0.093228, 0.087867, 0.082208, 0.077442, 0.072974, + 0.069698, 0.067315, 0.066124, 0.065826, 0.065230, 0.065230, + 0.064039, 0.061954, 0.059273, 0.055997, 0.052422, 0.048848, + 0.045274, 0.041700, 0.039317, 0.038125, 0.037530, 0.036934, + 0.036040, 0.034551, 0.033360, 0.031275, 0.028594, 0.025615, + 0.023531, 0.021743, 0.021148, 0.020850, 0.021148, 0.020850, + 0.020254, 0.019361, 0.017871, 0.015786, 0.013701, 0.011914, + 0.010425, 0.010127, 0.011318, 0.013106, 0.014893, 0.016084, + 0.017276, 0.017276, 0.016680, 0.014595, 0.011914, 0.009531, + 0.008042, 0.007744, 0.008042, 0.010127, 0.012510, 0.015786, + 0.018169, 0.020254, 0.020850, 0.020552, 0.019361, 0.017871, + 0.016382, 0.015488, 0.016084, 0.017276, 0.019063, 0.022041, + 0.025020, 0.027998, 0.030083, 0.031573, 0.032466, 0.033062, + 0.033062, 0.033360, 0.033062, 0.033955, 0.035147, 0.036934, + 0.039019, 0.041104, 0.041997, 0.042891, 0.043487, 0.043487, + 0.043189, 0.042593, 0.042295, 0.042593, 0.042891, 0.043189, + 0.043785, 0.044082, 0.044380, 0.043785, 0.042593, 0.041700, + 0.040210, 0.039019, 0.038721, 0.038721, 0.039019, 0.039913, + 0.040508, 0.041700, 0.041997, 0.041997, 0.040806, 0.039913, + 0.037828, 0.036636, 0.035147, 0.034551, 0.034253, 0.034253, + 0.034551, 0.034849, 0.035445, 0.035147, 0.034253, 0.032168, + 0.030381, 0.027105, 0.024424, 0.021446, 0.018765, 0.016978, + 0.015191, 0.013999, 0.012808, 0.011021, 0.009233, 0.007149, + 0.003872, 0.000596, -0.002681, -0.005659, -0.009233, -0.011914, + -0.014297, -0.016680, -0.018169, -0.020552, -0.022339, -0.024126, + -0.025913, -0.027998, -0.030679, -0.033360, -0.036338, -0.038721, + -0.040210, -0.041997, -0.044082, -0.046763, -0.049444, -0.052422, + -0.055699, -0.058677, -0.061656, -0.064634, -0.067613, -0.069996, + -0.072974, -0.074762, -0.077144, -0.079527, -0.082208, -0.084591, + -0.088165, -0.091441, -0.095313, -0.098888, -0.103356, -0.106930, + -0.110802, -0.114376, -0.117057, -0.120035, -0.123312, -0.126588, + -0.130460, -0.134630, -0.138800, -0.143566, -0.148332, -0.153693, + -0.158756, -0.163522, -0.167990, -0.172756, -0.177521, -0.182287, + -0.186755, -0.191520, -0.197180, -0.202839, -0.209392, -0.215051, + -0.220710, -0.226369, -0.232029, -0.237986, -0.243645, -0.249304, + -0.255559, -0.262410, -0.268665, -0.273728, -0.278792, -0.284451, + -0.291004, -0.296961, -0.301429, -0.305599, -0.310662, -0.317215, + -0.323768, -0.330023, -0.334789, -0.340448, -0.346703, -0.354745, + -0.362489, -0.369638, -0.375892, -0.383339, -0.392572, -0.403295, + -0.413422, -0.422358, -0.430996, -0.440527, -0.450654, -0.461079, + -0.468227, -0.470610, -0.470015, -0.469121, -0.467334, -0.461079, + -0.450654, -0.437548, -0.426528, -0.417294, -0.405976, -0.390487, + -0.373510, -0.361893, -0.355638, -0.355638, -0.354447, -0.344916, + -0.330321, -0.317513, -0.307386, -0.296365, -0.280281, -0.259431, + -0.236497, -0.213860, -0.190329, -0.168586, -0.150119, -0.135226, + -0.124205, -0.115270, -0.108419, -0.103058, -0.094420, -0.080719, + -0.065230, -0.055103, -0.053018, -0.052422, -0.045870, -0.034253, + -0.023233, -0.016382, -0.011616, -0.002979, 0.008042, 0.016084, + 0.017276, 0.014595, 0.015786, 0.017573, 0.018765, 0.019658, + 0.026807, 0.041700, 0.060762, 0.077144, 0.089952, 0.102760, + 0.116759, 0.126290, 0.129567, 0.129269, 0.133737, 0.146544, + 0.162926, 0.177819, 0.191520, 0.206413, 0.222795, 0.235603, + 0.243049, 0.247219, 0.253176, 0.260623, 0.265984, 0.268069, + 0.271346, 0.279685, 0.288621, 0.290706, 0.285345, 0.279388, + 0.278792, 0.280579, 0.277005, 0.267473, 0.258836, 0.257049, + 0.259431, 0.259133, 0.254368, 0.249304, 0.247815, 0.247219, + 0.243347, 0.236497, 0.231433, 0.231135, 0.231731, 0.228454, + 0.223987, 0.224582, 0.231135, 0.237986, 0.240369, 0.241560, + 0.246624, 0.256155, 0.263006, 0.262708, 0.258836, 0.257942, + 0.262410, 0.268665, 0.272835, 0.277303, 0.284749, 0.294280, + 0.301429, 0.302918, 0.300833, 0.299046, 0.296663, 0.291302, + 0.281473, 0.274026, 0.271643, 0.272835, 0.272239, 0.267771, + 0.263006, 0.262112, 0.262112, 0.257644, 0.247219, 0.235901, + 0.229348, 0.226667, 0.223391, 0.218030, 0.213860, 0.212668, + 0.213562, 0.212072, 0.206711, 0.201945, 0.200158, 0.199860, + 0.197478, 0.194201, 0.193605, 0.197775, 0.202541, 0.203733, + 0.201648, 0.200158, 0.201350, 0.202243, 0.197478, 0.190031, + 0.184074, 0.182287, 0.181393, 0.178415, 0.173947, 0.170075, + 0.169479, 0.167096, 0.160544, 0.151608, 0.144162, 0.138502, + 0.131354, 0.121823, 0.113483, 0.111100, 0.111398, 0.109908, + 0.105143, 0.101866, 0.104547, 0.109015, 0.109313, 0.104845, + 0.100377, 0.101568, 0.105441, 0.106930, 0.106334, 0.106036, + 0.110206, 0.115270, 0.119142, 0.120333, 0.121227, 0.122716, + 0.122716, 0.120929, 0.118844, 0.118248, 0.118248, 0.117355, + 0.114972, 0.111993, 0.111695, 0.111993, 0.109313, 0.103653, + 0.096207, 0.090846, 0.087569, 0.083101, 0.077740, 0.073570, + 0.072379, 0.072677, 0.071783, 0.069400, 0.066124, 0.064337, + 0.062847, 0.061656, 0.060167, 0.059869, 0.062549, 0.066124, + 0.070294, 0.073868, 0.077144, 0.081016, 0.084889, 0.087569, + 0.089654, 0.090846, 0.092037, 0.094718, 0.097101, 0.099483, + 0.102164, 0.105143, 0.107823, 0.109610, 0.110802, 0.111993, + 0.112291, 0.111398, 0.110206, 0.109015, 0.109313, 0.109313, + 0.108419, 0.107526, 0.107526, 0.108121, 0.109908, 0.110802, + 0.111993, 0.112589, 0.113483, 0.114972, 0.116461, 0.117355, + 0.119142, 0.121227, 0.123908, 0.126886, 0.129865, 0.133141, + 0.134928, 0.135822, 0.136715, 0.138205, 0.139396, 0.139694, + 0.139396, 0.139396, 0.139098, 0.138800, 0.137609, 0.135226, + 0.132545, 0.129567, 0.125397, 0.120333, 0.115568, 0.111100, + 0.107228, 0.102462, 0.098292, 0.094122, 0.090548, 0.086080, + 0.081016, 0.075357, 0.069698, 0.065528, 0.061656, 0.057784, + 0.053614, 0.050040, 0.047657, 0.045870, 0.043189, 0.040508, + 0.038125, 0.036040, 0.034253, 0.030977, 0.027105, 0.024126, + 0.022041, 0.018765, 0.014893, 0.010723, 0.006851, 0.003276, + -0.000894, -0.005957, -0.011914, -0.017871, -0.024126, -0.030679, + -0.037828, -0.045572, -0.052720, -0.060464, -0.067911, -0.075655, + -0.083101, -0.089952, -0.097101, -0.104845, -0.112887, -0.120333, + -0.127482, -0.133737, -0.140885, -0.147438, -0.153693, -0.158459, + -0.163224, -0.168586, -0.174543, -0.180500, -0.184372, -0.188542, + -0.193308, -0.198967, -0.204030, -0.207307, -0.211179, -0.216540, + -0.223391, -0.229944, -0.235603, -0.241858, -0.248709, -0.256751, + -0.265091, -0.273728, -0.282068, -0.289813, -0.298450, -0.308279, + -0.319300, -0.330916, -0.341044, -0.351171, -0.361893, -0.374403, + -0.387211, -0.398827, -0.409550, -0.420273, -0.431889, -0.443803, + -0.454228, -0.464355, -0.473887, -0.484609, -0.494439, -0.503672, + -0.513799, -0.524820, -0.536436, -0.545670, -0.553116, -0.561754, + -0.572179, -0.583497, -0.594220, -0.603453, -0.612091, -0.622218, + -0.635324, -0.649025, -0.660046, -0.669577, -0.679108, -0.690725, + -0.703830, -0.717532, -0.730935, -0.743743, -0.758040, -0.775018, + -0.793187, -0.813143, -0.832801, -0.851864, -0.870331, -0.891181, + -0.916499, -0.942710, -0.966538, -0.984409, -0.994536, -0.998706, + -0.999600, -0.995430, -0.980239, -0.950156, -0.908754, -0.865268, + -0.829823, -0.803016, -0.772039, -0.727361, -0.674343, -0.624899, + -0.581710, -0.533160, -0.468227, -0.387807, -0.308279, -0.244836, + -0.200158, -0.161437, -0.120333, -0.080421, -0.047359, -0.021148, + 0.004766, 0.037232, 0.076251, 0.115568, 0.148332, 0.169479, + 0.177223, 0.170373, 0.152799, 0.131950, 0.110206, 0.086676, + 0.058677, 0.031573, 0.013106, 0.003574, -0.005361, -0.024722, + -0.051827, -0.077442, -0.093824, -0.104547, -0.119440, -0.138800, + -0.153097, -0.155480, -0.148332, -0.140885, -0.137311, -0.131354, + -0.117057, -0.095909, -0.074762, -0.055997, -0.035743, -0.011021, + 0.014595, 0.039317, 0.062252, 0.086676, 0.112887, 0.139694, + 0.164714, 0.187351, 0.208498, 0.226965, 0.240964, 0.248113, + 0.251687, 0.256453, 0.262708, 0.269856, 0.276111, 0.284749, + 0.294876, 0.302322, 0.302322, 0.294876, 0.284153, 0.273133, + 0.262708, 0.252581, 0.244241, 0.244241, 0.252581, 0.267176, + 0.281473, 0.293089, 0.303812, 0.313343, 0.320789, 0.324661, + 0.327938, 0.333299, 0.343426, 0.357723, 0.374999, 0.393764, + 0.413124, 0.430698, 0.442910, 0.449165, 0.451548, 0.452739, + 0.450952, 0.445888, 0.438442, 0.432187, 0.428017, 0.424145, + 0.417294, 0.406274, 0.392572, 0.378573, 0.363680, 0.346405, + 0.325555, 0.303812, 0.284749, 0.268665, 0.254070, 0.240369, + 0.226965, 0.216540, 0.208200, 0.201350, 0.194797, 0.188840, + 0.185563, 0.184670, 0.188244, 0.194499, 0.204328, 0.216242, + 0.230837, 0.247815, 0.264495, 0.280281, 0.294578, 0.307684, + 0.319300, 0.329725, 0.340150, 0.351468, 0.364872, 0.377680, + 0.391083, 0.403295, 0.414614, 0.422954, 0.426528, 0.425038, + 0.419379, 0.411933, 0.402997, 0.392572, 0.381552, 0.371723, + 0.363978, 0.357128, 0.349383, 0.338959, 0.327044, 0.314237, + 0.300833, 0.285643, 0.268963, 0.253474, 0.241858, 0.234114, + 0.227859, 0.222200, 0.218327, 0.216242, 0.215051, 0.212370, + 0.208498, 0.204626, 0.202541, 0.201945, 0.203733, 0.208498, + 0.215945, 0.221902, 0.225476, 0.227859, 0.230242, 0.232922, + 0.233518, 0.230539, 0.226965, 0.226667, 0.229348, 0.232327, + 0.232327, 0.229646, 0.227263, 0.225476, 0.223391, 0.217732, + 0.209690, 0.201052, 0.194499, 0.190031, 0.187053, 0.185266, + 0.184074, 0.184074, 0.183478, 0.183181, 0.182585, 0.181096, + 0.179011, 0.175139, 0.171862, 0.170671, 0.171266, 0.173947, + 0.176032, 0.178713, 0.182287, 0.187351, 0.192414, 0.194499, + 0.194797, 0.193605, 0.193308, 0.193605, 0.193308, 0.192414, + 0.191223, 0.193010, 0.196882, 0.201350, 0.203733, 0.204626, + 0.204924, 0.206115, 0.206413, 0.206115, 0.204924, 0.205222, + 0.207903, 0.211179, 0.215349, 0.218625, 0.221306, 0.222795, + 0.223093, 0.222200, 0.220710, 0.220115, 0.219817, 0.219817, + 0.219817, 0.222200, 0.223987, 0.226072, 0.225178, 0.222200, + 0.217434, 0.212370, 0.206413, 0.200158, 0.192712, 0.186755, + 0.181989, 0.178117, 0.173351, 0.167394, 0.160841, 0.154587, + 0.146544, 0.137907, 0.128077, 0.119440, 0.111695, 0.105441, + 0.100377, 0.095909, 0.092633, 0.090548, 0.088165, 0.085186, + 0.081314, 0.077144, 0.073868, 0.070592, 0.068209, 0.066124, + 0.064932, 0.064932, 0.064634, 0.064039, 0.063741, 0.062847, + 0.062252, 0.059869, 0.056592, 0.052422, 0.048252, 0.044678, + 0.040210, 0.035147, 0.030381, 0.026211, 0.022041, 0.016382, + 0.009531, 0.001489, -0.005659, -0.013106, -0.020254, -0.028594, + -0.035743, -0.041997, -0.047359, -0.053018, -0.058975, -0.065230, + -0.070889, -0.076549, -0.082208, -0.088463, -0.094718, -0.099483, + -0.103951, -0.107526, -0.110802, -0.113780, -0.117057, -0.120631, + -0.125695, -0.131652, -0.138205, -0.144757, -0.151608, -0.158756, + -0.165905, -0.172160, -0.177521, -0.183181, -0.190329, -0.197478, + -0.205222, -0.212966, -0.221604, -0.231731, -0.242156, -0.252283, + -0.260027, -0.267176, -0.274324, -0.282068, -0.289217, -0.295770, + -0.302025, -0.309173, -0.318407, -0.327044, -0.333895, -0.340150, + -0.346703, -0.353553, -0.359510, -0.364276, -0.368148, -0.374105, + -0.381552, -0.389594, -0.396147, -0.401806, -0.409550, -0.418486, + -0.427719, -0.435463, -0.441420, -0.448271, -0.456611, -0.467334, + -0.478057, -0.486694, -0.495630, -0.506055, -0.516480, -0.526607, + -0.534947, -0.542691, -0.549542, -0.558179, -0.568902, -0.579327, + -0.589156, -0.600773, -0.612687, -0.623112, -0.632643, -0.642174, + -0.649919, -0.656471, -0.664216, -0.673151, -0.681491, -0.689236, + -0.698469, -0.710085, -0.722595, -0.734509, -0.747913, -0.759231, + -0.769954, -0.781273, -0.797357, -0.816122, -0.834886, -0.852162, + -0.870927, -0.896244, -0.927221, -0.955815, -0.974282, -0.980239, + -0.978154, -0.972793, -0.964453, -0.947475, -0.915903, -0.869735, + -0.819100, -0.774124, -0.740764, -0.710383, -0.668684, -0.611495, + -0.548946, -0.493545, -0.441718, -0.381254, -0.302918, -0.216540, + -0.141183, -0.089059, -0.054210, -0.021148, 0.015786, 0.050337, + 0.073868, 0.088165, 0.106334, 0.135226, 0.167990, 0.192414, + 0.204030, 0.204030, 0.193308, 0.170969, 0.139396, 0.103058, + 0.065826, 0.030083, -0.002085, -0.029488, -0.050933, -0.066422, + -0.083697, -0.106334, -0.131950, -0.151906, -0.165011, -0.176032, + -0.189138, -0.200158, -0.199265, -0.184074, -0.161437, -0.142077, + -0.127780, -0.109908, -0.081910, -0.050040, -0.023233, -0.002383, + 0.020552, 0.053018, 0.089356, 0.124205, 0.153097, 0.179011, + 0.205222, 0.230539, 0.251687, 0.265091, 0.273133, 0.278792, + 0.283558, 0.286238, 0.286834, 0.288919, 0.293089, 0.297855, + 0.302322, 0.303812, 0.303216, 0.299046, 0.289813, 0.277303, + 0.264495, 0.254964, 0.249304, 0.247517, 0.250794, 0.260921, + 0.277005, 0.295770, 0.312449, 0.325853, 0.337767, 0.348788, + 0.357723, 0.364276, 0.371127, 0.380956, 0.394955, 0.411933, + 0.428613, 0.442612, 0.453930, 0.461377, 0.463462, 0.458696, + 0.448867, 0.436655, 0.423549, 0.409848, 0.395551, 0.382445, + 0.370233, 0.358021, 0.342533, 0.324066, 0.304110, 0.285345, + 0.265984, 0.245134, 0.225178, 0.208796, 0.198669, 0.193308, + 0.190329, 0.186457, 0.184670, 0.186159, 0.190329, 0.195095, + 0.198669, 0.204924, 0.215945, 0.232624, 0.251687, 0.271048, + 0.291898, 0.314534, 0.338363, 0.358915, 0.374701, 0.387509, + 0.398529, 0.408061, 0.415209, 0.421166, 0.427123, 0.433974, + 0.440527, 0.445293, 0.447675, 0.447675, 0.444399, 0.436357, + 0.424145, 0.408359, 0.391977, 0.376190, 0.360404, 0.344618, + 0.329725, 0.318109, 0.309173, 0.300237, 0.289217, 0.276707, + 0.264793, 0.253474, 0.242751, 0.230837, 0.220710, 0.214455, + 0.211775, 0.211775, 0.212966, 0.218030, 0.225476, 0.232922, + 0.238582, 0.241560, 0.244836, 0.249602, 0.254368, 0.258240, + 0.261218, 0.265686, 0.272835, 0.278792, 0.281770, 0.282366, + 0.282366, 0.281175, 0.278196, 0.272835, 0.266580, 0.261218, + 0.257942, 0.255261, 0.250794, 0.245432, 0.241858, 0.239177, + 0.234412, 0.227561, 0.220115, 0.213860, 0.209987, 0.206413, + 0.203435, 0.201052, 0.200754, 0.201648, 0.202243, 0.200754, + 0.198967, 0.196584, 0.194201, 0.191520, 0.189138, 0.187946, + 0.188244, 0.189733, 0.191520, 0.192414, 0.192712, 0.193308, + 0.193308, 0.191520, 0.187648, 0.184074, 0.181691, 0.179011, + 0.176926, 0.176032, 0.176330, 0.177819, 0.180500, 0.183181, + 0.184968, 0.187053, 0.188542, 0.189733, 0.190925, 0.192116, + 0.194797, 0.198371, 0.201945, 0.206711, 0.211179, 0.215349, + 0.220115, 0.222795, 0.223987, 0.224582, 0.223689, 0.222200, + 0.219519, 0.216838, 0.214455, 0.211477, 0.207605, 0.202243, + 0.195690, 0.188244, 0.179904, 0.170373, 0.159650, 0.148034, + 0.137907, 0.128077, 0.118248, 0.108419, 0.098888, 0.090250, + 0.082208, 0.073570, 0.064932, 0.056592, 0.049444, 0.043487, + 0.038721, 0.034849, 0.032466, 0.031573, 0.031870, 0.032168, + 0.032168, 0.032168, 0.032466, 0.032764, 0.032466, 0.032168, + 0.031870, 0.031573, 0.031870, 0.031870, 0.031275, 0.030381, + 0.028296, 0.025913, 0.022041, 0.016382, 0.009829, 0.002383, + -0.005064, -0.012808, -0.020850, -0.028594, -0.036040, -0.042891, + -0.050040, -0.057486, -0.064932, -0.072677, -0.080123, -0.087271, + -0.094122, -0.100377, -0.106334, -0.111695, -0.116461, -0.120333, + -0.123610, -0.127482, -0.131056, -0.134630, -0.138205, -0.141183, + -0.145353, -0.150417, -0.154884, -0.159054, -0.162926, -0.167394, + -0.173054, -0.179606, -0.186159, -0.193308, -0.201350, -0.209690, + -0.218327, -0.226072, -0.234114, -0.242156, -0.251091, -0.260027, + -0.268665, -0.277005, -0.285047, -0.293982, -0.302918, -0.312152, + -0.319896, -0.326449, -0.333597, -0.341044, -0.347298, -0.352660, + -0.355936, -0.361298, -0.368148, -0.375892, -0.382147, -0.386913, + -0.391977, -0.398827, -0.406572, -0.413720, -0.418784, -0.422954, + -0.428613, -0.435463, -0.443803, -0.450654, -0.456909, -0.464653, + -0.473589, -0.483120, -0.491460, -0.498906, -0.506055, -0.512906, + -0.520352, -0.527798, -0.536436, -0.545670, -0.554903, -0.563839, + -0.573668, -0.584689, -0.594816, -0.602858, -0.609708, -0.614474, + -0.619835, -0.627580, -0.637707, -0.646940, -0.654387, -0.661833, + -0.672258, -0.685661, -0.697575, -0.704426, -0.708298, -0.715745, + -0.730042, -0.745828, -0.758933, -0.772039, -0.788719, -0.810760, + -0.836376, -0.860800, -0.881650, -0.901010, -0.921264, -0.938838, + -0.944497, -0.937646, -0.924541, -0.910839, -0.892372, -0.861693, + -0.814632, -0.760125, -0.712170, -0.675236, -0.638898, -0.591241, + -0.532266, -0.472993, -0.419975, -0.367553, -0.303514, -0.224582, + -0.143268, -0.077442, -0.032168, 0.002979, 0.038721, 0.071187, + 0.092335, 0.101866, 0.111695, 0.130162, 0.153395, 0.173351, + 0.185266, 0.190627, 0.189436, 0.176032, 0.147736, 0.109313, + 0.068507, 0.030381, -0.003872, -0.036040, -0.064634, -0.085782, + -0.100973, -0.115568, -0.134630, -0.155480, -0.168586, -0.173649, + -0.178415, -0.186457, -0.189138, -0.178117, -0.154884, -0.130460, + -0.112589, -0.095313, -0.070592, -0.037828, -0.005659, 0.020254, + 0.043189, 0.072081, 0.108419, 0.145055, 0.175139, 0.197775, + 0.218625, 0.242156, 0.263006, 0.276111, 0.281770, 0.285940, + 0.291600, 0.295770, 0.294578, 0.290706, 0.288919, 0.292195, + 0.295472, 0.296961, 0.295770, 0.293387, 0.289813, 0.284153, + 0.275813, 0.266878, 0.259729, 0.257644, 0.261218, 0.269558, + 0.281473, 0.298152, 0.318704, 0.338959, 0.356532, 0.369638, + 0.380658, 0.390487, 0.399125, 0.406274, 0.412826, 0.421464, + 0.433676, 0.447080, 0.457803, 0.462866, 0.462568, 0.457207, + 0.448867, 0.436655, 0.419975, 0.399423, 0.380360, 0.363978, + 0.349681, 0.333597, 0.315428, 0.297259, 0.280579, 0.264197, + 0.246921, 0.228157, 0.210881, 0.198371, 0.190329, 0.186159, + 0.183776, 0.184372, 0.187053, 0.193010, 0.200456, 0.207605, + 0.215647, 0.226072, 0.240667, 0.258240, 0.277303, 0.297855, + 0.320492, 0.342831, 0.364276, 0.383041, 0.398827, 0.411635, + 0.421464, 0.428017, 0.431889, 0.434570, 0.436357, 0.438144, + 0.439038, 0.438442, 0.436655, 0.432783, 0.426528, 0.416996, + 0.404487, 0.390487, 0.373808, 0.356830, 0.339852, 0.323172, + 0.308279, 0.295472, 0.284749, 0.275813, 0.267771, 0.260325, + 0.252879, 0.244836, 0.236497, 0.229050, 0.222200, 0.216540, + 0.212668, 0.212072, 0.214455, 0.219221, 0.224582, 0.228454, + 0.232029, 0.236199, 0.240964, 0.245134, 0.246624, 0.246624, + 0.248411, 0.252879, 0.257346, 0.259729, 0.259729, 0.260027, + 0.262708, 0.265686, 0.265091, 0.259431, 0.252283, 0.248113, + 0.247219, 0.245730, 0.243645, 0.240369, 0.237986, 0.237390, + 0.235901, 0.231433, 0.224582, 0.218030, 0.213860, 0.210285, + 0.207605, 0.204924, 0.202541, 0.200158, 0.198669, 0.196882, + 0.193903, 0.191223, 0.186755, 0.180202, 0.172756, 0.166501, + 0.162331, 0.159054, 0.156672, 0.156076, 0.156672, 0.157565, + 0.157565, 0.156076, 0.152799, 0.150119, 0.149225, 0.148629, + 0.147736, 0.147736, 0.149225, 0.153097, 0.159054, 0.165607, + 0.171266, 0.176330, 0.182287, 0.188542, 0.193308, 0.196882, + 0.199860, 0.203733, 0.209392, 0.215349, 0.220412, 0.223689, + 0.225476, 0.226667, 0.228157, 0.227263, 0.223987, 0.219519, + 0.214455, 0.209094, 0.203137, 0.195690, 0.186755, 0.179011, + 0.171862, 0.163522, 0.153991, 0.142077, 0.131056, 0.120035, + 0.109610, 0.100079, 0.090846, 0.083399, 0.077144, 0.071187, + 0.065230, 0.059273, 0.054210, 0.050337, 0.046465, 0.042891, + 0.040210, 0.038423, 0.038721, 0.039317, 0.039615, 0.041700, + 0.044082, 0.046763, 0.047359, 0.046465, 0.044380, 0.041997, + 0.039615, 0.037530, 0.034551, 0.031870, 0.029785, 0.027403, + 0.025020, 0.020850, 0.015488, 0.009531, 0.003872, -0.002383, + -0.009829, -0.017871, -0.025318, -0.031870, -0.037828, -0.043487, + -0.048252, -0.052720, -0.056890, -0.061358, -0.066422, -0.071783, + -0.076549, -0.081016, -0.084889, -0.088761, -0.092335, -0.096207, + -0.099781, -0.103653, -0.108121, -0.112291, -0.117057, -0.122418, + -0.127780, -0.134035, -0.139992, -0.146842, -0.153991, -0.161735, + -0.168884, -0.176032, -0.184372, -0.193308, -0.202541, -0.211179, + -0.220115, -0.228454, -0.237390, -0.244836, -0.251687, -0.258538, + -0.264793, -0.271346, -0.277005, -0.282068, -0.286834, -0.291600, + -0.295472, -0.299642, -0.302918, -0.306492, -0.309173, -0.312152, + -0.315130, -0.317513, -0.320789, -0.324959, -0.328831, -0.332704, + -0.336278, -0.341044, -0.347596, -0.354745, -0.362191, -0.369935, + -0.378573, -0.387807, -0.397934, -0.408657, -0.418486, -0.427719, + -0.437251, -0.447080, -0.457803, -0.468227, -0.478354, -0.486099, + -0.494141, -0.504566, -0.515884, -0.525118, -0.530777, -0.537032, + -0.544776, -0.552520, -0.559073, -0.562647, -0.566222, -0.572477, + -0.582008, -0.590944, -0.596007, -0.601071, -0.609410, -0.618942, + -0.628473, -0.634728, -0.640090, -0.647834, -0.658259, -0.668684, + -0.677023, -0.686555, -0.699958, -0.715447, -0.732127, -0.748509, + -0.764891, -0.780677, -0.800335, -0.820589, -0.839354, -0.856630, + -0.878969, -0.905180, -0.929008, -0.941816, -0.941221, -0.932881, + -0.924243, -0.913818, -0.889989, -0.847992, -0.792889, -0.736594, + -0.688640, -0.647834, -0.605241, -0.551627, -0.490567, -0.432187, + -0.380360, -0.326746, -0.260623, -0.180202, -0.099186, -0.034551, + 0.008936, 0.042295, 0.073868, 0.104249, 0.126290, 0.136120, + 0.137609, 0.140290, 0.152799, 0.170373, 0.180798, 0.179011, + 0.166501, 0.148034, 0.123908, 0.092633, 0.052422, 0.008638, + -0.032168, -0.064634, -0.089654, -0.108419, -0.125992, -0.145353, + -0.161735, -0.170373, -0.172756, -0.174543, -0.177819, -0.180202, + -0.174841, -0.160544, -0.138800, -0.114376, -0.091739, -0.068507, + -0.039913, -0.006851, 0.027105, 0.055401, 0.079825, 0.105738, + 0.137311, 0.169479, 0.196584, 0.217434, 0.235901, 0.254368, + 0.271048, 0.282962, 0.289813, 0.293089, 0.293089, 0.291004, + 0.287430, 0.283558, 0.280281, 0.279983, 0.282068, 0.285940, + 0.288323, 0.289515, 0.289515, 0.287728, 0.283855, 0.278494, + 0.275515, 0.276707, 0.281175, 0.290408, 0.304705, 0.324959, + 0.347298, 0.368148, 0.386615, 0.403593, 0.417294, 0.427421, + 0.433081, 0.434868, 0.437846, 0.443208, 0.450356, 0.456015, + 0.458994, 0.459292, 0.456015, 0.449760, 0.438144, 0.419975, + 0.397636, 0.375892, 0.354745, 0.334193, 0.314534, 0.294876, + 0.277303, 0.260921, 0.246326, 0.233220, 0.220412, 0.207605, + 0.195393, 0.186159, 0.181393, 0.181691, 0.184670, 0.189733, + 0.197775, 0.208796, 0.222200, 0.235901, 0.249602, 0.263303, + 0.279090, 0.297557, 0.317513, 0.337767, 0.357426, 0.375892, + 0.394657, 0.411933, 0.426528, 0.437251, 0.443208, 0.445888, + 0.446186, 0.443208, 0.439336, 0.434570, 0.429804, 0.424443, + 0.418784, 0.412231, 0.405082, 0.395551, 0.383339, 0.369340, + 0.353553, 0.338363, 0.323470, 0.308577, 0.294876, 0.282664, + 0.274026, 0.268963, 0.264793, 0.260623, 0.255857, 0.251389, + 0.247517, 0.243049, 0.237390, 0.231433, 0.226965, 0.224880, + 0.224582, 0.225178, 0.226667, 0.229050, 0.232624, 0.235603, + 0.236794, 0.236199, 0.236794, 0.237986, 0.240071, 0.240667, + 0.239773, 0.239475, 0.239773, 0.240071, 0.239177, 0.237390, + 0.236199, 0.235007, 0.234412, 0.233518, 0.232327, 0.231135, + 0.229944, 0.228752, 0.227859, 0.226369, 0.223987, 0.220710, + 0.218030, 0.216540, 0.216242, 0.217136, 0.216838, 0.214753, + 0.212072, 0.209690, 0.206413, 0.202541, 0.196584, 0.190329, + 0.183776, 0.178713, 0.172756, 0.165607, 0.159650, 0.154289, + 0.150119, 0.147438, 0.146247, 0.143864, 0.139992, 0.136715, + 0.135524, 0.135822, 0.136715, 0.137311, 0.138205, 0.139694, + 0.142970, 0.147736, 0.152204, 0.157565, 0.164714, 0.173054, + 0.181691, 0.189138, 0.195095, 0.199563, 0.204030, 0.209392, + 0.213264, 0.215945, 0.218327, 0.220412, 0.221306, 0.221008, + 0.219519, 0.217434, 0.213860, 0.209392, 0.203137, 0.195988, + 0.187648, 0.179011, 0.169479, 0.159948, 0.150417, 0.141183, + 0.131950, 0.123014, 0.113780, 0.105143, 0.097696, 0.091441, + 0.085484, 0.079825, 0.074166, 0.069996, 0.066422, 0.062549, + 0.059571, 0.057188, 0.056295, 0.055997, 0.055997, 0.055997, + 0.055997, 0.056592, 0.057188, 0.057188, 0.056890, 0.055997, + 0.054210, 0.052125, 0.049146, 0.045870, 0.041700, 0.038125, + 0.034551, 0.030381, 0.025913, 0.021148, 0.016084, 0.010723, + 0.005659, 0.000000, -0.004468, -0.009829, -0.015191, -0.020850, + -0.026509, -0.031870, -0.036934, -0.041402, -0.045572, -0.048550, + -0.051529, -0.054210, -0.056890, -0.059571, -0.062549, -0.065230, + -0.067911, -0.071485, -0.076251, -0.080421, -0.085484, -0.090548, + -0.095313, -0.100973, -0.106334, -0.112291, -0.118248, -0.124503, + -0.132247, -0.139992, -0.148332, -0.156969, -0.164714, -0.172756, + -0.180798, -0.189733, -0.198073, -0.206413, -0.214157, -0.220710, + -0.226965, -0.233220, -0.238879, -0.243645, -0.248709, -0.252879, + -0.257346, -0.261814, -0.266282, -0.270154, -0.272537, -0.275218, + -0.279090, -0.282068, -0.285345, -0.286238, -0.287430, -0.290110, + -0.294876, -0.300237, -0.305003, -0.309173, -0.314832, -0.322874, + -0.330619, -0.336874, -0.342831, -0.350575, -0.360404, -0.370233, + -0.380062, -0.388700, -0.397934, -0.408954, -0.419677, -0.428315, + -0.436357, -0.444697, -0.454824, -0.463164, -0.471504, -0.478354, + -0.485503, -0.493843, -0.502481, -0.509331, -0.514693, -0.519458, + -0.525713, -0.532862, -0.540010, -0.545967, -0.550435, -0.555797, + -0.566222, -0.577242, -0.586178, -0.592731, -0.600177, -0.610006, + -0.619835, -0.628175, -0.633835, -0.639792, -0.648429, -0.658854, + -0.667492, -0.674641, -0.685363, -0.699660, -0.713362, -0.724382, + -0.733616, -0.745828, -0.761614, -0.777103, -0.790506, -0.802420, + -0.821185, -0.845907, -0.870927, -0.890287, -0.901010, -0.903691, + -0.900414, -0.892670, -0.877777, -0.849779, -0.810462, -0.762806, + -0.711277, -0.660344, -0.613878, -0.570689, -0.523926, -0.471504, + -0.416699, -0.363978, -0.311258, -0.254070, -0.185563, -0.110206, + -0.043487, 0.002979, 0.037530, 0.067911, 0.094718, 0.113185, + 0.117653, 0.114376, 0.112887, 0.119738, 0.132545, 0.140587, + 0.139694, 0.132545, 0.120333, 0.100973, 0.072974, 0.036338, + -0.004170, -0.040210, -0.070294, -0.095313, -0.115568, -0.128673, + -0.137609, -0.145353, -0.150714, -0.151012, -0.148332, -0.146247, + -0.143268, -0.136417, -0.121525, -0.098888, -0.072379, -0.045870, + -0.021148, 0.005957, 0.034849, 0.064337, 0.089952, 0.112291, + 0.134332, 0.159054, 0.185861, 0.210285, 0.229348, 0.246028, + 0.261516, 0.274920, 0.283260, 0.287132, 0.287132, 0.285047, + 0.280579, 0.274026, 0.269261, 0.267771, 0.269261, 0.272239, + 0.277898, 0.285047, 0.292195, 0.296365, 0.298450, 0.298450, + 0.298450, 0.299344, 0.302620, 0.308279, 0.317513, 0.332704, + 0.354149, 0.377382, 0.398827, 0.418486, 0.435166, 0.449760, + 0.458100, 0.461079, 0.460185, 0.458398, 0.458100, 0.457505, + 0.455718, 0.453335, 0.450356, 0.443505, 0.432783, 0.417294, + 0.398529, 0.376488, 0.353553, 0.330023, 0.307386, 0.287430, + 0.271346, 0.257346, 0.244241, 0.233220, 0.223391, 0.215349, + 0.208796, 0.202243, 0.198073, 0.198073, 0.202839, 0.211775, + 0.222497, 0.235603, 0.250496, 0.267176, 0.282664, 0.297259, + 0.310662, 0.323470, 0.336874, 0.350873, 0.365765, 0.381254, + 0.396742, 0.410444, 0.422656, 0.432187, 0.438442, 0.440527, + 0.437548, 0.430698, 0.421762, 0.411933, 0.403295, 0.394955, + 0.387509, 0.380360, 0.375595, 0.370829, 0.365468, 0.357128, + 0.347001, 0.335384, 0.324066, 0.313045, 0.302620, 0.293685, + 0.286238, 0.281473, 0.280281, 0.280281, 0.280281, 0.278494, + 0.275813, 0.273133, 0.269856, 0.264793, 0.259729, 0.255857, + 0.255261, 0.254964, 0.253772, 0.251687, 0.251091, 0.251091, + 0.249006, 0.244539, 0.238582, 0.234114, 0.231731, 0.229944, + 0.228454, 0.226369, 0.225476, 0.226369, 0.226965, 0.226965, + 0.224284, 0.220710, 0.217732, 0.217136, 0.217732, 0.220115, + 0.223689, 0.228752, 0.233220, 0.237092, 0.240667, 0.242454, + 0.241858, 0.238582, 0.233816, 0.229050, 0.224880, 0.221008, + 0.216540, 0.212072, 0.208498, 0.204924, 0.199860, 0.193605, + 0.184968, 0.175139, 0.164416, 0.154289, 0.144459, 0.135226, + 0.127482, 0.122120, 0.119738, 0.118844, 0.119440, 0.120631, + 0.123610, 0.126290, 0.128077, 0.129567, 0.132545, 0.137013, + 0.142672, 0.149225, 0.157267, 0.165905, 0.175436, 0.184372, + 0.192414, 0.198967, 0.204626, 0.209392, 0.212370, 0.214157, + 0.215945, 0.216838, 0.217434, 0.217434, 0.215945, 0.212966, + 0.209094, 0.203137, 0.195690, 0.185861, 0.176628, 0.167692, + 0.159352, 0.150714, 0.143268, 0.136715, 0.131056, 0.125099, + 0.117355, 0.109313, 0.102164, 0.095909, 0.088761, 0.082208, + 0.078038, 0.075357, 0.073868, 0.073868, 0.073868, 0.073570, + 0.072677, 0.071485, 0.069400, 0.065826, 0.062252, 0.058975, + 0.055997, 0.053316, 0.050635, 0.049444, 0.048252, 0.047061, + 0.044678, 0.040806, 0.036636, 0.031573, 0.026509, 0.020254, + 0.014595, 0.008936, 0.004766, 0.001191, -0.001787, -0.005064, + -0.007446, -0.009829, -0.011914, -0.015488, -0.018765, -0.022041, + -0.024424, -0.026807, -0.029190, -0.031573, -0.033360, -0.034551, + -0.036338, -0.039019, -0.042891, -0.047061, -0.051529, -0.056890, + -0.062549, -0.069400, -0.075357, -0.081314, -0.087271, -0.094420, + -0.102164, -0.110504, -0.119142, -0.128673, -0.137907, -0.147736, + -0.156672, -0.165011, -0.172458, -0.179011, -0.186159, -0.192116, + -0.197478, -0.202541, -0.207903, -0.213562, -0.219221, -0.224284, + -0.228454, -0.232029, -0.235007, -0.237390, -0.238879, -0.239773, + -0.241560, -0.243645, -0.245730, -0.248709, -0.251687, -0.256155, + -0.260623, -0.265686, -0.269558, -0.273728, -0.278792, -0.284153, + -0.289515, -0.295174, -0.301727, -0.309769, -0.317513, -0.324364, + -0.331214, -0.339852, -0.349681, -0.357723, -0.364276, -0.370531, + -0.378573, -0.387211, -0.395849, -0.402402, -0.408061, -0.413720, + -0.420273, -0.428017, -0.433676, -0.438442, -0.442612, -0.446782, + -0.451250, -0.456015, -0.463164, -0.469419, -0.474482, -0.478950, + -0.486694, -0.497119, -0.506353, -0.510225, -0.512608, -0.519161, + -0.530479, -0.542095, -0.548052, -0.551925, -0.557584, -0.567711, + -0.579625, -0.590348, -0.595709, -0.598688, -0.603156, -0.611793, + -0.623410, -0.631452, -0.633239, -0.634132, -0.640090, -0.653791, + -0.667194, -0.673747, -0.677321, -0.682981, -0.696384, -0.713957, + -0.729148, -0.740169, -0.750891, -0.768465, -0.792293, -0.817015, + -0.837865, -0.855141, -0.870033, -0.879267, -0.880458, -0.872714, + -0.857225, -0.833993, -0.799740, -0.756253, -0.708894, -0.659152, + -0.608219, -0.558477, -0.512906, -0.466738, -0.415209, -0.359213, + -0.303216, -0.246326, -0.186755, -0.120333, -0.054507, 0.000298, + 0.039019, 0.064932, 0.083697, 0.097398, 0.105738, 0.107526, + 0.105143, 0.103058, 0.106632, 0.114376, 0.115568, 0.104845, + 0.086974, 0.066422, 0.041997, 0.010723, -0.024722, -0.055699, + -0.078038, -0.093526, -0.107228, -0.118546, -0.124503, -0.127780, + -0.130758, -0.131950, -0.128077, -0.118248, -0.105143, -0.087271, + -0.066719, -0.042295, -0.014595, 0.014297, 0.039615, 0.059571, + 0.077740, 0.098590, 0.122120, 0.142077, 0.157565, 0.173054, + 0.193308, 0.215349, 0.232624, 0.242156, 0.249304, 0.255857, + 0.261218, 0.262112, 0.258240, 0.251985, 0.246624, 0.243347, + 0.241262, 0.240964, 0.243645, 0.251389, 0.264197, 0.278494, + 0.290408, 0.300833, 0.310364, 0.320789, 0.329427, 0.335682, + 0.343128, 0.355638, 0.372020, 0.390487, 0.409252, 0.428315, + 0.447675, 0.464355, 0.476269, 0.482822, 0.484907, 0.484014, + 0.481929, 0.477759, 0.471206, 0.462270, 0.451548, 0.440825, + 0.427719, 0.411039, 0.390785, 0.369042, 0.348192, 0.328831, + 0.309769, 0.291898, 0.275813, 0.263303, 0.253176, 0.244539, + 0.236199, 0.228752, 0.223093, 0.220710, 0.221306, 0.223689, + 0.228752, 0.237688, 0.250794, 0.266282, 0.282962, 0.298748, + 0.313343, 0.327342, 0.339852, 0.350575, 0.359213, 0.366659, + 0.373212, 0.379169, 0.386317, 0.393168, 0.399423, 0.404189, + 0.407465, 0.408954, 0.407763, 0.402997, 0.395253, 0.386317, + 0.377084, 0.368148, 0.359510, 0.353553, 0.349383, 0.347001, + 0.344916, 0.344022, 0.343128, 0.343128, 0.341639, 0.340448, + 0.338065, 0.335980, 0.334491, 0.333299, 0.331810, 0.329427, + 0.327044, 0.324661, 0.321683, 0.316322, 0.309173, 0.301429, + 0.295770, 0.291302, 0.285345, 0.275515, 0.265686, 0.257644, + 0.251389, 0.243943, 0.235603, 0.226667, 0.218625, 0.213264, + 0.209392, 0.205222, 0.201052, 0.200158, 0.202839, 0.207605, + 0.212966, 0.217434, 0.221604, 0.224582, 0.227859, 0.230837, + 0.233816, 0.236794, 0.240071, 0.243645, 0.246921, 0.250198, + 0.254070, 0.257049, 0.258240, 0.256751, 0.251985, 0.246028, + 0.239177, 0.230539, 0.220710, 0.209690, 0.199265, 0.190329, + 0.183478, 0.175436, 0.166203, 0.156374, 0.148927, 0.142970, + 0.137311, 0.130758, 0.124503, 0.120631, 0.119738, 0.120929, + 0.122120, 0.123312, 0.126588, 0.131056, 0.136120, 0.140885, + 0.146544, 0.152799, 0.160544, 0.167990, 0.174543, 0.180500, + 0.185861, 0.190031, 0.192712, 0.193903, 0.194499, 0.194201, + 0.193308, 0.191520, 0.189436, 0.186755, 0.184968, 0.183776, + 0.181393, 0.177819, 0.173351, 0.169181, 0.164416, 0.159054, + 0.152799, 0.146247, 0.141183, 0.137907, 0.135226, 0.132843, + 0.131354, 0.130162, 0.129567, 0.128971, 0.127482, 0.125099, + 0.121823, 0.118546, 0.115270, 0.111398, 0.107228, 0.102462, + 0.097994, 0.093526, 0.088761, 0.083697, 0.077740, 0.071783, + 0.065528, 0.058975, 0.052125, 0.045274, 0.038125, 0.031870, + 0.026509, 0.021148, 0.016382, 0.011616, 0.007744, 0.004468, + 0.002681, 0.000596, 0.000000, -0.000298, 0.000298, 0.000894, + 0.002085, 0.002979, 0.003574, 0.003574, 0.002979, 0.001787, + 0.000596, -0.000894, -0.002383, -0.004468, -0.007149, -0.010127, + -0.013403, -0.017573, -0.022935, -0.029190, -0.036040, -0.044082, + -0.052125, -0.060762, -0.070592, -0.079527, -0.088165, -0.095909, + -0.103058, -0.110206, -0.116461, -0.122418, -0.128077, -0.134035, + -0.139992, -0.145949, -0.151310, -0.155480, -0.159650, -0.164416, + -0.168586, -0.172458, -0.175734, -0.178713, -0.182287, -0.186159, + -0.190329, -0.194499, -0.198371, -0.203137, -0.208796, -0.214157, + -0.219519, -0.224880, -0.230539, -0.237092, -0.243943, -0.250198, + -0.256751, -0.263303, -0.269261, -0.274920, -0.279388, -0.283855, + -0.288025, -0.293387, -0.298450, -0.301429, -0.304407, -0.308875, + -0.314237, -0.319598, -0.322874, -0.324959, -0.327342, -0.330916, + -0.334491, -0.338065, -0.341341, -0.344022, -0.347894, -0.354745, + -0.363383, -0.369935, -0.374701, -0.380956, -0.389892, -0.398232, + -0.405380, -0.412529, -0.419677, -0.427123, -0.436953, -0.447378, + -0.455718, -0.463760, -0.473589, -0.483120, -0.490567, -0.497715, + -0.506949, -0.514395, -0.519161, -0.523628, -0.529585, -0.534947, + -0.540606, -0.546861, -0.550137, -0.551031, -0.553116, -0.557286, + -0.560562, -0.560562, -0.559669, -0.562349, -0.568604, -0.577242, + -0.584689, -0.588263, -0.592135, -0.603453, -0.618644, -0.630558, + -0.637707, -0.645749, -0.661237, -0.680300, -0.697575, -0.708298, + -0.717532, -0.734212, -0.757146, -0.777996, -0.792591, -0.809867, + -0.833397, -0.857523, -0.874799, -0.879565, -0.872416, -0.858119, + -0.841737, -0.817015, -0.775613, -0.722000, -0.661833, -0.597794, + -0.537925, -0.491162, -0.451548, -0.405082, -0.349383, -0.296067, + -0.250496, -0.208796, -0.159352, -0.095016, -0.024722, 0.025615, + 0.046167, 0.053018, 0.064932, 0.076846, 0.075655, 0.055997, + 0.031573, 0.019658, 0.026509, 0.036636, 0.031275, 0.015786, + 0.003574, -0.004468, -0.018169, -0.042593, -0.069102, -0.087271, + -0.092335, -0.089356, -0.089654, -0.090548, -0.084889, -0.074166, + -0.066124, -0.059869, -0.048550, -0.033360, -0.015786, 0.001489, + 0.020850, 0.044678, 0.072677, 0.097994, 0.112291, 0.116759, + 0.123312, 0.134332, 0.142077, 0.141779, 0.137907, 0.138502, + 0.148629, 0.163522, 0.173054, 0.175436, 0.179308, 0.188542, + 0.199563, 0.205222, 0.204030, 0.200456, 0.200456, 0.204626, + 0.212072, 0.221604, 0.234114, 0.254070, 0.280877, 0.309173, + 0.335086, 0.356234, 0.372616, 0.386615, 0.400019, 0.410741, + 0.419081, 0.426230, 0.434868, 0.446484, 0.458696, 0.469419, + 0.473589, 0.472695, 0.470015, 0.466142, 0.459887, 0.448569, + 0.436059, 0.424741, 0.416103, 0.406274, 0.393764, 0.378871, + 0.361595, 0.344916, 0.328236, 0.312152, 0.298450, 0.287728, + 0.281473, 0.277898, 0.278494, 0.280877, 0.283260, 0.285345, + 0.285940, 0.285643, 0.286536, 0.287430, 0.288323, 0.289515, + 0.292791, 0.299046, 0.307982, 0.317811, 0.327044, 0.335384, + 0.341937, 0.345511, 0.346405, 0.344320, 0.340150, 0.335384, + 0.331810, 0.328831, 0.328236, 0.329129, 0.332406, 0.335682, + 0.339554, 0.344022, 0.347894, 0.349086, 0.348788, 0.348788, + 0.349383, 0.351468, 0.353553, 0.357128, 0.361595, 0.368148, + 0.373808, 0.377084, 0.377977, 0.377680, 0.377680, 0.377680, + 0.374701, 0.371127, 0.366957, 0.362787, 0.356234, 0.346703, + 0.334789, 0.321087, 0.306492, 0.291302, 0.277303, 0.263601, + 0.250496, 0.239773, 0.231731, 0.225178, 0.220115, 0.215051, + 0.210881, 0.207605, 0.206413, 0.205818, 0.204030, 0.201945, + 0.203435, 0.207903, 0.214157, 0.221008, 0.228454, 0.237092, + 0.246028, 0.253474, 0.258240, 0.259133, 0.258538, 0.257049, + 0.254666, 0.250496, 0.246028, 0.240667, 0.235901, 0.230539, + 0.224880, 0.218327, 0.211179, 0.204030, 0.197180, 0.189436, + 0.181691, 0.173649, 0.166203, 0.159650, 0.155182, 0.150714, + 0.146247, 0.142970, 0.140587, 0.138205, 0.137013, 0.135822, + 0.136715, 0.139098, 0.143268, 0.149523, 0.154289, 0.156672, + 0.157863, 0.159352, 0.161139, 0.161735, 0.161437, 0.161139, + 0.160544, 0.159650, 0.159948, 0.161139, 0.161139, 0.160841, + 0.160841, 0.160544, 0.158459, 0.155182, 0.152204, 0.148332, + 0.145651, 0.144757, 0.145353, 0.146544, 0.149225, 0.151608, + 0.153693, 0.155778, 0.159352, 0.162331, 0.163522, 0.163522, + 0.162926, 0.162033, 0.161139, 0.159650, 0.156969, 0.154587, + 0.151906, 0.148332, 0.143566, 0.137311, 0.130758, 0.123908, + 0.117057, 0.110504, 0.103058, 0.095313, 0.086974, 0.079229, + 0.070294, 0.061954, 0.053912, 0.047657, 0.041700, 0.036338, + 0.032764, 0.030381, 0.029190, 0.029190, 0.029488, 0.029785, + 0.030083, 0.030083, 0.030083, 0.028892, 0.027998, 0.026509, + 0.026211, 0.026807, 0.026807, 0.026509, 0.025615, 0.025020, + 0.023531, 0.020850, 0.017276, 0.012212, 0.007149, 0.001489, + -0.004170, -0.010723, -0.016978, -0.023233, -0.028594, -0.033955, + -0.038721, -0.043487, -0.048252, -0.053614, -0.058380, -0.062847, + -0.067017, -0.070889, -0.074166, -0.077442, -0.081016, -0.084293, + -0.087569, -0.091739, -0.095611, -0.099781, -0.103058, -0.106930, + -0.110504, -0.114674, -0.119440, -0.124801, -0.130758, -0.137013, + -0.143566, -0.150714, -0.157863, -0.165607, -0.173054, -0.180202, + -0.186755, -0.193308, -0.198669, -0.203733, -0.209094, -0.215349, + -0.221604, -0.226965, -0.231135, -0.234709, -0.238582, -0.242156, + -0.245730, -0.247815, -0.249900, -0.251985, -0.254964, -0.256751, + -0.257942, -0.259729, -0.262708, -0.266580, -0.269856, -0.273728, + -0.279685, -0.286238, -0.290706, -0.295174, -0.299940, -0.306195, + -0.313641, -0.320194, -0.325853, -0.330321, -0.335980, -0.342533, + -0.347894, -0.352660, -0.358021, -0.363978, -0.368446, -0.373510, + -0.380360, -0.386020, -0.388998, -0.392870, -0.397040, -0.400912, + -0.403891, -0.407763, -0.413422, -0.420273, -0.428613, -0.436357, + -0.442314, -0.448867, -0.460483, -0.471802, -0.478057, -0.481333, + -0.487588, -0.498609, -0.510523, -0.518565, -0.522139, -0.524522, + -0.530479, -0.540010, -0.547457, -0.546563, -0.542989, -0.546563, + -0.558179, -0.568604, -0.570987, -0.570392, -0.573966, -0.582604, + -0.590944, -0.593624, -0.593028, -0.594518, -0.602560, -0.614474, + -0.624899, -0.630856, -0.638600, -0.652004, -0.670471, -0.687448, + -0.699660, -0.710681, -0.723191, -0.739871, -0.756849, -0.774720, + -0.794080, -0.813143, -0.824462, -0.819994, -0.806590, -0.791102, + -0.770848, -0.736594, -0.684172, -0.621325, -0.559073, -0.504268, + -0.459590, -0.418188, -0.372914, -0.324364, -0.279685, -0.242751, + -0.208498, -0.162033, -0.102462, -0.044082, -0.006553, 0.010127, + 0.017573, 0.025615, 0.029488, 0.023233, 0.007149, -0.009829, + -0.016382, -0.011914, -0.006255, -0.007149, -0.011318, -0.015488, + -0.021148, -0.031573, -0.047657, -0.063741, -0.070294, -0.067315, + -0.058082, -0.048550, -0.037232, -0.022637, -0.009233, -0.001191, + 0.006255, 0.016978, 0.029488, 0.038721, 0.047955, 0.061656, + 0.080123, 0.099781, 0.113780, 0.120333, 0.123312, 0.126588, + 0.127780, 0.123610, 0.114078, 0.105441, 0.104249, 0.110206, + 0.117057, 0.123312, 0.131950, 0.146247, 0.162926, 0.175436, + 0.182883, 0.190031, 0.199265, 0.210583, 0.221008, 0.231731, + 0.247219, 0.269261, 0.295174, 0.322874, 0.348192, 0.371127, + 0.389892, 0.403891, 0.414316, 0.420869, 0.425038, 0.428315, + 0.431591, 0.435761, 0.439633, 0.442314, 0.442314, 0.437846, + 0.430400, 0.422060, 0.413422, 0.403593, 0.393168, 0.383935, + 0.377382, 0.372914, 0.368148, 0.362489, 0.356830, 0.349979, + 0.341639, 0.332108, 0.323470, 0.315726, 0.310662, 0.308577, + 0.310067, 0.314237, 0.319300, 0.323172, 0.325257, 0.326449, + 0.326449, 0.322577, 0.316917, 0.310067, 0.304705, 0.300535, + 0.296961, 0.294578, 0.295174, 0.298152, 0.301131, 0.302025, + 0.299940, 0.296365, 0.293089, 0.290706, 0.288025, 0.285940, + 0.287132, 0.292195, 0.300535, 0.308577, 0.316917, 0.324959, + 0.333001, 0.340448, 0.346107, 0.349979, 0.353553, 0.358617, + 0.364574, 0.369935, 0.375297, 0.380658, 0.383637, 0.383935, + 0.380956, 0.375892, 0.370233, 0.363680, 0.355936, 0.348192, + 0.341937, 0.336278, 0.330023, 0.321087, 0.310960, 0.299344, + 0.287728, 0.274622, 0.260325, 0.247517, 0.239773, 0.235603, + 0.232624, 0.227859, 0.225774, 0.227859, 0.232327, 0.234412, + 0.234709, 0.236497, 0.241858, 0.246624, 0.246921, 0.244241, + 0.241560, 0.240667, 0.241560, 0.242454, 0.243645, 0.244241, + 0.243645, 0.240369, 0.235305, 0.229646, 0.224582, 0.218327, + 0.212370, 0.208200, 0.206413, 0.201350, 0.194499, 0.190031, + 0.187648, 0.185861, 0.182883, 0.180202, 0.177223, 0.176926, + 0.178117, 0.179904, 0.180202, 0.180798, 0.181691, 0.181691, + 0.179011, 0.174543, 0.170969, 0.167692, 0.165011, 0.162629, + 0.160841, 0.159948, 0.159054, 0.156969, 0.154587, 0.153693, + 0.151906, 0.148034, 0.142375, 0.137907, 0.134035, 0.130460, + 0.127482, 0.126886, 0.128077, 0.130758, 0.134630, 0.137609, + 0.139396, 0.142077, 0.144757, 0.147140, 0.148332, 0.151012, + 0.153991, 0.156969, 0.158161, 0.160841, 0.163820, 0.165905, + 0.167394, 0.168586, 0.168288, 0.167096, 0.165607, 0.162926, + 0.159352, 0.154884, 0.151310, 0.147140, 0.141481, 0.134928, + 0.128077, 0.121525, 0.114078, 0.106930, 0.100079, 0.095016, + 0.091144, 0.087867, 0.084591, 0.081910, 0.078336, 0.074762, + 0.070592, 0.066422, 0.062252, 0.058380, 0.055103, 0.051827, + 0.049146, 0.047359, 0.046465, 0.045572, 0.044082, 0.042295, + 0.039615, 0.036934, 0.033658, 0.029488, 0.024722, 0.020254, + 0.015488, 0.011616, 0.008042, 0.003872, 0.000596, -0.002085, + -0.004766, -0.007446, -0.010127, -0.013403, -0.016382, -0.019361, + -0.021446, -0.023531, -0.025913, -0.027998, -0.030083, -0.031573, + -0.033658, -0.036636, -0.039019, -0.041700, -0.044082, -0.047061, + -0.050040, -0.053018, -0.056295, -0.061060, -0.065528, -0.071783, + -0.078336, -0.085782, -0.092931, -0.100973, -0.108121, -0.113780, + -0.117950, -0.123014, -0.128971, -0.134928, -0.139694, -0.143864, + -0.148629, -0.154587, -0.160544, -0.165905, -0.170969, -0.175436, + -0.181096, -0.185563, -0.188840, -0.191223, -0.193903, -0.197775, + -0.202541, -0.207903, -0.212668, -0.216838, -0.220710, -0.224582, + -0.228454, -0.233518, -0.237390, -0.240964, -0.244241, -0.250198, + -0.255857, -0.260623, -0.264495, -0.268069, -0.272239, -0.276707, + -0.279983, -0.282366, -0.285345, -0.289515, -0.293387, -0.296365, + -0.301131, -0.305599, -0.308875, -0.310662, -0.313641, -0.318704, + -0.323768, -0.327342, -0.328534, -0.330916, -0.336278, -0.343724, + -0.350277, -0.354447, -0.358319, -0.366063, -0.375892, -0.385722, + -0.395849, -0.401210, -0.396742, -0.392572, -0.404784, -0.430400, + -0.446782, -0.446186, -0.439038, -0.441123, -0.454228, -0.469121, + -0.475376, -0.472993, -0.473887, -0.483716, -0.494141, -0.495332, + -0.489971, -0.489971, -0.501289, -0.515586, -0.520352, -0.513799, + -0.507544, -0.512012, -0.521543, -0.525118, -0.524522, -0.530181, + -0.541500, -0.548648, -0.549244, -0.551627, -0.560860, -0.570987, + -0.576944, -0.582008, -0.590646, -0.592731, -0.595411, -0.617453, + -0.641579, -0.641877, -0.646940, -0.680002, -0.709787, -0.711872, + -0.708000, -0.722595, -0.750594, -0.763401, -0.753274, -0.736297, + -0.722595, -0.709490, -0.689831, -0.655876, -0.609113, -0.551329, + -0.489077, -0.436059, -0.402104, -0.371127, -0.320492, -0.268069, + -0.244836, -0.237986, -0.209094, -0.161139, -0.119738, -0.086080, + -0.055699, -0.038423, -0.033658, -0.030679, -0.027700, -0.034849, + -0.050635, -0.061954, -0.061656, -0.053316, -0.043189, -0.036338, + -0.030679, -0.022041, -0.016382, -0.019658, -0.025020, -0.019956, + -0.008340, -0.000596, 0.007446, 0.022041, 0.036338, 0.045870, + 0.053912, 0.061358, 0.068804, 0.077144, 0.083995, 0.086378, + 0.088463, 0.093824, 0.101271, 0.105441, 0.103356, 0.097994, + 0.095909, 0.097994, 0.098292, 0.092037, 0.083697, 0.080421, + 0.085484, 0.093228, 0.100079, 0.106930, 0.119738, 0.140885, + 0.165309, 0.185861, 0.202243, 0.217434, 0.232922, 0.247815, + 0.260623, 0.272239, 0.285345, 0.301131, 0.321087, 0.343128, + 0.361893, 0.376190, 0.386020, 0.392274, 0.396444, 0.397338, + 0.394657, 0.391083, 0.388998, 0.388105, 0.388105, 0.387807, + 0.387211, 0.384828, 0.380956, 0.377977, 0.376786, 0.374999, + 0.373808, 0.374701, 0.376190, 0.378573, 0.380956, 0.382147, + 0.381850, 0.380360, 0.376786, 0.373212, 0.369340, 0.364276, + 0.359213, 0.354447, 0.351766, 0.349086, 0.345511, 0.341044, + 0.335086, 0.329427, 0.323768, 0.315428, 0.305003, 0.293982, + 0.285047, 0.277600, 0.271048, 0.265388, 0.262708, 0.263006, + 0.265686, 0.269558, 0.273431, 0.276707, 0.280877, 0.284153, + 0.286834, 0.289515, 0.293387, 0.298450, 0.305003, 0.312449, + 0.319598, 0.326746, 0.333001, 0.338065, 0.340746, 0.342235, + 0.342235, 0.342533, 0.341937, 0.342235, 0.341937, 0.341341, + 0.339256, 0.337171, 0.333597, 0.328831, 0.324066, 0.319598, + 0.316024, 0.311854, 0.307982, 0.305301, 0.302620, 0.299046, + 0.295472, 0.292195, 0.289217, 0.285345, 0.280579, 0.274920, + 0.270452, 0.267771, 0.266282, 0.264495, 0.261814, 0.259431, + 0.258538, 0.258240, 0.254666, 0.247815, 0.239773, 0.232922, + 0.227263, 0.222200, 0.217136, 0.211477, 0.206413, 0.203137, + 0.200754, 0.198371, 0.195393, 0.191818, 0.188542, 0.186755, + 0.186159, 0.185861, 0.185266, 0.184968, 0.186159, 0.187053, + 0.186755, 0.184968, 0.182585, 0.180202, 0.178117, 0.175436, + 0.173351, 0.170671, 0.169181, 0.168586, 0.168586, 0.165607, + 0.161437, 0.156076, 0.151012, 0.146544, 0.142672, 0.138205, + 0.133141, 0.128971, 0.125992, 0.123610, 0.121525, 0.119142, + 0.117950, 0.117653, 0.119738, 0.123312, 0.126588, 0.126886, + 0.125695, 0.126588, 0.128673, 0.129567, 0.128971, 0.130162, + 0.133141, 0.136715, 0.138800, 0.139992, 0.139992, 0.139396, + 0.138800, 0.137609, 0.136120, 0.135822, 0.136120, 0.134928, + 0.132545, 0.131354, 0.131056, 0.129269, 0.125695, 0.123312, + 0.122418, 0.122120, 0.121227, 0.119738, 0.117653, 0.114972, + 0.112887, 0.109908, 0.105738, 0.101568, 0.098590, 0.096207, + 0.092931, 0.088463, 0.083995, 0.081016, 0.078038, 0.073570, + 0.069102, 0.064634, 0.061954, 0.059273, 0.054210, 0.047657, + 0.042593, 0.038721, 0.035743, 0.031870, 0.027403, 0.023233, + 0.021446, 0.019956, 0.018765, 0.016680, 0.014595, 0.013106, + 0.011318, 0.008340, 0.005064, 0.002085, 0.000000, -0.002085, + -0.005064, -0.008042, -0.010127, -0.012212, -0.013999, -0.016680, + -0.019063, -0.022041, -0.024126, -0.027105, -0.030083, -0.033062, + -0.036338, -0.039019, -0.042891, -0.047657, -0.052720, -0.056592, + -0.060762, -0.063443, -0.067017, -0.071187, -0.075655, -0.079825, + -0.083399, -0.086676, -0.090250, -0.094122, -0.098590, -0.103058, + -0.107526, -0.112291, -0.116163, -0.119440, -0.123014, -0.127482, + -0.131652, -0.135524, -0.138502, -0.141779, -0.145651, -0.150119, + -0.155182, -0.160544, -0.166203, -0.171564, -0.176926, -0.181989, + -0.186159, -0.190627, -0.195690, -0.201052, -0.206115, -0.211477, + -0.216838, -0.222497, -0.226667, -0.229348, -0.231433, -0.234114, + -0.238879, -0.242454, -0.244836, -0.246028, -0.247517, -0.250496, + -0.253772, -0.256453, -0.258538, -0.260921, -0.263303, -0.265984, + -0.267473, -0.269856, -0.272239, -0.275515, -0.278196, -0.280877, + -0.284153, -0.287132, -0.290706, -0.294578, -0.298748, -0.302918, + -0.307386, -0.311258, -0.314832, -0.318109, -0.323172, -0.330023, + -0.336576, -0.340746, -0.344618, -0.350277, -0.357426, -0.362787, + -0.365468, -0.367255, -0.372020, -0.377382, -0.382445, -0.386020, + -0.389296, -0.393466, -0.398232, -0.402402, -0.405082, -0.407465, + -0.411635, -0.415805, -0.419677, -0.423549, -0.428613, -0.434272, + -0.439038, -0.441718, -0.445888, -0.451548, -0.456015, -0.456909, + -0.454526, -0.455420, -0.461377, -0.468525, -0.470015, -0.468227, + -0.468227, -0.473589, -0.479546, -0.481631, -0.480439, -0.481333, + -0.485503, -0.490864, -0.493843, -0.496226, -0.502481, -0.511118, + -0.517076, -0.519756, -0.526309, -0.538521, -0.551925, -0.561158, + -0.567115, -0.574561, -0.586476, -0.600773, -0.613580, -0.624005, + -0.630260, -0.633537, -0.633239, -0.626686, -0.615368, -0.598092, + -0.572477, -0.536138, -0.493545, -0.451250, -0.416103, -0.386913, + -0.356532, -0.322874, -0.291004, -0.269261, -0.257644, -0.244539, + -0.219817, -0.187351, -0.155480, -0.130758, -0.115270, -0.103951, + -0.092931, -0.084591, -0.083101, -0.088463, -0.095611, -0.097994, + -0.090250, -0.073868, -0.054210, -0.039317, -0.030679, -0.022637, + -0.011616, -0.000596, 0.005659, 0.009829, 0.016382, 0.029785, + 0.047657, 0.063443, 0.074166, 0.081910, 0.090548, 0.099781, + 0.105441, 0.105441, 0.103951, 0.107228, 0.115270, 0.124503, + 0.129567, 0.129269, 0.126886, 0.125099, 0.123312, 0.119738, + 0.114078, 0.108717, 0.106632, 0.109908, 0.116461, 0.125992, + 0.135226, 0.144162, 0.153693, 0.164714, 0.176330, 0.187946, + 0.199563, 0.210583, 0.222200, 0.234412, 0.245134, 0.253176, + 0.259729, 0.266580, 0.275515, 0.285643, 0.294578, 0.303216, + 0.310960, 0.319300, 0.325555, 0.328236, 0.326449, 0.322874, + 0.320789, 0.321087, 0.321981, 0.322874, 0.323768, 0.326746, + 0.331512, 0.337171, 0.340746, 0.341937, 0.343724, 0.346405, + 0.350277, 0.353851, 0.355341, 0.356532, 0.357426, 0.358319, + 0.357128, 0.352958, 0.348490, 0.343724, 0.339256, 0.335384, + 0.332108, 0.329129, 0.325853, 0.323172, 0.319598, 0.314832, + 0.308875, 0.302025, 0.295174, 0.288323, 0.282366, 0.277898, + 0.273431, 0.270154, 0.268367, 0.267176, 0.265984, 0.265091, + 0.264793, 0.265388, 0.266878, 0.268069, 0.268665, 0.269261, + 0.270154, 0.271048, 0.271346, 0.269856, 0.268665, 0.268665, + 0.268665, 0.268963, 0.269558, 0.269261, 0.269261, 0.269261, + 0.268069, 0.266580, 0.263899, 0.260623, 0.257346, 0.254666, + 0.252283, 0.251389, 0.250198, 0.249006, 0.247815, 0.246326, + 0.245730, 0.244539, 0.242751, 0.240964, 0.238582, 0.236497, + 0.234709, 0.232029, 0.229646, 0.226369, 0.223689, 0.219817, + 0.216242, 0.212668, 0.209690, 0.206711, 0.204328, 0.202243, + 0.200754, 0.198967, 0.197180, 0.194499, 0.191520, 0.187648, + 0.183776, 0.178713, 0.173054, 0.167096, 0.161437, 0.156969, + 0.153097, 0.150119, 0.147438, 0.144757, 0.141481, 0.138800, + 0.136120, 0.132545, 0.128077, 0.123312, 0.118248, 0.113185, + 0.108419, 0.103356, 0.098590, 0.095313, 0.092335, 0.090846, + 0.089356, 0.087867, 0.086378, 0.083995, 0.081612, 0.078038, + 0.074166, 0.070294, 0.066124, 0.062549, 0.059273, 0.055401, + 0.051827, 0.049742, 0.048848, 0.048252, 0.047955, 0.047657, + 0.048550, 0.048550, 0.047955, 0.047359, 0.046167, 0.045274, + 0.043785, 0.043487, 0.042891, 0.043189, 0.042891, 0.041402, + 0.039913, 0.039019, 0.038423, 0.037828, 0.036636, 0.035743, + 0.034253, 0.032764, 0.030977, 0.028892, 0.025913, 0.022935, + 0.019063, 0.015786, 0.012808, 0.010723, 0.009829, 0.009531, + 0.009531, 0.009829, 0.010425, 0.010723, 0.011021, 0.011318, + 0.011616, 0.011616, 0.011318, 0.010425, 0.010127, 0.010127, + 0.010723, 0.010425, 0.010425, 0.010425, 0.010127, 0.008936, + 0.007149, 0.005957, 0.005957, 0.005361, 0.003872, 0.001489, + -0.000298, -0.001787, -0.002085, -0.002979, -0.004170, -0.005064, + -0.009829, -0.016978, -0.011021, 0.006851, 0.006851, -0.014893, + -0.026509, -0.019063, -0.011021, -0.007744, -0.011616, -0.024126, + -0.032168, -0.024126, -0.012808, -0.018169, -0.028594, -0.026509, + -0.020850, -0.022637, -0.028594, -0.034849, -0.036934, -0.031573, + -0.025913, -0.031870, -0.043487, -0.044678, -0.036636, -0.032168, + -0.036040, -0.041104, -0.042295, -0.041700, -0.040210, -0.041104, + -0.045274, -0.047955, -0.048252, -0.050337, -0.054805, -0.056890, + -0.054805, -0.052720, -0.054805, -0.058677, -0.060464, -0.058082, + -0.054805, -0.054805, -0.059869, -0.064634, -0.065230, -0.064634, + -0.067017, -0.070889, -0.073868, -0.074166, -0.073570, -0.075059, + -0.077144, -0.077740, -0.075953, -0.075655, -0.076549, -0.080123, + -0.082208, -0.082804, -0.083697, -0.085782, -0.088761, -0.090250, + -0.091441, -0.092037, -0.092633, -0.092931, -0.092931, -0.092633, + -0.092931, -0.094122, -0.095313, -0.095313, -0.094420, -0.095313, + -0.097101, -0.098888, -0.098888, -0.097696, -0.097101, -0.097101, + -0.097398, -0.097994, -0.097994, -0.097994, -0.098292, -0.098590, + -0.099186, -0.100079, -0.101271, -0.102462, -0.103058, -0.103356, + -0.103951, -0.105143, -0.106334, -0.107526, -0.108419, -0.109313, + -0.109610, -0.110504, -0.111398, -0.112291, -0.113780, -0.115865, + -0.117653, -0.119142, -0.120333, -0.121823, -0.123908, -0.125099, + -0.126588, -0.127482, -0.128077, -0.128971, -0.130460, -0.131056, + -0.132247, -0.133439, -0.134332, -0.135226, -0.137013, -0.138502, + -0.141779, -0.144162, -0.145353, -0.146247, -0.147736, -0.150417, + -0.152204, -0.152204, -0.151906, -0.152502, -0.154587, -0.156374, + -0.157565, -0.158756, -0.160841, -0.165011, -0.168884, -0.171564, + -0.173649, -0.176926, -0.181096, -0.184372, -0.184074, -0.183181, + -0.184074, -0.187351, -0.189733, -0.189733, -0.189436, -0.191520, + -0.195690, -0.200158, -0.202541, -0.204924, -0.208200, -0.212966, + -0.217434, -0.220115, -0.221902, -0.223689, -0.227263, -0.230837, + -0.233518, -0.234709, -0.237986, -0.242751, -0.247517, -0.250496, + -0.252581, -0.253474, -0.251687, -0.246921, -0.237986, -0.227561, + -0.216838, -0.205222, -0.190329, -0.176330, -0.167096, -0.165607, + -0.169479, -0.173649, -0.176032, -0.178117, -0.183181, -0.187648, + -0.187053, -0.176330, -0.161139, -0.148034, -0.140587, -0.135822, + -0.128971, -0.121525, -0.117355, -0.118546, -0.122716, -0.122418, + -0.115865, -0.106930, -0.100377, -0.094718, -0.087271, -0.075357, + -0.062847, -0.053614, -0.047657, -0.041402, -0.032466, -0.023233, + -0.016978, -0.014893, -0.013701, -0.009531, -0.003276, 0.001787, + 0.005659, 0.009233, 0.015786, 0.023828, 0.030977, 0.035147, + 0.037828, 0.040210, 0.044082, 0.048252, 0.051827, 0.055401, + 0.059273, 0.063741, 0.068209, 0.072677, 0.076846, 0.082208, + 0.088165, 0.095611, 0.104547, 0.115270, 0.125695, 0.134035, + 0.139694, 0.143268, 0.145651, 0.146544, 0.145949, 0.143864, + 0.143864, 0.147140, 0.153097, 0.159650, 0.165905, 0.171862, + 0.177223, 0.182287, 0.184670, 0.183776, 0.181989, 0.181096, + 0.181989, 0.183181, 0.183478, 0.183776, 0.185861, 0.189733, + 0.194499, 0.197478, 0.199860, 0.203137, 0.207307, 0.211477, + 0.214753, 0.215647, 0.215647, 0.214157, 0.212966, 0.211179, + 0.209392, 0.207605, 0.206413, 0.207307, 0.209094, 0.211477, + 0.213562, 0.215349, 0.217136, 0.218327, 0.219221, 0.218327, + 0.216540, 0.214157, 0.212072, 0.209987, 0.207307, 0.204328, + 0.202541, 0.202839, 0.203733, 0.204626, 0.205818, 0.207605, + 0.210285, 0.213264, 0.213264, 0.211179, 0.207605, 0.204328, + 0.200754, 0.196286, 0.190925, 0.187053, 0.184968, 0.183776, + 0.182883, 0.182287, 0.181989, 0.182585, 0.182585, 0.181096, + 0.178117, 0.175734, 0.173351, 0.170671, 0.166501, 0.162033, + 0.159054, 0.157863, 0.157565, 0.157267, 0.156374, 0.156969, + 0.157267, 0.157863, 0.156374, 0.154587, 0.152502, 0.151310, + 0.150417, 0.148927, 0.147736, 0.145651, 0.143566, 0.140885, + 0.137907, 0.134928, 0.132843, 0.131354, 0.129865, 0.128077, + 0.126588, 0.124503, 0.122120, 0.119142, 0.115270, 0.111993, + 0.107823, 0.104547, 0.101271, 0.098590, 0.096505, 0.095016, + 0.094122, 0.092335, 0.091144, 0.089059, 0.086676, 0.084293, + 0.080421, 0.076549, 0.072974, 0.069996, 0.067017, 0.064634, + 0.061656, 0.059273, 0.056890, 0.055103, 0.053912, 0.052422, + 0.050933, 0.049444, 0.047955, 0.045572, 0.043487, 0.040508, + 0.037232, 0.034253, 0.031573, 0.029785, 0.028594, 0.027700, + 0.026509, 0.025318, 0.024722, 0.023531, 0.022339, 0.021148, + 0.020254, 0.019361, 0.018169, 0.016680, 0.014893, 0.013106, + 0.011616, 0.010723, 0.009531, 0.009233, 0.008936, 0.008936, + 0.008042, 0.007446, 0.006553, 0.006255, 0.006255, 0.005957, + 0.005361, 0.004170, 0.002383, 0.000894, -0.000596, -0.002383, + -0.004468, -0.005064, -0.005064, -0.004468, -0.004170, -0.004170, + -0.004170, -0.004766, -0.005361, -0.006553, -0.007149, -0.008042, + -0.008340, -0.008936, -0.008638, -0.008638, -0.008936, -0.008638, + -0.008638, -0.008638, -0.008638, -0.008638, -0.008936, -0.008936, + -0.009531, -0.009829, -0.010723, -0.011318, -0.011914, -0.012510, + -0.013403, -0.014595, -0.015191, -0.016084, -0.017276, -0.017871, + -0.017871, -0.017871, -0.018765, -0.019361, -0.020552, -0.021743, + -0.022935, -0.023828, -0.024722, -0.025615, -0.026211, -0.026807, + -0.027105, -0.027998, -0.028296, -0.029190, -0.030083, -0.030679, + -0.031870, -0.032466, -0.033658, -0.034849, -0.036040, -0.037530, + -0.038721, -0.040210, -0.041104, -0.041997, -0.043189, -0.044380, + -0.045274, -0.046465, -0.047061, -0.048252, -0.048848, -0.049742, + -0.051231, -0.052422, -0.053912, -0.055401, -0.056295, -0.057784, + -0.058677, -0.059571, -0.060464, -0.061358, -0.062252, -0.063443, + -0.064932, -0.065826, -0.067315, -0.068209, -0.069400, -0.070592, + -0.071485, -0.072677, -0.073868, -0.074762, -0.075655, -0.076846, + -0.078038, -0.079527, -0.080421, -0.081612, -0.082506, -0.083399, + -0.084591, -0.086080, -0.087271, -0.088463, -0.089356, -0.090548, + -0.091441, -0.092633, -0.094122, -0.095016, -0.095909, -0.096505, + -0.097696, -0.098888, -0.100377, -0.101568, -0.102760, -0.103951, + -0.105441, -0.106334, -0.107823, -0.107823, -0.109015, -0.109908, + -0.111100, -0.111695, -0.112291, -0.112887, -0.114376, -0.115568, + -0.116759, -0.117355, -0.118546, -0.119738, -0.120929, -0.121823, + -0.122716, -0.123610, -0.124801, -0.126886, -0.128971, -0.130758, + -0.132247, -0.133439, -0.135524, -0.136715, -0.138205, -0.138800, + -0.139396, -0.140885, -0.142077, -0.143268, -0.143864, -0.145651, + -0.147140, -0.148332, -0.150417, -0.152502, -0.154289, -0.156374, + -0.157565, -0.159054, -0.160246, -0.161735, -0.162926, -0.164416, + -0.165607, -0.167096, -0.168884, -0.171266, -0.173351, -0.174543, + -0.175734, -0.177223, -0.179011, -0.180500, -0.181691, -0.182883, + -0.184670, -0.187053, -0.189138, -0.191223, -0.193605, -0.196286, + -0.198967, -0.201350, -0.202541, -0.204328, -0.206711, -0.208796, + -0.211477, -0.214455, -0.217732, -0.221306, -0.224880, -0.229050, + -0.232624, -0.235901, -0.239475, -0.243943, -0.248709, -0.253176, + -0.257644, -0.261814, -0.265686, -0.267473, -0.266878, -0.262410, + -0.256155, -0.249602, -0.241560, -0.231135, -0.217732, -0.207009, + -0.202541, -0.204328, -0.206711, -0.207605, -0.209094, -0.214455, + -0.221604, -0.224284, -0.217434, -0.205222, -0.193903, -0.187053, + -0.181393, -0.172160, -0.159650, -0.151012, -0.149523, -0.150119, + -0.145651, -0.135822, -0.125099, -0.120631, -0.118844, -0.114376, + -0.104845, -0.095611, -0.090846, -0.089059, -0.083697, -0.073272, + -0.060762, -0.051529, -0.045572, -0.040508, -0.033360, -0.025615, + -0.020552, -0.017573, -0.015488, -0.011616, -0.005957, -0.000298, + 0.004766, 0.009531, 0.015191, 0.021148, 0.028892, 0.037232, + 0.045572, 0.053614, 0.060167, 0.066719, 0.073570, 0.080719, + 0.085484, 0.089059, 0.092931, 0.099483, 0.107526, 0.115865, + 0.122716, 0.128673, 0.135524, 0.142077, 0.146247, 0.147438, + 0.147140, 0.148332, 0.151310, 0.155778, 0.159948, 0.163820, + 0.167990, 0.173649, 0.178713, 0.181691, 0.182287, 0.182883, + 0.184968, 0.188542, 0.193010, 0.196584, 0.200158, 0.204328, + 0.208796, 0.212966, 0.215051, 0.215647, 0.216242, 0.217434, + 0.219817, 0.221902, 0.222795, 0.222200, 0.221902, 0.221902, + 0.221604, 0.220115, 0.218030, 0.217136, 0.217136, 0.217732, + 0.217732, 0.217136, 0.216242, 0.216838, 0.217732, 0.217434, + 0.216838, 0.215945, 0.216242, 0.216540, 0.216540, 0.215349, + 0.213264, 0.212072, 0.212072, 0.212668, 0.212668, 0.211775, + 0.211775, 0.212072, 0.212668, 0.212072, 0.210285, 0.207605, + 0.204924, 0.202243, 0.198967, 0.195690, 0.192414, 0.190031, + 0.188244, 0.186457, 0.184372, 0.182585, 0.180500, 0.178713, + 0.176926, 0.174841, 0.173054, 0.170969, 0.169479, 0.167692, + 0.165905, 0.164118, 0.162331, 0.161437, 0.160246, 0.158459, + 0.156969, 0.155778, 0.153991, 0.152204, 0.149821, 0.147140, + 0.144757, 0.142077, 0.139694, 0.137013, 0.134928, 0.133141, + 0.130758, 0.128673, 0.126588, 0.125099, 0.123610, 0.121823, + 0.120035, 0.119142, 0.118248, 0.116163, 0.113780, 0.110802, + 0.107228, 0.104249, 0.101866, 0.098888, 0.096505, 0.094420, + 0.092633, 0.090548, 0.088463, 0.085782, 0.083697, 0.081612, + 0.079527, 0.076251, 0.072974, 0.069698, 0.067017, 0.064337, + 0.061954, 0.059571, 0.058380, 0.057188, 0.056592, 0.055401, + 0.053614, 0.051827, 0.050337, 0.048252, 0.046167, 0.044380, + 0.042295, 0.040210, 0.038423, 0.036934, 0.035445, 0.033955, + 0.033360, 0.033360, 0.033062, 0.031870, 0.031870, 0.030977, + 0.030381, 0.029488, 0.028594, 0.027998, 0.026807, 0.025913, + 0.025020, 0.024424, 0.023828, 0.023531, 0.023828, 0.023531, + 0.024126, 0.024126, 0.024126, 0.023531, 0.022637, 0.022339, + 0.021446, 0.020850, 0.019956, 0.019361, 0.018765, 0.018169, + 0.017276, 0.016978, 0.016382, 0.016382, 0.016680, 0.017276, + 0.017871, 0.018169, 0.018467, 0.018467, 0.018169, 0.017573, + 0.017573, 0.017573, 0.017573, 0.018169, 0.018169, 0.018765, + 0.019063, 0.019361, 0.019361, 0.019956, 0.019658, 0.019361, + 0.018765, 0.018169, 0.017573, 0.017276, 0.016680, 0.016382, + 0.016084, 0.016084, 0.015786, 0.015786, 0.015488, 0.015191, + 0.014595, 0.014893, 0.014595, 0.013999, 0.013701, 0.013106, + 0.012510, 0.011318, 0.010425, 0.009531, 0.008936, 0.008340, + 0.007446, 0.006851, 0.006255, 0.005361, 0.004468, 0.003574, + 0.002085, 0.001191, 0.000000, -0.000596, -0.002383, -0.003276, + -0.004766, -0.005659, -0.006553, -0.007149, -0.007446, -0.008638, + -0.009531, -0.010127, -0.011318, -0.012212, -0.013999, -0.015191, + -0.016382, -0.017573, -0.019063, -0.020552, -0.022041, -0.023233, + -0.024722, -0.025615, -0.026807, -0.027700, -0.028892, -0.030381, + -0.032168, -0.033360, -0.035147, -0.036934, -0.038721, -0.039913, + -0.041700, -0.042891, -0.044082, -0.045274, -0.046465, -0.047657, + -0.048848, -0.049742, -0.051231, -0.052422, -0.053912, -0.055401, + -0.056890, -0.058082, -0.059869, -0.061060, -0.062549, -0.063741, + -0.064932, -0.066422, -0.067911, -0.069102, -0.070294, -0.071783, + -0.072677, -0.073570, -0.075059, -0.076549, -0.077442, -0.078931, + -0.080123, -0.081016, -0.082208, -0.082804, -0.083697, -0.083995, + -0.084889, -0.085484, -0.086378, -0.086676, -0.087569, -0.088761, + -0.090548, -0.092037, -0.093526, -0.094718, -0.096505, -0.098292, + -0.099781, -0.100377, -0.101271, -0.102164, -0.103653, -0.104249, + -0.105738, -0.106930, -0.108121, -0.109610, -0.111695, -0.113185, + -0.114674, -0.115270, -0.116461, -0.118248, -0.119440, -0.120035, + -0.120929, -0.121823, -0.123014, -0.123908, -0.124801, -0.125992, + -0.127184, -0.128375, -0.129865, -0.131950, -0.133141, -0.134630, + -0.135822, -0.137311, -0.138205, -0.138800, -0.139396, -0.139992, + -0.140885, -0.142672, -0.144459, -0.145949, -0.148034, -0.149523, + -0.151310, -0.152799, -0.154587, -0.155778, -0.157267, -0.158459, + -0.159948, -0.161139, -0.162331, -0.163522, -0.165011, -0.166799, + -0.169181, -0.171266, -0.172756, -0.175139, -0.176926, -0.179011, + -0.180798, -0.181691, -0.183478, -0.184968, -0.187351, -0.189436, + -0.191520, -0.193903, -0.196584, -0.199563, -0.202839, -0.205520, + -0.207903, -0.210881, -0.214753, -0.218625, -0.222497, -0.225178, + -0.228454, -0.231731, -0.236497, -0.240667, -0.243347, -0.244539, + -0.243645, -0.240667, -0.234709, -0.226965, -0.217434, -0.207009, + -0.196584, -0.188542, -0.184968, -0.186159, -0.188840, -0.190925, + -0.192414, -0.195690, -0.198967, -0.199265, -0.193010, -0.182287, + -0.171862, -0.163820, -0.157267, -0.149225, -0.139694, -0.132843, + -0.129567, -0.128673, -0.125397, -0.117057, -0.108419, -0.101866, + -0.099781, -0.096505, -0.089952, -0.081910, -0.076549, -0.072974, + -0.067613, -0.058380, -0.047359, -0.038423, -0.033062, -0.027998, + -0.021743, -0.014893, -0.009233, -0.005659, -0.002979, 0.000298, + 0.006255, 0.011914, 0.016084, 0.019956, 0.025318, 0.032168, + 0.041104, 0.050040, 0.057784, 0.065826, 0.072974, 0.079825, + 0.085782, 0.089952, 0.093228, 0.095909, 0.100675, 0.106036, + 0.112589, 0.118546, 0.124205, 0.130162, 0.136715, 0.141779, + 0.145353, 0.146544, 0.147736, 0.149821, 0.153693, 0.157565, + 0.161139, 0.164714, 0.169777, 0.175436, 0.179606, 0.181691, + 0.182287, 0.184074, 0.187053, 0.191223, 0.195393, 0.198967, + 0.202839, 0.207307, 0.211179, 0.213860, 0.213860, 0.213562, + 0.213264, 0.213860, 0.213562, 0.213860, 0.214157, 0.214455, + 0.215051, 0.215945, 0.215647, 0.215051, 0.214455, 0.213860, + 0.213860, 0.213562, 0.213562, 0.212966, 0.212966, 0.213562, + 0.214753, 0.215945, 0.216540, 0.216838, 0.217434, 0.218030, + 0.218923, 0.218030, 0.216838, 0.215647, 0.215051, 0.214753, + 0.214157, 0.212370, 0.211179, 0.209987, 0.209392, 0.207903, + 0.205222, 0.202243, 0.199860, 0.198371, 0.195988, 0.193605, + 0.190925, 0.189436, 0.188542, 0.186755, 0.183776, 0.181393, + 0.179904, 0.178117, 0.176628, 0.174841, 0.173649, 0.172756, + 0.171862, 0.170969, 0.168884, 0.166501, 0.164416, 0.162629, + 0.160246, 0.157863, 0.155182, 0.153097, 0.151608, 0.148927, + 0.145949, 0.142970, 0.140290, 0.138502, 0.136120, 0.133737, + 0.131652, 0.130758, 0.129567, 0.127780, 0.125695, 0.123312, + 0.120929, 0.119142, 0.117355, 0.114674, 0.112291, 0.109610, + 0.107823, 0.106036, 0.104249, 0.102164, 0.099186, 0.097101, + 0.094718, 0.092037, 0.089059, 0.086378, 0.083697, 0.082208, + 0.080421, 0.078634, 0.075059, 0.072379, 0.069102, 0.066422, + 0.063443, 0.061358, 0.059869, 0.058677, 0.058380, 0.057188, + 0.055103, 0.052720, 0.050040, 0.047359, 0.045274, 0.043487, + 0.041402, 0.040806, 0.039615, 0.038125, 0.036934, 0.035147, + 0.033062, 0.031573, 0.030381, 0.028594, 0.027403, 0.026211, + 0.025615, 0.025020, 0.024722, 0.023828, 0.023531, 0.022637, + 0.021743, 0.020552, 0.019063, 0.018467, 0.018169, 0.018169, + 0.018169, 0.018169, 0.017573, 0.016680, 0.015191, 0.014297, + 0.013403, 0.012510, 0.011616, 0.011021, 0.010425, 0.009531, + 0.009233, 0.008638, 0.008042, 0.007446, 0.007446, 0.007446, + 0.007744, 0.007744, 0.007744, 0.008042, 0.008340, 0.008638, + 0.008638, 0.008638, 0.009531, 0.009233, 0.009531, 0.009233, + 0.009233, 0.008936, 0.009233, 0.008936, 0.009233, 0.008936, + 0.008936, 0.007744, 0.007744, 0.006851, 0.005957, 0.005361, + 0.005064, 0.005064, 0.005064, 0.005361, 0.005064, 0.004468, + 0.004170, 0.003872, 0.003276, 0.002681, 0.002383, 0.001787, + 0.001191, 0.000894, 0.000298, 0.000000, -0.000596, -0.001489, + -0.002383, -0.003276, -0.004468, -0.005659, -0.006255, -0.007149, + -0.007744, -0.008340, -0.009233, -0.010425, -0.011616, -0.012510, + -0.014297, -0.015488, -0.016680, -0.017276, -0.018169, -0.018467, + -0.019063, -0.019956, -0.020850, -0.022041, -0.023531, -0.025020, + -0.026211, -0.027998, -0.029190, -0.030679, -0.031573, -0.032764, + -0.033955, -0.035147, -0.036338, -0.037530, -0.039317, -0.040508, + -0.041997, -0.043189, -0.044380, -0.045274, -0.046465, -0.047359, + -0.048252, -0.049146, -0.050040, -0.051827, -0.052720, -0.053912, + -0.055103, -0.055997, -0.056890, -0.057188, -0.058082, -0.059273, + -0.060464, -0.061656, -0.063741, -0.065230, -0.066719, -0.068209, + -0.069400, -0.070294, -0.071485, -0.072677, -0.073570, -0.074464, + -0.075655, -0.076549, -0.077740, -0.078634, -0.079825, -0.080421, + -0.081314, -0.081612, -0.082208, -0.082804, -0.083399, -0.084293, + -0.085186, -0.085782, -0.086378, -0.086676, -0.087569, -0.088165, + -0.088761, -0.089654, -0.090846, -0.092633, -0.094122, -0.095313, + -0.096207, -0.096803, -0.097994, -0.098888, -0.100079, -0.100377, + -0.100973, -0.101866, -0.103058, -0.103951, -0.105143, -0.105441, + -0.106632, -0.107526, -0.108717, -0.109908, -0.109908, -0.110504, + -0.111100, -0.111993, -0.113185, -0.114078, -0.114972, -0.116163, + -0.117950, -0.119142, -0.120631, -0.120929, -0.122120, -0.123312, + -0.124801, -0.126290, -0.126886, -0.127780, -0.128673, -0.130162, + -0.130758, -0.131354, -0.131652, -0.132247, -0.133439, -0.134332, + -0.135822, -0.136417, -0.137013, -0.138502, -0.140290, -0.141779, + -0.143268, -0.143864, -0.145055, -0.146544, -0.147438, -0.148629, + -0.149523, -0.150714, -0.151906, -0.153097, -0.154587, -0.155778, + -0.156969, -0.157863, -0.159054, -0.159948, -0.161735, -0.163522, + -0.165309, -0.166501, -0.168884, -0.170969, -0.173054, -0.174841, + -0.176628, -0.179011, -0.181989, -0.184372, -0.187351, -0.189733, + -0.192712, -0.195393, -0.198967, -0.202243, -0.204030, -0.205818, + -0.208796, -0.212668, -0.217136, -0.220710, -0.224284, -0.227859, + -0.230242, -0.231731, -0.232029, -0.231433, -0.228752, -0.223093, + -0.214753, -0.204328, -0.195393, -0.200158, -0.219519, -0.233518, + -0.233220, -0.229050, -0.231433, -0.237688, -0.237390, -0.222200, + -0.196882, -0.172756, -0.157863, -0.154289, -0.156374, -0.159948, + -0.162926, -0.165607, -0.169777, -0.179904, -0.187648, -0.182883, + -0.165309, -0.141481, -0.119738, -0.100079, -0.078931, -0.057188, + -0.039615, -0.029488, -0.025020, -0.022637, -0.021446, -0.023531, + -0.027998, -0.029190, -0.021743, -0.007149, 0.008638, 0.020850, + 0.031573, 0.045274, 0.059273, 0.066124, 0.062252, 0.053018, + 0.046465, 0.046763, 0.050933, 0.055401, 0.059273, 0.066124, + 0.077144, 0.090548, 0.103951, 0.115865, 0.125099, 0.130162, + 0.133141, 0.133439, 0.133737, 0.136715, 0.142375, 0.147438, + 0.152204, 0.155778, 0.161139, 0.166799, 0.170969, 0.172458, + 0.171266, 0.168884, 0.166203, 0.165011, 0.166203, 0.169777, + 0.174841, 0.181393, 0.187946, 0.195095, 0.202243, 0.208498, + 0.212966, 0.214753, 0.215051, 0.216540, 0.218923, 0.222200, + 0.224880, 0.226369, 0.228752, 0.232624, 0.237092, 0.239475, + 0.240071, 0.238582, 0.236497, 0.233220, 0.229050, 0.223987, + 0.219817, 0.217434, 0.216540, 0.215647, 0.215647, 0.218030, + 0.223093, 0.228752, 0.233220, 0.235305, 0.236199, 0.236794, + 0.235901, 0.232922, 0.229050, 0.226072, 0.224284, 0.223093, + 0.222200, 0.220412, 0.218030, 0.216540, 0.213562, 0.209987, + 0.205520, 0.201945, 0.198371, 0.195095, 0.191818, 0.188840, + 0.187351, 0.186457, 0.186159, 0.184968, 0.183776, 0.183776, + 0.184372, 0.184670, 0.184968, 0.185563, 0.186159, 0.185266, + 0.183181, 0.179904, 0.177223, 0.173947, 0.171266, 0.168586, + 0.166203, 0.163820, 0.162033, 0.161139, 0.159054, 0.155778, + 0.153097, 0.151012, 0.149225, 0.145949, 0.144162, 0.144162, + 0.145353, 0.145353, 0.145055, 0.145055, 0.146247, 0.147140, + 0.146544, 0.145055, 0.144459, 0.144459, 0.144162, 0.141779, + 0.137609, 0.133439, 0.130162, 0.125397, 0.120333, 0.114972, + 0.110206, 0.106632, 0.103356, 0.100675, 0.098292, 0.097696, + 0.097994, 0.098590, 0.096803, 0.095313, 0.094420, 0.092931, + 0.091144, 0.089059, 0.087271, 0.085484, 0.083101, 0.079825, + 0.076251, 0.072379, 0.068507, 0.064337, 0.060464, 0.057486, + 0.054805, 0.052422, 0.048848, 0.045870, 0.044082, 0.042593, + 0.040806, 0.039317, 0.039019, 0.040210, 0.040806, 0.041997, + 0.042593, 0.042593, 0.041997, 0.041402, 0.040508, 0.039615, + 0.038721, 0.038125, 0.036934, 0.034551, 0.032466, 0.030679, + 0.028296, 0.026509, 0.025318, 0.024126, 0.022637, 0.021743, + 0.021148, 0.020850, 0.021148, 0.022339, 0.024126, 0.025615, + 0.027105, 0.028594, 0.030083, 0.030679, 0.030977, 0.031573, + 0.032764, 0.033360, 0.033658, 0.032764, 0.031573, 0.030381, + 0.029190, 0.027700, 0.026509, 0.025913, 0.025615, 0.025020, + 0.024126, 0.023828, 0.023828, 0.024722, 0.025615, 0.026509, + 0.027998, 0.029785, 0.031870, 0.033062, 0.034551, 0.034849, + 0.035147, 0.035147, 0.034253, 0.033955, 0.033062, 0.031870, + 0.030381, 0.028594, 0.026211, 0.025020, 0.023233, 0.021148, + 0.019361, 0.017276, 0.015488, 0.014595, 0.013999, 0.012510, + 0.012212, 0.012212, 0.011914, 0.011914, 0.010425, 0.010127, + 0.009233, 0.008042, 0.006255, 0.004468, 0.002681, 0.000894, + -0.000894, -0.004468, -0.008042, -0.011616, -0.014893, -0.018467, + -0.022339, -0.025615, -0.028892, -0.031573, -0.033955, -0.036338, + -0.038125, -0.039317, -0.040806, -0.041700, -0.043189, -0.044082, + -0.045274, -0.046763, -0.047657, -0.049742, -0.051827, -0.054210, + -0.055997, -0.058677, -0.061358, -0.064039, -0.066719, -0.069400, + -0.072081, -0.075059, -0.077740, -0.080421, -0.083101, -0.085186, + -0.086974, -0.088463, -0.089654, -0.090548, -0.091144, -0.091739, + -0.091739, -0.092335, -0.092931, -0.093228, -0.094122, -0.095313, + -0.095909, -0.097398, -0.098888, -0.100675, -0.102760, -0.105143, + -0.107823, -0.110206, -0.113185, -0.115865, -0.118546, -0.120631, + -0.123014, -0.124801, -0.126290, -0.127184, -0.128673, -0.129567, + -0.130758, -0.131652, -0.132545, -0.133439, -0.134630, -0.135226, + -0.136120, -0.137013, -0.138205, -0.140290, -0.142672, -0.144459, + -0.146247, -0.148927, -0.152204, -0.155778, -0.157863, -0.159650, + -0.162629, -0.166501, -0.169181, -0.169479, -0.169479, -0.170969, + -0.172458, -0.172458, -0.172160, -0.172160, -0.173351, -0.175139, + -0.176330, -0.176032, -0.175734, -0.176628, -0.178713, -0.179011, + -0.178713, -0.179606, -0.182883, -0.186755, -0.189436, -0.190627, + -0.192712, -0.196584, -0.200754, -0.202243, -0.202243, -0.204030, + -0.206711, -0.209392, -0.209690, -0.210285, -0.212072, -0.215051, + -0.216242, -0.216242, -0.215945, -0.217434, -0.220412, -0.221306, + -0.221306, -0.222200, -0.226369, -0.230539, -0.232922, -0.233518, + -0.235305, -0.239177, -0.242751, -0.244836, -0.245432, -0.246624, + -0.249006, -0.251985, -0.253176, -0.252581, -0.252283, -0.254070, + -0.256453, -0.257644, -0.256751, -0.256751, -0.260027, -0.263601, + -0.265388, -0.265984, -0.267473, -0.269856, -0.272835, -0.275813, + -0.277898, -0.279983, -0.283260, -0.288025, -0.291302, -0.291898, + -0.292493, -0.297259, -0.302918, -0.304407, -0.304110, -0.306790, + -0.314237, -0.319598, -0.320789, -0.321087, -0.324661, -0.329725, + -0.331512, -0.332704, -0.335980, -0.341044, -0.347894, -0.355043, + -0.360702, -0.363383, -0.364276, -0.362787, -0.356830, -0.344618, + -0.330619, -0.316917, -0.302620, -0.285940, -0.268069, -0.248411, + -0.228454, -0.211775, -0.197180, -0.181691, -0.167394, -0.157863, + -0.154289, -0.153097, -0.151906, -0.148332, -0.141183, -0.131056, + -0.119738, -0.107228, -0.090548, -0.073272, -0.061656, -0.053912, + -0.045870, -0.036636, -0.026509, -0.013999, 0.001489, 0.019361, + 0.036636, 0.051529, 0.064634, 0.075357, 0.082208, 0.085782, + 0.087569, 0.088761, 0.089952, 0.092037, 0.093526, 0.094122, + 0.092633, 0.091144, 0.090250, 0.089356, 0.088165, 0.089654, + 0.093824, 0.101866, 0.112291, 0.122716, 0.131652, 0.139992, + 0.147736, 0.154587, 0.158756, 0.160841, 0.165011, 0.170671, + 0.177819, 0.182585, 0.186159, 0.187351, 0.189138, 0.191223, + 0.193010, 0.192116, 0.192116, 0.195095, 0.199860, 0.202839, + 0.204328, 0.205222, 0.207605, 0.210881, 0.215349, 0.221306, + 0.230539, 0.241858, 0.255559, 0.268367, 0.278196, 0.285643, + 0.291898, 0.296067, 0.298450, 0.298450, 0.297855, 0.298152, + 0.298450, 0.297855, 0.295770, 0.293089, 0.291302, 0.289813, + 0.288323, 0.286238, 0.285345, 0.285643, 0.286238, 0.287430, + 0.287430, 0.287132, 0.286834, 0.287430, 0.286834, 0.285643, + 0.285047, 0.285345, 0.285047, 0.284451, 0.282366, 0.279388, + 0.275515, 0.271048, 0.265984, 0.259729, 0.254070, 0.248113, + 0.242454, 0.235603, 0.228454, 0.222200, 0.217732, 0.213860, + 0.211775, 0.210881, 0.212966, 0.216242, 0.219221, 0.221306, + 0.221902, 0.222497, 0.222795, 0.221604, 0.219519, 0.217136, + 0.215945, 0.215349, 0.213562, 0.210583, 0.208200, 0.205222, + 0.201945, 0.198371, 0.195095, 0.193010, 0.191223, 0.190925, + 0.190925, 0.190925, 0.191223, 0.191223, 0.191520, 0.191223, + 0.191818, 0.192116, 0.192712, 0.193903, 0.197180, 0.200456, + 0.200754, 0.198073, 0.194797, 0.191223, 0.186159, 0.178117, + 0.169777, 0.163522, 0.159650, 0.156076, 0.151906, 0.148629, + 0.145651, 0.144162, 0.142672, 0.140587, 0.139396, 0.139694, + 0.140290, 0.140885, 0.141183, 0.140290, 0.138205, 0.135524, + 0.132247, 0.128673, 0.124801, 0.121227, 0.117355, 0.113483, + 0.108419, 0.102462, 0.097101, 0.091739, 0.086080, 0.081016, + 0.077144, 0.074762, 0.072677, 0.070889, 0.069400, 0.068209, + 0.068209, 0.068507, 0.068804, 0.069698, 0.070294, 0.072081, + 0.072974, 0.072677, 0.070889, 0.067613, 0.064634, 0.061358, + 0.057486, 0.053614, 0.049742, 0.047359, 0.046465, 0.045274, + 0.043785, 0.042891, 0.043189, 0.044976, 0.046167, 0.047657, + 0.049742, 0.053614, 0.057188, 0.060167, 0.061954, 0.064337, + 0.066422, 0.067017, 0.067613, 0.067315, 0.067613, 0.067911, + 0.067315, 0.066124, 0.064634, 0.061656, 0.059273, 0.056592, + 0.055103, 0.052720, 0.051827, 0.051529, 0.052125, 0.052720, + 0.053912, 0.055103, 0.056890, 0.058677, 0.060464, 0.061954, + 0.062847, 0.064337, 0.064337, 0.062549, 0.060167, 0.057188, + 0.054210, 0.050933, 0.047061, 0.044082, 0.041402, 0.039317, + 0.037530, 0.035445, 0.033658, 0.032168, 0.031573, 0.031573, + 0.030679, 0.030977, 0.031275, 0.032764, 0.033658, 0.033955, + 0.033955, 0.033955, 0.033955, 0.033360, 0.031870, 0.030083, + 0.028892, 0.026807, 0.023531, 0.020254, 0.016680, 0.013106, + 0.010127, 0.006255, 0.003872, 0.001787, 0.000596, 0.000000, + -0.000298, -0.000596, -0.000596, 0.000000, 0.000000, 0.000298, + 0.000298, 0.000000, 0.000000, -0.001191, -0.003276, -0.005361, + -0.008042, -0.011021, -0.014297, -0.017573, -0.020552, -0.023233, + -0.026211, -0.028892, -0.031870, -0.034849, -0.037232, -0.039317, + -0.041104, -0.042593, -0.043487, -0.043785, -0.044082, -0.044380, + -0.044082, -0.044678, -0.045274, -0.046465, -0.047657, -0.049742, + -0.052422, -0.055103, -0.058082, -0.061656, -0.065230, -0.068804, + -0.072677, -0.076251, -0.079527, -0.082506, -0.084889, -0.086974, + -0.088463, -0.089654, -0.090548, -0.091144, -0.091739, -0.092335, + -0.093228, -0.094122, -0.095016, -0.096207, -0.097696, -0.099186, + -0.100973, -0.102760, -0.104845, -0.106930, -0.108717, -0.110802, + -0.113185, -0.115270, -0.117653, -0.120035, -0.122120, -0.123908, + -0.125397, -0.126588, -0.126290, -0.126588, -0.125695, -0.125099, + -0.124801, -0.124503, -0.124503, -0.124801, -0.125099, -0.125397, + -0.126290, -0.127780, -0.129269, -0.130758, -0.132545, -0.134928, + -0.137311, -0.139992, -0.142375, -0.144162, -0.145949, -0.147736, + -0.148927, -0.149821, -0.150119, -0.150417, -0.150417, -0.150417, + -0.149821, -0.150119, -0.150417, -0.151012, -0.151906, -0.153693, + -0.155480, -0.156374, -0.158161, -0.161139, -0.163224, -0.163820, + -0.164416, -0.167394, -0.170373, -0.172160, -0.173649, -0.176330, + -0.179011, -0.180798, -0.181393, -0.182287, -0.181691, -0.181691, + -0.181691, -0.181393, -0.181393, -0.181393, -0.183478, -0.186159, + -0.189138, -0.191520, -0.194201, -0.197478, -0.199563, -0.200158, + -0.201052, -0.202243, -0.203435, -0.204924, -0.206711, -0.209094, + -0.211477, -0.213562, -0.215945, -0.216838, -0.218030, -0.219221, + -0.220115, -0.219221, -0.219519, -0.220412, -0.222497, -0.223987, + -0.224284, -0.224582, -0.226369, -0.229348, -0.230539, -0.230242, + -0.229944, -0.231731, -0.234114, -0.235901, -0.237092, -0.238582, + -0.240667, -0.242751, -0.243347, -0.244836, -0.246028, -0.244836, + -0.243943, -0.243645, -0.246028, -0.246921, -0.246326, -0.249006, + -0.253474, -0.257942, -0.260623, -0.262112, -0.263601, -0.266580, + -0.271048, -0.275218, -0.275218, -0.275218, -0.280579, -0.287728, + -0.289813, -0.288323, -0.288919, -0.292195, -0.295174, -0.293982, + -0.292493, -0.293387, -0.296365, -0.299046, -0.300535, -0.301429, + -0.304407, -0.310364, -0.315428, -0.316619, -0.315726, -0.317215, + -0.319896, -0.316322, -0.303812, -0.290408, -0.279685, -0.269558, + -0.255559, -0.238582, -0.221306, -0.204626, -0.187648, -0.169181, + -0.153097, -0.142375, -0.136715, -0.131354, -0.126886, -0.125397, + -0.124205, -0.117950, -0.107228, -0.094718, -0.083101, -0.070592, + -0.058380, -0.047359, -0.037828, -0.028594, -0.017871, -0.007744, + 0.003276, 0.017871, 0.032764, 0.044380, 0.052720, 0.060167, + 0.067911, 0.074166, 0.078038, 0.081314, 0.084889, 0.088761, + 0.090548, 0.089654, 0.085782, 0.083101, 0.081910, 0.081612, + 0.081612, 0.083101, 0.087867, 0.096207, 0.103951, 0.110802, + 0.117355, 0.125099, 0.133737, 0.141183, 0.146842, 0.152204, + 0.157565, 0.161437, 0.162331, 0.162629, 0.164714, 0.168288, + 0.170373, 0.170969, 0.172756, 0.176926, 0.181691, 0.184670, + 0.187351, 0.190627, 0.195690, 0.200754, 0.205520, 0.210881, + 0.216838, 0.223987, 0.230837, 0.238284, 0.246624, 0.255857, + 0.264495, 0.271941, 0.278196, 0.283558, 0.286536, 0.288323, + 0.288323, 0.287430, 0.285345, 0.283558, 0.282366, 0.281175, + 0.280281, 0.279388, 0.279685, 0.281175, 0.282962, 0.285047, + 0.287132, 0.289217, 0.290706, 0.291898, 0.291600, 0.290408, + 0.289217, 0.288025, 0.285940, 0.282068, 0.278494, 0.276409, + 0.274026, 0.269856, 0.264495, 0.259729, 0.255857, 0.252581, + 0.247815, 0.242454, 0.237688, 0.234709, 0.232327, 0.228752, + 0.225178, 0.222795, 0.222200, 0.222200, 0.222200, 0.223093, + 0.224880, 0.227263, 0.228157, 0.227561, 0.225774, 0.224284, + 0.222795, 0.220412, 0.216838, 0.212370, 0.209690, 0.207605, + 0.204626, 0.201052, 0.198073, 0.197478, 0.197775, 0.198073, + 0.198669, 0.200456, 0.202243, 0.204328, 0.204626, 0.204328, + 0.204626, 0.204626, 0.204328, 0.203137, 0.201052, 0.199265, + 0.197478, 0.195393, 0.191223, 0.186755, 0.183181, 0.180500, + 0.176628, 0.173649, 0.173351, 0.175436, 0.174841, 0.170969, + 0.165011, 0.160841, 0.157863, 0.153991, 0.150714, 0.151608, + 0.155182, 0.158161, 0.158756, 0.156672, 0.153693, 0.149225, + 0.143268, 0.136715, 0.131354, 0.127184, 0.123610, 0.118844, + 0.113780, 0.109908, 0.106632, 0.102760, 0.098888, 0.096803, + 0.097398, 0.097696, 0.096803, 0.094718, 0.092037, 0.089059, + 0.086080, 0.083101, 0.081314, 0.080719, 0.080719, 0.079825, + 0.077442, 0.074762, 0.072081, 0.068804, 0.065826, 0.063741, + 0.063145, 0.062847, 0.061358, 0.059571, 0.057188, 0.054210, + 0.051529, 0.048550, 0.047955, 0.049444, 0.052125, 0.054210, + 0.056592, 0.058380, 0.059571, 0.059869, 0.059869, 0.059869, + 0.060762, 0.060167, 0.059571, 0.058380, 0.056592, 0.055103, + 0.053912, 0.053018, 0.053614, 0.055103, 0.056592, 0.057188, + 0.057188, 0.056890, 0.057188, 0.057188, 0.057188, 0.058082, + 0.059571, 0.060464, 0.060762, 0.060464, 0.060167, 0.059869, + 0.058975, 0.058380, 0.057784, 0.057188, 0.056890, 0.054805, + 0.052125, 0.049146, 0.046763, 0.044082, 0.041104, 0.039019, + 0.037530, 0.036338, 0.035147, 0.033360, 0.032466, 0.032168, + 0.032466, 0.032764, 0.033062, 0.033062, 0.032764, 0.031573, + 0.029190, 0.026509, 0.024126, 0.022041, 0.019658, 0.017573, + 0.016084, 0.015191, 0.014297, 0.012808, 0.011318, 0.009829, + 0.008936, 0.007446, 0.006255, 0.005361, 0.005064, 0.004766, + 0.004468, 0.004170, 0.003574, 0.003276, 0.003276, 0.002979, + 0.002085, 0.001489, 0.000596, -0.000298, -0.002085, -0.003872, + -0.006255, -0.008340, -0.010127, -0.011914, -0.013701, -0.015191, + -0.017276, -0.018169, -0.019658, -0.020552, -0.021148, -0.022041, + -0.022637, -0.023233, -0.023828, -0.024722, -0.026211, -0.027700, + -0.029488, -0.031275, -0.033658, -0.036338, -0.038423, -0.040806, + -0.042593, -0.044976, -0.047359, -0.049444, -0.051529, -0.053912, + -0.056295, -0.058380, -0.060167, -0.061954, -0.064039, -0.065826, + -0.067017, -0.067911, -0.068804, -0.069698, -0.070889, -0.072379, + -0.073272, -0.075059, -0.077144, -0.078634, -0.080719, -0.082506, + -0.085186, -0.087569, -0.089952, -0.092335, -0.094122, -0.095909, + -0.097696, -0.098590, -0.099186, -0.099781, -0.100079, -0.099781, + -0.100079, -0.099781, -0.099781, -0.100079, -0.100377, -0.100973, + -0.101271, -0.102760, -0.103951, -0.105441, -0.106334, -0.107228, + -0.108717, -0.109610, -0.111100, -0.111695, -0.113185, -0.114972, + -0.116759, -0.117950, -0.118844, -0.120035, -0.120929, -0.121823, + -0.122120, -0.122418, -0.123610, -0.124801, -0.125992, -0.126886, + -0.127184, -0.128375, -0.129865, -0.130460, -0.131354, -0.132247, + -0.133737, -0.135822, -0.137609, -0.139098, -0.140885, -0.142672, + -0.144162, -0.144757, -0.145949, -0.147140, -0.148629, -0.149523, + -0.149523, -0.149821, -0.150417, -0.150119, -0.149821, -0.149523, + -0.149821, -0.151012, -0.152799, -0.154587, -0.156076, -0.157267, + -0.158161, -0.159352, -0.160544, -0.161139, -0.161735, -0.163522, + -0.166203, -0.168288, -0.169479, -0.170075, -0.172160, -0.173054, + -0.172756, -0.173351, -0.174841, -0.176032, -0.177223, -0.177819, + -0.177819, -0.178415, -0.179606, -0.180202, -0.181393, -0.183478, + -0.186457, -0.190031, -0.192712, -0.195095, -0.196882, -0.198967, + -0.200754, -0.201945, -0.202541, -0.203733, -0.205520, -0.206711, + -0.206115, -0.204626, -0.204328, -0.206115, -0.207605, -0.207307, + -0.206413, -0.208498, -0.213264, -0.216242, -0.215051, -0.212370, + -0.212370, -0.216242, -0.219519, -0.219221, -0.218923, -0.223093, + -0.228157, -0.230242, -0.228752, -0.227859, -0.229050, -0.230242, + -0.230837, -0.229944, -0.228454, -0.229050, -0.229348, -0.230242, + -0.229646, -0.230837, -0.233518, -0.236497, -0.239773, -0.242454, + -0.245730, -0.249006, -0.253176, -0.254666, -0.253772, -0.252283, + -0.254070, -0.257644, -0.259431, -0.258836, -0.259729, -0.263899, + -0.268069, -0.268367, -0.266878, -0.269856, -0.275515, -0.278792, + -0.277005, -0.275218, -0.276111, -0.276111, -0.269856, -0.255857, + -0.238879, -0.225178, -0.215647, -0.205222, -0.193010, -0.182883, + -0.176926, -0.170075, -0.158756, -0.144459, -0.132545, -0.123312, + -0.115865, -0.108121, -0.101568, -0.099186, -0.100079, -0.096505, + -0.085782, -0.071485, -0.057486, -0.045870, -0.033062, -0.017573, + -0.003574, 0.002979, 0.006255, 0.012212, 0.024126, 0.036934, + 0.045572, 0.050635, 0.056295, 0.064039, 0.069400, 0.070294, + 0.068804, 0.068804, 0.072081, 0.073868, 0.074166, 0.075357, + 0.078634, 0.083101, 0.086676, 0.088761, 0.090548, 0.095909, + 0.103653, 0.110802, 0.115270, 0.118546, 0.124205, 0.130758, + 0.136120, 0.138205, 0.138502, 0.141481, 0.146247, 0.150119, + 0.151012, 0.151608, 0.154289, 0.159054, 0.161139, 0.160544, + 0.161139, 0.166203, 0.173649, 0.178713, 0.182287, 0.188244, + 0.196286, 0.203435, 0.207009, 0.209094, 0.213264, 0.219817, + 0.226667, 0.232327, 0.237986, 0.244836, 0.251389, 0.255559, + 0.256155, 0.254964, 0.255559, 0.257049, 0.257049, 0.256751, + 0.255857, 0.257942, 0.260325, 0.261516, 0.260921, 0.260325, + 0.262112, 0.265091, 0.267473, 0.268069, 0.268963, 0.270452, + 0.271643, 0.271346, 0.268665, 0.265388, 0.263006, 0.260325, + 0.256155, 0.251389, 0.247219, 0.244241, 0.241262, 0.237092, + 0.233220, 0.230539, 0.228752, 0.226965, 0.223391, 0.220710, + 0.219817, 0.219519, 0.218327, 0.216242, 0.213860, 0.212668, + 0.212072, 0.210881, 0.209690, 0.208498, 0.207903, 0.207307, + 0.206115, 0.203137, 0.200754, 0.197775, 0.194797, 0.191520, + 0.189138, 0.187946, 0.187946, 0.187946, 0.187648, 0.187648, + 0.187946, 0.188244, 0.188244, 0.188840, 0.189138, 0.190627, + 0.191223, 0.191520, 0.190925, 0.189138, 0.186457, 0.183776, + 0.180500, 0.177521, 0.175436, 0.172756, 0.170671, 0.169181, + 0.170373, 0.173054, 0.174543, 0.171862, 0.167096, 0.163522, + 0.160544, 0.156672, 0.151310, 0.149523, 0.150417, 0.152502, + 0.152799, 0.150119, 0.147736, 0.144459, 0.140587, 0.135524, + 0.131354, 0.128375, 0.125992, 0.122120, 0.118248, 0.114078, + 0.110802, 0.106036, 0.101568, 0.098888, 0.098888, 0.098590, + 0.097398, 0.094718, 0.092037, 0.089654, 0.086080, 0.082208, + 0.079825, 0.078634, 0.077740, 0.075059, 0.071485, 0.067911, + 0.064337, 0.060762, 0.057486, 0.055699, 0.055699, 0.056295, + 0.056295, 0.055401, 0.053912, 0.052125, 0.049742, 0.046763, + 0.044380, 0.043785, 0.044082, 0.044082, 0.043487, 0.042891, + 0.043785, 0.044082, 0.044380, 0.043487, 0.042593, 0.042295, + 0.041700, 0.039615, 0.037828, 0.036040, 0.036040, 0.036338, + 0.038125, 0.039317, 0.040210, 0.040806, 0.041104, 0.041104, + 0.041402, 0.041104, 0.041700, 0.042891, 0.044082, 0.044678, + 0.043785, 0.042295, 0.041104, 0.040210, 0.039317, 0.038125, + 0.037828, 0.038721, 0.039019, 0.039019, 0.037828, 0.036636, + 0.036636, 0.036338, 0.035743, 0.034551, 0.033955, 0.033360, + 0.032466, 0.030381, 0.028594, 0.027700, 0.027700, 0.027700, + 0.027105, 0.026509, 0.026509, 0.025913, 0.023531, 0.020254, + 0.017871, 0.016382, 0.015488, 0.013701, 0.012808, 0.012510, + 0.013106, 0.013106, 0.012510, 0.011914, 0.011616, 0.011021, + 0.010127, 0.008936, 0.008042, 0.007744, 0.007446, 0.006851, + 0.005659, 0.004468, 0.003276, 0.002085, 0.000894, -0.000298, + -0.001191, -0.002085, -0.003276, -0.003574, -0.004468, -0.004766, + -0.005957, -0.006553, -0.007744, -0.008936, -0.010127, -0.011914, + -0.013106, -0.013701, -0.014595, -0.015488, -0.016382, -0.016978, + -0.017871, -0.019063, -0.020254, -0.022339, -0.023828, -0.025913, + -0.027998, -0.030381, -0.032168, -0.033658, -0.034551, -0.035743, + -0.036934, -0.037828, -0.038721, -0.039615, -0.040508, -0.042295, + -0.043487, -0.045572, -0.047359, -0.048550, -0.050635, -0.051827, + -0.053614, -0.054805, -0.056592, -0.058380, -0.060464, -0.061954, + -0.064337, -0.066124, -0.067613, -0.069102, -0.070294, -0.071783, + -0.073272, -0.074762, -0.076251, -0.077740, -0.079229, -0.080421, + -0.081612, -0.082804, -0.083399, -0.084591, -0.085186, -0.085484, + -0.086676, -0.087271, -0.088463, -0.088761, -0.090250, -0.092037, + -0.094122, -0.095016, -0.095611, -0.096207, -0.096803, -0.097101, + -0.096505, -0.096207, -0.096207, -0.096803, -0.096803, -0.096505, + -0.096505, -0.096505, -0.097101, -0.097101, -0.098292, -0.099186, + -0.100079, -0.100377, -0.101271, -0.102164, -0.102462, -0.103356, + -0.103951, -0.105441, -0.107228, -0.108717, -0.109908, -0.111100, + -0.111695, -0.112589, -0.112887, -0.113483, -0.114078, -0.115270, + -0.116163, -0.117355, -0.117950, -0.117950, -0.118844, -0.119440, + -0.120929, -0.121823, -0.122716, -0.123908, -0.125397, -0.126886, + -0.127482, -0.127482, -0.128077, -0.129865, -0.130758, -0.130460, + -0.130460, -0.130758, -0.131354, -0.131056, -0.130758, -0.130758, + -0.131950, -0.133141, -0.134332, -0.134630, -0.135524, -0.136715, + -0.137609, -0.138502, -0.139396, -0.140885, -0.142077, -0.142375, + -0.142672, -0.143268, -0.144757, -0.145651, -0.147438, -0.149821, + -0.152204, -0.153693, -0.154884, -0.155778, -0.156374, -0.156076, + -0.155480, -0.156076, -0.158161, -0.159948, -0.160246, -0.159948, + -0.160544, -0.161437, -0.161437, -0.161735, -0.163820, -0.166799, + -0.168586, -0.169479, -0.170373, -0.171862, -0.173947, -0.173351, + -0.173947, -0.176628, -0.179308, -0.180202, -0.179308, -0.180500, + -0.181691, -0.180798, -0.177223, -0.175139, -0.177223, -0.180202, + -0.181691, -0.179308, -0.177819, -0.180202, -0.183181, -0.182883, + -0.180798, -0.181989, -0.187351, -0.191520, -0.191818, -0.190627, + -0.191223, -0.193010, -0.194797, -0.195988, -0.196882, -0.198073, + -0.200158, -0.202839, -0.204626, -0.204030, -0.202541, -0.202541, + -0.204030, -0.204924, -0.204626, -0.205520, -0.207903, -0.211179, + -0.213562, -0.213860, -0.214455, -0.216838, -0.220412, -0.223391, + -0.223689, -0.223689, -0.225178, -0.226965, -0.227859, -0.228157, + -0.229646, -0.232922, -0.235305, -0.236199, -0.235901, -0.232624, + -0.225476, -0.214455, -0.202541, -0.190031, -0.177819, -0.166799, + -0.156672, -0.148629, -0.141481, -0.132843, -0.121823, -0.110802, + -0.101866, -0.094122, -0.088463, -0.085782, -0.084591, -0.081910, + -0.077144, -0.071187, -0.063741, -0.053316, -0.040210, -0.026807, + -0.016084, -0.008042, 0.000894, 0.011318, 0.020552, 0.027105, + 0.034253, 0.043785, 0.053316, 0.060167, 0.064337, 0.066422, + 0.066124, 0.066422, 0.067315, 0.069400, 0.071485, 0.072379, + 0.072974, 0.073868, 0.076251, 0.077442, 0.078634, 0.079825, + 0.083101, 0.088165, 0.094718, 0.101866, 0.107823, 0.112291, + 0.117950, 0.122716, 0.126588, 0.128673, 0.130162, 0.131652, + 0.134630, 0.137609, 0.140290, 0.140587, 0.140885, 0.142672, + 0.145353, 0.147736, 0.149821, 0.152799, 0.157565, 0.164118, + 0.170671, 0.175436, 0.181393, 0.188542, 0.195095, 0.200158, + 0.204328, 0.209392, 0.215051, 0.220412, 0.225178, 0.228454, + 0.231433, 0.234114, 0.235901, 0.236199, 0.235901, 0.235603, + 0.236497, 0.237688, 0.239177, 0.239773, 0.240369, 0.241262, + 0.242751, 0.243645, 0.244241, 0.246624, 0.249304, 0.251985, + 0.253176, 0.253772, 0.253474, 0.252581, 0.250198, 0.246028, + 0.241560, 0.238284, 0.235305, 0.231135, 0.226965, 0.223093, + 0.219221, 0.215647, 0.211775, 0.208498, 0.205520, 0.204626, + 0.204030, 0.203435, 0.203137, 0.203435, 0.203137, 0.202243, + 0.200456, 0.198371, 0.195393, 0.193605, 0.191818, 0.190031, + 0.188542, 0.186755, 0.184968, 0.182883, 0.181096, 0.178713, + 0.176330, 0.174245, 0.172756, 0.171862, 0.171266, 0.170671, + 0.170373, 0.171266, 0.171862, 0.173054, 0.174245, 0.174841, + 0.175436, 0.176032, 0.176330, 0.175139, 0.173649, 0.171266, + 0.169479, 0.167394, 0.163820, 0.161139, 0.159054, 0.156672, + 0.154289, 0.152204, 0.152204, 0.154587, 0.157267, 0.157267, + 0.154884, 0.152502, 0.149821, 0.147140, 0.142970, 0.139098, + 0.137609, 0.137311, 0.135822, 0.132545, 0.128673, 0.125397, + 0.121525, 0.117355, 0.113483, 0.111398, 0.109313, 0.106930, + 0.103653, 0.100377, 0.097101, 0.093824, 0.090250, 0.087569, + 0.086676, 0.086378, 0.085782, 0.083995, 0.081612, 0.079229, + 0.076251, 0.072379, 0.069996, 0.068507, 0.067017, 0.064634, + 0.060762, 0.057188, 0.053912, 0.050337, 0.047359, 0.045572, + 0.044976, 0.045274, 0.046167, 0.045870, 0.045274, 0.044380, + 0.043189, 0.041700, 0.039615, 0.038423, 0.037530, 0.037232, + 0.035743, 0.034551, 0.033360, 0.032764, 0.032168, 0.031275, + 0.030977, 0.030679, 0.029785, 0.028296, 0.026509, 0.025615, + 0.024722, 0.024424, 0.024424, 0.024722, 0.026509, 0.027403, + 0.027700, 0.027403, 0.027700, 0.028892, 0.029488, 0.029785, + 0.030083, 0.030977, 0.031870, 0.030381, 0.028892, 0.027998, + 0.027998, 0.027105, 0.025615, 0.024126, 0.024126, 0.023828, + 0.023233, 0.022041, 0.021743, 0.022339, 0.022935, 0.022935, + 0.022637, 0.022637, 0.022339, 0.021743, 0.020850, 0.019361, + 0.018467, 0.017573, 0.016978, 0.016084, 0.015191, 0.014297, + 0.013106, 0.011318, 0.009829, 0.008042, 0.006553, 0.005361, + 0.004468, 0.003872, 0.003872, 0.003872, 0.003872, 0.004170, + 0.003872, 0.003872, 0.002979, 0.002383, 0.001787, 0.001191, + 0.001191, 0.000000, -0.000596, -0.001489, -0.002681, -0.003872, + -0.005659, -0.006851, -0.007744, -0.008340, -0.009233, -0.009531, + -0.009829, -0.009531, -0.009531, -0.009829, -0.009531, -0.009233, + -0.008936, -0.009233, -0.010127, -0.011021, -0.011318, -0.012212, + -0.013403, -0.013999, -0.014893, -0.015191, -0.016382, -0.017871, + -0.019063, -0.020552, -0.021743, -0.023233, -0.024722, -0.025615, + -0.026509, -0.026807, -0.027105, -0.027998, -0.028296, -0.028296, + -0.029190, -0.030083, -0.030679, -0.032466, -0.033955, -0.035743, + -0.037828, -0.039913, -0.041700, -0.043785, -0.045274, -0.047061, + -0.048550, -0.050040, -0.052125, -0.054210, -0.055997, -0.057188, + -0.058380, -0.058975, -0.060464, -0.061060, -0.062252, -0.062847, + -0.064039, -0.064932, -0.065826, -0.067017, -0.067911, -0.069102, + -0.069698, -0.070889, -0.071783, -0.073272, -0.074464, -0.075655, + -0.076549, -0.078038, -0.078634, -0.079825, -0.080421, -0.081016, + -0.081314, -0.081910, -0.081612, -0.081612, -0.081314, -0.081314, + -0.081612, -0.081314, -0.081910, -0.081910, -0.082506, -0.083101, + -0.083399, -0.083399, -0.083697, -0.084293, -0.084889, -0.085186, + -0.085484, -0.086676, -0.087867, -0.088463, -0.088761, -0.089654, + -0.090846, -0.091739, -0.092037, -0.091144, -0.091739, -0.092633, + -0.092931, -0.092633, -0.092633, -0.093228, -0.094718, -0.095611, + -0.096505, -0.097696, -0.099186, -0.100973, -0.102760, -0.104249, + -0.105441, -0.106334, -0.107526, -0.108419, -0.109313, -0.109610, + -0.109908, -0.109908, -0.110504, -0.111100, -0.111100, -0.111100, + -0.111695, -0.112887, -0.113780, -0.114376, -0.114674, -0.115568, + -0.116461, -0.117057, -0.117057, -0.117355, -0.118248, -0.119738, + -0.120631, -0.121227, -0.121823, -0.122418, -0.123908, -0.123610, + -0.123312, -0.123014, -0.123908, -0.124205, -0.123908, -0.123312, + -0.123610, -0.123908, -0.125397, -0.126290, -0.127184, -0.127482, + -0.128375, -0.129269, -0.129567, -0.129567, -0.129567, -0.130460, + -0.132247, -0.133439, -0.134035, -0.134630, -0.135822, -0.136120, + -0.135524, -0.134332, -0.133737, -0.133141, -0.134035, -0.134332, + -0.134332, -0.134630, -0.136417, -0.138502, -0.140885, -0.141779, + -0.142375, -0.143268, -0.144459, -0.145055, -0.144459, -0.144162, + -0.144459, -0.145055, -0.145353, -0.145353, -0.145353, -0.145353, + -0.146247, -0.147140, -0.147736, -0.147140, -0.147140, -0.147736, + -0.148629, -0.148034, -0.147140, -0.146842, -0.148927, -0.151608, + -0.151608, -0.150714, -0.151608, -0.153991, -0.154884, -0.152502, + -0.150119, -0.149821, -0.151608, -0.151906, -0.150119, -0.148034, + -0.147736, -0.148034, -0.146544, -0.143864, -0.142077, -0.142375, + -0.144459, -0.146247, -0.146842, -0.148034, -0.149523, -0.151012, + -0.151310, -0.150119, -0.150714, -0.151608, -0.151012, -0.149821, + -0.150119, -0.150417, -0.150119, -0.149821, -0.150714, -0.151310, + -0.152204, -0.153097, -0.153991, -0.154587, -0.155182, -0.155182, + -0.155480, -0.156374, -0.156076, -0.154587, -0.151310, -0.148332, + -0.144162, -0.137609, -0.128971, -0.120929, -0.114972, -0.110802, + -0.105441, -0.098292, -0.090250, -0.082506, -0.073570, -0.063443, + -0.055103, -0.050337, -0.048550, -0.047657, -0.046465, -0.044678, + -0.040508, -0.033658, -0.024126, -0.013106, -0.002681, 0.005064, + 0.011318, 0.015786, 0.019063, 0.021743, 0.025913, 0.032168, + 0.040210, 0.047955, 0.055103, 0.060762, 0.064932, 0.067613, + 0.068804, 0.069996, 0.071485, 0.072974, 0.075059, 0.076251, + 0.076846, 0.077442, 0.078634, 0.081612, 0.085186, 0.089654, + 0.094420, 0.099781, 0.104249, 0.108121, 0.111398, 0.113780, + 0.115270, 0.118546, 0.121823, 0.125695, 0.128971, 0.131950, + 0.134332, 0.136120, 0.135226, 0.134035, 0.133737, 0.135226, + 0.137311, 0.139396, 0.142970, 0.148332, 0.153991, 0.159352, + 0.162331, 0.165607, 0.169479, 0.173351, 0.176628, 0.179011, + 0.182287, 0.186755, 0.191520, 0.195690, 0.198371, 0.201350, + 0.203733, 0.204626, 0.204030, 0.203435, 0.202243, 0.202839, + 0.204030, 0.204924, 0.206413, 0.208498, 0.211179, 0.212966, + 0.213860, 0.214455, 0.214753, 0.216242, 0.216540, 0.216242, + 0.215349, 0.215051, 0.215051, 0.213860, 0.211775, 0.208796, + 0.206711, 0.204924, 0.202243, 0.198669, 0.194797, 0.191818, + 0.189138, 0.187053, 0.184670, 0.183181, 0.182883, 0.182585, + 0.182883, 0.181989, 0.180500, 0.179011, 0.177223, 0.175734, + 0.173351, 0.171564, 0.170373, 0.170373, 0.169479, 0.168586, + 0.166501, 0.164714, 0.162629, 0.159352, 0.156672, 0.153395, + 0.152204, 0.151310, 0.151012, 0.150714, 0.150417, 0.151012, + 0.151310, 0.150714, 0.149821, 0.148927, 0.148927, 0.148034, + 0.147438, 0.146247, 0.144757, 0.143864, 0.142077, 0.139992, + 0.137311, 0.135226, 0.132545, 0.129269, 0.126290, 0.123312, + 0.121525, 0.119142, 0.117355, 0.115568, 0.113185, 0.111695, + 0.110206, 0.108419, 0.106036, 0.103653, 0.101271, 0.098888, + 0.096207, 0.093228, 0.090250, 0.087569, 0.086378, 0.085782, + 0.086378, 0.086974, 0.085782, 0.083101, 0.079527, 0.075953, + 0.072081, 0.067613, 0.064634, 0.063145, 0.063145, 0.062252, + 0.061060, 0.058975, 0.057188, 0.054805, 0.052720, 0.050933, + 0.050337, 0.049742, 0.048848, 0.047359, 0.046465, 0.045274, + 0.042891, 0.039913, 0.037530, 0.036338, 0.035743, 0.034253, + 0.032168, 0.030083, 0.028296, 0.026211, 0.023531, 0.021743, + 0.021743, 0.021446, 0.020552, 0.018765, 0.017276, 0.016084, + 0.014595, 0.013106, 0.011914, 0.011914, 0.013106, 0.013999, + 0.013403, 0.012808, 0.012212, 0.011616, 0.009829, 0.007446, + 0.005957, 0.005064, 0.004468, 0.003574, 0.002979, 0.003276, + 0.005064, 0.005957, 0.006553, 0.006851, 0.007446, 0.008340, + 0.008042, 0.007744, 0.007744, 0.008340, 0.008936, 0.009531, + 0.010425, 0.010723, 0.011318, 0.010723, 0.010723, 0.010425, + 0.010723, 0.011021, 0.011914, 0.013403, 0.014297, 0.015488, + 0.014893, 0.014893, 0.014893, 0.015191, 0.014595, 0.014297, + 0.013999, 0.014893, 0.015786, 0.015488, 0.014893, 0.014893, + 0.015786, 0.015786, 0.015191, 0.013701, 0.013106, 0.011914, + 0.010723, 0.008936, 0.007149, 0.006255, 0.005957, 0.005659, + 0.005064, 0.005064, 0.005957, 0.005957, 0.005064, 0.003872, + 0.003276, 0.003276, 0.002979, 0.002383, 0.001787, 0.002085, + 0.002383, 0.001787, 0.000596, 0.000000, -0.000298, -0.000596, + -0.001191, -0.001489, -0.001787, -0.001191, -0.001191, -0.001489, + -0.001489, -0.001489, -0.001489, -0.002085, -0.002085, -0.002383, + -0.002383, -0.002681, -0.002085, -0.001787, -0.001489, -0.001787, + -0.002085, -0.002383, -0.002979, -0.003276, -0.005064, -0.006851, + -0.008042, -0.008936, -0.009829, -0.010723, -0.011616, -0.011914, + -0.011914, -0.012808, -0.013106, -0.013999, -0.014297, -0.014893, + -0.016084, -0.017573, -0.019063, -0.019956, -0.021446, -0.022935, + -0.024424, -0.025615, -0.026807, -0.027403, -0.029190, -0.030381, + -0.031573, -0.032466, -0.033658, -0.034849, -0.035743, -0.036636, + -0.037530, -0.038423, -0.039615, -0.040508, -0.041402, -0.042295, + -0.043189, -0.043785, -0.044380, -0.044976, -0.045572, -0.046465, + -0.047359, -0.048848, -0.049742, -0.050933, -0.051827, -0.053316, + -0.054507, -0.055401, -0.055997, -0.056592, -0.057188, -0.057486, + -0.057188, -0.057188, -0.057188, -0.057486, -0.058082, -0.058677, + -0.059273, -0.060167, -0.061358, -0.062252, -0.063145, -0.063741, + -0.064337, -0.065528, -0.066124, -0.067017, -0.067613, -0.068804, + -0.069400, -0.069996, -0.070294, -0.070592, -0.070889, -0.070889, + -0.071187, -0.071485, -0.072081, -0.072379, -0.072974, -0.073570, + -0.074464, -0.075357, -0.075953, -0.076846, -0.078038, -0.078931, + -0.079825, -0.080719, -0.081314, -0.082506, -0.083399, -0.084293, + -0.084889, -0.086080, -0.087569, -0.088165, -0.087867, -0.088165, + -0.088463, -0.089059, -0.089654, -0.089356, -0.090250, -0.091441, + -0.092931, -0.093824, -0.094420, -0.095313, -0.096207, -0.097696, + -0.098888, -0.100377, -0.101271, -0.102164, -0.102760, -0.103951, + -0.104249, -0.104249, -0.103951, -0.103951, -0.104845, -0.105738, + -0.105738, -0.105738, -0.106334, -0.107823, -0.108717, -0.108419, + -0.109015, -0.109908, -0.111100, -0.111100, -0.110802, -0.110504, + -0.111100, -0.111695, -0.112291, -0.113185, -0.114376, -0.114674, + -0.114674, -0.114674, -0.114972, -0.114972, -0.114674, -0.113780, + -0.113780, -0.114078, -0.114674, -0.115270, -0.116461, -0.116759, + -0.117355, -0.118844, -0.119738, -0.120333, -0.120631, -0.121525, + -0.122716, -0.123610, -0.124205, -0.123312, -0.122418, -0.121525, + -0.122120, -0.122418, -0.121823, -0.120333, -0.120929, -0.123312, + -0.124503, -0.123610, -0.121525, -0.121227, -0.122418, -0.123312, + -0.122120, -0.120929, -0.120929, -0.122120, -0.123014, -0.122120, + -0.120631, -0.120631, -0.122418, -0.123908, -0.124503, -0.123908, + -0.124503, -0.124205, -0.123908, -0.121823, -0.120035, -0.118546, + -0.117355, -0.116461, -0.115568, -0.115270, -0.115270, -0.115865, + -0.114674, -0.113780, -0.114376, -0.117057, -0.119142, -0.119440, + -0.119142, -0.120929, -0.122120, -0.121227, -0.118546, -0.117355, + -0.116759, -0.115568, -0.113780, -0.113185, -0.113185, -0.113185, + -0.111993, -0.111398, -0.111100, -0.111100, -0.110802, -0.109610, + -0.109908, -0.111398, -0.112589, -0.111695, -0.110206, -0.110802, + -0.112291, -0.111993, -0.109015, -0.105143, -0.103058, -0.101271, + -0.096505, -0.090548, -0.086676, -0.085186, -0.084591, -0.080719, + -0.076251, -0.072379, -0.068804, -0.063443, -0.056592, -0.048252, + -0.040210, -0.034253, -0.030381, -0.027403, -0.024722, -0.022637, + -0.022339, -0.021446, -0.018765, -0.013701, -0.006553, 0.001191, + 0.008340, 0.015191, 0.020850, 0.026509, 0.031573, 0.034849, + 0.036636, 0.038125, 0.041104, 0.045572, 0.051231, 0.055997, + 0.061060, 0.066124, 0.070294, 0.073570, 0.074762, 0.074762, + 0.074762, 0.074762, 0.075059, 0.075953, 0.078634, 0.082208, + 0.084591, 0.086378, 0.088463, 0.092037, 0.095313, 0.097101, + 0.098590, 0.102164, 0.107228, 0.112589, 0.116163, 0.118844, + 0.122120, 0.125099, 0.126588, 0.126886, 0.126290, 0.125992, + 0.126290, 0.126588, 0.126886, 0.128077, 0.131056, 0.135524, + 0.140587, 0.145949, 0.150714, 0.155778, 0.158756, 0.161437, + 0.162926, 0.164416, 0.165011, 0.166501, 0.169777, 0.172756, + 0.175734, 0.177223, 0.179011, 0.179904, 0.180202, 0.179011, + 0.178415, 0.177819, 0.178117, 0.178713, 0.179606, 0.180202, + 0.181393, 0.182287, 0.183478, 0.183776, 0.183478, 0.183776, + 0.184074, 0.184372, 0.184372, 0.184074, 0.184074, 0.183181, + 0.182287, 0.180500, 0.178415, 0.175734, 0.172458, 0.169181, + 0.165905, 0.163522, 0.160841, 0.159352, 0.157863, 0.157863, + 0.157863, 0.158756, 0.158161, 0.157863, 0.156969, 0.156374, + 0.154587, 0.152799, 0.151012, 0.149821, 0.148629, 0.147438, + 0.146247, 0.145055, 0.143864, 0.141779, 0.139992, 0.137907, + 0.135822, 0.133737, 0.131354, 0.129865, 0.128673, 0.128077, + 0.127482, 0.127482, 0.126886, 0.126588, 0.125992, 0.125099, + 0.124205, 0.123610, 0.122716, 0.123014, 0.121525, 0.120333, + 0.118546, 0.117057, 0.114674, 0.111993, 0.108981, 0.105376, + 0.102963, 0.099956, 0.098141, 0.096327, 0.095109, 0.093594, + 0.092971, 0.092349, 0.091430, 0.090511, 0.089000, 0.087787, + 0.085981, 0.084176, 0.081779, 0.079385, 0.076991, 0.074303, + 0.072209, 0.069820, 0.067432, 0.065046, 0.062957, 0.060574, + 0.057896, 0.054630, 0.052547, 0.050465, 0.049269, 0.047779, + 0.046585, 0.045981, 0.045377, 0.045069, 0.044171, 0.042391, + 0.041495, 0.040306, 0.039411, 0.037929, 0.036153, 0.034085, + 0.032606, 0.031127, 0.028769, 0.026412, 0.024057, 0.022290, + 0.020524, 0.019052, 0.017288, 0.016111, 0.015520, 0.015223, + 0.015218, 0.014920, 0.014916, 0.014911, 0.014907, 0.014025, + 0.012852, 0.011388, 0.010217, 0.009047, 0.007877, 0.006125, + 0.005248, 0.004080, 0.003496, 0.002039, 0.001165, 0.000000, + -0.000873, -0.001745, -0.002327, -0.003198, -0.003197, -0.003196, + -0.002324, -0.002033, -0.001742, -0.000580, 0.000000, 0.000000, + 0.000290, 0.000000, -0.000290, -0.000579, -0.000579, -0.000868, + -0.001447, -0.001446, -0.000868, -0.000289, -0.000289, -0.000578, + -0.000866, -0.000577, 0.000000, 0.000000, 0.000288, 0.000288, + 0.001730, 0.002882, 0.003169, 0.003168, 0.003455, 0.004317, + 0.004028, 0.004027, 0.003738, 0.003737, 0.003736, 0.003447, + 0.002297, 0.001722, 0.001148, 0.001148, 0.000860, 0.000000, + -0.000860, -0.001433, -0.001432, -0.002004, -0.002863, -0.003720, + -0.003433, -0.003146, -0.002859, -0.003430, -0.003429, -0.003427, + -0.003712, -0.003996, -0.004851, -0.005705, -0.005703, -0.006272, + -0.007124, -0.007692, -0.007974, -0.007972, -0.008254, -0.008536, + -0.008817, -0.008815, -0.008812, -0.008809, -0.008806, -0.008519, + -0.008233, -0.008230, -0.007376, -0.007374, -0.007371, -0.007086, + -0.007083, -0.007364, -0.007645, -0.008209, -0.008489, -0.008486, + -0.009049, -0.009329, -0.009609, -0.010171, -0.010450, -0.010729, + -0.011290, -0.012132, -0.012128, -0.012688, -0.012403, -0.012962, + -0.013521, -0.014080, -0.013794, -0.014071, -0.014910, -0.015749, + -0.016588, -0.017144, -0.018263, -0.019380, -0.020497, -0.021613, + -0.022448, -0.023843, -0.024676, -0.025790, -0.026622, -0.027454, + -0.028005, -0.028836, -0.029946, -0.030495, -0.031325, -0.031874, + -0.032702, -0.033250, -0.033798, -0.034345, -0.034892, -0.035439, + -0.036264, -0.036810, -0.037355, -0.038179, -0.038724, -0.039268, + -0.040090, -0.040077, -0.040621, -0.040885, -0.041706, -0.042248, + -0.042512, -0.043054, -0.043040, -0.043581, -0.043566, -0.043275, + -0.042983, -0.042969, -0.043232, -0.042941, -0.042926, -0.042635, + -0.043452, -0.043991, -0.044529, -0.044791, -0.045329, -0.045867, + -0.046128, -0.046665, -0.047201, -0.047186, -0.047998, -0.048258, + -0.049069, -0.049603, -0.049587, -0.050397, -0.050380, -0.050914, + -0.051172, -0.051705, -0.051688, -0.052495, -0.052753, -0.053010, + -0.053267, -0.053798, -0.054603, -0.055134, -0.055664, -0.056193, + -0.057271, -0.057799, -0.058328, -0.058856, -0.059657, -0.060185, + -0.060438, -0.060691, -0.061217, -0.062017, -0.061996, -0.061975, + -0.061954, -0.062206, -0.062186, -0.062438, -0.062689, -0.063213, + -0.063192, -0.063715, -0.064511, -0.064761, -0.065283, -0.065805, + -0.066055, -0.066305, -0.066554, -0.066803, -0.067052, -0.067572, + -0.067821, -0.068340, -0.068317, -0.068836, -0.069626, -0.070144, + -0.070391, -0.070909, -0.071155, -0.071402, -0.071378, -0.071894, + -0.071870, -0.072116, -0.072631, -0.072607, -0.072852, -0.072827, + -0.073342, -0.073587, -0.073831, -0.074076, -0.074589, -0.075102, + -0.075346, -0.075589, -0.075563, -0.075538, -0.075781, -0.075755, + -0.075998, -0.075704, -0.075946, -0.075920, -0.075895, -0.075869, + -0.075039, -0.074745, -0.074184, -0.073891, -0.073331, -0.072503, + -0.072211, -0.071919, -0.071627, -0.071336, -0.070510, -0.070486, + -0.070462, -0.070171, -0.070147, -0.070656, -0.070898, -0.071140, + -0.071382, -0.071624, -0.071866, -0.072107, -0.072083, -0.071526, + -0.070970, -0.070680, -0.070655, -0.070631, -0.070076, -0.069787, + -0.070028, -0.070269, -0.070510, -0.069955, -0.069666, -0.069378, + -0.069618, -0.069859, -0.069306, -0.069282, -0.068729, -0.068970, + -0.068946, -0.068394, -0.068106, -0.067819, -0.067796, -0.067245, + -0.066431, -0.065090, -0.064014, -0.063465, -0.062916, -0.061315, + -0.060768, -0.059958, -0.059411, -0.058340, -0.057531, -0.056986, + -0.056704, -0.055897, -0.054828, -0.054284, -0.053479, -0.052936, + -0.052132, -0.051590, -0.050787, -0.049984, -0.049182, -0.048380, + -0.047317, -0.045994, -0.044933, -0.043612, -0.042552, -0.041493, + -0.040175, -0.038596, -0.037800, -0.036484, -0.035169, -0.033854, + -0.032801, -0.032269, -0.032258, -0.031986, -0.032235, -0.031704, + -0.031693, -0.031422, -0.030892, -0.030621, -0.029832, -0.029044, + -0.027997, -0.026173, -0.024350, -0.022788, -0.021227, -0.019926, + -0.019142, -0.018101, -0.017578, -0.017055, -0.016791, -0.016268, + -0.014972, -0.013676, -0.012898, -0.011862, -0.010569, -0.009276, + -0.007985, -0.007725, -0.006178, -0.003345, -0.000514, 0.001543, + 0.002570, 0.004625, 0.006935, 0.008730, 0.009497, 0.010520, + 0.012312, 0.014358, 0.016404, 0.018448, 0.021002, 0.023555, + 0.025594, 0.027120, 0.028389, 0.029913, 0.031436, 0.032958, + 0.033712, 0.034977, 0.036751, 0.038778, 0.040550, 0.041810, + 0.043324, 0.045601, 0.047877, 0.050151, 0.052169, 0.054440, + 0.056200, 0.058468, 0.059972, 0.061220, 0.062468, 0.062953, + 0.063945, 0.065191, 0.066435, 0.067425, 0.068668, 0.070416, + 0.071150, 0.072390, 0.073376, 0.074867, 0.076104, 0.077593, + 0.078829, 0.080316, 0.081801, 0.083286, 0.084770, 0.085496, + 0.086977, 0.088458, 0.090189, 0.092171, 0.093900, 0.094621, + 0.096096, 0.097067, 0.098037, 0.098002, 0.098217, 0.098433, + 0.098648, 0.099365, 0.100081, 0.101048, 0.101763, 0.103480, + 0.104945, 0.106409, 0.107371, 0.108583, 0.109794, 0.111004, + 0.111463, 0.112172, 0.112880, 0.113587, 0.113546, 0.113255, + 0.113463, 0.113421, 0.113878, 0.113338, 0.113297, 0.113504, + 0.113960, 0.114664, 0.114374, 0.114332, 0.114787, 0.114993, + 0.115447, 0.114660, 0.114618, 0.114576, 0.114781, 0.114987, + 0.114944, 0.114654, 0.114860, 0.114817, 0.114775, 0.114238, + 0.113702, 0.113165, 0.112383, 0.111353, 0.110325, 0.108804, + 0.107777, 0.106751, 0.105972, 0.105440, 0.104416, 0.104623, + 0.104093, 0.104300, 0.104015, 0.103239, 0.102955, 0.102426, + 0.101651, 0.100631, 0.099858, 0.098594, 0.097577, 0.096560, + 0.095055, 0.093550, 0.092291, 0.091033, 0.089776, 0.088520, + 0.087753, 0.086987, 0.086222, 0.085702, 0.084693, 0.083686, + 0.082679, 0.081673, 0.080667, 0.079419, 0.078171, 0.077168, + 0.076409, 0.075651, 0.074164, 0.072921, 0.072164, 0.070923, + 0.069682, 0.068200, 0.066718, 0.065238, 0.063516, 0.062038, + 0.060319, 0.059086, 0.057853, 0.056864, 0.055875, 0.055128, + 0.054141, 0.053395, 0.052651, 0.051665, 0.050439, 0.049455, + 0.048230, 0.047007, 0.045543, 0.043840, 0.042378, 0.041159, + 0.039699, 0.038241, 0.036784, 0.035569, 0.034354, 0.033620, + 0.032407, 0.031195, 0.030224, 0.029014, 0.028044, 0.027075, + 0.025867, 0.024899, 0.023693, 0.022488, 0.021044, 0.019841, + 0.018639, 0.017676, 0.016476, 0.015515, 0.014316, 0.013595, + 0.012159, 0.011201, 0.009529, 0.008335, 0.006665, 0.005473, + 0.004519, 0.003091, 0.001901, 0.000950, 0.000000, -0.000712, + -0.001424, -0.002372, -0.003320, -0.004030, -0.004976, -0.005921, + -0.006866, -0.007574, -0.008754, -0.009696, -0.010402, -0.011343, + -0.012283, -0.012987, -0.013926, -0.014629, -0.015566, -0.016268, + -0.016968, -0.017669, -0.018368, -0.018832, -0.019530, -0.020229, + -0.020691, -0.021153, -0.022085, -0.022780, -0.023241, -0.023936, + -0.024161, -0.024855, -0.025315, -0.026008, -0.026466, -0.027158, + -0.027615, -0.028540, -0.028997, -0.029921, -0.030610, -0.031299, + -0.031987, -0.032908, -0.033595, -0.034048, -0.034501, -0.034721, + -0.035406, -0.035858, -0.036309, -0.036760, -0.036978, -0.037894, + -0.038344, -0.039025, -0.039474, -0.040155, -0.040835, -0.041515, + -0.041963, -0.042409, -0.042624, -0.043302, -0.043980, -0.044194, + -0.044639, -0.044852, -0.045066, -0.045741, -0.045723, -0.045936, + -0.046148, -0.046361, -0.046342, -0.046554, -0.046766, -0.046978, + -0.046959, -0.047171, -0.047382, -0.047363, -0.047574, -0.047556, + -0.047766, -0.047747, -0.048187, -0.048397, -0.048837, -0.049046, + -0.049256, -0.049236, -0.049446, -0.049426, -0.049406, -0.049158, + -0.048910, -0.048662, -0.048642, -0.048395, -0.048375, -0.048128, + -0.048336, -0.048317, -0.048298, -0.048278, -0.048259, -0.048467, + -0.048448, -0.048428, -0.048409, -0.048162, -0.048143, -0.048124, + -0.047877, -0.047858, -0.047612, -0.047593, -0.047574, -0.047328, + -0.047083, -0.046837, -0.046592, -0.046347, -0.046329, -0.046084, + -0.045614, -0.045370, -0.044900, -0.044431, -0.044187, -0.043719, + -0.043701, -0.043233, -0.042990, -0.042748, -0.042506, -0.042264, + -0.042022, -0.041555, -0.041314, -0.040848, -0.040607, -0.040142, + -0.039453, -0.038989, -0.038749, -0.038286, -0.038046, -0.037583, + -0.037344, -0.036882, -0.036420, -0.036182, -0.035944, -0.035483, + -0.035022, -0.035008, -0.034548, -0.034311, -0.034074, -0.033615, + -0.033601, -0.033142, -0.032906, -0.032671, -0.032657, -0.032422, + -0.032186, -0.031951, -0.031716, -0.031038, -0.030804, -0.030348, + -0.029893, -0.029659, -0.029204, -0.028750, -0.028517, -0.028063, + -0.027610, -0.027378, -0.027366, -0.027355, -0.026903, -0.027112, + -0.027101, -0.026869, -0.026638, -0.026407, -0.026176, -0.025945, + -0.025935, -0.025265, -0.025035, -0.024585, -0.024575, -0.024126, + -0.023678, -0.023449, -0.023439, -0.023429, -0.023638, -0.023628, + -0.023618, -0.023608, -0.023599, -0.023589, -0.023579, -0.023351, + -0.023559, -0.023113, -0.023104, -0.022876, -0.022649, -0.022421, + -0.021977, -0.021750, -0.021524, -0.021080, -0.020854, -0.020845, + -0.020836, -0.020611, -0.020602, -0.020376, -0.020368, -0.020359, + -0.020351, -0.020342, -0.020766, -0.020325, -0.020100, -0.019660, + -0.019219, -0.018995, -0.018556, -0.017901, -0.017893, -0.018101, + -0.018094, -0.017655, -0.015926, -0.014414, -0.014192, -0.015906, + -0.016759, -0.016537, -0.016315, -0.016093, -0.017374, -0.018438, + -0.017144, -0.015423, -0.014989, -0.015624, -0.016687, -0.015825, + -0.013894, -0.012606, -0.013028, -0.014090, -0.014511, -0.013438, + -0.012579, -0.013213, -0.013847, -0.014054, -0.013622, -0.013403, + -0.013610, -0.014242, -0.014449, -0.014655, -0.014436, -0.014006, + -0.013363, -0.012509, -0.012080, -0.012075, -0.011646, -0.010795, + -0.010367, -0.010151, -0.010146, -0.009719, -0.009082, -0.008655, + -0.008019, -0.007804, -0.007168, -0.006322, -0.005898, -0.005053, + -0.004841, -0.004628, -0.004626, -0.004835, -0.005043, -0.005040, + -0.004828, -0.004826, -0.004195, -0.003983, -0.002934, -0.001885, + -0.001047, 0.000000, 0.000418, 0.001464, 0.002299, 0.002925, + 0.002924, 0.003131, 0.003338, 0.003963, 0.004169, 0.004167, + 0.004166, 0.003956, 0.003746, 0.003536, 0.003119, 0.002702, + 0.002701, 0.002699, 0.002491, 0.002489, 0.002903, 0.003316, + 0.003729, 0.003728, 0.003933, 0.004552, 0.004964, 0.005168, + 0.005373, 0.005577, 0.005368, 0.005778, 0.005569, 0.005361, + 0.004946, 0.004944, 0.004736, 0.004734, 0.004526, 0.004730, + 0.004933, 0.004931, 0.005134, 0.005542, 0.006566, 0.007178, + 0.007790, 0.008606, 0.009216, 0.009826, 0.010231, 0.010636, + 0.011040, 0.011444, 0.011643, 0.012046, 0.012449, 0.013055, + 0.013661, 0.014063, 0.014464, 0.015068, 0.015265, 0.015665, + 0.016065, 0.016464, 0.016863, 0.017058, 0.017863, 0.018260, + 0.018860, 0.019257, 0.019451, 0.019848, 0.020244, 0.020437, + 0.020630, 0.020620, 0.020813, 0.021006, 0.021198, 0.020987, + 0.021179, 0.021169, 0.020958, 0.020949, 0.020939, 0.020729, + 0.020920, 0.020710, 0.020700, 0.021093, 0.021284, 0.021676, + 0.021666, 0.021856, 0.021646, 0.022237, 0.022227, 0.022417, + 0.022207, 0.022197, 0.021787, 0.021777, 0.022166, 0.022156, + 0.022146, 0.022335, 0.022724, 0.022713, 0.023101, 0.023091, + 0.023279, 0.023467, 0.023655, 0.024042, 0.024229, 0.024417, + 0.024405, 0.024791, 0.024779, 0.024768, 0.024757, 0.024745, + 0.024734, 0.024722, 0.024513, 0.024502, 0.024491, 0.024677, + 0.024863, 0.024851, 0.024840, 0.024828, 0.024620, 0.024411, + 0.024203, 0.024192, 0.023984, 0.023973, 0.023962, 0.023754, + 0.023940, 0.024125, 0.023917, 0.023906, 0.023699, 0.023492, + 0.023090, 0.022884, 0.022482, 0.022276, 0.021875, 0.021670, + 0.021464, 0.021454, 0.021249, 0.021239, 0.021229, 0.021025, + 0.021015, 0.020811, 0.020606, 0.020597, 0.020587, 0.020966, + 0.020956, 0.021334, 0.021324, 0.021701, 0.021497, 0.021487, + 0.021477, 0.021467, 0.021650, 0.021447, 0.021436, 0.021619, + 0.021609, 0.021599, 0.021589, 0.021386, 0.021568, 0.021943, + 0.021933, 0.021730, 0.021912, 0.021709, 0.021891, 0.021881, + 0.021870, 0.022051, 0.022041, 0.022414, 0.022020, 0.022009, + 0.021616, 0.021415, 0.021022, 0.020821, 0.020620, 0.020229, + 0.020219, 0.020019, 0.020009, 0.019809, 0.019800, 0.019981, + 0.019781, 0.019771, 0.019762, 0.019562, 0.019553, 0.019354, + 0.019155, 0.019146, 0.019136, 0.019127, 0.018929, 0.019109, + 0.018910, 0.018712, 0.018514, 0.018505, 0.018308, 0.018487, + 0.018290, 0.018281, 0.018272, 0.018452, 0.018255, 0.018246, + 0.018237, 0.018228, 0.017843, 0.017835, 0.017826, 0.017817, + 0.017809, 0.017613, 0.017230, 0.017034, 0.017026, 0.016643, + 0.016448, 0.016253, 0.016059, 0.015678, 0.015483, 0.015103, + 0.014723, 0.014529, 0.014150, 0.014143, 0.013764, 0.013385, + 0.013193, 0.012815, 0.012623, 0.012246, 0.012054, 0.011678, + 0.011301, 0.010925, 0.010550, 0.010360, 0.009985, 0.009610, + 0.009421, 0.009047, 0.008673, 0.008300, 0.008112, 0.007739, + 0.007735, 0.007547, 0.007176, 0.006988, 0.006801, 0.006614, + 0.006243, 0.006057, 0.005870, 0.005684, 0.005498, 0.005312, + 0.005126, 0.004941, 0.004755, 0.004570, 0.004568, 0.004200, + 0.004016, 0.003831, 0.003465, 0.003463, 0.003279, 0.003095, + 0.002912, 0.002546, 0.002363, 0.002180, 0.001816, 0.001634, + 0.001633, 0.001269, 0.001088, 0.000906, 0.000724, 0.000543, + 0.000543, 0.000181, 0.000000, -0.000181, -0.000361, -0.000541, + -0.000721, -0.000901, -0.001081, -0.001441, -0.001800, -0.001799, + -0.002157, -0.002336, -0.002694, -0.002693, -0.003050, -0.003049, + -0.003406, -0.003583, -0.003760, -0.003937, -0.004293, -0.004291, + -0.004289, -0.004644, -0.004820, -0.004996, -0.004993, -0.005169, + -0.005344, -0.005342, -0.005517, -0.005692, -0.005867, -0.005864, + -0.005861, -0.006035, -0.006032, -0.006029, -0.006026, -0.005846, + -0.006020, -0.006017, -0.006014, -0.006010, -0.006007, -0.005828, + -0.005825, -0.005998, -0.005995, -0.005992, -0.005989, -0.005810, + -0.005982, -0.005804, -0.005976, -0.005797, -0.005970, -0.005967, + -0.005964, -0.005961, -0.005958, -0.005779, -0.006126, -0.005773, + -0.006120, -0.005942, -0.005939, -0.005936, -0.005933, -0.005930, + -0.005927, -0.005749, -0.005746, -0.005743, -0.005566, -0.005737, + -0.005560, -0.005558, -0.005555, -0.005552, -0.005375, -0.005546, + -0.005716, -0.005713, -0.005710, -0.005534, -0.005358, -0.005183, + -0.005007, -0.005005, -0.005002, -0.004655, -0.004480, -0.004133, + -0.003959, -0.003957, -0.003783, -0.003437, -0.003607, -0.003090, + -0.003088, -0.002915, -0.002742, -0.002569, -0.002568, -0.002567, + -0.002223, -0.002222, -0.002050, -0.001878, -0.001536, -0.001706, + -0.001534, -0.001363, -0.001192, -0.001021, -0.000851, -0.000680, + -0.000340, -0.000340, -0.000170, -0.000339, -0.000170, 0.000000, + 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, + 0.000000, -0.000169, 0.000000, 0.000000, 0.000000, 0.000000, + -0.000168, -0.000336, -0.000336, -0.000336, -0.000504, -0.000671, + -0.000671, -0.001006, -0.001005, -0.001340, -0.001339, -0.001338, + -0.001505, -0.001504, -0.001670, -0.001669, -0.002002, -0.002168, + -0.002000, -0.002165, -0.002330, -0.002329, -0.002328, -0.002327, + -0.002325, -0.002324, -0.002323, -0.002321, -0.002154, -0.002153, + -0.001987, -0.001985, -0.001984, -0.001818, -0.001817, -0.001816, + -0.001650, -0.001649, -0.001648, -0.001812, -0.001811, -0.001810, + -0.002138, -0.002301, -0.002300, -0.002627, -0.002625, -0.002952, + -0.003114, -0.003112, -0.003274, -0.003436, -0.003598, -0.003759, + -0.003921, -0.003918, -0.004079, -0.004240, -0.004075, -0.004235, + -0.004396, -0.004393, -0.004553, -0.004551, -0.004873, -0.004870, + -0.005030, -0.005352, -0.005511, -0.005993, -0.006152, -0.006472, + -0.006954, -0.006950, -0.007430, -0.007588, -0.007906, -0.008224, + -0.008542, -0.008859, -0.009176, -0.009332, -0.009326, -0.009482, + -0.009637, -0.009952, -0.010107, -0.010101, -0.010256, -0.010250, + -0.010244, -0.010398, -0.010552, -0.010387, -0.010381, -0.010534, + -0.010369, -0.010522, -0.010357, -0.010510, -0.010504, -0.010498, + -0.010492, -0.010486, -0.010480, -0.010474, -0.010468, -0.010303, + -0.010456, -0.010292, -0.010286, -0.010122, -0.009958, -0.009952, + -0.009788, -0.009625, -0.009619, -0.009456, -0.009293, -0.009130, + -0.009125, -0.009120, -0.008957, -0.008795, -0.008790, -0.008785, + -0.008780, -0.008931, -0.009083, -0.009077, -0.009228, -0.009223, + -0.009530, -0.009368, -0.009363, -0.009202, -0.009196, -0.009035, + -0.008874, -0.008558, -0.008397, -0.008392, -0.008077, -0.008072, + -0.007912, -0.007597, -0.007438, -0.007279, -0.007119, -0.006961, + -0.006647, -0.006334, -0.006331, -0.006173, -0.005860, -0.005857, + -0.005700, -0.005542, -0.005539, -0.005382, -0.005379, -0.005375, + -0.005526, -0.005522, -0.005519, -0.005669, -0.005666, -0.005662, + -0.005965, -0.006114, -0.006110, -0.006107, -0.006256, -0.006252, + -0.006401, -0.006397, -0.006545, -0.006389, -0.006689, -0.006837, + -0.006681, -0.006677, -0.006673, -0.006669, -0.006665, -0.006510, + -0.006657, -0.006502, -0.006649, -0.006494, -0.006490, -0.006335, + -0.006181, -0.006328, -0.006324, -0.006320, -0.006467, -0.006312, + -0.006309, -0.006455, -0.006301, -0.006297, -0.006293, -0.006289, + -0.006286, -0.006132, -0.005979, -0.005975, -0.005673, -0.005819, + -0.005517, -0.005514, -0.005212, -0.005060, -0.005057, -0.005054, + -0.004754, -0.004751, -0.004748, -0.004745, -0.004594, -0.004591, + -0.004292, -0.004438, -0.004287, -0.004137, -0.004134, -0.003836, + -0.003687, -0.003684, -0.003535, -0.003385, -0.003089, -0.003087, + -0.002791, -0.002790, -0.002641, -0.002640, -0.002491, -0.002490, + -0.002635, -0.002779, -0.002778, -0.002776, -0.003066, -0.002918, + -0.003062, -0.003060, -0.003058, -0.003057, -0.003055, -0.003053, + -0.002905, -0.002613, -0.002612, -0.002610, -0.002319, -0.002462, + -0.002460, -0.002314, -0.002313, -0.002167, -0.002165, -0.002164, + -0.002163, -0.002161, -0.002160, -0.002159, -0.002013, -0.001868, + -0.001724, -0.001722, -0.001578, -0.001434, -0.001289, -0.001289, + -0.001431, -0.001287, -0.001429, -0.001285, -0.001570, -0.001426, + -0.001425, -0.001424, -0.001566, -0.001565, -0.001706, -0.001847, + -0.001988, -0.001987, -0.002127, -0.001984, -0.001983, -0.001840, + -0.001839, -0.001555, -0.001554, -0.001412, -0.001411, -0.001269, + -0.001127, -0.000986, -0.000844, -0.000984, -0.000703, -0.000702, + -0.000702, -0.000701, -0.000841, -0.000700, -0.001120, -0.000979, + -0.000979, -0.000978, -0.000977, -0.000977, -0.000837, -0.000697, + -0.000557, -0.000557, -0.000556, -0.000417, -0.000278, -0.000416, + -0.000277, -0.000277, -0.000277, -0.000277, -0.000277, -0.000276, + -0.000276, -0.000276, -0.000276, -0.000276, -0.000276, -0.000138, + -0.000275, -0.000413, -0.000687, -0.000687, -0.000823, -0.001234, + -0.001508, -0.001644, -0.001916, -0.002325, -0.002324, -0.002595, + -0.002867, -0.003138, -0.003544, -0.003815, -0.004084, -0.004218, + -0.004487, -0.004620, -0.004888, -0.005020, -0.005424, -0.005691, + -0.005823, -0.006225, -0.006626, -0.006757, -0.007023, -0.007288, + -0.007418, -0.007413, -0.007542, -0.007537, -0.007532, -0.007392, + -0.007387, -0.007248, -0.007243, -0.007104, -0.006966, -0.006693, + -0.006287, -0.006016, -0.005611, -0.005473, -0.005203, -0.005066, + -0.005062, -0.004793, -0.004789, -0.005052, -0.005181, -0.005576, + -0.005705, -0.006099, -0.006227, -0.006355, -0.006615, -0.006875, + -0.007135, -0.007130, -0.007257, -0.007384, -0.007379, -0.007505, + -0.007500, -0.007495, -0.007621, -0.007747, -0.007873, -0.007867, + -0.007731, -0.007594, -0.007720, -0.007976, -0.008101, -0.008357, + -0.008612, -0.008736, -0.008860, -0.009115, -0.009368, -0.009362, + -0.009615, -0.009868, -0.009991, -0.010243, -0.010495, -0.010747, + -0.010998, -0.010861, -0.010982, -0.011104, -0.011354, -0.011475, + -0.011853, -0.012231, -0.012608, -0.013114, -0.013361, -0.013737, + -0.014112, -0.014358, -0.014604, -0.014722, -0.014967, -0.015084, + -0.015201, -0.015318, -0.015562, -0.015551, -0.015667, -0.015784, + -0.015772, -0.015634, -0.015750, -0.015484, -0.015346, -0.015209, + -0.015071, -0.014934, -0.015049, -0.014912, -0.014901, -0.015143, + -0.015258, -0.015373, -0.015488, -0.015854, -0.015968, -0.016082, + -0.016196, -0.016059, -0.016173, -0.016161, -0.016274, -0.016262, + -0.016376, -0.016114, -0.016102, -0.016090, -0.016078, -0.015942, + -0.016179, -0.016167, -0.016156, -0.016392, -0.016504, -0.016616, + -0.016728, -0.016715, -0.016703, -0.016691, -0.016555, -0.016543, + -0.016407, -0.016148, -0.016013, -0.015755, -0.015497, -0.015486, + -0.015352, -0.015340, -0.015206, -0.015195, -0.015306, -0.015294, + -0.015405, -0.015394, -0.015504, -0.015493, -0.015481, -0.015470, + -0.015458, -0.015446, -0.015313, -0.015545, -0.015654, -0.015521, + -0.015510, -0.015498, -0.015365, -0.015354, -0.015342, -0.015210, + -0.015198, -0.015187, -0.015296, -0.015284, -0.015513, -0.015381, + -0.015489, -0.015358, -0.015346, -0.015454, -0.015562, -0.015670, + -0.015777, -0.015765, -0.015753, -0.015741, -0.015610, -0.015717, + -0.015824, -0.015812, -0.015919, -0.016025, -0.016013, -0.016000, + -0.016225, -0.016212, -0.016318, -0.016305, -0.016411, -0.016398, + -0.016503, -0.016491, -0.016478, -0.016700, -0.016687, -0.016792, + -0.016779, -0.016766, -0.016635, -0.016623, -0.016493, -0.016480, + -0.016350, -0.016337, -0.016208, -0.015962, -0.015717, -0.015704, + -0.015576, -0.015448, -0.015551, -0.015423, -0.015411, -0.015399, + -0.015503, -0.015375, -0.015247, -0.015120, -0.015108, -0.014980, + -0.014853, -0.014611, -0.014485, -0.014473, -0.014232, -0.014106, + -0.013866, -0.013626, -0.013615, -0.013261, -0.013251, -0.012898, + -0.012773, -0.012421, -0.012183, -0.012060, -0.011709, -0.011473, + -0.011236, -0.011114, -0.010992, -0.010756, -0.010748, -0.010400, + -0.010504, -0.010157, -0.010036, -0.009803, -0.009682, -0.009450, + -0.009217, -0.009097, -0.008753, -0.008522, -0.008291, -0.007948, + -0.007830, -0.007488, -0.007259, -0.006918, -0.006801, -0.006573, + -0.006233, -0.006117, -0.005778, -0.005552, -0.005325, -0.005099, + -0.004763, -0.004537, -0.004312, -0.004088, -0.003974, -0.003640, + -0.003417, -0.003083, -0.002861, -0.002639, -0.002307, -0.002195, + -0.001974, -0.001644, -0.001533, -0.001203, -0.000984, -0.000874, + -0.000655, -0.000545, -0.000327, -0.000109, 0.000000, 0.000000, + 0.000217, 0.000217, 0.000325, 0.000433, 0.000541, 0.000541, + 0.000648, 0.000756, 0.000755, 0.000862, 0.000861, 0.001076, + 0.001075, 0.001074, 0.001287, 0.001286, 0.001285, 0.001391, + 0.001497, 0.001389, 0.001601, 0.001600, 0.001705, 0.001597, + 0.001915, 0.001807, 0.002018, 0.001910, 0.002120, 0.002118, + 0.002222, 0.002220, 0.002324, 0.002322, 0.002426, 0.002424, + 0.002527, 0.002630, 0.002733, 0.002730, 0.002938, 0.002935, + 0.003037, 0.003139, 0.003241, 0.003343, 0.003340, 0.003441, + 0.003542, 0.003643, 0.003640, 0.003845, 0.003841, 0.003838, + 0.003938, 0.003935, 0.004035, 0.004135, 0.004028, 0.004127, + 0.004227, 0.004223, 0.004219, 0.004215, 0.004314, 0.004413, + 0.004307, 0.004303, 0.004401, 0.004398, 0.004394, 0.004492, + 0.004386, 0.004586, 0.004480, 0.004476, 0.004472, 0.004468, + 0.004565, 0.004460, 0.004557, 0.004452, 0.004448, 0.004545, + 0.004540, 0.004637, 0.004532, 0.004629, 0.004524, 0.004620, + 0.004616, 0.004612, 0.004708, 0.004704, 0.004599, 0.004695, + 0.004791, 0.004686, 0.004682, 0.004678, 0.004773, 0.004769, + 0.004863, 0.004859, 0.004855, 0.004850, 0.004846, 0.004742, + 0.004738, 0.004734, 0.004729, 0.004823, 0.004622, 0.004716, + 0.004712, 0.004707, 0.004605, 0.004698, 0.004498, 0.004494, + 0.004490, 0.004388, 0.004482, 0.004380, 0.004473, 0.004469, + 0.004562, 0.004461, 0.004360, 0.004356, 0.004351, 0.004347, + 0.004343, 0.004339, 0.004335, 0.004331, 0.004231, 0.004227, + 0.004127, 0.004123, 0.004023, 0.004019, 0.003920, 0.003916, + 0.003817, 0.003718, 0.003714, 0.003520, 0.003517, 0.003419, + 0.003415, 0.003317, 0.003125, 0.003216, 0.003024, 0.003021, + 0.002924, 0.002921, 0.002918, 0.002727, 0.002631, 0.002628, + 0.002532, 0.002436, 0.002527, 0.002431, 0.002335, 0.002333, + 0.002237, 0.002235, 0.002140, 0.002138, 0.002043, 0.001948, + 0.001854, 0.001852, 0.001757, 0.001663, 0.001477, 0.001476, + 0.001382, 0.001197, 0.001103, 0.001102, 0.000918, 0.000825, + 0.000733, 0.000640, 0.000548, 0.000457, 0.000365, 0.000273, + 0.000273, 0.000182, 0.000091, 0.000091, 0.000000, 0.000091, + 0.000000, -0.000090, -0.000181, -0.000090, -0.000270, -0.000270, + -0.000270, -0.000359, -0.000359, -0.000448, -0.000448, -0.000447, + -0.000536, -0.000536, -0.000624, -0.000624, -0.000712, -0.000711, + -0.000711, -0.000888, -0.000887, -0.000974, -0.000973, -0.001061, + -0.001060, -0.001147, -0.001145, -0.001232, -0.001143, -0.001230, + -0.001228, -0.001227, -0.001226, -0.001312, -0.001311, -0.001309, + -0.001308, -0.001307, -0.001305, -0.001391, -0.001389, -0.001388, + -0.001386, -0.001385, -0.001470, -0.001382, -0.001381, -0.001293, + -0.001292, -0.001376, -0.001289, -0.001373, -0.001286, -0.001199, + -0.001283, -0.001282, -0.001281, -0.001279, -0.001193, -0.001277, + -0.001190, -0.001274, -0.001272, -0.001271, -0.001270, -0.001268, + -0.001182, -0.001266, -0.001264, -0.001347, -0.001346, -0.001344, + -0.001343, -0.001341, -0.001423, -0.001422, -0.001420, -0.001502, + -0.001501, -0.001582, -0.001580, -0.001579, -0.001660, -0.001741, + -0.001739, -0.001655, -0.001735, -0.001733, -0.001732, -0.001730, + -0.001728, -0.001808, -0.001806, -0.001722, -0.001720, -0.001636, + -0.001716, -0.001633, -0.001631, -0.001548, -0.001546, -0.001544, + -0.001461, -0.001460, -0.001377, -0.001456, -0.001293, -0.001372, + -0.001290, -0.001289, -0.001207, -0.001205, -0.001204, -0.001122, + -0.001121, -0.001120, -0.001039, -0.000958, -0.000957, -0.000955, + -0.000875, -0.000874, -0.000873, -0.000793, -0.000712, -0.000712, + -0.000711, -0.000631, -0.000552, -0.000472, -0.000393, -0.000393, + -0.000314, -0.000313, -0.000235, -0.000156, -0.000156, -0.000156, + -0.000078, -0.000078, 0.000000, 0.000000, 0.000000, 0.000000, + 0.000077, 0.000077, 0.000154, 0.000154, 0.000308, 0.000231, + 0.000461, 0.000384, 0.000536, 0.000536, 0.000764, 0.000687, + 0.000839, 0.000838, 0.000913, 0.000988, 0.001062, 0.001137, + 0.001060, 0.001134, 0.001208, 0.001207, 0.001281, 0.001279, + 0.001353, 0.001351, 0.001424, 0.001423, 0.001496, 0.001494, + 0.001567, 0.001490, 0.001488, 0.001561, 0.001559, 0.001557, + 0.001555, 0.001627, 0.001699, 0.001697, 0.001695, 0.001766, + 0.001764, 0.001835, 0.001833, 0.001758, 0.001828, 0.001826, + 0.001897, 0.001895, 0.001892, 0.001962, 0.001960, 0.001958, + 0.002027, 0.002025, 0.002095, 0.002092, 0.002161, 0.002159, + 0.002156, 0.002153, 0.002222, 0.002219, 0.002216, 0.002285, + 0.002211, 0.002279, 0.002276, 0.002344, 0.002341, 0.002338, + 0.002335, 0.002403, 0.002400, 0.002467, 0.002464, 0.002461, + 0.002528, 0.002525, 0.002591, 0.002588, 0.002585, 0.002721, + 0.002717, 0.002783, 0.002779, 0.002776, 0.002841, 0.002907, + 0.002972, 0.002968, 0.003033, 0.003029, 0.003025, 0.003090, + 0.003154, 0.003150, 0.003214, 0.003210, 0.003138, 0.003133, + 0.003061, 0.003193, 0.003121, 0.003049, 0.003045, 0.003041, + 0.003037, 0.003032, 0.002961, 0.002890, 0.002886, 0.002882, + 0.002811, 0.002807, 0.002737, 0.002733, 0.002796, 0.002725, + 0.002655, 0.002652, 0.002648, 0.002578, 0.002575, 0.002571, + 0.002568, 0.002564, 0.002560, 0.002557, 0.002488, 0.002484, + 0.002546, 0.002477, 0.002539, 0.002536, 0.002532, 0.002528, + 0.002525, 0.002521, 0.002582, 0.002514, 0.002575, 0.002507, + 0.002503, 0.002500, 0.002496, 0.002493, 0.002489, 0.002422, + 0.002418, 0.002479, 0.002412, 0.002408, 0.002405, 0.002401, + 0.002398, 0.002394, 0.002391, 0.002262, 0.002196, 0.002130, + 0.002064, 0.001999, 0.001996, 0.001993, 0.001928, 0.001863, + 0.001860, 0.001795, 0.001793, 0.001852, 0.001849, 0.001785, + 0.001844, 0.001779, 0.001838, 0.001774, 0.001894, 0.002013, + 0.002314, 0.002615, 0.003097, 0.003456, 0.003511, 0.003204, + 0.002837, 0.002290, 0.001865, 0.001622, 0.001380, 0.000958, + 0.000598, 0.000358, 0.000596, 0.001250, 0.001902, 0.002552, + 0.002667, 0.002426, 0.001950, 0.001593, 0.001355, 0.001411, + 0.001527, 0.001700, 0.001814, 0.001928, 0.001925, 0.002155, + 0.002676, 0.003368, 0.003769, 0.003937, 0.003584, 0.003174, + 0.002766, 0.002704, 0.002872, 0.003154, 0.003378, 0.003487, + 0.003481, 0.003248, 0.002844, 0.002272, 0.001644, 0.001076, + 0.000678, 0.000621, 0.001014, 0.001519, 0.002078, 0.002579, + 0.002855, 0.003018, 0.003013, 0.003008, 0.002947, 0.002831, + 0.002716, 0.002601, 0.002375, 0.002261, 0.002368, 0.002803, + 0.003567, 0.004219, 0.004758, 0.004696, 0.004197, 0.003374, + 0.002716, 0.002115, 0.001787, 0.001676, 0.001727, 0.001939, + 0.002205, 0.002470, 0.002573, 0.002515, 0.002457, 0.002506, + 0.002555, 0.002657, 0.002546, 0.002436, 0.002273, 0.002428, + 0.002687, 0.003050, 0.003465, 0.003721, 0.003872, 0.003813, + 0.003545, 0.003071, 0.002650, 0.002438, 0.002433, 0.002687, + 0.003044, 0.003296, 0.003444, 0.003438, 0.003227, 0.002966, + 0.002654, 0.002242, 0.001933, 0.001675, 0.001520, 0.001518, + 0.001464, 0.001663, 0.001761, 0.002109, 0.002406, 0.002652, + 0.002647, 0.002443, 0.002090, 0.001788, 0.001537, 0.001336, + 0.001433, 0.001430, 0.001673, 0.001916, 0.002108, 0.002251, + 0.002198, 0.001999, 0.001849, 0.001652, 0.001552, 0.001403, + 0.001401, 0.001350, 0.001395, 0.001489, 0.001630, 0.001722, + 0.001671, 0.001668, 0.001475, 0.001377, 0.001185, 0.001088, + 0.000897, 0.000801, 0.000752, 0.000892, 0.001031, 0.001169, + 0.001166, 0.001071, 0.000930, 0.000789, 0.000694, 0.000508, + 0.000415, 0.000368, 0.000413, 0.000596, 0.000823, 0.000959, + 0.001094, 0.001182, 0.001225, 0.001223, 0.001130, 0.001037, + 0.000810, 0.000719, 0.000628, 0.000626, 0.000714, 0.000847, + 0.001023, 0.001198, 0.001329, 0.001326, 0.001103, 0.000792, + 0.000439, 0.000131, -0.000087, -0.000175, -0.000305, -0.000391, + -0.000390, -0.000216, 0.000000, 0.000388, 0.000688, 0.000815, + 0.000771, 0.000598, 0.000341, 0.000255, 0.000297, 0.000381, + 0.000550, 0.000591, 0.000547, 0.000420, 0.000419, 0.000502, + 0.000709, 0.000791, 0.000748, 0.000497, 0.000207, -0.000083, + -0.000165, -0.000123, 0.000000, 0.000082, 0.000163, 0.000122, + 0.000000, -0.000081, -0.000243, -0.000363, -0.000443, -0.000402, + -0.000361, -0.000280, -0.000120, 0.000000, 0.000159, 0.000238, + 0.000316, 0.000316, 0.000275, 0.000275, 0.000157, 0.000039, + -0.000117, -0.000233, -0.000349, -0.000271, -0.000154, 0.000000, + 0.000192, 0.000230, 0.000153, 0.000000, -0.000190, -0.000418, + -0.000531, -0.000567, -0.000528, -0.000451, -0.000413, -0.000299, + -0.000299, -0.000261, -0.000149, -0.000111, 0.000000, 0.000000, + -0.000037, -0.000147, -0.000256, -0.000402, -0.000364, -0.000291, + -0.000218, -0.000108, -0.000036, -0.000072, -0.000144, -0.000251, + -0.000393, -0.000499, -0.000497, -0.000461, -0.000424, -0.000317, + -0.000281, -0.000245, -0.000210, -0.000174, -0.000209, -0.000243, + -0.000311, -0.000345, -0.000482, -0.000515, -0.000582, -0.000615, + -0.000545, -0.000476, -0.000407, -0.000304, -0.000270, -0.000302, + -0.000369, -0.000468, -0.000567, -0.000665, -0.000630, -0.000661, + -0.000593, -0.000625, -0.000557, -0.000490, -0.000456, -0.000455, + -0.000421, -0.000420, -0.000483, -0.000514, -0.000577, -0.000607, + -0.000637, -0.000540, -0.000539, -0.000505, -0.000473, -0.000471, + -0.000438, -0.000500, -0.000560, -0.000559, -0.000619, -0.000648, + -0.000646, -0.000614, -0.000551, -0.000518, -0.000456, -0.000455, + -0.000393, -0.000331, -0.000300, -0.000270, -0.000299, -0.000298, + -0.000267, -0.000266, -0.000206, -0.000118, -0.000029, 0.000058, + 0.000117, 0.000174, 0.000174, 0.000173, 0.000115, 0.000029, + -0.000029, -0.000028, -0.000028, 0.000000, 0.000000, +}; + +#endif /* _MONEY_H_ */ diff --git a/plugins/LadspaEffect/cmt/CMakeLists.txt b/plugins/LadspaEffect/cmt/CMakeLists.txt new file mode 100644 index 000000000..382bfc4c4 --- /dev/null +++ b/plugins/LadspaEffect/cmt/CMakeLists.txt @@ -0,0 +1,18 @@ +INCLUDE_DIRECTORIES("${CMAKE_SOURCE_DIR}/include") +FILE(GLOB_RECURSE SOURCES src/*.cpp) +ADD_LIBRARY(cmt MODULE ${SOURCES}) +INSTALL(TARGETS cmt LIBRARY DESTINATION "${PLUGIN_DIR}/ladspa") + +SET_TARGET_PROPERTIES(cmt PROPERTIES PREFIX "") +SET_TARGET_PROPERTIES(cmt PROPERTIES COMPILE_FLAGS "-Wall -O3 -fno-strict-aliasing") + +IF(LMMS_BUILD_WIN32) + ADD_CUSTOM_COMMAND(TARGET cmt POST_BUILD COMMAND "${STRIP}" "\"${CMAKE_CURRENT_BINARY_DIR}/cmt.dll\"") +ELSE(LMMS_BUILD_WIN32) + SET_TARGET_PROPERTIES(cmt PROPERTIES COMPILE_FLAGS "${COMPILE_FLAGS} -fPIC") +ENDIF(LMMS_BUILD_WIN32) + +IF(NOT LMMS_BUILD_APPLE) + SET_TARGET_PROPERTIES(cmt PROPERTIES LINK_FLAGS "${LINK_FLAGS} -shared -Wl,-no-undefined") +ENDIF(NOT LMMS_BUILD_APPLE) + diff --git a/plugins/LadspaEffect/cmt/README b/plugins/LadspaEffect/cmt/README new file mode 100644 index 000000000..3653569fc --- /dev/null +++ b/plugins/LadspaEffect/cmt/README @@ -0,0 +1,7 @@ +Computer Music Toolkit (CMT) +---------------------------- + +This toolkit is a set of musical sound processing and synthesis tools +presented as a LADSPA plugin library. See the doc/ directory for +documentation and installation instructions. See http://www.ladspa.org +for LADSPA information. See http://www.ladspa.org/cmt for CMT updates. diff --git a/plugins/LadspaEffect/cmt/doc/COPYING b/plugins/LadspaEffect/cmt/doc/COPYING new file mode 100644 index 000000000..eeb586b39 --- /dev/null +++ b/plugins/LadspaEffect/cmt/doc/COPYING @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) 19yy + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19yy name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/plugins/LadspaEffect/cmt/doc/adding_plugins.html b/plugins/LadspaEffect/cmt/doc/adding_plugins.html new file mode 100644 index 000000000..785bdfdea --- /dev/null +++ b/plugins/LadspaEffect/cmt/doc/adding_plugins.html @@ -0,0 +1,54 @@ +

Adding Plugins to the CMT Library

+ +

The CMT +LADSPA plugin collection is written in C++ and uses a little +additional sophistication to make plugin writing easier. This document +describes how to add a new plugin to the toolkit.

+ +

At the moment CMT is not under public version control, so please +send changes to Richard +Furse.

+ +

CMT plugins interpret LADSPA_Handle entities as +pointers to objects derived from the CMT_PluginInstance +class. Plugin instance structures are defined by subclassing this, so +writing a descendent of CMT_PluginInstance is the first +thing to do. The CMT library provides its own implementation of +connect_port(), cleanup() and a templated +form of instantiate() (see +CMT_Instantiate<>()). These calls assume that any +instantiation or cleanup mechanisms required will be written in the +constructor or destructor of the class.

+ +

When writing a plugin module, an initialisation function should be +included. To ensure this is called, add a call to the +initialise_modules() function in +descriptor.cpp. The module should also be added to the +makefile.

+ +

Your initialisation function should construct new +CMT_Desctiptor plugin descriptor structures and pass them +to registerNewPluginDescriptor(). The +CMT_Descriptor is directly descended from +LADSPA_Descriptor but provides constructor, destructor +and addPort() methods.

+ +

All plugins need unique IDs. During development, use values between +1 and 1000. When the plugin is ready, please request an ID from ladspa@muse.demon.co.uk. Please +also add a brief description of your module to plugins.html.

+ +

In practice, CMT plugin writing is probably best learned by +example. For a simple case, see the mixer.cpp +module. This defines a SimpleMixer class to handle +instance data, a runSimpleMixer() function for use with +it and a mixer_descriptor() function to provide a +description of the plugin to the CMT core. The +mixer_descriptor() function is declared and referenced in +the descriptor.cpp module. Additional information is +available in cmt.h and ladspa.h.

+ +

CMT plugins are licenced under GPL +version 2. Please read and understand this license before submitting +plugins to the library.

diff --git a/plugins/LadspaEffect/cmt/doc/bugs.html b/plugins/LadspaEffect/cmt/doc/bugs.html new file mode 100644 index 000000000..e1c89b448 --- /dev/null +++ b/plugins/LadspaEffect/cmt/doc/bugs.html @@ -0,0 +1,20 @@ +

CMT Bugs

+ +

Please report bugs to +richard@muse.demon.co.uk.

+ +
    + +
  • I'm not sure I've got attack & decay the right way around in the +expander plugins.
  • + +
  • Need to have a look at dynamic.cpp for handling of unusual +arithmetic situation such as isnan(), +isinf() etc.
  • + +
  • Memory management is a little haphazard at present. What happens +when new() fails? The host can use +set_new_handler(), but I suspect this needs further +thought anyway.
  • + +
diff --git a/plugins/LadspaEffect/cmt/doc/changes.html b/plugins/LadspaEffect/cmt/doc/changes.html new file mode 100644 index 000000000..38bd70717 --- /dev/null +++ b/plugins/LadspaEffect/cmt/doc/changes.html @@ -0,0 +1,149 @@ +

CMT Changes

+ +

Version 1.01 - 4 May 2000

+
    + +
  • Initial Release.
  • + +
+ +

Version 1.02 - 11 May 2000

+
    + +
  • Use _init() and _fini(). To handle +memory management automatically.
  • + +
  • Change from *_descriptor() approach simpler +initialise_*() approach. Use _init() and +_fini() to handle memory management. Supply +CMT_Descriptor::~CMT_Descriptor().
  • + +
  • Make comments compatible with Doxygen.
  • + +
  • Addition of Ambisonic encoder, decoder, converter and rotation +plugins.
  • + +
  • Addition of Sine Waveshaper and Granular Scatter Processor +plugin.
  • + +
+ +

Version 1.03 - 14 May 2000

+
    + +
  • Updated to correspond to http://www.ladspa.org/.
  • + +
+ +

Version 1.04 - 18 May 2000

+
    + +
  • Bugfixes: Ambisonic encoder inputs, white noise amplitude/DC, +Ambisonic rotation inplace support, sine oscillator frequency input +inplace support.
  • + +
+ +

Version 1.05 - 18 May 2000

+
    + +
  • Bugfix: use explicit pointer type when deleting +ImplementationData in ~CMT_Descriptor.
  • + +
+ +

Version 1.06 - 24 Sep 2000

+
    + +
  • Introduction of Identity plugins.
  • + +
+ +

Version 1.07 - 30 Sep 2000

+
    + +
  • Use constructor/destructor rather than _fini() and _init(). Use +C++ for linkage.
  • + +
+ +

Version 1.08 - 30 Sep 2000

+
    + +
  • Fix to Ambisonic decode equations.
  • + +
+ +

Version 1.09 - 4 Nov 2000

+
    + +
  • Addition of a port of Freeverb (version 3) and a collection of +plugins by David Bartold (analogue, canyon_delay, organ, syndrum, +vcf303).
  • + +
+ +

Version 1.10 - 17 Feb 2001

+
    + +
  • Small compile fixes to some modules. Apologies to David who sent +me a patch ages ago for the analogue module.
  • + +
+ +

Version 1.11 - 8 May 2001

+
    + +
  • Addition of newline character to end of allpass.h.
  • + +
+ +

Version 1.12 - 17 Sept 2001

+
    + +
  • Addition of new plugins by David: "Lo Fi" and "Phase Modulated +Voice."
  • + +
+ +

Version 1.13 - 7 May 2002

+
    + +
  • Fix to B-Format rotation algorithm.
  • + +
+ +

Version 1.14 - 7 Aug 2002

+
    + +
  • Fix to B-Format rotation algorithm.
  • + +
  • Update for LADSPA 1.1 (include default values).
  • + +
+ +

Version 1.15 - 19 Dec 2002

+
    + +
  • Addition of a number of utility routines and namespaces by +Nathaniel Virgo.
  • + +
  • Addition of a number of plugins by Nathaniel Virgo.
  • + +
  • Small change to trigger mechanism in syndrum plugin.
  • + +
+ +

Version 1.16 - 6 Nov 2007

+
    + +
  • Remove -Werror from compile options in makefile.
  • + +
  • Remove "local" part from install directories.
  • + +
  • Small additional changes to makefile for robustness.
  • + +
  • Replace strdup() with localStrdup() to avoid malloc/new +mismatch.
  • + +
diff --git a/plugins/LadspaEffect/cmt/doc/index.html b/plugins/LadspaEffect/cmt/doc/index.html new file mode 100644 index 000000000..abab9a5a9 --- /dev/null +++ b/plugins/LadspaEffect/cmt/doc/index.html @@ -0,0 +1,26 @@ +

CMT Index

+ + + +

Other Links

+ + + +

Richard Furse can be emailed as richard@muse.demon.co.uk. + +

+ diff --git a/plugins/LadspaEffect/cmt/doc/installation.html b/plugins/LadspaEffect/cmt/doc/installation.html new file mode 100644 index 000000000..e66e29a03 --- /dev/null +++ b/plugins/LadspaEffect/cmt/doc/installation.html @@ -0,0 +1,19 @@ +

CMT Installation

+ +

To build the plugin library, enter the src/ directory +and run make. The makefile expects to find the +ladspa.h header file in your include path or +/usr/local/include/. If you do not have this file it can +be downloaded as part of the LADSPA SDK from +http://www.ladspa.org/download/.

+ +

Running make will generate the CMT LADSPA plugin +library (cmt.so) in the plugins/ +directory. This can be moved to an appropriate location depending on +the application you are using. Running make install from +the src/ directory as root will install to +/usr/local/lib/ladspa/ which is on the search path +recommended for hosts looking for plugin libraries. Some applications +may not search this directory automatically.

+ diff --git a/plugins/LadspaEffect/cmt/doc/license.html b/plugins/LadspaEffect/cmt/doc/license.html new file mode 100644 index 000000000..a7e00db16 --- /dev/null +++ b/plugins/LadspaEffect/cmt/doc/license.html @@ -0,0 +1,16 @@ +

CMT License

+ +

The CMT toolkit is licensed under GPL version +2.

+ +

As I understand it (I'm not a lawyer) this means that, once built, +the CMT library may be used with non-GPL'd applications as +long as it is built and loaded using the standard LADSPA +dynamic-linking approach without modification. In my opinion this is a +good thing for the toolkit, if not for the GPL.

+ +

The above may not be correct when built against the LGPL version of +the ladpsa.h header file, but it is certainly the way we would like +things to be. See the LADPSA +license for further details.

diff --git a/plugins/LadspaEffect/cmt/doc/overview.html b/plugins/LadspaEffect/cmt/doc/overview.html new file mode 100644 index 000000000..e34b7a9b7 --- /dev/null +++ b/plugins/LadspaEffect/cmt/doc/overview.html @@ -0,0 +1,14 @@ +

Computer Music Toolkit (CMT) v1.16 Overview

+ +

The Computer Music Toolkit (CMT) is a collection of LADSPA plugins for use with software +synthesis and recording packages on Linux. See the license before use.

+ +

The CMT was initially designed and developed by Richard W.E. Furse +(who was also the principal designer of the LADSPA standard) and +further plugins have been provided by by Jezar, David Bartold and +Nathaniel Virgo. If you are a programmer or can write documentation +and would like to help out, please feel free to contact Richard.

+ diff --git a/plugins/LadspaEffect/cmt/doc/plugins.html b/plugins/LadspaEffect/cmt/doc/plugins.html new file mode 100644 index 000000000..9eddd0488 --- /dev/null +++ b/plugins/LadspaEffect/cmt/doc/plugins.html @@ -0,0 +1,477 @@ +

CMT Library Plugins

+ +

The following plugins are provided in the CMT library:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Plugin IDPlugin LabelDescription
1051lpfLow Pass Filter (One Pole).
1052hpfHigh Pass Filter (One Pole).
1053delay_0.01sEcho Delay Line. The delay time may be varied up to 0.01 +seconds. No feedback is provided.
1054delay_0.1sEcho Delay Line. The delay time may be varied up to 0.1 +seconds. No feedback is provided.
1055delay_1sEcho Delay Line. The delay time may be varied up to 1 +second. No feedback is provided.
1056delay_5sEcho Delay Line. The delay time may be varied up to 5 +seconds. No feedback is provided.
1057delay_60sEcho Delay Line. The delay time may be varied up to 60 +seconds. No feedback is provided.
1058fbdelay_0.01sFeedback Delay Line. The delay time may be varied up to 0.01 +seconds.
1059fbdelay_0.1sFeedback Delay Line. The delay time may be varied up to 0.1 +seconds.
1060fbdelay_1sFeedback Delay Line. The delay time may be varied up to 1 +second.
1061fbdelay_5sFeedback Delay Line. The delay time may be varied up to 5 +seconds.
1062fbdelay_60sFeedback Delay Line. The delay time may be varied up to 60 +seconds.
1063sine_faaaSine Oscillator. Frequency input is audio, Amplitude input is +audio.
1064sine_faacSine Oscillator. Frequency input is audio, Amplitude input is +control.
1065sine_fcaaSine Oscillator. Frequency input is control, Amplitude input is +audio.
1066sine_fcacSine Oscillator. Frequency input is control, Amplitude input is +control.
1067amp_monoAmplifier (Mono).
1068amp_stereoAmplifier (Stereo).
1069noise_source_whiteNoise Source (White).
1070amAmplitude Modulator.
1071mixerMixer (Stereo to Mono).
1072compress_peakSimple Compressor (Peak Envelope Tracking).
1073compress_rmsSimple Compressor (RMS Envelope Tracking).
1074expand_peakSimple Expander (Peak Envelope Tracking).
1075expand_rmsSimple Expander (RMS Envelope Tracking).
1076limit_peakSimple Limiter (Peak Envelope Tracking).
1077limit_rmsSimple Limiter (RMS Envelope Tracking).
1078track_peakEnvelope Tracker (Peak).
1079track_rmsEnvelope Tracker (RMS).
1080track_max_peakEnvelope Tracker (Maximum Peak).
1081track_max_rmsEnvelope Tracker (Maximum RMS).
1082peakPeak Monitor.
1083null_ciNull Plugin (Control Input).
1084null_aiNull Plugin (Audio Input).
1085null_coNull Plugin (Control Output).
1086null_aoNull Plugin (Audio Output).
1087encode_bformatB-Format Encoder. This plugin encodes ambisonic B-Format audio +using the inverse square law but no filtering, reverb or delay.
1088encode_fmhFMH-Format Encoder. This plugin encodes ambisonic FMH-Format audio +using the inverse square law but no filtering, reverb or delay.
1089fmh2bfFMH-Format to B-Format. This plugin simply discards the R, S, T, U +and V channels but is included for clarity.
1090bf2stereoB-Format to Stereo Ambisonic Decoder. This plugin only actually +uses its W and Y input signals and does not use UHJ.
1091bf2quadB-Format to Quad Ambisonic Decoder. This plugin only actually uses +its W, Y and Z input signals.
1092bf2cubeB-Format to Cube Ambisonic Decoder.
1093bf2octFMH-Format to Octagon Ambisonic Decoder. This plugin only actually +uses its W, X, Y, U and V inputs.
1094bf_rotate_zB-Format Rotation (Horizontal). This plugin rotates an B-Format +encoded soundfield around the Z-axis.
1095fmh_rotate_zFMH-Format Rotation (Horizontal). This plugin rotates an +FMH-Format encoded soundfield around the Z-axis.
1096grain_scatterGranular Scattering Processor. This plugin generates an output +audio stream by scattering short `grains' of sound from an input +stream. It is possible to control the length and envelope of these +grains, how far away from their source time grains may be scattered +and the density (grains/sec) of the texture produced.
1097wsshape_sineWave Shaper (Sine-Based).
1098identity_audioIdentity (Audio).
1099identity_controlIdentity (Control).
1123freeverb3Freeverb (Version 3). This reverb unit is a direct port of the +free public domain source code available from Jezar at Dreampoint.
1221analogueAnalogue Synthesizer Voice. Contains two audio oscillators, one LFO, +and three ADSRs. There are five waveforms available for the DCOs: +Sine, Triangle, Square, Sawtooth, and Fullwave rectified sine. The DCOs +may be frequency modulated and/or pulse width modulated by the LFO.
1222organOrgan Voice with Configurable Harmonics. The user may control the +loudness of the harmonics. There are three additional tones that may +be enabled and combined: brass, flute, and reed. Two ADSRs control +the envelope for the upper and lower harmonics.
1223syndrumDrum Synthesizer.
1224vcf303VCF 303. A TB-303 resonant filter clone.
1225canyon_delayCanyon Delay. A deep stereo crossdelay with built-in low pass +filters.
1226phasemodPhase Modulated Synthesizer Voice. Contains six audio oscillators, each +oscillator phase modulates the next. If a modulation coefficient is zero, +then the former oscillator's output is summed with the module's output. +DCO1's phase modulation parameter specifies an offset not a coefficient. +Example modulation parameters {1.0, 0.5, 0.0, 0.5, 0.2, 0.0} for all +six oscillators results in the output function: DCO2 (phase = DCO1 (phase = +1.0) * 0.5) + DCO5 (phase = DCO4 (phase = DCO3 (phase = 0.0) * 0.5) * 0.2) + +DCO6 (phase = 0.0). Each oscillator's output is bounded by -1.0 and 1.0, +or -360o and 360o.
1227lofiLo Fi. Simulates old audio equipment. Adds distortion, +bandwidth limiting, compression, and crackling to audio.
1841pink_interpolated_audioInterpolated pink noise. Pink noise is a kind of random +one-dimensional fractal. This plugin approximates the effect of an +extreme low pass filter on a pink noise signal. It is useful as a +natural-sounding continuously varying control signal with long-term +trends as well as short-term variation. If you use it to control the +pitch of a sine wave it can sound a bit like wind blowing. Notice that +the average value tends to gradually drift over long periods of +time. This is in the nature of pink noise, and so can't be +helped.
1843pink_shSample and hold pink noise. Similar to pink, but with stepped +instead of interpolated output.
1844pink_full_frequencyPink noise simulation with a full frequency range. You can low +pass filter this to get a similar effect to the interpolated pink +noise generator.
1845hard_gateHard noise gate. If the absolute value of the signal falls below +"threshold", it is set to zero. There is no antialiasing.
1846disintegratorAmplifies random half-cycles of it's input by multiplier. Set +multiplier to 0 and vary probability for a weird fade effect, or set +multiplier to -1 and probability to 0.5 to turn pitched sounds into +noise.
1848sledgehammerA Dynamic Sledgehammer, which you can use to bash your signals +into shape. It's basically a very simple and heavy compressor with a +sidechain. Try it with a pad sound as the carrier and a drum loop as +the modulator. Also, you can get some nice "Satan Maximiser"-style +distortion by not connecting the modulator (set it's influence to 0) +and putting the rate up to around 0.1.
1849logisticLogistic Map chaotic stepped control generator. The logistic map +is a classic example from chaos theory. It can be summarised by the +formula
x := r*x*(1-x).
With r<3, x just converges to a +constant value. With r just greater than 3 it oscillates with period +2. at about 3.45 the period doubles again to 4. These period doublings +occur at smaller and smaller increments of r, until at about 3.5699 +there have been an infinite number and the signal never +repeates. Between this value and 4 the system exhibits chaotic +behaviour (although there are regions of periodicity). Papers are +still being published today on the subject of this system's +behaviour. This plugin iterates this map at a given frequency to +produce a stepped signal, which is scaled to lie in the range +(-1,1). When this signal is used as a frequency control it can +sometimes sound quite musical.
+ +

"Ambisonics" is a registered trademark of Nimbus Communications +International.

diff --git a/plugins/LadspaEffect/cmt/doc/tasks.html b/plugins/LadspaEffect/cmt/doc/tasks.html new file mode 100644 index 000000000..72a9ff6d3 --- /dev/null +++ b/plugins/LadspaEffect/cmt/doc/tasks.html @@ -0,0 +1,36 @@ +

CMT Library Task List

+ +

Basic Plugins Needed

+ +
    + +
  • Noise Gate
  • +
  • Flanger
  • +
  • Phaser
  • +
  • Chorus
  • +
  • Unbounded Delay (echo & feedback)
  • +
  • Distortion
  • +
  • Overdrive
  • +
  • Exciter
  • +
  • Resonant Filter
  • +
  • Graphic EQ
  • +
  • Envelope Generator
  • + +
+ +

Other Plugins Planned

+ +
    + +
  • Vocoder
  • + +
+ +

Other Tasks

+ +
    + +
  • Think up a better name than CMT.
  • + +
+ diff --git a/plugins/LadspaEffect/cmt/src/am.cpp b/plugins/LadspaEffect/cmt/src/am.cpp new file mode 100644 index 000000000..2e07ae553 --- /dev/null +++ b/plugins/LadspaEffect/cmt/src/am.cpp @@ -0,0 +1,103 @@ +/* am.cpp + + Computer Music Toolkit - a library of LADSPA plugins. Copyright (C) + 2000 Richard W.E. Furse. The author may be contacted at + richard@muse.demon.co.uk. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public Licence as + published by the Free Software Foundation; either version 2 of the + Licence, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307, USA. */ + +/*****************************************************************************/ + +#include +#include + +/*****************************************************************************/ + +#include "cmt.h" + +/*****************************************************************************/ + +#define AM_INPUT1 0 +#define AM_INPUT2 1 +#define AM_OUTPUT 2 + +/** This plugin multiplies two signals together to produce a third. */ +class AmplitudeModulator : public CMT_PluginInstance { +public: + + AmplitudeModulator(const LADSPA_Descriptor *, + unsigned long) + : CMT_PluginInstance(3) { + } + + friend void runAmplitudeModulator(LADSPA_Handle Instance, + unsigned long SAmplitudeModulatorpleCount); + +}; + +/*****************************************************************************/ + +void +runAmplitudeModulator(LADSPA_Handle Instance, + unsigned long SAmplitudeModulatorpleCount) { + + AmplitudeModulator * poAmplitudeModulator = (AmplitudeModulator *)Instance; + + LADSPA_Data * pfInput1 = poAmplitudeModulator->m_ppfPorts[AM_INPUT1]; + LADSPA_Data * pfInput2 = poAmplitudeModulator->m_ppfPorts[AM_INPUT2]; + LADSPA_Data * pfOutput = poAmplitudeModulator->m_ppfPorts[AM_OUTPUT]; + + for (unsigned long lSAmplitudeModulatorpleIndex = 0; + lSAmplitudeModulatorpleIndex < SAmplitudeModulatorpleCount; + lSAmplitudeModulatorpleIndex++) + *(pfOutput++) = *(pfInput1++) * *(pfInput2++); +} + +/*****************************************************************************/ + +void +initialise_am() { + + CMT_Descriptor * psDescriptor = new CMT_Descriptor + (1070, + "am", + LADSPA_PROPERTY_HARD_RT_CAPABLE, + "Amplitude Modulator", + CMT_MAKER("Richard W.E. Furse"), + CMT_COPYRIGHT("2000", "Richard W.E. Furse"), + NULL, + CMT_Instantiate, + NULL, + runAmplitudeModulator, + NULL, + NULL, + NULL); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + "Input 1"); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + "Input 2"); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output"); + + registerNewPluginDescriptor(psDescriptor); +} + +/*****************************************************************************/ + +/* EOF */ diff --git a/plugins/LadspaEffect/cmt/src/ambisonic.cpp b/plugins/LadspaEffect/cmt/src/ambisonic.cpp new file mode 100644 index 000000000..60e42809c --- /dev/null +++ b/plugins/LadspaEffect/cmt/src/ambisonic.cpp @@ -0,0 +1,1135 @@ +/* ambisonic.cpp + + Computer Music Toolkit - a library of LADSPA plugins. Copyright (C) + 2000-2002 Richard W.E. Furse. The author may be contacted at + richard@muse.demon.co.uk. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public Licence as + published by the Free Software Foundation; either version 2 of the + Licence, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307, USA. */ + +/*****************************************************************************/ + +/* This module provides simple plugins handling B-Format and + FMH-Format audio. Ambisonics is a mathematical technique designed + to capture the sound field around point. See + http://www.muse.demon.co.uk/3daudio.html. "Ambisonics" is a + registered trademark of Nimbus Communications International + although. An exteremly `vanilla' approach is taken to encoding + distance, using inverse square, but no filtering or delay. */ + +/*****************************************************************************/ + +#include +#include +#include + +/*****************************************************************************/ + +#include "cmt.h" + +/*****************************************************************************/ + +#define ENC_INPUT 0 +#define ENC_IN_X 1 +#define ENC_IN_Y 2 +#define ENC_IN_Z 3 +#define ENC_OUT_W 4 +#define ENC_OUT_X 5 +#define ENC_OUT_Y 6 +#define ENC_OUT_Z 7 + +#define ENC_OUT_R 8 +#define ENC_OUT_S 9 +#define ENC_OUT_T 10 +#define ENC_OUT_U 11 +#define ENC_OUT_V 12 + +/*****************************************************************************/ + +/** This plugin encodes a signal to B-Format depending on where it is + located in a virtual space. */ +class BFormatEncoder : public CMT_PluginInstance { +public: + BFormatEncoder(const LADSPA_Descriptor *, + unsigned long lSampleRate) + : CMT_PluginInstance(8) { + } + friend void runBFormatEncoder(LADSPA_Handle Instance, + unsigned long SampleCount); +}; + +/** This plugin encodes a signal to FMH-Format depending on where it + is located in a virtual space. */ +class FMHFormatEncoder : public CMT_PluginInstance { +public: + FMHFormatEncoder(const LADSPA_Descriptor *, + unsigned long lSampleRate) + : CMT_PluginInstance(13) { + } + friend void runFMHFormatEncoder(LADSPA_Handle Instance, + unsigned long SampleCount); +}; + +/*****************************************************************************/ + +#define F2B_IN_W 0 +#define F2B_IN_X 1 +#define F2B_IN_Y 2 +#define F2B_IN_Z 3 +#define F2B_IN_R 4 +#define F2B_IN_S 5 +#define F2B_IN_T 6 +#define F2B_IN_U 7 +#define F2B_IN_V 8 +#define F2B_OUT_W 9 +#define F2B_OUT_X 10 +#define F2B_OUT_Y 11 +#define F2B_OUT_Z 12 + +/** This plugin coverts FMH-Format to B-Format. This is a trivial + operation that can also be achieved simply by discarding RSTUV + channels. */ +class FMHToB : public CMT_PluginInstance { +public: + FMHToB(const LADSPA_Descriptor *, + unsigned long lSampleRate) + : CMT_PluginInstance(13) { + } + friend void runFMHToB(LADSPA_Handle Instance, + unsigned long SampleCount); +}; + +/*****************************************************************************/ + +#define DECST_IN_W 0 +#define DECST_IN_X 1 +#define DECST_IN_Y 2 +#define DECST_IN_Z 3 +#define DECST_OUT_L 4 +#define DECST_OUT_R 5 + +/** This plugin decodes B-Format to produce a stereo speaker feed. */ +class BFormatToStereo : public CMT_PluginInstance { +public: + BFormatToStereo(const LADSPA_Descriptor *, + unsigned long lSampleRate) + : CMT_PluginInstance(6) { + } + friend void runBFormatToStereo(LADSPA_Handle Instance, + unsigned long SampleCount); +}; + +/*****************************************************************************/ + +#define DECQ_IN_W 0 +#define DECQ_IN_X 1 +#define DECQ_IN_Y 2 +#define DECQ_IN_Z 3 +#define DECQ_OUT_FL 4 +#define DECQ_OUT_FR 5 +#define DECQ_OUT_BL 6 +#define DECQ_OUT_BR 7 + +/** This plugin decodes B-Format to produce a quad (square) speaker feed. */ +class BFormatToQuad : public CMT_PluginInstance { +public: + BFormatToQuad(const LADSPA_Descriptor *, + unsigned long lSampleRate) + : CMT_PluginInstance(8) { + } + friend void runBFormatToQuad(LADSPA_Handle Instance, + unsigned long SampleCount); +}; + +/*****************************************************************************/ + +#define DECC_IN_W 0 +#define DECC_IN_X 1 +#define DECC_IN_Y 2 +#define DECC_IN_Z 3 +#define DECC_OUT_BFL 4 +#define DECC_OUT_BFR 5 +#define DECC_OUT_BBL 6 +#define DECC_OUT_BBR 7 +#define DECC_OUT_TFL 8 +#define DECC_OUT_TFR 9 +#define DECC_OUT_TBL 10 +#define DECC_OUT_TBR 11 + +/** This plugin decodes B-Format to produce a speaker feed for eight + speakers arranged at the corners of a cube. */ +class BFormatToCube : public CMT_PluginInstance { +public: + BFormatToCube(const LADSPA_Descriptor *, + unsigned long lSampleRate) + : CMT_PluginInstance(12) { + } + friend void runBFormatToCube(LADSPA_Handle Instance, + unsigned long SampleCount); +}; + +/*****************************************************************************/ + +#define DECO_IN_W 0 +#define DECO_IN_X 1 +#define DECO_IN_Y 2 +#define DECO_IN_Z 3 +#define DECO_IN_R 4 +#define DECO_IN_S 5 +#define DECO_IN_T 6 +#define DECO_IN_U 7 +#define DECO_IN_V 8 +#define DECO_OUT_FFL 9 +#define DECO_OUT_FFR 10 +#define DECO_OUT_FRR 11 +#define DECO_OUT_BRR 12 +#define DECO_OUT_BBR 13 +#define DECO_OUT_BBL 14 +#define DECO_OUT_BLL 15 +#define DECO_OUT_FLL 16 + +/** This plugin decodes FMH-Format to produce a speaker feed for eight + speakers arranged at the corners of an octagon. */ +class FMHFormatToOct : public CMT_PluginInstance { +public: + FMHFormatToOct(const LADSPA_Descriptor *, + unsigned long lSampleRate) + : CMT_PluginInstance(17) { + } + friend void runFMHFormatToOct(LADSPA_Handle Instance, + unsigned long SampleCount); +}; + +/*****************************************************************************/ + +#define BFROT_ANGLE 0 +#define BFROT_IN_W 1 +#define BFROT_IN_X 2 +#define BFROT_IN_Y 3 +#define BFROT_IN_Z 4 +#define BFROT_OUT_W 5 +#define BFROT_OUT_X 6 +#define BFROT_OUT_Y 7 +#define BFROT_OUT_Z 8 + +/** This plugin rotates an B-Format soundfield around the Z-axis. */ +class BFormatRotation : public CMT_PluginInstance { +public: + BFormatRotation(const LADSPA_Descriptor *, + unsigned long lSampleRate) + : CMT_PluginInstance(9) { + } + friend void runBFormatRotation(LADSPA_Handle Instance, + unsigned long SampleCount); +}; + +/*****************************************************************************/ + +#define FMHROT_ANGLE 0 + +#define FMHROT_IN_W 1 +#define FMHROT_IN_X 2 +#define FMHROT_IN_Y 3 +#define FMHROT_IN_Z 4 +#define FMHROT_IN_R 5 +#define FMHROT_IN_S 6 +#define FMHROT_IN_T 7 +#define FMHROT_IN_U 8 +#define FMHROT_IN_V 9 + +#define FMHROT_OUT_W 10 +#define FMHROT_OUT_X 11 +#define FMHROT_OUT_Y 12 +#define FMHROT_OUT_Z 13 +#define FMHROT_OUT_R 14 +#define FMHROT_OUT_S 15 +#define FMHROT_OUT_T 16 +#define FMHROT_OUT_U 17 +#define FMHROT_OUT_V 18 + +/** This plugin rotates an FMH-Format soundfield around the Z-axis. */ +class FMHFormatRotation : public CMT_PluginInstance { +public: + FMHFormatRotation(const LADSPA_Descriptor *, + unsigned long lSampleRate) + : CMT_PluginInstance(19) { + } + friend void runFMHFormatRotation(LADSPA_Handle Instance, + unsigned long SampleCount); +}; + +/*****************************************************************************/ + +void +runBFormatEncoder(LADSPA_Handle Instance, + unsigned long SampleCount) { + + BFormatEncoder * poProcessor = (BFormatEncoder *)Instance; + + LADSPA_Data * pfInput = poProcessor->m_ppfPorts[ENC_INPUT]; + LADSPA_Data * pfOutW = poProcessor->m_ppfPorts[ENC_OUT_W]; + LADSPA_Data * pfOutX = poProcessor->m_ppfPorts[ENC_OUT_X]; + LADSPA_Data * pfOutY = poProcessor->m_ppfPorts[ENC_OUT_Y]; + LADSPA_Data * pfOutZ = poProcessor->m_ppfPorts[ENC_OUT_Z]; + + LADSPA_Data fX = *(poProcessor->m_ppfPorts[ENC_IN_X]); + LADSPA_Data fY = *(poProcessor->m_ppfPorts[ENC_IN_Y]); + LADSPA_Data fZ = *(poProcessor->m_ppfPorts[ENC_IN_Z]); + LADSPA_Data fDistanceSquared = fX * fX + fY * fY + fZ * fZ; + const LADSPA_Data fWScalar = 0.707107; + LADSPA_Data fXScalar, fYScalar, fZScalar; + if (fDistanceSquared > 1e-10) { + LADSPA_Data fOneOverDistanceSquared = 1 / fDistanceSquared; + fXScalar = fX * fOneOverDistanceSquared; + fYScalar = fY * fOneOverDistanceSquared; + fZScalar = fZ * fOneOverDistanceSquared; + } + else { + /* Avoid division by zero issues. */ + fXScalar = fYScalar = fZScalar = 0; + } + + for (unsigned long lSampleIndex = 0; + lSampleIndex < SampleCount; + lSampleIndex++) { + LADSPA_Data fInput = *(pfInput++); + *(pfOutW++) = fWScalar * fInput; + *(pfOutX++) = fXScalar * fInput; + *(pfOutY++) = fYScalar * fInput; + *(pfOutZ++) = fZScalar * fInput; + } +} + +/*****************************************************************************/ + +void +runFMHFormatEncoder(LADSPA_Handle Instance, + unsigned long SampleCount) { + + FMHFormatEncoder * poProcessor = (FMHFormatEncoder *)Instance; + + LADSPA_Data * pfInput = poProcessor->m_ppfPorts[ENC_INPUT]; + LADSPA_Data * pfOutW = poProcessor->m_ppfPorts[ENC_OUT_W]; + LADSPA_Data * pfOutX = poProcessor->m_ppfPorts[ENC_OUT_X]; + LADSPA_Data * pfOutY = poProcessor->m_ppfPorts[ENC_OUT_Y]; + LADSPA_Data * pfOutZ = poProcessor->m_ppfPorts[ENC_OUT_Z]; + LADSPA_Data * pfOutR = poProcessor->m_ppfPorts[ENC_OUT_R]; + LADSPA_Data * pfOutS = poProcessor->m_ppfPorts[ENC_OUT_S]; + LADSPA_Data * pfOutT = poProcessor->m_ppfPorts[ENC_OUT_T]; + LADSPA_Data * pfOutU = poProcessor->m_ppfPorts[ENC_OUT_U]; + LADSPA_Data * pfOutV = poProcessor->m_ppfPorts[ENC_OUT_V]; + + LADSPA_Data fX = *(poProcessor->m_ppfPorts[ENC_IN_X]); + LADSPA_Data fY = *(poProcessor->m_ppfPorts[ENC_IN_Y]); + LADSPA_Data fZ = *(poProcessor->m_ppfPorts[ENC_IN_Z]); + LADSPA_Data fDistanceSquared = fX * fX + fY * fY + fZ * fZ; + const LADSPA_Data fWScalar = 0.707107; + LADSPA_Data fXScalar, fYScalar, fZScalar; + LADSPA_Data fRScalar, fSScalar, fTScalar; + LADSPA_Data fUScalar, fVScalar; + if (fDistanceSquared > 1e-10) { + LADSPA_Data fOneOverDistanceSquared + = 1 / fDistanceSquared; + LADSPA_Data fOneOverDistanceCubed + = LADSPA_Data(pow(fDistanceSquared, -1.5)); + fXScalar = fX * fOneOverDistanceSquared; + fYScalar = fY * fOneOverDistanceSquared; + fZScalar = fZ * fOneOverDistanceSquared; + fRScalar = ((fZ * fZ) * fOneOverDistanceSquared - 0.5) + * sqrt(fOneOverDistanceSquared); + fSScalar = 2 * (fZ * fX) * fOneOverDistanceCubed; + fTScalar = 2 * (fY * fX) * fOneOverDistanceCubed; + fUScalar = (fX * fX - fY * fY) * fOneOverDistanceCubed; + fVScalar = 2 * (fX * fY) * fOneOverDistanceCubed; + } + else { + /* Avoid division by zero issues. */ + fXScalar = fYScalar = fZScalar + = fRScalar = fSScalar = fTScalar + = fUScalar = fVScalar = 0; + } + + for (unsigned long lSampleIndex = 0; + lSampleIndex < SampleCount; + lSampleIndex++) { + LADSPA_Data fInput = *(pfInput++); + *(pfOutW++) = fWScalar * fInput; + *(pfOutX++) = fXScalar * fInput; + *(pfOutY++) = fYScalar * fInput; + *(pfOutZ++) = fZScalar * fInput; + *(pfOutR++) = fRScalar * fInput; + *(pfOutS++) = fSScalar * fInput; + *(pfOutT++) = fTScalar * fInput; + *(pfOutU++) = fUScalar * fInput; + *(pfOutV++) = fVScalar * fInput; + } +} + +/*****************************************************************************/ + +void +runFMHToB(LADSPA_Handle Instance, + unsigned long SampleCount) { + + FMHToB * poProcessor = (FMHToB *)Instance; + + LADSPA_Data * pfInW = poProcessor->m_ppfPorts[F2B_IN_W]; + LADSPA_Data * pfInX = poProcessor->m_ppfPorts[F2B_IN_X]; + LADSPA_Data * pfInY = poProcessor->m_ppfPorts[F2B_IN_Y]; + LADSPA_Data * pfInZ = poProcessor->m_ppfPorts[F2B_IN_Z]; + LADSPA_Data * pfOutW = poProcessor->m_ppfPorts[F2B_OUT_W]; + LADSPA_Data * pfOutX = poProcessor->m_ppfPorts[F2B_OUT_X]; + LADSPA_Data * pfOutY = poProcessor->m_ppfPorts[F2B_OUT_Y]; + LADSPA_Data * pfOutZ = poProcessor->m_ppfPorts[F2B_OUT_Z]; + + int iSize = sizeof(LADSPA_Data) * SampleCount; + memcpy(pfOutW, pfInW, iSize); + memcpy(pfOutX, pfInX, iSize); + memcpy(pfOutY, pfInY, iSize); + memcpy(pfOutZ, pfInZ, iSize); +} + +/*****************************************************************************/ + +void +runBFormatToStereo(LADSPA_Handle Instance, + unsigned long SampleCount) { + + BFormatToStereo * poProcessor = (BFormatToStereo *)Instance; + + LADSPA_Data * pfInW = poProcessor->m_ppfPorts[DECST_IN_W]; + LADSPA_Data * pfInY = poProcessor->m_ppfPorts[DECST_IN_Y]; + + LADSPA_Data * pfOutL = poProcessor->m_ppfPorts[DECST_OUT_L]; + LADSPA_Data * pfOutR = poProcessor->m_ppfPorts[DECST_OUT_R]; + + for (unsigned long lSampleIndex = 0; + lSampleIndex < SampleCount; + lSampleIndex++) { + LADSPA_Data fA = 0.707107 * *(pfInW++); + LADSPA_Data fB = 0.5 * *(pfInY++); + *(pfOutL++) = fA + fB; + *(pfOutR++) = fA - fB; + } + +} + +/*****************************************************************************/ + +void +runBFormatToQuad(LADSPA_Handle Instance, + unsigned long SampleCount) { + + BFormatToQuad * poProcessor = (BFormatToQuad *)Instance; + + LADSPA_Data * pfInW = poProcessor->m_ppfPorts[DECQ_IN_W]; + LADSPA_Data * pfInX = poProcessor->m_ppfPorts[DECQ_IN_X]; + LADSPA_Data * pfInY = poProcessor->m_ppfPorts[DECQ_IN_Y]; + + LADSPA_Data * pfOutFL = poProcessor->m_ppfPorts[DECQ_OUT_FL]; + LADSPA_Data * pfOutFR = poProcessor->m_ppfPorts[DECQ_OUT_FR]; + LADSPA_Data * pfOutBL = poProcessor->m_ppfPorts[DECQ_OUT_BL]; + LADSPA_Data * pfOutBR = poProcessor->m_ppfPorts[DECQ_OUT_BR]; + + for (unsigned long lSampleIndex = 0; + lSampleIndex < SampleCount; + lSampleIndex++) { + LADSPA_Data fW = 0.353553 * *(pfInW++); + LADSPA_Data fX = 0.243361 * *(pfInX++); + LADSPA_Data fY = 0.243361 * *(pfInY++); + LADSPA_Data fV = 0.096383 * *(pfInY++); + *(pfOutFL++) = fW + fX + fY + fV; + *(pfOutFR++) = fW + fX - fY - fV; + *(pfOutBL++) = fW - fX + fY + fV; + *(pfOutBR++) = fW - fX - fY - fV; + } + +} + +/*****************************************************************************/ + +void +runBFormatToCube(LADSPA_Handle Instance, + unsigned long SampleCount) { + + BFormatToCube * poProcessor = (BFormatToCube *)Instance; + + LADSPA_Data * pfInW = poProcessor->m_ppfPorts[DECC_IN_W]; + LADSPA_Data * pfInX = poProcessor->m_ppfPorts[DECC_IN_X]; + LADSPA_Data * pfInY = poProcessor->m_ppfPorts[DECC_IN_Y]; + LADSPA_Data * pfInZ = poProcessor->m_ppfPorts[DECC_IN_Z]; + + LADSPA_Data * pfOutBFL = poProcessor->m_ppfPorts[DECC_OUT_BFL]; + LADSPA_Data * pfOutBFR = poProcessor->m_ppfPorts[DECC_OUT_BFR]; + LADSPA_Data * pfOutBBL = poProcessor->m_ppfPorts[DECC_OUT_BBL]; + LADSPA_Data * pfOutBBR = poProcessor->m_ppfPorts[DECC_OUT_BBR]; + LADSPA_Data * pfOutTFL = poProcessor->m_ppfPorts[DECC_OUT_BFL]; + LADSPA_Data * pfOutTFR = poProcessor->m_ppfPorts[DECC_OUT_BFR]; + LADSPA_Data * pfOutTBL = poProcessor->m_ppfPorts[DECC_OUT_BBL]; + LADSPA_Data * pfOutTBR = poProcessor->m_ppfPorts[DECC_OUT_BBR]; + + for (unsigned long lSampleIndex = 0; + lSampleIndex < SampleCount; + lSampleIndex++) { + LADSPA_Data fW = 0.176777 * *(pfInW++); + LADSPA_Data fX = 0.113996 * *(pfInX++); + LADSPA_Data fY = 0.113996 * *(pfInY++); + LADSPA_Data fZ = 0.113996 * *(pfInZ++); + LADSPA_Data fS = 0.036859 * *(pfInX++); + LADSPA_Data fT = 0.036859 * *(pfInY++); + LADSPA_Data fV = 0.036859 * *(pfInZ++); + *(pfOutBFL++) = fW + fX + fY - fZ + fV - fT - fS; + *(pfOutBFR++) = fW + fX - fY - fZ - fV + fT - fS; + *(pfOutBBL++) = fW - fX + fY - fZ + fV + fT + fS; + *(pfOutBBR++) = fW - fX - fY - fZ - fV - fT + fS; + *(pfOutTFL++) = fW + fX + fY + fZ + fV + fT + fS; + *(pfOutTFR++) = fW + fX - fY + fZ - fV - fT + fS; + *(pfOutTBL++) = fW - fX + fY + fZ + fV - fT - fS; + *(pfOutTBR++) = fW - fX - fY + fZ - fV + fT - fS; + } + +} + +/*****************************************************************************/ + +void +runFMHFormatToOct(LADSPA_Handle Instance, + unsigned long SampleCount) { + + FMHFormatToOct * poProcessor = (FMHFormatToOct *)Instance; + + LADSPA_Data * pfInW = poProcessor->m_ppfPorts[DECO_IN_W]; + LADSPA_Data * pfInX = poProcessor->m_ppfPorts[DECO_IN_X]; + LADSPA_Data * pfInY = poProcessor->m_ppfPorts[DECO_IN_Y]; + LADSPA_Data * pfInU = poProcessor->m_ppfPorts[DECO_IN_U]; + LADSPA_Data * pfInV = poProcessor->m_ppfPorts[DECO_IN_V]; + + LADSPA_Data * pfOutFFL = poProcessor->m_ppfPorts[DECO_OUT_FFL]; + LADSPA_Data * pfOutFFR = poProcessor->m_ppfPorts[DECO_OUT_FFR]; + LADSPA_Data * pfOutFRR = poProcessor->m_ppfPorts[DECO_OUT_FRR]; + LADSPA_Data * pfOutBRR = poProcessor->m_ppfPorts[DECO_OUT_BRR]; + LADSPA_Data * pfOutBBR = poProcessor->m_ppfPorts[DECO_OUT_BBR]; + LADSPA_Data * pfOutBBL = poProcessor->m_ppfPorts[DECO_OUT_BBL]; + LADSPA_Data * pfOutBLL = poProcessor->m_ppfPorts[DECO_OUT_BLL]; + LADSPA_Data * pfOutFLL = poProcessor->m_ppfPorts[DECO_OUT_FLL]; + + for (unsigned long lSampleIndex = 0; + lSampleIndex < SampleCount; + lSampleIndex++) { + LADSPA_Data fW = 0.176777 * *(pfInW++); + LADSPA_Data fX1 = 0.065888 * *pfInX; + LADSPA_Data fX2 = 0.159068 * *(pfInX++); + LADSPA_Data fY1 = 0.065888 * *pfInY; + LADSPA_Data fY2 = 0.159068 * *(pfInY++); + LADSPA_Data fU = 0.034175 * *(pfInU++); + LADSPA_Data fV = 0.034175 * *(pfInV++); + *(pfOutFFL++) = fW + fX2 + fY1 + fU + fV; + *(pfOutFFR++) = fW + fX2 - fY1 + fU - fV; + *(pfOutFRR++) = fW + fX1 - fY2 - fU - fV; + *(pfOutBRR++) = fW - fX1 + fY2 - fU + fV; + *(pfOutBBR++) = fW - fX2 + fY1 + fU + fV; + *(pfOutBBL++) = fW - fX2 - fY1 + fU - fV; + *(pfOutBLL++) = fW - fX1 - fY2 - fU - fV; + *(pfOutFLL++) = fW + fX1 + fY2 - fU + fV; + } + +} + +/*****************************************************************************/ + +void +runBFormatRotation(LADSPA_Handle Instance, + unsigned long SampleCount) { + + BFormatRotation * poProcessor = (BFormatRotation *)Instance; + + /* Work in radians. */ + LADSPA_Data fAngle + = LADSPA_Data(M_PI / 180.0) * *(poProcessor->m_ppfPorts[FMHROT_ANGLE]); + LADSPA_Data fSin = sin(fAngle); + LADSPA_Data fCos = cos(fAngle); + + LADSPA_Data * pfInW = poProcessor->m_ppfPorts[BFROT_IN_W]; + LADSPA_Data * pfInX = poProcessor->m_ppfPorts[BFROT_IN_X]; + LADSPA_Data * pfInY = poProcessor->m_ppfPorts[BFROT_IN_Y]; + LADSPA_Data * pfInZ = poProcessor->m_ppfPorts[BFROT_IN_Z]; + + LADSPA_Data * pfOutW = poProcessor->m_ppfPorts[BFROT_OUT_W]; + LADSPA_Data * pfOutX = poProcessor->m_ppfPorts[BFROT_OUT_X]; + LADSPA_Data * pfOutY = poProcessor->m_ppfPorts[BFROT_OUT_Y]; + LADSPA_Data * pfOutZ = poProcessor->m_ppfPorts[BFROT_OUT_Z]; + + int iSize = sizeof(LADSPA_Data) * SampleCount; + memcpy(pfOutW, pfInW, iSize); + memcpy(pfOutZ, pfInZ, iSize); + + for (unsigned long lSampleIndex = 0; + lSampleIndex < SampleCount; + lSampleIndex++) { + float fInX = *(pfInX++); + float fInY = *(pfInY++); + *(pfOutX++) = fCos * fInX - fSin * fInY; + *(pfOutY++) = fSin * fInX + fCos * fInY; + } +} + +/*****************************************************************************/ + +void +runFMHFormatRotation(LADSPA_Handle Instance, + unsigned long SampleCount) { + + FMHFormatRotation * poProcessor = (FMHFormatRotation *)Instance; + + /* Work in radians. */ + LADSPA_Data fAngle + = LADSPA_Data(M_PI / 180.0) * *(poProcessor->m_ppfPorts[FMHROT_ANGLE]); + LADSPA_Data fSin = sin(fAngle); + LADSPA_Data fCos = cos(fAngle); + LADSPA_Data fSin2 = sin(fAngle * 2); + LADSPA_Data fCos2 = cos(fAngle * 2); + + LADSPA_Data * pfInW = poProcessor->m_ppfPorts[FMHROT_IN_W]; + LADSPA_Data * pfInX = poProcessor->m_ppfPorts[FMHROT_IN_X]; + LADSPA_Data * pfInY = poProcessor->m_ppfPorts[FMHROT_IN_Y]; + LADSPA_Data * pfInZ = poProcessor->m_ppfPorts[FMHROT_IN_Z]; + LADSPA_Data * pfInR = poProcessor->m_ppfPorts[FMHROT_IN_R]; + LADSPA_Data * pfInS = poProcessor->m_ppfPorts[FMHROT_IN_S]; + LADSPA_Data * pfInT = poProcessor->m_ppfPorts[FMHROT_IN_T]; + LADSPA_Data * pfInU = poProcessor->m_ppfPorts[FMHROT_IN_U]; + LADSPA_Data * pfInV = poProcessor->m_ppfPorts[FMHROT_IN_V]; + + LADSPA_Data * pfOutW = poProcessor->m_ppfPorts[FMHROT_OUT_W]; + LADSPA_Data * pfOutX = poProcessor->m_ppfPorts[FMHROT_OUT_X]; + LADSPA_Data * pfOutY = poProcessor->m_ppfPorts[FMHROT_OUT_Y]; + LADSPA_Data * pfOutZ = poProcessor->m_ppfPorts[FMHROT_OUT_Z]; + LADSPA_Data * pfOutR = poProcessor->m_ppfPorts[FMHROT_OUT_R]; + LADSPA_Data * pfOutS = poProcessor->m_ppfPorts[FMHROT_OUT_S]; + LADSPA_Data * pfOutT = poProcessor->m_ppfPorts[FMHROT_OUT_T]; + LADSPA_Data * pfOutU = poProcessor->m_ppfPorts[FMHROT_OUT_U]; + LADSPA_Data * pfOutV = poProcessor->m_ppfPorts[FMHROT_OUT_V]; + + int iSize = sizeof(LADSPA_Data) * SampleCount; + memcpy(pfOutW, pfInW, iSize); + memcpy(pfOutZ, pfInZ, iSize); + memcpy(pfOutR, pfInR, iSize); + + for (unsigned long lSampleIndex = 0; + lSampleIndex < SampleCount; + lSampleIndex++) { + + float fInX = *(pfInX++); + float fInY = *(pfInY++); + float fInS = *(pfInS++); + float fInT = *(pfInT++); + float fInU = *(pfInU++); + float fInV = *(pfInV++); + + *(pfOutX++) = fCos * fInX - fSin * fInY; + *(pfOutY++) = fSin * fInX + fCos * fInY; + *(pfOutS++) = fCos * fInS - fSin * fInT; + *(pfOutT++) = fSin * fInS + fCos * fInT; + *(pfOutU++) = fCos2 * fInU - fSin2 * fInV; + *(pfOutV++) = fSin2 * fInU + fCos2 * fInV; + } +} + +/*****************************************************************************/ + +void +initialise_ambisonic() { + + CMT_Descriptor * psDescriptor; + + psDescriptor = new CMT_Descriptor + (1087, + "encode_bformat", + LADSPA_PROPERTY_HARD_RT_CAPABLE, + "Ambisonic Encoder (B-Format)", + CMT_MAKER("Richard W.E. Furse"), + CMT_COPYRIGHT("2000-2002", "Richard W.E. Furse"), + NULL, + CMT_Instantiate, + NULL, + runBFormatEncoder, + NULL, + NULL, + NULL); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + "Input"); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + "Sound Source X Coordinate", + LADSPA_HINT_DEFAULT_1); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + "Sound Source Y Coordinate", + LADSPA_HINT_DEFAULT_0); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + "Sound Source Z Coordinate", + LADSPA_HINT_DEFAULT_0); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output (W)"); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output (X)"); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output (Y)"); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output (Z)"); + registerNewPluginDescriptor(psDescriptor); + + psDescriptor = new CMT_Descriptor + (1088, + "encode_fmh", + LADSPA_PROPERTY_HARD_RT_CAPABLE, + "Ambisonic Encoder (FMH-Format)", + CMT_MAKER("Richard W.E. Furse"), + CMT_COPYRIGHT("2000-2002", "Richard W.E. Furse"), + NULL, + CMT_Instantiate, + NULL, + runFMHFormatEncoder, + NULL, + NULL, + NULL); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + "Input"); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + "Sound Source X Coordinate", + LADSPA_HINT_DEFAULT_1); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + "Sound Source Y Coordinate", + LADSPA_HINT_DEFAULT_0); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + "Sound Source Z Coordinate", + LADSPA_HINT_DEFAULT_0); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output (W)"); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output (X)"); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output (Y)"); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output (Z)"); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output (R)"); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output (S)"); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output (T)"); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output (U)"); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output (V)"); + registerNewPluginDescriptor(psDescriptor); + + psDescriptor = new CMT_Descriptor + (1089, + "fmh2bf", + LADSPA_PROPERTY_HARD_RT_CAPABLE, + "FMH-Format to B-Format (Discards RSTUV Channels)", + CMT_MAKER("Richard W.E. Furse"), + CMT_COPYRIGHT("2000", "Richard W.E. Furse"), + NULL, + CMT_Instantiate, + NULL, + runFMHToB, + NULL, + NULL, + NULL); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + "Input (W)"); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + "Input (X)"); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + "Input (Y)"); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + "Input (Z)"); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + "Input (R)"); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + "Input (S)"); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + "Input (T)"); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + "Input (U)"); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + "Input (V)"); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output (W)"); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output (X)"); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output (Y)"); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output (Z)"); + registerNewPluginDescriptor(psDescriptor); + + psDescriptor = new CMT_Descriptor + (1090, + "bf2stereo", + LADSPA_PROPERTY_HARD_RT_CAPABLE, + "Ambisonic Decoder (B-Format to Stereo)", + CMT_MAKER("Richard W.E. Furse"), + CMT_COPYRIGHT("2000", "Richard W.E. Furse"), + NULL, + CMT_Instantiate, + NULL, + runBFormatToStereo, + NULL, + NULL, + NULL); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + "Input (W)"); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + "Input (X)"); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + "Input (Y)"); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + "Input (Z)"); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output (Left)"); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output (Right)"); + registerNewPluginDescriptor(psDescriptor); + + psDescriptor = new CMT_Descriptor + (1091, + "bf2quad", + LADSPA_PROPERTY_HARD_RT_CAPABLE, + "Ambisonic Decoder (B-Format to Quad)", + CMT_MAKER("Richard W.E. Furse"), + CMT_COPYRIGHT("2000", "Richard W.E. Furse"), + NULL, + CMT_Instantiate, + NULL, + runBFormatToQuad, + NULL, + NULL, + NULL); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + "Input (W)"); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + "Input (X)"); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + "Input (Y)"); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + "Input (Z)"); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output (Front Left)"); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output (Front Right)"); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output (Back Left)"); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output (Back Right)"); + registerNewPluginDescriptor(psDescriptor); + + psDescriptor = new CMT_Descriptor + (1092, + "bf2cube", + LADSPA_PROPERTY_HARD_RT_CAPABLE, + "Ambisonic Decoder (B-Format to Cube)", + CMT_MAKER("Richard W.E. Furse"), + CMT_COPYRIGHT("2000", "Richard W.E. Furse"), + NULL, + CMT_Instantiate, + NULL, + runBFormatToCube, + NULL, + NULL, + NULL); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + "Input (W)"); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + "Input (X)"); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + "Input (Y)"); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + "Input (Z)"); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output (Base Front Left)"); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output (Base Front Right)"); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output (Base Back Left)"); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output (Base Back Right)"); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output (Top Front Left)"); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output (Top Front Right)"); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output (Top Back Left)"); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output (Top Back Right)"); + registerNewPluginDescriptor(psDescriptor); + + psDescriptor = new CMT_Descriptor + (1093, + "fmh2oct", + LADSPA_PROPERTY_HARD_RT_CAPABLE, + "Ambisonic Decoder (FMH-Format to Octagon)", + CMT_MAKER("Richard W.E. Furse"), + CMT_COPYRIGHT("2000", "Richard W.E. Furse"), + NULL, + CMT_Instantiate, + NULL, + runFMHFormatToOct, + NULL, + NULL, + NULL); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + "Input (W)"); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + "Input (X)"); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + "Input (Y)"); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + "Input (Z)"); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + "Input (R)"); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + "Input (S)"); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + "Input (T)"); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + "Input (U)"); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + "Input (V)"); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output (Front Front Left)"); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output (Front Front Right)"); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output (Front Right Right)"); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output (Back Right Right)"); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output (Back Back Right)"); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output (Back Back Left)"); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output (Back Left Left)"); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output (Front Left Left)"); + registerNewPluginDescriptor(psDescriptor); + + psDescriptor = new CMT_Descriptor + (1094, + "bf_rotate_z", + LADSPA_PROPERTY_HARD_RT_CAPABLE, + "Ambisonic Rotation (B-Format, Horizontal)", + CMT_MAKER("Richard W.E. Furse"), + CMT_COPYRIGHT("2000-2002", "Richard W.E. Furse"), + NULL, + CMT_Instantiate, + NULL, + runBFormatRotation, + NULL, + NULL, + NULL); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + "Angle of Rotation (Degrees Anticlockwise)", + (LADSPA_HINT_BOUNDED_BELOW + | LADSPA_HINT_BOUNDED_ABOVE + | LADSPA_HINT_DEFAULT_HIGH), + -180, + 180); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + "Input (W)"); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + "Input (X)"); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + "Input (Y)"); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + "Input (Z)"); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output (W)"); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output (X)"); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output (Y)"); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output (Z)"); + registerNewPluginDescriptor(psDescriptor); + + psDescriptor = new CMT_Descriptor + (1095, + "fmh_rotate_z", + LADSPA_PROPERTY_HARD_RT_CAPABLE, + "Ambisonic Rotation (FMH-Format, Horizontal)", + CMT_MAKER("Richard W.E. Furse"), + CMT_COPYRIGHT("2000-2002", "Richard W.E. Furse"), + NULL, + CMT_Instantiate, + NULL, + runFMHFormatRotation, + NULL, + NULL, + NULL); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + "Angle of Rotation (Degrees Anticlockwise)", + (LADSPA_HINT_BOUNDED_BELOW + | LADSPA_HINT_BOUNDED_ABOVE + | LADSPA_HINT_DEFAULT_HIGH), + -180, + 180); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + "Input (W)"); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + "Input (X)"); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + "Input (Y)"); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + "Input (Z)"); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + "Input (R)"); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + "Input (S)"); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + "Input (T)"); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + "Input (U)"); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + "Input (V)"); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output (W)"); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output (X)"); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output (Y)"); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output (Z)"); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output (R)"); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output (S)"); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output (T)"); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output (U)"); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output (V)"); + registerNewPluginDescriptor(psDescriptor); + +} + +/*****************************************************************************/ + +/* EOF */ diff --git a/plugins/LadspaEffect/cmt/src/amp.cpp b/plugins/LadspaEffect/cmt/src/amp.cpp new file mode 100644 index 000000000..1d806f1b8 --- /dev/null +++ b/plugins/LadspaEffect/cmt/src/amp.cpp @@ -0,0 +1,186 @@ +/* amp.cpp + + Computer Music Toolkit - a library of LADSPA plugins. Copyright (C) + 2000-2002 Richard W.E. Furse. The author may be contacted at + richard@muse.demon.co.uk. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public Licence as + published by the Free Software Foundation; either version 2 of the + Licence, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307, USA. */ + +/*****************************************************************************/ + +#include + +/*****************************************************************************/ + +#include "cmt.h" + +/*****************************************************************************/ + +#define AMP_CONTROL 0 +#define AMP_INPUT1 1 +#define AMP_OUTPUT1 2 + +/** This plugin applies a gain to a mono signal. */ +class MonoAmplifier : public CMT_PluginInstance { +public: + + MonoAmplifier(const LADSPA_Descriptor *, + unsigned long) + : CMT_PluginInstance(3) { + } + + friend void runMonoAmplifier(LADSPA_Handle Instance, + unsigned long SampleCount); + +}; + +/*****************************************************************************/ + +/* Ports as above, plus... */ +#define AMP_INPUT2 3 +#define AMP_OUTPUT2 4 + +/** This plugin applies a gain to a stereo signal. */ +class StereoAmplifier : public CMT_PluginInstance { +public: + + StereoAmplifier(const LADSPA_Descriptor *, + unsigned long) + : CMT_PluginInstance(5) { + } + + friend void runStereoAmplifier(LADSPA_Handle Instance, + unsigned long SampleCount); +}; + +/*****************************************************************************/ + +void +runMonoAmplifier(LADSPA_Handle Instance, + unsigned long SampleCount) { + + MonoAmplifier * poAmplifier = (MonoAmplifier *)Instance; + + LADSPA_Data * pfInput = poAmplifier->m_ppfPorts[AMP_INPUT1]; + LADSPA_Data * pfOutput = poAmplifier->m_ppfPorts[AMP_OUTPUT1]; + LADSPA_Data fGain = *(poAmplifier->m_ppfPorts[AMP_CONTROL]); + + for (unsigned long lSampleIndex = 0; + lSampleIndex < SampleCount; + lSampleIndex++) + *(pfOutput++) = *(pfInput++) * fGain; +} + +/*****************************************************************************/ + +void +runStereoAmplifier(LADSPA_Handle Instance, + unsigned long SampleCount) { + + unsigned long lSampleIndex; + + StereoAmplifier * poAmplifier = (StereoAmplifier *)Instance; + + LADSPA_Data fGain = *(poAmplifier->m_ppfPorts[AMP_CONTROL]); + + LADSPA_Data * pfInput = poAmplifier->m_ppfPorts[AMP_INPUT1]; + LADSPA_Data * pfOutput = poAmplifier->m_ppfPorts[AMP_OUTPUT1]; + for (lSampleIndex = 0; lSampleIndex < SampleCount; lSampleIndex++) + *(pfOutput++) = *(pfInput++) * fGain; + + pfInput = poAmplifier->m_ppfPorts[AMP_INPUT2]; + pfOutput = poAmplifier->m_ppfPorts[AMP_OUTPUT2]; + for (lSampleIndex = 0; lSampleIndex < SampleCount; lSampleIndex++) + *(pfOutput++) = *(pfInput++) * fGain; +} + +/*****************************************************************************/ + +void +initialise_amp() { + + CMT_Descriptor * psDescriptor; + + psDescriptor = new CMT_Descriptor + (1067, + "amp_mono", + LADSPA_PROPERTY_HARD_RT_CAPABLE, + "Amplifier (Mono)", + CMT_MAKER("Richard W.E. Furse"), + CMT_COPYRIGHT("2000-2002", "Richard W.E. Furse"), + NULL, + CMT_Instantiate, + NULL, + runMonoAmplifier, + NULL, + NULL, + NULL); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + "Gain", + (LADSPA_HINT_BOUNDED_BELOW + | LADSPA_HINT_LOGARITHMIC + | LADSPA_HINT_DEFAULT_1), + 0, + 0); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + "Input"); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output"); + registerNewPluginDescriptor(psDescriptor); + + psDescriptor = new CMT_Descriptor + (1068, + "amp_stereo", + LADSPA_PROPERTY_HARD_RT_CAPABLE, + "Amplifier (Stereo)", + CMT_MAKER("Richard W.E. Furse"), + CMT_COPYRIGHT("2000-2002", "Richard W.E. Furse"), + NULL, + CMT_Instantiate, + NULL, + runStereoAmplifier, + NULL, + NULL, + NULL); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + "Gain", + (LADSPA_HINT_BOUNDED_BELOW + | LADSPA_HINT_LOGARITHMIC + | LADSPA_HINT_DEFAULT_1), + 0, + 0); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + "Input (Left)"); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output (Left)"); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + "Input (Right)"); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output (Right)"); + registerNewPluginDescriptor(psDescriptor); +} + +/*****************************************************************************/ + +/* EOF */ diff --git a/plugins/LadspaEffect/cmt/src/analogue.cpp b/plugins/LadspaEffect/cmt/src/analogue.cpp new file mode 100644 index 000000000..5a8dc265c --- /dev/null +++ b/plugins/LadspaEffect/cmt/src/analogue.cpp @@ -0,0 +1,504 @@ +/* analogue.cpp + + Analogue Voice - Analog synthesizer voice + Copyright (c) 2000 David A. Bartold + + Computer Music Toolkit - a library of LADSPA plugins. Copyright (C) + 2000 Richard W.E. Furse. The author may be contacted at + richard@muse.demon.co.uk. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public Licence as + published by the Free Software Foundation; either version 2 of the + Licence, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307, USA. */ + +/*****************************************************************************/ + +#include +#include +#include "cmt.h" + +#define PORT_OUT 0 +#define PORT_GATE 1 +#define PORT_VELOCITY 2 +#define PORT_FREQ 3 +#define PORT_DCO1_OCTAVE 4 +#define PORT_DCO1_WAVEFORM 5 +#define PORT_DCO1_FM 6 +#define PORT_DCO1_PWM 7 +#define PORT_DCO1_ATTACK 8 +#define PORT_DCO1_DECAY 9 +#define PORT_DCO1_SUSTAIN 10 +#define PORT_DCO1_RELEASE 11 +#define PORT_DCO2_OCTAVE 12 +#define PORT_DCO2_WAVEFORM 13 +#define PORT_DCO2_FM 14 +#define PORT_DCO2_PWM 15 +#define PORT_DCO2_ATTACK 16 +#define PORT_DCO2_DECAY 17 +#define PORT_DCO2_SUSTAIN 18 +#define PORT_DCO2_RELEASE 19 +#define PORT_LFO_FREQ 20 +#define PORT_LFO_FADEIN 21 +#define PORT_FILT_ENV_MOD 22 +#define PORT_FILT_LFO_MOD 23 +#define PORT_FILT_RES 24 +#define PORT_FILT_ATTACK 25 +#define PORT_FILT_DECAY 26 +#define PORT_FILT_SUSTAIN 27 +#define PORT_FILT_RELEASE 28 + +#define NUM_PORTS 29 + +#ifndef PI +#define PI 3.14159265358979F +#endif + +typedef struct Envelope +{ + int envelope_decay; + LADSPA_Data envelope; + + Envelope () : envelope_decay (0), envelope (0.0) {} +} Envelope; + +class Analogue : public CMT_PluginInstance +{ + LADSPA_Data sample_rate; + + int trigger; + Envelope dco1_env; + Envelope dco2_env; + Envelope filt_env; + LADSPA_Data d1; + LADSPA_Data d2; + + LADSPA_Data dco1_accum; + LADSPA_Data dco2_accum; + LADSPA_Data lfo_accum; + + LADSPA_Data lfo_vol; + +public: + Analogue(const LADSPA_Descriptor * Descriptor, + unsigned long SampleRate) + : CMT_PluginInstance(NUM_PORTS), + sample_rate (SampleRate), + trigger (0), + d1 (0.0), d2 (0.0), + dco1_accum (0.0), dco2_accum (0.0), lfo_accum (0.0) { + } + + ~Analogue () { + } + + /* Third-order approximation of a sine wave. */ + static inline LADSPA_Data + fast_sin(LADSPA_Data x) { + if (x > PI) + x = (x < PI * 1.5F) ? (PI - x) : (x - 2.0F * PI); + else if (x > PI * 0.5F) + x = PI - x; + + return x * (1.05F - x * x * 0.175F); + } + + static inline LADSPA_Data + tri(LADSPA_Data x) { + if (x > 0.75F) + x = x - 1.0F; + else if (x > 0.25F) + x = 0.5F - x; + + return x * 4.0F; + } + + static inline LADSPA_Data + envelope(Envelope *env, + int gate, + LADSPA_Data attack, + LADSPA_Data decay, + LADSPA_Data sustain, + LADSPA_Data release) + { + if (gate) + if (env->envelope_decay == 0) + { + env->envelope += (1.0F - env->envelope) * attack; + if (env->envelope >= 0.95F) + env->envelope_decay = 1; + } + else + env->envelope += (sustain - env->envelope) * decay; + else + env->envelope += -env->envelope * release; + + return env->envelope; + } + + static void + activate(LADSPA_Handle Instance) { + Analogue *analogue = (Analogue*) Instance; + + analogue->trigger = 0; + analogue->dco1_env.envelope_decay = 0; + analogue->dco1_env.envelope = 0.0; + analogue->dco2_env.envelope_decay = 0; + analogue->dco2_env.envelope = 0.0; + analogue->filt_env.envelope_decay = 0; + analogue->filt_env.envelope = 0.0; + analogue->d1 = 0.0F; + analogue->d2 = 0.0F; + + analogue->dco1_accum = 0.0F; + analogue->dco2_accum = 0.0F; + analogue->lfo_accum = 0.0F; + analogue->lfo_vol = 0.0F; + } + + static inline LADSPA_Data + osc(int waveform, + LADSPA_Data inc, + LADSPA_Data width, + LADSPA_Data *accum) { + *accum += inc; + while (*accum >= 1.0F) + *accum -= 1.0F; + + /* 0 = Sine wave */ + if (waveform == 0) + if (*accum < width) + return fast_sin (*accum / width * PI); + else + return fast_sin (PI + (*accum - width) / (1.0F - width) * PI); + + /* 1 = Triangle wave */ + else if (waveform == 1) + if (*accum < width) + return tri (*accum / width * 0.5); + else + return tri (0.5 + (*accum - width) * 0.5 / (1.0F - width)); + + /* 2 = Square wave */ + else if (waveform == 2) + return (*accum > width) ? 1.0F : -1.0F; + + /* 3 = Sawtooth wave */ + else if (waveform == 3) + if (*accum < width) + return *accum / width * 2.0F - 1.0F; + else + return (*accum - width) / (1.0F - width) * 2.0F - 1.0F; + + /* 4 = Fullwave Rectified Sine wave */ + else if (waveform == 4) + if (*accum < width) + return fast_sin (*accum / width * PI); + else + return fast_sin ((*accum - width) / (1.0F - width) * PI); + + /* 5 = Static */ + else + return (rand () & 1) ? -1.0F : 1.0F; + } + + static LADSPA_Data + inc(LADSPA_Data oct, + LADSPA_Data freq, + LADSPA_Data sample_rate) { + return pow (2.0, oct) * freq / sample_rate; + } + + static void + calc_a_b_c(Analogue *analogue, + LADSPA_Data freq, + LADSPA_Data *a, + LADSPA_Data *b, + LADSPA_Data *c) { + LADSPA_Data top_freq, k, res; + + top_freq = freq; + top_freq *= PI / analogue->sample_rate; + res = exp (-1.20 + 3.455 * *analogue->m_ppfPorts[PORT_FILT_RES]); + + k = exp (-top_freq / res); + + *a = 2.0 * cos (2.0 * top_freq) * k; + *b = -k * k; + *c = (1.0 - *a - *b) * 0.2; + } + + static inline LADSPA_Data + multiplier(Analogue *analogue, + LADSPA_Data value) { + return 1.0 - pow (0.05, 1.0 / (analogue->sample_rate * value)); + } + + static void + run(LADSPA_Handle Instance, + unsigned long SampleCount) { + Analogue *analogue = (Analogue*) Instance; + unsigned long i; + int waveform1, waveform2; + int gate; + LADSPA_Data lfo_inc, inc1, inc2; + LADSPA_Data attack1, decay1, release1; + LADSPA_Data attack2, decay2, release2; + LADSPA_Data filt_attack, filt_decay, filt_release; + LADSPA_Data lfo_fadein, a = 0, b = 0, c = 0; + LADSPA_Data dco1_pwm, dco2_pwm; + LADSPA_Data dco1_fm, dco2_fm; + LADSPA_Data filt_lfo_mod; + LADSPA_Data **ports; + + ports = analogue->m_ppfPorts; + gate = (*ports[PORT_GATE] > 0.0); + if (gate == 1 && analogue->trigger == 0) + { + analogue->lfo_vol = 0.0F; + analogue->dco1_env.envelope_decay = 0; + analogue->dco1_env.envelope = 0.0; + analogue->dco2_env.envelope_decay = 0; + analogue->dco2_env.envelope = 0.0; + analogue->filt_env.envelope_decay = 0; + analogue->filt_env.envelope = 0.0; + } + + analogue->trigger = gate; + + waveform1 = (int) *ports[PORT_DCO1_WAVEFORM]; + waveform2 = (int) *ports[PORT_DCO2_WAVEFORM]; + + inc1 = inc (*ports[PORT_DCO1_OCTAVE], + *ports[PORT_FREQ], + analogue->sample_rate); + inc2 = inc (*ports[PORT_DCO2_OCTAVE], + *ports[PORT_FREQ], + analogue->sample_rate); + lfo_inc = 2.0F * PI * *ports[PORT_LFO_FREQ] / analogue->sample_rate; + + attack1 = multiplier (analogue, *ports[PORT_DCO1_ATTACK]); + decay1 = multiplier (analogue, *ports[PORT_DCO1_DECAY]); + release1 = multiplier (analogue, *ports[PORT_DCO1_RELEASE]); + + attack2 = multiplier (analogue, *ports[PORT_DCO2_ATTACK]); + decay2 = multiplier (analogue, *ports[PORT_DCO2_DECAY]); + release2 = multiplier (analogue, *ports[PORT_DCO2_RELEASE]); + + filt_attack = multiplier (analogue, *ports[PORT_FILT_ATTACK]); + filt_decay = multiplier (analogue, *ports[PORT_FILT_DECAY]); + filt_release = multiplier (analogue, *ports[PORT_FILT_RELEASE]); + + lfo_fadein = 1.0 / (*ports[PORT_LFO_FADEIN] * analogue->sample_rate); + + dco1_pwm = *analogue->m_ppfPorts[PORT_DCO1_PWM] * 0.225F; + dco2_pwm = *analogue->m_ppfPorts[PORT_DCO2_PWM] * 0.225F; + dco1_fm = *analogue->m_ppfPorts[PORT_DCO1_FM] * inc1 * 0.45F; + dco2_fm = *analogue->m_ppfPorts[PORT_DCO2_FM] * inc2 * 0.45F; + filt_lfo_mod = *analogue->m_ppfPorts[PORT_FILT_LFO_MOD] * 0.45F; + + for (i = 0; i < SampleCount; i++) + { + LADSPA_Data lfo, sample; + + analogue->lfo_accum += lfo_inc; + while (analogue->lfo_accum >= 2.0F * PI) + analogue->lfo_accum -= 2.0F * PI; + + lfo = fast_sin (analogue->lfo_accum) * analogue->lfo_vol; + + analogue->lfo_vol += lfo_fadein; + if (analogue->lfo_vol >= 1.0F) + analogue->lfo_vol = 1.0F; + + envelope (&analogue->filt_env, + gate, filt_attack, filt_decay, + *ports[PORT_FILT_SUSTAIN], filt_release); + + if ((i & 0x000f) == 0) + calc_a_b_c (analogue, + *ports[PORT_FREQ] * 0.25F + (analogue->filt_env.envelope * + *ports[PORT_FILT_ENV_MOD] * *ports[PORT_VELOCITY] * + (1.5 + filt_lfo_mod * lfo)) * *ports[PORT_FREQ] * 10.0F, &a, &b, &c); + + sample = osc (waveform1, inc1 * (1.0 + lfo * dco1_fm), + 0.5F + lfo * dco1_pwm, + &analogue->dco1_accum) + * envelope (&analogue->dco1_env, + gate, attack1, decay1, + *ports[PORT_DCO1_SUSTAIN], release1) + + osc (waveform2, inc2 * (1.0 + lfo * dco2_fm), + 0.5F + lfo * dco2_pwm, + &analogue->dco2_accum) + * envelope (&analogue->dco2_env, + gate, attack2, decay2, + *ports[PORT_DCO2_SUSTAIN], release2); + + sample = a * analogue->d1 + + b * analogue->d2 + + c * *ports[PORT_VELOCITY] * sample; + + analogue->d2 = analogue->d1; + analogue->d1 = sample; + ports[PORT_OUT][i] = sample; + } + } +}; + +static LADSPA_PortDescriptor g_psPortDescriptors[] = +{ + LADSPA_PORT_AUDIO | LADSPA_PORT_OUTPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT +}; + +static const char * const g_psPortNames[] = +{ + "Out", + "Gate", + "Velocity", + "Frequency (Hz)", + + "DCO1 Octave", + "DCO1 Waveform", + "DCO1 LFO Frequency Modulation", + "DCO1 LFO Pulse Width Modulation", + + "DCO1 Attack", + "DCO1 Decay", + "DCO1 Sustain", + "DCO1 Release", + + "DCO2 Octave", + "DCO2 Waveform", + "DCO2 LFO Frequency Modulation", + "DCO2 LFO Pulse Width Modulation", + + "DCO2 Attack", + "DCO2 Decay", + "DCO2 Sustain", + "DCO2 Release", + + "LFO Frequency (Hz)", + "LFO Fadein", + + "Filter Envelope Modulation", + "Filter LFO Modulation", + "Filter Resonance", + + "Filter Attack", + "Filter Decay", + "Filter Sustain", + "Filter Release" +}; + +static LADSPA_PortRangeHint g_psPortRangeHints[] = +{ + /* Hints, Lower bound, Upper bound */ + { 0, 0.0, 0.0 }, + { LADSPA_HINT_TOGGLED, 0.0, 0.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 1.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 20000.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.001, 1.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 10.0 }, + + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, -2.0, 2.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_INTEGER, -0.1, 5.1 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 1.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 1.0 }, + + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.01, 8.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.01, 8.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.00, 1.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.01, 8.0 }, + + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, -2.0, 2.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_INTEGER, -0.1, 5.1 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 1.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 1.0 }, + + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.01, 8.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.01, 8.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.00, 1.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.01, 8.0 }, + + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 20.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.01, 8.0 }, + + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 1.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 1.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 1.0 }, + + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.01, 8.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.01, 8.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.00, 1.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.01, 8.0 } +}; + +void +initialise_analogue() { + CMT_Descriptor * psDescriptor; + + psDescriptor = new CMT_Descriptor + (1221, + "analogue", + LADSPA_PROPERTY_HARD_RT_CAPABLE, + "Analogue Voice", + CMT_MAKER("David A. Bartold"), + CMT_COPYRIGHT("2000", "David A. Bartold"), + NULL, + CMT_Instantiate, + Analogue::activate, + Analogue::run, + NULL, + NULL, + NULL); + + for (int i = 0; i < NUM_PORTS; i++) + psDescriptor->addPort( + g_psPortDescriptors[i], + g_psPortNames[i], + g_psPortRangeHints[i].HintDescriptor, + g_psPortRangeHints[i].LowerBound, + g_psPortRangeHints[i].UpperBound); + + registerNewPluginDescriptor(psDescriptor); +} diff --git a/plugins/LadspaEffect/cmt/src/canyondelay.cpp b/plugins/LadspaEffect/cmt/src/canyondelay.cpp new file mode 100644 index 000000000..23651bd50 --- /dev/null +++ b/plugins/LadspaEffect/cmt/src/canyondelay.cpp @@ -0,0 +1,223 @@ +/* canyondelay.cpp + + Canyon Delay - Deep Stereo Cross Delay + Copyright (c) 1999, 2000 David A. Bartold + + Computer Music Toolkit - a library of LADSPA plugins. Copyright (C) + 2000 Richard W.E. Furse. The author may be contacted at + richard@muse.demon.co.uk. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public Licence as + published by the Free Software Foundation; either version 2 of the + Licence, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307, USA. */ + +/*****************************************************************************/ + + +#include +#include +#include "cmt.h" + +#define PORT_IN_LEFT 0 +#define PORT_IN_RIGHT 1 +#define PORT_OUT_LEFT 2 +#define PORT_OUT_RIGHT 3 +#define PORT_LTR_TIME 4 +#define PORT_LTR_FEEDBACK 5 +#define PORT_RTL_TIME 6 +#define PORT_RTL_FEEDBACK 7 +#define PORT_CUTOFF 8 + +#define NUM_PORTS 9 + +#ifndef PI +#define PI 3.14159265358979 +#endif + +class CanyonDelay : public CMT_PluginInstance { + LADSPA_Data sample_rate; + + long datasize; + LADSPA_Data *data_l; + LADSPA_Data *data_r; + LADSPA_Data accum_l; + LADSPA_Data accum_r; + + int pos; + +public: + CanyonDelay(const LADSPA_Descriptor *, + unsigned long s_rate) + : CMT_PluginInstance(NUM_PORTS), + sample_rate(s_rate), + datasize(s_rate), + data_l(new LADSPA_Data[datasize]), + data_r(new LADSPA_Data[datasize]), + accum_l(0.0), + accum_r(0.0), + pos(0) { + for (long i = 0; i < datasize; i++) + data_l[i] = data_r[i] = 0.0; + } + + ~CanyonDelay() { + delete[] data_l; + delete[] data_r; + } + + static void + activate(LADSPA_Handle Instance) { + CanyonDelay *delay = (CanyonDelay*) Instance; + + for (long i = 0; i < delay->datasize; i++) + delay->data_l[i] = delay->data_r[i] = 0.0; + + delay->accum_l = 0.0; + delay->accum_r = 0.0; + delay->pos = 0; + } + + static void + run(LADSPA_Handle Instance, + unsigned long SampleCount) { + CanyonDelay *delay = (CanyonDelay*) Instance; + LADSPA_Data **ports; + unsigned long i; + int l_to_r_offset, r_to_l_offset; + LADSPA_Data ltr_invmag, rtl_invmag; + LADSPA_Data filter_mag, filter_invmag; + + ports = delay->m_ppfPorts; + + l_to_r_offset = (int) (*ports[PORT_LTR_TIME] * delay->sample_rate); + r_to_l_offset = (int) (*ports[PORT_RTL_TIME] * delay->sample_rate); + + ltr_invmag = 1.0 - fabs (*ports[PORT_LTR_FEEDBACK]); + rtl_invmag = 1.0 - fabs (*ports[PORT_RTL_FEEDBACK]); + + filter_invmag = pow (0.5, (4.0 * PI * *ports[PORT_CUTOFF]) / delay->sample_rate); + filter_mag = 1.0 - filter_invmag; + + for (i = 0; i < SampleCount; i++) + { + LADSPA_Data accum_l, accum_r; + int pos1, pos2; + + accum_l = ports[PORT_IN_LEFT][i]; + accum_r = ports[PORT_IN_RIGHT][i]; + + pos1 = delay->pos - r_to_l_offset + delay->datasize; + while (pos1 >= delay->datasize) + pos1 -= delay->datasize; + + pos2 = delay->pos - l_to_r_offset + delay->datasize; + while (pos2 >= delay->datasize) + pos2 -= delay->datasize; + + /* Mix channels with past samples. */ + accum_l = accum_l * rtl_invmag + delay->data_r[pos1] * *ports[PORT_RTL_FEEDBACK]; + accum_r = accum_r * ltr_invmag + delay->data_l[pos2] * *ports[PORT_LTR_FEEDBACK]; + + /* Low-pass filter output. */ + accum_l = delay->accum_l * filter_invmag + accum_l * filter_mag; + accum_r = delay->accum_r * filter_invmag + accum_r * filter_mag; + + /* Store IIR samples. */ + delay->accum_l = accum_l; + delay->accum_r = accum_r; + + /* Store samples in arrays. */ + delay->data_l[delay->pos] = accum_l; + delay->data_r[delay->pos] = accum_r; + + ports[PORT_OUT_LEFT][i] = accum_l; + ports[PORT_OUT_RIGHT][i] = accum_r; + + delay->pos++; + if (delay->pos >= delay->datasize) + delay->pos -= delay->datasize; + } + } +}; + + +static LADSPA_PortDescriptor g_psPortDescriptors[] = +{ + LADSPA_PORT_AUDIO | LADSPA_PORT_INPUT, + LADSPA_PORT_AUDIO | LADSPA_PORT_INPUT, + LADSPA_PORT_AUDIO | LADSPA_PORT_OUTPUT, + LADSPA_PORT_AUDIO | LADSPA_PORT_OUTPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT +}; + +static const char * const g_psPortNames[] = +{ + "In (Left)", + "In (Right)", + "Out (Left)", + "Out (Right)", + "Left to Right Time (Seconds)", + "Left to Right Feedback (Percent)", + "Right to Left Time (Seconds)", + "Right to Left Feedback (Percent)", + "Low-Pass Cutoff (Hz)" +}; + +static LADSPA_PortRangeHint g_psPortRangeHints[] = +{ + /* Hints, Lower bound, Upper bound */ + { 0, 0.0, 0.0 }, + { 0, 0.0, 0.0 }, + { 0, 0.0, 0.0 }, + { 0, 0.0, 0.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.01, 0.99 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, -1.0, 1.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.01, 0.99 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, -1.0, 1.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 1.0, 5000.0 } +}; + +void +initialise_canyondelay() { + CMT_Descriptor * psDescriptor; + + psDescriptor = new CMT_Descriptor + (1225, + "canyon_delay", + LADSPA_PROPERTY_HARD_RT_CAPABLE, + "Canyon Delay", + CMT_MAKER("David A. Bartold"), + CMT_COPYRIGHT("1999, 2000", "David A. Bartold"), + NULL, + CMT_Instantiate, + CanyonDelay::activate, + CanyonDelay::run, + NULL, + NULL, + NULL); + + for (int i = 0; i < NUM_PORTS; i++) + psDescriptor->addPort( + g_psPortDescriptors[i], + g_psPortNames[i], + g_psPortRangeHints[i].HintDescriptor, + g_psPortRangeHints[i].LowerBound, + g_psPortRangeHints[i].UpperBound); + + registerNewPluginDescriptor(psDescriptor); +} diff --git a/plugins/LadspaEffect/cmt/src/cmt.cpp b/plugins/LadspaEffect/cmt/src/cmt.cpp new file mode 100644 index 000000000..d735c44b9 --- /dev/null +++ b/plugins/LadspaEffect/cmt/src/cmt.cpp @@ -0,0 +1,184 @@ +/* cmt.cpp + + Computer Music Toolkit - a library of LADSPA plugins. Copyright (C) + 2000-2002 Richard W.E. Furse. The author may be contacted at + richard@muse.demon.co.uk. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public Licence as + published by the Free Software Foundation; either version 2 of the + Licence, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307, USA. */ + +/*****************************************************************************/ + +#include + +/*****************************************************************************/ + +#include "cmt.h" + +/*****************************************************************************/ + +inline char * +localStrdup(const char * input) { + char * output = new char[strlen(input) + 1]; + strcpy(output, input); + return output; +} + +/*****************************************************************************/ + +CMT_Descriptor:: +~CMT_Descriptor() { + if (Label) + delete [] Label; + if (Name) + delete [] Name; + if (Maker) + delete [] Maker; + if (Copyright) + delete [] Copyright; + if (ImplementationData) + delete (CMT_ImplementationData *)ImplementationData; + if (PortDescriptors) + delete [] PortDescriptors; + if (PortNames) { + for (unsigned long lIndex = 0; lIndex < PortCount; lIndex++) + if (PortNames[lIndex]) + delete [] PortNames[lIndex]; + delete [] PortNames; + } + if (PortRangeHints) + delete [] PortRangeHints; +} + +/*****************************************************************************/ + +void +CMT_ConnectPort(LADSPA_Handle Instance, + unsigned long Port, + LADSPA_Data * DataLocation) { + CMT_PluginInstance * poInstance = (CMT_PluginInstance *)Instance; + poInstance->m_ppfPorts[Port] = DataLocation; +} + +/*****************************************************************************/ + +void +CMT_Cleanup(LADSPA_Handle Instance) { + CMT_PluginInstance * poInstance = (CMT_PluginInstance *)Instance; + delete poInstance; +} + +/*****************************************************************************/ + +CMT_Descriptor:: +CMT_Descriptor(unsigned long lUniqueID, + const char * pcLabel, + LADSPA_Properties iProperties, + const char * pcName, + const char * pcMaker, + const char * pcCopyright, + CMT_ImplementationData * poImplementationData, + LADSPA_Instantiate_Function fInstantiate, + LADSPA_Activate_Function fActivate, + LADSPA_Run_Function fRun, + LADSPA_Run_Adding_Function fRunAdding, + LADSPA_Set_Run_Adding_Gain_Function fSetRunAddingGain, + LADSPA_Deactivate_Function fDeactivate) { + + UniqueID = lUniqueID; + Label = localStrdup(pcLabel); + Properties = iProperties; + Name = localStrdup(pcName); + Maker = localStrdup(pcMaker); + Copyright = localStrdup(pcCopyright); + PortCount = 0; + ImplementationData = poImplementationData; + + instantiate = fInstantiate; + connect_port = CMT_ConnectPort; + activate = fActivate; + run = fRun; + run_adding = fRunAdding; + set_run_adding_gain = fSetRunAddingGain; + deactivate = fDeactivate; + cleanup = CMT_Cleanup; + +}; + +/*****************************************************************************/ + +typedef char * char_ptr; + +void CMT_Descriptor:: +addPort(LADSPA_PortDescriptor iPortDescriptor, + const char * pcPortName, + LADSPA_PortRangeHintDescriptor iHintDescriptor, + LADSPA_Data fLowerBound, + LADSPA_Data fUpperBound) { + + unsigned long lOldPortCount = PortCount; + unsigned long lNewPortCount = PortCount + 1; + + LADSPA_PortDescriptor * piOldPortDescriptors + = (LADSPA_PortDescriptor *)PortDescriptors; + char ** ppcOldPortNames + = (char **)PortNames; + LADSPA_PortRangeHint * psOldPortRangeHints + = (LADSPA_PortRangeHint *)PortRangeHints; + + LADSPA_PortDescriptor * piNewPortDescriptors + = new LADSPA_PortDescriptor[lNewPortCount]; + char ** ppcNewPortNames + = new char_ptr[lNewPortCount]; + LADSPA_PortRangeHint * psNewPortRangeHints + = new LADSPA_PortRangeHint[lNewPortCount]; + + if (piNewPortDescriptors == NULL + || ppcNewPortNames == NULL + || psNewPortRangeHints == NULL) { + /* Memory allocation failure that we cannot handle. Best option is + probably just to get out while the going is reasonably good. */ + return; + } + + for (unsigned long lPortIndex = 0; + lPortIndex < lOldPortCount; + lPortIndex++) { + piNewPortDescriptors[lPortIndex] = piOldPortDescriptors[lPortIndex]; + ppcNewPortNames[lPortIndex] = ppcOldPortNames[lPortIndex]; + psNewPortRangeHints[lPortIndex] = psOldPortRangeHints[lPortIndex]; + } + if (lOldPortCount > 0) { + delete [] piOldPortDescriptors; + delete [] ppcOldPortNames; + delete [] psOldPortRangeHints; + } + + piNewPortDescriptors[lOldPortCount] = iPortDescriptor; + ppcNewPortNames[lOldPortCount] = localStrdup(pcPortName); + psNewPortRangeHints[lOldPortCount].HintDescriptor = iHintDescriptor; + psNewPortRangeHints[lOldPortCount].LowerBound = fLowerBound; + psNewPortRangeHints[lOldPortCount].UpperBound = fUpperBound; + + PortDescriptors = piNewPortDescriptors; + PortNames = ppcNewPortNames; + PortRangeHints = psNewPortRangeHints; + + PortCount++; +} + +/*****************************************************************************/ + +/* EOF */ diff --git a/plugins/LadspaEffect/cmt/src/cmt.h b/plugins/LadspaEffect/cmt/src/cmt.h new file mode 100644 index 000000000..f151f34df --- /dev/null +++ b/plugins/LadspaEffect/cmt/src/cmt.h @@ -0,0 +1,180 @@ +/* cmt.h + + Computer Music Toolkit - a library of LADSPA plugins. Copyright (C) + 2000-2002 Richard W.E. Furse. The author may be contacted at + richard@muse.demon.co.uk. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public Licence as + published by the Free Software Foundation; either version 2 of the + Licence, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307, USA. */ + +#ifndef CMT_BASE_INCLUDED +#define CMT_BASE_INCLUDED + +/*****************************************************************************/ + +#include "ladspa_types.h" + +/*****************************************************************************/ + +/** This class is the baseclass of all CMT plugin implementation + data. Baseclassed so virtual destructors can be used. */ +class CMT_ImplementationData { +public: + virtual ~CMT_ImplementationData() { + } +}; + +/*****************************************************************************/ + +/** This structure describes a CMT LADSPA Plugin. It is a direct + ancestor of the _LADSPA_Descriptor structure which allows direct + casting. A rich constructor function is provided make it easier to + write LADSPA_Descriptor objects. (Less code is required and the + compiler will tell you when you have missed an entry.) An + addPort() function makes configuration of ports more + straightforward than using the _LADSPA_Descriptor structure + directly. */ + +struct CMT_Descriptor : public _LADSPA_Descriptor { +private: + + CMT_Descriptor &operator=(const CMT_Descriptor &) { + return *this; + } + CMT_Descriptor(const CMT_Descriptor &) { + } + +public: + + ~CMT_Descriptor(); + + /** The basic constructor for a CMT_Descriptor object. If you do not + know what the parameters mean, please see the fields in the + LADSPA_Descriptor structure, described in ladspa.h. Note that + some parameters may be NULL. Note also that a template is + provided to generate instantiate functions automatically (see + CMT_Instantiate<>() below). Implementation data must be NULL if + not allocated. */ + CMT_Descriptor(unsigned long lUniqueID, + const char * pcLabel, + LADSPA_Properties iProperties, + const char * pcName, + const char * pcMaker, + const char * pcCopyright, + CMT_ImplementationData * poImplementationData, + LADSPA_Instantiate_Function fInstantiate, + LADSPA_Activate_Function fActivate, + LADSPA_Run_Function fRun, + LADSPA_Run_Adding_Function fRunAdding, + LADSPA_Set_Run_Adding_Gain_Function fSetRunAddingGain, + LADSPA_Deactivate_Function fDeactivate); + + /** This method adds a new port to the descriptor. If you do not + know what the parameters mean, please see the fields in the + LADSPA_Descriptor structure, described in ladspa.h. */ + void addPort(LADSPA_PortDescriptor iPortDescriptor, + const char * pcPortName, + LADSPA_PortRangeHintDescriptor iHintDescriptor = 0, + LADSPA_Data fLowerBound = 0, + LADSPA_Data fUpperBound = 0); + +}; + +typedef CMT_Descriptor * CMT_Descriptor_ptr; + +/*****************************************************************************/ + +/** Each plugin type must register itself with the descriptor + registry. This is done by calling the following function, passing + a newly allocated structure (that will be cleaned up on library + unload automatically). + + Each module needs to be initialised in order to have a chance to + register new plugins. This can be achieved by modifying the list + of initialiser functions in descriptor.cpp. */ +void registerNewPluginDescriptor(CMT_Descriptor * psDescriptor); + +/*****************************************************************************/ + +/** This class is the baseclass of all CMT plugins. It provides + functionality to handle LADSPA connect_port() and cleanup() + requirements (as long as plugins have correctly written + destructors!) A CMT_Instantiate<>() template is provided also, + which makes LADSPA instantiate() methods easier to write. + + Derived classes access port data through the m_ppfPorts[] + array. This contains one entry for each port, in the order in + which ports were added to the corresponding CMT_Descriptor + object. */ +class CMT_PluginInstance { +private: + + CMT_PluginInstance &operator=(const CMT_PluginInstance &) { + return *this; + } + CMT_PluginInstance(const CMT_PluginInstance &) { + } + +protected: + + LADSPA_Data ** m_ppfPorts; + + CMT_PluginInstance(const unsigned long lPortCount) + : m_ppfPorts(new LADSPA_Data_ptr[lPortCount]) { + } + virtual ~CMT_PluginInstance() { + delete [] m_ppfPorts; + } + + friend void CMT_ConnectPort(LADSPA_Handle Instance, + unsigned long Port, + LADSPA_Data * DataLocation); + friend void CMT_Cleanup(LADSPA_Handle Instance); + +}; + +/*****************************************************************************/ + +/** This template can be used to generate functions to instantiate CMT + plugins. To be used with this function, the plugin must accept two + parameters (a LADSPA_Descriptor pointer and a sample rate). See + the SimpleMixer class and mixer_descriptor() in mixer.cpp for a + simple example of this: the instantiate function for the mixer + class is generated within the mixer_descriptor() function as + "CMT_Instantiate". */ +template LADSPA_Handle +CMT_Instantiate(const LADSPA_Descriptor * Descriptor, + unsigned long SampleRate) { + return new T(Descriptor, SampleRate); +} + +/*****************************************************************************/ + +/** This macro should be used to fill in the `Maker' field in the + CMT_Descriptor. */ +#define CMT_MAKER(AUTHORS) \ + "CMT (http://www.ladspa.org/cmt, plugin by " AUTHORS ")" + +/** This macro should be used to fill in the `Copyright' field in the + CMT_Descriptor. */ +#define CMT_COPYRIGHT(YEARS, AUTHORS) \ + "(C)" YEARS ", " AUTHORS ". " \ + "GNU General Public Licence Version 2 applies." + +/*****************************************************************************/ + +#endif + +/* EOF */ diff --git a/plugins/LadspaEffect/cmt/src/delay.cpp b/plugins/LadspaEffect/cmt/src/delay.cpp new file mode 100644 index 000000000..12f6fedaa --- /dev/null +++ b/plugins/LadspaEffect/cmt/src/delay.cpp @@ -0,0 +1,351 @@ +/* delay.cpp + + Computer Music Toolkit - a library of LADSPA plugins. Copyright (C) + 2000-2002 Richard W.E. Furse. The author may be contacted at + richard@muse.demon.co.uk. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public Licence as + published by the Free Software Foundation; either version 2 of the + Licence, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307, USA. */ + +/*****************************************************************************/ + +/* This module provides delays and delays with feedback. A variety of + maximum delay times are available. (The plugins reserve different + amounts of memory space on this basis.) */ + +/*****************************************************************************/ + +#include +#include +#include + +/*****************************************************************************/ + +#include "cmt.h" + +/*****************************************************************************/ + +#define DELAY_TYPE_COUNT 2 + +#define DELAY_LENGTH_COUNT 5 + +/*****************************************************************************/ + +#define LIMIT_BETWEEN(x, a, b) \ +(((x) < a) ? a : (((x) > b) ? b : (x))) + +/*****************************************************************************/ + +#define DL_DELAY_LENGTH 0 +#define DL_DRY_WET 1 +#define DL_INPUT 2 +#define DL_OUTPUT 3 +/* Present only on feedback delays: */ +#define DL_FEEDBACK 4 + +/** This class is used to implement delay line plugins. Different + maximum delay times are supported as are both echo and feedback + delays. */ +class DelayLine : public CMT_PluginInstance { +private: + + LADSPA_Data m_fSampleRate; + + LADSPA_Data m_fMaximumDelay; + + LADSPA_Data * m_pfBuffer; + + /** Buffer size, a power of two. */ + unsigned long m_lBufferSize; + + /** Write pointer in buffer. */ + unsigned long m_lWritePointer; + + friend void activateDelayLine(LADSPA_Handle Instance); + friend void runSimpleDelayLine(LADSPA_Handle Instance, + unsigned long SampleCount); + friend void runFeedbackDelayLine(LADSPA_Handle Instance, + unsigned long SampleCount); + +public: + + DelayLine(const unsigned long lSampleRate, + const LADSPA_Data fMaximumDelay) + : CMT_PluginInstance(5), + m_fSampleRate(LADSPA_Data(lSampleRate)), + m_fMaximumDelay(fMaximumDelay) { + /* Buffer size is a power of two bigger than max delay time. */ + unsigned long lMinimumBufferSize + = (unsigned long)((LADSPA_Data)lSampleRate * m_fMaximumDelay); + m_lBufferSize = 1; + while (m_lBufferSize < lMinimumBufferSize) + m_lBufferSize <<= 1; + m_pfBuffer = new LADSPA_Data[m_lBufferSize]; + } + + ~DelayLine() { + delete [] m_pfBuffer; + } +}; + +/*****************************************************************************/ + +/* Initialise and activate a plugin instance. */ +void +activateDelayLine(LADSPA_Handle Instance) { + + DelayLine * poDelayLine = (DelayLine *)Instance; + + /* Need to reset the delay history in this function rather than + instantiate() in case deactivate() followed by activate() have + been called to reinitialise a delay line. */ + memset(poDelayLine->m_pfBuffer, + 0, + sizeof(LADSPA_Data) * poDelayLine->m_lBufferSize); + + poDelayLine->m_lWritePointer = 0; +} + +/*****************************************************************************/ + +/* Run a delay line instance for a block of SampleCount samples. */ +void +runSimpleDelayLine(LADSPA_Handle Instance, + unsigned long SampleCount) { + + DelayLine * poDelayLine = (DelayLine *)Instance; + + unsigned long lBufferSizeMinusOne = poDelayLine->m_lBufferSize - 1; + unsigned long lDelay = (unsigned long) + (LIMIT_BETWEEN(*(poDelayLine->m_ppfPorts[DL_DELAY_LENGTH]), + 0, + poDelayLine->m_fMaximumDelay) + * poDelayLine->m_fSampleRate); + + LADSPA_Data * pfInput + = poDelayLine->m_ppfPorts[DL_INPUT]; + LADSPA_Data * pfOutput + = poDelayLine->m_ppfPorts[DL_OUTPUT]; + LADSPA_Data * pfBuffer + = poDelayLine->m_pfBuffer; + + unsigned long lBufferWriteOffset + = poDelayLine->m_lWritePointer; + unsigned long lBufferReadOffset + = lBufferWriteOffset + poDelayLine->m_lBufferSize - lDelay; + LADSPA_Data fWet + = LIMIT_BETWEEN(*(poDelayLine->m_ppfPorts[DL_DRY_WET]), + 0, + 1); + LADSPA_Data fDry + = 1 - fWet; + + for (unsigned long lSampleIndex = 0; + lSampleIndex < SampleCount; + lSampleIndex++) { + LADSPA_Data fInputSample = *(pfInput++); + *(pfOutput++) = (fDry * fInputSample + + fWet * pfBuffer[((lSampleIndex + lBufferReadOffset) + & lBufferSizeMinusOne)]); + pfBuffer[((lSampleIndex + lBufferWriteOffset) + & lBufferSizeMinusOne)] = fInputSample; + } + + poDelayLine->m_lWritePointer + = ((poDelayLine->m_lWritePointer + SampleCount) + & lBufferSizeMinusOne); +} + +/*****************************************************************************/ + +/** Run a feedback delay line instance for a block of SampleCount samples. */ +void +runFeedbackDelayLine(LADSPA_Handle Instance, + unsigned long SampleCount) { + + DelayLine * poDelayLine = (DelayLine *)Instance; + + unsigned long lBufferSizeMinusOne = poDelayLine->m_lBufferSize - 1; + unsigned long lDelay = (unsigned long) + (LIMIT_BETWEEN(*(poDelayLine->m_ppfPorts[DL_DELAY_LENGTH]), + 0, + poDelayLine->m_fMaximumDelay) + * poDelayLine->m_fSampleRate); + + LADSPA_Data * pfInput + = poDelayLine->m_ppfPorts[DL_INPUT]; + LADSPA_Data * pfOutput + = poDelayLine->m_ppfPorts[DL_OUTPUT]; + LADSPA_Data * pfBuffer + = poDelayLine->m_pfBuffer; + + unsigned long lBufferWriteOffset + = poDelayLine->m_lWritePointer; + unsigned long lBufferReadOffset + = lBufferWriteOffset + poDelayLine->m_lBufferSize - lDelay; + LADSPA_Data fWet + = LIMIT_BETWEEN(*(poDelayLine->m_ppfPorts[DL_DRY_WET]), + 0, + 1); + LADSPA_Data fDry + = 1 - fWet; + LADSPA_Data fFeedback + = LIMIT_BETWEEN(*(poDelayLine->m_ppfPorts[DL_FEEDBACK]), + -1, + 1); + + for (unsigned long lSampleIndex = 0; + lSampleIndex < SampleCount; + lSampleIndex++) { + + LADSPA_Data fInputSample = *(pfInput++); + LADSPA_Data &fDelayedSample = pfBuffer[((lSampleIndex + lBufferReadOffset) + & lBufferSizeMinusOne)]; + + *(pfOutput++) = (fDry * fInputSample + fWet * fDelayedSample); + + pfBuffer[((lSampleIndex + lBufferWriteOffset) + & lBufferSizeMinusOne)] + = fInputSample + fDelayedSample * fFeedback; + } + + poDelayLine->m_lWritePointer + = ((poDelayLine->m_lWritePointer + SampleCount) + & lBufferSizeMinusOne); +} + +/*****************************************************************************/ + +template LADSPA_Handle +CMT_Delay_Instantiate(const LADSPA_Descriptor * Descriptor, + unsigned long SampleRate) { + return new DelayLine(SampleRate, + LADSPA_Data(lMaximumDelayMilliseconds + * 0.001)); +} + +/*****************************************************************************/ + +void +initialise_delay() { + + CMT_Descriptor * psDescriptor; + + const char * apcDelayTypeNames[DELAY_TYPE_COUNT] = { + "Echo", + "Feedback" + }; + const char * apcDelayTypeLabels[DELAY_TYPE_COUNT] = { + "delay", + "fbdelay" + }; + LADSPA_Run_Function afRunFunctions[DELAY_TYPE_COUNT] = { + runSimpleDelayLine, + runFeedbackDelayLine + }; + + LADSPA_Data afMaximumDelays[DELAY_LENGTH_COUNT] = { + 0.01, + 0.1, + 1, + 5, + 60 + }; + LADSPA_Instantiate_Function afInstantiateFunctions[DELAY_LENGTH_COUNT] = { + CMT_Delay_Instantiate<10>, + CMT_Delay_Instantiate<100>, + CMT_Delay_Instantiate<1000>, + CMT_Delay_Instantiate<5000>, + CMT_Delay_Instantiate<60000> + }; + + for (long lDelayTypeIndex = 0; + lDelayTypeIndex < DELAY_TYPE_COUNT; + lDelayTypeIndex++) { + + for (long lDelayLengthIndex = 0; + lDelayLengthIndex < DELAY_LENGTH_COUNT; + lDelayLengthIndex++) { + + long lPluginIndex + = lDelayTypeIndex * DELAY_LENGTH_COUNT + lDelayLengthIndex; + + char acLabel[100]; + sprintf(acLabel, + "%s_%gs", + apcDelayTypeLabels[lDelayTypeIndex], + afMaximumDelays[lDelayLengthIndex]); + char acName[100]; + sprintf(acName, + "%s Delay Line (Maximum Delay %gs)", + apcDelayTypeNames[lDelayTypeIndex], + afMaximumDelays[lDelayLengthIndex]); + + psDescriptor = new CMT_Descriptor + (1053 + lPluginIndex, + acLabel, + LADSPA_PROPERTY_HARD_RT_CAPABLE, + acName, + CMT_MAKER("Richard W.E. Furse"), + CMT_COPYRIGHT("2000-2002", "Richard W.E. Furse"), + NULL, + afInstantiateFunctions[lDelayLengthIndex], + activateDelayLine, + afRunFunctions[lDelayTypeIndex], + NULL, + NULL, + NULL); + + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + "Delay (Seconds)", + (LADSPA_HINT_BOUNDED_BELOW + | LADSPA_HINT_BOUNDED_ABOVE + | LADSPA_HINT_DEFAULT_1), + 0, + afMaximumDelays[lDelayLengthIndex]); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + "Dry/Wet Balance", + (LADSPA_HINT_BOUNDED_BELOW + | LADSPA_HINT_BOUNDED_ABOVE + | LADSPA_HINT_DEFAULT_MIDDLE), + 0, + 1); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + "Input"); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output"); + + if (lDelayTypeIndex == 1) + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + "Feedback", + (LADSPA_HINT_BOUNDED_BELOW + | LADSPA_HINT_BOUNDED_ABOVE + | LADSPA_HINT_DEFAULT_HIGH), + -1, + 1); + + registerNewPluginDescriptor(psDescriptor); + } + } +} + +/*****************************************************************************/ + +/* EOF */ diff --git a/plugins/LadspaEffect/cmt/src/descriptor.cpp b/plugins/LadspaEffect/cmt/src/descriptor.cpp new file mode 100644 index 000000000..0a20dc67a --- /dev/null +++ b/plugins/LadspaEffect/cmt/src/descriptor.cpp @@ -0,0 +1,116 @@ +/* descriptor.cpp + + Computer Music Toolkit - a library of LADSPA plugins. Copyright (C) + 2000 Richard W.E. Furse. The author may be contacted at + richard@muse.demon.co.uk. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public Licence as + published by the Free Software Foundation; either version 2 of the + Licence, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307, USA. */ + +/*****************************************************************************/ + +/* This module contains code providing and supporting the + CMT_Descriptor() function that provides hosts with initial access + to LADSPA plugins. ALL PLUGINS MUST BE REGISTERED IN THIS FILE (see + below). */ + +/*****************************************************************************/ + +/* Module Initialisation: + ---------------------- */ + +void initialise_am(); +void initialise_ambisonic(); +void initialise_amp(); +void initialise_analogue(); +void initialise_canyondelay(); +void initialise_delay(); +void initialise_dynamic(); +void initialise_filter(); +void initialise_freeverb3(); +void initialise_grain(); +void initialise_lofi(); +void initialise_mixer(); +void initialise_noise(); +void initialise_null(); +void initialise_organ(); +void initialise_peak(); +void initialise_phasemod(); +void initialise_sine(); +void initialise_syndrum(); +void initialise_vcf303(); +void initialise_wshape_sine(); +namespace hardgate { void initialise(); } +namespace disintegrator { void initialise(); } +namespace pink { void initialise(); } +namespace pink_full { void initialise(); } +namespace pink_sh { void initialise(); } +namespace sledgehammer { void initialise(); } +namespace logistic { void initialise(); } + +/** This function should initialise all modules in the library. This + will lead to all plugin descriptors being registered. If you write + a new plugin you should initialise it here. If the module has + structures it wishes to remove also then these should be included + in finalise_modules(). */ +void +initialise_modules() { + initialise_am(); + initialise_ambisonic(); + initialise_amp(); + initialise_analogue(); + initialise_canyondelay(); + initialise_delay(); + initialise_dynamic(); + initialise_filter(); + initialise_freeverb3(); + initialise_grain(); + initialise_lofi(); + initialise_mixer(); + initialise_noise(); + initialise_null(); + initialise_organ(); + initialise_peak(); + initialise_phasemod(); + initialise_sine(); + initialise_syndrum(); + initialise_vcf303(); + initialise_wshape_sine(); + hardgate::initialise(); + disintegrator::initialise(); + pink::initialise(); + pink_full::initialise(); + pink_sh::initialise(); + sledgehammer::initialise(); + logistic::initialise(); +} + +/*****************************************************************************/ + +/* Module Finalisation: + -------------------- */ + +void finalise_sine(); + +/** Finalise any structures allocated by the modules. This does not + include descriptors passed to registerNewPluginDescriptor(). */ +void +finalise_modules() { + finalise_sine(); +} + +/*****************************************************************************/ + +/* EOF */ diff --git a/plugins/LadspaEffect/cmt/src/disintegrator.cpp b/plugins/LadspaEffect/cmt/src/disintegrator.cpp new file mode 100644 index 000000000..39edefc5b --- /dev/null +++ b/plugins/LadspaEffect/cmt/src/disintegrator.cpp @@ -0,0 +1,151 @@ +/* disintegrator.cpp + + (c) 2002 Nathaniel Virgo + + Computer Music Toolkit - a library of LADSPA plugins. Copyright (C) + 2000-2002 Richard W.E. Furse. The author may be contacted at + richard@muse.demon.co.uk. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public Licence as + published by the Free Software Foundation; either version 2 of the + Licence, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307, USA. */ + +/*****************************************************************************/ + +#include + +/*****************************************************************************/ + +#include "cmt.h" +#include "run_adding.h" + +/*****************************************************************************/ + +namespace disintegrator { + + enum { + port_probability = 0, + port_multiplier = 1, + port_input = 2, + port_output = 3, + n_ports = 4 + }; + +/** This plugin multiplies random half-waveforms by port_multiplier, + with probability port_probability */ + class Plugin : public CMT_PluginInstance { + LADSPA_Data run_adding_gain; + bool active; + LADSPA_Data last_input; + public: + Plugin(const LADSPA_Descriptor *, + unsigned long) + : CMT_PluginInstance(n_ports) { + active = false; last_input = 0.0f; + } + + template + friend void run(LADSPA_Handle instance, + unsigned long sample_count); + + friend void set_run_adding_gain(LADSPA_Handle instance, + LADSPA_Data new_gain); + }; + + template + void run(LADSPA_Handle instance, + unsigned long sample_count) { + + Plugin *pp = (Plugin *) instance; + Plugin &p = *pp; + + LADSPA_Data prob = *pp->m_ppfPorts[port_probability]; + LADSPA_Data mult = *pp->m_ppfPorts[port_multiplier]; + LADSPA_Data * in = pp->m_ppfPorts[port_input]; + LADSPA_Data * out = pp->m_ppfPorts[port_output]; + + mult *= get_gain(p.run_adding_gain); + + for ( unsigned long i = 0; i < sample_count ; ++i ) { + LADSPA_Data insig = *(in++); + if ( ( p.last_input>0 && insig<0 ) || ( p.last_input<0 && insig>0 ) ) + p.active = rand() < prob*RAND_MAX; + p.last_input = insig; + if (p.active) + write_output(out, insig*mult, 1.0f); + else + write_output(out, insig, p.run_adding_gain); + } + } + + void set_run_adding_gain(LADSPA_Handle instance, + LADSPA_Data new_gain) { + ((Plugin *) instance)->run_adding_gain = new_gain; + } + + void + initialise() { + + CMT_Descriptor * d = new CMT_Descriptor + (1846, + "disintegrator", + LADSPA_PROPERTY_HARD_RT_CAPABLE, + "Disintegrator", + CMT_MAKER("Nathaniel Virgo"), + CMT_COPYRIGHT("2002", "Nathaniel Virgo"), + NULL, + CMT_Instantiate, + NULL, + run, + run, + set_run_adding_gain, + NULL); + + d->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + "Probability", + (LADSPA_HINT_BOUNDED_BELOW + | LADSPA_HINT_BOUNDED_ABOVE + | LADSPA_HINT_DEFAULT_0), + 0, + 1); + d->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + "Multiplier", + (LADSPA_HINT_BOUNDED_BELOW + | LADSPA_HINT_BOUNDED_ABOVE + | LADSPA_HINT_DEFAULT_0), + -1, + 1); + d->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + "Input"); + d->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output"); + + registerNewPluginDescriptor(d); + + } + +} // end of namespace + +/*****************************************************************************/ + +/* EOF */ + + + + + diff --git a/plugins/LadspaEffect/cmt/src/dynamic.cpp b/plugins/LadspaEffect/cmt/src/dynamic.cpp new file mode 100644 index 000000000..6314cdfeb --- /dev/null +++ b/plugins/LadspaEffect/cmt/src/dynamic.cpp @@ -0,0 +1,800 @@ +/* dynamic.cpp + + Computer Music Toolkit - a library of LADSPA plugins. Copyright (C) + 2000-2002 Richard W.E. Furse. The author may be contacted at + richard@muse.demon.co.uk. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public Licence as + published by the Free Software Foundation; either version 2 of the + Licence, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307, USA. */ + +/*****************************************************************************/ + +/* This module provides unsophisticated implementations of compressor, + expander and limiter plugins. Note that attack and decay times are + applied at the LEVEL DETECTION stage rather than at gain processing + (the reason no noise gate is provided). No delay is applied to the + main signal. These are useful (and efficient) tools and extended + compressors should probably allocate new IDs rather than break + compatibility in parameter set and sound for this set. */ + +// Having said this, I'm not sure the attack/decay parameters are the +// right way around. + +/*****************************************************************************/ + +#include +#include +#include + +/*****************************************************************************/ + +#include "cmt.h" +#include "utils.h" + +/*****************************************************************************/ + +class DynamicProcessor { +protected: + + /** This state variable is used to track the input envelope (peak or + rms). The state is stored here so that the run function can + perform low-pass filtering to produce a smoothed envelope. */ + LADSPA_Data m_fEnvelopeState; + + /** The sample rate in the world this instance exists in. */ + LADSPA_Data m_fSampleRate; + + DynamicProcessor(const LADSPA_Data fSampleRate) + : m_fSampleRate(fSampleRate) { + } + +}; + +/*****************************************************************************/ + +#define CE_THRESHOLD 0 +#define CE_RATIO 1 +#define CE_ATTACK 2 +#define CE_DECAY 3 +#define CE_INPUT 4 +#define CE_OUTPUT 5 + +/** This class is used to implement simple compressor and expander + plugins. Attack and decay times are applied at the level detection + stage rather than at gain processing. No delay is applied to the + main signal. Both peak and RMS support is included. */ +class CompressorExpander + : public CMT_PluginInstance, public DynamicProcessor { +public: + + CompressorExpander(const LADSPA_Descriptor *, + unsigned long lSampleRate) + : CMT_PluginInstance(6), + DynamicProcessor(lSampleRate) { + } + + friend void activateCompressorExpander(void * pvHandle); + friend void runCompressor_Peak(LADSPA_Handle Instance, + unsigned long SampleCount); + friend void runCompressor_RMS(LADSPA_Handle Instance, + unsigned long SampleCount); + friend void runExpander_Peak(LADSPA_Handle Instance, + unsigned long SampleCount); + friend void runExpander_RMS(LADSPA_Handle Instance, + unsigned long SampleCount); + +}; + +/*****************************************************************************/ + +#define LN_THRESHOLD 0 +#define LN_ATTACK 1 +#define LN_DECAY 2 +#define LN_INPUT 3 +#define LN_OUTPUT 4 + +/** This class is used to implement simple limiter plugins. Attack and + decay times are applied at the level detection stage rather than + at gain processing. No delay is applied to the main signal. Both + peak and RMS support is included. */ +class Limiter + : public CMT_PluginInstance, public DynamicProcessor { +public: + + Limiter(const LADSPA_Descriptor *, + unsigned long lSampleRate) + : CMT_PluginInstance(5), + DynamicProcessor(lSampleRate) { + } + + friend void activateLimiter(void * pvHandle); + friend void runLimiter_Peak(LADSPA_Handle Instance, + unsigned long SampleCount); + friend void runLimiter_RMS(LADSPA_Handle Instance, + unsigned long SampleCount); + +}; + +/*****************************************************************************/ + +void +activateCompressorExpander(void * pvHandle) { + CompressorExpander * poProcessor = (CompressorExpander *)pvHandle; + poProcessor->m_fEnvelopeState = 0; +} + +/*****************************************************************************/ + +void +activateLimiter(void * pvHandle) { + Limiter * poProcessor = (Limiter *)pvHandle; + poProcessor->m_fEnvelopeState = 0; +} + +/*****************************************************************************/ + +void +runCompressor_Peak(LADSPA_Handle Instance, + unsigned long SampleCount) { + + CompressorExpander * poProcessor = (CompressorExpander *)Instance; + + LADSPA_Data fThreshold + = BOUNDED_BELOW(*(poProcessor->m_ppfPorts[CE_THRESHOLD]), + 0); + LADSPA_Data fOneOverThreshold + = 1 / fThreshold; + LADSPA_Data fRatioMinusOne + = *(poProcessor->m_ppfPorts[CE_RATIO]) - 1; + LADSPA_Data * pfInput + = poProcessor->m_ppfPorts[CE_INPUT]; + LADSPA_Data * pfOutput + = poProcessor->m_ppfPorts[CE_OUTPUT]; + + LADSPA_Data fEnvelopeDrag_Attack + = calculate60dBDrag(*(poProcessor->m_ppfPorts[CE_ATTACK]), + poProcessor->m_fSampleRate); + LADSPA_Data fEnvelopeDrag_Decay + = calculate60dBDrag(*(poProcessor->m_ppfPorts[CE_DECAY]), + poProcessor->m_fSampleRate); + + LADSPA_Data &rfEnvelopeState + = poProcessor->m_fEnvelopeState; + + for (unsigned long lSampleIndex = 0; + lSampleIndex < SampleCount; + lSampleIndex++) { + + LADSPA_Data fInput = *(pfInput++); + LADSPA_Data fEnvelopeTarget = fabs(fInput); + if (fEnvelopeTarget > rfEnvelopeState) + rfEnvelopeState = (rfEnvelopeState * fEnvelopeDrag_Attack + + fEnvelopeTarget * (1 - fEnvelopeDrag_Attack)); + else + rfEnvelopeState = (rfEnvelopeState * fEnvelopeDrag_Decay + + fEnvelopeTarget * (1 - fEnvelopeDrag_Decay)); + + /* Perform the mapping. This questions this plugin's claim of + being `hard-realtime.' */ + LADSPA_Data fGain; + if (rfEnvelopeState < fThreshold) + fGain = 1; + else { + fGain = pow(rfEnvelopeState * fOneOverThreshold, fRatioMinusOne); + if (isnan(fGain)) + fGain = 0; + } + + /* Perform output. */ + *(pfOutput++) = fInput * fGain; + } +} + +/*****************************************************************************/ + +void +runCompressor_RMS(LADSPA_Handle Instance, + unsigned long SampleCount) { + + CompressorExpander * poProcessor = (CompressorExpander *)Instance; + + LADSPA_Data fThreshold + = BOUNDED_BELOW(*(poProcessor->m_ppfPorts[CE_THRESHOLD]), + 0); + LADSPA_Data fOneOverThreshold + = 1 / fThreshold; + LADSPA_Data fRatioMinusOne + = *(poProcessor->m_ppfPorts[CE_RATIO]) - 1; + LADSPA_Data * pfInput + = poProcessor->m_ppfPorts[CE_INPUT]; + LADSPA_Data * pfOutput + = poProcessor->m_ppfPorts[CE_OUTPUT]; + + LADSPA_Data fEnvelopeDrag_Attack + = calculate60dBDrag(*(poProcessor->m_ppfPorts[CE_ATTACK]), + poProcessor->m_fSampleRate); + LADSPA_Data fEnvelopeDrag_Decay + = calculate60dBDrag(*(poProcessor->m_ppfPorts[CE_DECAY]), + poProcessor->m_fSampleRate); + + LADSPA_Data &rfEnvelopeState + = poProcessor->m_fEnvelopeState; + + for (unsigned long lSampleIndex = 0; + lSampleIndex < SampleCount; + lSampleIndex++) { + + LADSPA_Data fInput = *(pfInput++); + LADSPA_Data fEnvelopeTarget = fInput * fInput; + if (fEnvelopeTarget > rfEnvelopeState) + rfEnvelopeState = (rfEnvelopeState * fEnvelopeDrag_Attack + + fEnvelopeTarget * (1 - fEnvelopeDrag_Attack)); + else + rfEnvelopeState = (rfEnvelopeState * fEnvelopeDrag_Decay + + fEnvelopeTarget * (1 - fEnvelopeDrag_Decay)); + + LADSPA_Data fEnvelopeAmplitude = sqrt(rfEnvelopeState); + + /* Perform the mapping. This questions this plugin's claim of + being `hard-realtime.' */ + LADSPA_Data fGain; + if (fEnvelopeAmplitude < fThreshold) + fGain = 1; + else { + fGain = pow(fEnvelopeAmplitude * fOneOverThreshold, fRatioMinusOne); + if (isnan(fGain)) + fGain = 0; + } + + /* Perform output. */ + *(pfOutput++) = fInput * fGain; + } +} + +/*****************************************************************************/ + +void +runExpander_Peak(LADSPA_Handle Instance, + unsigned long SampleCount) { + + CompressorExpander * poProcessor = (CompressorExpander *)Instance; + + LADSPA_Data fThreshold + = BOUNDED_BELOW(*(poProcessor->m_ppfPorts[CE_THRESHOLD]), + 0); + LADSPA_Data fOneOverThreshold + = 1 / fThreshold; + LADSPA_Data fOneMinusRatio + = 1 - *(poProcessor->m_ppfPorts[CE_RATIO]); + LADSPA_Data * pfInput + = poProcessor->m_ppfPorts[CE_INPUT]; + LADSPA_Data * pfOutput + = poProcessor->m_ppfPorts[CE_OUTPUT]; + + LADSPA_Data fEnvelopeDrag_Attack + = calculate60dBDrag(*(poProcessor->m_ppfPorts[CE_ATTACK]), + poProcessor->m_fSampleRate); + LADSPA_Data fEnvelopeDrag_Decay + = calculate60dBDrag(*(poProcessor->m_ppfPorts[CE_DECAY]), + poProcessor->m_fSampleRate); + + LADSPA_Data &rfEnvelopeState + = poProcessor->m_fEnvelopeState; + + for (unsigned long lSampleIndex = 0; + lSampleIndex < SampleCount; + lSampleIndex++) { + + LADSPA_Data fInput = *(pfInput++); + LADSPA_Data fEnvelopeTarget = fabs(fInput); + if (fEnvelopeTarget > rfEnvelopeState) + rfEnvelopeState = (rfEnvelopeState * fEnvelopeDrag_Attack + + fEnvelopeTarget * (1 - fEnvelopeDrag_Attack)); + else + rfEnvelopeState = (rfEnvelopeState * fEnvelopeDrag_Decay + + fEnvelopeTarget * (1 - fEnvelopeDrag_Decay)); + + /* Perform the mapping. This questions this plugin's claim of + being `hard-realtime.' */ + LADSPA_Data fGain; + if (rfEnvelopeState > fThreshold) + fGain = 1; + else { + fGain = pow(rfEnvelopeState * fOneOverThreshold, fOneMinusRatio); + if (isnan(fGain)) + fGain = 0; + } + + /* Perform output. */ + *(pfOutput++) = fInput * fGain; + } +} + +/*****************************************************************************/ + +void +runExpander_RMS(LADSPA_Handle Instance, + unsigned long SampleCount) { + + CompressorExpander * poProcessor = (CompressorExpander *)Instance; + + LADSPA_Data fThreshold + = BOUNDED_BELOW(*(poProcessor->m_ppfPorts[CE_THRESHOLD]), + 0); + LADSPA_Data fOneOverThreshold + = 1 / fThreshold; + LADSPA_Data fOneMinusRatio + = 1 - *(poProcessor->m_ppfPorts[CE_RATIO]); + LADSPA_Data * pfInput + = poProcessor->m_ppfPorts[CE_INPUT]; + LADSPA_Data * pfOutput + = poProcessor->m_ppfPorts[CE_OUTPUT]; + + LADSPA_Data fEnvelopeDrag_Attack + = calculate60dBDrag(*(poProcessor->m_ppfPorts[CE_ATTACK]), + poProcessor->m_fSampleRate); + LADSPA_Data fEnvelopeDrag_Decay + = calculate60dBDrag(*(poProcessor->m_ppfPorts[CE_DECAY]), + poProcessor->m_fSampleRate); + + LADSPA_Data &rfEnvelopeState + = poProcessor->m_fEnvelopeState; + + for (unsigned long lSampleIndex = 0; + lSampleIndex < SampleCount; + lSampleIndex++) { + + LADSPA_Data fInput = *(pfInput++); + LADSPA_Data fEnvelopeTarget = fInput * fInput; + if (fEnvelopeTarget > rfEnvelopeState) + rfEnvelopeState = (rfEnvelopeState * fEnvelopeDrag_Attack + + fEnvelopeTarget * (1 - fEnvelopeDrag_Attack)); + else + rfEnvelopeState = (rfEnvelopeState * fEnvelopeDrag_Decay + + fEnvelopeTarget * (1 - fEnvelopeDrag_Decay)); + + LADSPA_Data fEnvelopeAmplitude = sqrt(rfEnvelopeState); + + /* Perform the mapping. This questions this plugin's claim of + being `hard-realtime.' */ + LADSPA_Data fGain; + if (fEnvelopeAmplitude > fThreshold) + fGain = 1; + else { + fGain = pow(fEnvelopeAmplitude * fOneOverThreshold, fOneMinusRatio); + if (isnan(fGain)) + fGain = 0; + } + + /* Perform output. */ + *(pfOutput++) = fInput * fGain; + } +} + +/*****************************************************************************/ + +void +runLimiter_Peak(LADSPA_Handle Instance, + unsigned long SampleCount) { + + Limiter * poProcessor = (Limiter *)Instance; + + LADSPA_Data fThreshold + = BOUNDED_BELOW(*(poProcessor->m_ppfPorts[LN_THRESHOLD]), + 0); + LADSPA_Data * pfInput + = poProcessor->m_ppfPorts[LN_INPUT]; + LADSPA_Data * pfOutput + = poProcessor->m_ppfPorts[LN_OUTPUT]; + + LADSPA_Data fEnvelopeDrag_Attack + = calculate60dBDrag(*(poProcessor->m_ppfPorts[CE_ATTACK]), + poProcessor->m_fSampleRate); + LADSPA_Data fEnvelopeDrag_Decay + = calculate60dBDrag(*(poProcessor->m_ppfPorts[CE_DECAY]), + poProcessor->m_fSampleRate); + + LADSPA_Data &rfEnvelopeState + = poProcessor->m_fEnvelopeState; + + for (unsigned long lSampleIndex = 0; + lSampleIndex < SampleCount; + lSampleIndex++) { + + LADSPA_Data fInput = *(pfInput++); + LADSPA_Data fEnvelopeTarget = fabs(fInput); + if (fEnvelopeTarget > rfEnvelopeState) + rfEnvelopeState = (rfEnvelopeState * fEnvelopeDrag_Attack + + fEnvelopeTarget * (1 - fEnvelopeDrag_Attack)); + else + rfEnvelopeState = (rfEnvelopeState * fEnvelopeDrag_Decay + + fEnvelopeTarget * (1 - fEnvelopeDrag_Decay)); + + /* Perform the mapping. This questions this plugin's claim of + being `hard-realtime.' */ + LADSPA_Data fGain; + if (rfEnvelopeState < fThreshold) + fGain = 1; + else { + fGain = fThreshold / rfEnvelopeState; + if (isnan(fGain)) + fGain = 0; + } + + /* Perform output. */ + *(pfOutput++) = fInput * fGain; + } +} + +/*****************************************************************************/ + +void +runLimiter_RMS(LADSPA_Handle Instance, + unsigned long SampleCount) { + + Limiter * poProcessor = (Limiter *)Instance; + + LADSPA_Data fThreshold + = BOUNDED_BELOW(*(poProcessor->m_ppfPorts[LN_THRESHOLD]), + 0); + LADSPA_Data * pfInput + = poProcessor->m_ppfPorts[LN_INPUT]; + LADSPA_Data * pfOutput + = poProcessor->m_ppfPorts[LN_OUTPUT]; + + LADSPA_Data fEnvelopeDrag_Attack + = calculate60dBDrag(*(poProcessor->m_ppfPorts[CE_ATTACK]), + poProcessor->m_fSampleRate); + LADSPA_Data fEnvelopeDrag_Decay + = calculate60dBDrag(*(poProcessor->m_ppfPorts[CE_DECAY]), + poProcessor->m_fSampleRate); + + LADSPA_Data &rfEnvelopeState + = poProcessor->m_fEnvelopeState; + + for (unsigned long lSampleIndex = 0; + lSampleIndex < SampleCount; + lSampleIndex++) { + + LADSPA_Data fInput = *(pfInput++); + LADSPA_Data fEnvelopeTarget = fInput * fInput; + if (fEnvelopeTarget > rfEnvelopeState) + rfEnvelopeState = (rfEnvelopeState * fEnvelopeDrag_Attack + + fEnvelopeTarget * (1 - fEnvelopeDrag_Attack)); + else + rfEnvelopeState = (rfEnvelopeState * fEnvelopeDrag_Decay + + fEnvelopeTarget * (1 - fEnvelopeDrag_Decay)); + + LADSPA_Data fEnvelopeAmplitude = sqrt(rfEnvelopeState); + + /* Perform the mapping. This questions this plugin's claim of + being `hard-realtime.' */ + LADSPA_Data fGain; + if (fEnvelopeAmplitude < fThreshold) + fGain = 1; + else { + fGain = fThreshold / fEnvelopeAmplitude; + if (isnan(fGain)) + fGain = 0; + } + + /* Perform output. */ + *(pfOutput++) = fInput * fGain; + } +} + +/*****************************************************************************/ + +void +initialise_dynamic() { + + CMT_Descriptor * psDescriptor; + + psDescriptor = new CMT_Descriptor + (1072, + "compress_peak", + LADSPA_PROPERTY_HARD_RT_CAPABLE, + "Simple Compressor (Peak Envelope Tracking)", + CMT_MAKER("Richard W.E. Furse"), + CMT_COPYRIGHT("2000-2002", "Richard W.E. Furse"), + NULL, + CMT_Instantiate, + activateCompressorExpander, + runCompressor_Peak, + NULL, + NULL, + NULL); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + "Threshold", + (LADSPA_HINT_BOUNDED_BELOW + | LADSPA_HINT_LOGARITHMIC + | LADSPA_HINT_DEFAULT_1), + 0, + 0); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + "Compression Ratio", + (LADSPA_HINT_BOUNDED_ABOVE + | LADSPA_HINT_DEFAULT_MIDDLE), + 0, + 1); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + "Output Envelope Attack (s)", + (LADSPA_HINT_BOUNDED_BELOW + | LADSPA_HINT_DEFAULT_MAXIMUM), + 0, + 0.1f); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + "Output Envelope Decay (s)", + (LADSPA_HINT_BOUNDED_BELOW + | LADSPA_HINT_DEFAULT_MAXIMUM), + 0, + 0.1f); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + "Input"); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output"); + registerNewPluginDescriptor(psDescriptor); + + psDescriptor = new CMT_Descriptor + (1073, + "compress_rms", + LADSPA_PROPERTY_HARD_RT_CAPABLE, + "Simple Compressor (RMS Envelope Tracking)", + CMT_MAKER("Richard W.E. Furse"), + CMT_COPYRIGHT("2000-2002", "Richard W.E. Furse"), + NULL, + CMT_Instantiate, + activateCompressorExpander, + runCompressor_RMS, + NULL, + NULL, + NULL); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + "Threshold", + (LADSPA_HINT_BOUNDED_BELOW + | LADSPA_HINT_LOGARITHMIC + | LADSPA_HINT_DEFAULT_1), + 0, + 0); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + "Compression Ratio", + (LADSPA_HINT_BOUNDED_ABOVE + | LADSPA_HINT_DEFAULT_MIDDLE), + 0, + 1); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + "Output Envelope Attack (s)", + (LADSPA_HINT_BOUNDED_BELOW + | LADSPA_HINT_DEFAULT_MAXIMUM), + 0, + 0.1f); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + "Output Envelope Decay (s)", + (LADSPA_HINT_BOUNDED_BELOW + | LADSPA_HINT_DEFAULT_MAXIMUM), + 0, + 0.1f); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + "Input"); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output"); + registerNewPluginDescriptor(psDescriptor); + + psDescriptor = new CMT_Descriptor + (1074, + "expand_peak", + LADSPA_PROPERTY_HARD_RT_CAPABLE, + "Simple Expander (Peak Envelope Tracking)", + CMT_MAKER("Richard W.E. Furse"), + CMT_COPYRIGHT("2000-2002", "Richard W.E. Furse"), + NULL, + CMT_Instantiate, + activateCompressorExpander, + runExpander_Peak, + NULL, + NULL, + NULL); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + "Threshold", + (LADSPA_HINT_BOUNDED_BELOW + | LADSPA_HINT_LOGARITHMIC + | LADSPA_HINT_DEFAULT_1), + 0, + 0); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + "Expansion Ratio", + (LADSPA_HINT_BOUNDED_ABOVE + | LADSPA_HINT_DEFAULT_MIDDLE), + 0, + 1); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + "Output Envelope Attack (s)", + (LADSPA_HINT_BOUNDED_BELOW + | LADSPA_HINT_DEFAULT_MAXIMUM), + 0, + 0.1f); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + "Output Envelope Decay (s)", + (LADSPA_HINT_BOUNDED_BELOW + | LADSPA_HINT_DEFAULT_MAXIMUM), + 0, + 0.1f); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + "Input"); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output"); + registerNewPluginDescriptor(psDescriptor); + + psDescriptor = new CMT_Descriptor + (1075, + "expand_rms", + LADSPA_PROPERTY_HARD_RT_CAPABLE, + "Simple Expander (RMS Envelope Tracking)", + CMT_MAKER("Richard W.E. Furse"), + CMT_COPYRIGHT("2000-2002", "Richard W.E. Furse"), + NULL, + CMT_Instantiate, + activateCompressorExpander, + runExpander_RMS, + NULL, + NULL, + NULL); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + "Threshold", + (LADSPA_HINT_BOUNDED_BELOW + | LADSPA_HINT_LOGARITHMIC + | LADSPA_HINT_DEFAULT_1), + 0, + 0); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + "Expansion Ratio", + (LADSPA_HINT_BOUNDED_ABOVE + | LADSPA_HINT_DEFAULT_MIDDLE), + 0, + 1); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + "Output Envelope Attack (s)", + (LADSPA_HINT_BOUNDED_BELOW + | LADSPA_HINT_DEFAULT_MAXIMUM), + 0, + 0.1f); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + "Output Envelope Decay (s)", + (LADSPA_HINT_BOUNDED_BELOW + | LADSPA_HINT_DEFAULT_MAXIMUM), + 0, + 0.1f); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + "Input"); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output"); + registerNewPluginDescriptor(psDescriptor); + + psDescriptor = new CMT_Descriptor + (1076, + "limit_peak", + LADSPA_PROPERTY_HARD_RT_CAPABLE, + "Simple Limiter (Peak Envelope Tracking)", + CMT_MAKER("Richard W.E. Furse"), + CMT_COPYRIGHT("2000-2002", "Richard W.E. Furse"), + NULL, + CMT_Instantiate, + activateLimiter, + runLimiter_Peak, + NULL, + NULL, + NULL); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + "Threshold", + (LADSPA_HINT_BOUNDED_BELOW + | LADSPA_HINT_LOGARITHMIC + | LADSPA_HINT_DEFAULT_1), + 0, + 0); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + "Output Envelope Attack (s)", + (LADSPA_HINT_BOUNDED_BELOW + | LADSPA_HINT_DEFAULT_MAXIMUM), + 0, + 0.1f); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + "Output Envelope Decay (s)", + (LADSPA_HINT_BOUNDED_BELOW + | LADSPA_HINT_DEFAULT_MAXIMUM), + 0, + 0.1f); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + "Input"); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output"); + registerNewPluginDescriptor(psDescriptor); + + psDescriptor = new CMT_Descriptor + (1077, + "limit_rms", + LADSPA_PROPERTY_HARD_RT_CAPABLE, + "Simple Limiter (RMS Envelope Tracking)", + CMT_MAKER("Richard W.E. Furse"), + CMT_COPYRIGHT("2000-2002", "Richard W.E. Furse"), + NULL, + CMT_Instantiate, + activateLimiter, + runLimiter_RMS, + NULL, + NULL, + NULL); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + "Threshold", + (LADSPA_HINT_BOUNDED_BELOW + | LADSPA_HINT_LOGARITHMIC + | LADSPA_HINT_DEFAULT_1), + 0, + 0); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + "Output Envelope Attack (s)", + (LADSPA_HINT_BOUNDED_BELOW + | LADSPA_HINT_DEFAULT_MAXIMUM), + 0, + 0.1f); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + "Output Envelope Decay (s)", + (LADSPA_HINT_BOUNDED_BELOW + | LADSPA_HINT_DEFAULT_MAXIMUM), + 0, + 0.1f); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + "Input"); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output"); + registerNewPluginDescriptor(psDescriptor); +} + +/*****************************************************************************/ + +/* EOF */ diff --git a/plugins/LadspaEffect/cmt/src/filter.cpp b/plugins/LadspaEffect/cmt/src/filter.cpp new file mode 100644 index 000000000..a9006fbb7 --- /dev/null +++ b/plugins/LadspaEffect/cmt/src/filter.cpp @@ -0,0 +1,250 @@ +/* filter.cpp + + Computer Music Toolkit - a library of LADSPA plugins. Copyright (C) + 2000-2002 Richard W.E. Furse. The author may be contacted at + richard@muse.demon.co.uk. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public Licence as + published by the Free Software Foundation; either version 2 of the + Licence, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307, USA. */ + +/*****************************************************************************/ + +#include +#include + +/*****************************************************************************/ + +#include "cmt.h" + +/*****************************************************************************/ + +#define SF_CUTOFF 0 +#define SF_INPUT 1 +#define SF_OUTPUT 2 + +/** Instance data for the OnePoll filter (one-poll, low or high + pass). We can get away with using this structure for both low- and + high-pass filters because the data stored is the same. Note that + the actual run() calls differ however. */ +class OnePollFilter : public CMT_PluginInstance { +private: + + LADSPA_Data m_fSampleRate; + LADSPA_Data m_fTwoPiOverSampleRate; + + LADSPA_Data m_fLastOutput; + LADSPA_Data m_fLastCutoff; + LADSPA_Data m_fAmountOfCurrent; + LADSPA_Data m_fAmountOfLast; + +public: + + OnePollFilter(const LADSPA_Descriptor *, + unsigned long lSampleRate) + : CMT_PluginInstance(3), + m_fSampleRate(LADSPA_Data(lSampleRate)), + m_fTwoPiOverSampleRate(LADSPA_Data((2 * M_PI) / lSampleRate)), + m_fLastCutoff(0), + m_fAmountOfCurrent(0), + m_fAmountOfLast(0) { + } + + friend void activateOnePollFilter(LADSPA_Handle Instance); + friend void runOnePollLowPassFilter(LADSPA_Handle Instance, + unsigned long SampleCount); + friend void runOnePollHighPassFilter(LADSPA_Handle Instance, + unsigned long SampleCount); + +}; + +/*****************************************************************************/ + +void +activateOnePollFilter(LADSPA_Handle Instance) { + ((OnePollFilter *)Instance)->m_fLastOutput = 0; +} + +/*****************************************************************************/ + +/** Run the LPF algorithm for a block of SampleCount samples. */ +void +runOnePollLowPassFilter(LADSPA_Handle Instance, + unsigned long SampleCount) { + + OnePollFilter * poFilter = (OnePollFilter *)Instance; + + LADSPA_Data * pfInput = poFilter->m_ppfPorts[SF_INPUT]; + LADSPA_Data * pfOutput = poFilter->m_ppfPorts[SF_OUTPUT]; + + if (poFilter->m_fLastCutoff != *(poFilter->m_ppfPorts[SF_CUTOFF])) { + poFilter->m_fLastCutoff = *(poFilter->m_ppfPorts[SF_CUTOFF]); + if (poFilter->m_fLastCutoff <= 0) { + /* Reject everything. */ + poFilter->m_fAmountOfCurrent = poFilter->m_fAmountOfLast = 0; + } + else if (poFilter->m_fLastCutoff > poFilter->m_fSampleRate * 0.5) { + /* Above Nyquist frequency. Let everything through. */ + poFilter->m_fAmountOfCurrent = 1; + poFilter->m_fAmountOfLast = 0; + } + else { + poFilter->m_fAmountOfLast = 0; + LADSPA_Data fComp = 2 - cos(poFilter->m_fTwoPiOverSampleRate + * poFilter->m_fLastCutoff); + poFilter->m_fAmountOfLast = fComp - (LADSPA_Data)sqrt(fComp * fComp - 1); + poFilter->m_fAmountOfCurrent = 1 - poFilter->m_fAmountOfLast; + } + } + + LADSPA_Data fAmountOfCurrent = poFilter->m_fAmountOfCurrent; + LADSPA_Data fAmountOfLast = poFilter->m_fAmountOfLast; + LADSPA_Data fLastOutput = poFilter->m_fLastOutput; + + for (unsigned long lSampleIndex = 0; + lSampleIndex < SampleCount; + lSampleIndex++) { + *(pfOutput++) + = fLastOutput + = (fAmountOfCurrent * *(pfInput++) + + fAmountOfLast * fLastOutput); + } + + poFilter->m_fLastOutput = fLastOutput; +} + +/*****************************************************************************/ + +/** Run the HPF algorithm for a block of SampleCount samples. */ +void +runOnePollHighPassFilter(LADSPA_Handle Instance, + unsigned long SampleCount) { + + OnePollFilter * poFilter = (OnePollFilter *)Instance; + + LADSPA_Data * pfInput = poFilter->m_ppfPorts[SF_INPUT]; + LADSPA_Data * pfOutput = poFilter->m_ppfPorts[SF_OUTPUT]; + + if (poFilter->m_fLastCutoff != *(poFilter->m_ppfPorts[SF_CUTOFF])) { + poFilter->m_fLastCutoff = *(poFilter->m_ppfPorts[SF_CUTOFF]); + if (poFilter->m_fLastCutoff <= 0) { + /* Let everything through. */ + poFilter->m_fAmountOfCurrent = 1; + poFilter->m_fAmountOfLast = 0; + } + else if (poFilter->m_fLastCutoff > poFilter->m_fSampleRate * 0.5) { + /* Above Nyquist frequency. Reject everything. */ + poFilter->m_fAmountOfCurrent = poFilter->m_fAmountOfLast = 0; + } + else { + poFilter->m_fAmountOfLast = 0; + LADSPA_Data fComp = 2 - cos(poFilter->m_fTwoPiOverSampleRate + * poFilter->m_fLastCutoff); + poFilter->m_fAmountOfLast = fComp - (LADSPA_Data)sqrt(fComp * fComp - 1); + poFilter->m_fAmountOfCurrent = 1 - poFilter->m_fAmountOfLast; + } + + } + + LADSPA_Data fAmountOfCurrent = poFilter->m_fAmountOfCurrent; + LADSPA_Data fAmountOfLast = poFilter->m_fAmountOfLast; + LADSPA_Data fLastOutput = poFilter->m_fLastOutput; + + for (unsigned long lSampleIndex = 0; + lSampleIndex < SampleCount; + lSampleIndex++) { + fLastOutput + = (fAmountOfCurrent * *pfInput + + fAmountOfLast * fLastOutput); + *(pfOutput++) = *(pfInput++) - fLastOutput; + } + + poFilter->m_fLastOutput = fLastOutput; +} + +/*****************************************************************************/ + +void +initialise_filter() { + + CMT_Descriptor * psDescriptor; + + psDescriptor = new CMT_Descriptor + (1051, + "lpf", + LADSPA_PROPERTY_HARD_RT_CAPABLE, + "Low Pass Filter (One Pole)", + CMT_MAKER("Richard W.E. Furse"), + CMT_COPYRIGHT("2000-2002", "Richard W.E. Furse"), + NULL, + CMT_Instantiate, + activateOnePollFilter, + runOnePollLowPassFilter, + NULL, + NULL, + NULL); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + "Cutoff Frequency (Hz)", + (LADSPA_HINT_BOUNDED_BELOW + | LADSPA_HINT_BOUNDED_ABOVE + | LADSPA_HINT_SAMPLE_RATE + | LADSPA_HINT_LOGARITHMIC + | LADSPA_HINT_DEFAULT_440), + 0, + 0.5f); /* Nyquist frequency (half the sample rate) */ + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + "Input"); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output"); + registerNewPluginDescriptor(psDescriptor); + + psDescriptor = new CMT_Descriptor + (1052, + "hpf", + LADSPA_PROPERTY_HARD_RT_CAPABLE, + "High Pass Filter (One Pole)", + CMT_MAKER("Richard W.E. Furse"), + CMT_COPYRIGHT("2000-2002", "Richard W.E. Furse"), + NULL, + CMT_Instantiate, + activateOnePollFilter, + runOnePollHighPassFilter, + NULL, + NULL, + NULL); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + "Cutoff Frequency (Hz)", + (LADSPA_HINT_BOUNDED_BELOW + | LADSPA_HINT_BOUNDED_ABOVE + | LADSPA_HINT_SAMPLE_RATE + | LADSPA_HINT_LOGARITHMIC + | LADSPA_HINT_DEFAULT_440), + 0, + 0.5f); /* Nyquist frequency (half the sample rate) */ + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + "Input"); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output"); + registerNewPluginDescriptor(psDescriptor); +} + +/*****************************************************************************/ + +/* EOF */ diff --git a/plugins/LadspaEffect/cmt/src/freeverb/Components/allpass.cpp b/plugins/LadspaEffect/cmt/src/freeverb/Components/allpass.cpp new file mode 100644 index 000000000..850337e3a --- /dev/null +++ b/plugins/LadspaEffect/cmt/src/freeverb/Components/allpass.cpp @@ -0,0 +1,36 @@ +// Allpass filter implementation +// +// Written by Jezar at Dreampoint, June 2000 +// http://www.dreampoint.co.uk +// This code is public domain + +#include "allpass.h" + +allpass::allpass() +{ + bufidx = 0; +} + +void allpass::setbuffer(float *buf, int size) +{ + buffer = buf; + bufsize = size; +} + +void allpass::mute() +{ + for (int i=0; i=bufsize) bufidx = 0; + + return output; +} + +#endif//_allpass + +//ends diff --git a/plugins/LadspaEffect/cmt/src/freeverb/Components/comb.cpp b/plugins/LadspaEffect/cmt/src/freeverb/Components/comb.cpp new file mode 100644 index 000000000..62be706d7 --- /dev/null +++ b/plugins/LadspaEffect/cmt/src/freeverb/Components/comb.cpp @@ -0,0 +1,48 @@ +// Comb filter implementation +// +// Written by Jezar at Dreampoint, June 2000 +// http://www.dreampoint.co.uk +// This code is public domain + +#include "comb.h" + +comb::comb() +{ + filterstore = 0; + bufidx = 0; +} + +void comb::setbuffer(float *buf, int size) +{ + buffer = buf; + bufsize = size; +} + +void comb::mute() +{ + for (int i=0; i=bufsize) bufidx = 0; + + return output; +} + +#endif //_comb_ + +//ends diff --git a/plugins/LadspaEffect/cmt/src/freeverb/Components/denormals.h b/plugins/LadspaEffect/cmt/src/freeverb/Components/denormals.h new file mode 100644 index 000000000..01990916a --- /dev/null +++ b/plugins/LadspaEffect/cmt/src/freeverb/Components/denormals.h @@ -0,0 +1,20 @@ +// Macro for killing denormalled numbers +// +// Written by Jezar at Dreampoint, June 2000 +// http://www.dreampoint.co.uk +// Based on IS_DENORMAL macro by Jon Watte +// This code is public domain + +#ifndef _denormals_ +#define _denormals_ + +/*#define undenormalise(sample) if(((*(unsigned int*)&sample)&0x7f800000)==0) sample=0.0f*/ +static void inline undenormalise(float *sample) +{ + if (((*(unsigned int*)sample) & 0x7f800000) == 0) + *sample = 0.0f; +} + +#endif//_denormals_ + +//ends diff --git a/plugins/LadspaEffect/cmt/src/freeverb/Components/revmodel.cpp b/plugins/LadspaEffect/cmt/src/freeverb/Components/revmodel.cpp new file mode 100644 index 000000000..f848944d4 --- /dev/null +++ b/plugins/LadspaEffect/cmt/src/freeverb/Components/revmodel.cpp @@ -0,0 +1,256 @@ +// Reverb model implementation +// +// Written by Jezar at Dreampoint, June 2000 +// http://www.dreampoint.co.uk +// This code is public domain + +#include "revmodel.h" + +revmodel::revmodel() +{ + // Tie the components to their buffers + combL[0].setbuffer(bufcombL1,combtuningL1); + combR[0].setbuffer(bufcombR1,combtuningR1); + combL[1].setbuffer(bufcombL2,combtuningL2); + combR[1].setbuffer(bufcombR2,combtuningR2); + combL[2].setbuffer(bufcombL3,combtuningL3); + combR[2].setbuffer(bufcombR3,combtuningR3); + combL[3].setbuffer(bufcombL4,combtuningL4); + combR[3].setbuffer(bufcombR4,combtuningR4); + combL[4].setbuffer(bufcombL5,combtuningL5); + combR[4].setbuffer(bufcombR5,combtuningR5); + combL[5].setbuffer(bufcombL6,combtuningL6); + combR[5].setbuffer(bufcombR6,combtuningR6); + combL[6].setbuffer(bufcombL7,combtuningL7); + combR[6].setbuffer(bufcombR7,combtuningR7); + combL[7].setbuffer(bufcombL8,combtuningL8); + combR[7].setbuffer(bufcombR8,combtuningR8); + allpassL[0].setbuffer(bufallpassL1,allpasstuningL1); + allpassR[0].setbuffer(bufallpassR1,allpasstuningR1); + allpassL[1].setbuffer(bufallpassL2,allpasstuningL2); + allpassR[1].setbuffer(bufallpassR2,allpasstuningR2); + allpassL[2].setbuffer(bufallpassL3,allpasstuningL3); + allpassR[2].setbuffer(bufallpassR3,allpasstuningR3); + allpassL[3].setbuffer(bufallpassL4,allpasstuningL4); + allpassR[3].setbuffer(bufallpassR4,allpasstuningR4); + + // Set default values + allpassL[0].setfeedback(0.5f); + allpassR[0].setfeedback(0.5f); + allpassL[1].setfeedback(0.5f); + allpassR[1].setfeedback(0.5f); + allpassL[2].setfeedback(0.5f); + allpassR[2].setfeedback(0.5f); + allpassL[3].setfeedback(0.5f); + allpassR[3].setfeedback(0.5f); + setwet(initialwet); + setroomsize(initialroom); + setdry(initialdry); + setdamp(initialdamp); + setwidth(initialwidth); + setmode(initialmode); + + // Buffer will be full of rubbish - so we MUST mute them + mute(); +} + +void revmodel::mute() +{ + int i; + + if (getmode() >= freezemode) + return; + + for (i=0;i 0) + { + outL = outR = 0; + input = (*inputL + *inputR) * gain; + + // Accumulate comb filters in parallel + for(i=0; i 0) + { + outL = outR = 0; + input = (*inputL + *inputR) * gain; + + // Accumulate comb filters in parallel + for(i=0; i= freezemode) + { + roomsize1 = 1; + damp1 = 0; + gain = muted; + } + else + { + roomsize1 = roomsize; + damp1 = damp; + gain = fixedgain; + } + + for(i=0; i= freezemode) + return 1; + else + return 0; +} + +//ends diff --git a/plugins/LadspaEffect/cmt/src/freeverb/Components/revmodel.h b/plugins/LadspaEffect/cmt/src/freeverb/Components/revmodel.h new file mode 100644 index 000000000..aec39dfee --- /dev/null +++ b/plugins/LadspaEffect/cmt/src/freeverb/Components/revmodel.h @@ -0,0 +1,87 @@ +// Reverb model declaration +// +// Written by Jezar at Dreampoint, June 2000 +// http://www.dreampoint.co.uk +// This code is public domain + +#ifndef _revmodel_ +#define _revmodel_ + +#include "comb.h" +#include "allpass.h" +#include "tuning.h" + +class revmodel +{ +public: + revmodel(); + void mute(); + void processmix(float *inputL, float *inputR, float *outputL, float *outputR, long numsamples, int skip); + void processreplace(float *inputL, float *inputR, float *outputL, float *outputR, long numsamples, int skip); + void setroomsize(float value); + float getroomsize(); + void setdamp(float value); + float getdamp(); + void setwet(float value); + float getwet(); + void setdry(float value); + float getdry(); + void setwidth(float value); + float getwidth(); + void setmode(float value); + float getmode(); +private: + void update(); +private: + float gain; + float roomsize,roomsize1; + float damp,damp1; + float wet,wet1,wet2; + float dry; + float width; + float mode; + + // The following are all declared inline + // to remove the need for dynamic allocation + // with its subsequent error-checking messiness + + // Comb filters + comb combL[numcombs]; + comb combR[numcombs]; + + // Allpass filters + allpass allpassL[numallpasses]; + allpass allpassR[numallpasses]; + + // Buffers for the combs + float bufcombL1[combtuningL1]; + float bufcombR1[combtuningR1]; + float bufcombL2[combtuningL2]; + float bufcombR2[combtuningR2]; + float bufcombL3[combtuningL3]; + float bufcombR3[combtuningR3]; + float bufcombL4[combtuningL4]; + float bufcombR4[combtuningR4]; + float bufcombL5[combtuningL5]; + float bufcombR5[combtuningR5]; + float bufcombL6[combtuningL6]; + float bufcombR6[combtuningR6]; + float bufcombL7[combtuningL7]; + float bufcombR7[combtuningR7]; + float bufcombL8[combtuningL8]; + float bufcombR8[combtuningR8]; + + // Buffers for the allpasses + float bufallpassL1[allpasstuningL1]; + float bufallpassR1[allpasstuningR1]; + float bufallpassL2[allpasstuningL2]; + float bufallpassR2[allpasstuningR2]; + float bufallpassL3[allpasstuningL3]; + float bufallpassR3[allpasstuningR3]; + float bufallpassL4[allpasstuningL4]; + float bufallpassR4[allpasstuningR4]; +}; + +#endif//_revmodel_ + +//ends diff --git a/plugins/LadspaEffect/cmt/src/freeverb/Components/tuning.h b/plugins/LadspaEffect/cmt/src/freeverb/Components/tuning.h new file mode 100644 index 000000000..ced892528 --- /dev/null +++ b/plugins/LadspaEffect/cmt/src/freeverb/Components/tuning.h @@ -0,0 +1,60 @@ +// Reverb model tuning values +// +// Written by Jezar at Dreampoint, June 2000 +// http://www.dreampoint.co.uk +// This code is public domain + +#ifndef _tuning_ +#define _tuning_ + +const int numcombs = 8; +const int numallpasses = 4; +const float muted = 0; +const float fixedgain = 0.015f; +const float scalewet = 3; +const float scaledry = 2; +const float scaledamp = 0.4f; +const float scaleroom = 0.28f; +const float offsetroom = 0.7f; +const float initialroom = 0.5f; +const float initialdamp = 0.5f; +const float initialwet = 1/scalewet; +const float initialdry = 0; +const float initialwidth = 1; +const float initialmode = 0; +const float freezemode = 0.5f; +const int stereospread = 23; + +// These values assume 44.1KHz sample rate +// they will probably be OK for 48KHz sample rate +// but would need scaling for 96KHz (or other) sample rates. +// The values were obtained by listening tests. +const int combtuningL1 = 1116; +const int combtuningR1 = 1116+stereospread; +const int combtuningL2 = 1188; +const int combtuningR2 = 1188+stereospread; +const int combtuningL3 = 1277; +const int combtuningR3 = 1277+stereospread; +const int combtuningL4 = 1356; +const int combtuningR4 = 1356+stereospread; +const int combtuningL5 = 1422; +const int combtuningR5 = 1422+stereospread; +const int combtuningL6 = 1491; +const int combtuningR6 = 1491+stereospread; +const int combtuningL7 = 1557; +const int combtuningR7 = 1557+stereospread; +const int combtuningL8 = 1617; +const int combtuningR8 = 1617+stereospread; +const int allpasstuningL1 = 556; +const int allpasstuningR1 = 556+stereospread; +const int allpasstuningL2 = 441; +const int allpasstuningR2 = 441+stereospread; +const int allpasstuningL3 = 341; +const int allpasstuningR3 = 341+stereospread; +const int allpasstuningL4 = 225; +const int allpasstuningR4 = 225+stereospread; + +#endif//_tuning_ + +//ends + diff --git a/plugins/LadspaEffect/cmt/src/freeverb/freeverb.cpp b/plugins/LadspaEffect/cmt/src/freeverb/freeverb.cpp new file mode 100644 index 000000000..760578630 --- /dev/null +++ b/plugins/LadspaEffect/cmt/src/freeverb/freeverb.cpp @@ -0,0 +1,200 @@ +/* freeverb.cpp + + Computer Music Toolkit - a library of LADSPA plugins. Copyright (C) + 2000-2002 Richard W.E. Furse. Freeverb is also Copyright (C) 2000 + Jezar. Richard may be contacted at richard@muse.demon.co.uk. [V1 + Ported to LADSPA 15/7/2000 Richard W.E. Furse, V3 ported to CMT + 4/11/2000.] + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public Licence as + published by the Free Software Foundation; either version 2 of the + Licence, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307, USA. */ + +/*****************************************************************************/ + +#include + +/*****************************************************************************/ + +#include "../cmt.h" +#include "Components/revmodel.h" + +/*****************************************************************************/ + +enum { + + FV_Input1 = 0, + FV_Input2, + FV_Output1, + FV_Output2, + FV_Mode, + FV_RoomSize, + FV_Damping, + FV_Wet, + FV_Dry, + FV_Width, + + FV_NumPorts + +}; + +/*****************************************************************************/ + +/** This plugin wraps Jezar's Freeverb free reverberation module + (version 3). */ +class Freeverb3 : public CMT_PluginInstance, public revmodel { +public: + + Freeverb3(const LADSPA_Descriptor *, unsigned long lSampleRate) + : CMT_PluginInstance(FV_NumPorts) { + /* Richard's note 17/5/2000. Hmm - not sure I like the fact that + lSampleRate isn't actually used in this function! */ + } + friend void activateFreeverb3(LADSPA_Handle Instance); + friend void runFreeverb3(LADSPA_Handle Instance, + unsigned long SampleCount); + +}; + +/*****************************************************************************/ + +void +activateFreeverb3(LADSPA_Handle Instance) { + Freeverb3 * poFreeverb = (Freeverb3 *)Instance; + poFreeverb->mute(); +} + +/*****************************************************************************/ + +void +runFreeverb3(LADSPA_Handle Instance, + const unsigned long SampleCount) { + + Freeverb3 * poFreeverb = ((Freeverb3 *)Instance); + + /* Handle control ports. Note that this isn't especially efficient + because of the way the update() code works in revmodel.cpp, but + at least this approach allows Freeverb to work with almost no + code changes. */ + + if (*(poFreeverb->m_ppfPorts[FV_Mode]) > 0) + poFreeverb->setmode(1); + else + poFreeverb->setmode(0); + poFreeverb->setdamp(*(poFreeverb->m_ppfPorts[FV_Damping])); + poFreeverb->setwet(*(poFreeverb->m_ppfPorts[FV_Wet])); + poFreeverb->setdry(*(poFreeverb->m_ppfPorts[FV_Dry])); + poFreeverb->setroomsize(*(poFreeverb->m_ppfPorts[FV_RoomSize])); + poFreeverb->setwidth(*(poFreeverb->m_ppfPorts[FV_Width])); + + /* Connect to audio ports and run. */ + + poFreeverb->processreplace(poFreeverb->m_ppfPorts[FV_Input1], + poFreeverb->m_ppfPorts[FV_Input2], + poFreeverb->m_ppfPorts[FV_Output1], + poFreeverb->m_ppfPorts[FV_Output2], + SampleCount, + 1); +} + +/*****************************************************************************/ + +void +initialise_freeverb3() { + + CMT_Descriptor * psDescriptor; + + psDescriptor = new CMT_Descriptor + (1123, + "freeverb3", + LADSPA_PROPERTY_HARD_RT_CAPABLE, + "Freeverb (Version 3)", + CMT_MAKER("Jezar at Dreampoint, ported by Richard W.E. Furse"), + CMT_COPYRIGHT("2000", "Jezar at Dreampoint"), + NULL, + CMT_Instantiate, + activateFreeverb3, + runFreeverb3, + NULL, + NULL, + NULL); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + "Input (Left)"); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + "Input (Right)"); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output (Left)"); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output (Right)"); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + "Freeze Mode", + (LADSPA_HINT_TOGGLED + | LADSPA_HINT_DEFAULT_0), + 0, + 0); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + "Room Size", + (LADSPA_HINT_BOUNDED_BELOW + | LADSPA_HINT_BOUNDED_ABOVE + | LADSPA_HINT_DEFAULT_MIDDLE), + 0, + 1); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + "Damping", + (LADSPA_HINT_LOGARITHMIC + | LADSPA_HINT_BOUNDED_BELOW + | LADSPA_HINT_BOUNDED_ABOVE + | LADSPA_HINT_DEFAULT_MIDDLE), + 0, + 1); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + "Wet Level", + (LADSPA_HINT_LOGARITHMIC + | LADSPA_HINT_BOUNDED_BELOW + | LADSPA_HINT_BOUNDED_ABOVE + | LADSPA_HINT_DEFAULT_MIDDLE), + 0, + 1); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + "Dry Level", + (LADSPA_HINT_LOGARITHMIC + | LADSPA_HINT_BOUNDED_BELOW + | LADSPA_HINT_BOUNDED_ABOVE + | LADSPA_HINT_DEFAULT_MAXIMUM), + 0, + 1); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + "Width", + (LADSPA_HINT_BOUNDED_BELOW + | LADSPA_HINT_BOUNDED_ABOVE + | LADSPA_HINT_DEFAULT_MIDDLE), + 0, + 1); + + registerNewPluginDescriptor(psDescriptor); +} + +/*****************************************************************************/ + +/* EOF */ diff --git a/plugins/LadspaEffect/cmt/src/freeverb/readme.txt b/plugins/LadspaEffect/cmt/src/freeverb/readme.txt new file mode 100644 index 000000000..1cc5e8b00 --- /dev/null +++ b/plugins/LadspaEffect/cmt/src/freeverb/readme.txt @@ -0,0 +1,67 @@ +Freeverb - Free, studio-quality reverb SOURCE CODE in the public domain +----------------------------------------------------------------------- + +Written by Jezar at Dreampoint - http://www.dreampoint.co.uk + + +Introduction +------------ + +Hello. + +I'll try to keep this "readme" reasonably small. There are few things in the world that I hate more than long "readme" files. Except "coding conventions" - but more on that later... + +In this zip file you will find two folders of C++ source code: + +"Components" - Contains files that should clean-compile ON ANY TYPE OF COMPUTER OR SYSTEM WHATSOEVER. It should not be necessary to make ANY changes to these files to get them to compile, except to make up for inadequacies of certain compilers. These files create three classes - a comb filter, an allpass filter, and a reverb model made up of a number of instances of the filters, with some features to control the filters at a macro level. You will need to link these classes into another program that interfaces with them. The files in the components drawer are completely independant, and can be built without dependancies on anything else. Because of the simple interface, it should be possible to interface these files to any system - VST, DirectX, anything - without changing them AT ALL. + +"FreeverbVST" - Contains a Steinberg VST implementation of this version of Freeverb, using the components in (surprise) the components folder. It was built on a PC but may compile properly for the Macintosh with no problems. I don't know - I don't have a Macintosh. If you've figured out how to compile the examples in the Steinberg VST Development Kit, then you should easilly figure out how to bring the files into a project and get it working in a few minutes. It should be very simple. + +Note that this version of Freeverb doesn't contain predelay, or any EQ. I thought that might make it difficult to understand the "reverb" part of the code. Once you figure out how Freeverb works, you should find it trivial to add such features with little CPU overhead. + +Also, the code in this version of Freeverb has been optimised. This has changed the sound *slightly*, but not significantly compared to how much processing power it saves. + +Finally, note that there is also a built copy of this version of Freeverb called "Freeverb3.dll" - this is a VST plugin for the PC. If you want a version for the Mac or anything else, then you'll need to build it yourself from the code. + + +Technical Explanation +--------------------- + +Freeverb is a simple implementation of the standard Schroeder/Moorer reverb model. I guess the only reason why it sounds better than other reverbs, is simply because I spent a long while doing listening tests in order to create the values found in "tuning.h". It uses 8 comb filters on both the left and right channels), and you might possibly be able to get away with less if CPU power is a serious constraint for you. It then feeds the result of the reverb through 4 allpass filters on both the left and right channels. These "smooth" the sound. Adding more than four allpasses doesn't seem to add anything significant to the sound, and if you use less, the sound gets a bit "grainy". The filters on the right channel are slightly detuned compared to the left channel in order to create a stereo effect. + +Hopefully, you should find the code in the components drawer a model of brevity and clarity. Notice that I don't use any "coding conventions". Personally, I think that coding conventions suck. They are meant to make the code "clearer", but they inevitably do the complete opposite, making the code completely unfathomable. Anyone whose done Windows programming with its - frankly stupid - "Hungarian notation" will know exactly what I mean. Coding conventions typically promote issues that are irrelevant up to the status of appearing supremely important. It may have helped back people in the days when compilers where somewhat feeble in their type-safety, but not in the new millenium with advanced C++ compilers. + +Imagine if we rewrote the English language to conform to coding conventions. After all, The arguments should be just as valid for the English language as they are for a computer language. For example, we could put a lower-case "n" in front of every noun, a lower-case "p" in front of a persons name, a lower-case "v" in front of every verb, and a lower-case "a" in front of every adjective. Can you imagine what the English language would look like? All in the name of "clarity". It's just as stupid to do this for computer code as it would be to do it for the English language. I hope that the code for Freeverb in the components drawer demonstrates this, and helps start a movement back towards sanity in coding practices. + + +Background +---------- + +Why is the Freeverb code now public domain? Simple. I only intended to create Freeverb to provide me and my friends with studio-quality reverb for free. I never intended to make any money out of it. However, I simply do not have the time to develop it any further. I'm working on a "concept album" at the moment, and I'll never finish it if I spend any more time programming. + +In any case, I make more far money as a contract programmer - making Mobile Internet products - than I ever could writing plugins, so it simply doesn't make financial sense for me to spend any more time on it. + +Rather than give Freeverb to any particular individual or organisation to profit from it, I've decided to give it away to the internet community at large, so that quality, FREE (or at the very least, low-cost) reverbs can be developed for all platforms. + +Feel free to use the source code for Freeverb in any of your own products, whether they are also available for free, or even if they are commercial - I really don't mind. You may do with the code whatever you wish. If you use it in a product (whether commercial or not), it would be very nice of you, if you were to send me a copy of your product - although I appreciate that this isn't always possible in all circumstances. + +HOWEVER, please don't bug me with questions about how to use this code. I gave away Freeverb because I don't have time to maintain it. That means I *certainly* don't have time to answer questions about the source code, so please don't email questions to me. I *will* ignore them. If you can't figure the code for Freeverb out - then find somebody who can. I hope that either way, you enjoy experimenting with it. + + +Disclaimer +---------- + +This software and source code is given away for free, without any warranties of any kind. It has been given away to the internet community as a free gift, so please treat it in the same spirit. + + +I hope this code is useful and interesting to you all! +I hope you have lots of fun experimenting with it and make good products! + +Very best regards, +Jezar. +Technology Consultant +Dreampoint Design and Engineering +http://www.dreampoint.co.uk + + +//ends diff --git a/plugins/LadspaEffect/cmt/src/grain.cpp b/plugins/LadspaEffect/cmt/src/grain.cpp new file mode 100644 index 000000000..3ec25436e --- /dev/null +++ b/plugins/LadspaEffect/cmt/src/grain.cpp @@ -0,0 +1,401 @@ +/* grain.cpp + + Computer Music Toolkit - a library of LADSPA plugins. Copyright (C) + 2000-2002 Richard W.E. Furse. The author may be contacted at + richard@muse.demon.co.uk. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public Licence as + published by the Free Software Foundation; either version 2 of the + Licence, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307, USA. */ + +/*****************************************************************************/ + +#include +#include + +/*****************************************************************************/ + +#include "cmt.h" +#include "utils.h" + +/*****************************************************************************/ + +/** Period (in seconds) from which grains are selected. */ +#define GRAIN_MAXIMUM_HISTORY 6 +#define GRAIN_MAXIMUM_BLOCK 1 /* (seconds) */ + +#define GRAIN_MAXIMUM_SCATTER (GRAIN_MAXIMUM_HISTORY - GRAIN_MAXIMUM_BLOCK) +#define GRAIN_MAXIMUM_LENGTH (GRAIN_MAXIMUM_HISTORY - GRAIN_MAXIMUM_BLOCK) + +/** What quality should we require when sampling the normal + distribution to generate grain counts? */ +#define GRAIN_NORMAL_RV_QUALITY 16 + +/*****************************************************************************/ + +/** Pointers to this can be used as linked list of grains. */ +class Grain { +private: + + long m_lReadPointer; + long m_lGrainLength; + long m_lAttackTime; + + long m_lRunTime; + + bool m_bFinished; + + LADSPA_Data m_fAttackSlope; + LADSPA_Data m_fDecaySlope; + +public: + + Grain(const long lReadPointer, + const long lGrainLength, + const long lAttackTime) + : m_lReadPointer(lReadPointer), + m_lGrainLength(lGrainLength), + m_lAttackTime(lAttackTime), + m_lRunTime(0), + m_bFinished(false) { + if (lAttackTime <= 0) { + m_fAttackSlope = 0; + m_fDecaySlope = LADSPA_Data(1.0 / lGrainLength); + } + else { + m_fAttackSlope = LADSPA_Data(1.0 / lAttackTime); + if (lAttackTime >= lGrainLength) + m_fDecaySlope = 0; + else + m_fDecaySlope = LADSPA_Data(1.0 / (lGrainLength - lAttackTime)); + } + } + + bool isFinished() const { + return m_bFinished; + } + + /** NULL if end of grain list. */ + Grain * m_poNextGrain; + + void run(const unsigned long lSampleCount, + float * pfOutput, + const float * pfHistoryBuffer, + const unsigned long lHistoryBufferSize) { + + LADSPA_Data fAmp; + if (m_lRunTime < m_lAttackTime) + fAmp = m_fAttackSlope * m_lRunTime; + else + fAmp = m_fDecaySlope * (m_lGrainLength - m_lRunTime); + + for (unsigned long lSampleIndex = 0; + lSampleIndex < lSampleCount; + lSampleIndex++) { + + if (fAmp < 0) { + m_bFinished = true; + break; + } + + *(pfOutput++) += fAmp * pfHistoryBuffer[m_lReadPointer]; + + m_lReadPointer = (m_lReadPointer + 1) & (lHistoryBufferSize - 1); + + if (m_lRunTime < m_lAttackTime) + fAmp += m_fAttackSlope; + else + fAmp -= m_fDecaySlope; + + m_lRunTime++; + } + } +}; + +/*****************************************************************************/ + +#define GRN_INPUT 0 +#define GRN_OUTPUT 1 +#define GRN_DENSITY 2 +#define GRN_SCATTER 3 +#define GRN_GRAIN_LENGTH 4 +#define GRN_GRAIN_ATTACK 5 + +/** This plugin cuts an audio stream up and uses it to generate a + granular texture. */ +class GrainScatter : public CMT_PluginInstance { +private: + + Grain * m_poCurrentGrains; + + long m_lSampleRate; + + LADSPA_Data * m_pfBuffer; + + /** Buffer size, a power of two. */ + unsigned long m_lBufferSize; + + /** Write pointer in buffer. */ + unsigned long m_lWritePointer; + +public: + + GrainScatter(const LADSPA_Descriptor *, + unsigned long lSampleRate) + : CMT_PluginInstance(6), + m_poCurrentGrains(NULL), + m_lSampleRate(lSampleRate) { + /* Buffer size is a power of two bigger than max delay time. */ + unsigned long lMinimumBufferSize + = (unsigned long)((LADSPA_Data)lSampleRate * GRAIN_MAXIMUM_HISTORY); + m_lBufferSize = 1; + while (m_lBufferSize < lMinimumBufferSize) + m_lBufferSize <<= 1; + m_pfBuffer = new LADSPA_Data[m_lBufferSize]; + } + + ~GrainScatter() { + delete [] m_pfBuffer; + } + + friend void activateGrainScatter(LADSPA_Handle Instance); + friend void runGrainScatter(LADSPA_Handle Instance, + unsigned long SampleCount); + +}; + +/*****************************************************************************/ + +/** Initialise and activate a plugin instance. */ +void +activateGrainScatter(LADSPA_Handle Instance) { + + GrainScatter * poGrainScatter = (GrainScatter *)Instance; + + /* Need to reset the delay history in this function rather than + instantiate() in case deactivate() followed by activate() have + been called to reinitialise a delay line. */ + memset(poGrainScatter->m_pfBuffer, + 0, + sizeof(LADSPA_Data) * poGrainScatter->m_lBufferSize); + + poGrainScatter->m_lWritePointer = 0; +} + +/*****************************************************************************/ + +void +runGrainScatter(LADSPA_Handle Instance, + unsigned long SampleCount) { + + GrainScatter * poGrainScatter = (GrainScatter *)Instance; + + LADSPA_Data * pfInput = poGrainScatter->m_ppfPorts[GRN_INPUT]; + LADSPA_Data * pfOutput = poGrainScatter->m_ppfPorts[GRN_OUTPUT]; + + unsigned long lMaximumSampleCount + = (unsigned long)(poGrainScatter->m_lSampleRate + * GRAIN_MAXIMUM_BLOCK); + + if (SampleCount > lMaximumSampleCount) { + + /* We're beyond our capabilities. We're going to run out of delay + line for a large grain. Divide and conquer. */ + + runGrainScatter(Instance, lMaximumSampleCount); + + poGrainScatter->m_ppfPorts[GRN_INPUT] += lMaximumSampleCount; + poGrainScatter->m_ppfPorts[GRN_OUTPUT] += lMaximumSampleCount; + runGrainScatter(Instance, SampleCount - lMaximumSampleCount); + poGrainScatter->m_ppfPorts[GRN_INPUT] = pfInput; + poGrainScatter->m_ppfPorts[GRN_OUTPUT] = pfOutput; + + } + else { + + /* Move the delay line along. */ + if (poGrainScatter->m_lWritePointer + + SampleCount + > poGrainScatter->m_lBufferSize) { + memcpy(poGrainScatter->m_pfBuffer + poGrainScatter->m_lWritePointer, + pfInput, + sizeof(LADSPA_Data) * (poGrainScatter->m_lBufferSize + - poGrainScatter->m_lWritePointer)); + memcpy(poGrainScatter->m_pfBuffer, + pfInput + (poGrainScatter->m_lBufferSize + - poGrainScatter->m_lWritePointer), + sizeof(LADSPA_Data) * (SampleCount + - (poGrainScatter->m_lBufferSize + - poGrainScatter->m_lWritePointer))); + } + else { + memcpy(poGrainScatter->m_pfBuffer + poGrainScatter->m_lWritePointer, + pfInput, + sizeof(LADSPA_Data) * SampleCount); + } + poGrainScatter->m_lWritePointer + = ((poGrainScatter->m_lWritePointer + SampleCount) + & (poGrainScatter->m_lBufferSize - 1)); + + /* Empty the output buffer. */ + memset(pfOutput, 0, SampleCount * sizeof(LADSPA_Data)); + + /* Process current grains. */ + Grain ** ppoGrainReference = &(poGrainScatter->m_poCurrentGrains); + while (*ppoGrainReference != NULL) { + (*ppoGrainReference)->run(SampleCount, + pfOutput, + poGrainScatter->m_pfBuffer, + poGrainScatter->m_lBufferSize); + if ((*ppoGrainReference)->isFinished()) { + Grain *poNextGrain = (*ppoGrainReference)->m_poNextGrain; + delete *ppoGrainReference; + *ppoGrainReference = poNextGrain; + } + else { + ppoGrainReference = &((*ppoGrainReference)->m_poNextGrain); + } + } + + LADSPA_Data fSampleRate = LADSPA_Data(poGrainScatter->m_lSampleRate); + LADSPA_Data fDensity + = BOUNDED_BELOW(*(poGrainScatter->m_ppfPorts[GRN_DENSITY]), + 0); + + /* We want to average fDensity new grains per second. We need to + use a RNG to generate a new grain count from the fraction of a + second we are dealing with. Use a normal distribution and + choose standard deviation also to be fDensity. This could be + separately parameterised but any guarantees could be confusing + given that individual grains are uniformly distributed within + the block. Note that fDensity isn't quite grains/sec as we + discard negative samples from the RV. */ + double dGrainCountRV_Mean = fDensity * SampleCount / fSampleRate; + double dGrainCountRV_SD = dGrainCountRV_Mean; + double dGrainCountRV = sampleNormalDistribution(dGrainCountRV_Mean, + dGrainCountRV_SD, + GRAIN_NORMAL_RV_QUALITY); + unsigned long lNewGrainCount = 0; + if (dGrainCountRV > 0) + lNewGrainCount = (unsigned long)(0.5 + dGrainCountRV); + if (lNewGrainCount > 0) { + + LADSPA_Data fScatter + = BOUNDED(*(poGrainScatter->m_ppfPorts[GRN_SCATTER]), + 0, + GRAIN_MAXIMUM_SCATTER); + LADSPA_Data fGrainLength + = BOUNDED_BELOW(*(poGrainScatter->m_ppfPorts[GRN_GRAIN_LENGTH]), + 0); + LADSPA_Data fAttack + = BOUNDED_BELOW(*(poGrainScatter->m_ppfPorts[GRN_GRAIN_ATTACK]), + 0); + + long lScatterSampleWidth + = long(fSampleRate * fScatter) + 1; + long lGrainLength + = long(fSampleRate * fGrainLength); + long lAttackTime + = long(fSampleRate * fAttack); + + for (unsigned long lIndex = 0; lIndex < lNewGrainCount; lIndex++) { + + long lOffset = rand() % SampleCount; + + long lGrainReadPointer + = (poGrainScatter->m_lWritePointer + - SampleCount + + lOffset + - (rand() % lScatterSampleWidth)); + while (lGrainReadPointer < 0) + lGrainReadPointer += poGrainScatter->m_lBufferSize; + lGrainReadPointer &= (poGrainScatter->m_lBufferSize - 1); + + Grain * poNewGrain = new Grain(lGrainReadPointer, + lGrainLength, + lAttackTime); + + poNewGrain->m_poNextGrain = poGrainScatter->m_poCurrentGrains; + poGrainScatter->m_poCurrentGrains = poNewGrain; + + poNewGrain->run(SampleCount - lOffset, + pfOutput + lOffset, + poGrainScatter->m_pfBuffer, + poGrainScatter->m_lBufferSize); + } + } + } +} + +/*****************************************************************************/ + +void +initialise_grain() { + + CMT_Descriptor * psDescriptor = new CMT_Descriptor + (1096, + "grain_scatter", + 0, + "Granular Scatter Processor", + CMT_MAKER("Richard W.E. Furse"), + CMT_COPYRIGHT("2000-2002", "Richard W.E. Furse"), + NULL, + CMT_Instantiate, + activateGrainScatter, + runGrainScatter, + NULL, + NULL, + NULL); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + "Input"); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output"); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + "Density (Grains/s)", + (LADSPA_HINT_BOUNDED_BELOW + | LADSPA_HINT_DEFAULT_MAXIMUM), + 0, + 10); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + "Scatter (s)", + (LADSPA_HINT_BOUNDED_BELOW + | LADSPA_HINT_BOUNDED_ABOVE + | LADSPA_HINT_DEFAULT_MIDDLE), + 0, + GRAIN_MAXIMUM_SCATTER); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + "Grain Length (s)", + (LADSPA_HINT_BOUNDED_BELOW + | LADSPA_HINT_DEFAULT_MAXIMUM), + 0, + 0.2); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + "Grain Attack (s)", + (LADSPA_HINT_BOUNDED_BELOW + | LADSPA_HINT_DEFAULT_MAXIMUM), + 0, + 0.05); + + registerNewPluginDescriptor(psDescriptor); +} + +/*****************************************************************************/ + +/* EOF */ diff --git a/plugins/LadspaEffect/cmt/src/hardgate.cpp b/plugins/LadspaEffect/cmt/src/hardgate.cpp new file mode 100644 index 000000000..a2f04b10e --- /dev/null +++ b/plugins/LadspaEffect/cmt/src/hardgate.cpp @@ -0,0 +1,122 @@ +/* hardgate.cpp + + (c) 2002 Nathaniel Virgo + + Computer Music Toolkit - a library of LADSPA plugins. Copyright (C) + 2000-2002 Richard W.E. Furse. The author may be contacted at + richard@muse.demon.co.uk. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public Licence as + published by the Free Software Foundation; either version 2 of the + Licence, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307, USA. */ + +/*****************************************************************************/ + +#include + +/*****************************************************************************/ + +#include "cmt.h" + +/*****************************************************************************/ + +namespace hardgate { + + enum { + port_threshold = 0, + port_input = 1, + port_output = 2, + n_ports = 3 + }; + +/** This plugin sets its input signal to 0 if it falls below a threshold. */ + class Plugin : public CMT_PluginInstance { + public: + + Plugin(const LADSPA_Descriptor *, + unsigned long) + : CMT_PluginInstance(n_ports) { + } + + friend void run(LADSPA_Handle instance, + unsigned long sample_count); + + }; + + void run(LADSPA_Handle instance, + unsigned long sample_count) { + + Plugin *pp = (Plugin *) instance; + + LADSPA_Data threshold = *pp->m_ppfPorts[port_threshold]; + LADSPA_Data * in = pp->m_ppfPorts[port_input]; + LADSPA_Data * out = pp->m_ppfPorts[port_output]; + + for ( unsigned long i = 0; i < sample_count ; ++i ) + { + LADSPA_Data insig = *(in++); + if ( insig < threshold && insig > -threshold ) + *(out++) = 0.0f; + else + *(out++) = insig; + } + } + + void + initialise() { + + CMT_Descriptor * d = new CMT_Descriptor + (1845, + "hard_gate", + LADSPA_PROPERTY_HARD_RT_CAPABLE, + "Hard Gate", + CMT_MAKER("Nathaniel Virgo"), + CMT_COPYRIGHT("2002", "Nathaniel Virgo"), + NULL, + CMT_Instantiate, + NULL, + run, + NULL, + NULL, + NULL); + + d->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + "Threshold", + (LADSPA_HINT_BOUNDED_BELOW + | LADSPA_HINT_BOUNDED_ABOVE + | LADSPA_HINT_DEFAULT_0), + 0, + 1); + d->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + "Input"); + d->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output"); + + registerNewPluginDescriptor(d); + + } + +} // end of namespace + +/*****************************************************************************/ + +/* EOF */ + + + + + diff --git a/plugins/LadspaEffect/cmt/src/init.cpp b/plugins/LadspaEffect/cmt/src/init.cpp new file mode 100644 index 000000000..f232840fa --- /dev/null +++ b/plugins/LadspaEffect/cmt/src/init.cpp @@ -0,0 +1,133 @@ +/* init.cpp + + Computer Music Toolkit - a library of LADSPA plugins. Copyright (C) + 2000 Richard W.E. Furse. The author may be contacted at + richard@muse.demon.co.uk. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public Licence as + published by the Free Software Foundation; either version 2 of the + Licence, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307, USA. */ + +/*****************************************************************************/ + +#include +#include +#include + +/*****************************************************************************/ + +#include "cmt.h" + +/*****************************************************************************/ + +void initialise_modules(); +void finalise_modules(); + +/*****************************************************************************/ + +int +pluginNameComparator(const void * pvDescriptor1, const void * pvDescriptor2) { + + const CMT_Descriptor * psDescriptor1 + = *(const CMT_Descriptor **)pvDescriptor1; + const CMT_Descriptor * psDescriptor2 + = *(const CMT_Descriptor **)pvDescriptor2; + + int iResult = strcmp(psDescriptor1->Name, psDescriptor2->Name); + if (iResult < 0) + return -1; + else if (iResult > 0) + return 1; + else + return 0; +} + +/*****************************************************************************/ + +CMT_Descriptor ** g_ppsRegisteredDescriptors = NULL; +unsigned long g_lPluginCapacity = 0; +unsigned long g_lPluginCount = 0; + +/*****************************************************************************/ + +#define CAPACITY_STEP 20 + +void +registerNewPluginDescriptor(CMT_Descriptor * psDescriptor) { + if (g_lPluginCapacity == g_lPluginCount) { + /* Full. Enlarge capacity. */ + CMT_Descriptor ** ppsOldDescriptors + = g_ppsRegisteredDescriptors; + g_ppsRegisteredDescriptors + = new CMT_Descriptor_ptr[g_lPluginCapacity + CAPACITY_STEP]; + if (g_lPluginCapacity > 0) { + memcpy(g_ppsRegisteredDescriptors, + ppsOldDescriptors, + g_lPluginCapacity * sizeof(CMT_Descriptor_ptr)); + delete [] ppsOldDescriptors; + } + g_lPluginCapacity += CAPACITY_STEP; + } + g_ppsRegisteredDescriptors[g_lPluginCount++] = psDescriptor; +} + +/*****************************************************************************/ + +/** A global object of this class is used to perform initialisation + and shutdown services for the entire library. The constructor is + run when the library is loaded and the destructor when it is + unloaded. */ +class StartupShutdownHandler { +public: + + StartupShutdownHandler() { + initialise_modules(); + qsort(g_ppsRegisteredDescriptors, + g_lPluginCount, + sizeof(CMT_Descriptor_ptr), + pluginNameComparator); + } + + ~StartupShutdownHandler() { + if (g_ppsRegisteredDescriptors != NULL) { + for (unsigned long lIndex = 0; lIndex < g_lPluginCount; lIndex++) + delete g_ppsRegisteredDescriptors[lIndex]; + delete [] g_ppsRegisteredDescriptors; + } + finalise_modules(); + } + +} ; + +/*****************************************************************************/ + +extern "C" +{ + +const LADSPA_Descriptor * +ladspa_descriptor(unsigned long Index) { + + static StartupShutdownHandler handler; + + if (Index < g_lPluginCount) + return g_ppsRegisteredDescriptors[Index]; + else + return NULL; +} + +}; + +/*****************************************************************************/ + +/* EOF */ diff --git a/plugins/LadspaEffect/cmt/src/ladspa_types.h b/plugins/LadspaEffect/cmt/src/ladspa_types.h new file mode 100644 index 000000000..31197b31b --- /dev/null +++ b/plugins/LadspaEffect/cmt/src/ladspa_types.h @@ -0,0 +1,80 @@ +/* ladspa_types.h + + Computer Music Toolkit - a library of LADSPA plugins. Copyright (C) + 2000 Richard W.E. Furse. The author may be contacted at + richard@muse.demon.co.uk. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public Licence as + published by the Free Software Foundation; either version 2 of the + Licence, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307, USA. */ + +#ifndef CMT_LADSPA_TYPES_INCLUDED +#define CMT_LADSPA_TYPES_INCLUDED + +/*****************************************************************************/ + +#include + +/* Compatibility hack for version 1.0. */ +#ifndef LADSPA_VERSION_MAJOR +#define LADSPA_HINT_DEFAULT_MINIMUM 0x40 +#define LADSPA_HINT_DEFAULT_LOW 0x80 +#define LADSPA_HINT_DEFAULT_MIDDLE 0xC0 +#define LADSPA_HINT_DEFAULT_HIGH 0x100 +#define LADSPA_HINT_DEFAULT_MAXIMUM 0x140 +#define LADSPA_HINT_DEFAULT_0 0x200 +#define LADSPA_HINT_DEFAULT_1 0x240 +#define LADSPA_HINT_DEFAULT_100 0x280 +#define LADSPA_HINT_DEFAULT_440 0x2C0 +#endif + +/*****************************************************************************/ + +typedef LADSPA_Handle (*LADSPA_Instantiate_Function) + (const struct _LADSPA_Descriptor * Descriptor, + unsigned long SampleRate); + +typedef void (*LADSPA_Connect_Port_Function) + (LADSPA_Handle Instance, + unsigned long Port, + LADSPA_Data * DataLocation); + +typedef void (*LADSPA_Activate_Function) + (LADSPA_Handle Instance); + +typedef void (*LADSPA_Run_Function) + (LADSPA_Handle Instance, + unsigned long SampleCount); + +typedef void (*LADSPA_Run_Adding_Function) + (LADSPA_Handle Instance, + unsigned long SampleCount); + +typedef void (*LADSPA_Set_Run_Adding_Gain_Function) + (LADSPA_Handle Instance, + LADSPA_Data Gain); + +typedef void (*LADSPA_Deactivate_Function) + (LADSPA_Handle Instance); + +typedef void (*LADSPA_Cleanup_Function) + (LADSPA_Handle Instance); + +typedef LADSPA_Data * LADSPA_Data_ptr; + +/*****************************************************************************/ + +#endif + +/* EOF */ diff --git a/plugins/LadspaEffect/cmt/src/lofi.cpp b/plugins/LadspaEffect/cmt/src/lofi.cpp new file mode 100644 index 000000000..d4572f98b --- /dev/null +++ b/plugins/LadspaEffect/cmt/src/lofi.cpp @@ -0,0 +1,417 @@ +/* lofi.cpp + + Lo Fi - Simulate low quality audio equipment + Copyright (c) 2001 David A. Bartold + + Computer Music Toolkit - a library of LADSPA plugins. Copyright (C) + 2000 Richard W.E. Furse. The author may be contacted at + richard@muse.demon.co.uk. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public Licence as + published by the Free Software Foundation; either version 2 of the + Licence, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307, USA. */ + +/*****************************************************************************/ + +#include +#include +#include "cmt.h" + +#define PORT_IN_LEFT 0 +#define PORT_IN_RIGHT 1 +#define PORT_OUT_LEFT 2 +#define PORT_OUT_RIGHT 3 +#define PORT_CRACKLING 4 +#define PORT_OVERLOADING 5 +#define PORT_BANDWIDTH 6 + +#define NUM_PORTS 7 + +#ifndef PI +#define PI 3.14159265358979 +#endif + +#ifndef MIN +#define MIN(x,y) ((x)<(y)?(x):(y)) +#endif + +#ifndef MAX +#define MAX(x,y) ((x)>(y)?(x):(y)) +#endif + +class Pop +{ +public: + float x; + float dx; + float amp; + float pwr; + Pop *next; + + Pop (float dx, float amp, float pwr, Pop *next); + ~Pop (); +}; + +Pop::Pop (float _dx, + float _amp, + float _pwr, + Pop *_next) + : x (0.0), dx (_dx), amp (_amp), pwr (_pwr), next (_next) +{ +} + +Pop::~Pop () +{ + delete next; +} + + +class Record +{ +public: + int rate; + int amount; /* 0 -> 100% */ + Pop *pops; + + LADSPA_Data process (LADSPA_Data sample); + void setAmount (int _amount); + + Record (int sample_rate); + ~Record (); +}; + +Record::Record (int sample_rate) + : rate (sample_rate), + amount (0), + pops (NULL) +{ +} + +Record::~Record () +{ + delete pops; +} + +static Pop * +record_pop_new (Record *record, + Pop *next) +{ + return new Pop ((rand () % 1500 + 500.0) / record->rate, + (rand () % 50) / 10000.0, + 1.0, + next); +} + +static Pop * +record_pop_loud_new (Record *record, + Pop *next) +{ + return new Pop ((rand () % 500 + 2500.0) / record->rate, + (rand () % 100) / 400.0 + 0.5, + (rand () % 50) / 20.0, + next); +} + +LADSPA_Data +Record::process (LADSPA_Data sample) +{ + Pop *pop; + Pop **pop_prev; + + /* Add some crackle */ + if (rand () % rate < rate * amount / 4000) + pops = record_pop_new (this, pops); + + /* Add some loud pops */ + if (rand () % (rate * 10) < rate * amount / 400000) + pops = record_pop_loud_new (this, pops); + + /* Compute pops */ + pop_prev = &pops; + pop = *pop_prev; + while (pop != NULL) + { + if (pop->x >= 0.5) + sample += (pow ((1.0 - pop->x) * 2.0, pop->pwr) - 0.5) * pop->amp; + else + sample += (pow (pop->x * 2.0, pop->pwr) - 0.5) * pop->amp; + + pop->x += pop->dx; + if (pop->x > 1.0) + { + *pop_prev = pop->next; + pop->next = NULL; + delete pop; + } + else + pop_prev = &pop->next; + + pop = *pop_prev; + } + + return sample; +} + +void +Record::setAmount (int _amount) +{ + amount = _amount; +} + + +class Compressor +{ +public: + int rate; + double amp; + double up; + double down; + float vol; + float clamp_hi; + float clamp_lo; + + LADSPA_Data process (LADSPA_Data sample); + void setClamp (float clamp); + + Compressor (int sample_rate, float clamp); +}; + +Compressor::Compressor (int sample_rate, float clamp) + : rate (sample_rate), amp (0.5), + up (1.0 / pow (0.5, 20.0 / sample_rate)), + down (pow (0.5, 50.0 / sample_rate)), + vol (0.5), clamp_hi (clamp), clamp_lo (1.0 / clamp) +{ +} + +LADSPA_Data +Compressor::process (LADSPA_Data sample) +{ + sample *= amp; + + if (fabs (sample) > vol) + { + amp *= down; + if (amp < clamp_lo) + amp = clamp_lo; + } + else + { + amp *= up; + if (amp > clamp_hi) + amp = clamp_hi; + } + + return sample; +} + +void +Compressor::setClamp (float clamp) +{ + clamp_hi = clamp; + clamp_lo = 1.0 / clamp; +} + + +static inline LADSPA_Data +distort (LADSPA_Data in) +{ + if (in > 0.0F) + return (in * 1.0F) / (in + 1.0F) * 2.0F; + else + return -(-in * 1.0F) / (-in + 1.0F) * 2.0F; +} + + +class BandwidthLimit +{ +public: + int rate; + float x; + float dx; + + void setFreq (float freq); + + LADSPA_Data process (LADSPA_Data sample); + BandwidthLimit (int _rate, float _freq); +}; + +BandwidthLimit::BandwidthLimit (int _rate, float _freq) + : rate (_rate), x (0.0), dx (_freq / _rate) +{ +} + +LADSPA_Data +BandwidthLimit::process (LADSPA_Data sample) +{ + if (sample >= x) + sample = MIN (x + dx, sample); + else + sample = MAX (x - dx, sample); + x = sample; + + return sample; +} + +void +BandwidthLimit::setFreq (float freq) +{ + dx = freq / rate; +} + + +class LoFi : public CMT_PluginInstance { + Record *record; + Compressor *compressor; + BandwidthLimit *bandwidth_l; + BandwidthLimit *bandwidth_r; + + int last_trigger; + +public: + LoFi(const LADSPA_Descriptor *, + unsigned long s_rate) + : CMT_PluginInstance (NUM_PORTS), + record (new Record (s_rate * 2)), + compressor (new Compressor (s_rate * 2, 1.6)), + bandwidth_l (new BandwidthLimit (s_rate, 8000.0)), + bandwidth_r (new BandwidthLimit (s_rate, 8000.0)) { + } + + ~LoFi() { + delete bandwidth_l; + delete bandwidth_r; + delete compressor; + delete record; + } + + static void + activate (LADSPA_Handle Instance) { + LoFi *lofi = (LoFi*) Instance; + + lofi->bandwidth_l->setFreq (8000); + lofi->bandwidth_r->setFreq (8000); + lofi->compressor->setClamp (1.6); + lofi->record->setAmount (0); + } + + static void + run(LADSPA_Handle Instance, + unsigned long SampleCount) { + LoFi *lofi = (LoFi*) Instance; + unsigned long i; + LADSPA_Data **ports = lofi->m_ppfPorts; + LADSPA_Data clamp; + + lofi->bandwidth_l->setFreq (ports[PORT_BANDWIDTH][0]); + lofi->bandwidth_r->setFreq (ports[PORT_BANDWIDTH][0]); + + if (ports[PORT_OVERLOADING][0] > 99.0) + clamp = 100.0; + else + clamp = 100.0 / (100.0 - ports[PORT_OVERLOADING][0]); + + lofi->compressor->setClamp (clamp); + + lofi->record->setAmount ((int) ports[PORT_CRACKLING][0]); + + for (i = 0; i < SampleCount; i++) + { + LADSPA_Data sample_l, sample_r; + + sample_l = ports[PORT_IN_LEFT][i]; + sample_r = ports[PORT_IN_RIGHT][i]; + + sample_l = lofi->compressor->process (sample_l); + sample_r = lofi->compressor->process (sample_r); + sample_l = lofi->bandwidth_l->process (sample_l); + sample_r = lofi->bandwidth_r->process (sample_r); + sample_l = distort (sample_l); + sample_r = distort (sample_r); + sample_l = lofi->record->process (sample_l); + sample_r = lofi->record->process (sample_r); + + ports[PORT_OUT_LEFT][i] = sample_l; + ports[PORT_OUT_RIGHT][i] = sample_r; + } + } +}; + + +static LADSPA_PortDescriptor g_psPortDescriptors[] = +{ + LADSPA_PORT_AUDIO | LADSPA_PORT_INPUT, + LADSPA_PORT_AUDIO | LADSPA_PORT_INPUT, + LADSPA_PORT_AUDIO | LADSPA_PORT_OUTPUT, + LADSPA_PORT_AUDIO | LADSPA_PORT_OUTPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT +}; + +static const char * const g_psPortNames[] = +{ + "In (Left)", + "In (Right)", + + "Out (Left)", + "Out (Right)", + + "Crackling (%)", + "Powersupply Overloading (%)", + "Opamp Bandwidth Limiting (Hz)" +}; + +static LADSPA_PortRangeHint g_psPortRangeHints[] = +{ + /* Hints, Lower bound, Upper bound */ + { 0, 0.0, 0.0 }, + { 0, 0.0, 0.0 }, + { 0, 0.0, 0.0 }, + { 0, 0.0, 0.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_INTEGER, -0.1, 100.1 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 100.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 1.0, 10000.0 } +}; + +void +initialise_lofi() { + CMT_Descriptor * psDescriptor; + + psDescriptor = new CMT_Descriptor + (1227, + "lofi", + 0 /* Sorry, this module is not RT capable, run() calls malloc() */, + "Lo Fi", + CMT_MAKER("David A. Bartold"), + CMT_COPYRIGHT("2001", "David A. Bartold"), + NULL, + CMT_Instantiate, + LoFi::activate, + LoFi::run, + NULL, + NULL, + NULL); + + for (int i = 0; i < NUM_PORTS; i++) + psDescriptor->addPort( + g_psPortDescriptors[i], + g_psPortNames[i], + g_psPortRangeHints[i].HintDescriptor, + g_psPortRangeHints[i].LowerBound, + g_psPortRangeHints[i].UpperBound); + + registerNewPluginDescriptor(psDescriptor); +} diff --git a/plugins/LadspaEffect/cmt/src/logistic.cpp b/plugins/LadspaEffect/cmt/src/logistic.cpp new file mode 100644 index 000000000..b2dfcb7fb --- /dev/null +++ b/plugins/LadspaEffect/cmt/src/logistic.cpp @@ -0,0 +1,156 @@ +/* logistic.cpp + + A sample-and-hold logistic map control generator + + (c) 2002 Nathaniel Virgo + + Part of the Computer Music Toolkit - a library of LADSPA plugins. + The Computer Music Toolkit is Copyright (C) 2000-2002 + Richard W.E. Furse. The author may be contacted at + richard@muse.demon.co.uk. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public Licence as + published by the Free Software Foundation; either version 2 of the + Licence, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307, USA. */ + +/*****************************************************************************/ + +#include + +/*****************************************************************************/ + +#include "cmt.h" + +#include "pinknoise.h" +#include "utils.h" + +/*****************************************************************************/ + +namespace logistic { + + enum { + port_r = 0, + port_frequency = 1, + port_output = 2, + n_ports = 3 + }; + + /** This plugin uses the logistic map to generate periodic or + chaotic control signals. */ + class Plugin : public CMT_PluginInstance { + private: + LADSPA_Data sample_rate; + LADSPA_Data x; + unsigned counter; + public: + + Plugin(const LADSPA_Descriptor *, + unsigned long s_rate) : + CMT_PluginInstance(n_ports), + sample_rate(s_rate) { + } + + ~Plugin() { + } + + friend void activate(LADSPA_Handle instance); + + friend void run(LADSPA_Handle instance, + unsigned long sample_count); + }; + + void activate(LADSPA_Handle instance) { + Plugin *pp = (Plugin *) instance; + Plugin &p = *pp; + + p.x = 0.3; // arbitrary non-zero value. + } + + void run(LADSPA_Handle instance, + unsigned long sample_count) { + + Plugin *pp = (Plugin *) instance; + Plugin &p = *pp; + + LADSPA_Data r = *pp->m_ppfPorts[port_r]; + LADSPA_Data frequency = *pp->m_ppfPorts[port_frequency]; + LADSPA_Data * out = pp->m_ppfPorts[port_output]; + + frequency = BOUNDED_ABOVE(frequency,p.sample_rate); + r = BOUNDED_ABOVE(r,4); + unsigned remain = sample_count; + + if (frequency > 0) { + while (remain) { + unsigned jump_samples = (remain, + activate, + run, + NULL, + NULL, + NULL); + d->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + "\"r\" parameter", + (LADSPA_HINT_BOUNDED_BELOW + | LADSPA_HINT_BOUNDED_ABOVE + | LADSPA_HINT_DEFAULT_MAXIMUM), + 2.9, 3.9999); + d->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + "Step frequency", + (LADSPA_HINT_BOUNDED_BELOW + | LADSPA_HINT_BOUNDED_ABOVE + | LADSPA_HINT_SAMPLE_RATE + | LADSPA_HINT_DEFAULT_MIDDLE), + 0, 0.001); + d->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output"); + registerNewPluginDescriptor(d); + } + +} // end of namespace + +/*****************************************************************************/ + +/* EOF */ + diff --git a/plugins/LadspaEffect/cmt/src/mixer.cpp b/plugins/LadspaEffect/cmt/src/mixer.cpp new file mode 100644 index 000000000..32d3ec4a7 --- /dev/null +++ b/plugins/LadspaEffect/cmt/src/mixer.cpp @@ -0,0 +1,106 @@ +/* mixer.cpp + + Computer Music Toolkit - a library of LADSPA plugins. Copyright (C) + 2000 Richard W.E. Furse. The author may be contacted at + richard@muse.demon.co.uk. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public Licence as + published by the Free Software Foundation; either version 2 of the + Licence, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307, USA. */ + +/*****************************************************************************/ + +#include +#include + +/*****************************************************************************/ + +#include "cmt.h" + +/*****************************************************************************/ + +/* The port numbers for the plugin: */ + +#define MIXER_INPUT1 0 +#define MIXER_INPUT2 1 +#define MIXER_OUTPUT 2 + +/** This plugin adds two signals together to produce a third. */ +class SimpleMixer : public CMT_PluginInstance { +public: + + SimpleMixer(const LADSPA_Descriptor *, + unsigned long) + : CMT_PluginInstance(3) { + } + + friend void runSimpleMixer(LADSPA_Handle Instance, + unsigned long SampleCount); + +}; + +/*****************************************************************************/ + +void +runSimpleMixer(LADSPA_Handle Instance, + unsigned long SampleCount) { + + SimpleMixer * poMixer = (SimpleMixer *)Instance; + + LADSPA_Data * pfInput1 = poMixer->m_ppfPorts[MIXER_INPUT1]; + LADSPA_Data * pfInput2 = poMixer->m_ppfPorts[MIXER_INPUT2]; + LADSPA_Data * pfOutput = poMixer->m_ppfPorts[MIXER_OUTPUT]; + + for (unsigned long lSampleIndex = 0; + lSampleIndex < SampleCount; + lSampleIndex++) + *(pfOutput++) = *(pfInput1++) + *(pfInput2++); +} + +/*****************************************************************************/ + +void +initialise_mixer() { + + CMT_Descriptor * psDescriptor; + + psDescriptor = new CMT_Descriptor + (1071, + "mixer", + LADSPA_PROPERTY_HARD_RT_CAPABLE, + "Mixer (Stereo to Mono)", + CMT_MAKER("Richard W.E. Furse"), + CMT_COPYRIGHT("2000", "Richard W.E. Furse"), + NULL, + CMT_Instantiate, + NULL, + runSimpleMixer, + NULL, + NULL, + NULL); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + "Input 1"); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + "Input 2"); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output"); + registerNewPluginDescriptor(psDescriptor); +} + +/*****************************************************************************/ + +/* EOF */ diff --git a/plugins/LadspaEffect/cmt/src/noise.cpp b/plugins/LadspaEffect/cmt/src/noise.cpp new file mode 100644 index 000000000..bf6c5a89f --- /dev/null +++ b/plugins/LadspaEffect/cmt/src/noise.cpp @@ -0,0 +1,141 @@ +/* noise.cpp + + Computer Music Toolkit - a library of LADSPA plugins. Copyright (C) + 2000-2002 Richard W.E. Furse. The author may be contacted at + richard@muse.demon.co.uk. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public Licence as + published by the Free Software Foundation; either version 2 of the + Licence, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307, USA. */ + +/*****************************************************************************/ + +#include + +/*****************************************************************************/ + +#include "cmt.h" + +/*****************************************************************************/ + +/* The port numbers for the plugin: */ + +#define NOISE_AMPLITUDE 0 +#define NOISE_OUTPUT 1 + +/** Plugin that provides white noise output. This is provided by + calling rand() repeatedly. */ +class WhiteNoise : public CMT_PluginInstance { +private: + + LADSPA_Data m_fRunAddingGain; + +public: + + WhiteNoise(const LADSPA_Descriptor *, + unsigned long) + : CMT_PluginInstance(2) { + } + + friend void runWhiteNoise(LADSPA_Handle Instance, + unsigned long SampleCount); + friend void runWhiteNoiseAdding(LADSPA_Handle Instance, + unsigned long SampleCount); + friend void setWhiteNoiseRunAddingGain(LADSPA_Handle Instance, + LADSPA_Data Gain); + +}; + +/*****************************************************************************/ + +void +runWhiteNoise(LADSPA_Handle Instance, + unsigned long SampleCount) { + + WhiteNoise * poNoise = (WhiteNoise *)Instance; + + LADSPA_Data fAmplitude = *(poNoise->m_ppfPorts[NOISE_AMPLITUDE]); + LADSPA_Data fScalar = fAmplitude * LADSPA_Data(2.0 / RAND_MAX); + + LADSPA_Data * pfOutput = poNoise->m_ppfPorts[NOISE_OUTPUT]; + + for (unsigned long lSampleIndex = 0; + lSampleIndex < SampleCount; + lSampleIndex++) + *(pfOutput++) = rand() * fScalar - fAmplitude; +} + +void +runWhiteNoiseAdding(LADSPA_Handle Instance, + unsigned long SampleCount) { + + WhiteNoise * poNoise = (WhiteNoise *)Instance; + + LADSPA_Data fAmplitude + = *(poNoise->m_ppfPorts[NOISE_AMPLITUDE]); + LADSPA_Data fScalar + = poNoise->m_fRunAddingGain * fAmplitude * LADSPA_Data(2.0 / RAND_MAX); + + LADSPA_Data * pfOutput = poNoise->m_ppfPorts[NOISE_OUTPUT]; + + for (unsigned long lSampleIndex = 0; + lSampleIndex < SampleCount; + lSampleIndex++) + *(pfOutput++) += rand() * fScalar - fAmplitude; + +} + +void +setWhiteNoiseRunAddingGain(LADSPA_Handle Instance, + LADSPA_Data Gain) { +} + +/*****************************************************************************/ + +void +initialise_noise() { + + CMT_Descriptor * psDescriptor; + + psDescriptor = new CMT_Descriptor + (1069, + "noise_source_white", + LADSPA_PROPERTY_HARD_RT_CAPABLE, + "Noise Source (White)", + CMT_MAKER("Richard W.E. Furse"), + CMT_COPYRIGHT("2000-2002", "Richard W.E. Furse"), + NULL, + CMT_Instantiate, + NULL, + runWhiteNoise, + runWhiteNoiseAdding, + setWhiteNoiseRunAddingGain, + NULL); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + "Amplitude", + (LADSPA_HINT_BOUNDED_BELOW + | LADSPA_HINT_LOGARITHMIC + | LADSPA_HINT_DEFAULT_1), + 0, + 0); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output"); + registerNewPluginDescriptor(psDescriptor); +} + +/*****************************************************************************/ + +/* EOF */ diff --git a/plugins/LadspaEffect/cmt/src/null.cpp b/plugins/LadspaEffect/cmt/src/null.cpp new file mode 100644 index 000000000..afae4f48c --- /dev/null +++ b/plugins/LadspaEffect/cmt/src/null.cpp @@ -0,0 +1,260 @@ +/* null.cpp + + Computer Music Toolkit - a library of LADSPA plugins. Copyright (C) + 2000 Richard W.E. Furse. The author may be contacted at + richard@muse.demon.co.uk. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public Licence as + published by the Free Software Foundation; either version 2 of the + Licence, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307, USA. */ + +/*****************************************************************************/ + +#include +#include + +/*****************************************************************************/ + +#include "cmt.h" + +/*****************************************************************************/ + +/* The port numbers for the plugin: */ + +#define NULL_PORT 0 + +/** This plugin can be used to take care of unwanted connections in a + host's plugin network by generating zero data and audio or + accepting (but ignoring) data and audio. */ +class NullPlugin : public CMT_PluginInstance { +public: + + NullPlugin(const LADSPA_Descriptor *, + unsigned long) + : CMT_PluginInstance(1) { + } + + friend void runNull_Nop(LADSPA_Handle Instance, + unsigned long SampleCount); + friend void runNull_OutputAudio(LADSPA_Handle Instance, + unsigned long SampleCount); + friend void runNull_OutputControl(LADSPA_Handle Instance, + unsigned long SampleCount); + +}; + +/*****************************************************************************/ + +#define IDENTITY_INPUT 0 +#define IDENTITY_OUTPUT 1 + +/* This plugin passes its input to its output. There are audio and + control varieties. */ +class IdentityPlugin : public CMT_PluginInstance { +public: + + IdentityPlugin(const LADSPA_Descriptor *, + unsigned long) + : CMT_PluginInstance(2) { + } + + friend void runIdentity_Audio(LADSPA_Handle Instance, + unsigned long SampleCount); + friend void runIdentity_Control(LADSPA_Handle Instance, + unsigned long SampleCount); + +}; + +/*****************************************************************************/ + +void +runNull_Nop(LADSPA_Handle Instance, + unsigned long SampleCount) { + /* Nothing to do. */ +} + +/*****************************************************************************/ + +void +runNull_OutputAudio(LADSPA_Handle Instance, + unsigned long SampleCount) { + NullPlugin * poPlugin = (NullPlugin *)Instance; + memset(poPlugin->m_ppfPorts[NULL_PORT], + 0, + sizeof(LADSPA_Data) * SampleCount); +} + +/*****************************************************************************/ + +void +runNull_OutputControl(LADSPA_Handle Instance, + unsigned long) { + NullPlugin * poPlugin = (NullPlugin *)Instance; + *(poPlugin->m_ppfPorts[NULL_PORT]) = 0; +} + +/*****************************************************************************/ + +void +runIdentity_Audio(LADSPA_Handle Instance, + unsigned long SampleCount) { + IdentityPlugin * poPlugin = (IdentityPlugin *)Instance; + if (poPlugin->m_ppfPorts[IDENTITY_OUTPUT] + != poPlugin->m_ppfPorts[IDENTITY_INPUT]) + memcpy(poPlugin->m_ppfPorts[IDENTITY_OUTPUT], + poPlugin->m_ppfPorts[IDENTITY_INPUT], + sizeof(LADSPA_Data) * SampleCount); +} + +/*****************************************************************************/ + +void +runIdentity_Control(LADSPA_Handle Instance, + unsigned long) { + IdentityPlugin * poPlugin = (IdentityPlugin *)Instance; + *(poPlugin->m_ppfPorts[IDENTITY_OUTPUT]) + = *(poPlugin->m_ppfPorts[IDENTITY_INPUT]); +} + +/*****************************************************************************/ + +void +initialise_null() { + + CMT_Descriptor * psDescriptor; + + psDescriptor = new CMT_Descriptor + (1083, + "null_ci", + LADSPA_PROPERTY_HARD_RT_CAPABLE, + "Null (Control Input)", + CMT_MAKER("Richard W.E. Furse"), + CMT_COPYRIGHT("2000", "Richard W.E. Furse"), + NULL, + CMT_Instantiate, + NULL, + runNull_Nop, + NULL, + NULL, + NULL); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + "Input"); + registerNewPluginDescriptor(psDescriptor); + + psDescriptor = new CMT_Descriptor + (1084, + "null_ai", + LADSPA_PROPERTY_HARD_RT_CAPABLE, + "Null (Audio Input)", + CMT_MAKER("Richard W.E. Furse"), + CMT_COPYRIGHT("2000", "Richard W.E. Furse"), + NULL, + CMT_Instantiate, + NULL, + runNull_Nop, + NULL, + NULL, + NULL); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + "Input"); + registerNewPluginDescriptor(psDescriptor); + + psDescriptor = new CMT_Descriptor + (1085, + "null_co", + LADSPA_PROPERTY_HARD_RT_CAPABLE, + "Null (Control Output)", + CMT_MAKER("Richard W.E. Furse"), + CMT_COPYRIGHT("2000", "Richard W.E. Furse"), + NULL, + CMT_Instantiate, + NULL, + runNull_OutputControl, + NULL, + NULL, + NULL); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_CONTROL, + "Output"); + registerNewPluginDescriptor(psDescriptor); + + psDescriptor = new CMT_Descriptor + (1086, + "null_ao", + LADSPA_PROPERTY_HARD_RT_CAPABLE, + "Null (Audio Output)", + CMT_MAKER("Richard W.E. Furse"), + CMT_COPYRIGHT("2000", "Richard W.E. Furse"), + NULL, + CMT_Instantiate, + NULL, + runNull_OutputAudio, + NULL, + NULL, + NULL); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output"); + registerNewPluginDescriptor(psDescriptor); + + psDescriptor = new CMT_Descriptor + (1098, + "identity_audio", + LADSPA_PROPERTY_HARD_RT_CAPABLE, + "Identity (Audio)", + CMT_MAKER("Richard W.E. Furse"), + CMT_COPYRIGHT("2000", "Richard W.E. Furse"), + NULL, + CMT_Instantiate, + NULL, + runIdentity_Audio, + NULL, + NULL, + NULL); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + "Input"); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output"); + registerNewPluginDescriptor(psDescriptor); + + psDescriptor = new CMT_Descriptor + (1099, + "identity_control", + LADSPA_PROPERTY_HARD_RT_CAPABLE, + "Identity (Control)", + CMT_MAKER("Richard W.E. Furse"), + CMT_COPYRIGHT("2000", "Richard W.E. Furse"), + NULL, + CMT_Instantiate, + NULL, + runIdentity_Control, + NULL, + NULL, + NULL); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + "Input"); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_CONTROL, + "Output"); + registerNewPluginDescriptor(psDescriptor); +} + +/*****************************************************************************/ + +/* EOF */ diff --git a/plugins/LadspaEffect/cmt/src/organ.cpp b/plugins/LadspaEffect/cmt/src/organ.cpp new file mode 100644 index 000000000..f05d6b02f --- /dev/null +++ b/plugins/LadspaEffect/cmt/src/organ.cpp @@ -0,0 +1,375 @@ +/* organ.cpp + + Organ - Additive Organ Synthesizer Voice + Copyright (c) 1999, 2000 David A. Bartold + + Computer Music Toolkit - a library of LADSPA plugins. Copyright (C) + 2000 Richard W.E. Furse. The author may be contacted at + richard@muse.demon.co.uk. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public Licence as + published by the Free Software Foundation; either version 2 of the + Licence, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307, USA. */ + +/*****************************************************************************/ + +#include +#include +#include "cmt.h" + +#define PORT_OUT 0 +#define PORT_GATE 1 +#define PORT_VELOCITY 2 +#define PORT_FREQ 3 +#define PORT_BRASS 4 +#define PORT_FLUTE 5 +#define PORT_REED 6 +#define PORT_HARM0 7 +#define PORT_HARM1 8 +#define PORT_HARM2 9 +#define PORT_HARM3 10 +#define PORT_HARM4 11 +#define PORT_HARM5 12 +#define PORT_ATTACK_LO 13 +#define PORT_DECAY_LO 14 +#define PORT_SUSTAIN_LO 15 +#define PORT_RELEASE_LO 16 +#define PORT_ATTACK_HI 17 +#define PORT_DECAY_HI 18 +#define PORT_SUSTAIN_HI 19 +#define PORT_RELEASE_HI 20 + +#define NUM_PORTS 21 + +#define RESOLUTION 16384 + +#ifndef PI +#define PI 3.14159265358979 +#endif + +typedef struct Envelope +{ + int envelope_decay; + double envelope; + + Envelope () : envelope_decay (0), envelope (0.0) {} +} Envelope; + +static LADSPA_Data *g_sine_table; +static LADSPA_Data *g_triangle_table; +static LADSPA_Data *g_pulse_table; +static int ref_count; + +class Organ : CMT_PluginInstance +{ + LADSPA_Data sample_rate; + + Envelope env0; + Envelope env1; + + unsigned long harm0_accum; + unsigned long harm1_accum; + unsigned long harm2_accum; + unsigned long harm3_accum; + unsigned long harm4_accum; + unsigned long harm5_accum; + + public: + + Organ(const LADSPA_Descriptor * Descriptor, + unsigned long SampleRate) + : CMT_PluginInstance(NUM_PORTS), + sample_rate(SampleRate), + harm0_accum(0), harm1_accum(0), + harm2_accum(0), harm3_accum(0), + harm4_accum(0), harm5_accum(0) { + if (ref_count++ == 0) + { + int size = RESOLUTION; + int half = size / 2; + int slope = size / 10; + int i; + + /* Initialize sine table. */ + g_sine_table = new LADSPA_Data[size]; + for (i = 0; i < size; i++) + g_sine_table[i] = sin ((i * 2.0 * PI) / size) / 6.0; + + /* Initialize triangle table. */ + g_triangle_table = new LADSPA_Data[size]; + for (i = 0; i < half; i++) + g_triangle_table[i] = (4.0 / size * i - 1.0) / 6.0; + for (; i < size; i++) + g_triangle_table[i] = (4.0 / size * (size - i) - 1.0) / 6.0; + + /* Initialize pulse table. */ + g_pulse_table = new LADSPA_Data[size]; + for (i = 0; i < slope; i++) + g_pulse_table[i] = ((double) -i) / slope / 6.0; + for (; i < half - slope; i++) + g_pulse_table[i] = -1.0 / 6.0; + for (; i < half + slope; i++) + g_pulse_table[i] = ((double) i - half) / slope / 6.0; + for (; i < size - slope; i++) + g_pulse_table[i] = 1.0 / 6.0; + for (; i < size; i++) + g_pulse_table[i] = ((double) size - i) / slope / 6.0; + } + } + + ~Organ () { + if (--ref_count == 0) + { + delete[] g_pulse_table; + delete[] g_triangle_table; + delete[] g_sine_table; + } + } + + static inline LADSPA_Data + table_pos (LADSPA_Data *table, + unsigned long freq_256, + unsigned long *accum) { + *accum += freq_256; + while (*accum >= RESOLUTION * 256) + *accum -= RESOLUTION * 256; + + return table[*accum >> 8]; + } + + static inline LADSPA_Data + envelope(Envelope *env, + int gate, + LADSPA_Data attack, + LADSPA_Data decay, + LADSPA_Data sustain, + LADSPA_Data release) + { + if (gate) + if (env->envelope_decay == 0) + { + env->envelope += (1.0F - env->envelope) * attack; + if (env->envelope >= 0.95F) + env->envelope_decay = 1; + } + else + env->envelope += (sustain - env->envelope) * decay; + else + env->envelope += -env->envelope * release; + + return env->envelope; + } + + static inline LADSPA_Data + multiplier(Organ *organ, + LADSPA_Data value) { + return 1.0 - pow (0.05, 1.0 / (organ->sample_rate * value)); + } + + static void + activate(LADSPA_Handle Instance) { + Organ *organ = (Organ*) Instance; + + organ->env0.envelope_decay = 0; + organ->env0.envelope = 0.0; + organ->env1.envelope_decay = 0; + organ->env1.envelope = 0.0; + organ->harm0_accum = 0; + organ->harm1_accum = 0; + organ->harm2_accum = 0; + organ->harm3_accum = 0; + organ->harm4_accum = 0; + organ->harm5_accum = 0; + } + + static void + run(LADSPA_Handle Instance, + unsigned long SampleCount) { + Organ *organ = (Organ*) Instance; + unsigned long i; + LADSPA_Data **ports; + LADSPA_Data *sine_table; + LADSPA_Data *reed_table; + LADSPA_Data *flute_table; + unsigned long freq_256; + unsigned long freq_256_harm0, freq_256_harm1; + unsigned long freq_256_harm2, freq_256_harm3; + unsigned long freq_256_harm4, freq_256_harm5; + double attack0, decay0, release0; + double attack1, decay1, release1; + int gate; + + ports = organ->m_ppfPorts; + + gate = (*ports[PORT_GATE] > 0.0); + if (gate == 0) + { + organ->env0.envelope_decay = 0; + organ->env1.envelope_decay = 0; + } + + sine_table = g_sine_table; + reed_table = (*ports[PORT_REED] > 0.0) ? g_pulse_table : sine_table; + flute_table = (*ports[PORT_FLUTE] > 0.0) ? g_triangle_table : sine_table; + freq_256 = (int) (*ports[PORT_FREQ] * + ((double) RESOLUTION) / + organ->sample_rate * 256.0); + + freq_256_harm0 = freq_256 / 2; + freq_256_harm1 = freq_256; + + attack0 = multiplier (organ, *ports[PORT_ATTACK_LO]); + decay0 = multiplier (organ, *ports[PORT_DECAY_LO]); + release0 = multiplier (organ, *ports[PORT_RELEASE_LO]); + + attack1 = multiplier (organ, *ports[PORT_ATTACK_HI]); + decay1 = multiplier (organ, *ports[PORT_DECAY_HI]); + release1 = multiplier (organ, *ports[PORT_RELEASE_HI]); + + if (*ports[PORT_BRASS] > 0.0) + { + freq_256_harm2 = freq_256 * 2; + freq_256_harm3 = freq_256_harm2 * 2; + freq_256_harm4 = freq_256_harm3 * 2; + freq_256_harm5 = freq_256_harm4 * 2; + + for (i = 0; i < SampleCount; i++) + ports[PORT_OUT][i] = + ((table_pos (sine_table, freq_256_harm0, &organ->harm0_accum) * *ports[PORT_HARM0] + + table_pos (sine_table, freq_256_harm1, &organ->harm1_accum) * *ports[PORT_HARM1] + + table_pos (reed_table, freq_256_harm2, &organ->harm2_accum) * *ports[PORT_HARM2]) + * envelope (&organ->env0, gate, attack0, decay0, *ports[PORT_SUSTAIN_LO], release0) + + (table_pos (sine_table, freq_256_harm3, &organ->harm3_accum) * *ports[PORT_HARM3] + + table_pos (flute_table, freq_256_harm4, &organ->harm4_accum) * *ports[PORT_HARM4] + + table_pos (flute_table, freq_256_harm5, &organ->harm5_accum) * *ports[PORT_HARM5]) + * envelope (&organ->env1, gate, attack1, decay1, *ports[PORT_SUSTAIN_HI], release1)) * *ports[PORT_VELOCITY]; + } + else + { + freq_256_harm2 = freq_256 * 3 / 2; + freq_256_harm3 = freq_256 * 2; + freq_256_harm4 = freq_256 * 3; + freq_256_harm5 = freq_256_harm3 * 2; + + for (i = 0; i < SampleCount; i++) + ports[PORT_OUT][i] = + ((table_pos (sine_table, freq_256_harm0, &organ->harm0_accum) * *ports[PORT_HARM0] + + table_pos (sine_table, freq_256_harm1, &organ->harm1_accum) * *ports[PORT_HARM1] + + table_pos (sine_table, freq_256_harm2, &organ->harm2_accum) * *ports[PORT_HARM2]) + * envelope (&organ->env0, gate, attack0, decay0, *ports[PORT_SUSTAIN_LO], release0) + + + (table_pos (reed_table, freq_256_harm3, &organ->harm3_accum) * *ports[PORT_HARM3] + + table_pos (sine_table, freq_256_harm4, &organ->harm4_accum) * *ports[PORT_HARM4] + + table_pos (flute_table, freq_256_harm5, &organ->harm5_accum) * *ports[PORT_HARM5]) + * envelope (&organ->env1, gate, attack1, decay1, *ports[PORT_SUSTAIN_HI], release1)) * *ports[PORT_VELOCITY]; + } +} + + +}; + +static LADSPA_PortDescriptor g_psPortDescriptors[] = +{ + LADSPA_PORT_AUDIO | LADSPA_PORT_OUTPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT +}; + +static const char * const g_psPortNames[] = +{ + "Out", + "Gate", + "Velocity", + "Frequency (Hz)", + "Brass", "Reed", "Flute", + "16th Harmonic", "8th Harmonic", + "5 1/3rd Harmonic", "4th Harmonic", + "2 2/3rd Harmonic", "2nd Harmonic", + "Attack Lo (Secs)", "Decay Lo (Secs)", "Sustain Lo (Level)", "Release Lo (Secs)", + "Attack Hi (Secs)", "Decay Hi (Secs)", "Sustain Hi (Level)", "Release Hi (Secs)", +}; + +static LADSPA_PortRangeHint g_psPortRangeHints[] = +{ + /* Hints, Lower bound, Upper bound */ + { 0, 0.0, 0.0 }, + { LADSPA_HINT_TOGGLED, 0.0, 0.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 1.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 20000.0 }, + { LADSPA_HINT_TOGGLED, 0.0, 0.0 }, + { LADSPA_HINT_TOGGLED, 0.0, 0.0 }, + { LADSPA_HINT_TOGGLED, 0.0, 0.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 1.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 1.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 1.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 1.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 1.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 1.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.01, 1.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.01, 1.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.00, 1.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.01, 1.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.01, 1.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.01, 1.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.00, 1.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.01, 1.0 } +}; + +void +initialise_organ() { + CMT_Descriptor * psDescriptor; + + psDescriptor = new CMT_Descriptor + (1222, + "organ", + LADSPA_PROPERTY_HARD_RT_CAPABLE, + "Organ", + CMT_MAKER("David A. Bartold"), + CMT_COPYRIGHT("1999, 2000", "David A. Bartold"), + NULL, + CMT_Instantiate, + Organ::activate, + Organ::run, + NULL, + NULL, + NULL); + + for (int i = 0; i < NUM_PORTS; i++) + psDescriptor->addPort( + g_psPortDescriptors[i], + g_psPortNames[i], + g_psPortRangeHints[i].HintDescriptor, + g_psPortRangeHints[i].LowerBound, + g_psPortRangeHints[i].UpperBound); + + registerNewPluginDescriptor(psDescriptor); +} diff --git a/plugins/LadspaEffect/cmt/src/peak.cpp b/plugins/LadspaEffect/cmt/src/peak.cpp new file mode 100644 index 000000000..d17fc2c7e --- /dev/null +++ b/plugins/LadspaEffect/cmt/src/peak.cpp @@ -0,0 +1,371 @@ +/* peak.cpp + + Computer Music Toolkit - a library of LADSPA plugins. Copyright (C) + 2000-2002 Richard W.E. Furse. The author may be contacted at + richard@muse.demon.co.uk. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public Licence as + published by the Free Software Foundation; either version 2 of the + Licence, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307, USA. */ + +/*****************************************************************************/ + +#include +#include +#include + +/*****************************************************************************/ + +#include "cmt.h" +#include "utils.h" + +/*****************************************************************************/ + +#define ET_INPUT 0 +#define ET_OUTPUT 1 + +#define ET_FILTER 2 + +/** This class is used to provide plugins that perform envelope + tracking. Peak and RMS are supported and smoothed or smoothed + maximum approaches are available. */ +class Tracker : public CMT_PluginInstance { +private: + + LADSPA_Data m_fState; + LADSPA_Data m_fSampleRate; + +public: + + Tracker(const LADSPA_Descriptor *, + unsigned long lSampleRate) + : CMT_PluginInstance(3), + m_fSampleRate(LADSPA_Data(lSampleRate)) { + } + + friend void activateTracker(void * pvHandle); + friend void runEnvelopeTracker_Peak(LADSPA_Handle Instance, + unsigned long SampleCount); + friend void runEnvelopeTracker_RMS(LADSPA_Handle Instance, + unsigned long SampleCount); + friend void runEnvelopeTracker_MaxPeak(LADSPA_Handle Instance, + unsigned long SampleCount); + friend void runEnvelopeTracker_MaxRMS(LADSPA_Handle Instance, + unsigned long SampleCount); + +}; + +/** This class provides a simple peak monitor that records the highest + signal peak present ever. It can be useful to identify clipping + cases. */ +class PeakMonitor : public CMT_PluginInstance { +private: + + LADSPA_Data m_fState; + +public: + + PeakMonitor(const LADSPA_Descriptor *, + unsigned long lSampleRate) + : CMT_PluginInstance(2) { + } + + friend void activatePeakMonitor(void * pvHandle); + friend void runPeakMonitor(LADSPA_Handle Instance, + unsigned long SampleCount); + +}; + +/*****************************************************************************/ + +void +activateTracker(void * pvHandle) { + ((Tracker *)pvHandle)->m_fState = 0; +} + +/*****************************************************************************/ + +void +activatePeakMonitor(void * pvHandle) { + ((PeakMonitor *)pvHandle)->m_fState = 0; +} + +/*****************************************************************************/ + +void +runEnvelopeTracker_Peak(LADSPA_Handle Instance, + unsigned long SampleCount) { + Tracker * poProcessor = (Tracker *)Instance; + LADSPA_Data * pfInput = poProcessor->m_ppfPorts[ET_INPUT]; + LADSPA_Data fDrag = *(poProcessor->m_ppfPorts[ET_FILTER]); + LADSPA_Data fOneMinusDrag = 1 - fDrag; + LADSPA_Data &rfState = poProcessor->m_fState; + for (unsigned long lSampleIndex = 0; + lSampleIndex < SampleCount; + lSampleIndex++) { + LADSPA_Data fInput = *(pfInput++); + LADSPA_Data fEnvelopeTarget = fabs(fInput); + rfState = rfState * fDrag + fEnvelopeTarget * fOneMinusDrag; + } + *(poProcessor->m_ppfPorts[ET_OUTPUT]) = rfState; +} + +/*****************************************************************************/ + +void +runEnvelopeTracker_RMS(LADSPA_Handle Instance, + unsigned long SampleCount) { + Tracker * poProcessor = (Tracker *)Instance; + LADSPA_Data * pfInput = poProcessor->m_ppfPorts[ET_INPUT]; + LADSPA_Data fDrag = *(poProcessor->m_ppfPorts[ET_FILTER]); + LADSPA_Data fOneMinusDrag = 1 - fDrag; + LADSPA_Data &rfState = poProcessor->m_fState; + for (unsigned long lSampleIndex = 0; + lSampleIndex < SampleCount; + lSampleIndex++) { + LADSPA_Data fInput = *(pfInput++); + LADSPA_Data fEnvelopeTarget = fInput * fInput; + rfState = rfState * fDrag + fEnvelopeTarget * fOneMinusDrag; + } + *(poProcessor->m_ppfPorts[ET_OUTPUT]) = sqrt(rfState); +} + +/*****************************************************************************/ + +void +runEnvelopeTracker_MaxPeak(LADSPA_Handle Instance, + unsigned long SampleCount) { + Tracker * poProcessor = (Tracker *)Instance; + LADSPA_Data * pfInput = poProcessor->m_ppfPorts[ET_INPUT]; + LADSPA_Data fDrag = calculate60dBDrag(*(poProcessor->m_ppfPorts[ET_FILTER]), + poProcessor->m_fSampleRate); + LADSPA_Data &rfState = poProcessor->m_fState; + for (unsigned long lSampleIndex = 0; + lSampleIndex < SampleCount; + lSampleIndex++) { + LADSPA_Data fInput = *(pfInput++); + LADSPA_Data fEnvelopeTarget = fabs(fInput); + if (fEnvelopeTarget > rfState) + rfState = fEnvelopeTarget; + else { + rfState *= fDrag; + if (fEnvelopeTarget > rfState) + rfState = fEnvelopeTarget; + } + } + *(poProcessor->m_ppfPorts[ET_OUTPUT]) = rfState; +} + +/*****************************************************************************/ + +void +runEnvelopeTracker_MaxRMS(LADSPA_Handle Instance, + unsigned long SampleCount) { + Tracker * poProcessor = (Tracker *)Instance; + LADSPA_Data * pfInput = poProcessor->m_ppfPorts[ET_INPUT]; + LADSPA_Data fDrag = calculate60dBDrag(*(poProcessor->m_ppfPorts[ET_FILTER]), + poProcessor->m_fSampleRate); + LADSPA_Data &rfState = poProcessor->m_fState; + for (unsigned long lSampleIndex = 0; + lSampleIndex < SampleCount; + lSampleIndex++) { + LADSPA_Data fInput = *(pfInput++); + LADSPA_Data fEnvelopeTarget = fInput * fInput; + if (fEnvelopeTarget > rfState) + rfState = fEnvelopeTarget; + else { + rfState *= fDrag; + if (fEnvelopeTarget > rfState) + rfState = fEnvelopeTarget; + } + } + *(poProcessor->m_ppfPorts[ET_OUTPUT]) = sqrt(rfState); +} + +/*****************************************************************************/ + +void +runPeakMonitor(LADSPA_Handle Instance, + unsigned long SampleCount) { + PeakMonitor * poProcessor = (PeakMonitor *)Instance; + LADSPA_Data * pfInput = poProcessor->m_ppfPorts[ET_INPUT]; + LADSPA_Data &rfState = poProcessor->m_fState; + for (unsigned long lSampleIndex = 0; + lSampleIndex < SampleCount; + lSampleIndex++) { + LADSPA_Data fInput = *(pfInput++); + LADSPA_Data fEnvelopeTarget = fabs(fInput); + if (rfState < fEnvelopeTarget) + rfState = fEnvelopeTarget; + } + *(poProcessor->m_ppfPorts[ET_OUTPUT]) = rfState; +} + +/*****************************************************************************/ + +void +initialise_peak() { + + CMT_Descriptor * psDescriptor; + + psDescriptor = new CMT_Descriptor + (1078, + "track_peak", + LADSPA_PROPERTY_HARD_RT_CAPABLE, + "Envelope Tracker (Peak)", + CMT_MAKER("Richard W.E. Furse"), + CMT_COPYRIGHT("2000-2002", "Richard W.E. Furse"), + NULL, + CMT_Instantiate, + activateTracker, + runEnvelopeTracker_Peak, + NULL, + NULL, + NULL); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + "Input"); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_CONTROL, + "Output", + LADSPA_HINT_BOUNDED_BELOW, + 0); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + "Smoothing Factor", + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE, + 0, + 1); + registerNewPluginDescriptor(psDescriptor); + + psDescriptor = new CMT_Descriptor + (1079, + "track_rms", + LADSPA_PROPERTY_HARD_RT_CAPABLE, + "Envelope Tracker (RMS)", + CMT_MAKER("Richard W.E. Furse"), + CMT_COPYRIGHT("2000-2002", "Richard W.E. Furse"), + NULL, + CMT_Instantiate, + activateTracker, + runEnvelopeTracker_RMS, + NULL, + NULL, + NULL); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + "Input"); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_CONTROL, + "Output", + LADSPA_HINT_BOUNDED_BELOW, + 0); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + "Smoothing Factor", + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE, + 0, + 1); + registerNewPluginDescriptor(psDescriptor); + + psDescriptor = new CMT_Descriptor + (1080, + "track_max_peak", + LADSPA_PROPERTY_HARD_RT_CAPABLE, + "Envelope Tracker (Maximum Peak)", + CMT_MAKER("Richard W.E. Furse"), + CMT_COPYRIGHT("2000-2002", "Richard W.E. Furse"), + NULL, + CMT_Instantiate, + activateTracker, + runEnvelopeTracker_MaxPeak, + NULL, + NULL, + NULL); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + "Input"); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_CONTROL, + "Output", + LADSPA_HINT_BOUNDED_BELOW, + 0); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + "Envelope Forgetting Factor (s/60dB)", + (LADSPA_HINT_BOUNDED_BELOW + | LADSPA_HINT_DEFAULT_MAXIMUM), + 0, + 10); + registerNewPluginDescriptor(psDescriptor); + + psDescriptor = new CMT_Descriptor + (1081, + "track_max_rms", + LADSPA_PROPERTY_HARD_RT_CAPABLE, + "Envelope Tracker (Maximum RMS)", + CMT_MAKER("Richard W.E. Furse"), + CMT_COPYRIGHT("2000-2002", "Richard W.E. Furse"), + NULL, + CMT_Instantiate, + activateTracker, + runEnvelopeTracker_MaxRMS, + NULL, + NULL, + NULL); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + "Input"); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_CONTROL, + "Output", + LADSPA_HINT_BOUNDED_BELOW, + 0); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + "Envelope Forgetting Factor (s/60dB)", + (LADSPA_HINT_BOUNDED_BELOW + | LADSPA_HINT_DEFAULT_MAXIMUM), + 0, + 10); + registerNewPluginDescriptor(psDescriptor); + + psDescriptor = new CMT_Descriptor + (1082, + "peak", + LADSPA_PROPERTY_HARD_RT_CAPABLE, + "Peak Monitor", + CMT_MAKER("Richard W.E. Furse"), + CMT_COPYRIGHT("2000", "Richard W.E. Furse"), + NULL, + CMT_Instantiate, + activatePeakMonitor, + runPeakMonitor, + NULL, + NULL, + NULL); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + "Input"); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_CONTROL, + "Peak", + LADSPA_HINT_BOUNDED_BELOW, + 0); + registerNewPluginDescriptor(psDescriptor); +} + +/*****************************************************************************/ + +/* EOF */ diff --git a/plugins/LadspaEffect/cmt/src/phasemod.cpp b/plugins/LadspaEffect/cmt/src/phasemod.cpp new file mode 100644 index 000000000..0a8c8e27c --- /dev/null +++ b/plugins/LadspaEffect/cmt/src/phasemod.cpp @@ -0,0 +1,465 @@ +/* phasemod.cpp + + Phase Modulated Voice - Phase Modulation synthesizer voice + Copyright (c) 2001 David A. Bartold + + Computer Music Toolkit - a library of LADSPA plugins. Copyright (C) + 2000 Richard W.E. Furse. The author may be contacted at + richard@muse.demon.co.uk. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public Licence as + published by the Free Software Foundation; either version 2 of the + Licence, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307, USA. */ + +/*****************************************************************************/ + +#include +#include +#include "cmt.h" + +#define PORT_OUT 0 +#define PORT_GATE 1 +#define PORT_VELOCITY 2 +#define PORT_FREQ 3 +#define PORT_DCO_MODULATION 4 +#define PORT_DCO_OCTAVE 5 +#define PORT_DCO_WAVEFORM 6 +#define PORT_DCO_ATTACK 7 +#define PORT_DCO_DECAY 8 +#define PORT_DCO_SUSTAIN 9 +#define PORT_DCO_RELEASE 10 + +#define DCO_MULTIPLIER 7 + +#define NUM_PORTS 46 + +#ifndef PI +#define PI 3.14159265358979F +#endif + +typedef struct Envelope +{ + int envelope_decay; + LADSPA_Data envelope; + + Envelope () : envelope_decay (0), envelope (0.0) {} +} Envelope; + +class PhaseMod : public CMT_PluginInstance +{ + LADSPA_Data sample_rate; + + int trigger; + + Envelope dco_env[6]; + LADSPA_Data dco_accum[6]; + +public: + PhaseMod(const LADSPA_Descriptor * Descriptor, + unsigned long SampleRate) + : CMT_PluginInstance(NUM_PORTS), + sample_rate (SampleRate), + trigger (0) { + int i; + + for (i = 0; i < 6; i++) + dco_accum[i] = 0.0; + } + + ~PhaseMod () { + } + + static inline LADSPA_Data + tri(LADSPA_Data x) { + if (x > 0.75F) + x = x - 1.0F; + else if (x > 0.25F) + x = 0.5F - x; + + return x * 4.0F; + } + + static inline LADSPA_Data + envelope(Envelope *env, + int gate, + LADSPA_Data attack, + LADSPA_Data decay, + LADSPA_Data sustain, + LADSPA_Data release) + { + if (gate) + if (env->envelope_decay == 0) + { + env->envelope += (1.0F - env->envelope) * attack; + if (env->envelope >= 0.95F) + env->envelope_decay = 1; + } + else + env->envelope += (sustain - env->envelope) * decay; + else + env->envelope += -env->envelope * release; + + return env->envelope; + } + + static void + activate(LADSPA_Handle Instance) { + PhaseMod *phasemod = (PhaseMod*) Instance; + int i; + + phasemod->trigger = 0; + + for (i = 0; i < 6; i++) + { + phasemod->dco_env[i].envelope_decay = 0; + phasemod->dco_env[i].envelope = 0.0; + phasemod->dco_accum[i] = 0.0; + } + } + + static inline LADSPA_Data + osc(int waveform, + LADSPA_Data inc, + LADSPA_Data phasemod, + LADSPA_Data *accum) { + LADSPA_Data pos; + + *accum += inc; + while (*accum >= 1.0F) + *accum -= 1.0F; + + pos = *accum + phasemod; + while (pos < 0.0F) pos += 1.0F; + while (pos > 1.0F) pos -= 1.0F; + + /* 0 = Sine wave */ + if (waveform == 0) + return sin (pos * 2.0 * PI); + + /* 1 = Triangle wave */ + else if (waveform == 1) + return tri (pos); + + /* 2 = Square wave */ + else if (waveform == 2) + return (pos > 0.5) ? 1.0F : -1.0F; + + /* 3 = Sawtooth wave */ + else if (waveform == 3) + return pos * 2.0F - 1.0F; + + /* 4 = Fullwave Rectified Sine wave */ + else if (waveform == 4) + return fabs (pos * PI); + + /* 5 = Static */ + else + return (rand () & 1) ? -1.0F : 1.0F; + } + + static LADSPA_Data + calc_inc(LADSPA_Data oct, + LADSPA_Data freq, + LADSPA_Data sample_rate) { + return pow (2.0, oct) * freq / sample_rate; + } + + static inline LADSPA_Data + multiplier(PhaseMod *phasemod, + LADSPA_Data value) { + return 1.0 - pow (0.05, 1.0 / (phasemod->sample_rate * value)); + } + + static void + run(LADSPA_Handle Instance, + unsigned long SampleCount) { + PhaseMod *phasemod = (PhaseMod*) Instance; + + unsigned long i, j; + int gate; + int waveform[6]; + int store[6]; + LADSPA_Data inc[6]; + LADSPA_Data attack[6]; + LADSPA_Data decay[6]; + LADSPA_Data release[6]; + LADSPA_Data **ports; + LADSPA_Data vol; + + ports = phasemod->m_ppfPorts; + gate = (*ports[PORT_GATE] > 0.0); + + if (gate == 1 && phasemod->trigger == 0) + for (i = 0; i < 6; i++) + phasemod->dco_env[i].envelope_decay = 0; + + phasemod->trigger = gate; + + for (i = 0; i < 6; i++) + { + int offset = DCO_MULTIPLIER * i; + + waveform[i] = (int) *ports[PORT_DCO_WAVEFORM + offset]; + inc[i] = calc_inc (*ports[PORT_DCO_OCTAVE + offset], + *ports[PORT_FREQ], + phasemod->sample_rate); + attack[i] = multiplier (phasemod, *ports[PORT_DCO_ATTACK + offset]); + decay[i] = multiplier (phasemod, *ports[PORT_DCO_DECAY + offset]); + release[i] = multiplier (phasemod, *ports[PORT_DCO_RELEASE + offset]); + } + + j = 1; + for (i = 0; i < 5; i++) + if (*ports[PORT_DCO_MODULATION + (i + 1) * DCO_MULTIPLIER] < 0.0001) + store[i] = 1, j++; + else + store[i] = 0; + store[5] = 1; + vol = 1.0 / j; + + for (i = 0; i < SampleCount; i++) + { + LADSPA_Data sample; + LADSPA_Data prev; + + sample = 0.0; + prev = 1.0; + for (j = 0; j < 6; j++) + { + int offset = DCO_MULTIPLIER * j; + + prev = + envelope (&phasemod->dco_env[j], + gate, attack[j], decay[j], + *ports[PORT_DCO_SUSTAIN + offset], release[j]) * + osc (waveform[j], inc[j], + prev * *ports[PORT_DCO_MODULATION + offset], + &phasemod->dco_accum[j]) * + *ports[PORT_VELOCITY]; + + if (store[j]) + sample += prev; + } + ports[PORT_OUT][i] = sample * vol; + } + } +}; + +static LADSPA_PortDescriptor g_psPortDescriptors[] = +{ + LADSPA_PORT_AUDIO | LADSPA_PORT_OUTPUT, + + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT +}; + +static const char * const g_psPortNames[] = +{ + "Out", + + "Gate", + "Velocity", + "Frequency (Hz)", + + "DCO1 Modulation", + "DCO1 Octave", + "DCO1 Waveform", + "DCO1 Attack", + "DCO1 Decay", + "DCO1 Sustain", + "DCO1 Release", + + "DCO2 Modulation", + "DCO2 Octave", + "DCO2 Waveform", + "DCO2 Attack", + "DCO2 Decay", + "DCO2 Sustain", + "DCO2 Release", + + "DCO3 Modulation", + "DCO3 Octave", + "DCO3 Waveform", + "DCO3 Attack", + "DCO3 Decay", + "DCO3 Sustain", + "DCO3 Release", + + "DCO4 Modulation", + "DCO4 Octave", + "DCO4 Waveform", + "DCO4 Attack", + "DCO4 Decay", + "DCO4 Sustain", + "DCO4 Release", + + "DCO5 Modulation", + "DCO5 Octave", + "DCO5 Waveform", + "DCO5 Attack", + "DCO5 Decay", + "DCO5 Sustain", + "DCO5 Release", + + "DCO6 Modulation", + "DCO6 Octave", + "DCO6 Waveform", + "DCO6 Attack", + "DCO6 Decay", + "DCO6 Sustain", + "DCO6 Release" +}; + +static LADSPA_PortRangeHint g_psPortRangeHints[] = +{ + /* Hints, Lower bound, Upper bound */ + { 0, 0.0, 0.0 }, + + { LADSPA_HINT_TOGGLED, 0.0, 0.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 1.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 20000.0 }, + + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 1.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, -2.0, 2.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_INTEGER, -0.1, 5.1 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.01, 8.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.01, 8.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 1.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.01, 8.0 }, + + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 1.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, -2.0, 2.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_INTEGER, -0.1, 5.1 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.01, 8.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.01, 8.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 1.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.01, 8.0 }, + + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 1.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, -2.0, 2.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_INTEGER, -0.1, 5.1 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.01, 8.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.01, 8.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 1.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.01, 8.0 }, + + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 1.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, -2.0, 2.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_INTEGER, -0.1, 5.1 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.01, 8.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.01, 8.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 1.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.01, 8.0 }, + + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 1.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, -2.0, 2.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_INTEGER, -0.1, 5.1 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.01, 8.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.01, 8.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 1.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.01, 8.0 }, + + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 1.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, -2.0, 2.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_INTEGER, -0.1, 5.1 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.01, 8.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.01, 8.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 1.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.01, 8.0 } +}; + +void +initialise_phasemod() { + CMT_Descriptor * psDescriptor; + + psDescriptor = new CMT_Descriptor + (1226, + "phasemod", + LADSPA_PROPERTY_HARD_RT_CAPABLE, + "Phase Modulated Voice", + CMT_MAKER("David A. Bartold"), + CMT_COPYRIGHT("2001", "David A. Bartold"), + NULL, + CMT_Instantiate, + PhaseMod::activate, + PhaseMod::run, + NULL, + NULL, + NULL); + + for (int i = 0; i < NUM_PORTS; i++) + psDescriptor->addPort( + g_psPortDescriptors[i], + g_psPortNames[i], + g_psPortRangeHints[i].HintDescriptor, + g_psPortRangeHints[i].LowerBound, + g_psPortRangeHints[i].UpperBound); + + registerNewPluginDescriptor(psDescriptor); +} diff --git a/plugins/LadspaEffect/cmt/src/pink.cpp b/plugins/LadspaEffect/cmt/src/pink.cpp new file mode 100644 index 000000000..bf3e1bb48 --- /dev/null +++ b/plugins/LadspaEffect/cmt/src/pink.cpp @@ -0,0 +1,245 @@ +/* pink.cpp + + Interpolated pink noise plugins for use as control signals. + + (c) 2002 Nathaniel Virgo + + Computer Music Toolkit - a library of LADSPA plugins. Copyright (C) + 2000-2002 Richard W.E. Furse. The author may be contacted at + richard@muse.demon.co.uk. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public Licence as + published by the Free Software Foundation; either version 2 of the + Licence, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307, USA. */ + +/*****************************************************************************/ + +#include + +/*****************************************************************************/ + +#include "cmt.h" + +#include "pinknoise.h" +#include "utils.h" + +/*****************************************************************************/ + +namespace pink { + + enum { + port_frequency = 0, + port_output = 1, + n_ports = 2 + }; + + /** This plugin generates a signal which approximates the effect of low-pass + filtered pink noise, which makes for an interesting randomly changing + control parameter. It should probably use sinc interpolation, but in fact + it uses third-order splines, which sound more-or-less okay to me. */ + class Plugin : public CMT_PluginInstance { + private: + + LADSPA_Data sample_rate; + + PinkNoise noise_source; + LADSPA_Data *data_points; + int first_point; + unsigned long counter; + float multiplier; // 1/(max counter value) + + public: + + Plugin(const LADSPA_Descriptor *, + unsigned long s_rate) : + CMT_PluginInstance(n_ports), + sample_rate(s_rate) { + data_points = new LADSPA_Data[4]; + } + + ~Plugin() { + delete [] data_points; + } + + friend void activate(LADSPA_Handle instance); + + friend void run_interpolated_audio(LADSPA_Handle instance, + unsigned long sample_count); + + friend void run_interpolated_control(LADSPA_Handle instance, + unsigned long sample_count); + + }; + + void activate(LADSPA_Handle instance) { + Plugin *pp = (Plugin *) instance; + Plugin &p = *pp; + + p.noise_source.reset(); + for (int i=0; i<4; ++i) + p.data_points[i] = p.noise_source.getValue(); + p.first_point = 0; + p.counter = 0; + p.multiplier = 1; + } + + inline float thirdInterp(const float &x, + const float &L1,const float &L0, + const float &H0,const float &H1) { + return + L0 + + .5f* + x*(H0-L1 + + x*(H0 + L0*(-2) + L1 + + x*( (H0 - L0)*9 + (L1 - H1)*3 + + x*((L0 - H0)*15 + (H1 - L1)*5 + + x*((H0 - L0)*6 + (L1 - H1)*2 ))))); + } + + void run_interpolated_audio(LADSPA_Handle instance, + unsigned long sample_count) { + + Plugin *pp = (Plugin *) instance; + Plugin &p = *pp; + + LADSPA_Data frequency = *pp->m_ppfPorts[port_frequency]; + LADSPA_Data * out = pp->m_ppfPorts[port_output]; + + if (frequency<=0) { + LADSPA_Data value = thirdInterp( 1 - p.counter*p.multiplier, + p.data_points[ p.first_point ], + p.data_points[ (p.first_point+1) % 4 ], + p.data_points[ (p.first_point+2) % 4 ], + p.data_points[ (p.first_point+3) % 4 ] ); + for (unsigned long i=0; im_ppfPorts[port_frequency]; + LADSPA_Data * out = pp->m_ppfPorts[port_output]; + + float value = thirdInterp( 1 - p.counter*p.multiplier, + p.data_points[ p.first_point ], + p.data_points[ (p.first_point+1) % 4 ], + p.data_points[ (p.first_point+2) % 4 ], + p.data_points[ (p.first_point+3) % 4 ] ); + if (frequency>0) { + frequency = BOUNDED_ABOVE(frequency, p.sample_rate/sample_count); + while (p.counter <= sample_count) { + p.data_points[ p.first_point ] = p.noise_source.getValue(); + p.first_point = (p.first_point + 1) % 4; + p.multiplier = frequency/p.sample_rate; + p.counter += (unsigned long)(p.sample_rate/frequency); + } + p.counter -= (p.counter < sample_count) ? p.counter : sample_count; + } + *(out)=value; + } + + void initialise() { + CMT_Descriptor * d = new CMT_Descriptor + (1841, + "pink_interpolated_audio", + 0, + "Pink Noise (Interpolated)", + CMT_MAKER("Nathaniel Virgo"), + CMT_COPYRIGHT("2002", "Nathaniel Virgo"), + NULL, + CMT_Instantiate, + activate, + run_interpolated_audio, + NULL, + NULL, + NULL); + d->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + "Highest frequency", + (LADSPA_HINT_BOUNDED_BELOW + | LADSPA_HINT_BOUNDED_ABOVE + | LADSPA_HINT_SAMPLE_RATE + | LADSPA_HINT_DEFAULT_1), + 0, + 1); + d->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output"); + registerNewPluginDescriptor(d); + + // the following has been commented out because I'm pretty sure that + // control-rate outputs don't make sense for the vast majority of hosts. + // (SSM being the notable exception) + /* + d = new CMT_Descriptor + (1842, + "pink_interpolated_control", + 0, + "Pink Noise (Interpolated, control rate)", + CMT_MAKER("Nathaniel Virgo"), + CMT_COPYRIGHT("2002", "Nathaniel Virgo"), + NULL, + CMT_Instantiate, + activate, + run_interpolated_control, + NULL, + NULL, + NULL); + d->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + "Highest frequency", + (LADSPA_HINT_BOUNDED_BELOW + | LADSPA_HINT_BOUNDED_ABOVE + | LADSPA_HINT_SAMPLE_RATE + | LADSPA_HINT_DEFAULT_1), + 0, + 0.002); // arbitrary low value (sensible for sample_count around 500) + d->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_CONTROL, + "Output"); + registerNewPluginDescriptor(d); + */ + } + +} // end of namespace + +/*****************************************************************************/ + +/* EOF */ diff --git a/plugins/LadspaEffect/cmt/src/pink_full.cpp b/plugins/LadspaEffect/cmt/src/pink_full.cpp new file mode 100644 index 000000000..1c4de1602 --- /dev/null +++ b/plugins/LadspaEffect/cmt/src/pink_full.cpp @@ -0,0 +1,115 @@ +/* pink_full.cpp + + A full-frequency pink noise generator. + + (c) 2002 Nathaniel Virgo + + Part of the Computer Music Toolkit - a library of LADSPA plugins. + The Computer Music Toolkit is Copyright (C) 2000-2002 + Richard W.E. Furse. The author may be contacted at + richard@muse.demon.co.uk. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public Licence as + published by the Free Software Foundation; either version 2 of the + Licence, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307, USA. */ + +/*****************************************************************************/ + +#include + +/*****************************************************************************/ + +#include "cmt.h" + +#include "pinknoise.h" +#include "utils.h" + +/*****************************************************************************/ + +namespace pink_full { + + enum { + port_output = 0, + + n_ports = 1 + }; + + /** This plugin generates a signal which approximates pink noise, using the + Voss-McCartney algorithm described at www.firstpr.com.au/dsp/pink-noise/ */ + class Plugin : public CMT_PluginInstance { + private: + LADSPA_Data sample_rate; + PinkNoise noise_source; + public: + + Plugin(const LADSPA_Descriptor *, + unsigned long s_rate) : + CMT_PluginInstance(n_ports), + sample_rate(s_rate) { + } + + ~Plugin() { + } + + friend void activate(LADSPA_Handle instance); + + friend void run(LADSPA_Handle instance, + unsigned long sample_count); + }; + + void activate(LADSPA_Handle instance) { + Plugin *pp = (Plugin *) instance; + Plugin &p = *pp; + + p.noise_source.reset(); + } + + void run(LADSPA_Handle instance, + unsigned long sample_count) { + + Plugin *pp = (Plugin *) instance; + Plugin &p = *pp; + + LADSPA_Data * out = pp->m_ppfPorts[port_output]; + + for (unsigned long i=0; i, + activate, + run, + NULL, + NULL, + NULL); + d->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output"); + registerNewPluginDescriptor(d); + } + +} // end of namespace + +/*****************************************************************************/ + +/* EOF */ diff --git a/plugins/LadspaEffect/cmt/src/pink_sh.cpp b/plugins/LadspaEffect/cmt/src/pink_sh.cpp new file mode 100644 index 000000000..13f2a69d5 --- /dev/null +++ b/plugins/LadspaEffect/cmt/src/pink_sh.cpp @@ -0,0 +1,148 @@ +/* pink_sh.cpp + + A sample-and-hold pink noise generator. + + (c) 2002 Nathaniel Virgo + + Part of the Computer Music Toolkit - a library of LADSPA plugins. + The Computer Music Toolkit is Copyright (C) 2000-2002 + Richard W.E. Furse. The author may be contacted at + richard@muse.demon.co.uk. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public Licence as + published by the Free Software Foundation; either version 2 of the + Licence, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307, USA. */ + +/*****************************************************************************/ + +#include + +/*****************************************************************************/ + +#include "cmt.h" + +#include "pinknoise.h" +#include "utils.h" + +/*****************************************************************************/ + +namespace pink_sh { + + enum { + port_frequency = 0, + port_output = 1, + n_ports = 2 + }; + + /** This plugin generates a signal which approximates stepped + (sample-and-hold like) pink noise, using the + Voss-McCartney algorithm described at www.firstpr.com.au/dsp/pink-noise/ */ + class Plugin : public CMT_PluginInstance { + private: + LADSPA_Data sample_rate; + PinkNoise noise_source; + unsigned counter; + public: + + Plugin(const LADSPA_Descriptor *, + unsigned long s_rate) : + CMT_PluginInstance(n_ports), + sample_rate(s_rate) { + } + + ~Plugin() { + } + + friend void activate(LADSPA_Handle instance); + + friend void run(LADSPA_Handle instance, + unsigned long sample_count); + }; + + void activate(LADSPA_Handle instance) { + Plugin *pp = (Plugin *) instance; + Plugin &p = *pp; + + p.noise_source.reset(); + p.counter = 0; + } + + void run(LADSPA_Handle instance, + unsigned long sample_count) { + + Plugin *pp = (Plugin *) instance; + Plugin &p = *pp; + + LADSPA_Data frequency = *pp->m_ppfPorts[port_frequency]; + LADSPA_Data * out = pp->m_ppfPorts[port_output]; + + frequency = BOUNDED_ABOVE(frequency,p.sample_rate); + unsigned remain = sample_count; + + if (frequency > 0) { + while (remain) { + unsigned jump_samples = (remain, + activate, + run, + NULL, + NULL, + NULL); + d->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + "Sample and hold frequency", + (LADSPA_HINT_BOUNDED_BELOW + | LADSPA_HINT_BOUNDED_ABOVE + | LADSPA_HINT_SAMPLE_RATE + | LADSPA_HINT_DEFAULT_1), + 0, 0.02); + d->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output"); + registerNewPluginDescriptor(d); + } + +} // end of namespace + +/*****************************************************************************/ + +/* EOF */ + diff --git a/plugins/LadspaEffect/cmt/src/pinknoise.h b/plugins/LadspaEffect/cmt/src/pinknoise.h new file mode 100644 index 000000000..c6b350ff8 --- /dev/null +++ b/plugins/LadspaEffect/cmt/src/pinknoise.h @@ -0,0 +1,111 @@ +/* pinknoise.h + + pink noise generating class using the Voss-McCartney algorithm, as + described at www.firstpr.com.au/dsp/pink-noise/ + + (c) 2002 Nathaniel Virgo + + Computer Music Toolkit - a library of LADSPA plugins. Copyright (C) + 2000-2002 Richard W.E. Furse. The author may be contacted at + richard@muse.demon.co.uk. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public Licence as + published by the Free Software Foundation; either version 2 of the + Licence, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307, USA. */ + +#ifndef _PINKNOISE_H +#define _PINKNOISE_H + +#include + +typedef unsigned int CounterType; +typedef float DataValue; + +const int n_generators = 8*sizeof(CounterType); + +class PinkNoise { + private: + + CounterType counter; + DataValue * generators; + DataValue last_value; + + public: + + PinkNoise() { + generators = new DataValue[n_generators]; + reset(); + } + + ~PinkNoise() {delete [] generators;}; + + void reset() { + counter = 0; + last_value = 0; + for (int i=0; i>= 1; + index++; + // this loop means that the plugins cannot be labelled as + // capable of hard real-time performance. + } + + last_value -= generators[index]; + generators[index] = 2*(rand()/DataValue(RAND_MAX))-1; + last_value += generators[index]; + } + + counter++; + + return last_value; + } + + inline DataValue getValue() { + return getUnscaledValue()/n_generators; + } + + inline DataValue getLastValue() { + return last_value/n_generators; + } + + inline DataValue getValue2() { + // adding some white noise gets rid of some nulls in the frequency spectrum + // but makes the signal spikier, so possibly not so good for control signals. + return (getUnscaledValue() + rand()/DataValue(RAND_MAX*0.5)-1)/(n_generators+1); + } + +}; + +#endif + + + + + + + + + diff --git a/plugins/LadspaEffect/cmt/src/run_adding.h b/plugins/LadspaEffect/cmt/src/run_adding.h new file mode 100644 index 000000000..2ab1892af --- /dev/null +++ b/plugins/LadspaEffect/cmt/src/run_adding.h @@ -0,0 +1,159 @@ +/* run_adding.h + + (c) 2002 Nathaniel Virgo + + a few simple inline functions that can be used with templates + to get run_adding for free. + + Computer Music Toolkit - a library of LADSPA plugins. Copyright (C) + 2000-2002 Richard W.E. Furse. The author may be contacted at + richard@muse.demon.co.uk. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public Licence as + published by the Free Software Foundation; either version 2 of the + Licence, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307, USA. */ + +/*****************************************************************************/ + +/* + How to use this + --------------- + + Templates can be used to automatically generate code for both the run and + run_adding LADSPA functions. Simply define the plugin's run function as + + template + void run_foo(LADSPA_Handle Instance, unsigned long SampleCount); + + and in the body of the function use + + write_output(pfOutput, fValue, poFoo->m_fRunAddingGain); + + instead of + + *(pfOutput++) = fValue. + + and be sure to include a set_run_adding_gain function. + then set the LADSPA run function as + + run_foo; + + and the run_adding function as + + run_foo; + + With -O1 or greater g++ will inline the write_output function, and + although the code ends up slightly bigger there is no overhead compared to + having two seperate functions. + + Sometimes the run_adding_gain function can be made more efficient than this + - for instance, if the output is multiplied by a gain already then you are + doing one more multiplication than necessary on every sample. It's a lot + less code to maintain, though, and it should still save some work for the + host compared to not having a run_adding function. +*/ + +/*****************************************************************************/ + +#include + +/*****************************************************************************/ + +typedef void OutputFunction(LADSPA_Data *&, const LADSPA_Data &, + const LADSPA_Data &); + +inline void write_output_normal(LADSPA_Data *&out, const LADSPA_Data &value, + const LADSPA_Data &run_adding_gain) +{ + *(out++) = value; +} + +inline void write_output_adding(LADSPA_Data *&out, const LADSPA_Data &value, + const LADSPA_Data &run_adding_gain) +{ + *(out++) += value*run_adding_gain; +} + +/*****************************************************************************/ + +/* + If the plugin has a control-rate ouput then you don't want the write_output + function to try to increment the pointer. To achieve this, use + + write_control(pfOutput, fValue, poFoo->m_fRunAddingGain); + + instead of just + + write_output(...); + + I realise this feels a bit hacky, but it works. +*/ + +template +inline void write_control(LADSPA_Data *const, + const LADSPA_Data &, const LADSPA_Data &); + +template <> +inline void write_control(LADSPA_Data *const out, + const LADSPA_Data &value, + const LADSPA_Data &run_adding_gain) +{ + *out = value; +} + +template <> +inline void write_control(LADSPA_Data *const out, + const LADSPA_Data &value, + const LADSPA_Data &run_adding_gain) +{ + *out += value*run_adding_gain; +} + + +/*****************************************************************************/ + +/* + This next bit is an attempt to facilitate the writing of slightly + more efficent run_adding functions without writing two seperate pieces of + code. You can say something like + + LADSPA_Data fOutputGain = ... ; + ... + fOutputGain *= get_gain(poFoo->m_fRunAddingGain); + ... + write_output(pfOutput, fValue*fOutputGain, 1.0f); + + in run_foo. With -O1 or greater g++ should inline the functions and + optimise away the multiplies by 1.0f, so in run_foo + fOutputGain will be multiplied by m_fRunAddingGain and in + run_foo it will be left alone. + + This does not make for very clear code, sorry about that. See disintegrator.cpp + for an example. +*/ + +template +inline float get_gain(const LADSPA_Data &); + +template <> +inline float get_gain(const LADSPA_Data &) +{ + return 1.0f; +} + +template <> +inline float get_gain(const LADSPA_Data &run_adding_gain) +{ + return run_adding_gain; +} diff --git a/plugins/LadspaEffect/cmt/src/sine.cpp b/plugins/LadspaEffect/cmt/src/sine.cpp new file mode 100644 index 000000000..7b27ff4cf --- /dev/null +++ b/plugins/LadspaEffect/cmt/src/sine.cpp @@ -0,0 +1,296 @@ +/* sine.cpp + + Computer Music Toolkit - a library of LADSPA plugins. Copyright (C) + 2000-2002 Richard W.E. Furse. The author may be contacted at + richard@muse.demon.co.uk. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public Licence as + published by the Free Software Foundation; either version 2 of the + Licence, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307, USA. */ + +/*****************************************************************************/ + +#include +#include + +/*****************************************************************************/ + +#include "cmt.h" + +/*****************************************************************************/ + +/* Sine table size is given by (1 << SINE_TABLE_BITS). */ +#define SINE_TABLE_BITS 14 +#define SINE_TABLE_SHIFT (8 * sizeof(unsigned long) - SINE_TABLE_BITS) + +/*****************************************************************************/ + +LADSPA_Data * g_pfSineTable = NULL; +LADSPA_Data g_fPhaseStepBase = 0; + +/*****************************************************************************/ + +void +initialise_sine_wavetable() { + if (g_pfSineTable == NULL) { + long lTableSize = (1 << SINE_TABLE_BITS); + double dShift = (double(M_PI) * 2) / lTableSize; + g_pfSineTable = new float[lTableSize]; + if (g_pfSineTable != NULL) + for (long lIndex = 0; lIndex < lTableSize; lIndex++) + g_pfSineTable[lIndex] = LADSPA_Data(sin(dShift * lIndex)); + } + if (g_fPhaseStepBase == 0) { + g_fPhaseStepBase = (LADSPA_Data)pow(2, sizeof(unsigned long) * 8); + } +} + +/*****************************************************************************/ + +#define OSC_FREQUENCY 0 +#define OSC_AMPLITUDE 1 +#define OSC_OUTPUT 2 + +/* This class provides sine wavetable oscillator + plugins. Band-limiting to avoid aliasing is trivial because of the + waveform in use. Four versions of the oscillator are provided, + allowing the amplitude and frequency inputs of the oscillator to be + audio signals rather than controls (for use in AM and FM + synthesis). */ +class SineOscillator : public CMT_PluginInstance{ +private: + + /* Oscillator state: */ + + unsigned long m_lPhase; + unsigned long m_lPhaseStep; + LADSPA_Data m_fCachedFrequency; + const LADSPA_Data m_fLimitFrequency; + const LADSPA_Data m_fPhaseStepScalar; + + void setPhaseStepFromFrequency(const LADSPA_Data fFrequency) { + if (fFrequency != m_fCachedFrequency) { + if (fFrequency >= 0 && fFrequency < m_fLimitFrequency) + m_lPhaseStep = (unsigned long)(m_fPhaseStepScalar * fFrequency); + else + m_lPhaseStep = 0; + m_fCachedFrequency = fFrequency; + } + } + +public: + + SineOscillator(const LADSPA_Descriptor *, + unsigned long lSampleRate) + : CMT_PluginInstance(3), + m_lPhaseStep(0), + m_fCachedFrequency(0), + m_fLimitFrequency(LADSPA_Data(lSampleRate * 0.5)), + m_fPhaseStepScalar(LADSPA_Data(g_fPhaseStepBase / lSampleRate)) { + } + + friend void activateSineOscillator(void * pvHandle); + friend void runSineOscillator_FreqAudio_AmpAudio(LADSPA_Handle Instance, + unsigned long SampleCount); + friend void runSineOscillator_FreqAudio_AmpCtrl(LADSPA_Handle Instance, + unsigned long SampleCount); + friend void runSineOscillator_FreqCtrl_AmpAudio(LADSPA_Handle Instance, + unsigned long SampleCount); + friend void runSineOscillator_FreqCtrl_AmpCtrl(LADSPA_Handle Instance, + unsigned long SampleCount); + +}; + +/*****************************************************************************/ + +void +activateSineOscillator(void * pvHandle) { + ((SineOscillator *)pvHandle)->m_lPhase = 0; +} + +/*****************************************************************************/ + +void +runSineOscillator_FreqAudio_AmpAudio(LADSPA_Handle Instance, + unsigned long SampleCount) { + SineOscillator * poSineOscillator = (SineOscillator *)Instance; + LADSPA_Data * pfFrequency = poSineOscillator->m_ppfPorts[OSC_FREQUENCY]; + LADSPA_Data * pfAmplitude = poSineOscillator->m_ppfPorts[OSC_AMPLITUDE]; + LADSPA_Data * pfOutput = poSineOscillator->m_ppfPorts[OSC_OUTPUT]; + for (unsigned long lIndex = 0; lIndex < SampleCount; lIndex++) { + /* Extract frequency at this point to guarantee inplace + support. */ + LADSPA_Data fFrequency = *(pfFrequency++); + *(pfOutput++) + = (g_pfSineTable[poSineOscillator->m_lPhase >> SINE_TABLE_SHIFT] + * *(pfAmplitude++)); + poSineOscillator->setPhaseStepFromFrequency(fFrequency); + poSineOscillator->m_lPhase + += poSineOscillator->m_lPhaseStep; + } +} + +/*****************************************************************************/ + +void +runSineOscillator_FreqAudio_AmpCtrl(LADSPA_Handle Instance, + unsigned long SampleCount) { + SineOscillator * poSineOscillator = (SineOscillator *)Instance; + LADSPA_Data fAmplitude = *(poSineOscillator->m_ppfPorts[OSC_AMPLITUDE]); + LADSPA_Data * pfFrequency = poSineOscillator->m_ppfPorts[OSC_FREQUENCY]; + LADSPA_Data * pfOutput = poSineOscillator->m_ppfPorts[OSC_OUTPUT]; + for (unsigned long lIndex = 0; lIndex < SampleCount; lIndex++) { + /* Extract frequency at this point to guarantee inplace + support. */ + LADSPA_Data fFrequency = *(pfFrequency++); + *(pfOutput++) + = (g_pfSineTable[poSineOscillator->m_lPhase >> SINE_TABLE_SHIFT] + * fAmplitude); + poSineOscillator->setPhaseStepFromFrequency(fFrequency); + poSineOscillator->m_lPhase + += poSineOscillator->m_lPhaseStep; + } +} + +/*****************************************************************************/ + +void +runSineOscillator_FreqCtrl_AmpAudio(LADSPA_Handle Instance, + unsigned long SampleCount) { + SineOscillator * poSineOscillator = (SineOscillator *)Instance; + poSineOscillator->setPhaseStepFromFrequency + (*(poSineOscillator->m_ppfPorts[OSC_FREQUENCY])); + LADSPA_Data * pfAmplitude = poSineOscillator->m_ppfPorts[OSC_AMPLITUDE]; + LADSPA_Data * pfOutput = poSineOscillator->m_ppfPorts[OSC_OUTPUT]; + for (unsigned long lIndex = 0; lIndex < SampleCount; lIndex++) { + *(pfOutput++) + = (g_pfSineTable[poSineOscillator->m_lPhase >> SINE_TABLE_SHIFT] + * *(pfAmplitude++)); + poSineOscillator->m_lPhase + += poSineOscillator->m_lPhaseStep; + } +} + +/*****************************************************************************/ + +void +runSineOscillator_FreqCtrl_AmpCtrl(LADSPA_Handle Instance, + unsigned long SampleCount) { + SineOscillator * poSineOscillator = (SineOscillator *)Instance; + LADSPA_Data fAmplitude = *(poSineOscillator->m_ppfPorts[OSC_AMPLITUDE]); + poSineOscillator->setPhaseStepFromFrequency + (*(poSineOscillator->m_ppfPorts[OSC_FREQUENCY])); + LADSPA_Data * pfOutput = poSineOscillator->m_ppfPorts[OSC_OUTPUT]; + for (unsigned long lIndex = 0; lIndex < SampleCount; lIndex++) { + *(pfOutput++) + = (g_pfSineTable[poSineOscillator->m_lPhase >> SINE_TABLE_SHIFT] + * fAmplitude); + poSineOscillator->m_lPhase + += poSineOscillator->m_lPhaseStep; + } +} + +/*****************************************************************************/ + +void +initialise_sine() { + + initialise_sine_wavetable(); + + const char * apcLabels[] = { + "sine_faaa", + "sine_faac", + "sine_fcaa", + "sine_fcac" + }; + const char * apcNames[] = { + "Sine Oscillator (Freq:audio, Amp:audio)", + "Sine Oscillator (Freq:audio, Amp:control)", + "Sine Oscillator (Freq:control, Amp:audio)", + "Sine Oscillator (Freq:control, Amp:control)" + }; + LADSPA_Run_Function afRunFunction[] = { + runSineOscillator_FreqAudio_AmpAudio, + runSineOscillator_FreqAudio_AmpCtrl, + runSineOscillator_FreqCtrl_AmpAudio, + runSineOscillator_FreqCtrl_AmpCtrl + }; + LADSPA_PortDescriptor piFrequencyPortProperties[] = { + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL + }; + LADSPA_PortDescriptor piAmplitudePortProperties[] = { + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL + }; + + for (long lPluginIndex = 0; lPluginIndex < 4; lPluginIndex++) { + + CMT_Descriptor * psDescriptor; + + psDescriptor = new CMT_Descriptor + (1063 + lPluginIndex, + apcLabels[lPluginIndex], + LADSPA_PROPERTY_HARD_RT_CAPABLE, + apcNames[lPluginIndex], + CMT_MAKER("Richard W.E. Furse"), + CMT_COPYRIGHT("2000-2002", "Richard W.E. Furse"), + NULL, + CMT_Instantiate, + activateSineOscillator, + afRunFunction[lPluginIndex], + NULL, + NULL, + NULL); + + psDescriptor->addPort + (piFrequencyPortProperties[lPluginIndex], + "Frequency", + (LADSPA_HINT_BOUNDED_BELOW + | LADSPA_HINT_BOUNDED_ABOVE + | LADSPA_HINT_SAMPLE_RATE + | LADSPA_HINT_LOGARITHMIC + | LADSPA_HINT_DEFAULT_440), + 0, + 0.5); + psDescriptor->addPort + (piAmplitudePortProperties[lPluginIndex], + "Amplitude", + (LADSPA_HINT_BOUNDED_BELOW + | LADSPA_HINT_LOGARITHMIC + | LADSPA_HINT_DEFAULT_1), + 0, + 0); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output"); + + registerNewPluginDescriptor(psDescriptor); + } +} + +/*****************************************************************************/ + +void +finalise_sine() { + delete [] g_pfSineTable; +} + +/*****************************************************************************/ + +/* EOF */ diff --git a/plugins/LadspaEffect/cmt/src/sledgehammer.cpp b/plugins/LadspaEffect/cmt/src/sledgehammer.cpp new file mode 100644 index 000000000..60eb79f70 --- /dev/null +++ b/plugins/LadspaEffect/cmt/src/sledgehammer.cpp @@ -0,0 +1,186 @@ +/* sledgehammer.cpp + + "Dynamic Sledgehammer" - a thing to brutally mangle the dynamics of + a sound. + + (c) 2002 Nathaniel Virgo + + Computer Music Toolkit - a library of LADSPA plugins. Copyright (C) + 2000-2002 Richard W.E. Furse. The author may be contacted at + richard@muse.demon.co.uk. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public Licence as + published by the Free Software Foundation; either version 2 of the + Licence, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307, USA. */ + +/*****************************************************************************/ + +#include +#include + +/*****************************************************************************/ + +#include "cmt.h" +#include "run_adding.h" + +/*****************************************************************************/ + +namespace sledgehammer { + + enum { + port_rate = 0, + port_mod_infl = 1, // modulator influence + port_car_infl = 2, // carrier influence (0 to 1 for compression) + port_modulator = 3, + port_carrier = 4, + port_output = 5, + n_ports = 6 + }; + +/** This plugin imposes the dynamics of one sound onto another. + It can be seen as a brutal compressor with a sidechain, or + as a kind of one-band vocoder. */ + class Plugin : public CMT_PluginInstance { + LADSPA_Data run_adding_gain; + LADSPA_Data running_ms_mod; + LADSPA_Data running_ms_car; // current mean square average + public: + Plugin(const LADSPA_Descriptor *, + unsigned long) + : CMT_PluginInstance(n_ports) {} + + friend void activate(LADSPA_Handle instance); + + template + friend void run(LADSPA_Handle instance, + unsigned long sample_count); + + friend void set_run_adding_gain(LADSPA_Handle instance, + LADSPA_Data new_gain); + }; + + void activate(LADSPA_Handle instance) { + Plugin *pp = (Plugin *) instance; + Plugin &p = *pp; + + p.running_ms_mod = 0; + p.running_ms_car = 0; + } + + template + void run(LADSPA_Handle instance, + unsigned long sample_count) { + + Plugin *pp = (Plugin *) instance; + Plugin &p = *pp; + + LADSPA_Data rate = *pp->m_ppfPorts[port_rate]; + LADSPA_Data mod_infl = *pp->m_ppfPorts[port_mod_infl]; + LADSPA_Data car_infl = *pp->m_ppfPorts[port_car_infl]; + LADSPA_Data * modptr = pp->m_ppfPorts[port_modulator]; + LADSPA_Data * carptr = pp->m_ppfPorts[port_carrier]; + LADSPA_Data * out = pp->m_ppfPorts[port_output]; + + for ( unsigned long i = 0; i < sample_count ; ++i ) { + LADSPA_Data mod = *(modptr++); + LADSPA_Data car = *(carptr++); + + p.running_ms_mod = p.running_ms_mod*(1-rate) + (mod*mod)*rate; + p.running_ms_car = p.running_ms_car*(1-rate) + (car*car)*rate; + + LADSPA_Data rms_mod = sqrt(p.running_ms_mod); + LADSPA_Data rms_car = sqrt(p.running_ms_car); + + LADSPA_Data outsig = car; + + if (rms_car>0) + outsig *= ((rms_car-0.5)*car_infl+0.5)/rms_car; + + outsig *= ((rms_mod-0.5)*mod_infl+0.5); + + write_output(out, outsig ,p.run_adding_gain); + } + } + + void set_run_adding_gain(LADSPA_Handle instance, + LADSPA_Data new_gain) { + ((Plugin *) instance)->run_adding_gain = new_gain; + } + + void + initialise() { + + CMT_Descriptor * d = new CMT_Descriptor + (1848, + "sledgehammer", + LADSPA_PROPERTY_HARD_RT_CAPABLE, + "Dynamic Sledgehammer", + CMT_MAKER("Nathaniel Virgo"), + CMT_COPYRIGHT("2002", "Nathaniel Virgo"), + NULL, + CMT_Instantiate, + activate, + run, + run, + set_run_adding_gain, + NULL); + + d->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + "Rate", + (LADSPA_HINT_BOUNDED_BELOW + | LADSPA_HINT_BOUNDED_ABOVE + | LADSPA_HINT_DEFAULT_MIDDLE), + 0.00001, + 0.001); + d->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + "Modulator influence", + (LADSPA_HINT_BOUNDED_BELOW + | LADSPA_HINT_BOUNDED_ABOVE + | LADSPA_HINT_DEFAULT_0), + -1, + 1); + d->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + "Carrier influence", + (LADSPA_HINT_BOUNDED_BELOW + | LADSPA_HINT_BOUNDED_ABOVE + | LADSPA_HINT_DEFAULT_1), + -1, + 1); + d->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + "Modulator"); + d->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + "Carrier"); + d->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output"); + + registerNewPluginDescriptor(d); + + } + +} // end of namespace + +/*****************************************************************************/ + +/* EOF */ + + + + + diff --git a/plugins/LadspaEffect/cmt/src/syndrum.cpp b/plugins/LadspaEffect/cmt/src/syndrum.cpp new file mode 100644 index 000000000..0ff2e9b39 --- /dev/null +++ b/plugins/LadspaEffect/cmt/src/syndrum.cpp @@ -0,0 +1,175 @@ +/* syndrum.cpp + + SynDrum - Drum Synthesizer + Copyright (c) 1999, 2000 David A. Bartold + + Computer Music Toolkit - a library of LADSPA plugins. Copyright (C) + 2000 Richard W.E. Furse. The author may be contacted at + richard@muse.demon.co.uk. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public Licence as + published by the Free Software Foundation; either version 2 of the + Licence, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307, USA. */ + +/*****************************************************************************/ + +#include +#include +#include "cmt.h" + +#define PORT_OUT 0 +#define PORT_TRIGGER 1 +#define PORT_VELOCITY 2 +#define PORT_FREQ 3 +#define PORT_RESONANCE 4 +#define PORT_RATIO 5 + +#define NUM_PORTS 6 + +#ifndef PI +#define PI 3.14159265358979 +#endif + +class SynDrum : public CMT_PluginInstance { + LADSPA_Data sample_rate; + + LADSPA_Data spring_vel; + LADSPA_Data spring_pos; + LADSPA_Data env; + + int last_trigger; + +public: + SynDrum(const LADSPA_Descriptor *, + unsigned long s_rate) + : CMT_PluginInstance(NUM_PORTS), + sample_rate(s_rate), + spring_vel(0.0F), + spring_pos(0.0F), + env(0.0F) { + } + + ~SynDrum() { + } + + static void + activate(LADSPA_Handle Instance) { + SynDrum *syndrum = (SynDrum*) Instance; + syndrum->spring_vel = 0.0F; + syndrum->spring_pos = 0.0F; + syndrum->env = 0.0F; + syndrum->last_trigger = 0; + } + + static void + run(LADSPA_Handle Instance, + unsigned long SampleCount) { + SynDrum *syndrum = (SynDrum*) Instance; + unsigned long i; + int trigger; + LADSPA_Data freq_shift; + LADSPA_Data factor; + LADSPA_Data res; + + trigger = *syndrum->m_ppfPorts[PORT_TRIGGER] > 0.0; + if (trigger == 1 && syndrum->last_trigger == 0) + { + syndrum->spring_vel = *syndrum->m_ppfPorts[PORT_VELOCITY]; + syndrum->env = *syndrum->m_ppfPorts[PORT_VELOCITY]; + } + syndrum->last_trigger = trigger; + + factor = 2.0 * PI / syndrum->sample_rate; + freq_shift = *syndrum->m_ppfPorts[PORT_FREQ] * + *syndrum->m_ppfPorts[PORT_RATIO]; + res = pow (0.05, 1.0 / (syndrum->sample_rate * *syndrum->m_ppfPorts[PORT_RESONANCE])); + + for (i = 0; i < SampleCount; i++) + { + LADSPA_Data cur_freq; + + cur_freq = *syndrum->m_ppfPorts[PORT_FREQ] + + (syndrum->env * freq_shift); + cur_freq *= factor; + syndrum->spring_vel -= syndrum->spring_pos * cur_freq; + syndrum->spring_pos += syndrum->spring_vel * cur_freq; + syndrum->spring_vel *= res; + syndrum->env *= res; + + syndrum->m_ppfPorts[PORT_OUT][i] = syndrum->spring_pos; + } + } +}; + + +static LADSPA_PortDescriptor g_psPortDescriptors[] = +{ + LADSPA_PORT_AUDIO | LADSPA_PORT_OUTPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT +}; + +static const char * const g_psPortNames[] = +{ + "Out", + "Trigger", + "Velocity", + "Frequency (Hz)", + "Resonance", + "Frequency Ratio" +}; + +static LADSPA_PortRangeHint g_psPortRangeHints[] = +{ + /* Hints, Lower bound, Upper bound */ + { 0, 0.0, 0.0 }, + { LADSPA_HINT_TOGGLED, 0.0, 0.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 10.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 20000.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.001, 1.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 10.0 } +}; + +void +initialise_syndrum() { + CMT_Descriptor * psDescriptor; + + psDescriptor = new CMT_Descriptor + (1223, + "syndrum", + LADSPA_PROPERTY_HARD_RT_CAPABLE, + "Syn Drum", + CMT_MAKER("David A. Bartold"), + CMT_COPYRIGHT("1999, 2000", "David A. Bartold"), + NULL, + CMT_Instantiate, + SynDrum::activate, + SynDrum::run, + NULL, + NULL, + NULL); + + for (int i = 0; i < NUM_PORTS; i++) + psDescriptor->addPort( + g_psPortDescriptors[i], + g_psPortNames[i], + g_psPortRangeHints[i].HintDescriptor, + g_psPortRangeHints[i].LowerBound, + g_psPortRangeHints[i].UpperBound); + + registerNewPluginDescriptor(psDescriptor); +} diff --git a/plugins/LadspaEffect/cmt/src/utils.h b/plugins/LadspaEffect/cmt/src/utils.h new file mode 100644 index 000000000..120567546 --- /dev/null +++ b/plugins/LadspaEffect/cmt/src/utils.h @@ -0,0 +1,103 @@ +/* utils.h + + Computer Music Toolkit - a library of LADSPA plugins. Copyright (C) + 2000 Richard W.E. Furse. The author may be contacted at + richard@muse.demon.co.uk. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public Licence as + published by the Free Software Foundation; either version 2 of the + Licence, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307, USA. */ + +#ifndef CMT_UTILS_INCLUDED +#define CMT_UTILS_INCLUDED + +/*****************************************************************************/ + +#include +#include + +/*****************************************************************************/ + +#include "ladspa_types.h" + +/*****************************************************************************/ + +/** The drag setting is arranged so that the gain drops by a factor of + 1e3 (60dB) in the time specified. This is a bit of an arbitrary + value but ties in with what the user will probably expect from + his/her experience with reverb units. */ +inline LADSPA_Data +calculate60dBDrag(const LADSPA_Data fTime, + const LADSPA_Data fSampleRate) { + if (fTime <= 0) + return 0; + else + return pow(1e3, -1 / (fTime * fSampleRate)); +} + +/*****************************************************************************/ + +inline LADSPA_Data +BOUNDED_BELOW(const LADSPA_Data fData, + const LADSPA_Data fLowerBound) { + if (fData <= fLowerBound) + return fLowerBound; + else + return fData; +} + +inline LADSPA_Data BOUNDED_ABOVE(const LADSPA_Data fData, + const LADSPA_Data fUpperBound) { + if (fData >= fUpperBound) + return fUpperBound; + else + return fData; +} + +inline LADSPA_Data +BOUNDED(const LADSPA_Data fData, + const LADSPA_Data fLowerBound, + const LADSPA_Data fUpperBound) { + if (fData <= fLowerBound) + return fLowerBound; + else if (fData >= fUpperBound) + return fUpperBound; + else + return fData; +} + +/*****************************************************************************/ + +/* Take a reading from a normal RV. The algorithm works by repeated + sampling of the uniform distribution, the lQuality variable giving + the number of samples. */ +inline double +sampleNormalDistribution(const double dMean, + const double dStandardDeviation, + const long lQuality = 12) { + + double dValue = 0; + for (long lIter = 0; lIter < lQuality; lIter++) + dValue += rand(); + + double dSampleFromNormal01 = (dValue / RAND_MAX) - (lQuality * 0.5); + + return dMean + dStandardDeviation * dSampleFromNormal01; +} + +/*****************************************************************************/ + +#endif + +/* EOF */ diff --git a/plugins/LadspaEffect/cmt/src/vcf303.cpp b/plugins/LadspaEffect/cmt/src/vcf303.cpp new file mode 100644 index 000000000..734850ec6 --- /dev/null +++ b/plugins/LadspaEffect/cmt/src/vcf303.cpp @@ -0,0 +1,219 @@ +/* vcf303.cpp + + VCF 303 - TB-303 Resonant Filter + Copyright (c) 1998 Andy Sloane + Copyright (c) 1999, 2000 David A. Bartold + + Computer Music Toolkit - a library of LADSPA plugins. Copyright (C) + 2000 Richard W.E. Furse. The author may be contacted at + richard@muse.demon.co.uk. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public Licence as + published by the Free Software Foundation; either version 2 of the + Licence, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307, USA. */ + +/*****************************************************************************/ + + +#include +#include +#include "cmt.h" + +#define PORT_IN 0 +#define PORT_OUT 1 +#define PORT_TRIGGER 2 +#define PORT_CUTOFF 3 +#define PORT_RESONANCE 4 +#define PORT_ENV_MOD 5 +#define PORT_DECAY 6 + +#define NUM_PORTS 7 + +#ifndef PI +#define PI 3.14159265358979 +#endif + +class Vcf303 : public CMT_PluginInstance { + LADSPA_Data sample_rate; + + LADSPA_Data d1, d2, c0; + int last_trigger; + int envpos; + +public: + Vcf303(const LADSPA_Descriptor *, + unsigned long s_rate) + : CMT_PluginInstance(NUM_PORTS), + sample_rate(s_rate), + d1(0.0), d2(0.0), c0(0.0), + last_trigger(0), + envpos(0) { + } + + ~Vcf303() { + } + + static void + activate(LADSPA_Handle Instance) { + Vcf303 *vcf303 = (Vcf303*) Instance; + + vcf303->d1 = 0.0; + vcf303->d2 = 0.0; + vcf303->c0 = 0.0; + vcf303->last_trigger = 0; + vcf303->envpos = 0; + } + + static inline void + recalc_a_b_c (Vcf303 *filter, + LADSPA_Data e0, + LADSPA_Data c0, + LADSPA_Data resonance, + LADSPA_Data *a, + LADSPA_Data *b, + LADSPA_Data *c) { + LADSPA_Data whopping, k; + + whopping = e0 + c0; + k = exp (-whopping / resonance); + + *a = 2.0 * cos (2.0 * whopping) * k; + *b = -k * k; + *c = (1.0 - *a - *b) * 0.2; + } + + static void + run(LADSPA_Handle Instance, + unsigned long SampleCount) { + Vcf303 *vcf303 = (Vcf303*) Instance; + unsigned long i; + LADSPA_Data e0, d, a, b, c; + LADSPA_Data decay, resonance; + LADSPA_Data **ports; + int trigger; + + /* Update vars given envmod, cutoff, and reso. */ + ports = vcf303->m_ppfPorts; + e0 = exp (5.613 - 0.8 * *ports[PORT_ENV_MOD] + 2.1553 * + *ports[PORT_CUTOFF] - 0.7696 * (1.0 - *ports[PORT_RESONANCE])); + e0 *= PI / vcf303->sample_rate; + + trigger = (*ports[PORT_TRIGGER] > 0.0); + if (trigger == 1 && vcf303->last_trigger == 0) + { + LADSPA_Data e1; + + e1 = exp (6.109 + 1.5876 * *ports[PORT_ENV_MOD] + 2.1553 * + *ports[PORT_CUTOFF] - 1.2 * (1.0 - *ports[PORT_RESONANCE])); + e1 *= PI / vcf303->sample_rate; + vcf303->c0 = e1 - e0; + } + vcf303->last_trigger = trigger; + + /* Update decay given envdecay. */ + d = 0.2 + (2.3 * *ports[PORT_DECAY]); + d *= vcf303->sample_rate; + d = pow (0.1, 1.0 / d); + decay = pow (d, 64); + + /* Update resonance. */ + resonance = exp (-1.20 + 3.455 * *ports[PORT_RESONANCE]); + + recalc_a_b_c (vcf303, e0, vcf303->c0, resonance, &a, &b, &c); + + for (i = 0; i < SampleCount; i++) + { + LADSPA_Data sample; + + sample = a * vcf303->d1 + b * vcf303->d2 + c * ports[PORT_IN][i]; + ports[PORT_OUT][i] = sample; + + vcf303->d2 = vcf303->d1; + vcf303->d1 = sample; + + vcf303->envpos++; + if (vcf303->envpos >= 64) + { + vcf303->envpos = 0; + vcf303->c0 *= decay; + recalc_a_b_c (vcf303, e0, vcf303->c0, resonance, &a, &b, &c); + } + } + } +}; + + +static LADSPA_PortDescriptor g_psPortDescriptors[] = +{ + LADSPA_PORT_AUDIO | LADSPA_PORT_INPUT, + LADSPA_PORT_AUDIO | LADSPA_PORT_OUTPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, + LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT +}; + +static const char * const g_psPortNames[] = +{ + "In", + "Out", + "Trigger", + "Cutoff", + "Resonance", + "Envelope Modulation", + "Decay" +}; + +static LADSPA_PortRangeHint g_psPortRangeHints[] = +{ + /* Hints, Lower bound, Upper bound */ + { 0, 0.0, 0.0 }, + { 0, 0.0, 0.0 }, + { LADSPA_HINT_TOGGLED, 0.0, 0.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 1.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 1.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 1.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 1.0 } +}; + +void +initialise_vcf303() { + CMT_Descriptor * psDescriptor; + + psDescriptor = new CMT_Descriptor + (1224, + "vcf303", + LADSPA_PROPERTY_HARD_RT_CAPABLE, + "VCF 303", + CMT_MAKER("David A. Bartold"), + CMT_COPYRIGHT("1998-2000", "Andy Sloane, David A. Bartold"), + NULL, + CMT_Instantiate, + Vcf303::activate, + Vcf303::run, + NULL, + NULL, + NULL); + + for (int i = 0; i < NUM_PORTS; i++) + psDescriptor->addPort( + g_psPortDescriptors[i], + g_psPortNames[i], + g_psPortRangeHints[i].HintDescriptor, + g_psPortRangeHints[i].LowerBound, + g_psPortRangeHints[i].UpperBound); + + registerNewPluginDescriptor(psDescriptor); +} diff --git a/plugins/LadspaEffect/cmt/src/wshape_sine.cpp b/plugins/LadspaEffect/cmt/src/wshape_sine.cpp new file mode 100644 index 000000000..07eab074f --- /dev/null +++ b/plugins/LadspaEffect/cmt/src/wshape_sine.cpp @@ -0,0 +1,110 @@ +/* wshape_sine.cpp + + Computer Music Toolkit - a library of LADSPA plugins. Copyright (C) + 2000-2002 Richard W.E. Furse. The author may be contacted at + richard@muse.demon.co.uk. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public Licence as + published by the Free Software Foundation; either version 2 of the + Licence, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307, USA. */ + +/*****************************************************************************/ + +#include +#include + +/*****************************************************************************/ + +#include "cmt.h" + +/*****************************************************************************/ + +#define WSS_CONTROL 0 +#define WSS_INPUT 1 +#define WSS_OUTPUT 2 + +/** This plugin applies a gain to a mono signal. */ +class SineWaveshaper : public CMT_PluginInstance { +public: + + SineWaveshaper(const LADSPA_Descriptor *, + unsigned long) + : CMT_PluginInstance(3) { + } + + friend void runSineWaveshaper(LADSPA_Handle Instance, + unsigned long SampleCount); + +}; + +/*****************************************************************************/ + +void +runSineWaveshaper(LADSPA_Handle Instance, + unsigned long SampleCount) { + + SineWaveshaper * poProcessor = (SineWaveshaper *)Instance; + + LADSPA_Data * pfInput = poProcessor->m_ppfPorts[WSS_INPUT]; + LADSPA_Data * pfOutput = poProcessor->m_ppfPorts[WSS_OUTPUT]; + LADSPA_Data fLimit = *(poProcessor->m_ppfPorts[WSS_CONTROL]); + LADSPA_Data fOneOverLimit = 1 / fLimit; + + for (unsigned long lSampleIndex = 0; + lSampleIndex < SampleCount; + lSampleIndex++) + *(pfOutput++) = fLimit * sin(*(pfInput++) * fOneOverLimit); +} + +/*****************************************************************************/ + +void +initialise_wshape_sine() { + + CMT_Descriptor * psDescriptor; + + psDescriptor = new CMT_Descriptor + (1097, + "wshape_sine", + LADSPA_PROPERTY_HARD_RT_CAPABLE, + "Wave Shaper (Sine-Based)", + CMT_MAKER("Richard W.E. Furse"), + CMT_COPYRIGHT("2000-2002", "Richard W.E. Furse"), + NULL, + CMT_Instantiate, + NULL, + runSineWaveshaper, + NULL, + NULL, + NULL); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + "Limiting Amplitude", + (LADSPA_HINT_BOUNDED_BELOW + | LADSPA_HINT_LOGARITHMIC + | LADSPA_HINT_DEFAULT_1), + 0, + 0); + psDescriptor->addPort + (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + "Input"); + psDescriptor->addPort + (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + "Output"); + registerNewPluginDescriptor(psDescriptor); +} + +/*****************************************************************************/ + +/* EOF */ diff --git a/plugins/LadspaEffect/logo.png b/plugins/LadspaEffect/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..89e9f3680118931dd86f065a8f6bc0b4c631a585 GIT binary patch literal 3225 zcmV;K3}*9*P)`#WFm#_KhbhiGA@U*^o_ z?)UBYo!>dX?|kR%N`_(3mE2^y!khFt%vlIo2DuiJ53xXoA?=VokVZ)2as;qQmgTQk zRaM=vc=6&zGiJEI(qbI$Du=q8bYDa-!T4lNbqv-;`L=^Wjh{! z{PDzr0|$(OfdS*wS|X7!+S=NTZQHgPH{X17r=lo7!t?I`l?SGwJ#pWC_ib3WZk^=u zcnAs-2L-lzW^j-sNr=^ICA-}&`giTxMVmKoKG)dT_#F&+=ZgeTk(ZbE`g6}cx3Ipx zo-7uNP>z*~#bN|6ki+2+_tF7m0%D3qqfy$lX%lVVzMZ}ClP?0mRdD@VPe1*1pFK+ofU!5YF*p_;mk!1RdhfmW(!qlVx8m0KCZmipN#!dc z@2y(3s(kh8)x@-MI-L{_hlM5C`Ybk^jnrh4`uqE7cz9SyBoY<$@dK>i=M!W2nLr>w znx+x<5$)KqV+jB{u*S}bDrA|2@=nO_ATw%fYsI2$>8`F$;YgF?CjYsg_e4i$2W4kv zQ$az2piC0LhJr!i2?oSK+S}VHFE5vP-rc)*{}2eF>pfud6P*|l_SoFF@*VCGB-9aZ? zPeb`Alvaf0c`QG}pg924)YOQ*)Y{sbx%PK2MKZTO(^ETl?i9+eU%y^(maWO$mZ3Zu zNlcocMGGov$^1NW>RoipjSI*ksU)FKQAR>5KhIz|n$4YCO|QN72T-UtbM3D{uKO$$ z@~UELR`@5Byj z4`h+zo<$aAMnm>O&a*Awn zPxH{UEQMxQc&NCtnCwyq$!ZTQEs^5zlQ-8zax6e$c_t+_T~OvMBH0Tsyg;wK^2+EQ z8l!n2FHXq=*kF&q)ju{*(9HaXX>j}Px6?iM+(RyG+@xV4zav0%vmYg=^*Cu!oW4m! zuBDA*j+v&p!K%2nNVZKW%OE6b~Y5RpWY|_YJSfhvm2)z`$~F^abYuOEx?(Ffd5Lp?=bod^+3dBUfxMc|96Q$q4mgbMEU{N@s`s zbnHkYAtM!YapUmHb8*<^@XOIFD=SOTi*qa}Z-?OyL5}em#OKMl05JK6wQJYD2>?Z$ z$1^wiL7trBG%r?!9H_FglFG}=MI>Pv9u8CQg)Zugcqo{dPsP^5WYuD{r}GZ_S6>yK zK6!*rpFS;wL9l{+p0MJqG_PTvlpb!$Lec3jS#xvqUH}M;2>=71 zM|4@ui*O>=)YK#vVs{r76$%>hZ$6AT@&t#1$ZLkg!r^d4oC(~=ijfhg&H)$gZdRx; z--r9EpbJtG5iWbWyQv3Rz~JBj?uTIQsIWYHSSXGF!3QGG$@rQ1KOCufW2kK*`Xk&nrS!F)y!(m)SLfjy?9+5hSNErgq-DPEaqfL z3!aDTR&sb`jteVhG&50SFd~LSn71r8yN&ENyWlnV^A(&G7Oz`U3(NXOyrXNQnW`zQ zV4RhP(YP-?;t68_6wk$d0G+dC%a%W*lKU#gwKIiexa>us+wktY?+SOZ^&^pp;H9Zd zy6`X^hm}za?Qd2byK#)SK}!&zTk3q)SHVz#!NVJP)o$MIG59$gcDzYt1^{-vhyTxfq9RLK=Q!$vCo!-M1NT={ zRQwT#Rn^peU}X4WY7L?DG3avyG+c)LaNN|F!DW_|LGbKoaI$fsCG>XNH5}&6BJ}&^GG`&b3ep!29q9x^( z4FDd{{_lY?UhH1VW*Nr=dV1Zd88WFFFynOK^I5ha|Iv{v8OlYgQ)A3~DERR#&!;9O zN?^_euKZg!q)P*UJ)r3_iVg)}qNsO6l;?3G?e>zx3B{E#1_ZFMh2n`^GEh#sEVfUo zJQ^sFt{8TTt6*kgfIM=5a;8C9w@u_bu}BED!60?_t2j|@6vMnEz!*~l5Q)plysTlm z@u~>b)UKd8)z#!Fm`yfU0ZJhk6pND@?WN(qHt}w={nPT4LQB#WO4X~OO50(#fHvNU)M=Gj$-QIf&KK?V_q0Y)+Y_X z0;YU(Nx=5do&8i=_kE(gTcEJPK7m2{M*fFItuC2-Wpl_^UQKi7`6%$uM`-`qHfq(r z0RVDpBU#9*hpEQ<8@hUSg0il8l*my$lJV*My{}8mCn*v+b38OXua>4?yO?gN3)8J1 zyiHqF%6)tP=vx$HLIA#Yy>!#hAB@+N&xPu+iHx3pETD*&R3u3s&BgTKbXixiH-h9X zk?AJO`=p$4(H^N*jFVyAnrW}nwX>Q?^35SV_&!nCPLgcl;^CwH!&?qwa52S(lFrkj zB?kSrP=BCqBfWIuJe`|}2Y5!k&`=_!~L6Y4|h9wI|L3x_;6f_5o*bosi z5<$#4jD6)IuRrFWo~xCo0DQ~~${2vMxIAv}p+J3=e8Y@NN4{(W-?_lCh#VCFAPQS3 z31`GHV_dxVl({NXbUM|n4cz%?-($P>HNVl_b?z@a8}_}`b0O4oTb*s8)$2s`atMx! z`7oZC;xZ?`D&|V0#1QXWCDhz6ZHvG2>~{TS<0FIXCI}_N^89&+-#8V8<7C_3kldrh zH23UcdA2LtDoI%mSPp`+Q?fB2D8Y+J8cFd41$(0O+P3hA>wX%4vbjTRibg^~6e9yk zH8ynQjMlWfQ9m=&Ym^rF6~8ST6mpt#L9Cch;rX!n;ZAQf2kSb z3lV=M89|Dup80A~N(10ac|!PhdY)8qUA3)x=|bmK^QxS)d^rxctVo8Q)QsSu8fiNn z?bv%b)^fNdajLabYfUAJwlU}#1#ah@8A@60HIBJU7rL&VUg{`-ajZ;8HLe;x-SNT3 zW6_p<|Bf9!(w1!L4;dXPW+YM{#`__m6o^lpK1ym~M+&VqCF%X#=a5q1j1hMxQ*&8U z&r9Q+?rKUQ@l0w5a9o3-iQgN>QWTLg#`FDn>bG&Rm%C + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/plugins/LadspaEffect/swh/NEWS b/plugins/LadspaEffect/swh/NEWS new file mode 100644 index 000000000..e69de29bb diff --git a/plugins/LadspaEffect/swh/README b/plugins/LadspaEffect/swh/README new file mode 100644 index 000000000..35871c728 --- /dev/null +++ b/plugins/LadspaEffect/swh/README @@ -0,0 +1,29 @@ +Compiling +~~~~~~~~~ +You will need libfftw version 2 or 3 installed with 32 bit float support (eg. +for FFTW3 use --enable-float), for FFTW recommend you specify the approriate +SIMD isntruction set for your CPU with --enable-sse, --enable-sse2, --enable-k7 +or --enable-altivec. You can get FFTW from http://www.fftw.org/. + +Install with + ./configure + make + su -c "make install". + +This code is normally built from XML source, using Perl and XML::Parser. I +distribute the generated .c files, so you wont need perl, but if you want to +edit the XML source then you will need a copy of Perl and XML::Parser +installed. + +Homepage and docs +~~~~~~~~~~~~~~~~~ +The homepage for this project is http://plugin.org.uk/ + +Bug reports +~~~~~~~~~~~ +Please send bug reports or comments to steve@plugin.org.uk, except for bugs +relating to the gverb plugin, for that please send bug reports etc. to Juhana +Sadeharju, kouhia_at_nic.funet.fi. + +Enjoy, + Steve diff --git a/plugins/LadspaEffect/swh/alias_1407.c b/plugins/LadspaEffect/swh/alias_1407.c new file mode 100644 index 000000000..cbc0fdd50 --- /dev/null +++ b/plugins/LadspaEffect/swh/alias_1407.c @@ -0,0 +1,251 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + + +#define ALIAS_LEVEL 0 +#define ALIAS_INPUT 1 +#define ALIAS_OUTPUT 2 + +static LADSPA_Descriptor *aliasDescriptor = NULL; + +typedef struct { + LADSPA_Data *level; + LADSPA_Data *input; + LADSPA_Data *output; + LADSPA_Data run_adding_gain; +} Alias; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return aliasDescriptor; + default: + return NULL; + } +} + +static void cleanupAlias(LADSPA_Handle instance) { + free(instance); +} + +static void connectPortAlias( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + Alias *plugin; + + plugin = (Alias *)instance; + switch (port) { + case ALIAS_LEVEL: + plugin->level = data; + break; + case ALIAS_INPUT: + plugin->input = data; + break; + case ALIAS_OUTPUT: + plugin->output = data; + break; + } +} + +static LADSPA_Handle instantiateAlias( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + Alias *plugin_data = (Alias *)malloc(sizeof(Alias)); + plugin_data->run_adding_gain = 1.0f; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runAlias(LADSPA_Handle instance, unsigned long sample_count) { + Alias *plugin_data = (Alias *)instance; + + /* Aliasing level (float value) */ + const LADSPA_Data level = *(plugin_data->level); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + +#line 17 "alias_1407.xml" + unsigned long pos; + float coef = 1.0f - 2.0f * level; + + if (output != input) { + for (pos = 0; pos < sample_count; pos+=2) { + buffer_write(output[pos], input[pos]); + } + } + for (pos = 1; pos < sample_count; pos+=2) { + buffer_write(output[pos], input[pos] * coef); + } +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainAlias(LADSPA_Handle instance, LADSPA_Data gain) { + ((Alias *)instance)->run_adding_gain = gain; +} + +static void runAddingAlias(LADSPA_Handle instance, unsigned long sample_count) { + Alias *plugin_data = (Alias *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Aliasing level (float value) */ + const LADSPA_Data level = *(plugin_data->level); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + +#line 17 "alias_1407.xml" + unsigned long pos; + float coef = 1.0f - 2.0f * level; + + if (output != input) { + for (pos = 0; pos < sample_count; pos+=2) { + buffer_write(output[pos], input[pos]); + } + } + for (pos = 1; pos < sample_count; pos+=2) { + buffer_write(output[pos], input[pos] * coef); + } +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + aliasDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (aliasDescriptor) { + aliasDescriptor->UniqueID = 1407; + aliasDescriptor->Label = "alias"; + aliasDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + aliasDescriptor->Name = + D_("Aliasing"); + aliasDescriptor->Maker = + "Steve Harris "; + aliasDescriptor->Copyright = + "GPL"; + aliasDescriptor->PortCount = 3; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(3, + sizeof(LADSPA_PortDescriptor)); + aliasDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(3, + sizeof(LADSPA_PortRangeHint)); + aliasDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(3, sizeof(char*)); + aliasDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Aliasing level */ + port_descriptors[ALIAS_LEVEL] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[ALIAS_LEVEL] = + D_("Aliasing level"); + port_range_hints[ALIAS_LEVEL].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[ALIAS_LEVEL].LowerBound = 0; + port_range_hints[ALIAS_LEVEL].UpperBound = 1; + + /* Parameters for Input */ + port_descriptors[ALIAS_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[ALIAS_INPUT] = + D_("Input"); + port_range_hints[ALIAS_INPUT].HintDescriptor = 0; + + /* Parameters for Output */ + port_descriptors[ALIAS_OUTPUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[ALIAS_OUTPUT] = + D_("Output"); + port_range_hints[ALIAS_OUTPUT].HintDescriptor = 0; + + aliasDescriptor->activate = NULL; + aliasDescriptor->cleanup = cleanupAlias; + aliasDescriptor->connect_port = connectPortAlias; + aliasDescriptor->deactivate = NULL; + aliasDescriptor->instantiate = instantiateAlias; + aliasDescriptor->run = runAlias; + aliasDescriptor->run_adding = runAddingAlias; + aliasDescriptor->set_run_adding_gain = setRunAddingGainAlias; + } +} + +void _fini() { + if (aliasDescriptor) { + free((LADSPA_PortDescriptor *)aliasDescriptor->PortDescriptors); + free((char **)aliasDescriptor->PortNames); + free((LADSPA_PortRangeHint *)aliasDescriptor->PortRangeHints); + free(aliasDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/allpass_1895.c b/plugins/LadspaEffect/swh/allpass_1895.c new file mode 100644 index 000000000..192684794 --- /dev/null +++ b/plugins/LadspaEffect/swh/allpass_1895.c @@ -0,0 +1,1369 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + +#include "ladspa-util.h" + +#define MIN(a,b) ((a) < (b) ? (a) : (b)) +#define CALC_DELAY(delaytime) \ + (f_clamp (delaytime * sample_rate, 1.f, (float)(buffer_mask + 1))) + +#define LOG001 -6.9077552789f + +static inline float +calc_feedback (float delaytime, float decaytime) +{ + if (delaytime == 0.f) + return 0.f; + else if (decaytime > 0.f) + return exp(LOG001 * delaytime / decaytime); + else if (decaytime < 0.f) + return -exp(LOG001 * delaytime / -decaytime); + else + return 0.f; +} + +void ignore(LADSPA_Data some_var) +{ } + +#define ALLPASS_N_IN 0 +#define ALLPASS_N_OUT 1 +#define ALLPASS_N_MAX_DELAY 2 +#define ALLPASS_N_DELAY_TIME 3 +#define ALLPASS_N_DECAY_TIME 4 +#define ALLPASS_L_IN 0 +#define ALLPASS_L_OUT 1 +#define ALLPASS_L_MAX_DELAY 2 +#define ALLPASS_L_DELAY_TIME 3 +#define ALLPASS_L_DECAY_TIME 4 +#define ALLPASS_C_IN 0 +#define ALLPASS_C_OUT 1 +#define ALLPASS_C_MAX_DELAY 2 +#define ALLPASS_C_DELAY_TIME 3 +#define ALLPASS_C_DECAY_TIME 4 + +static LADSPA_Descriptor *allpass_nDescriptor = NULL; + +typedef struct { + LADSPA_Data *in; + LADSPA_Data *out; + LADSPA_Data *max_delay; + LADSPA_Data *delay_time; + LADSPA_Data *decay_time; + LADSPA_Data *buffer; + unsigned int buffer_mask; + LADSPA_Data delay_samples; + LADSPA_Data feedback; + LADSPA_Data last_decay_time; + LADSPA_Data last_delay_time; + unsigned int sample_rate; + long write_phase; + LADSPA_Data run_adding_gain; +} Allpass_n; + +static LADSPA_Descriptor *allpass_lDescriptor = NULL; + +typedef struct { + LADSPA_Data *in; + LADSPA_Data *out; + LADSPA_Data *max_delay; + LADSPA_Data *delay_time; + LADSPA_Data *decay_time; + LADSPA_Data *buffer; + unsigned int buffer_mask; + LADSPA_Data delay_samples; + LADSPA_Data feedback; + LADSPA_Data last_decay_time; + LADSPA_Data last_delay_time; + unsigned int sample_rate; + long write_phase; + LADSPA_Data run_adding_gain; +} Allpass_l; + +static LADSPA_Descriptor *allpass_cDescriptor = NULL; + +typedef struct { + LADSPA_Data *in; + LADSPA_Data *out; + LADSPA_Data *max_delay; + LADSPA_Data *delay_time; + LADSPA_Data *decay_time; + LADSPA_Data *buffer; + unsigned int buffer_mask; + LADSPA_Data delay_samples; + LADSPA_Data feedback; + LADSPA_Data last_decay_time; + LADSPA_Data last_delay_time; + unsigned int sample_rate; + long write_phase; + LADSPA_Data run_adding_gain; +} Allpass_c; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return allpass_nDescriptor; + case 1: + return allpass_lDescriptor; + case 2: + return allpass_cDescriptor; + default: + return NULL; + } +} + +static void activateAllpass_n(LADSPA_Handle instance) { + Allpass_n *plugin_data = (Allpass_n *)instance; + LADSPA_Data *buffer = plugin_data->buffer; + unsigned int buffer_mask = plugin_data->buffer_mask; + LADSPA_Data delay_samples = plugin_data->delay_samples; + LADSPA_Data feedback = plugin_data->feedback; + LADSPA_Data last_decay_time = plugin_data->last_decay_time; + LADSPA_Data last_delay_time = plugin_data->last_delay_time; + unsigned int sample_rate = plugin_data->sample_rate; + long write_phase = plugin_data->write_phase; + unsigned int minsize, size; + + if (plugin_data->max_delay && *plugin_data->max_delay > 0) + minsize = sample_rate * *plugin_data->max_delay; + else if (plugin_data->delay_time) + minsize = sample_rate * *plugin_data->delay_time; + else + minsize = sample_rate; /* 1 second default */ + + size = 1; + while (size < minsize) size <<= 1; + + /* calloc sets the buffer to zero. */ + buffer = calloc(size, sizeof(LADSPA_Data)); + if (buffer) + buffer_mask = size - 1; + else + buffer_mask = 0; + write_phase = 0; + plugin_data->buffer = buffer; + plugin_data->buffer_mask = buffer_mask; + plugin_data->delay_samples = delay_samples; + plugin_data->feedback = feedback; + plugin_data->last_decay_time = last_decay_time; + plugin_data->last_delay_time = last_delay_time; + plugin_data->sample_rate = sample_rate; + plugin_data->write_phase = write_phase; + +} + +static void cleanupAllpass_n(LADSPA_Handle instance) { + Allpass_n *plugin_data = (Allpass_n *)instance; + free(plugin_data->buffer); + free(instance); +} + +static void connectPortAllpass_n( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + Allpass_n *plugin; + + plugin = (Allpass_n *)instance; + switch (port) { + case ALLPASS_N_IN: + plugin->in = data; + break; + case ALLPASS_N_OUT: + plugin->out = data; + break; + case ALLPASS_N_MAX_DELAY: + plugin->max_delay = data; + break; + case ALLPASS_N_DELAY_TIME: + plugin->delay_time = data; + break; + case ALLPASS_N_DECAY_TIME: + plugin->decay_time = data; + break; + } +} + +static LADSPA_Handle instantiateAllpass_n( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + Allpass_n *plugin_data = (Allpass_n *)malloc(sizeof(Allpass_n)); + LADSPA_Data *buffer = NULL; + unsigned int buffer_mask = 0; + LADSPA_Data delay_samples = 0; + LADSPA_Data feedback = 0; + LADSPA_Data last_decay_time = 0; + LADSPA_Data last_delay_time = 0; + unsigned int sample_rate = 0; + long write_phase = 0; + + sample_rate = s_rate; + + plugin_data->buffer = buffer; + plugin_data->buffer_mask = buffer_mask; + plugin_data->delay_samples = delay_samples; + plugin_data->feedback = feedback; + plugin_data->last_decay_time = last_decay_time; + plugin_data->last_delay_time = last_delay_time; + plugin_data->sample_rate = sample_rate; + plugin_data->write_phase = write_phase; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runAllpass_n(LADSPA_Handle instance, unsigned long sample_count) { + Allpass_n *plugin_data = (Allpass_n *)instance; + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const in = plugin_data->in; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const out = plugin_data->out; + + /* Max Delay (s) (float value) */ + const LADSPA_Data max_delay = *(plugin_data->max_delay); + + /* Delay Time (s) (float value) */ + const LADSPA_Data delay_time = *(plugin_data->delay_time); + + /* Decay Time (s) (float value) */ + const LADSPA_Data decay_time = *(plugin_data->decay_time); + LADSPA_Data * buffer = plugin_data->buffer; + unsigned int buffer_mask = plugin_data->buffer_mask; + LADSPA_Data delay_samples = plugin_data->delay_samples; + LADSPA_Data feedback = plugin_data->feedback; + LADSPA_Data last_decay_time = plugin_data->last_decay_time; + LADSPA_Data last_delay_time = plugin_data->last_delay_time; + unsigned int sample_rate = plugin_data->sample_rate; + long write_phase = plugin_data->write_phase; + + unsigned int i; + + ignore(max_delay); + + if (write_phase == 0) { + plugin_data->last_delay_time = delay_time; + plugin_data->last_decay_time = decay_time; + plugin_data->delay_samples = delay_samples = CALC_DELAY (delay_time); + plugin_data->feedback = feedback = calc_feedback (delay_time, decay_time); + } + + if (delay_time == last_delay_time) { + long read_phase = write_phase - (long)delay_samples; + LADSPA_Data *readptr = buffer + (read_phase & buffer_mask); + LADSPA_Data *writeptr = buffer + (write_phase & buffer_mask); + LADSPA_Data *lastptr = buffer + buffer_mask + 1; + + if (decay_time == last_decay_time) { + long remain = sample_count; + + while (remain) { + long read_space = lastptr - readptr; + long write_space = lastptr - writeptr; + long to_process = MIN (MIN (read_space, remain), write_space); + + if (to_process == 0) + return; // buffer not allocated. + + remain -= to_process; + + for (i=0; ilast_decay_time = decay_time; + plugin_data->feedback = feedback; + } + + write_phase += sample_count; + } else { + float next_delay_samples = CALC_DELAY (delay_time); + float delay_samples_slope = (next_delay_samples - delay_samples) / sample_count; + float next_feedback = calc_feedback (delay_time, decay_time); + float feedback_slope = (next_feedback - feedback) / sample_count; + + for (i=0; ilast_delay_time = delay_time; + plugin_data->last_decay_time = decay_time; + plugin_data->feedback = feedback; + plugin_data->delay_samples = delay_samples; + } + + plugin_data->write_phase = write_phase; +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainAllpass_n(LADSPA_Handle instance, LADSPA_Data gain) { + ((Allpass_n *)instance)->run_adding_gain = gain; +} + +static void runAddingAllpass_n(LADSPA_Handle instance, unsigned long sample_count) { + Allpass_n *plugin_data = (Allpass_n *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const in = plugin_data->in; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const out = plugin_data->out; + + /* Max Delay (s) (float value) */ + const LADSPA_Data max_delay = *(plugin_data->max_delay); + + /* Delay Time (s) (float value) */ + const LADSPA_Data delay_time = *(plugin_data->delay_time); + + /* Decay Time (s) (float value) */ + const LADSPA_Data decay_time = *(plugin_data->decay_time); + LADSPA_Data * buffer = plugin_data->buffer; + unsigned int buffer_mask = plugin_data->buffer_mask; + LADSPA_Data delay_samples = plugin_data->delay_samples; + LADSPA_Data feedback = plugin_data->feedback; + LADSPA_Data last_decay_time = plugin_data->last_decay_time; + LADSPA_Data last_delay_time = plugin_data->last_delay_time; + unsigned int sample_rate = plugin_data->sample_rate; + long write_phase = plugin_data->write_phase; + + unsigned int i; + + ignore(max_delay); + + if (write_phase == 0) { + plugin_data->last_delay_time = delay_time; + plugin_data->last_decay_time = decay_time; + plugin_data->delay_samples = delay_samples = CALC_DELAY (delay_time); + plugin_data->feedback = feedback = calc_feedback (delay_time, decay_time); + } + + if (delay_time == last_delay_time) { + long read_phase = write_phase - (long)delay_samples; + LADSPA_Data *readptr = buffer + (read_phase & buffer_mask); + LADSPA_Data *writeptr = buffer + (write_phase & buffer_mask); + LADSPA_Data *lastptr = buffer + buffer_mask + 1; + + if (decay_time == last_decay_time) { + long remain = sample_count; + + while (remain) { + long read_space = lastptr - readptr; + long write_space = lastptr - writeptr; + long to_process = MIN (MIN (read_space, remain), write_space); + + if (to_process == 0) + return; // buffer not allocated. + + remain -= to_process; + + for (i=0; ilast_decay_time = decay_time; + plugin_data->feedback = feedback; + } + + write_phase += sample_count; + } else { + float next_delay_samples = CALC_DELAY (delay_time); + float delay_samples_slope = (next_delay_samples - delay_samples) / sample_count; + float next_feedback = calc_feedback (delay_time, decay_time); + float feedback_slope = (next_feedback - feedback) / sample_count; + + for (i=0; ilast_delay_time = delay_time; + plugin_data->last_decay_time = decay_time; + plugin_data->feedback = feedback; + plugin_data->delay_samples = delay_samples; + } + + plugin_data->write_phase = write_phase; +} + +static void activateAllpass_l(LADSPA_Handle instance) { + Allpass_l *plugin_data = (Allpass_l *)instance; + LADSPA_Data *buffer = plugin_data->buffer; + unsigned int buffer_mask = plugin_data->buffer_mask; + LADSPA_Data delay_samples = plugin_data->delay_samples; + LADSPA_Data feedback = plugin_data->feedback; + LADSPA_Data last_decay_time = plugin_data->last_decay_time; + LADSPA_Data last_delay_time = plugin_data->last_delay_time; + unsigned int sample_rate = plugin_data->sample_rate; + long write_phase = plugin_data->write_phase; + unsigned int minsize, size; + + if (plugin_data->max_delay && *plugin_data->max_delay > 0) + minsize = sample_rate * *plugin_data->max_delay; + else if (plugin_data->delay_time) + minsize = sample_rate * *plugin_data->delay_time; + else + minsize = sample_rate; /* 1 second default */ + + size = 1; + while (size < minsize) size <<= 1; + + /* calloc sets the buffer to zero. */ + buffer = calloc(size, sizeof(LADSPA_Data)); + if (buffer) + buffer_mask = size - 1; + else + buffer_mask = 0; + write_phase = 0; + plugin_data->buffer = buffer; + plugin_data->buffer_mask = buffer_mask; + plugin_data->delay_samples = delay_samples; + plugin_data->feedback = feedback; + plugin_data->last_decay_time = last_decay_time; + plugin_data->last_delay_time = last_delay_time; + plugin_data->sample_rate = sample_rate; + plugin_data->write_phase = write_phase; + +} + +static void cleanupAllpass_l(LADSPA_Handle instance) { + Allpass_l *plugin_data = (Allpass_l *)instance; + free(plugin_data->buffer); + free(instance); +} + +static void connectPortAllpass_l( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + Allpass_l *plugin; + + plugin = (Allpass_l *)instance; + switch (port) { + case ALLPASS_L_IN: + plugin->in = data; + break; + case ALLPASS_L_OUT: + plugin->out = data; + break; + case ALLPASS_L_MAX_DELAY: + plugin->max_delay = data; + break; + case ALLPASS_L_DELAY_TIME: + plugin->delay_time = data; + break; + case ALLPASS_L_DECAY_TIME: + plugin->decay_time = data; + break; + } +} + +static LADSPA_Handle instantiateAllpass_l( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + Allpass_l *plugin_data = (Allpass_l *)malloc(sizeof(Allpass_l)); + LADSPA_Data *buffer = NULL; + unsigned int buffer_mask = 0; + LADSPA_Data delay_samples = 0; + LADSPA_Data feedback = 0; + LADSPA_Data last_decay_time = 0; + LADSPA_Data last_delay_time = 0; + unsigned int sample_rate = 0; + long write_phase = 0; + + sample_rate = s_rate; + + plugin_data->buffer = buffer; + plugin_data->buffer_mask = buffer_mask; + plugin_data->delay_samples = delay_samples; + plugin_data->feedback = feedback; + plugin_data->last_decay_time = last_decay_time; + plugin_data->last_delay_time = last_delay_time; + plugin_data->sample_rate = sample_rate; + plugin_data->write_phase = write_phase; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runAllpass_l(LADSPA_Handle instance, unsigned long sample_count) { + Allpass_l *plugin_data = (Allpass_l *)instance; + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const in = plugin_data->in; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const out = plugin_data->out; + + /* Delay Time (s) (float value) */ + const LADSPA_Data delay_time = *(plugin_data->delay_time); + + /* Decay Time (s) (float value) */ + const LADSPA_Data decay_time = *(plugin_data->decay_time); + LADSPA_Data * buffer = plugin_data->buffer; + unsigned int buffer_mask = plugin_data->buffer_mask; + LADSPA_Data delay_samples = plugin_data->delay_samples; + LADSPA_Data feedback = plugin_data->feedback; + LADSPA_Data last_decay_time = plugin_data->last_decay_time; + LADSPA_Data last_delay_time = plugin_data->last_delay_time; + unsigned int sample_rate = plugin_data->sample_rate; + long write_phase = plugin_data->write_phase; + + unsigned int i; + + if (write_phase == 0) { + plugin_data->last_delay_time = delay_time; + plugin_data->last_decay_time = decay_time; + plugin_data->delay_samples = delay_samples = CALC_DELAY (delay_time); + plugin_data->feedback = feedback = calc_feedback (delay_time, decay_time); + } + + if (delay_time == last_delay_time && decay_time == last_decay_time) { + long idelay_samples = (long)delay_samples; + LADSPA_Data frac = delay_samples - idelay_samples; + + for (i=0; ilast_delay_time = delay_time; + plugin_data->last_decay_time = decay_time; + plugin_data->feedback = feedback; + plugin_data->delay_samples = delay_samples; + } + + plugin_data->write_phase = write_phase; +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainAllpass_l(LADSPA_Handle instance, LADSPA_Data gain) { + ((Allpass_l *)instance)->run_adding_gain = gain; +} + +static void runAddingAllpass_l(LADSPA_Handle instance, unsigned long sample_count) { + Allpass_l *plugin_data = (Allpass_l *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const in = plugin_data->in; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const out = plugin_data->out; + + /* Delay Time (s) (float value) */ + const LADSPA_Data delay_time = *(plugin_data->delay_time); + + /* Decay Time (s) (float value) */ + const LADSPA_Data decay_time = *(plugin_data->decay_time); + LADSPA_Data * buffer = plugin_data->buffer; + unsigned int buffer_mask = plugin_data->buffer_mask; + LADSPA_Data delay_samples = plugin_data->delay_samples; + LADSPA_Data feedback = plugin_data->feedback; + LADSPA_Data last_decay_time = plugin_data->last_decay_time; + LADSPA_Data last_delay_time = plugin_data->last_delay_time; + unsigned int sample_rate = plugin_data->sample_rate; + long write_phase = plugin_data->write_phase; + + unsigned int i; + + if (write_phase == 0) { + plugin_data->last_delay_time = delay_time; + plugin_data->last_decay_time = decay_time; + plugin_data->delay_samples = delay_samples = CALC_DELAY (delay_time); + plugin_data->feedback = feedback = calc_feedback (delay_time, decay_time); + } + + if (delay_time == last_delay_time && decay_time == last_decay_time) { + long idelay_samples = (long)delay_samples; + LADSPA_Data frac = delay_samples - idelay_samples; + + for (i=0; ilast_delay_time = delay_time; + plugin_data->last_decay_time = decay_time; + plugin_data->feedback = feedback; + plugin_data->delay_samples = delay_samples; + } + + plugin_data->write_phase = write_phase; +} + +static void activateAllpass_c(LADSPA_Handle instance) { + Allpass_c *plugin_data = (Allpass_c *)instance; + LADSPA_Data *buffer = plugin_data->buffer; + unsigned int buffer_mask = plugin_data->buffer_mask; + LADSPA_Data delay_samples = plugin_data->delay_samples; + LADSPA_Data feedback = plugin_data->feedback; + LADSPA_Data last_decay_time = plugin_data->last_decay_time; + LADSPA_Data last_delay_time = plugin_data->last_delay_time; + unsigned int sample_rate = plugin_data->sample_rate; + long write_phase = plugin_data->write_phase; + unsigned int minsize, size; + + if (plugin_data->max_delay && *plugin_data->max_delay > 0) + minsize = sample_rate * *plugin_data->max_delay; + else if (plugin_data->delay_time) + minsize = sample_rate * *plugin_data->delay_time; + else + minsize = sample_rate; /* 1 second default */ + + size = 1; + while (size < minsize) size <<= 1; + + /* calloc sets the buffer to zero. */ + buffer = calloc(size, sizeof(LADSPA_Data)); + if (buffer) + buffer_mask = size - 1; + else + buffer_mask = 0; + write_phase = 0; + plugin_data->buffer = buffer; + plugin_data->buffer_mask = buffer_mask; + plugin_data->delay_samples = delay_samples; + plugin_data->feedback = feedback; + plugin_data->last_decay_time = last_decay_time; + plugin_data->last_delay_time = last_delay_time; + plugin_data->sample_rate = sample_rate; + plugin_data->write_phase = write_phase; + +} + +static void cleanupAllpass_c(LADSPA_Handle instance) { + Allpass_c *plugin_data = (Allpass_c *)instance; + free(plugin_data->buffer); + free(instance); +} + +static void connectPortAllpass_c( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + Allpass_c *plugin; + + plugin = (Allpass_c *)instance; + switch (port) { + case ALLPASS_C_IN: + plugin->in = data; + break; + case ALLPASS_C_OUT: + plugin->out = data; + break; + case ALLPASS_C_MAX_DELAY: + plugin->max_delay = data; + break; + case ALLPASS_C_DELAY_TIME: + plugin->delay_time = data; + break; + case ALLPASS_C_DECAY_TIME: + plugin->decay_time = data; + break; + } +} + +static LADSPA_Handle instantiateAllpass_c( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + Allpass_c *plugin_data = (Allpass_c *)malloc(sizeof(Allpass_c)); + LADSPA_Data *buffer = NULL; + unsigned int buffer_mask = 0; + LADSPA_Data delay_samples = 0; + LADSPA_Data feedback = 0; + LADSPA_Data last_decay_time = 0; + LADSPA_Data last_delay_time = 0; + unsigned int sample_rate = 0; + long write_phase = 0; + + sample_rate = s_rate; + + plugin_data->buffer = buffer; + plugin_data->buffer_mask = buffer_mask; + plugin_data->delay_samples = delay_samples; + plugin_data->feedback = feedback; + plugin_data->last_decay_time = last_decay_time; + plugin_data->last_delay_time = last_delay_time; + plugin_data->sample_rate = sample_rate; + plugin_data->write_phase = write_phase; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runAllpass_c(LADSPA_Handle instance, unsigned long sample_count) { + Allpass_c *plugin_data = (Allpass_c *)instance; + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const in = plugin_data->in; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const out = plugin_data->out; + + /* Delay Time (s) (float value) */ + const LADSPA_Data delay_time = *(plugin_data->delay_time); + + /* Decay Time (s) (float value) */ + const LADSPA_Data decay_time = *(plugin_data->decay_time); + LADSPA_Data * buffer = plugin_data->buffer; + unsigned int buffer_mask = plugin_data->buffer_mask; + LADSPA_Data delay_samples = plugin_data->delay_samples; + LADSPA_Data feedback = plugin_data->feedback; + LADSPA_Data last_decay_time = plugin_data->last_decay_time; + LADSPA_Data last_delay_time = plugin_data->last_delay_time; + unsigned int sample_rate = plugin_data->sample_rate; + long write_phase = plugin_data->write_phase; + + unsigned int i; + + if (write_phase == 0) { + plugin_data->last_delay_time = delay_time; + plugin_data->last_decay_time = decay_time; + plugin_data->delay_samples = delay_samples = CALC_DELAY (delay_time); + plugin_data->feedback = feedback = calc_feedback (delay_time, decay_time); + } + + if (delay_time == last_delay_time && decay_time == last_decay_time) { + long idelay_samples = (long)delay_samples; + LADSPA_Data frac = delay_samples - idelay_samples; + + for (i=0; ilast_delay_time = delay_time; + plugin_data->last_decay_time = decay_time; + plugin_data->feedback = feedback; + plugin_data->delay_samples = delay_samples; + } + + plugin_data->write_phase = write_phase; +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainAllpass_c(LADSPA_Handle instance, LADSPA_Data gain) { + ((Allpass_c *)instance)->run_adding_gain = gain; +} + +static void runAddingAllpass_c(LADSPA_Handle instance, unsigned long sample_count) { + Allpass_c *plugin_data = (Allpass_c *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const in = plugin_data->in; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const out = plugin_data->out; + + /* Delay Time (s) (float value) */ + const LADSPA_Data delay_time = *(plugin_data->delay_time); + + /* Decay Time (s) (float value) */ + const LADSPA_Data decay_time = *(plugin_data->decay_time); + LADSPA_Data * buffer = plugin_data->buffer; + unsigned int buffer_mask = plugin_data->buffer_mask; + LADSPA_Data delay_samples = plugin_data->delay_samples; + LADSPA_Data feedback = plugin_data->feedback; + LADSPA_Data last_decay_time = plugin_data->last_decay_time; + LADSPA_Data last_delay_time = plugin_data->last_delay_time; + unsigned int sample_rate = plugin_data->sample_rate; + long write_phase = plugin_data->write_phase; + + unsigned int i; + + if (write_phase == 0) { + plugin_data->last_delay_time = delay_time; + plugin_data->last_decay_time = decay_time; + plugin_data->delay_samples = delay_samples = CALC_DELAY (delay_time); + plugin_data->feedback = feedback = calc_feedback (delay_time, decay_time); + } + + if (delay_time == last_delay_time && decay_time == last_decay_time) { + long idelay_samples = (long)delay_samples; + LADSPA_Data frac = delay_samples - idelay_samples; + + for (i=0; ilast_delay_time = delay_time; + plugin_data->last_decay_time = decay_time; + plugin_data->feedback = feedback; + plugin_data->delay_samples = delay_samples; + } + + plugin_data->write_phase = write_phase; +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + allpass_nDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (allpass_nDescriptor) { + allpass_nDescriptor->UniqueID = 1895; + allpass_nDescriptor->Label = "allpass_n"; + allpass_nDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + allpass_nDescriptor->Name = + D_("Allpass delay line, noninterpolating"); + allpass_nDescriptor->Maker = + "Andy Wingo "; + allpass_nDescriptor->Copyright = + "GPL"; + allpass_nDescriptor->PortCount = 5; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(5, + sizeof(LADSPA_PortDescriptor)); + allpass_nDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(5, + sizeof(LADSPA_PortRangeHint)); + allpass_nDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(5, sizeof(char*)); + allpass_nDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Input */ + port_descriptors[ALLPASS_N_IN] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[ALLPASS_N_IN] = + D_("Input"); + port_range_hints[ALLPASS_N_IN].HintDescriptor = 0; + + /* Parameters for Output */ + port_descriptors[ALLPASS_N_OUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[ALLPASS_N_OUT] = + D_("Output"); + port_range_hints[ALLPASS_N_OUT].HintDescriptor = 0; + + /* Parameters for Max Delay (s) */ + port_descriptors[ALLPASS_N_MAX_DELAY] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[ALLPASS_N_MAX_DELAY] = + D_("Max Delay (s)"); + port_range_hints[ALLPASS_N_MAX_DELAY].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW; + port_range_hints[ALLPASS_N_MAX_DELAY].LowerBound = 0; + + /* Parameters for Delay Time (s) */ + port_descriptors[ALLPASS_N_DELAY_TIME] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[ALLPASS_N_DELAY_TIME] = + D_("Delay Time (s)"); + port_range_hints[ALLPASS_N_DELAY_TIME].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW; + port_range_hints[ALLPASS_N_DELAY_TIME].LowerBound = 0; + + /* Parameters for Decay Time (s) */ + port_descriptors[ALLPASS_N_DECAY_TIME] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[ALLPASS_N_DECAY_TIME] = + D_("Decay Time (s)"); + port_range_hints[ALLPASS_N_DECAY_TIME].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW; + port_range_hints[ALLPASS_N_DECAY_TIME].LowerBound = 0; + + allpass_nDescriptor->activate = activateAllpass_n; + allpass_nDescriptor->cleanup = cleanupAllpass_n; + allpass_nDescriptor->connect_port = connectPortAllpass_n; + allpass_nDescriptor->deactivate = NULL; + allpass_nDescriptor->instantiate = instantiateAllpass_n; + allpass_nDescriptor->run = runAllpass_n; + allpass_nDescriptor->run_adding = runAddingAllpass_n; + allpass_nDescriptor->set_run_adding_gain = setRunAddingGainAllpass_n; + } + + allpass_lDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (allpass_lDescriptor) { + allpass_lDescriptor->UniqueID = 1896; + allpass_lDescriptor->Label = "allpass_l"; + allpass_lDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + allpass_lDescriptor->Name = + D_("Allpass delay line, linear interpolation"); + allpass_lDescriptor->Maker = + "Andy Wingo "; + allpass_lDescriptor->Copyright = + "GPL"; + allpass_lDescriptor->PortCount = 5; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(5, + sizeof(LADSPA_PortDescriptor)); + allpass_lDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(5, + sizeof(LADSPA_PortRangeHint)); + allpass_lDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(5, sizeof(char*)); + allpass_lDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Input */ + port_descriptors[ALLPASS_L_IN] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[ALLPASS_L_IN] = + D_("Input"); + port_range_hints[ALLPASS_L_IN].HintDescriptor = 0; + + /* Parameters for Output */ + port_descriptors[ALLPASS_L_OUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[ALLPASS_L_OUT] = + D_("Output"); + port_range_hints[ALLPASS_L_OUT].HintDescriptor = 0; + + /* Parameters for Max Delay (s) */ + port_descriptors[ALLPASS_L_MAX_DELAY] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[ALLPASS_L_MAX_DELAY] = + D_("Max Delay (s)"); + port_range_hints[ALLPASS_L_MAX_DELAY].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW; + port_range_hints[ALLPASS_L_MAX_DELAY].LowerBound = 0; + + /* Parameters for Delay Time (s) */ + port_descriptors[ALLPASS_L_DELAY_TIME] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[ALLPASS_L_DELAY_TIME] = + D_("Delay Time (s)"); + port_range_hints[ALLPASS_L_DELAY_TIME].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW; + port_range_hints[ALLPASS_L_DELAY_TIME].LowerBound = 0; + + /* Parameters for Decay Time (s) */ + port_descriptors[ALLPASS_L_DECAY_TIME] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[ALLPASS_L_DECAY_TIME] = + D_("Decay Time (s)"); + port_range_hints[ALLPASS_L_DECAY_TIME].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW; + port_range_hints[ALLPASS_L_DECAY_TIME].LowerBound = 0; + + allpass_lDescriptor->activate = activateAllpass_l; + allpass_lDescriptor->cleanup = cleanupAllpass_l; + allpass_lDescriptor->connect_port = connectPortAllpass_l; + allpass_lDescriptor->deactivate = NULL; + allpass_lDescriptor->instantiate = instantiateAllpass_l; + allpass_lDescriptor->run = runAllpass_l; + allpass_lDescriptor->run_adding = runAddingAllpass_l; + allpass_lDescriptor->set_run_adding_gain = setRunAddingGainAllpass_l; + } + + allpass_cDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (allpass_cDescriptor) { + allpass_cDescriptor->UniqueID = 1897; + allpass_cDescriptor->Label = "allpass_c"; + allpass_cDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + allpass_cDescriptor->Name = + D_("Allpass delay line, cubic spline interpolation"); + allpass_cDescriptor->Maker = + "Andy Wingo "; + allpass_cDescriptor->Copyright = + "GPL"; + allpass_cDescriptor->PortCount = 5; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(5, + sizeof(LADSPA_PortDescriptor)); + allpass_cDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(5, + sizeof(LADSPA_PortRangeHint)); + allpass_cDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(5, sizeof(char*)); + allpass_cDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Input */ + port_descriptors[ALLPASS_C_IN] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[ALLPASS_C_IN] = + D_("Input"); + port_range_hints[ALLPASS_C_IN].HintDescriptor = 0; + + /* Parameters for Output */ + port_descriptors[ALLPASS_C_OUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[ALLPASS_C_OUT] = + D_("Output"); + port_range_hints[ALLPASS_C_OUT].HintDescriptor = 0; + + /* Parameters for Max Delay (s) */ + port_descriptors[ALLPASS_C_MAX_DELAY] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[ALLPASS_C_MAX_DELAY] = + D_("Max Delay (s)"); + port_range_hints[ALLPASS_C_MAX_DELAY].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW; + port_range_hints[ALLPASS_C_MAX_DELAY].LowerBound = 0; + + /* Parameters for Delay Time (s) */ + port_descriptors[ALLPASS_C_DELAY_TIME] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[ALLPASS_C_DELAY_TIME] = + D_("Delay Time (s)"); + port_range_hints[ALLPASS_C_DELAY_TIME].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW; + port_range_hints[ALLPASS_C_DELAY_TIME].LowerBound = 0; + + /* Parameters for Decay Time (s) */ + port_descriptors[ALLPASS_C_DECAY_TIME] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[ALLPASS_C_DECAY_TIME] = + D_("Decay Time (s)"); + port_range_hints[ALLPASS_C_DECAY_TIME].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW; + port_range_hints[ALLPASS_C_DECAY_TIME].LowerBound = 0; + + allpass_cDescriptor->activate = activateAllpass_c; + allpass_cDescriptor->cleanup = cleanupAllpass_c; + allpass_cDescriptor->connect_port = connectPortAllpass_c; + allpass_cDescriptor->deactivate = NULL; + allpass_cDescriptor->instantiate = instantiateAllpass_c; + allpass_cDescriptor->run = runAllpass_c; + allpass_cDescriptor->run_adding = runAddingAllpass_c; + allpass_cDescriptor->set_run_adding_gain = setRunAddingGainAllpass_c; + } +} + +void _fini() { + if (allpass_nDescriptor) { + free((LADSPA_PortDescriptor *)allpass_nDescriptor->PortDescriptors); + free((char **)allpass_nDescriptor->PortNames); + free((LADSPA_PortRangeHint *)allpass_nDescriptor->PortRangeHints); + free(allpass_nDescriptor); + } + if (allpass_lDescriptor) { + free((LADSPA_PortDescriptor *)allpass_lDescriptor->PortDescriptors); + free((char **)allpass_lDescriptor->PortNames); + free((LADSPA_PortRangeHint *)allpass_lDescriptor->PortRangeHints); + free(allpass_lDescriptor); + } + if (allpass_cDescriptor) { + free((LADSPA_PortDescriptor *)allpass_cDescriptor->PortDescriptors); + free((char **)allpass_cDescriptor->PortNames); + free((LADSPA_PortRangeHint *)allpass_cDescriptor->PortRangeHints); + free(allpass_cDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/am_pitchshift_1433.c b/plugins/LadspaEffect/swh/am_pitchshift_1433.c new file mode 100644 index 000000000..94b919942 --- /dev/null +++ b/plugins/LadspaEffect/swh/am_pitchshift_1433.c @@ -0,0 +1,466 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + +#line 10 "am_pitchshift_1433.xml" + +#include +#include + +#include "ladspa-util.h" + +/* Beware of dependcies if you change this */ +#define DELAY_SIZE 8192 + +#define AMPITCHSHIFT_PITCH 0 +#define AMPITCHSHIFT_SIZE 1 +#define AMPITCHSHIFT_INPUT 2 +#define AMPITCHSHIFT_OUTPUT 3 +#define AMPITCHSHIFT_LATENCY 4 + +static LADSPA_Descriptor *amPitchshiftDescriptor = NULL; + +typedef struct { + LADSPA_Data *pitch; + LADSPA_Data *size; + LADSPA_Data *input; + LADSPA_Data *output; + LADSPA_Data *latency; + unsigned int count; + LADSPA_Data *delay; + unsigned int delay_mask; + unsigned int delay_ofs; + float last_gain; + float last_inc; + int last_size; + fixp16 rptr; + unsigned int wptr; + LADSPA_Data run_adding_gain; +} AmPitchshift; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return amPitchshiftDescriptor; + default: + return NULL; + } +} + +static void cleanupAmPitchshift(LADSPA_Handle instance) { +#line 39 "am_pitchshift_1433.xml" + AmPitchshift *plugin_data = (AmPitchshift *)instance; + free(plugin_data->delay); + free(instance); +} + +static void connectPortAmPitchshift( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + AmPitchshift *plugin; + + plugin = (AmPitchshift *)instance; + switch (port) { + case AMPITCHSHIFT_PITCH: + plugin->pitch = data; + break; + case AMPITCHSHIFT_SIZE: + plugin->size = data; + break; + case AMPITCHSHIFT_INPUT: + plugin->input = data; + break; + case AMPITCHSHIFT_OUTPUT: + plugin->output = data; + break; + case AMPITCHSHIFT_LATENCY: + plugin->latency = data; + break; + } +} + +static LADSPA_Handle instantiateAmPitchshift( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + AmPitchshift *plugin_data = (AmPitchshift *)malloc(sizeof(AmPitchshift)); + unsigned int count; + LADSPA_Data *delay = NULL; + unsigned int delay_mask; + unsigned int delay_ofs; + float last_gain; + float last_inc; + int last_size; + fixp16 rptr; + unsigned int wptr; + +#line 27 "am_pitchshift_1433.xml" + delay = calloc(DELAY_SIZE, sizeof(LADSPA_Data)); + rptr.all = 0; + wptr = 0; + last_size = -1; + delay_mask = 0xFF; + delay_ofs = 0x80; + last_gain = 0.5f; + count = 0; + last_inc = 0.0f; + + plugin_data->count = count; + plugin_data->delay = delay; + plugin_data->delay_mask = delay_mask; + plugin_data->delay_ofs = delay_ofs; + plugin_data->last_gain = last_gain; + plugin_data->last_inc = last_inc; + plugin_data->last_size = last_size; + plugin_data->rptr = rptr; + plugin_data->wptr = wptr; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runAmPitchshift(LADSPA_Handle instance, unsigned long sample_count) { + AmPitchshift *plugin_data = (AmPitchshift *)instance; + + /* Pitch shift (float value) */ + const LADSPA_Data pitch = *(plugin_data->pitch); + + /* Buffer size (float value) */ + const LADSPA_Data size = *(plugin_data->size); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + unsigned int count = plugin_data->count; + LADSPA_Data * delay = plugin_data->delay; + unsigned int delay_mask = plugin_data->delay_mask; + unsigned int delay_ofs = plugin_data->delay_ofs; + float last_gain = plugin_data->last_gain; + float last_inc = plugin_data->last_inc; + int last_size = plugin_data->last_size; + fixp16 rptr = plugin_data->rptr; + unsigned int wptr = plugin_data->wptr; + +#line 43 "am_pitchshift_1433.xml" + unsigned long pos; + fixp16 om; + float gain = last_gain, gain_inc = last_inc; + unsigned int i; + + om.all = f_round(pitch * 65536.0f); + + if (size != last_size) { + int size_tmp = f_round(size); + + if (size_tmp > 7) { + size_tmp = 5; + } else if (size_tmp < 1) { + size_tmp = 1; + } + plugin_data->last_size = size; + + /* Calculate the ringbuf parameters, the magick constants will need + * to be changed if you change DELAY_SIZE */ + delay_mask = (1 << (size_tmp + 6)) - 1; + delay_ofs = 1 << (size_tmp + 5); + } + + for (pos = 0; pos < sample_count; pos++) { + float out = 0.0f; + + if (count++ > 14) { + float tmp; + count = 0; + tmp = 0.5f * (float)((rptr.part.in - wptr + delay_ofs/2) & + delay_mask) / (float)delay_ofs; + tmp = sinf(M_PI * 2.0f * tmp) * 0.5f + 0.5f; + gain_inc = (tmp - gain) / 15.0f; + } + gain += gain_inc; + + delay[wptr] = input[pos]; + + /* Add contributions from the two readpointers, scaled by thier + * distance from the write pointer */ + i = rptr.part.in; + out += cube_interp((float)rptr.part.fr * 0.0000152587f, + delay[(i - 1) & delay_mask], delay[i], + delay[(i + 1) & delay_mask], + delay[(i + 2) & delay_mask]) * (1.0f - gain); + i += delay_ofs; + out += cube_interp((float)rptr.part.fr * 0.0000152587f, + delay[(i - 1) & delay_mask], delay[i & delay_mask], + delay[(i + 1) & delay_mask], + delay[(i + 2) & delay_mask]) * gain; + + buffer_write(output[pos], out); + + /* Increment ringbuffer pointers */ + wptr = (wptr + 1) & delay_mask; + rptr.all += om.all; + rptr.part.in &= delay_mask; + } + + plugin_data->rptr.all = rptr.all; + plugin_data->wptr = wptr; + plugin_data->delay_mask = delay_mask; + plugin_data->delay_ofs = delay_ofs; + plugin_data->last_gain = gain; + plugin_data->count = count; + plugin_data->last_inc = gain_inc; + + *(plugin_data->latency) = delay_ofs/2; +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainAmPitchshift(LADSPA_Handle instance, LADSPA_Data gain) { + ((AmPitchshift *)instance)->run_adding_gain = gain; +} + +static void runAddingAmPitchshift(LADSPA_Handle instance, unsigned long sample_count) { + AmPitchshift *plugin_data = (AmPitchshift *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Pitch shift (float value) */ + const LADSPA_Data pitch = *(plugin_data->pitch); + + /* Buffer size (float value) */ + const LADSPA_Data size = *(plugin_data->size); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + unsigned int count = plugin_data->count; + LADSPA_Data * delay = plugin_data->delay; + unsigned int delay_mask = plugin_data->delay_mask; + unsigned int delay_ofs = plugin_data->delay_ofs; + float last_gain = plugin_data->last_gain; + float last_inc = plugin_data->last_inc; + int last_size = plugin_data->last_size; + fixp16 rptr = plugin_data->rptr; + unsigned int wptr = plugin_data->wptr; + +#line 43 "am_pitchshift_1433.xml" + unsigned long pos; + fixp16 om; + float gain = last_gain, gain_inc = last_inc; + unsigned int i; + + om.all = f_round(pitch * 65536.0f); + + if (size != last_size) { + int size_tmp = f_round(size); + + if (size_tmp > 7) { + size_tmp = 5; + } else if (size_tmp < 1) { + size_tmp = 1; + } + plugin_data->last_size = size; + + /* Calculate the ringbuf parameters, the magick constants will need + * to be changed if you change DELAY_SIZE */ + delay_mask = (1 << (size_tmp + 6)) - 1; + delay_ofs = 1 << (size_tmp + 5); + } + + for (pos = 0; pos < sample_count; pos++) { + float out = 0.0f; + + if (count++ > 14) { + float tmp; + count = 0; + tmp = 0.5f * (float)((rptr.part.in - wptr + delay_ofs/2) & + delay_mask) / (float)delay_ofs; + tmp = sinf(M_PI * 2.0f * tmp) * 0.5f + 0.5f; + gain_inc = (tmp - gain) / 15.0f; + } + gain += gain_inc; + + delay[wptr] = input[pos]; + + /* Add contributions from the two readpointers, scaled by thier + * distance from the write pointer */ + i = rptr.part.in; + out += cube_interp((float)rptr.part.fr * 0.0000152587f, + delay[(i - 1) & delay_mask], delay[i], + delay[(i + 1) & delay_mask], + delay[(i + 2) & delay_mask]) * (1.0f - gain); + i += delay_ofs; + out += cube_interp((float)rptr.part.fr * 0.0000152587f, + delay[(i - 1) & delay_mask], delay[i & delay_mask], + delay[(i + 1) & delay_mask], + delay[(i + 2) & delay_mask]) * gain; + + buffer_write(output[pos], out); + + /* Increment ringbuffer pointers */ + wptr = (wptr + 1) & delay_mask; + rptr.all += om.all; + rptr.part.in &= delay_mask; + } + + plugin_data->rptr.all = rptr.all; + plugin_data->wptr = wptr; + plugin_data->delay_mask = delay_mask; + plugin_data->delay_ofs = delay_ofs; + plugin_data->last_gain = gain; + plugin_data->count = count; + plugin_data->last_inc = gain_inc; + + *(plugin_data->latency) = delay_ofs/2; +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + amPitchshiftDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (amPitchshiftDescriptor) { + amPitchshiftDescriptor->UniqueID = 1433; + amPitchshiftDescriptor->Label = "amPitchshift"; + amPitchshiftDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + amPitchshiftDescriptor->Name = + D_("AM pitchshifter"); + amPitchshiftDescriptor->Maker = + "Steve Harris "; + amPitchshiftDescriptor->Copyright = + "GPL"; + amPitchshiftDescriptor->PortCount = 5; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(5, + sizeof(LADSPA_PortDescriptor)); + amPitchshiftDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(5, + sizeof(LADSPA_PortRangeHint)); + amPitchshiftDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(5, sizeof(char*)); + amPitchshiftDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Pitch shift */ + port_descriptors[AMPITCHSHIFT_PITCH] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[AMPITCHSHIFT_PITCH] = + D_("Pitch shift"); + port_range_hints[AMPITCHSHIFT_PITCH].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_LOGARITHMIC | LADSPA_HINT_DEFAULT_1; + port_range_hints[AMPITCHSHIFT_PITCH].LowerBound = 0.25; + port_range_hints[AMPITCHSHIFT_PITCH].UpperBound = 4.0; + + /* Parameters for Buffer size */ + port_descriptors[AMPITCHSHIFT_SIZE] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[AMPITCHSHIFT_SIZE] = + D_("Buffer size"); + port_range_hints[AMPITCHSHIFT_SIZE].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_INTEGER | LADSPA_HINT_DEFAULT_MIDDLE; + port_range_hints[AMPITCHSHIFT_SIZE].LowerBound = 1; + port_range_hints[AMPITCHSHIFT_SIZE].UpperBound = 7; + + /* Parameters for Input */ + port_descriptors[AMPITCHSHIFT_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[AMPITCHSHIFT_INPUT] = + D_("Input"); + port_range_hints[AMPITCHSHIFT_INPUT].HintDescriptor = 0; + + /* Parameters for Output */ + port_descriptors[AMPITCHSHIFT_OUTPUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[AMPITCHSHIFT_OUTPUT] = + D_("Output"); + port_range_hints[AMPITCHSHIFT_OUTPUT].HintDescriptor = 0; + + /* Parameters for latency */ + port_descriptors[AMPITCHSHIFT_LATENCY] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_CONTROL; + port_names[AMPITCHSHIFT_LATENCY] = + D_("latency"); + port_range_hints[AMPITCHSHIFT_LATENCY].HintDescriptor = 0; + + amPitchshiftDescriptor->activate = NULL; + amPitchshiftDescriptor->cleanup = cleanupAmPitchshift; + amPitchshiftDescriptor->connect_port = connectPortAmPitchshift; + amPitchshiftDescriptor->deactivate = NULL; + amPitchshiftDescriptor->instantiate = instantiateAmPitchshift; + amPitchshiftDescriptor->run = runAmPitchshift; + amPitchshiftDescriptor->run_adding = runAddingAmPitchshift; + amPitchshiftDescriptor->set_run_adding_gain = setRunAddingGainAmPitchshift; + } +} + +void _fini() { + if (amPitchshiftDescriptor) { + free((LADSPA_PortDescriptor *)amPitchshiftDescriptor->PortDescriptors); + free((char **)amPitchshiftDescriptor->PortNames); + free((LADSPA_PortRangeHint *)amPitchshiftDescriptor->PortRangeHints); + free(amPitchshiftDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/amp_1181.c b/plugins/LadspaEffect/swh/amp_1181.c new file mode 100644 index 000000000..c042c34b4 --- /dev/null +++ b/plugins/LadspaEffect/swh/amp_1181.c @@ -0,0 +1,244 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + +#line 10 "amp_1181.xml" + +#include "ladspa-util.h" + +#define AMP_GAIN 0 +#define AMP_INPUT 1 +#define AMP_OUTPUT 2 + +static LADSPA_Descriptor *ampDescriptor = NULL; + +typedef struct { + LADSPA_Data *gain; + LADSPA_Data *input; + LADSPA_Data *output; + LADSPA_Data run_adding_gain; +} Amp; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return ampDescriptor; + default: + return NULL; + } +} + +static void cleanupAmp(LADSPA_Handle instance) { + free(instance); +} + +static void connectPortAmp( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + Amp *plugin; + + plugin = (Amp *)instance; + switch (port) { + case AMP_GAIN: + plugin->gain = data; + break; + case AMP_INPUT: + plugin->input = data; + break; + case AMP_OUTPUT: + plugin->output = data; + break; + } +} + +static LADSPA_Handle instantiateAmp( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + Amp *plugin_data = (Amp *)malloc(sizeof(Amp)); + plugin_data->run_adding_gain = 1.0f; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runAmp(LADSPA_Handle instance, unsigned long sample_count) { + Amp *plugin_data = (Amp *)instance; + + /* Amps gain (dB) (float value) */ + const LADSPA_Data gain = *(plugin_data->gain); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + +#line 19 "amp_1181.xml" + unsigned long pos; + float coef = DB_CO(gain); + + for (pos = 0; pos < sample_count; pos++) { + buffer_write(output[pos], input[pos] * coef); + } +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainAmp(LADSPA_Handle instance, LADSPA_Data gain) { + ((Amp *)instance)->run_adding_gain = gain; +} + +static void runAddingAmp(LADSPA_Handle instance, unsigned long sample_count) { + Amp *plugin_data = (Amp *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Amps gain (dB) (float value) */ + const LADSPA_Data gain = *(plugin_data->gain); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + +#line 19 "amp_1181.xml" + unsigned long pos; + float coef = DB_CO(gain); + + for (pos = 0; pos < sample_count; pos++) { + buffer_write(output[pos], input[pos] * coef); + } +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + ampDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (ampDescriptor) { + ampDescriptor->UniqueID = 1181; + ampDescriptor->Label = "amp"; + ampDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + ampDescriptor->Name = + D_("Simple amplifier"); + ampDescriptor->Maker = + "Steve Harris "; + ampDescriptor->Copyright = + "GPL"; + ampDescriptor->PortCount = 3; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(3, + sizeof(LADSPA_PortDescriptor)); + ampDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(3, + sizeof(LADSPA_PortRangeHint)); + ampDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(3, sizeof(char*)); + ampDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Amps gain (dB) */ + port_descriptors[AMP_GAIN] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[AMP_GAIN] = + D_("Amps gain (dB)"); + port_range_hints[AMP_GAIN].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[AMP_GAIN].LowerBound = -70; + port_range_hints[AMP_GAIN].UpperBound = +70; + + /* Parameters for Input */ + port_descriptors[AMP_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[AMP_INPUT] = + D_("Input"); + port_range_hints[AMP_INPUT].HintDescriptor = 0; + + /* Parameters for Output */ + port_descriptors[AMP_OUTPUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[AMP_OUTPUT] = + D_("Output"); + port_range_hints[AMP_OUTPUT].HintDescriptor = 0; + + ampDescriptor->activate = NULL; + ampDescriptor->cleanup = cleanupAmp; + ampDescriptor->connect_port = connectPortAmp; + ampDescriptor->deactivate = NULL; + ampDescriptor->instantiate = instantiateAmp; + ampDescriptor->run = runAmp; + ampDescriptor->run_adding = runAddingAmp; + ampDescriptor->set_run_adding_gain = setRunAddingGainAmp; + } +} + +void _fini() { + if (ampDescriptor) { + free((LADSPA_PortDescriptor *)ampDescriptor->PortDescriptors); + free((char **)ampDescriptor->PortNames); + free((LADSPA_PortRangeHint *)ampDescriptor->PortRangeHints); + free(ampDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/bandpass_a_iir_1893.c b/plugins/LadspaEffect/swh/bandpass_a_iir_1893.c new file mode 100644 index 000000000..8bf97c185 --- /dev/null +++ b/plugins/LadspaEffect/swh/bandpass_a_iir_1893.c @@ -0,0 +1,288 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + +#include "config.h" +#include "util/iir.h" + +#define BANDPASS_A_IIR_CENTER 0 +#define BANDPASS_A_IIR_WIDTH 1 +#define BANDPASS_A_IIR_INPUT 2 +#define BANDPASS_A_IIR_OUTPUT 3 + +static LADSPA_Descriptor *bandpass_a_iirDescriptor = NULL; + +typedef struct { + LADSPA_Data *center; + LADSPA_Data *width; + LADSPA_Data *input; + LADSPA_Data *output; + iir_stage_t* gt; + iirf_t* iirf; + long sample_rate; + LADSPA_Data run_adding_gain; +} Bandpass_a_iir; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return bandpass_a_iirDescriptor; + default: + return NULL; + } +} + +static void activateBandpass_a_iir(LADSPA_Handle instance) { + Bandpass_a_iir *plugin_data = (Bandpass_a_iir *)instance; + iir_stage_t*gt = plugin_data->gt; + iirf_t*iirf = plugin_data->iirf; + long sample_rate = plugin_data->sample_rate; + + gt = init_iir_stage(IIR_STAGE_LOWPASS,1,3,2); + iirf = init_iirf_t(gt); + calc_2polebandpass(iirf, gt, *(plugin_data->center), *(plugin_data->width), sample_rate); + plugin_data->gt = gt; + plugin_data->iirf = iirf; + plugin_data->sample_rate = sample_rate; + +} + +static void cleanupBandpass_a_iir(LADSPA_Handle instance) { + Bandpass_a_iir *plugin_data = (Bandpass_a_iir *)instance; + free_iirf_t(plugin_data->iirf, plugin_data->gt); + free_iir_stage(plugin_data->gt); + free(instance); +} + +static void connectPortBandpass_a_iir( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + Bandpass_a_iir *plugin; + + plugin = (Bandpass_a_iir *)instance; + switch (port) { + case BANDPASS_A_IIR_CENTER: + plugin->center = data; + break; + case BANDPASS_A_IIR_WIDTH: + plugin->width = data; + break; + case BANDPASS_A_IIR_INPUT: + plugin->input = data; + break; + case BANDPASS_A_IIR_OUTPUT: + plugin->output = data; + break; + } +} + +static LADSPA_Handle instantiateBandpass_a_iir( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + Bandpass_a_iir *plugin_data = (Bandpass_a_iir *)malloc(sizeof(Bandpass_a_iir)); + iir_stage_t*gt = NULL; + iirf_t*iirf = NULL; + long sample_rate; + + sample_rate = s_rate; + + plugin_data->gt = gt; + plugin_data->iirf = iirf; + plugin_data->sample_rate = sample_rate; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runBandpass_a_iir(LADSPA_Handle instance, unsigned long sample_count) { + Bandpass_a_iir *plugin_data = (Bandpass_a_iir *)instance; + + /* Center Frequency (Hz) (float value) */ + const LADSPA_Data center = *(plugin_data->center); + + /* Bandwidth (Hz) (float value) */ + const LADSPA_Data width = *(plugin_data->width); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + iir_stage_t* gt = plugin_data->gt; + iirf_t* iirf = plugin_data->iirf; + long sample_rate = plugin_data->sample_rate; + + calc_2polebandpass(iirf, gt, center, width, sample_rate); + iir_process_buffer_1s_5(iirf, gt, input, output, sample_count,0); +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainBandpass_a_iir(LADSPA_Handle instance, LADSPA_Data gain) { + ((Bandpass_a_iir *)instance)->run_adding_gain = gain; +} + +static void runAddingBandpass_a_iir(LADSPA_Handle instance, unsigned long sample_count) { + Bandpass_a_iir *plugin_data = (Bandpass_a_iir *)instance; + + /* Center Frequency (Hz) (float value) */ + const LADSPA_Data center = *(plugin_data->center); + + /* Bandwidth (Hz) (float value) */ + const LADSPA_Data width = *(plugin_data->width); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + iir_stage_t* gt = plugin_data->gt; + iirf_t* iirf = plugin_data->iirf; + long sample_rate = plugin_data->sample_rate; + + calc_2polebandpass(iirf, gt, center, width, sample_rate); + iir_process_buffer_1s_5(iirf, gt, input, output, sample_count,0); +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + bandpass_a_iirDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (bandpass_a_iirDescriptor) { + bandpass_a_iirDescriptor->UniqueID = 1893; + bandpass_a_iirDescriptor->Label = "bandpass_a_iir"; + bandpass_a_iirDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + bandpass_a_iirDescriptor->Name = + D_("Glame Bandpass Analog Filter"); + bandpass_a_iirDescriptor->Maker = + "Alexander Ehlert "; + bandpass_a_iirDescriptor->Copyright = + "GPL"; + bandpass_a_iirDescriptor->PortCount = 4; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(4, + sizeof(LADSPA_PortDescriptor)); + bandpass_a_iirDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(4, + sizeof(LADSPA_PortRangeHint)); + bandpass_a_iirDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(4, sizeof(char*)); + bandpass_a_iirDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Center Frequency (Hz) */ + port_descriptors[BANDPASS_A_IIR_CENTER] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[BANDPASS_A_IIR_CENTER] = + D_("Center Frequency (Hz)"); + port_range_hints[BANDPASS_A_IIR_CENTER].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW | LADSPA_HINT_SAMPLE_RATE | LADSPA_HINT_LOGARITHMIC; + port_range_hints[BANDPASS_A_IIR_CENTER].LowerBound = 0.0001; + port_range_hints[BANDPASS_A_IIR_CENTER].UpperBound = 0.45; + + /* Parameters for Bandwidth (Hz) */ + port_descriptors[BANDPASS_A_IIR_WIDTH] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[BANDPASS_A_IIR_WIDTH] = + D_("Bandwidth (Hz)"); + port_range_hints[BANDPASS_A_IIR_WIDTH].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE | LADSPA_HINT_SAMPLE_RATE | LADSPA_HINT_LOGARITHMIC; + port_range_hints[BANDPASS_A_IIR_WIDTH].LowerBound = 0.0001; + port_range_hints[BANDPASS_A_IIR_WIDTH].UpperBound = 0.45; + + /* Parameters for Input */ + port_descriptors[BANDPASS_A_IIR_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[BANDPASS_A_IIR_INPUT] = + D_("Input"); + port_range_hints[BANDPASS_A_IIR_INPUT].HintDescriptor = 0; + + /* Parameters for Output */ + port_descriptors[BANDPASS_A_IIR_OUTPUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[BANDPASS_A_IIR_OUTPUT] = + D_("Output"); + port_range_hints[BANDPASS_A_IIR_OUTPUT].HintDescriptor = 0; + + bandpass_a_iirDescriptor->activate = activateBandpass_a_iir; + bandpass_a_iirDescriptor->cleanup = cleanupBandpass_a_iir; + bandpass_a_iirDescriptor->connect_port = connectPortBandpass_a_iir; + bandpass_a_iirDescriptor->deactivate = NULL; + bandpass_a_iirDescriptor->instantiate = instantiateBandpass_a_iir; + bandpass_a_iirDescriptor->run = runBandpass_a_iir; + bandpass_a_iirDescriptor->run_adding = runAddingBandpass_a_iir; + bandpass_a_iirDescriptor->set_run_adding_gain = setRunAddingGainBandpass_a_iir; + } +} + +void _fini() { + if (bandpass_a_iirDescriptor) { + free((LADSPA_PortDescriptor *)bandpass_a_iirDescriptor->PortDescriptors); + free((char **)bandpass_a_iirDescriptor->PortNames); + free((LADSPA_PortRangeHint *)bandpass_a_iirDescriptor->PortRangeHints); + free(bandpass_a_iirDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/bandpass_iir_1892.c b/plugins/LadspaEffect/swh/bandpass_iir_1892.c new file mode 100644 index 000000000..6207f6049 --- /dev/null +++ b/plugins/LadspaEffect/swh/bandpass_iir_1892.c @@ -0,0 +1,354 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + + +#include "config.h" +#include "util/iir.h" + +#define BANDPASS_IIR_CENTER 0 +#define BANDPASS_IIR_WIDTH 1 +#define BANDPASS_IIR_STAGES 2 +#define BANDPASS_IIR_INPUT 3 +#define BANDPASS_IIR_OUTPUT 4 + +static LADSPA_Descriptor *bandpass_iirDescriptor = NULL; + +typedef struct { + LADSPA_Data *center; + LADSPA_Data *width; + LADSPA_Data *stages; + LADSPA_Data *input; + LADSPA_Data *output; + iir_stage_t* first; + iir_stage_t* gt; + iirf_t* iirf; + float lfc; + long sample_rate; + iir_stage_t* second; + float ufc; + LADSPA_Data run_adding_gain; +} Bandpass_iir; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return bandpass_iirDescriptor; + default: + return NULL; + } +} + +static void activateBandpass_iir(LADSPA_Handle instance) { + Bandpass_iir *plugin_data = (Bandpass_iir *)instance; + iir_stage_t*first = plugin_data->first; + iir_stage_t*gt = plugin_data->gt; + iirf_t*iirf = plugin_data->iirf; + float lfc = plugin_data->lfc; + long sample_rate = plugin_data->sample_rate; + iir_stage_t*second = plugin_data->second; + float ufc = plugin_data->ufc; + + ufc = (*(plugin_data->center) + *(plugin_data->width)*0.5f)/(float)sample_rate; + lfc = (*(plugin_data->center) - *(plugin_data->width)*0.5f)/(float)sample_rate; + first = init_iir_stage(IIR_STAGE_LOWPASS,10,3,2); + second = init_iir_stage(IIR_STAGE_HIGHPASS,10,3,2); + gt = init_iir_stage(IIR_STAGE_BANDPASS,20,3,2); + iirf = init_iirf_t(gt); + chebyshev(iirf, first, 2*CLAMP((int)(*(plugin_data->stages)),1,10), IIR_STAGE_LOWPASS, ufc, 0.5f); + chebyshev(iirf, second, 2*CLAMP((int)(*(plugin_data->stages)),1,10), IIR_STAGE_HIGHPASS, lfc, 0.5f); + combine_iir_stages(IIR_STAGE_BANDPASS, gt, first, second,0,0); + plugin_data->first = first; + plugin_data->gt = gt; + plugin_data->iirf = iirf; + plugin_data->lfc = lfc; + plugin_data->sample_rate = sample_rate; + plugin_data->second = second; + plugin_data->ufc = ufc; + +} + +static void cleanupBandpass_iir(LADSPA_Handle instance) { + Bandpass_iir *plugin_data = (Bandpass_iir *)instance; + free_iirf_t(plugin_data->iirf, plugin_data->gt); + free_iir_stage(plugin_data->first); + free_iir_stage(plugin_data->second); + free_iir_stage(plugin_data->gt); + free(instance); +} + +static void connectPortBandpass_iir( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + Bandpass_iir *plugin; + + plugin = (Bandpass_iir *)instance; + switch (port) { + case BANDPASS_IIR_CENTER: + plugin->center = data; + break; + case BANDPASS_IIR_WIDTH: + plugin->width = data; + break; + case BANDPASS_IIR_STAGES: + plugin->stages = data; + break; + case BANDPASS_IIR_INPUT: + plugin->input = data; + break; + case BANDPASS_IIR_OUTPUT: + plugin->output = data; + break; + } +} + +static LADSPA_Handle instantiateBandpass_iir( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + Bandpass_iir *plugin_data = (Bandpass_iir *)malloc(sizeof(Bandpass_iir)); + iir_stage_t*first = NULL; + iir_stage_t*gt = NULL; + iirf_t*iirf = NULL; + float lfc = 0; + long sample_rate = 0; + iir_stage_t*second = NULL; + float ufc = 0; + + sample_rate = s_rate; + + plugin_data->first = first; + plugin_data->gt = gt; + plugin_data->iirf = iirf; + plugin_data->lfc = lfc; + plugin_data->sample_rate = sample_rate; + plugin_data->second = second; + plugin_data->ufc = ufc; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runBandpass_iir(LADSPA_Handle instance, unsigned long sample_count) { + Bandpass_iir *plugin_data = (Bandpass_iir *)instance; + + /* Center Frequency (Hz) (float value) */ + const LADSPA_Data center = *(plugin_data->center); + + /* Bandwidth (Hz) (float value) */ + const LADSPA_Data width = *(plugin_data->width); + + /* Stages(2 poles per stage) (float value) */ + const LADSPA_Data stages = *(plugin_data->stages); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + iir_stage_t* first = plugin_data->first; + iir_stage_t* gt = plugin_data->gt; + iirf_t* iirf = plugin_data->iirf; + float lfc = plugin_data->lfc; + long sample_rate = plugin_data->sample_rate; + iir_stage_t* second = plugin_data->second; + float ufc = plugin_data->ufc; + + ufc = (center + width*0.5f)/(float)sample_rate; + lfc = (center - width*0.5f)/(float)sample_rate; + combine_iir_stages(IIR_STAGE_BANDPASS, gt, first, second, + chebyshev(iirf, first, 2*CLAMP((int)stages,1,10), IIR_STAGE_LOWPASS, ufc, 0.5f), + chebyshev(iirf, second, 2*CLAMP((int)stages,1,10), IIR_STAGE_HIGHPASS, lfc, 0.5f)); + iir_process_buffer_ns_5(iirf, gt, input, output, sample_count,RUN_ADDING); +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainBandpass_iir(LADSPA_Handle instance, LADSPA_Data gain) { + ((Bandpass_iir *)instance)->run_adding_gain = gain; +} + +static void runAddingBandpass_iir(LADSPA_Handle instance, unsigned long sample_count) { + Bandpass_iir *plugin_data = (Bandpass_iir *)instance; + + /* Center Frequency (Hz) (float value) */ + const LADSPA_Data center = *(plugin_data->center); + + /* Bandwidth (Hz) (float value) */ + const LADSPA_Data width = *(plugin_data->width); + + /* Stages(2 poles per stage) (float value) */ + const LADSPA_Data stages = *(plugin_data->stages); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + iir_stage_t* first = plugin_data->first; + iir_stage_t* gt = plugin_data->gt; + iirf_t* iirf = plugin_data->iirf; + float lfc = plugin_data->lfc; + long sample_rate = plugin_data->sample_rate; + iir_stage_t* second = plugin_data->second; + float ufc = plugin_data->ufc; + + ufc = (center + width*0.5f)/(float)sample_rate; + lfc = (center - width*0.5f)/(float)sample_rate; + combine_iir_stages(IIR_STAGE_BANDPASS, gt, first, second, + chebyshev(iirf, first, 2*CLAMP((int)stages,1,10), IIR_STAGE_LOWPASS, ufc, 0.5f), + chebyshev(iirf, second, 2*CLAMP((int)stages,1,10), IIR_STAGE_HIGHPASS, lfc, 0.5f)); + iir_process_buffer_ns_5(iirf, gt, input, output, sample_count,RUN_ADDING); +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + bandpass_iirDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (bandpass_iirDescriptor) { + bandpass_iirDescriptor->UniqueID = 1892; + bandpass_iirDescriptor->Label = "bandpass_iir"; + bandpass_iirDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + bandpass_iirDescriptor->Name = + D_("Glame Bandpass Filter"); + bandpass_iirDescriptor->Maker = + "Alexander Ehlert "; + bandpass_iirDescriptor->Copyright = + "GPL"; + bandpass_iirDescriptor->PortCount = 5; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(5, + sizeof(LADSPA_PortDescriptor)); + bandpass_iirDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(5, + sizeof(LADSPA_PortRangeHint)); + bandpass_iirDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(5, sizeof(char*)); + bandpass_iirDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Center Frequency (Hz) */ + port_descriptors[BANDPASS_IIR_CENTER] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[BANDPASS_IIR_CENTER] = + D_("Center Frequency (Hz)"); + port_range_hints[BANDPASS_IIR_CENTER].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE | LADSPA_HINT_SAMPLE_RATE | LADSPA_HINT_LOGARITHMIC; + port_range_hints[BANDPASS_IIR_CENTER].LowerBound = 0.0001; + port_range_hints[BANDPASS_IIR_CENTER].UpperBound = 0.45; + + /* Parameters for Bandwidth (Hz) */ + port_descriptors[BANDPASS_IIR_WIDTH] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[BANDPASS_IIR_WIDTH] = + D_("Bandwidth (Hz)"); + port_range_hints[BANDPASS_IIR_WIDTH].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE | LADSPA_HINT_SAMPLE_RATE | LADSPA_HINT_LOGARITHMIC; + port_range_hints[BANDPASS_IIR_WIDTH].LowerBound = 0.0001; + port_range_hints[BANDPASS_IIR_WIDTH].UpperBound = 0.45; + + /* Parameters for Stages(2 poles per stage) */ + port_descriptors[BANDPASS_IIR_STAGES] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[BANDPASS_IIR_STAGES] = + D_("Stages(2 poles per stage)"); + port_range_hints[BANDPASS_IIR_STAGES].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1 | LADSPA_HINT_INTEGER; + port_range_hints[BANDPASS_IIR_STAGES].LowerBound = 1.0; + port_range_hints[BANDPASS_IIR_STAGES].UpperBound = 10.0; + + /* Parameters for Input */ + port_descriptors[BANDPASS_IIR_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[BANDPASS_IIR_INPUT] = + D_("Input"); + port_range_hints[BANDPASS_IIR_INPUT].HintDescriptor = 0; + + /* Parameters for Output */ + port_descriptors[BANDPASS_IIR_OUTPUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[BANDPASS_IIR_OUTPUT] = + D_("Output"); + port_range_hints[BANDPASS_IIR_OUTPUT].HintDescriptor = 0; + + bandpass_iirDescriptor->activate = activateBandpass_iir; + bandpass_iirDescriptor->cleanup = cleanupBandpass_iir; + bandpass_iirDescriptor->connect_port = connectPortBandpass_iir; + bandpass_iirDescriptor->deactivate = NULL; + bandpass_iirDescriptor->instantiate = instantiateBandpass_iir; + bandpass_iirDescriptor->run = runBandpass_iir; + bandpass_iirDescriptor->run_adding = runAddingBandpass_iir; + bandpass_iirDescriptor->set_run_adding_gain = setRunAddingGainBandpass_iir; + } +} + +void _fini() { + if (bandpass_iirDescriptor) { + free((LADSPA_PortDescriptor *)bandpass_iirDescriptor->PortDescriptors); + free((char **)bandpass_iirDescriptor->PortNames); + free((LADSPA_PortRangeHint *)bandpass_iirDescriptor->PortRangeHints); + free(bandpass_iirDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/bode_shifter_1431.c b/plugins/LadspaEffect/swh/bode_shifter_1431.c new file mode 100644 index 000000000..5601a0eb1 --- /dev/null +++ b/plugins/LadspaEffect/swh/bode_shifter_1431.c @@ -0,0 +1,469 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + +#line 10 "bode_shifter_1431.xml" + +#include + +#include "ladspa-util.h" + +#define SIN_T_SIZE 1024 +#define D_SIZE 256 +#define NZEROS 200 + +/* The non-zero taps of the Hilbert transformer */ +static float xcoeffs[] = { + +0.0008103736f, +0.0008457886f, +0.0009017196f, +0.0009793364f, + +0.0010798341f, +0.0012044365f, +0.0013544008f, +0.0015310235f, + +0.0017356466f, +0.0019696659f, +0.0022345404f, +0.0025318040f, + +0.0028630784f, +0.0032300896f, +0.0036346867f, +0.0040788644f, + +0.0045647903f, +0.0050948365f, +0.0056716186f, +0.0062980419f, + +0.0069773575f, +0.0077132300f, +0.0085098208f, +0.0093718901f, + +0.0103049226f, +0.0113152847f, +0.0124104218f, +0.0135991079f, + +0.0148917649f, +0.0163008758f, +0.0178415242f, +0.0195321089f, + +0.0213953037f, +0.0234593652f, +0.0257599469f, +0.0283426636f, + +0.0312667947f, +0.0346107648f, +0.0384804823f, +0.0430224431f, + +0.0484451086f, +0.0550553725f, +0.0633242001f, +0.0740128560f, + +0.0884368322f, +0.1090816773f, +0.1412745301f, +0.1988673273f, + +0.3326528346f, +0.9997730178f, -0.9997730178f, -0.3326528346f, + -0.1988673273f, -0.1412745301f, -0.1090816773f, -0.0884368322f, + -0.0740128560f, -0.0633242001f, -0.0550553725f, -0.0484451086f, + -0.0430224431f, -0.0384804823f, -0.0346107648f, -0.0312667947f, + -0.0283426636f, -0.0257599469f, -0.0234593652f, -0.0213953037f, + -0.0195321089f, -0.0178415242f, -0.0163008758f, -0.0148917649f, + -0.0135991079f, -0.0124104218f, -0.0113152847f, -0.0103049226f, + -0.0093718901f, -0.0085098208f, -0.0077132300f, -0.0069773575f, + -0.0062980419f, -0.0056716186f, -0.0050948365f, -0.0045647903f, + -0.0040788644f, -0.0036346867f, -0.0032300896f, -0.0028630784f, + -0.0025318040f, -0.0022345404f, -0.0019696659f, -0.0017356466f, + -0.0015310235f, -0.0013544008f, -0.0012044365f, -0.0010798341f, + -0.0009793364f, -0.0009017196f, -0.0008457886f, -0.0008103736f, +}; + +#define BODESHIFTER_SHIFT 0 +#define BODESHIFTER_INPUT 1 +#define BODESHIFTER_DOUT 2 +#define BODESHIFTER_UOUT 3 +#define BODESHIFTER_LATENCY 4 + +static LADSPA_Descriptor *bodeShifterDescriptor = NULL; + +typedef struct { + LADSPA_Data *shift; + LADSPA_Data *input; + LADSPA_Data *dout; + LADSPA_Data *uout; + LADSPA_Data *latency; + LADSPA_Data *delay; + unsigned int dptr; + float fs; + float last_shift; + float phi; + float * sint; + LADSPA_Data run_adding_gain; +} BodeShifter; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return bodeShifterDescriptor; + default: + return NULL; + } +} + +static void cleanupBodeShifter(LADSPA_Handle instance) { +#line 75 "bode_shifter_1431.xml" + BodeShifter *plugin_data = (BodeShifter *)instance; + free(plugin_data->delay); + free(plugin_data->sint); + free(instance); +} + +static void connectPortBodeShifter( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + BodeShifter *plugin; + + plugin = (BodeShifter *)instance; + switch (port) { + case BODESHIFTER_SHIFT: + plugin->shift = data; + break; + case BODESHIFTER_INPUT: + plugin->input = data; + break; + case BODESHIFTER_DOUT: + plugin->dout = data; + break; + case BODESHIFTER_UOUT: + plugin->uout = data; + break; + case BODESHIFTER_LATENCY: + plugin->latency = data; + break; + } +} + +static LADSPA_Handle instantiateBodeShifter( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + BodeShifter *plugin_data = (BodeShifter *)malloc(sizeof(BodeShifter)); + LADSPA_Data *delay = NULL; + unsigned int dptr; + float fs; + float last_shift; + float phi; + float *sint = NULL; + +#line 58 "bode_shifter_1431.xml" + unsigned int i; + + fs = (float)s_rate; + + delay = calloc(D_SIZE, sizeof(LADSPA_Data)); + sint = calloc(SIN_T_SIZE + 4, sizeof(float)); + + dptr = 0; + phi = 0.0f; + last_shift = 0.0f; + + for (i = 0; i < SIN_T_SIZE + 4; i++) { + sint[i] = sinf(2.0f * M_PI * (float)i / (float)SIN_T_SIZE); + } + + plugin_data->delay = delay; + plugin_data->dptr = dptr; + plugin_data->fs = fs; + plugin_data->last_shift = last_shift; + plugin_data->phi = phi; + plugin_data->sint = sint; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runBodeShifter(LADSPA_Handle instance, unsigned long sample_count) { + BodeShifter *plugin_data = (BodeShifter *)instance; + + /* Frequency shift (float value) */ + const LADSPA_Data shift = *(plugin_data->shift); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Down out (array of floats of length sample_count) */ + LADSPA_Data * const dout = plugin_data->dout; + + /* Up out (array of floats of length sample_count) */ + LADSPA_Data * const uout = plugin_data->uout; + LADSPA_Data * delay = plugin_data->delay; + unsigned int dptr = plugin_data->dptr; + float fs = plugin_data->fs; + float last_shift = plugin_data->last_shift; + float phi = plugin_data->phi; + float * sint = plugin_data->sint; + +#line 80 "bode_shifter_1431.xml" + unsigned long pos; + unsigned int i; + float hilb, rm1, rm2; + float shift_i = last_shift; + int int_p; + float frac_p; + const float shift_c = f_clamp(shift, 0.0f, 10000.0f); + const float shift_inc = (shift_c - last_shift) / (float)sample_count; + const float freq_fix = (float)SIN_T_SIZE / fs; + + for (pos = 0; pos < sample_count; pos++) { + delay[dptr] = input[pos]; + + /* Perform the Hilbert FIR convolution + * (probably FFT would be faster) */ + hilb = 0.0f; + for (i = 0; i < NZEROS/2; i++) { + hilb += (xcoeffs[i] * delay[(dptr - i*2) & (D_SIZE - 1)]); + } + + /* Calcuate the table positions for the sine modulator */ + int_p = f_round(floor(phi)); + + /* Calculate ringmod1, the transformed input modulated with a shift Hz + * sinewave. This creates a +180 degree sideband at source-shift Hz and + * a 0 degree sindeband at source+shift Hz */ + frac_p = phi - int_p; + + /* the Hilbert has a gain of pi/2, which we have to correct for, thanks + * Fons! */ + rm1 = hilb * 0.63661978f * cube_interp(frac_p, sint[int_p], + sint[int_p+1], sint[int_p+2], sint[int_p+3]); + + /* Calcuate the table positions for the cosine modulator */ + int_p = (int_p + SIN_T_SIZE / 4) & (SIN_T_SIZE - 1); + + /* Calculate ringmod2, the delayed input modulated with a shift Hz + * cosinewave. This creates a 0 degree sideband at source+shift Hz + * and a -180 degree sindeband at source-shift Hz */ + rm2 = delay[(dptr - 99) & (D_SIZE - 1)] * cube_interp(frac_p, + sint[int_p], sint[int_p+1], sint[int_p+2], sint[int_p+3]); + + /* Output the sum and differences of the ringmods. The +/-180 degree + * sidebands cancel (more of less) and just leave the shifted + * components */ + buffer_write(dout[pos], (rm2 - rm1) * 0.5f); + buffer_write(uout[pos], (rm2 + rm1) * 0.5f); + + dptr = (dptr + 1) & (D_SIZE - 1); + phi += shift_i * freq_fix; + while (phi > SIN_T_SIZE) { + phi -= SIN_T_SIZE; + } + shift_i += shift_inc; + } + + plugin_data->dptr = dptr; + plugin_data->phi = phi; + plugin_data->last_shift = shift_c; + + *(plugin_data->latency) = 99; +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainBodeShifter(LADSPA_Handle instance, LADSPA_Data gain) { + ((BodeShifter *)instance)->run_adding_gain = gain; +} + +static void runAddingBodeShifter(LADSPA_Handle instance, unsigned long sample_count) { + BodeShifter *plugin_data = (BodeShifter *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Frequency shift (float value) */ + const LADSPA_Data shift = *(plugin_data->shift); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Down out (array of floats of length sample_count) */ + LADSPA_Data * const dout = plugin_data->dout; + + /* Up out (array of floats of length sample_count) */ + LADSPA_Data * const uout = plugin_data->uout; + LADSPA_Data * delay = plugin_data->delay; + unsigned int dptr = plugin_data->dptr; + float fs = plugin_data->fs; + float last_shift = plugin_data->last_shift; + float phi = plugin_data->phi; + float * sint = plugin_data->sint; + +#line 80 "bode_shifter_1431.xml" + unsigned long pos; + unsigned int i; + float hilb, rm1, rm2; + float shift_i = last_shift; + int int_p; + float frac_p; + const float shift_c = f_clamp(shift, 0.0f, 10000.0f); + const float shift_inc = (shift_c - last_shift) / (float)sample_count; + const float freq_fix = (float)SIN_T_SIZE / fs; + + for (pos = 0; pos < sample_count; pos++) { + delay[dptr] = input[pos]; + + /* Perform the Hilbert FIR convolution + * (probably FFT would be faster) */ + hilb = 0.0f; + for (i = 0; i < NZEROS/2; i++) { + hilb += (xcoeffs[i] * delay[(dptr - i*2) & (D_SIZE - 1)]); + } + + /* Calcuate the table positions for the sine modulator */ + int_p = f_round(floor(phi)); + + /* Calculate ringmod1, the transformed input modulated with a shift Hz + * sinewave. This creates a +180 degree sideband at source-shift Hz and + * a 0 degree sindeband at source+shift Hz */ + frac_p = phi - int_p; + + /* the Hilbert has a gain of pi/2, which we have to correct for, thanks + * Fons! */ + rm1 = hilb * 0.63661978f * cube_interp(frac_p, sint[int_p], + sint[int_p+1], sint[int_p+2], sint[int_p+3]); + + /* Calcuate the table positions for the cosine modulator */ + int_p = (int_p + SIN_T_SIZE / 4) & (SIN_T_SIZE - 1); + + /* Calculate ringmod2, the delayed input modulated with a shift Hz + * cosinewave. This creates a 0 degree sideband at source+shift Hz + * and a -180 degree sindeband at source-shift Hz */ + rm2 = delay[(dptr - 99) & (D_SIZE - 1)] * cube_interp(frac_p, + sint[int_p], sint[int_p+1], sint[int_p+2], sint[int_p+3]); + + /* Output the sum and differences of the ringmods. The +/-180 degree + * sidebands cancel (more of less) and just leave the shifted + * components */ + buffer_write(dout[pos], (rm2 - rm1) * 0.5f); + buffer_write(uout[pos], (rm2 + rm1) * 0.5f); + + dptr = (dptr + 1) & (D_SIZE - 1); + phi += shift_i * freq_fix; + while (phi > SIN_T_SIZE) { + phi -= SIN_T_SIZE; + } + shift_i += shift_inc; + } + + plugin_data->dptr = dptr; + plugin_data->phi = phi; + plugin_data->last_shift = shift_c; + + *(plugin_data->latency) = 99; +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + bodeShifterDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (bodeShifterDescriptor) { + bodeShifterDescriptor->UniqueID = 1431; + bodeShifterDescriptor->Label = "bodeShifter"; + bodeShifterDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + bodeShifterDescriptor->Name = + D_("Bode frequency shifter"); + bodeShifterDescriptor->Maker = + "Steve Harris "; + bodeShifterDescriptor->Copyright = + "GPL"; + bodeShifterDescriptor->PortCount = 5; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(5, + sizeof(LADSPA_PortDescriptor)); + bodeShifterDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(5, + sizeof(LADSPA_PortRangeHint)); + bodeShifterDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(5, sizeof(char*)); + bodeShifterDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Frequency shift */ + port_descriptors[BODESHIFTER_SHIFT] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[BODESHIFTER_SHIFT] = + D_("Frequency shift"); + port_range_hints[BODESHIFTER_SHIFT].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[BODESHIFTER_SHIFT].LowerBound = 0; + port_range_hints[BODESHIFTER_SHIFT].UpperBound = 5000; + + /* Parameters for Input */ + port_descriptors[BODESHIFTER_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[BODESHIFTER_INPUT] = + D_("Input"); + port_range_hints[BODESHIFTER_INPUT].HintDescriptor = 0; + + /* Parameters for Down out */ + port_descriptors[BODESHIFTER_DOUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[BODESHIFTER_DOUT] = + D_("Down out"); + port_range_hints[BODESHIFTER_DOUT].HintDescriptor = 0; + + /* Parameters for Up out */ + port_descriptors[BODESHIFTER_UOUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[BODESHIFTER_UOUT] = + D_("Up out"); + port_range_hints[BODESHIFTER_UOUT].HintDescriptor = 0; + + /* Parameters for latency */ + port_descriptors[BODESHIFTER_LATENCY] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_CONTROL; + port_names[BODESHIFTER_LATENCY] = + D_("latency"); + port_range_hints[BODESHIFTER_LATENCY].HintDescriptor = 0; + + bodeShifterDescriptor->activate = NULL; + bodeShifterDescriptor->cleanup = cleanupBodeShifter; + bodeShifterDescriptor->connect_port = connectPortBodeShifter; + bodeShifterDescriptor->deactivate = NULL; + bodeShifterDescriptor->instantiate = instantiateBodeShifter; + bodeShifterDescriptor->run = runBodeShifter; + bodeShifterDescriptor->run_adding = runAddingBodeShifter; + bodeShifterDescriptor->set_run_adding_gain = setRunAddingGainBodeShifter; + } +} + +void _fini() { + if (bodeShifterDescriptor) { + free((LADSPA_PortDescriptor *)bodeShifterDescriptor->PortDescriptors); + free((char **)bodeShifterDescriptor->PortNames); + free((LADSPA_PortRangeHint *)bodeShifterDescriptor->PortRangeHints); + free(bodeShifterDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/bode_shifter_cv_1432.c b/plugins/LadspaEffect/swh/bode_shifter_cv_1432.c new file mode 100644 index 000000000..215a92871 --- /dev/null +++ b/plugins/LadspaEffect/swh/bode_shifter_cv_1432.c @@ -0,0 +1,534 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + +#line 10 "bode_shifter_cv_1432.xml" + +#include + +#include "ladspa-util.h" + +#define SIN_T_SIZE 1024 +#define D_SIZE 256 +#define NZEROS 200 + +/* The non-zero taps of the Hilbert transformer */ +static float xcoeffs[] = { + +0.0008103736f, +0.0008457886f, +0.0009017196f, +0.0009793364f, + +0.0010798341f, +0.0012044365f, +0.0013544008f, +0.0015310235f, + +0.0017356466f, +0.0019696659f, +0.0022345404f, +0.0025318040f, + +0.0028630784f, +0.0032300896f, +0.0036346867f, +0.0040788644f, + +0.0045647903f, +0.0050948365f, +0.0056716186f, +0.0062980419f, + +0.0069773575f, +0.0077132300f, +0.0085098208f, +0.0093718901f, + +0.0103049226f, +0.0113152847f, +0.0124104218f, +0.0135991079f, + +0.0148917649f, +0.0163008758f, +0.0178415242f, +0.0195321089f, + +0.0213953037f, +0.0234593652f, +0.0257599469f, +0.0283426636f, + +0.0312667947f, +0.0346107648f, +0.0384804823f, +0.0430224431f, + +0.0484451086f, +0.0550553725f, +0.0633242001f, +0.0740128560f, + +0.0884368322f, +0.1090816773f, +0.1412745301f, +0.1988673273f, + +0.3326528346f, +0.9997730178f, -0.9997730178f, -0.3326528346f, + -0.1988673273f, -0.1412745301f, -0.1090816773f, -0.0884368322f, + -0.0740128560f, -0.0633242001f, -0.0550553725f, -0.0484451086f, + -0.0430224431f, -0.0384804823f, -0.0346107648f, -0.0312667947f, + -0.0283426636f, -0.0257599469f, -0.0234593652f, -0.0213953037f, + -0.0195321089f, -0.0178415242f, -0.0163008758f, -0.0148917649f, + -0.0135991079f, -0.0124104218f, -0.0113152847f, -0.0103049226f, + -0.0093718901f, -0.0085098208f, -0.0077132300f, -0.0069773575f, + -0.0062980419f, -0.0056716186f, -0.0050948365f, -0.0045647903f, + -0.0040788644f, -0.0036346867f, -0.0032300896f, -0.0028630784f, + -0.0025318040f, -0.0022345404f, -0.0019696659f, -0.0017356466f, + -0.0015310235f, -0.0013544008f, -0.0012044365f, -0.0010798341f, + -0.0009793364f, -0.0009017196f, -0.0008457886f, -0.0008103736f, +}; + +#define BODESHIFTERCV_SHIFT_B 0 +#define BODESHIFTERCV_MIX 1 +#define BODESHIFTERCV_INPUT 2 +#define BODESHIFTERCV_ATTEN 3 +#define BODESHIFTERCV_SHIFT 4 +#define BODESHIFTERCV_DOUT 5 +#define BODESHIFTERCV_UOUT 6 +#define BODESHIFTERCV_MIXOUT 7 +#define BODESHIFTERCV_LATENCY 8 + +static LADSPA_Descriptor *bodeShifterCVDescriptor = NULL; + +typedef struct { + LADSPA_Data *shift_b; + LADSPA_Data *mix; + LADSPA_Data *input; + LADSPA_Data *atten; + LADSPA_Data *shift; + LADSPA_Data *dout; + LADSPA_Data *uout; + LADSPA_Data *mixout; + LADSPA_Data *latency; + LADSPA_Data *delay; + unsigned int dptr; + float fs; + float phi; + float * sint; + LADSPA_Data run_adding_gain; +} BodeShifterCV; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return bodeShifterCVDescriptor; + default: + return NULL; + } +} + +static void cleanupBodeShifterCV(LADSPA_Handle instance) { +#line 132 "bode_shifter_cv_1432.xml" + BodeShifterCV *plugin_data = (BodeShifterCV *)instance; + free(plugin_data->delay); + free(plugin_data->sint); + free(instance); +} + +static void connectPortBodeShifterCV( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + BodeShifterCV *plugin; + + plugin = (BodeShifterCV *)instance; + switch (port) { + case BODESHIFTERCV_SHIFT_B: + plugin->shift_b = data; + break; + case BODESHIFTERCV_MIX: + plugin->mix = data; + break; + case BODESHIFTERCV_INPUT: + plugin->input = data; + break; + case BODESHIFTERCV_ATTEN: + plugin->atten = data; + break; + case BODESHIFTERCV_SHIFT: + plugin->shift = data; + break; + case BODESHIFTERCV_DOUT: + plugin->dout = data; + break; + case BODESHIFTERCV_UOUT: + plugin->uout = data; + break; + case BODESHIFTERCV_MIXOUT: + plugin->mixout = data; + break; + case BODESHIFTERCV_LATENCY: + plugin->latency = data; + break; + } +} + +static LADSPA_Handle instantiateBodeShifterCV( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + BodeShifterCV *plugin_data = (BodeShifterCV *)malloc(sizeof(BodeShifterCV)); + LADSPA_Data *delay = NULL; + unsigned int dptr; + float fs; + float phi; + float *sint = NULL; + +#line 57 "bode_shifter_cv_1432.xml" + unsigned int i; + + fs = (float)s_rate; + + delay = calloc(D_SIZE, sizeof(LADSPA_Data)); + sint = calloc(SIN_T_SIZE + 4, sizeof(float)); + + dptr = 0; + phi = 0.0f; + + for (i = 0; i < SIN_T_SIZE + 4; i++) { + sint[i] = sinf(2.0f * M_PI * (float)i / (float)SIN_T_SIZE); + } + + plugin_data->delay = delay; + plugin_data->dptr = dptr; + plugin_data->fs = fs; + plugin_data->phi = phi; + plugin_data->sint = sint; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runBodeShifterCV(LADSPA_Handle instance, unsigned long sample_count) { + BodeShifterCV *plugin_data = (BodeShifterCV *)instance; + + /* Base shift (float value) */ + const LADSPA_Data shift_b = *(plugin_data->shift_b); + + /* Mix (-1=down, +1=up) (float value) */ + const LADSPA_Data mix = *(plugin_data->mix); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* CV Attenuation (float value) */ + const LADSPA_Data atten = *(plugin_data->atten); + + /* Shift CV (array of floats of length sample_count) */ + const LADSPA_Data * const shift = plugin_data->shift; + + /* Down out (array of floats of length sample_count) */ + LADSPA_Data * const dout = plugin_data->dout; + + /* Up out (array of floats of length sample_count) */ + LADSPA_Data * const uout = plugin_data->uout; + + /* Mix out (array of floats of length sample_count) */ + LADSPA_Data * const mixout = plugin_data->mixout; + LADSPA_Data * delay = plugin_data->delay; + unsigned int dptr = plugin_data->dptr; + float fs = plugin_data->fs; + float phi = plugin_data->phi; + float * sint = plugin_data->sint; + +#line 73 "bode_shifter_cv_1432.xml" + unsigned long pos; + unsigned int i; + float hilb, rm1, rm2; + int int_p; + float frac_p; + const float freq_fix = (float)SIN_T_SIZE * 1000.0f * f_clamp(atten, 0.0f, 10.0f) / fs; + const float base_ofs = (float)SIN_T_SIZE * f_clamp(shift_b, 0.0f, 10000.0f) / fs; + const float mixc = mix * 0.5f + 0.5f; + + for (pos = 0; pos < sample_count; pos++) { + delay[dptr] = input[pos]; + + /* Perform the Hilbert FIR convolution + * (probably FFT would be faster) */ + hilb = 0.0f; + for (i = 0; i <= NZEROS/2; i++) { + hilb += (xcoeffs[i] * delay[(dptr - i*2) & (D_SIZE - 1)]); + } + + /* Calcuate the table positions for the sine modulator */ + int_p = f_round(floor(phi)); + + /* Calculate ringmod1, the transformed input modulated with a shift Hz + * sinewave. This creates a +180 degree sideband at source-shift Hz and + * a 0 degree sindeband at source+shift Hz */ + frac_p = phi - int_p; + rm1 = hilb * 0.63661978f * cube_interp(frac_p, sint[int_p], + sint[int_p+1], sint[int_p+2], sint[int_p+3]); + + /* Calcuate the table positions for the cosine modulator */ + int_p = (int_p + SIN_T_SIZE / 4) & (SIN_T_SIZE - 1); + + /* Calculate ringmod2, the delayed input modulated with a shift Hz + * cosinewave. This creates a 0 degree sideband at source+shift Hz + * and a -180 degree sindeband at source-shift Hz */ + rm2 = delay[(dptr - 99) & (D_SIZE - 1)] * cube_interp(frac_p, + sint[int_p], sint[int_p+1], sint[int_p+2], sint[int_p+3]); + + /* Output the sum and differences of the ringmods. The +/-180 degree + * sidebands cancel (more of less) and just leave the shifted + * components */ + buffer_write(dout[pos], (rm2 - rm1) * 0.5f); + buffer_write(uout[pos], (rm2 + rm1) * 0.5f); + buffer_write(mixout[pos], (dout[pos] - uout[pos]) * mixc + uout[pos]); + + dptr = (dptr + 1) & (D_SIZE - 1); + phi += f_clamp(shift[pos], 0.0f, 10.0f) * freq_fix + base_ofs; + while (phi > SIN_T_SIZE) { + phi -= SIN_T_SIZE; + } + } + + plugin_data->dptr = dptr; + plugin_data->phi = phi; + + *(plugin_data->latency) = 99; +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainBodeShifterCV(LADSPA_Handle instance, LADSPA_Data gain) { + ((BodeShifterCV *)instance)->run_adding_gain = gain; +} + +static void runAddingBodeShifterCV(LADSPA_Handle instance, unsigned long sample_count) { + BodeShifterCV *plugin_data = (BodeShifterCV *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Base shift (float value) */ + const LADSPA_Data shift_b = *(plugin_data->shift_b); + + /* Mix (-1=down, +1=up) (float value) */ + const LADSPA_Data mix = *(plugin_data->mix); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* CV Attenuation (float value) */ + const LADSPA_Data atten = *(plugin_data->atten); + + /* Shift CV (array of floats of length sample_count) */ + const LADSPA_Data * const shift = plugin_data->shift; + + /* Down out (array of floats of length sample_count) */ + LADSPA_Data * const dout = plugin_data->dout; + + /* Up out (array of floats of length sample_count) */ + LADSPA_Data * const uout = plugin_data->uout; + + /* Mix out (array of floats of length sample_count) */ + LADSPA_Data * const mixout = plugin_data->mixout; + LADSPA_Data * delay = plugin_data->delay; + unsigned int dptr = plugin_data->dptr; + float fs = plugin_data->fs; + float phi = plugin_data->phi; + float * sint = plugin_data->sint; + +#line 73 "bode_shifter_cv_1432.xml" + unsigned long pos; + unsigned int i; + float hilb, rm1, rm2; + int int_p; + float frac_p; + const float freq_fix = (float)SIN_T_SIZE * 1000.0f * f_clamp(atten, 0.0f, 10.0f) / fs; + const float base_ofs = (float)SIN_T_SIZE * f_clamp(shift_b, 0.0f, 10000.0f) / fs; + const float mixc = mix * 0.5f + 0.5f; + + for (pos = 0; pos < sample_count; pos++) { + delay[dptr] = input[pos]; + + /* Perform the Hilbert FIR convolution + * (probably FFT would be faster) */ + hilb = 0.0f; + for (i = 0; i <= NZEROS/2; i++) { + hilb += (xcoeffs[i] * delay[(dptr - i*2) & (D_SIZE - 1)]); + } + + /* Calcuate the table positions for the sine modulator */ + int_p = f_round(floor(phi)); + + /* Calculate ringmod1, the transformed input modulated with a shift Hz + * sinewave. This creates a +180 degree sideband at source-shift Hz and + * a 0 degree sindeband at source+shift Hz */ + frac_p = phi - int_p; + rm1 = hilb * 0.63661978f * cube_interp(frac_p, sint[int_p], + sint[int_p+1], sint[int_p+2], sint[int_p+3]); + + /* Calcuate the table positions for the cosine modulator */ + int_p = (int_p + SIN_T_SIZE / 4) & (SIN_T_SIZE - 1); + + /* Calculate ringmod2, the delayed input modulated with a shift Hz + * cosinewave. This creates a 0 degree sideband at source+shift Hz + * and a -180 degree sindeband at source-shift Hz */ + rm2 = delay[(dptr - 99) & (D_SIZE - 1)] * cube_interp(frac_p, + sint[int_p], sint[int_p+1], sint[int_p+2], sint[int_p+3]); + + /* Output the sum and differences of the ringmods. The +/-180 degree + * sidebands cancel (more of less) and just leave the shifted + * components */ + buffer_write(dout[pos], (rm2 - rm1) * 0.5f); + buffer_write(uout[pos], (rm2 + rm1) * 0.5f); + buffer_write(mixout[pos], (dout[pos] - uout[pos]) * mixc + uout[pos]); + + dptr = (dptr + 1) & (D_SIZE - 1); + phi += f_clamp(shift[pos], 0.0f, 10.0f) * freq_fix + base_ofs; + while (phi > SIN_T_SIZE) { + phi -= SIN_T_SIZE; + } + } + + plugin_data->dptr = dptr; + plugin_data->phi = phi; + + *(plugin_data->latency) = 99; +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + bodeShifterCVDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (bodeShifterCVDescriptor) { + bodeShifterCVDescriptor->UniqueID = 1432; + bodeShifterCVDescriptor->Label = "bodeShifterCV"; + bodeShifterCVDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + bodeShifterCVDescriptor->Name = + D_("Bode frequency shifter (CV)"); + bodeShifterCVDescriptor->Maker = + "Steve Harris "; + bodeShifterCVDescriptor->Copyright = + "GPL"; + bodeShifterCVDescriptor->PortCount = 9; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(9, + sizeof(LADSPA_PortDescriptor)); + bodeShifterCVDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(9, + sizeof(LADSPA_PortRangeHint)); + bodeShifterCVDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(9, sizeof(char*)); + bodeShifterCVDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Base shift */ + port_descriptors[BODESHIFTERCV_SHIFT_B] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[BODESHIFTERCV_SHIFT_B] = + D_("Base shift"); + port_range_hints[BODESHIFTERCV_SHIFT_B].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[BODESHIFTERCV_SHIFT_B].LowerBound = 0; + port_range_hints[BODESHIFTERCV_SHIFT_B].UpperBound = 5000; + + /* Parameters for Mix (-1=down, +1=up) */ + port_descriptors[BODESHIFTERCV_MIX] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[BODESHIFTERCV_MIX] = + D_("Mix (-1=down, +1=up)"); + port_range_hints[BODESHIFTERCV_MIX].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[BODESHIFTERCV_MIX].LowerBound = -1; + port_range_hints[BODESHIFTERCV_MIX].UpperBound = 1; + + /* Parameters for Input */ + port_descriptors[BODESHIFTERCV_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[BODESHIFTERCV_INPUT] = + D_("Input"); + port_range_hints[BODESHIFTERCV_INPUT].HintDescriptor = 0; + + /* Parameters for CV Attenuation */ + port_descriptors[BODESHIFTERCV_ATTEN] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[BODESHIFTERCV_ATTEN] = + D_("CV Attenuation"); + port_range_hints[BODESHIFTERCV_ATTEN].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MAXIMUM; + port_range_hints[BODESHIFTERCV_ATTEN].LowerBound = 0; + port_range_hints[BODESHIFTERCV_ATTEN].UpperBound = 1; + + /* Parameters for Shift CV */ + port_descriptors[BODESHIFTERCV_SHIFT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[BODESHIFTERCV_SHIFT] = + D_("Shift CV"); + port_range_hints[BODESHIFTERCV_SHIFT].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[BODESHIFTERCV_SHIFT].LowerBound = 0; + port_range_hints[BODESHIFTERCV_SHIFT].UpperBound = 5; + + /* Parameters for Down out */ + port_descriptors[BODESHIFTERCV_DOUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[BODESHIFTERCV_DOUT] = + D_("Down out"); + port_range_hints[BODESHIFTERCV_DOUT].HintDescriptor = 0; + + /* Parameters for Up out */ + port_descriptors[BODESHIFTERCV_UOUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[BODESHIFTERCV_UOUT] = + D_("Up out"); + port_range_hints[BODESHIFTERCV_UOUT].HintDescriptor = 0; + + /* Parameters for Mix out */ + port_descriptors[BODESHIFTERCV_MIXOUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[BODESHIFTERCV_MIXOUT] = + D_("Mix out"); + port_range_hints[BODESHIFTERCV_MIXOUT].HintDescriptor = 0; + + /* Parameters for latency */ + port_descriptors[BODESHIFTERCV_LATENCY] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_CONTROL; + port_names[BODESHIFTERCV_LATENCY] = + D_("latency"); + port_range_hints[BODESHIFTERCV_LATENCY].HintDescriptor = 0; + + bodeShifterCVDescriptor->activate = NULL; + bodeShifterCVDescriptor->cleanup = cleanupBodeShifterCV; + bodeShifterCVDescriptor->connect_port = connectPortBodeShifterCV; + bodeShifterCVDescriptor->deactivate = NULL; + bodeShifterCVDescriptor->instantiate = instantiateBodeShifterCV; + bodeShifterCVDescriptor->run = runBodeShifterCV; + bodeShifterCVDescriptor->run_adding = runAddingBodeShifterCV; + bodeShifterCVDescriptor->set_run_adding_gain = setRunAddingGainBodeShifterCV; + } +} + +void _fini() { + if (bodeShifterCVDescriptor) { + free((LADSPA_PortDescriptor *)bodeShifterCVDescriptor->PortDescriptors); + free((char **)bodeShifterCVDescriptor->PortNames); + free((LADSPA_PortRangeHint *)bodeShifterCVDescriptor->PortRangeHints); + free(bodeShifterCVDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/butterworth_1902.c b/plugins/LadspaEffect/swh/butterworth_1902.c new file mode 100644 index 000000000..ba6f4cafb --- /dev/null +++ b/plugins/LadspaEffect/swh/butterworth_1902.c @@ -0,0 +1,764 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + + +#include "config.h" +#include "util/iir.h" +#include "util/buffer.h" + +#define BWXOVER_IIR_CUTOFF 0 +#define BWXOVER_IIR_RESONANCE 1 +#define BWXOVER_IIR_INPUT 2 +#define BWXOVER_IIR_LPOUTPUT 3 +#define BWXOVER_IIR_HPOUTPUT 4 +#define BUTTLOW_IIR_CUTOFF 0 +#define BUTTLOW_IIR_RESONANCE 1 +#define BUTTLOW_IIR_INPUT 2 +#define BUTTLOW_IIR_OUTPUT 3 +#define BUTTHIGH_IIR_CUTOFF 0 +#define BUTTHIGH_IIR_RESONANCE 1 +#define BUTTHIGH_IIR_INPUT 2 +#define BUTTHIGH_IIR_OUTPUT 3 + +static LADSPA_Descriptor *bwxover_iirDescriptor = NULL; + +typedef struct { + LADSPA_Data *cutoff; + LADSPA_Data *resonance; + LADSPA_Data *input; + LADSPA_Data *lpoutput; + LADSPA_Data *hpoutput; + iir_stage_t* gt; + iirf_t* iirf; + long sample_rate; + LADSPA_Data run_adding_gain; +} Bwxover_iir; + +static LADSPA_Descriptor *buttlow_iirDescriptor = NULL; + +typedef struct { + LADSPA_Data *cutoff; + LADSPA_Data *resonance; + LADSPA_Data *input; + LADSPA_Data *output; + iir_stage_t* gt; + iirf_t* iirf; + long sample_rate; + LADSPA_Data run_adding_gain; +} Buttlow_iir; + +static LADSPA_Descriptor *butthigh_iirDescriptor = NULL; + +typedef struct { + LADSPA_Data *cutoff; + LADSPA_Data *resonance; + LADSPA_Data *input; + LADSPA_Data *output; + iir_stage_t* gt; + iirf_t* iirf; + long sample_rate; + LADSPA_Data run_adding_gain; +} Butthigh_iir; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return bwxover_iirDescriptor; + case 1: + return buttlow_iirDescriptor; + case 2: + return butthigh_iirDescriptor; + default: + return NULL; + } +} + +static void activateBwxover_iir(LADSPA_Handle instance) { + Bwxover_iir *plugin_data = (Bwxover_iir *)instance; + iir_stage_t*gt = plugin_data->gt; + iirf_t*iirf = plugin_data->iirf; + long sample_rate = plugin_data->sample_rate; + + gt = init_iir_stage(IIR_STAGE_LOWPASS,1,3,2); + iirf = init_iirf_t(gt); + butterworth_stage(gt, 0, *(plugin_data->cutoff), + *(plugin_data->resonance), + sample_rate); + plugin_data->gt = gt; + plugin_data->iirf = iirf; + plugin_data->sample_rate = sample_rate; + +} + +static void cleanupBwxover_iir(LADSPA_Handle instance) { + Bwxover_iir *plugin_data = (Bwxover_iir *)instance; + free_iirf_t(plugin_data->iirf, plugin_data->gt); + free_iir_stage(plugin_data->gt); + free(instance); +} + +static void connectPortBwxover_iir( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + Bwxover_iir *plugin; + + plugin = (Bwxover_iir *)instance; + switch (port) { + case BWXOVER_IIR_CUTOFF: + plugin->cutoff = data; + break; + case BWXOVER_IIR_RESONANCE: + plugin->resonance = data; + break; + case BWXOVER_IIR_INPUT: + plugin->input = data; + break; + case BWXOVER_IIR_LPOUTPUT: + plugin->lpoutput = data; + break; + case BWXOVER_IIR_HPOUTPUT: + plugin->hpoutput = data; + break; + } +} + +static LADSPA_Handle instantiateBwxover_iir( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + Bwxover_iir *plugin_data = (Bwxover_iir *)malloc(sizeof(Bwxover_iir)); + iir_stage_t*gt = NULL; + iirf_t*iirf = NULL; + long sample_rate; + + sample_rate = s_rate; + + plugin_data->gt = gt; + plugin_data->iirf = iirf; + plugin_data->sample_rate = sample_rate; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runBwxover_iir(LADSPA_Handle instance, unsigned long sample_count) { + Bwxover_iir *plugin_data = (Bwxover_iir *)instance; + + /* Cutoff Frequency (Hz) (float value) */ + const LADSPA_Data cutoff = *(plugin_data->cutoff); + + /* Resonance (float value) */ + const LADSPA_Data resonance = *(plugin_data->resonance); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* LP-Output (array of floats of length sample_count) */ + LADSPA_Data * const lpoutput = plugin_data->lpoutput; + + /* HP-Output (array of floats of length sample_count) */ + LADSPA_Data * const hpoutput = plugin_data->hpoutput; + iir_stage_t* gt = plugin_data->gt; + iirf_t* iirf = plugin_data->iirf; + long sample_rate = plugin_data->sample_rate; + + butterworth_stage(gt, 0, cutoff, resonance, sample_rate); + iir_process_buffer_1s_5(iirf, gt, input, lpoutput, sample_count,0); + buffer_sub(input, lpoutput, hpoutput, sample_count); +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainBwxover_iir(LADSPA_Handle instance, LADSPA_Data gain) { + ((Bwxover_iir *)instance)->run_adding_gain = gain; +} + +static void runAddingBwxover_iir(LADSPA_Handle instance, unsigned long sample_count) { + Bwxover_iir *plugin_data = (Bwxover_iir *)instance; + + /* Cutoff Frequency (Hz) (float value) */ + const LADSPA_Data cutoff = *(plugin_data->cutoff); + + /* Resonance (float value) */ + const LADSPA_Data resonance = *(plugin_data->resonance); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* LP-Output (array of floats of length sample_count) */ + LADSPA_Data * const lpoutput = plugin_data->lpoutput; + + /* HP-Output (array of floats of length sample_count) */ + LADSPA_Data * const hpoutput = plugin_data->hpoutput; + iir_stage_t* gt = plugin_data->gt; + iirf_t* iirf = plugin_data->iirf; + long sample_rate = plugin_data->sample_rate; + + butterworth_stage(gt, 0, cutoff, resonance, sample_rate); + iir_process_buffer_1s_5(iirf, gt, input, lpoutput, sample_count,0); + buffer_sub(input, lpoutput, hpoutput, sample_count); +} + +static void activateButtlow_iir(LADSPA_Handle instance) { + Buttlow_iir *plugin_data = (Buttlow_iir *)instance; + iir_stage_t*gt = plugin_data->gt; + iirf_t*iirf = plugin_data->iirf; + long sample_rate = plugin_data->sample_rate; + + gt = init_iir_stage(IIR_STAGE_LOWPASS,1,3,2); + iirf = init_iirf_t(gt); + butterworth_stage(gt, 0, *(plugin_data->cutoff), + *(plugin_data->resonance), + sample_rate); + plugin_data->gt = gt; + plugin_data->iirf = iirf; + plugin_data->sample_rate = sample_rate; + +} + +static void cleanupButtlow_iir(LADSPA_Handle instance) { + Buttlow_iir *plugin_data = (Buttlow_iir *)instance; + free_iirf_t(plugin_data->iirf, plugin_data->gt); + free_iir_stage(plugin_data->gt); + free(instance); +} + +static void connectPortButtlow_iir( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + Buttlow_iir *plugin; + + plugin = (Buttlow_iir *)instance; + switch (port) { + case BUTTLOW_IIR_CUTOFF: + plugin->cutoff = data; + break; + case BUTTLOW_IIR_RESONANCE: + plugin->resonance = data; + break; + case BUTTLOW_IIR_INPUT: + plugin->input = data; + break; + case BUTTLOW_IIR_OUTPUT: + plugin->output = data; + break; + } +} + +static LADSPA_Handle instantiateButtlow_iir( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + Buttlow_iir *plugin_data = (Buttlow_iir *)malloc(sizeof(Buttlow_iir)); + iir_stage_t*gt = NULL; + iirf_t*iirf = NULL; + long sample_rate; + + sample_rate = s_rate; + + plugin_data->gt = gt; + plugin_data->iirf = iirf; + plugin_data->sample_rate = sample_rate; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runButtlow_iir(LADSPA_Handle instance, unsigned long sample_count) { + Buttlow_iir *plugin_data = (Buttlow_iir *)instance; + + /* Cutoff Frequency (Hz) (float value) */ + const LADSPA_Data cutoff = *(plugin_data->cutoff); + + /* Resonance (float value) */ + const LADSPA_Data resonance = *(plugin_data->resonance); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + iir_stage_t* gt = plugin_data->gt; + iirf_t* iirf = plugin_data->iirf; + long sample_rate = plugin_data->sample_rate; + + butterworth_stage(gt, 0, cutoff, resonance, sample_rate); + iir_process_buffer_1s_5(iirf, gt, input, output, sample_count,0); +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainButtlow_iir(LADSPA_Handle instance, LADSPA_Data gain) { + ((Buttlow_iir *)instance)->run_adding_gain = gain; +} + +static void runAddingButtlow_iir(LADSPA_Handle instance, unsigned long sample_count) { + Buttlow_iir *plugin_data = (Buttlow_iir *)instance; + + /* Cutoff Frequency (Hz) (float value) */ + const LADSPA_Data cutoff = *(plugin_data->cutoff); + + /* Resonance (float value) */ + const LADSPA_Data resonance = *(plugin_data->resonance); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + iir_stage_t* gt = plugin_data->gt; + iirf_t* iirf = plugin_data->iirf; + long sample_rate = plugin_data->sample_rate; + + butterworth_stage(gt, 0, cutoff, resonance, sample_rate); + iir_process_buffer_1s_5(iirf, gt, input, output, sample_count,0); +} + +static void activateButthigh_iir(LADSPA_Handle instance) { + Butthigh_iir *plugin_data = (Butthigh_iir *)instance; + iir_stage_t*gt = plugin_data->gt; + iirf_t*iirf = plugin_data->iirf; + long sample_rate = plugin_data->sample_rate; + + gt = init_iir_stage(IIR_STAGE_LOWPASS,1,3,2); + iirf = init_iirf_t(gt); + butterworth_stage(gt, 1, *(plugin_data->cutoff), + *(plugin_data->resonance), + sample_rate); + plugin_data->gt = gt; + plugin_data->iirf = iirf; + plugin_data->sample_rate = sample_rate; + +} + +static void cleanupButthigh_iir(LADSPA_Handle instance) { + Butthigh_iir *plugin_data = (Butthigh_iir *)instance; + free_iirf_t(plugin_data->iirf, plugin_data->gt); + free_iir_stage(plugin_data->gt); + free(instance); +} + +static void connectPortButthigh_iir( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + Butthigh_iir *plugin; + + plugin = (Butthigh_iir *)instance; + switch (port) { + case BUTTHIGH_IIR_CUTOFF: + plugin->cutoff = data; + break; + case BUTTHIGH_IIR_RESONANCE: + plugin->resonance = data; + break; + case BUTTHIGH_IIR_INPUT: + plugin->input = data; + break; + case BUTTHIGH_IIR_OUTPUT: + plugin->output = data; + break; + } +} + +static LADSPA_Handle instantiateButthigh_iir( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + Butthigh_iir *plugin_data = (Butthigh_iir *)malloc(sizeof(Butthigh_iir)); + iir_stage_t*gt = NULL; + iirf_t*iirf = NULL; + long sample_rate; + + sample_rate = s_rate; + + plugin_data->gt = gt; + plugin_data->iirf = iirf; + plugin_data->sample_rate = sample_rate; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runButthigh_iir(LADSPA_Handle instance, unsigned long sample_count) { + Butthigh_iir *plugin_data = (Butthigh_iir *)instance; + + /* Cutoff Frequency (Hz) (float value) */ + const LADSPA_Data cutoff = *(plugin_data->cutoff); + + /* Resonance (float value) */ + const LADSPA_Data resonance = *(plugin_data->resonance); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + iir_stage_t* gt = plugin_data->gt; + iirf_t* iirf = plugin_data->iirf; + long sample_rate = plugin_data->sample_rate; + + butterworth_stage(gt, 1, cutoff, resonance, sample_rate); + iir_process_buffer_1s_5(iirf, gt, input, output, sample_count,0); +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainButthigh_iir(LADSPA_Handle instance, LADSPA_Data gain) { + ((Butthigh_iir *)instance)->run_adding_gain = gain; +} + +static void runAddingButthigh_iir(LADSPA_Handle instance, unsigned long sample_count) { + Butthigh_iir *plugin_data = (Butthigh_iir *)instance; + + /* Cutoff Frequency (Hz) (float value) */ + const LADSPA_Data cutoff = *(plugin_data->cutoff); + + /* Resonance (float value) */ + const LADSPA_Data resonance = *(plugin_data->resonance); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + iir_stage_t* gt = plugin_data->gt; + iirf_t* iirf = plugin_data->iirf; + long sample_rate = plugin_data->sample_rate; + + butterworth_stage(gt, 1, cutoff, resonance, sample_rate); + iir_process_buffer_1s_5(iirf, gt, input, output, sample_count,0); +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + bwxover_iirDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (bwxover_iirDescriptor) { + bwxover_iirDescriptor->UniqueID = 1902; + bwxover_iirDescriptor->Label = "bwxover_iir"; + bwxover_iirDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + bwxover_iirDescriptor->Name = + D_("Glame Butterworth X-over Filter"); + bwxover_iirDescriptor->Maker = + "Alexander Ehlert "; + bwxover_iirDescriptor->Copyright = + "GPL"; + bwxover_iirDescriptor->PortCount = 5; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(5, + sizeof(LADSPA_PortDescriptor)); + bwxover_iirDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(5, + sizeof(LADSPA_PortRangeHint)); + bwxover_iirDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(5, sizeof(char*)); + bwxover_iirDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Cutoff Frequency (Hz) */ + port_descriptors[BWXOVER_IIR_CUTOFF] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[BWXOVER_IIR_CUTOFF] = + D_("Cutoff Frequency (Hz)"); + port_range_hints[BWXOVER_IIR_CUTOFF].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW | LADSPA_HINT_SAMPLE_RATE | LADSPA_HINT_LOGARITHMIC; + port_range_hints[BWXOVER_IIR_CUTOFF].LowerBound = 0.0001; + port_range_hints[BWXOVER_IIR_CUTOFF].UpperBound = 0.45; + + /* Parameters for Resonance */ + port_descriptors[BWXOVER_IIR_RESONANCE] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[BWXOVER_IIR_RESONANCE] = + D_("Resonance"); + port_range_hints[BWXOVER_IIR_RESONANCE].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; + port_range_hints[BWXOVER_IIR_RESONANCE].LowerBound = 0.1; + port_range_hints[BWXOVER_IIR_RESONANCE].UpperBound = 1.41; + + /* Parameters for Input */ + port_descriptors[BWXOVER_IIR_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[BWXOVER_IIR_INPUT] = + D_("Input"); + port_range_hints[BWXOVER_IIR_INPUT].HintDescriptor = 0; + + /* Parameters for LP-Output */ + port_descriptors[BWXOVER_IIR_LPOUTPUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[BWXOVER_IIR_LPOUTPUT] = + D_("LP-Output"); + port_range_hints[BWXOVER_IIR_LPOUTPUT].HintDescriptor = 0; + + /* Parameters for HP-Output */ + port_descriptors[BWXOVER_IIR_HPOUTPUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[BWXOVER_IIR_HPOUTPUT] = + D_("HP-Output"); + port_range_hints[BWXOVER_IIR_HPOUTPUT].HintDescriptor = 0; + + bwxover_iirDescriptor->activate = activateBwxover_iir; + bwxover_iirDescriptor->cleanup = cleanupBwxover_iir; + bwxover_iirDescriptor->connect_port = connectPortBwxover_iir; + bwxover_iirDescriptor->deactivate = NULL; + bwxover_iirDescriptor->instantiate = instantiateBwxover_iir; + bwxover_iirDescriptor->run = runBwxover_iir; + bwxover_iirDescriptor->run_adding = runAddingBwxover_iir; + bwxover_iirDescriptor->set_run_adding_gain = setRunAddingGainBwxover_iir; + } + + buttlow_iirDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (buttlow_iirDescriptor) { + buttlow_iirDescriptor->UniqueID = 1903; + buttlow_iirDescriptor->Label = "buttlow_iir"; + buttlow_iirDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + buttlow_iirDescriptor->Name = + D_("GLAME Butterworth Lowpass"); + buttlow_iirDescriptor->Maker = + "Alexander Ehlert "; + buttlow_iirDescriptor->Copyright = + "GPL"; + buttlow_iirDescriptor->PortCount = 4; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(4, + sizeof(LADSPA_PortDescriptor)); + buttlow_iirDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(4, + sizeof(LADSPA_PortRangeHint)); + buttlow_iirDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(4, sizeof(char*)); + buttlow_iirDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Cutoff Frequency (Hz) */ + port_descriptors[BUTTLOW_IIR_CUTOFF] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[BUTTLOW_IIR_CUTOFF] = + D_("Cutoff Frequency (Hz)"); + port_range_hints[BUTTLOW_IIR_CUTOFF].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW | LADSPA_HINT_SAMPLE_RATE | LADSPA_HINT_LOGARITHMIC; + port_range_hints[BUTTLOW_IIR_CUTOFF].LowerBound = 0.0001; + port_range_hints[BUTTLOW_IIR_CUTOFF].UpperBound = 0.45; + + /* Parameters for Resonance */ + port_descriptors[BUTTLOW_IIR_RESONANCE] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[BUTTLOW_IIR_RESONANCE] = + D_("Resonance"); + port_range_hints[BUTTLOW_IIR_RESONANCE].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; + port_range_hints[BUTTLOW_IIR_RESONANCE].LowerBound = 0.1; + port_range_hints[BUTTLOW_IIR_RESONANCE].UpperBound = 1.41; + + /* Parameters for Input */ + port_descriptors[BUTTLOW_IIR_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[BUTTLOW_IIR_INPUT] = + D_("Input"); + port_range_hints[BUTTLOW_IIR_INPUT].HintDescriptor = 0; + + /* Parameters for Output */ + port_descriptors[BUTTLOW_IIR_OUTPUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[BUTTLOW_IIR_OUTPUT] = + D_("Output"); + port_range_hints[BUTTLOW_IIR_OUTPUT].HintDescriptor = 0; + + buttlow_iirDescriptor->activate = activateButtlow_iir; + buttlow_iirDescriptor->cleanup = cleanupButtlow_iir; + buttlow_iirDescriptor->connect_port = connectPortButtlow_iir; + buttlow_iirDescriptor->deactivate = NULL; + buttlow_iirDescriptor->instantiate = instantiateButtlow_iir; + buttlow_iirDescriptor->run = runButtlow_iir; + buttlow_iirDescriptor->run_adding = runAddingButtlow_iir; + buttlow_iirDescriptor->set_run_adding_gain = setRunAddingGainButtlow_iir; + } + + butthigh_iirDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (butthigh_iirDescriptor) { + butthigh_iirDescriptor->UniqueID = 1904; + butthigh_iirDescriptor->Label = "butthigh_iir"; + butthigh_iirDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + butthigh_iirDescriptor->Name = + D_("GLAME Butterworth Highpass"); + butthigh_iirDescriptor->Maker = + "Alexander Ehlert "; + butthigh_iirDescriptor->Copyright = + "GPL"; + butthigh_iirDescriptor->PortCount = 4; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(4, + sizeof(LADSPA_PortDescriptor)); + butthigh_iirDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(4, + sizeof(LADSPA_PortRangeHint)); + butthigh_iirDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(4, sizeof(char*)); + butthigh_iirDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Cutoff Frequency (Hz) */ + port_descriptors[BUTTHIGH_IIR_CUTOFF] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[BUTTHIGH_IIR_CUTOFF] = + D_("Cutoff Frequency (Hz)"); + port_range_hints[BUTTHIGH_IIR_CUTOFF].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW | LADSPA_HINT_SAMPLE_RATE | LADSPA_HINT_LOGARITHMIC; + port_range_hints[BUTTHIGH_IIR_CUTOFF].LowerBound = 0.0001; + port_range_hints[BUTTHIGH_IIR_CUTOFF].UpperBound = 0.45; + + /* Parameters for Resonance */ + port_descriptors[BUTTHIGH_IIR_RESONANCE] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[BUTTHIGH_IIR_RESONANCE] = + D_("Resonance"); + port_range_hints[BUTTHIGH_IIR_RESONANCE].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; + port_range_hints[BUTTHIGH_IIR_RESONANCE].LowerBound = 0.1; + port_range_hints[BUTTHIGH_IIR_RESONANCE].UpperBound = 1.41; + + /* Parameters for Input */ + port_descriptors[BUTTHIGH_IIR_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[BUTTHIGH_IIR_INPUT] = + D_("Input"); + port_range_hints[BUTTHIGH_IIR_INPUT].HintDescriptor = 0; + + /* Parameters for Output */ + port_descriptors[BUTTHIGH_IIR_OUTPUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[BUTTHIGH_IIR_OUTPUT] = + D_("Output"); + port_range_hints[BUTTHIGH_IIR_OUTPUT].HintDescriptor = 0; + + butthigh_iirDescriptor->activate = activateButthigh_iir; + butthigh_iirDescriptor->cleanup = cleanupButthigh_iir; + butthigh_iirDescriptor->connect_port = connectPortButthigh_iir; + butthigh_iirDescriptor->deactivate = NULL; + butthigh_iirDescriptor->instantiate = instantiateButthigh_iir; + butthigh_iirDescriptor->run = runButthigh_iir; + butthigh_iirDescriptor->run_adding = runAddingButthigh_iir; + butthigh_iirDescriptor->set_run_adding_gain = setRunAddingGainButthigh_iir; + } +} + +void _fini() { + if (bwxover_iirDescriptor) { + free((LADSPA_PortDescriptor *)bwxover_iirDescriptor->PortDescriptors); + free((char **)bwxover_iirDescriptor->PortNames); + free((LADSPA_PortRangeHint *)bwxover_iirDescriptor->PortRangeHints); + free(bwxover_iirDescriptor); + } + if (buttlow_iirDescriptor) { + free((LADSPA_PortDescriptor *)buttlow_iirDescriptor->PortDescriptors); + free((char **)buttlow_iirDescriptor->PortNames); + free((LADSPA_PortRangeHint *)buttlow_iirDescriptor->PortRangeHints); + free(buttlow_iirDescriptor); + } + if (butthigh_iirDescriptor) { + free((LADSPA_PortDescriptor *)butthigh_iirDescriptor->PortDescriptors); + free((char **)butthigh_iirDescriptor->PortNames); + free((LADSPA_PortRangeHint *)butthigh_iirDescriptor->PortRangeHints); + free(butthigh_iirDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/chebstortion_1430.c b/plugins/LadspaEffect/swh/chebstortion_1430.c new file mode 100644 index 000000000..946abaf15 --- /dev/null +++ b/plugins/LadspaEffect/swh/chebstortion_1430.c @@ -0,0 +1,410 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + +#line 10 "chebstortion_1430.xml" + +#include + +#define HARMONICS 11 +#define STAGES 2 + +static float cd_lut[STAGES][HARMONICS]; + +/* Calculate Chebychev coefficents from partial magnitudes, adapted from + * example in Num. Rec. */ +void chebpc(float c[], float d[]) +{ + int k, j; + float sv, dd[HARMONICS]; + + for (j = 0; j < HARMONICS; j++) { + d[j] = dd[j] = 0.0; + } + + d[0] = c[HARMONICS - 1]; + + for (j = HARMONICS - 2; j >= 1; j--) { + for (k = HARMONICS - j; k >= 1; k--) { + sv = d[k]; + d[k] = 2.0 * d[k - 1] - dd[k]; + dd[k] = sv; + } + sv = d[0]; + d[0] = -dd[0] + c[j]; + dd[0] = sv; + } + + for (j = HARMONICS - 1; j >= 1; j--) { + d[j] = d[j - 1] - dd[j]; + } + d[0] = -dd[0] + 0.5 * c[0]; +} + +#define CHEBSTORTION_DIST 0 +#define CHEBSTORTION_INPUT 1 +#define CHEBSTORTION_OUTPUT 2 + +static LADSPA_Descriptor *chebstortionDescriptor = NULL; + +typedef struct { + LADSPA_Data *dist; + LADSPA_Data *input; + LADSPA_Data *output; + unsigned int count; + float env; + float itm1; + float otm1; + LADSPA_Data run_adding_gain; +} Chebstortion; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return chebstortionDescriptor; + default: + return NULL; + } +} + +static void activateChebstortion(LADSPA_Handle instance) { + Chebstortion *plugin_data = (Chebstortion *)instance; + unsigned int count = plugin_data->count; + float env = plugin_data->env; + float itm1 = plugin_data->itm1; + float otm1 = plugin_data->otm1; +#line 82 "chebstortion_1430.xml" + itm1 = 0.0f; + otm1 = 0.0f; + env = 0.0f; + count = 0; + plugin_data->count = count; + plugin_data->env = env; + plugin_data->itm1 = itm1; + plugin_data->otm1 = otm1; + +} + +static void cleanupChebstortion(LADSPA_Handle instance) { + free(instance); +} + +static void connectPortChebstortion( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + Chebstortion *plugin; + + plugin = (Chebstortion *)instance; + switch (port) { + case CHEBSTORTION_DIST: + plugin->dist = data; + break; + case CHEBSTORTION_INPUT: + plugin->input = data; + break; + case CHEBSTORTION_OUTPUT: + plugin->output = data; + break; + } +} + +static LADSPA_Handle instantiateChebstortion( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + Chebstortion *plugin_data = (Chebstortion *)malloc(sizeof(Chebstortion)); + unsigned int count; + float env; + float itm1; + float otm1; + +#line 62 "chebstortion_1430.xml" + unsigned int i; + + cd_lut[0][0] = 0.0f; + cd_lut[0][1] = 1.0f; + for (i=2; icount = count; + plugin_data->env = env; + plugin_data->itm1 = itm1; + plugin_data->otm1 = otm1; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runChebstortion(LADSPA_Handle instance, unsigned long sample_count) { + Chebstortion *plugin_data = (Chebstortion *)instance; + + /* Distortion (float value) */ + const LADSPA_Data dist = *(plugin_data->dist); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + unsigned int count = plugin_data->count; + float env = plugin_data->env; + float itm1 = plugin_data->itm1; + float otm1 = plugin_data->otm1; + +#line 89 "chebstortion_1430.xml" + unsigned long pos, i; + float p[HARMONICS], interp[HARMONICS]; + + for (pos = 0; pos < sample_count; pos++) { + const float x = input[pos]; + const float a = fabs(input[pos]); + float y; + + if (a > env) { + env = env * 0.9f + a * 0.1f; + } else { + env = env * 0.97f + a * 0.03f; + } + + if (count-- == 0) { + for (i=0; iitm1 = itm1; + plugin_data->otm1 = otm1; + plugin_data->env = env; + plugin_data->count = count; +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainChebstortion(LADSPA_Handle instance, LADSPA_Data gain) { + ((Chebstortion *)instance)->run_adding_gain = gain; +} + +static void runAddingChebstortion(LADSPA_Handle instance, unsigned long sample_count) { + Chebstortion *plugin_data = (Chebstortion *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Distortion (float value) */ + const LADSPA_Data dist = *(plugin_data->dist); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + unsigned int count = plugin_data->count; + float env = plugin_data->env; + float itm1 = plugin_data->itm1; + float otm1 = plugin_data->otm1; + +#line 89 "chebstortion_1430.xml" + unsigned long pos, i; + float p[HARMONICS], interp[HARMONICS]; + + for (pos = 0; pos < sample_count; pos++) { + const float x = input[pos]; + const float a = fabs(input[pos]); + float y; + + if (a > env) { + env = env * 0.9f + a * 0.1f; + } else { + env = env * 0.97f + a * 0.03f; + } + + if (count-- == 0) { + for (i=0; iitm1 = itm1; + plugin_data->otm1 = otm1; + plugin_data->env = env; + plugin_data->count = count; +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + chebstortionDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (chebstortionDescriptor) { + chebstortionDescriptor->UniqueID = 1430; + chebstortionDescriptor->Label = "chebstortion"; + chebstortionDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + chebstortionDescriptor->Name = + D_("Chebyshev distortion"); + chebstortionDescriptor->Maker = + "Steve Harris "; + chebstortionDescriptor->Copyright = + "GPL"; + chebstortionDescriptor->PortCount = 3; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(3, + sizeof(LADSPA_PortDescriptor)); + chebstortionDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(3, + sizeof(LADSPA_PortRangeHint)); + chebstortionDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(3, sizeof(char*)); + chebstortionDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Distortion */ + port_descriptors[CHEBSTORTION_DIST] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[CHEBSTORTION_DIST] = + D_("Distortion"); + port_range_hints[CHEBSTORTION_DIST].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[CHEBSTORTION_DIST].LowerBound = 0; + port_range_hints[CHEBSTORTION_DIST].UpperBound = 3; + + /* Parameters for Input */ + port_descriptors[CHEBSTORTION_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[CHEBSTORTION_INPUT] = + D_("Input"); + port_range_hints[CHEBSTORTION_INPUT].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; + port_range_hints[CHEBSTORTION_INPUT].LowerBound = -1; + port_range_hints[CHEBSTORTION_INPUT].UpperBound = +1; + + /* Parameters for Output */ + port_descriptors[CHEBSTORTION_OUTPUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[CHEBSTORTION_OUTPUT] = + D_("Output"); + port_range_hints[CHEBSTORTION_OUTPUT].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; + port_range_hints[CHEBSTORTION_OUTPUT].LowerBound = -1; + port_range_hints[CHEBSTORTION_OUTPUT].UpperBound = +1; + + chebstortionDescriptor->activate = activateChebstortion; + chebstortionDescriptor->cleanup = cleanupChebstortion; + chebstortionDescriptor->connect_port = connectPortChebstortion; + chebstortionDescriptor->deactivate = NULL; + chebstortionDescriptor->instantiate = instantiateChebstortion; + chebstortionDescriptor->run = runChebstortion; + chebstortionDescriptor->run_adding = runAddingChebstortion; + chebstortionDescriptor->set_run_adding_gain = setRunAddingGainChebstortion; + } +} + +void _fini() { + if (chebstortionDescriptor) { + free((LADSPA_PortDescriptor *)chebstortionDescriptor->PortDescriptors); + free((char **)chebstortionDescriptor->PortNames); + free((LADSPA_PortRangeHint *)chebstortionDescriptor->PortRangeHints); + free(chebstortionDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/comb_1190.c b/plugins/LadspaEffect/swh/comb_1190.c new file mode 100644 index 000000000..05fe340c2 --- /dev/null +++ b/plugins/LadspaEffect/swh/comb_1190.c @@ -0,0 +1,351 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + +#line 9 "comb_1190.xml" + +#include "ladspa-util.h" +#define COMB_SIZE 0x4000 +#define COMB_MASK 0x3FFF + +#define COMB_FREQ 0 +#define COMB_FB 1 +#define COMB_INPUT 2 +#define COMB_OUTPUT 3 + +static LADSPA_Descriptor *combDescriptor = NULL; + +typedef struct { + LADSPA_Data *freq; + LADSPA_Data *fb; + LADSPA_Data *input; + LADSPA_Data *output; + long comb_pos; + LADSPA_Data *comb_tbl; + float last_offset; + long sample_rate; + LADSPA_Data run_adding_gain; +} Comb; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return combDescriptor; + default: + return NULL; + } +} + +static void activateComb(LADSPA_Handle instance) { + Comb *plugin_data = (Comb *)instance; + long comb_pos = plugin_data->comb_pos; + LADSPA_Data *comb_tbl = plugin_data->comb_tbl; + float last_offset = plugin_data->last_offset; + long sample_rate = plugin_data->sample_rate; +#line 27 "comb_1190.xml" + int i; + + for (i = 0; i < COMB_SIZE; i++) { + comb_tbl[i] = 0; + } + comb_pos = 0; + last_offset = 1000; + plugin_data->comb_pos = comb_pos; + plugin_data->comb_tbl = comb_tbl; + plugin_data->last_offset = last_offset; + plugin_data->sample_rate = sample_rate; + +} + +static void cleanupComb(LADSPA_Handle instance) { +#line 37 "comb_1190.xml" + Comb *plugin_data = (Comb *)instance; + free(plugin_data->comb_tbl); + free(instance); +} + +static void connectPortComb( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + Comb *plugin; + + plugin = (Comb *)instance; + switch (port) { + case COMB_FREQ: + plugin->freq = data; + break; + case COMB_FB: + plugin->fb = data; + break; + case COMB_INPUT: + plugin->input = data; + break; + case COMB_OUTPUT: + plugin->output = data; + break; + } +} + +static LADSPA_Handle instantiateComb( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + Comb *plugin_data = (Comb *)malloc(sizeof(Comb)); + long comb_pos; + LADSPA_Data *comb_tbl = NULL; + float last_offset; + long sample_rate; + +#line 20 "comb_1190.xml" + sample_rate = s_rate; + comb_tbl = malloc(sizeof(LADSPA_Data) * COMB_SIZE); + comb_pos = 0; + last_offset = 1000; + + plugin_data->comb_pos = comb_pos; + plugin_data->comb_tbl = comb_tbl; + plugin_data->last_offset = last_offset; + plugin_data->sample_rate = sample_rate; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runComb(LADSPA_Handle instance, unsigned long sample_count) { + Comb *plugin_data = (Comb *)instance; + + /* Band separation (Hz) (float value) */ + const LADSPA_Data freq = *(plugin_data->freq); + + /* Feedback (float value) */ + const LADSPA_Data fb = *(plugin_data->fb); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + long comb_pos = plugin_data->comb_pos; + LADSPA_Data * comb_tbl = plugin_data->comb_tbl; + float last_offset = plugin_data->last_offset; + long sample_rate = plugin_data->sample_rate; + +#line 41 "comb_1190.xml" + float offset; + int data_pos; + unsigned long pos; + float xf, xf_step, d_pos, fr, interp; + + offset = sample_rate / freq; + offset = f_clamp(offset, 0, COMB_SIZE - 1); + xf_step = 1.0f / (float)sample_count; + xf = 0.0f; + + for (pos = 0; pos < sample_count; pos++) { + xf += xf_step; + d_pos = comb_pos - LIN_INTERP(xf, last_offset, offset); + data_pos = f_trunc(d_pos); + fr = d_pos - data_pos; + interp = cube_interp(fr, comb_tbl[(data_pos - 1) & COMB_MASK], comb_tbl[data_pos & COMB_MASK], comb_tbl[(data_pos + 1) & COMB_MASK], comb_tbl[(data_pos + 2) & COMB_MASK]); + comb_tbl[comb_pos] = input[pos] + fb * interp; + buffer_write(output[pos], (input[pos] + interp) * 0.5f); + comb_pos = (comb_pos + 1) & COMB_MASK; + } + + plugin_data->comb_pos = comb_pos; + plugin_data->last_offset = offset; +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainComb(LADSPA_Handle instance, LADSPA_Data gain) { + ((Comb *)instance)->run_adding_gain = gain; +} + +static void runAddingComb(LADSPA_Handle instance, unsigned long sample_count) { + Comb *plugin_data = (Comb *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Band separation (Hz) (float value) */ + const LADSPA_Data freq = *(plugin_data->freq); + + /* Feedback (float value) */ + const LADSPA_Data fb = *(plugin_data->fb); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + long comb_pos = plugin_data->comb_pos; + LADSPA_Data * comb_tbl = plugin_data->comb_tbl; + float last_offset = plugin_data->last_offset; + long sample_rate = plugin_data->sample_rate; + +#line 41 "comb_1190.xml" + float offset; + int data_pos; + unsigned long pos; + float xf, xf_step, d_pos, fr, interp; + + offset = sample_rate / freq; + offset = f_clamp(offset, 0, COMB_SIZE - 1); + xf_step = 1.0f / (float)sample_count; + xf = 0.0f; + + for (pos = 0; pos < sample_count; pos++) { + xf += xf_step; + d_pos = comb_pos - LIN_INTERP(xf, last_offset, offset); + data_pos = f_trunc(d_pos); + fr = d_pos - data_pos; + interp = cube_interp(fr, comb_tbl[(data_pos - 1) & COMB_MASK], comb_tbl[data_pos & COMB_MASK], comb_tbl[(data_pos + 1) & COMB_MASK], comb_tbl[(data_pos + 2) & COMB_MASK]); + comb_tbl[comb_pos] = input[pos] + fb * interp; + buffer_write(output[pos], (input[pos] + interp) * 0.5f); + comb_pos = (comb_pos + 1) & COMB_MASK; + } + + plugin_data->comb_pos = comb_pos; + plugin_data->last_offset = offset; +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + combDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (combDescriptor) { + combDescriptor->UniqueID = 1190; + combDescriptor->Label = "comb"; + combDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + combDescriptor->Name = + D_("Comb Filter"); + combDescriptor->Maker = + "Steve Harris "; + combDescriptor->Copyright = + "GPL"; + combDescriptor->PortCount = 4; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(4, + sizeof(LADSPA_PortDescriptor)); + combDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(4, + sizeof(LADSPA_PortRangeHint)); + combDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(4, sizeof(char*)); + combDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Band separation (Hz) */ + port_descriptors[COMB_FREQ] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[COMB_FREQ] = + D_("Band separation (Hz)"); + port_range_hints[COMB_FREQ].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; + port_range_hints[COMB_FREQ].LowerBound = 16; + port_range_hints[COMB_FREQ].UpperBound = 640; + + /* Parameters for Feedback */ + port_descriptors[COMB_FB] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[COMB_FB] = + D_("Feedback"); + port_range_hints[COMB_FB].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[COMB_FB].LowerBound = -0.99; + port_range_hints[COMB_FB].UpperBound = 0.99; + + /* Parameters for Input */ + port_descriptors[COMB_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[COMB_INPUT] = + D_("Input"); + port_range_hints[COMB_INPUT].HintDescriptor = 0; + + /* Parameters for Output */ + port_descriptors[COMB_OUTPUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[COMB_OUTPUT] = + D_("Output"); + port_range_hints[COMB_OUTPUT].HintDescriptor = 0; + + combDescriptor->activate = activateComb; + combDescriptor->cleanup = cleanupComb; + combDescriptor->connect_port = connectPortComb; + combDescriptor->deactivate = NULL; + combDescriptor->instantiate = instantiateComb; + combDescriptor->run = runComb; + combDescriptor->run_adding = runAddingComb; + combDescriptor->set_run_adding_gain = setRunAddingGainComb; + } +} + +void _fini() { + if (combDescriptor) { + free((LADSPA_PortDescriptor *)combDescriptor->PortDescriptors); + free((char **)combDescriptor->PortNames); + free((LADSPA_PortRangeHint *)combDescriptor->PortRangeHints); + free(combDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/comb_1887.c b/plugins/LadspaEffect/swh/comb_1887.c new file mode 100644 index 000000000..00da7270d --- /dev/null +++ b/plugins/LadspaEffect/swh/comb_1887.c @@ -0,0 +1,1375 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + + +#include "ladspa-util.h" + +#define MIN(a,b) ((a) < (b) ? (a) : (b)) +#define CALC_DELAY(delaytime) \ + (f_clamp (delaytime * sample_rate, 1.f, (float)(buffer_mask + 1))) + +#define LOG001 -6.9077552789f + +static inline float +calc_feedback (float delaytime, float decaytime) +{ + if (delaytime == 0.f) + return 0.f; + else if (decaytime > 0.f) + return exp(LOG001 * delaytime / decaytime); + else if (decaytime < 0.f) + return -exp(LOG001 * delaytime / -decaytime); + else + return 0.f; +} + +#define COMB_N_IN 0 +#define COMB_N_OUT 1 +#define COMB_N_MAX_DELAY 2 +#define COMB_N_DELAY_TIME 3 +#define COMB_N_DECAY_TIME 4 +#define COMB_L_IN 0 +#define COMB_L_OUT 1 +#define COMB_L_MAX_DELAY 2 +#define COMB_L_DELAY_TIME 3 +#define COMB_L_DECAY_TIME 4 +#define COMB_C_IN 0 +#define COMB_C_OUT 1 +#define COMB_C_MAX_DELAY 2 +#define COMB_C_DELAY_TIME 3 +#define COMB_C_DECAY_TIME 4 + +static LADSPA_Descriptor *comb_nDescriptor = NULL; + +typedef struct { + LADSPA_Data *in; + LADSPA_Data *out; + LADSPA_Data *max_delay; + LADSPA_Data *delay_time; + LADSPA_Data *decay_time; + LADSPA_Data *buffer; + unsigned int buffer_mask; + LADSPA_Data delay_samples; + LADSPA_Data feedback; + LADSPA_Data last_decay_time; + LADSPA_Data last_delay_time; + unsigned int sample_rate; + long write_phase; + LADSPA_Data run_adding_gain; +} Comb_n; + +static LADSPA_Descriptor *comb_lDescriptor = NULL; + +typedef struct { + LADSPA_Data *in; + LADSPA_Data *out; + LADSPA_Data *max_delay; + LADSPA_Data *delay_time; + LADSPA_Data *decay_time; + LADSPA_Data *buffer; + unsigned int buffer_mask; + LADSPA_Data delay_samples; + LADSPA_Data feedback; + LADSPA_Data last_decay_time; + LADSPA_Data last_delay_time; + unsigned int sample_rate; + long write_phase; + LADSPA_Data run_adding_gain; +} Comb_l; + +static LADSPA_Descriptor *comb_cDescriptor = NULL; + +typedef struct { + LADSPA_Data *in; + LADSPA_Data *out; + LADSPA_Data *max_delay; + LADSPA_Data *delay_time; + LADSPA_Data *decay_time; + LADSPA_Data *buffer; + unsigned int buffer_mask; + LADSPA_Data delay_samples; + LADSPA_Data feedback; + LADSPA_Data last_decay_time; + LADSPA_Data last_delay_time; + unsigned int sample_rate; + long write_phase; + LADSPA_Data run_adding_gain; +} Comb_c; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return comb_nDescriptor; + case 1: + return comb_lDescriptor; + case 2: + return comb_cDescriptor; + default: + return NULL; + } +} + +static void activateComb_n(LADSPA_Handle instance) { + Comb_n *plugin_data = (Comb_n *)instance; + LADSPA_Data *buffer = plugin_data->buffer; + unsigned int buffer_mask = plugin_data->buffer_mask; + LADSPA_Data delay_samples = plugin_data->delay_samples; + LADSPA_Data feedback = plugin_data->feedback; + LADSPA_Data last_decay_time = plugin_data->last_decay_time; + LADSPA_Data last_delay_time = plugin_data->last_delay_time; + unsigned int sample_rate = plugin_data->sample_rate; + long write_phase = plugin_data->write_phase; + unsigned int minsize, size; + + if (plugin_data->max_delay && *plugin_data->max_delay > 0) + minsize = sample_rate * *plugin_data->max_delay; + else if (plugin_data->delay_time) + minsize = sample_rate * *plugin_data->delay_time; + else + minsize = sample_rate; /* 1 second default */ + + size = 1; + while (size < minsize) size <<= 1; + + /* calloc sets the buffer to zero. */ + buffer = calloc(size, sizeof(LADSPA_Data)); + if (buffer) + buffer_mask = size - 1; + else + buffer_mask = 0; + write_phase = 0; + plugin_data->buffer = buffer; + plugin_data->buffer_mask = buffer_mask; + plugin_data->delay_samples = delay_samples; + plugin_data->feedback = feedback; + plugin_data->last_decay_time = last_decay_time; + plugin_data->last_delay_time = last_delay_time; + plugin_data->sample_rate = sample_rate; + plugin_data->write_phase = write_phase; + +} + +static void cleanupComb_n(LADSPA_Handle instance) { + Comb_n *plugin_data = (Comb_n *)instance; + free(plugin_data->buffer); + free(instance); +} + +static void connectPortComb_n( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + Comb_n *plugin; + + plugin = (Comb_n *)instance; + switch (port) { + case COMB_N_IN: + plugin->in = data; + break; + case COMB_N_OUT: + plugin->out = data; + break; + case COMB_N_MAX_DELAY: + plugin->max_delay = data; + break; + case COMB_N_DELAY_TIME: + plugin->delay_time = data; + break; + case COMB_N_DECAY_TIME: + plugin->decay_time = data; + break; + } +} + +static LADSPA_Handle instantiateComb_n( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + Comb_n *plugin_data = (Comb_n *)malloc(sizeof(Comb_n)); + LADSPA_Data *buffer = NULL; + unsigned int buffer_mask = 0; + LADSPA_Data delay_samples = 0; + LADSPA_Data feedback = 0; + LADSPA_Data last_decay_time = 0; + LADSPA_Data last_delay_time = 0; + unsigned int sample_rate = 0; + long write_phase = 0; + + sample_rate = s_rate; + + plugin_data->buffer = buffer; + plugin_data->buffer_mask = buffer_mask; + plugin_data->delay_samples = delay_samples; + plugin_data->feedback = feedback; + plugin_data->last_decay_time = last_decay_time; + plugin_data->last_delay_time = last_delay_time; + plugin_data->sample_rate = sample_rate; + plugin_data->write_phase = write_phase; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runComb_n(LADSPA_Handle instance, unsigned long sample_count) { + Comb_n *plugin_data = (Comb_n *)instance; + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const in = plugin_data->in; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const out = plugin_data->out; + + /* Max Delay (s) (float value) */ + const LADSPA_Data max_delay = *(plugin_data->max_delay); + + /* Delay Time (s) (float value) */ + const LADSPA_Data delay_time = *(plugin_data->delay_time); + + /* Decay Time (s) (float value) */ + const LADSPA_Data decay_time = *(plugin_data->decay_time); + LADSPA_Data * buffer = plugin_data->buffer; + unsigned int buffer_mask = plugin_data->buffer_mask; + LADSPA_Data delay_samples = plugin_data->delay_samples; + LADSPA_Data feedback = plugin_data->feedback; + LADSPA_Data last_decay_time = plugin_data->last_decay_time; + LADSPA_Data last_delay_time = plugin_data->last_delay_time; + unsigned int sample_rate = plugin_data->sample_rate; + long write_phase = plugin_data->write_phase; + + unsigned int i; + + i = max_delay; /* stop gcc complaining */ + + if (write_phase == 0) { + plugin_data->last_delay_time = delay_time; + plugin_data->last_decay_time = decay_time; + plugin_data->delay_samples = delay_samples = CALC_DELAY (delay_time); + plugin_data->feedback = feedback = calc_feedback (delay_time, decay_time); + } + + if (delay_time == last_delay_time) { + long read_phase = write_phase - (long)delay_samples; + LADSPA_Data *readptr = buffer + (read_phase & buffer_mask); + LADSPA_Data *writeptr = buffer + (write_phase & buffer_mask); + LADSPA_Data *lastptr = buffer + buffer_mask + 1; + + if (decay_time == last_decay_time) { + long remain = sample_count; + + while (remain) { + long read_space = lastptr - readptr; + long write_space = lastptr - writeptr; + long to_process = MIN (MIN (read_space, remain), write_space); + + if (to_process == 0) + return; // buffer not allocated. + + remain -= to_process; + + for (i=0; ilast_decay_time = decay_time; + plugin_data->feedback = feedback; + } + + write_phase += sample_count; + } else { + float next_delay_samples = CALC_DELAY (delay_time); + float delay_samples_slope = (next_delay_samples - delay_samples) / sample_count; + float next_feedback = calc_feedback (delay_time, decay_time); + float feedback_slope = (next_feedback - feedback) / sample_count; + + for (i=0; ilast_delay_time = delay_time; + plugin_data->last_decay_time = decay_time; + plugin_data->feedback = feedback; + plugin_data->delay_samples = delay_samples; + } + + plugin_data->write_phase = write_phase; +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainComb_n(LADSPA_Handle instance, LADSPA_Data gain) { + ((Comb_n *)instance)->run_adding_gain = gain; +} + +static void runAddingComb_n(LADSPA_Handle instance, unsigned long sample_count) { + Comb_n *plugin_data = (Comb_n *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const in = plugin_data->in; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const out = plugin_data->out; + + /* Max Delay (s) (float value) */ + const LADSPA_Data max_delay = *(plugin_data->max_delay); + + /* Delay Time (s) (float value) */ + const LADSPA_Data delay_time = *(plugin_data->delay_time); + + /* Decay Time (s) (float value) */ + const LADSPA_Data decay_time = *(plugin_data->decay_time); + LADSPA_Data * buffer = plugin_data->buffer; + unsigned int buffer_mask = plugin_data->buffer_mask; + LADSPA_Data delay_samples = plugin_data->delay_samples; + LADSPA_Data feedback = plugin_data->feedback; + LADSPA_Data last_decay_time = plugin_data->last_decay_time; + LADSPA_Data last_delay_time = plugin_data->last_delay_time; + unsigned int sample_rate = plugin_data->sample_rate; + long write_phase = plugin_data->write_phase; + + unsigned int i; + + i = max_delay; /* stop gcc complaining */ + + if (write_phase == 0) { + plugin_data->last_delay_time = delay_time; + plugin_data->last_decay_time = decay_time; + plugin_data->delay_samples = delay_samples = CALC_DELAY (delay_time); + plugin_data->feedback = feedback = calc_feedback (delay_time, decay_time); + } + + if (delay_time == last_delay_time) { + long read_phase = write_phase - (long)delay_samples; + LADSPA_Data *readptr = buffer + (read_phase & buffer_mask); + LADSPA_Data *writeptr = buffer + (write_phase & buffer_mask); + LADSPA_Data *lastptr = buffer + buffer_mask + 1; + + if (decay_time == last_decay_time) { + long remain = sample_count; + + while (remain) { + long read_space = lastptr - readptr; + long write_space = lastptr - writeptr; + long to_process = MIN (MIN (read_space, remain), write_space); + + if (to_process == 0) + return; // buffer not allocated. + + remain -= to_process; + + for (i=0; ilast_decay_time = decay_time; + plugin_data->feedback = feedback; + } + + write_phase += sample_count; + } else { + float next_delay_samples = CALC_DELAY (delay_time); + float delay_samples_slope = (next_delay_samples - delay_samples) / sample_count; + float next_feedback = calc_feedback (delay_time, decay_time); + float feedback_slope = (next_feedback - feedback) / sample_count; + + for (i=0; ilast_delay_time = delay_time; + plugin_data->last_decay_time = decay_time; + plugin_data->feedback = feedback; + plugin_data->delay_samples = delay_samples; + } + + plugin_data->write_phase = write_phase; +} + +static void activateComb_l(LADSPA_Handle instance) { + Comb_l *plugin_data = (Comb_l *)instance; + LADSPA_Data *buffer = plugin_data->buffer; + unsigned int buffer_mask = plugin_data->buffer_mask; + LADSPA_Data delay_samples = plugin_data->delay_samples; + LADSPA_Data feedback = plugin_data->feedback; + LADSPA_Data last_decay_time = plugin_data->last_decay_time; + LADSPA_Data last_delay_time = plugin_data->last_delay_time; + unsigned int sample_rate = plugin_data->sample_rate; + long write_phase = plugin_data->write_phase; + unsigned int minsize, size; + + if (plugin_data->max_delay && *plugin_data->max_delay > 0) + minsize = sample_rate * *plugin_data->max_delay; + else if (plugin_data->delay_time) + minsize = sample_rate * *plugin_data->delay_time; + else + minsize = sample_rate; /* 1 second default */ + + size = 1; + while (size < minsize) size <<= 1; + + /* calloc sets the buffer to zero. */ + buffer = calloc(size, sizeof(LADSPA_Data)); + if (buffer) + buffer_mask = size - 1; + else + buffer_mask = 0; + write_phase = 0; + plugin_data->buffer = buffer; + plugin_data->buffer_mask = buffer_mask; + plugin_data->delay_samples = delay_samples; + plugin_data->feedback = feedback; + plugin_data->last_decay_time = last_decay_time; + plugin_data->last_delay_time = last_delay_time; + plugin_data->sample_rate = sample_rate; + plugin_data->write_phase = write_phase; + +} + +static void cleanupComb_l(LADSPA_Handle instance) { + Comb_l *plugin_data = (Comb_l *)instance; + free(plugin_data->buffer); + free(instance); +} + +static void connectPortComb_l( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + Comb_l *plugin; + + plugin = (Comb_l *)instance; + switch (port) { + case COMB_L_IN: + plugin->in = data; + break; + case COMB_L_OUT: + plugin->out = data; + break; + case COMB_L_MAX_DELAY: + plugin->max_delay = data; + break; + case COMB_L_DELAY_TIME: + plugin->delay_time = data; + break; + case COMB_L_DECAY_TIME: + plugin->decay_time = data; + break; + } +} + +static LADSPA_Handle instantiateComb_l( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + Comb_l *plugin_data = (Comb_l *)malloc(sizeof(Comb_l)); + LADSPA_Data *buffer = NULL; + unsigned int buffer_mask = 0; + LADSPA_Data delay_samples = 0; + LADSPA_Data feedback = 0; + LADSPA_Data last_decay_time = 0; + LADSPA_Data last_delay_time = 0; + unsigned int sample_rate = 0; + long write_phase = 0; + + sample_rate = s_rate; + + plugin_data->buffer = buffer; + plugin_data->buffer_mask = buffer_mask; + plugin_data->delay_samples = delay_samples; + plugin_data->feedback = feedback; + plugin_data->last_decay_time = last_decay_time; + plugin_data->last_delay_time = last_delay_time; + plugin_data->sample_rate = sample_rate; + plugin_data->write_phase = write_phase; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runComb_l(LADSPA_Handle instance, unsigned long sample_count) { + Comb_l *plugin_data = (Comb_l *)instance; + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const in = plugin_data->in; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const out = plugin_data->out; + + /* Max Delay (s) (float value) */ + const LADSPA_Data max_delay = *(plugin_data->max_delay); + + /* Delay Time (s) (float value) */ + const LADSPA_Data delay_time = *(plugin_data->delay_time); + + /* Decay Time (s) (float value) */ + const LADSPA_Data decay_time = *(plugin_data->decay_time); + LADSPA_Data * buffer = plugin_data->buffer; + unsigned int buffer_mask = plugin_data->buffer_mask; + LADSPA_Data delay_samples = plugin_data->delay_samples; + LADSPA_Data feedback = plugin_data->feedback; + LADSPA_Data last_decay_time = plugin_data->last_decay_time; + LADSPA_Data last_delay_time = plugin_data->last_delay_time; + unsigned int sample_rate = plugin_data->sample_rate; + long write_phase = plugin_data->write_phase; + + unsigned int i; + + i = max_delay; + + if (write_phase == 0) { + plugin_data->last_delay_time = delay_time; + plugin_data->last_decay_time = decay_time; + plugin_data->delay_samples = delay_samples = CALC_DELAY (delay_time); + plugin_data->feedback = feedback = calc_feedback (delay_time, decay_time); + } + + if (delay_time == last_delay_time && decay_time == last_decay_time) { + long idelay_samples = (long)delay_samples; + LADSPA_Data frac = delay_samples - idelay_samples; + + for (i=0; ilast_delay_time = delay_time; + plugin_data->last_decay_time = decay_time; + plugin_data->feedback = feedback; + plugin_data->delay_samples = delay_samples; + } + + plugin_data->write_phase = write_phase; +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainComb_l(LADSPA_Handle instance, LADSPA_Data gain) { + ((Comb_l *)instance)->run_adding_gain = gain; +} + +static void runAddingComb_l(LADSPA_Handle instance, unsigned long sample_count) { + Comb_l *plugin_data = (Comb_l *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const in = plugin_data->in; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const out = plugin_data->out; + + /* Max Delay (s) (float value) */ + const LADSPA_Data max_delay = *(plugin_data->max_delay); + + /* Delay Time (s) (float value) */ + const LADSPA_Data delay_time = *(plugin_data->delay_time); + + /* Decay Time (s) (float value) */ + const LADSPA_Data decay_time = *(plugin_data->decay_time); + LADSPA_Data * buffer = plugin_data->buffer; + unsigned int buffer_mask = plugin_data->buffer_mask; + LADSPA_Data delay_samples = plugin_data->delay_samples; + LADSPA_Data feedback = plugin_data->feedback; + LADSPA_Data last_decay_time = plugin_data->last_decay_time; + LADSPA_Data last_delay_time = plugin_data->last_delay_time; + unsigned int sample_rate = plugin_data->sample_rate; + long write_phase = plugin_data->write_phase; + + unsigned int i; + + i = max_delay; + + if (write_phase == 0) { + plugin_data->last_delay_time = delay_time; + plugin_data->last_decay_time = decay_time; + plugin_data->delay_samples = delay_samples = CALC_DELAY (delay_time); + plugin_data->feedback = feedback = calc_feedback (delay_time, decay_time); + } + + if (delay_time == last_delay_time && decay_time == last_decay_time) { + long idelay_samples = (long)delay_samples; + LADSPA_Data frac = delay_samples - idelay_samples; + + for (i=0; ilast_delay_time = delay_time; + plugin_data->last_decay_time = decay_time; + plugin_data->feedback = feedback; + plugin_data->delay_samples = delay_samples; + } + + plugin_data->write_phase = write_phase; +} + +static void activateComb_c(LADSPA_Handle instance) { + Comb_c *plugin_data = (Comb_c *)instance; + LADSPA_Data *buffer = plugin_data->buffer; + unsigned int buffer_mask = plugin_data->buffer_mask; + LADSPA_Data delay_samples = plugin_data->delay_samples; + LADSPA_Data feedback = plugin_data->feedback; + LADSPA_Data last_decay_time = plugin_data->last_decay_time; + LADSPA_Data last_delay_time = plugin_data->last_delay_time; + unsigned int sample_rate = plugin_data->sample_rate; + long write_phase = plugin_data->write_phase; + unsigned int minsize, size; + + if (plugin_data->max_delay && *plugin_data->max_delay > 0) + minsize = sample_rate * *plugin_data->max_delay; + else if (plugin_data->delay_time) + minsize = sample_rate * *plugin_data->delay_time; + else + minsize = sample_rate; /* 1 second default */ + + size = 1; + while (size < minsize) size <<= 1; + + /* calloc sets the buffer to zero. */ + buffer = calloc(size, sizeof(LADSPA_Data)); + if (buffer) + buffer_mask = size - 1; + else + buffer_mask = 0; + write_phase = 0; + plugin_data->buffer = buffer; + plugin_data->buffer_mask = buffer_mask; + plugin_data->delay_samples = delay_samples; + plugin_data->feedback = feedback; + plugin_data->last_decay_time = last_decay_time; + plugin_data->last_delay_time = last_delay_time; + plugin_data->sample_rate = sample_rate; + plugin_data->write_phase = write_phase; + +} + +static void cleanupComb_c(LADSPA_Handle instance) { + Comb_c *plugin_data = (Comb_c *)instance; + free(plugin_data->buffer); + free(instance); +} + +static void connectPortComb_c( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + Comb_c *plugin; + + plugin = (Comb_c *)instance; + switch (port) { + case COMB_C_IN: + plugin->in = data; + break; + case COMB_C_OUT: + plugin->out = data; + break; + case COMB_C_MAX_DELAY: + plugin->max_delay = data; + break; + case COMB_C_DELAY_TIME: + plugin->delay_time = data; + break; + case COMB_C_DECAY_TIME: + plugin->decay_time = data; + break; + } +} + +static LADSPA_Handle instantiateComb_c( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + Comb_c *plugin_data = (Comb_c *)malloc(sizeof(Comb_c)); + LADSPA_Data *buffer = NULL; + unsigned int buffer_mask = 0; + LADSPA_Data delay_samples = 0; + LADSPA_Data feedback = 0; + LADSPA_Data last_decay_time = 0; + LADSPA_Data last_delay_time = 0; + unsigned int sample_rate = 0; + long write_phase = 0; + + sample_rate = s_rate; + + plugin_data->buffer = buffer; + plugin_data->buffer_mask = buffer_mask; + plugin_data->delay_samples = delay_samples; + plugin_data->feedback = feedback; + plugin_data->last_decay_time = last_decay_time; + plugin_data->last_delay_time = last_delay_time; + plugin_data->sample_rate = sample_rate; + plugin_data->write_phase = write_phase; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runComb_c(LADSPA_Handle instance, unsigned long sample_count) { + Comb_c *plugin_data = (Comb_c *)instance; + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const in = plugin_data->in; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const out = plugin_data->out; + + /* Max Delay (s) (float value) */ + const LADSPA_Data max_delay = *(plugin_data->max_delay); + + /* Delay Time (s) (float value) */ + const LADSPA_Data delay_time = *(plugin_data->delay_time); + + /* Decay Time (s) (float value) */ + const LADSPA_Data decay_time = *(plugin_data->decay_time); + LADSPA_Data * buffer = plugin_data->buffer; + unsigned int buffer_mask = plugin_data->buffer_mask; + LADSPA_Data delay_samples = plugin_data->delay_samples; + LADSPA_Data feedback = plugin_data->feedback; + LADSPA_Data last_decay_time = plugin_data->last_decay_time; + LADSPA_Data last_delay_time = plugin_data->last_delay_time; + unsigned int sample_rate = plugin_data->sample_rate; + long write_phase = plugin_data->write_phase; + + unsigned int i; + + i = max_delay; + + if (write_phase == 0) { + plugin_data->last_delay_time = delay_time; + plugin_data->last_decay_time = decay_time; + plugin_data->delay_samples = delay_samples = CALC_DELAY (delay_time); + plugin_data->feedback = feedback = calc_feedback (delay_time, decay_time); + } + + if (delay_time == last_delay_time && decay_time == last_decay_time) { + long idelay_samples = (long)delay_samples; + LADSPA_Data frac = delay_samples - idelay_samples; + + for (i=0; ilast_delay_time = delay_time; + plugin_data->last_decay_time = decay_time; + plugin_data->feedback = feedback; + plugin_data->delay_samples = delay_samples; + } + + plugin_data->write_phase = write_phase; +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainComb_c(LADSPA_Handle instance, LADSPA_Data gain) { + ((Comb_c *)instance)->run_adding_gain = gain; +} + +static void runAddingComb_c(LADSPA_Handle instance, unsigned long sample_count) { + Comb_c *plugin_data = (Comb_c *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const in = plugin_data->in; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const out = plugin_data->out; + + /* Max Delay (s) (float value) */ + const LADSPA_Data max_delay = *(plugin_data->max_delay); + + /* Delay Time (s) (float value) */ + const LADSPA_Data delay_time = *(plugin_data->delay_time); + + /* Decay Time (s) (float value) */ + const LADSPA_Data decay_time = *(plugin_data->decay_time); + LADSPA_Data * buffer = plugin_data->buffer; + unsigned int buffer_mask = plugin_data->buffer_mask; + LADSPA_Data delay_samples = plugin_data->delay_samples; + LADSPA_Data feedback = plugin_data->feedback; + LADSPA_Data last_decay_time = plugin_data->last_decay_time; + LADSPA_Data last_delay_time = plugin_data->last_delay_time; + unsigned int sample_rate = plugin_data->sample_rate; + long write_phase = plugin_data->write_phase; + + unsigned int i; + + i = max_delay; + + if (write_phase == 0) { + plugin_data->last_delay_time = delay_time; + plugin_data->last_decay_time = decay_time; + plugin_data->delay_samples = delay_samples = CALC_DELAY (delay_time); + plugin_data->feedback = feedback = calc_feedback (delay_time, decay_time); + } + + if (delay_time == last_delay_time && decay_time == last_decay_time) { + long idelay_samples = (long)delay_samples; + LADSPA_Data frac = delay_samples - idelay_samples; + + for (i=0; ilast_delay_time = delay_time; + plugin_data->last_decay_time = decay_time; + plugin_data->feedback = feedback; + plugin_data->delay_samples = delay_samples; + } + + plugin_data->write_phase = write_phase; +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + comb_nDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (comb_nDescriptor) { + comb_nDescriptor->UniqueID = 1889; + comb_nDescriptor->Label = "comb_n"; + comb_nDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + comb_nDescriptor->Name = + D_("Comb delay line, noninterpolating"); + comb_nDescriptor->Maker = + "Andy Wingo "; + comb_nDescriptor->Copyright = + "GPL"; + comb_nDescriptor->PortCount = 5; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(5, + sizeof(LADSPA_PortDescriptor)); + comb_nDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(5, + sizeof(LADSPA_PortRangeHint)); + comb_nDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(5, sizeof(char*)); + comb_nDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Input */ + port_descriptors[COMB_N_IN] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[COMB_N_IN] = + D_("Input"); + port_range_hints[COMB_N_IN].HintDescriptor = 0; + + /* Parameters for Output */ + port_descriptors[COMB_N_OUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[COMB_N_OUT] = + D_("Output"); + port_range_hints[COMB_N_OUT].HintDescriptor = 0; + + /* Parameters for Max Delay (s) */ + port_descriptors[COMB_N_MAX_DELAY] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[COMB_N_MAX_DELAY] = + D_("Max Delay (s)"); + port_range_hints[COMB_N_MAX_DELAY].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW; + port_range_hints[COMB_N_MAX_DELAY].LowerBound = 0; + + /* Parameters for Delay Time (s) */ + port_descriptors[COMB_N_DELAY_TIME] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[COMB_N_DELAY_TIME] = + D_("Delay Time (s)"); + port_range_hints[COMB_N_DELAY_TIME].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW; + port_range_hints[COMB_N_DELAY_TIME].LowerBound = 0; + + /* Parameters for Decay Time (s) */ + port_descriptors[COMB_N_DECAY_TIME] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[COMB_N_DECAY_TIME] = + D_("Decay Time (s)"); + port_range_hints[COMB_N_DECAY_TIME].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW; + port_range_hints[COMB_N_DECAY_TIME].LowerBound = 0; + + comb_nDescriptor->activate = activateComb_n; + comb_nDescriptor->cleanup = cleanupComb_n; + comb_nDescriptor->connect_port = connectPortComb_n; + comb_nDescriptor->deactivate = NULL; + comb_nDescriptor->instantiate = instantiateComb_n; + comb_nDescriptor->run = runComb_n; + comb_nDescriptor->run_adding = runAddingComb_n; + comb_nDescriptor->set_run_adding_gain = setRunAddingGainComb_n; + } + + comb_lDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (comb_lDescriptor) { + comb_lDescriptor->UniqueID = 1887; + comb_lDescriptor->Label = "comb_l"; + comb_lDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + comb_lDescriptor->Name = + D_("Comb delay line, linear interpolation"); + comb_lDescriptor->Maker = + "Andy Wingo "; + comb_lDescriptor->Copyright = + "GPL"; + comb_lDescriptor->PortCount = 5; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(5, + sizeof(LADSPA_PortDescriptor)); + comb_lDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(5, + sizeof(LADSPA_PortRangeHint)); + comb_lDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(5, sizeof(char*)); + comb_lDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Input */ + port_descriptors[COMB_L_IN] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[COMB_L_IN] = + D_("Input"); + port_range_hints[COMB_L_IN].HintDescriptor = 0; + + /* Parameters for Output */ + port_descriptors[COMB_L_OUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[COMB_L_OUT] = + D_("Output"); + port_range_hints[COMB_L_OUT].HintDescriptor = 0; + + /* Parameters for Max Delay (s) */ + port_descriptors[COMB_L_MAX_DELAY] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[COMB_L_MAX_DELAY] = + D_("Max Delay (s)"); + port_range_hints[COMB_L_MAX_DELAY].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW; + port_range_hints[COMB_L_MAX_DELAY].LowerBound = 0; + + /* Parameters for Delay Time (s) */ + port_descriptors[COMB_L_DELAY_TIME] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[COMB_L_DELAY_TIME] = + D_("Delay Time (s)"); + port_range_hints[COMB_L_DELAY_TIME].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW; + port_range_hints[COMB_L_DELAY_TIME].LowerBound = 0; + + /* Parameters for Decay Time (s) */ + port_descriptors[COMB_L_DECAY_TIME] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[COMB_L_DECAY_TIME] = + D_("Decay Time (s)"); + port_range_hints[COMB_L_DECAY_TIME].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW; + port_range_hints[COMB_L_DECAY_TIME].LowerBound = 0; + + comb_lDescriptor->activate = activateComb_l; + comb_lDescriptor->cleanup = cleanupComb_l; + comb_lDescriptor->connect_port = connectPortComb_l; + comb_lDescriptor->deactivate = NULL; + comb_lDescriptor->instantiate = instantiateComb_l; + comb_lDescriptor->run = runComb_l; + comb_lDescriptor->run_adding = runAddingComb_l; + comb_lDescriptor->set_run_adding_gain = setRunAddingGainComb_l; + } + + comb_cDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (comb_cDescriptor) { + comb_cDescriptor->UniqueID = 1888; + comb_cDescriptor->Label = "comb_c"; + comb_cDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + comb_cDescriptor->Name = + D_("Comb delay line, cubic spline interpolation"); + comb_cDescriptor->Maker = + "Andy Wingo "; + comb_cDescriptor->Copyright = + "GPL"; + comb_cDescriptor->PortCount = 5; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(5, + sizeof(LADSPA_PortDescriptor)); + comb_cDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(5, + sizeof(LADSPA_PortRangeHint)); + comb_cDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(5, sizeof(char*)); + comb_cDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Input */ + port_descriptors[COMB_C_IN] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[COMB_C_IN] = + D_("Input"); + port_range_hints[COMB_C_IN].HintDescriptor = 0; + + /* Parameters for Output */ + port_descriptors[COMB_C_OUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[COMB_C_OUT] = + D_("Output"); + port_range_hints[COMB_C_OUT].HintDescriptor = 0; + + /* Parameters for Max Delay (s) */ + port_descriptors[COMB_C_MAX_DELAY] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[COMB_C_MAX_DELAY] = + D_("Max Delay (s)"); + port_range_hints[COMB_C_MAX_DELAY].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW; + port_range_hints[COMB_C_MAX_DELAY].LowerBound = 0; + + /* Parameters for Delay Time (s) */ + port_descriptors[COMB_C_DELAY_TIME] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[COMB_C_DELAY_TIME] = + D_("Delay Time (s)"); + port_range_hints[COMB_C_DELAY_TIME].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW; + port_range_hints[COMB_C_DELAY_TIME].LowerBound = 0; + + /* Parameters for Decay Time (s) */ + port_descriptors[COMB_C_DECAY_TIME] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[COMB_C_DECAY_TIME] = + D_("Decay Time (s)"); + port_range_hints[COMB_C_DECAY_TIME].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW; + port_range_hints[COMB_C_DECAY_TIME].LowerBound = 0; + + comb_cDescriptor->activate = activateComb_c; + comb_cDescriptor->cleanup = cleanupComb_c; + comb_cDescriptor->connect_port = connectPortComb_c; + comb_cDescriptor->deactivate = NULL; + comb_cDescriptor->instantiate = instantiateComb_c; + comb_cDescriptor->run = runComb_c; + comb_cDescriptor->run_adding = runAddingComb_c; + comb_cDescriptor->set_run_adding_gain = setRunAddingGainComb_c; + } +} + +void _fini() { + if (comb_nDescriptor) { + free((LADSPA_PortDescriptor *)comb_nDescriptor->PortDescriptors); + free((char **)comb_nDescriptor->PortNames); + free((LADSPA_PortRangeHint *)comb_nDescriptor->PortRangeHints); + free(comb_nDescriptor); + } + if (comb_lDescriptor) { + free((LADSPA_PortDescriptor *)comb_lDescriptor->PortDescriptors); + free((char **)comb_lDescriptor->PortNames); + free((LADSPA_PortRangeHint *)comb_lDescriptor->PortRangeHints); + free(comb_lDescriptor); + } + if (comb_cDescriptor) { + free((LADSPA_PortDescriptor *)comb_cDescriptor->PortDescriptors); + free((char **)comb_cDescriptor->PortNames); + free((LADSPA_PortRangeHint *)comb_cDescriptor->PortRangeHints); + free(comb_cDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/comb_splitter_1411.c b/plugins/LadspaEffect/swh/comb_splitter_1411.c new file mode 100644 index 000000000..bd1c4c714 --- /dev/null +++ b/plugins/LadspaEffect/swh/comb_splitter_1411.c @@ -0,0 +1,352 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + +#line 9 "comb_splitter_1411.xml" + +#include "ladspa-util.h" +#define COMB_SIZE 0x4000 +#define COMB_MASK 0x3FFF + +#define COMBSPLITTER_FREQ 0 +#define COMBSPLITTER_INPUT 1 +#define COMBSPLITTER_OUT1 2 +#define COMBSPLITTER_OUT2 3 + +static LADSPA_Descriptor *combSplitterDescriptor = NULL; + +typedef struct { + LADSPA_Data *freq; + LADSPA_Data *input; + LADSPA_Data *out1; + LADSPA_Data *out2; + long comb_pos; + LADSPA_Data *comb_tbl; + float last_offset; + long sample_rate; + LADSPA_Data run_adding_gain; +} CombSplitter; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return combSplitterDescriptor; + default: + return NULL; + } +} + +static void activateCombSplitter(LADSPA_Handle instance) { + CombSplitter *plugin_data = (CombSplitter *)instance; + long comb_pos = plugin_data->comb_pos; + LADSPA_Data *comb_tbl = plugin_data->comb_tbl; + float last_offset = plugin_data->last_offset; + long sample_rate = plugin_data->sample_rate; +#line 29 "comb_splitter_1411.xml" + int i; + + for (i = 0; i < COMB_SIZE; i++) { + comb_tbl[i] = 0; + } + comb_pos = 0; + last_offset = 1000; + plugin_data->comb_pos = comb_pos; + plugin_data->comb_tbl = comb_tbl; + plugin_data->last_offset = last_offset; + plugin_data->sample_rate = sample_rate; + +} + +static void cleanupCombSplitter(LADSPA_Handle instance) { +#line 39 "comb_splitter_1411.xml" + CombSplitter *plugin_data = (CombSplitter *)instance; + free(plugin_data->comb_tbl); + free(instance); +} + +static void connectPortCombSplitter( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + CombSplitter *plugin; + + plugin = (CombSplitter *)instance; + switch (port) { + case COMBSPLITTER_FREQ: + plugin->freq = data; + break; + case COMBSPLITTER_INPUT: + plugin->input = data; + break; + case COMBSPLITTER_OUT1: + plugin->out1 = data; + break; + case COMBSPLITTER_OUT2: + plugin->out2 = data; + break; + } +} + +static LADSPA_Handle instantiateCombSplitter( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + CombSplitter *plugin_data = (CombSplitter *)malloc(sizeof(CombSplitter)); + long comb_pos; + LADSPA_Data *comb_tbl = NULL; + float last_offset; + long sample_rate; + +#line 22 "comb_splitter_1411.xml" + sample_rate = s_rate; + comb_tbl = malloc(sizeof(LADSPA_Data) * COMB_SIZE); + comb_pos = 0; + last_offset = 1000; + + plugin_data->comb_pos = comb_pos; + plugin_data->comb_tbl = comb_tbl; + plugin_data->last_offset = last_offset; + plugin_data->sample_rate = sample_rate; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runCombSplitter(LADSPA_Handle instance, unsigned long sample_count) { + CombSplitter *plugin_data = (CombSplitter *)instance; + + /* Band separation (Hz) (float value) */ + const LADSPA_Data freq = *(plugin_data->freq); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output 1 (array of floats of length sample_count) */ + LADSPA_Data * const out1 = plugin_data->out1; + + /* Output 2 (array of floats of length sample_count) */ + LADSPA_Data * const out2 = plugin_data->out2; + long comb_pos = plugin_data->comb_pos; + LADSPA_Data * comb_tbl = plugin_data->comb_tbl; + float last_offset = plugin_data->last_offset; + long sample_rate = plugin_data->sample_rate; + +#line 43 "comb_splitter_1411.xml" + float offset; + int data_pos; + unsigned long pos; + float xf, xf_step, d_pos, fr, interp, in; + + offset = sample_rate / freq; + offset = f_clamp(offset, 0, COMB_SIZE - 1); + xf_step = 1.0f / (float)sample_count; + xf = 0.0f; + + for (pos = 0; pos < sample_count; pos++) { + xf += xf_step; + d_pos = comb_pos - LIN_INTERP(xf, last_offset, offset); + data_pos = f_trunc(d_pos); + fr = d_pos - data_pos; + interp = cube_interp(fr, comb_tbl[(data_pos - 1) & COMB_MASK], comb_tbl[data_pos & COMB_MASK], comb_tbl[(data_pos + 1) & COMB_MASK], comb_tbl[(data_pos + 2) & COMB_MASK]); + in = input[pos]; + comb_tbl[comb_pos] = in; + buffer_write(out1[pos], (in + interp) * 0.5f); + buffer_write(out2[pos], (in - interp) * 0.5f); + comb_pos = (comb_pos + 1) & COMB_MASK; + } + + plugin_data->comb_pos = comb_pos; + plugin_data->last_offset = offset; +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainCombSplitter(LADSPA_Handle instance, LADSPA_Data gain) { + ((CombSplitter *)instance)->run_adding_gain = gain; +} + +static void runAddingCombSplitter(LADSPA_Handle instance, unsigned long sample_count) { + CombSplitter *plugin_data = (CombSplitter *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Band separation (Hz) (float value) */ + const LADSPA_Data freq = *(plugin_data->freq); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output 1 (array of floats of length sample_count) */ + LADSPA_Data * const out1 = plugin_data->out1; + + /* Output 2 (array of floats of length sample_count) */ + LADSPA_Data * const out2 = plugin_data->out2; + long comb_pos = plugin_data->comb_pos; + LADSPA_Data * comb_tbl = plugin_data->comb_tbl; + float last_offset = plugin_data->last_offset; + long sample_rate = plugin_data->sample_rate; + +#line 43 "comb_splitter_1411.xml" + float offset; + int data_pos; + unsigned long pos; + float xf, xf_step, d_pos, fr, interp, in; + + offset = sample_rate / freq; + offset = f_clamp(offset, 0, COMB_SIZE - 1); + xf_step = 1.0f / (float)sample_count; + xf = 0.0f; + + for (pos = 0; pos < sample_count; pos++) { + xf += xf_step; + d_pos = comb_pos - LIN_INTERP(xf, last_offset, offset); + data_pos = f_trunc(d_pos); + fr = d_pos - data_pos; + interp = cube_interp(fr, comb_tbl[(data_pos - 1) & COMB_MASK], comb_tbl[data_pos & COMB_MASK], comb_tbl[(data_pos + 1) & COMB_MASK], comb_tbl[(data_pos + 2) & COMB_MASK]); + in = input[pos]; + comb_tbl[comb_pos] = in; + buffer_write(out1[pos], (in + interp) * 0.5f); + buffer_write(out2[pos], (in - interp) * 0.5f); + comb_pos = (comb_pos + 1) & COMB_MASK; + } + + plugin_data->comb_pos = comb_pos; + plugin_data->last_offset = offset; +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + combSplitterDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (combSplitterDescriptor) { + combSplitterDescriptor->UniqueID = 1411; + combSplitterDescriptor->Label = "combSplitter"; + combSplitterDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + combSplitterDescriptor->Name = + D_("Comb Splitter"); + combSplitterDescriptor->Maker = + "Steve Harris "; + combSplitterDescriptor->Copyright = + "GPL"; + combSplitterDescriptor->PortCount = 4; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(4, + sizeof(LADSPA_PortDescriptor)); + combSplitterDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(4, + sizeof(LADSPA_PortRangeHint)); + combSplitterDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(4, sizeof(char*)); + combSplitterDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Band separation (Hz) */ + port_descriptors[COMBSPLITTER_FREQ] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[COMBSPLITTER_FREQ] = + D_("Band separation (Hz)"); + port_range_hints[COMBSPLITTER_FREQ].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; + port_range_hints[COMBSPLITTER_FREQ].LowerBound = 16; + port_range_hints[COMBSPLITTER_FREQ].UpperBound = 640; + + /* Parameters for Input */ + port_descriptors[COMBSPLITTER_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[COMBSPLITTER_INPUT] = + D_("Input"); + port_range_hints[COMBSPLITTER_INPUT].HintDescriptor = 0; + + /* Parameters for Output 1 */ + port_descriptors[COMBSPLITTER_OUT1] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[COMBSPLITTER_OUT1] = + D_("Output 1"); + port_range_hints[COMBSPLITTER_OUT1].HintDescriptor = 0; + + /* Parameters for Output 2 */ + port_descriptors[COMBSPLITTER_OUT2] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[COMBSPLITTER_OUT2] = + D_("Output 2"); + port_range_hints[COMBSPLITTER_OUT2].HintDescriptor = 0; + + combSplitterDescriptor->activate = activateCombSplitter; + combSplitterDescriptor->cleanup = cleanupCombSplitter; + combSplitterDescriptor->connect_port = connectPortCombSplitter; + combSplitterDescriptor->deactivate = NULL; + combSplitterDescriptor->instantiate = instantiateCombSplitter; + combSplitterDescriptor->run = runCombSplitter; + combSplitterDescriptor->run_adding = runAddingCombSplitter; + combSplitterDescriptor->set_run_adding_gain = setRunAddingGainCombSplitter; + } +} + +void _fini() { + if (combSplitterDescriptor) { + free((LADSPA_PortDescriptor *)combSplitterDescriptor->PortDescriptors); + free((char **)combSplitterDescriptor->PortNames); + free((LADSPA_PortRangeHint *)combSplitterDescriptor->PortRangeHints); + free(combSplitterDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/config.h b/plugins/LadspaEffect/swh/config.h new file mode 100644 index 000000000..e69de29bb diff --git a/plugins/LadspaEffect/swh/const_1909.c b/plugins/LadspaEffect/swh/const_1909.c new file mode 100644 index 000000000..9e91cc41b --- /dev/null +++ b/plugins/LadspaEffect/swh/const_1909.c @@ -0,0 +1,261 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + + +#define CONST_AMPLITUDE 0 +#define CONST_INPUT 1 +#define CONST_OUTPUT 2 + +static LADSPA_Descriptor *constDescriptor = NULL; + +typedef struct { + LADSPA_Data *amplitude; + LADSPA_Data *input; + LADSPA_Data *output; + float last_amp; + LADSPA_Data run_adding_gain; +} Const; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return constDescriptor; + default: + return NULL; + } +} + +static void activateConst(LADSPA_Handle instance) { + Const *plugin_data = (Const *)instance; + float last_amp = plugin_data->last_amp; +#line 18 "const_1909.xml" + last_amp = 0.0f; + plugin_data->last_amp = last_amp; + +} + +static void cleanupConst(LADSPA_Handle instance) { + free(instance); +} + +static void connectPortConst( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + Const *plugin; + + plugin = (Const *)instance; + switch (port) { + case CONST_AMPLITUDE: + plugin->amplitude = data; + break; + case CONST_INPUT: + plugin->input = data; + break; + case CONST_OUTPUT: + plugin->output = data; + break; + } +} + +static LADSPA_Handle instantiateConst( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + Const *plugin_data = (Const *)malloc(sizeof(Const)); + plugin_data->run_adding_gain = 1.0f; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runConst(LADSPA_Handle instance, unsigned long sample_count) { + Const *plugin_data = (Const *)instance; + + /* Signal amplitude (float value) */ + const LADSPA_Data amplitude = *(plugin_data->amplitude); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + float last_amp = plugin_data->last_amp; + +#line 22 "const_1909.xml" + unsigned long pos; + const float delta = (amplitude - last_amp) / (sample_count - 1); + float amp = last_amp; + + for (pos = 0; pos < sample_count; pos++) { + amp += delta; + buffer_write(output[pos], input[pos] + amp); + } + + plugin_data->last_amp = amp; +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainConst(LADSPA_Handle instance, LADSPA_Data gain) { + ((Const *)instance)->run_adding_gain = gain; +} + +static void runAddingConst(LADSPA_Handle instance, unsigned long sample_count) { + Const *plugin_data = (Const *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Signal amplitude (float value) */ + const LADSPA_Data amplitude = *(plugin_data->amplitude); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + float last_amp = plugin_data->last_amp; + +#line 22 "const_1909.xml" + unsigned long pos; + const float delta = (amplitude - last_amp) / (sample_count - 1); + float amp = last_amp; + + for (pos = 0; pos < sample_count; pos++) { + amp += delta; + buffer_write(output[pos], input[pos] + amp); + } + + plugin_data->last_amp = amp; +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + constDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (constDescriptor) { + constDescriptor->UniqueID = 1909; + constDescriptor->Label = "const"; + constDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + constDescriptor->Name = + D_("Constant Signal Generator"); + constDescriptor->Maker = + "Steve Harris "; + constDescriptor->Copyright = + "GPL"; + constDescriptor->PortCount = 3; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(3, + sizeof(LADSPA_PortDescriptor)); + constDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(3, + sizeof(LADSPA_PortRangeHint)); + constDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(3, sizeof(char*)); + constDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Signal amplitude */ + port_descriptors[CONST_AMPLITUDE] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[CONST_AMPLITUDE] = + D_("Signal amplitude"); + port_range_hints[CONST_AMPLITUDE].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[CONST_AMPLITUDE].LowerBound = -1; + port_range_hints[CONST_AMPLITUDE].UpperBound = 1.1; + + /* Parameters for Input */ + port_descriptors[CONST_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[CONST_INPUT] = + D_("Input"); + port_range_hints[CONST_INPUT].HintDescriptor = 0; + + /* Parameters for Output */ + port_descriptors[CONST_OUTPUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[CONST_OUTPUT] = + D_("Output"); + port_range_hints[CONST_OUTPUT].HintDescriptor = 0; + + constDescriptor->activate = activateConst; + constDescriptor->cleanup = cleanupConst; + constDescriptor->connect_port = connectPortConst; + constDescriptor->deactivate = NULL; + constDescriptor->instantiate = instantiateConst; + constDescriptor->run = runConst; + constDescriptor->run_adding = runAddingConst; + constDescriptor->set_run_adding_gain = setRunAddingGainConst; + } +} + +void _fini() { + if (constDescriptor) { + free((LADSPA_PortDescriptor *)constDescriptor->PortDescriptors); + free((char **)constDescriptor->PortNames); + free((LADSPA_PortRangeHint *)constDescriptor->PortRangeHints); + free(constDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/crossover_dist_1404.c b/plugins/LadspaEffect/swh/crossover_dist_1404.c new file mode 100644 index 000000000..80053a214 --- /dev/null +++ b/plugins/LadspaEffect/swh/crossover_dist_1404.c @@ -0,0 +1,287 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + +#line 10 "crossover_dist_1404.xml" + +#include "ladspa-util.h" + +#define CROSSOVERDIST_AMP 0 +#define CROSSOVERDIST_SMOOTH 1 +#define CROSSOVERDIST_INPUT 2 +#define CROSSOVERDIST_OUTPUT 3 + +static LADSPA_Descriptor *crossoverDistDescriptor = NULL; + +typedef struct { + LADSPA_Data *amp; + LADSPA_Data *smooth; + LADSPA_Data *input; + LADSPA_Data *output; + LADSPA_Data run_adding_gain; +} CrossoverDist; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return crossoverDistDescriptor; + default: + return NULL; + } +} + +static void cleanupCrossoverDist(LADSPA_Handle instance) { + free(instance); +} + +static void connectPortCrossoverDist( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + CrossoverDist *plugin; + + plugin = (CrossoverDist *)instance; + switch (port) { + case CROSSOVERDIST_AMP: + plugin->amp = data; + break; + case CROSSOVERDIST_SMOOTH: + plugin->smooth = data; + break; + case CROSSOVERDIST_INPUT: + plugin->input = data; + break; + case CROSSOVERDIST_OUTPUT: + plugin->output = data; + break; + } +} + +static LADSPA_Handle instantiateCrossoverDist( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + CrossoverDist *plugin_data = (CrossoverDist *)malloc(sizeof(CrossoverDist)); + plugin_data->run_adding_gain = 1.0f; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runCrossoverDist(LADSPA_Handle instance, unsigned long sample_count) { + CrossoverDist *plugin_data = (CrossoverDist *)instance; + + /* Crossover amplitude (float value) */ + const LADSPA_Data amp = *(plugin_data->amp); + + /* Smoothing (float value) */ + const LADSPA_Data smooth = *(plugin_data->smooth); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + +#line 21 "crossover_dist_1404.xml" + unsigned long pos; + float sig; + const float fade = fabs(amp * smooth) + 0.0001; + + for (pos = 0; pos < sample_count; pos++) { + sig = fabs(input[pos]) - amp; + + if (sig < 0.0f) { + sig *= (1.0f + sig/fade) * smooth; + } + + if (input[pos] < 0.0f) { + buffer_write(output[pos], -sig); + } else { + buffer_write(output[pos], sig); + } + } +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainCrossoverDist(LADSPA_Handle instance, LADSPA_Data gain) { + ((CrossoverDist *)instance)->run_adding_gain = gain; +} + +static void runAddingCrossoverDist(LADSPA_Handle instance, unsigned long sample_count) { + CrossoverDist *plugin_data = (CrossoverDist *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Crossover amplitude (float value) */ + const LADSPA_Data amp = *(plugin_data->amp); + + /* Smoothing (float value) */ + const LADSPA_Data smooth = *(plugin_data->smooth); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + +#line 21 "crossover_dist_1404.xml" + unsigned long pos; + float sig; + const float fade = fabs(amp * smooth) + 0.0001; + + for (pos = 0; pos < sample_count; pos++) { + sig = fabs(input[pos]) - amp; + + if (sig < 0.0f) { + sig *= (1.0f + sig/fade) * smooth; + } + + if (input[pos] < 0.0f) { + buffer_write(output[pos], -sig); + } else { + buffer_write(output[pos], sig); + } + } +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + crossoverDistDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (crossoverDistDescriptor) { + crossoverDistDescriptor->UniqueID = 1404; + crossoverDistDescriptor->Label = "crossoverDist"; + crossoverDistDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + crossoverDistDescriptor->Name = + D_("Crossover distortion"); + crossoverDistDescriptor->Maker = + "Steve Harris "; + crossoverDistDescriptor->Copyright = + "GPL"; + crossoverDistDescriptor->PortCount = 4; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(4, + sizeof(LADSPA_PortDescriptor)); + crossoverDistDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(4, + sizeof(LADSPA_PortRangeHint)); + crossoverDistDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(4, sizeof(char*)); + crossoverDistDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Crossover amplitude */ + port_descriptors[CROSSOVERDIST_AMP] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[CROSSOVERDIST_AMP] = + D_("Crossover amplitude"); + port_range_hints[CROSSOVERDIST_AMP].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MINIMUM; + port_range_hints[CROSSOVERDIST_AMP].LowerBound = 0; + port_range_hints[CROSSOVERDIST_AMP].UpperBound = 0.1; + + /* Parameters for Smoothing */ + port_descriptors[CROSSOVERDIST_SMOOTH] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[CROSSOVERDIST_SMOOTH] = + D_("Smoothing"); + port_range_hints[CROSSOVERDIST_SMOOTH].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MAXIMUM; + port_range_hints[CROSSOVERDIST_SMOOTH].LowerBound = 0; + port_range_hints[CROSSOVERDIST_SMOOTH].UpperBound = 1; + + /* Parameters for Input */ + port_descriptors[CROSSOVERDIST_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[CROSSOVERDIST_INPUT] = + D_("Input"); + port_range_hints[CROSSOVERDIST_INPUT].HintDescriptor = 0; + + /* Parameters for Output */ + port_descriptors[CROSSOVERDIST_OUTPUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[CROSSOVERDIST_OUTPUT] = + D_("Output"); + port_range_hints[CROSSOVERDIST_OUTPUT].HintDescriptor = 0; + + crossoverDistDescriptor->activate = NULL; + crossoverDistDescriptor->cleanup = cleanupCrossoverDist; + crossoverDistDescriptor->connect_port = connectPortCrossoverDist; + crossoverDistDescriptor->deactivate = NULL; + crossoverDistDescriptor->instantiate = instantiateCrossoverDist; + crossoverDistDescriptor->run = runCrossoverDist; + crossoverDistDescriptor->run_adding = runAddingCrossoverDist; + crossoverDistDescriptor->set_run_adding_gain = setRunAddingGainCrossoverDist; + } +} + +void _fini() { + if (crossoverDistDescriptor) { + free((LADSPA_PortDescriptor *)crossoverDistDescriptor->PortDescriptors); + free((char **)crossoverDistDescriptor->PortNames); + free((LADSPA_PortRangeHint *)crossoverDistDescriptor->PortRangeHints); + free(crossoverDistDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/dc_remove_1207.c b/plugins/LadspaEffect/swh/dc_remove_1207.c new file mode 100644 index 000000000..099e5daf6 --- /dev/null +++ b/plugins/LadspaEffect/swh/dc_remove_1207.c @@ -0,0 +1,246 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + + +#define DCREMOVE_INPUT 0 +#define DCREMOVE_OUTPUT 1 + +static LADSPA_Descriptor *dcRemoveDescriptor = NULL; + +typedef struct { + LADSPA_Data *input; + LADSPA_Data *output; + LADSPA_Data itm1; + LADSPA_Data otm1; + LADSPA_Data run_adding_gain; +} DcRemove; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return dcRemoveDescriptor; + default: + return NULL; + } +} + +static void activateDcRemove(LADSPA_Handle instance) { + DcRemove *plugin_data = (DcRemove *)instance; + LADSPA_Data itm1 = plugin_data->itm1; + LADSPA_Data otm1 = plugin_data->otm1; +#line 17 "dc_remove_1207.xml" + itm1 = 0.0f; + otm1 = 0.0f; + plugin_data->itm1 = itm1; + plugin_data->otm1 = otm1; + +} + +static void cleanupDcRemove(LADSPA_Handle instance) { + free(instance); +} + +static void connectPortDcRemove( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + DcRemove *plugin; + + plugin = (DcRemove *)instance; + switch (port) { + case DCREMOVE_INPUT: + plugin->input = data; + break; + case DCREMOVE_OUTPUT: + plugin->output = data; + break; + } +} + +static LADSPA_Handle instantiateDcRemove( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + DcRemove *plugin_data = (DcRemove *)malloc(sizeof(DcRemove)); + plugin_data->run_adding_gain = 1.0f; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runDcRemove(LADSPA_Handle instance, unsigned long sample_count) { + DcRemove *plugin_data = (DcRemove *)instance; + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + LADSPA_Data itm1 = plugin_data->itm1; + LADSPA_Data otm1 = plugin_data->otm1; + +#line 22 "dc_remove_1207.xml" + unsigned long pos; + + for (pos = 0; pos < sample_count; pos++) { + otm1 = 0.999f * otm1 + input[pos] - itm1; + itm1 = input[pos]; + buffer_write(output[pos], otm1); + } + + plugin_data->itm1 = itm1; + plugin_data->otm1 = otm1; +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainDcRemove(LADSPA_Handle instance, LADSPA_Data gain) { + ((DcRemove *)instance)->run_adding_gain = gain; +} + +static void runAddingDcRemove(LADSPA_Handle instance, unsigned long sample_count) { + DcRemove *plugin_data = (DcRemove *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + LADSPA_Data itm1 = plugin_data->itm1; + LADSPA_Data otm1 = plugin_data->otm1; + +#line 22 "dc_remove_1207.xml" + unsigned long pos; + + for (pos = 0; pos < sample_count; pos++) { + otm1 = 0.999f * otm1 + input[pos] - itm1; + itm1 = input[pos]; + buffer_write(output[pos], otm1); + } + + plugin_data->itm1 = itm1; + plugin_data->otm1 = otm1; +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + dcRemoveDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (dcRemoveDescriptor) { + dcRemoveDescriptor->UniqueID = 1207; + dcRemoveDescriptor->Label = "dcRemove"; + dcRemoveDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + dcRemoveDescriptor->Name = + D_("DC Offset Remover"); + dcRemoveDescriptor->Maker = + "Steve Harris "; + dcRemoveDescriptor->Copyright = + "GPL"; + dcRemoveDescriptor->PortCount = 2; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(2, + sizeof(LADSPA_PortDescriptor)); + dcRemoveDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(2, + sizeof(LADSPA_PortRangeHint)); + dcRemoveDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(2, sizeof(char*)); + dcRemoveDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Input */ + port_descriptors[DCREMOVE_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[DCREMOVE_INPUT] = + D_("Input"); + port_range_hints[DCREMOVE_INPUT].HintDescriptor = 0; + + /* Parameters for Output */ + port_descriptors[DCREMOVE_OUTPUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[DCREMOVE_OUTPUT] = + D_("Output"); + port_range_hints[DCREMOVE_OUTPUT].HintDescriptor = 0; + + dcRemoveDescriptor->activate = activateDcRemove; + dcRemoveDescriptor->cleanup = cleanupDcRemove; + dcRemoveDescriptor->connect_port = connectPortDcRemove; + dcRemoveDescriptor->deactivate = NULL; + dcRemoveDescriptor->instantiate = instantiateDcRemove; + dcRemoveDescriptor->run = runDcRemove; + dcRemoveDescriptor->run_adding = runAddingDcRemove; + dcRemoveDescriptor->set_run_adding_gain = setRunAddingGainDcRemove; + } +} + +void _fini() { + if (dcRemoveDescriptor) { + free((LADSPA_PortDescriptor *)dcRemoveDescriptor->PortDescriptors); + free((char **)dcRemoveDescriptor->PortNames); + free((LADSPA_PortRangeHint *)dcRemoveDescriptor->PortRangeHints); + free(dcRemoveDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/decay_1886.c b/plugins/LadspaEffect/swh/decay_1886.c new file mode 100644 index 000000000..29c1b8daf --- /dev/null +++ b/plugins/LadspaEffect/swh/decay_1886.c @@ -0,0 +1,336 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + + +#include "ladspa-util.h" + +#define LOG001 -6.9077552789f + +#define DECAY_IN 0 +#define DECAY_OUT 1 +#define DECAY_DECAY_TIME 2 + +static LADSPA_Descriptor *decayDescriptor = NULL; + +typedef struct { + LADSPA_Data *in; + LADSPA_Data *out; + LADSPA_Data *decay_time; + LADSPA_Data b; + char first_time; + LADSPA_Data last_decay_time; + LADSPA_Data sample_rate; + LADSPA_Data y; + LADSPA_Data run_adding_gain; +} Decay; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return decayDescriptor; + default: + return NULL; + } +} + +static void activateDecay(LADSPA_Handle instance) { + Decay *plugin_data = (Decay *)instance; + LADSPA_Data b = plugin_data->b; + char first_time = plugin_data->first_time; + LADSPA_Data last_decay_time = plugin_data->last_decay_time; + LADSPA_Data sample_rate = plugin_data->sample_rate; + LADSPA_Data y = plugin_data->y; + b = 0.f; + y = 0.f; + last_decay_time = 0.f; + first_time = 0; + plugin_data->b = b; + plugin_data->first_time = first_time; + plugin_data->last_decay_time = last_decay_time; + plugin_data->sample_rate = sample_rate; + plugin_data->y = y; + +} + +static void cleanupDecay(LADSPA_Handle instance) { + free(instance); +} + +static void connectPortDecay( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + Decay *plugin; + + plugin = (Decay *)instance; + switch (port) { + case DECAY_IN: + plugin->in = data; + break; + case DECAY_OUT: + plugin->out = data; + break; + case DECAY_DECAY_TIME: + plugin->decay_time = data; + break; + } +} + +static LADSPA_Handle instantiateDecay( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + Decay *plugin_data = (Decay *)malloc(sizeof(Decay)); + LADSPA_Data b = 0; + char first_time = 0; + LADSPA_Data last_decay_time = 0; + LADSPA_Data sample_rate = 0; + LADSPA_Data y = 0; + + sample_rate = s_rate; + + plugin_data->b = b; + plugin_data->first_time = first_time; + plugin_data->last_decay_time = last_decay_time; + plugin_data->sample_rate = sample_rate; + plugin_data->y = y; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runDecay(LADSPA_Handle instance, unsigned long sample_count) { + Decay *plugin_data = (Decay *)instance; + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const in = plugin_data->in; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const out = plugin_data->out; + + /* Decay Time (s) (float value) */ + const LADSPA_Data decay_time = *(plugin_data->decay_time); + LADSPA_Data b = plugin_data->b; + char first_time = plugin_data->first_time; + LADSPA_Data last_decay_time = plugin_data->last_decay_time; + LADSPA_Data sample_rate = plugin_data->sample_rate; + LADSPA_Data y = plugin_data->y; + + unsigned int i; + + if (first_time) { + plugin_data->last_decay_time = decay_time; + plugin_data->b = decay_time == 0.f ? 0.f : exp (LOG001 / (decay_time * sample_rate)); + plugin_data->first_time = 0; + } + + if (decay_time == last_decay_time) { + if (b == 0.f) + for (i=0; ib = decay_time == 0.f ? 0.f : exp (LOG001 / (decay_time * sample_rate)); + b_slope = (plugin_data->b - b) / sample_count; + + for (i=0; ilast_decay_time = decay_time; + } + + plugin_data->y = y; +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainDecay(LADSPA_Handle instance, LADSPA_Data gain) { + ((Decay *)instance)->run_adding_gain = gain; +} + +static void runAddingDecay(LADSPA_Handle instance, unsigned long sample_count) { + Decay *plugin_data = (Decay *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const in = plugin_data->in; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const out = plugin_data->out; + + /* Decay Time (s) (float value) */ + const LADSPA_Data decay_time = *(plugin_data->decay_time); + LADSPA_Data b = plugin_data->b; + char first_time = plugin_data->first_time; + LADSPA_Data last_decay_time = plugin_data->last_decay_time; + LADSPA_Data sample_rate = plugin_data->sample_rate; + LADSPA_Data y = plugin_data->y; + + unsigned int i; + + if (first_time) { + plugin_data->last_decay_time = decay_time; + plugin_data->b = decay_time == 0.f ? 0.f : exp (LOG001 / (decay_time * sample_rate)); + plugin_data->first_time = 0; + } + + if (decay_time == last_decay_time) { + if (b == 0.f) + for (i=0; ib = decay_time == 0.f ? 0.f : exp (LOG001 / (decay_time * sample_rate)); + b_slope = (plugin_data->b - b) / sample_count; + + for (i=0; ilast_decay_time = decay_time; + } + + plugin_data->y = y; +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + decayDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (decayDescriptor) { + decayDescriptor->UniqueID = 1886; + decayDescriptor->Label = "decay"; + decayDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + decayDescriptor->Name = + D_("Exponential signal decay"); + decayDescriptor->Maker = + "Andy Wingo "; + decayDescriptor->Copyright = + "GPL"; + decayDescriptor->PortCount = 3; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(3, + sizeof(LADSPA_PortDescriptor)); + decayDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(3, + sizeof(LADSPA_PortRangeHint)); + decayDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(3, sizeof(char*)); + decayDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Input */ + port_descriptors[DECAY_IN] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[DECAY_IN] = + D_("Input"); + port_range_hints[DECAY_IN].HintDescriptor = 0; + + /* Parameters for Output */ + port_descriptors[DECAY_OUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[DECAY_OUT] = + D_("Output"); + port_range_hints[DECAY_OUT].HintDescriptor = 0; + + /* Parameters for Decay Time (s) */ + port_descriptors[DECAY_DECAY_TIME] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[DECAY_DECAY_TIME] = + D_("Decay Time (s)"); + port_range_hints[DECAY_DECAY_TIME].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW; + port_range_hints[DECAY_DECAY_TIME].LowerBound = 0; + + decayDescriptor->activate = activateDecay; + decayDescriptor->cleanup = cleanupDecay; + decayDescriptor->connect_port = connectPortDecay; + decayDescriptor->deactivate = NULL; + decayDescriptor->instantiate = instantiateDecay; + decayDescriptor->run = runDecay; + decayDescriptor->run_adding = runAddingDecay; + decayDescriptor->set_run_adding_gain = setRunAddingGainDecay; + } +} + +void _fini() { + if (decayDescriptor) { + free((LADSPA_PortDescriptor *)decayDescriptor->PortDescriptors); + free((char **)decayDescriptor->PortNames); + free((LADSPA_PortRangeHint *)decayDescriptor->PortRangeHints); + free(decayDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/decimator_1202.c b/plugins/LadspaEffect/swh/decimator_1202.c new file mode 100644 index 000000000..bcf7a8004 --- /dev/null +++ b/plugins/LadspaEffect/swh/decimator_1202.c @@ -0,0 +1,346 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + +#line 9 "decimator_1202.xml" + +#include +#include "ladspa-util.h" + +#define DECIMATOR_BITS 0 +#define DECIMATOR_FS 1 +#define DECIMATOR_INPUT 2 +#define DECIMATOR_OUTPUT 3 + +static LADSPA_Descriptor *decimatorDescriptor = NULL; + +typedef struct { + LADSPA_Data *bits; + LADSPA_Data *fs; + LADSPA_Data *input; + LADSPA_Data *output; + float count; + LADSPA_Data last_out; + long sample_rate; + LADSPA_Data run_adding_gain; +} Decimator; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return decimatorDescriptor; + default: + return NULL; + } +} + +static void cleanupDecimator(LADSPA_Handle instance) { + free(instance); +} + +static void connectPortDecimator( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + Decimator *plugin; + + plugin = (Decimator *)instance; + switch (port) { + case DECIMATOR_BITS: + plugin->bits = data; + break; + case DECIMATOR_FS: + plugin->fs = data; + break; + case DECIMATOR_INPUT: + plugin->input = data; + break; + case DECIMATOR_OUTPUT: + plugin->output = data; + break; + } +} + +static LADSPA_Handle instantiateDecimator( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + Decimator *plugin_data = (Decimator *)malloc(sizeof(Decimator)); + float count; + LADSPA_Data last_out; + long sample_rate; + +#line 20 "decimator_1202.xml" + sample_rate = s_rate; + count = 0.0f; + last_out = 0.0f; + + plugin_data->count = count; + plugin_data->last_out = last_out; + plugin_data->sample_rate = sample_rate; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runDecimator(LADSPA_Handle instance, unsigned long sample_count) { + Decimator *plugin_data = (Decimator *)instance; + + /* Bit depth (float value) */ + const LADSPA_Data bits = *(plugin_data->bits); + + /* Sample rate (Hz) (float value) */ + const LADSPA_Data fs = *(plugin_data->fs); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + float count = plugin_data->count; + LADSPA_Data last_out = plugin_data->last_out; + long sample_rate = plugin_data->sample_rate; + +#line 26 "decimator_1202.xml" + unsigned long pos; + float step, stepr, delta, ratio; + double dummy; + + if (bits >= 31.0f || bits < 1.0f) { + step = 0.0f; + stepr = 1.0f; + } else { + step = pow(0.5f, bits - 0.999f); + stepr = 1/step; + } + + if (fs >= sample_rate) { + ratio = 1.0f; + } else { + ratio = fs/sample_rate; + } + + for (pos = 0; pos < sample_count; pos++) { + count += ratio; + + if (count >= 1.0f) { + count -= 1.0f; + delta = modf((input[pos] + (input[pos]<0?-1.0:1.0)*step*0.5) * stepr, &dummy) * step; + last_out = input[pos] - delta; + buffer_write(output[pos], last_out); + } else { + buffer_write(output[pos], last_out); + } + } + + plugin_data->last_out = last_out; + plugin_data->count = count; +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainDecimator(LADSPA_Handle instance, LADSPA_Data gain) { + ((Decimator *)instance)->run_adding_gain = gain; +} + +static void runAddingDecimator(LADSPA_Handle instance, unsigned long sample_count) { + Decimator *plugin_data = (Decimator *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Bit depth (float value) */ + const LADSPA_Data bits = *(plugin_data->bits); + + /* Sample rate (Hz) (float value) */ + const LADSPA_Data fs = *(plugin_data->fs); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + float count = plugin_data->count; + LADSPA_Data last_out = plugin_data->last_out; + long sample_rate = plugin_data->sample_rate; + +#line 26 "decimator_1202.xml" + unsigned long pos; + float step, stepr, delta, ratio; + double dummy; + + if (bits >= 31.0f || bits < 1.0f) { + step = 0.0f; + stepr = 1.0f; + } else { + step = pow(0.5f, bits - 0.999f); + stepr = 1/step; + } + + if (fs >= sample_rate) { + ratio = 1.0f; + } else { + ratio = fs/sample_rate; + } + + for (pos = 0; pos < sample_count; pos++) { + count += ratio; + + if (count >= 1.0f) { + count -= 1.0f; + delta = modf((input[pos] + (input[pos]<0?-1.0:1.0)*step*0.5) * stepr, &dummy) * step; + last_out = input[pos] - delta; + buffer_write(output[pos], last_out); + } else { + buffer_write(output[pos], last_out); + } + } + + plugin_data->last_out = last_out; + plugin_data->count = count; +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + decimatorDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (decimatorDescriptor) { + decimatorDescriptor->UniqueID = 1202; + decimatorDescriptor->Label = "decimator"; + decimatorDescriptor->Properties = + 0; + decimatorDescriptor->Name = + D_("Decimator"); + decimatorDescriptor->Maker = + "Steve Harris "; + decimatorDescriptor->Copyright = + "GPL"; + decimatorDescriptor->PortCount = 4; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(4, + sizeof(LADSPA_PortDescriptor)); + decimatorDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(4, + sizeof(LADSPA_PortRangeHint)); + decimatorDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(4, sizeof(char*)); + decimatorDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Bit depth */ + port_descriptors[DECIMATOR_BITS] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[DECIMATOR_BITS] = + D_("Bit depth"); + port_range_hints[DECIMATOR_BITS].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MAXIMUM; + port_range_hints[DECIMATOR_BITS].LowerBound = 1; + port_range_hints[DECIMATOR_BITS].UpperBound = 24; + + /* Parameters for Sample rate (Hz) */ + port_descriptors[DECIMATOR_FS] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[DECIMATOR_FS] = + D_("Sample rate (Hz)"); + port_range_hints[DECIMATOR_FS].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_SAMPLE_RATE | LADSPA_HINT_DEFAULT_MAXIMUM; + port_range_hints[DECIMATOR_FS].LowerBound = 0.001; + port_range_hints[DECIMATOR_FS].UpperBound = 1; + + /* Parameters for Input */ + port_descriptors[DECIMATOR_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[DECIMATOR_INPUT] = + D_("Input"); + port_range_hints[DECIMATOR_INPUT].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; + port_range_hints[DECIMATOR_INPUT].LowerBound = -1.0; + port_range_hints[DECIMATOR_INPUT].UpperBound = +1.0; + + /* Parameters for Output */ + port_descriptors[DECIMATOR_OUTPUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[DECIMATOR_OUTPUT] = + D_("Output"); + port_range_hints[DECIMATOR_OUTPUT].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; + port_range_hints[DECIMATOR_OUTPUT].LowerBound = -1.0; + port_range_hints[DECIMATOR_OUTPUT].UpperBound = +1.0; + + decimatorDescriptor->activate = NULL; + decimatorDescriptor->cleanup = cleanupDecimator; + decimatorDescriptor->connect_port = connectPortDecimator; + decimatorDescriptor->deactivate = NULL; + decimatorDescriptor->instantiate = instantiateDecimator; + decimatorDescriptor->run = runDecimator; + decimatorDescriptor->run_adding = runAddingDecimator; + decimatorDescriptor->set_run_adding_gain = setRunAddingGainDecimator; + } +} + +void _fini() { + if (decimatorDescriptor) { + free((LADSPA_PortDescriptor *)decimatorDescriptor->PortDescriptors); + free((char **)decimatorDescriptor->PortNames); + free((LADSPA_PortRangeHint *)decimatorDescriptor->PortRangeHints); + free(decimatorDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/declip_1195.c b/plugins/LadspaEffect/swh/declip_1195.c new file mode 100644 index 000000000..3f5d5a5df --- /dev/null +++ b/plugins/LadspaEffect/swh/declip_1195.c @@ -0,0 +1,246 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + +#line 9 "declip_1195.xml" + +#define MAX_AMP 1.0f +#define CLIP 0.8f +#define CLIP_A ((MAX_AMP - CLIP) * (MAX_AMP - CLIP)) +#define CLIP_B (MAX_AMP - 2.0f * CLIP) + +#define DECLIP_INPUT 0 +#define DECLIP_OUTPUT 1 + +static LADSPA_Descriptor *declipDescriptor = NULL; + +typedef struct { + LADSPA_Data *input; + LADSPA_Data *output; + LADSPA_Data run_adding_gain; +} Declip; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return declipDescriptor; + default: + return NULL; + } +} + +static void cleanupDeclip(LADSPA_Handle instance) { + free(instance); +} + +static void connectPortDeclip( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + Declip *plugin; + + plugin = (Declip *)instance; + switch (port) { + case DECLIP_INPUT: + plugin->input = data; + break; + case DECLIP_OUTPUT: + plugin->output = data; + break; + } +} + +static LADSPA_Handle instantiateDeclip( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + Declip *plugin_data = (Declip *)malloc(sizeof(Declip)); + plugin_data->run_adding_gain = 1.0f; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runDeclip(LADSPA_Handle instance, unsigned long sample_count) { + Declip *plugin_data = (Declip *)instance; + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + +#line 23 "declip_1195.xml" + unsigned long pos; + + for (pos = 0; pos < sample_count; pos++) { + const LADSPA_Data in = input[pos]; + + if((in < CLIP) && (in > -CLIP)) { + buffer_write(output[pos], in); + } else if (in > 0.0f) { + buffer_write(output[pos], MAX_AMP - (CLIP_A / (CLIP_B + in))); + } else { + buffer_write(output[pos], -(MAX_AMP - (CLIP_A / (CLIP_B - in)))); + } + } +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainDeclip(LADSPA_Handle instance, LADSPA_Data gain) { + ((Declip *)instance)->run_adding_gain = gain; +} + +static void runAddingDeclip(LADSPA_Handle instance, unsigned long sample_count) { + Declip *plugin_data = (Declip *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + +#line 23 "declip_1195.xml" + unsigned long pos; + + for (pos = 0; pos < sample_count; pos++) { + const LADSPA_Data in = input[pos]; + + if((in < CLIP) && (in > -CLIP)) { + buffer_write(output[pos], in); + } else if (in > 0.0f) { + buffer_write(output[pos], MAX_AMP - (CLIP_A / (CLIP_B + in))); + } else { + buffer_write(output[pos], -(MAX_AMP - (CLIP_A / (CLIP_B - in)))); + } + } +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + declipDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (declipDescriptor) { + declipDescriptor->UniqueID = 1195; + declipDescriptor->Label = "declip"; + declipDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + declipDescriptor->Name = + D_("Declipper"); + declipDescriptor->Maker = + "Steve Harris "; + declipDescriptor->Copyright = + "GPL"; + declipDescriptor->PortCount = 2; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(2, + sizeof(LADSPA_PortDescriptor)); + declipDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(2, + sizeof(LADSPA_PortRangeHint)); + declipDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(2, sizeof(char*)); + declipDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Input */ + port_descriptors[DECLIP_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[DECLIP_INPUT] = + D_("Input"); + port_range_hints[DECLIP_INPUT].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; + port_range_hints[DECLIP_INPUT].LowerBound = -1; + port_range_hints[DECLIP_INPUT].UpperBound = +1; + + /* Parameters for Output */ + port_descriptors[DECLIP_OUTPUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[DECLIP_OUTPUT] = + D_("Output"); + port_range_hints[DECLIP_OUTPUT].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; + port_range_hints[DECLIP_OUTPUT].LowerBound = -1; + port_range_hints[DECLIP_OUTPUT].UpperBound = +1; + + declipDescriptor->activate = NULL; + declipDescriptor->cleanup = cleanupDeclip; + declipDescriptor->connect_port = connectPortDeclip; + declipDescriptor->deactivate = NULL; + declipDescriptor->instantiate = instantiateDeclip; + declipDescriptor->run = runDeclip; + declipDescriptor->run_adding = runAddingDeclip; + declipDescriptor->set_run_adding_gain = setRunAddingGainDeclip; + } +} + +void _fini() { + if (declipDescriptor) { + free((LADSPA_PortDescriptor *)declipDescriptor->PortDescriptors); + free((char **)declipDescriptor->PortNames); + free((LADSPA_PortRangeHint *)declipDescriptor->PortRangeHints); + free(declipDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/delay_1898.c b/plugins/LadspaEffect/swh/delay_1898.c new file mode 100644 index 000000000..b1c7cb239 --- /dev/null +++ b/plugins/LadspaEffect/swh/delay_1898.c @@ -0,0 +1,1116 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + + +#include "ladspa-util.h" + +#define MIN(a,b) ((a) < (b) ? (a) : (b)) +#define CALC_DELAY(delaytime) \ + (f_clamp (delaytime * sample_rate, 1.f, (float)(buffer_mask + 1))) + +#define DELAY_N_IN 0 +#define DELAY_N_OUT 1 +#define DELAY_N_MAX_DELAY 2 +#define DELAY_N_DELAY_TIME 3 +#define DELAY_L_IN 0 +#define DELAY_L_OUT 1 +#define DELAY_L_MAX_DELAY 2 +#define DELAY_L_DELAY_TIME 3 +#define DELAY_C_IN 0 +#define DELAY_C_OUT 1 +#define DELAY_C_MAX_DELAY 2 +#define DELAY_C_DELAY_TIME 3 + +static LADSPA_Descriptor *delay_nDescriptor = NULL; + +typedef struct { + LADSPA_Data *in; + LADSPA_Data *out; + LADSPA_Data *max_delay; + LADSPA_Data *delay_time; + LADSPA_Data *buffer; + unsigned int buffer_mask; + LADSPA_Data delay_samples; + LADSPA_Data last_delay_time; + unsigned int sample_rate; + long write_phase; + LADSPA_Data run_adding_gain; +} Delay_n; + +static LADSPA_Descriptor *delay_lDescriptor = NULL; + +typedef struct { + LADSPA_Data *in; + LADSPA_Data *out; + LADSPA_Data *max_delay; + LADSPA_Data *delay_time; + LADSPA_Data *buffer; + unsigned int buffer_mask; + LADSPA_Data delay_samples; + LADSPA_Data last_delay_time; + unsigned int sample_rate; + long write_phase; + LADSPA_Data run_adding_gain; +} Delay_l; + +static LADSPA_Descriptor *delay_cDescriptor = NULL; + +typedef struct { + LADSPA_Data *in; + LADSPA_Data *out; + LADSPA_Data *max_delay; + LADSPA_Data *delay_time; + LADSPA_Data *buffer; + unsigned int buffer_mask; + LADSPA_Data delay_samples; + LADSPA_Data last_delay_time; + unsigned int sample_rate; + long write_phase; + LADSPA_Data run_adding_gain; +} Delay_c; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return delay_nDescriptor; + case 1: + return delay_lDescriptor; + case 2: + return delay_cDescriptor; + default: + return NULL; + } +} + +static void activateDelay_n(LADSPA_Handle instance) { + Delay_n *plugin_data = (Delay_n *)instance; + LADSPA_Data *buffer = plugin_data->buffer; + unsigned int buffer_mask = plugin_data->buffer_mask; + LADSPA_Data delay_samples = plugin_data->delay_samples; + LADSPA_Data last_delay_time = plugin_data->last_delay_time; + unsigned int sample_rate = plugin_data->sample_rate; + long write_phase = plugin_data->write_phase; + unsigned int minsize, size; + + if (plugin_data->max_delay && *plugin_data->max_delay > 0) + minsize = sample_rate * *plugin_data->max_delay; + else if (plugin_data->delay_time) + minsize = sample_rate * *plugin_data->delay_time; + else + minsize = sample_rate; /* 1 second default */ + + size = 1; + while (size < minsize) size <<= 1; + + /* calloc sets the buffer to zero. */ + buffer = calloc(size, sizeof(LADSPA_Data)); + if (buffer) + buffer_mask = size - 1; + else + buffer_mask = 0; + write_phase = 0; + plugin_data->buffer = buffer; + plugin_data->buffer_mask = buffer_mask; + plugin_data->delay_samples = delay_samples; + plugin_data->last_delay_time = last_delay_time; + plugin_data->sample_rate = sample_rate; + plugin_data->write_phase = write_phase; + +} + +static void cleanupDelay_n(LADSPA_Handle instance) { + Delay_n *plugin_data = (Delay_n *)instance; + free(plugin_data->buffer); + free(instance); +} + +static void connectPortDelay_n( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + Delay_n *plugin; + + plugin = (Delay_n *)instance; + switch (port) { + case DELAY_N_IN: + plugin->in = data; + break; + case DELAY_N_OUT: + plugin->out = data; + break; + case DELAY_N_MAX_DELAY: + plugin->max_delay = data; + break; + case DELAY_N_DELAY_TIME: + plugin->delay_time = data; + break; + } +} + +static LADSPA_Handle instantiateDelay_n( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + Delay_n *plugin_data = (Delay_n *)malloc(sizeof(Delay_n)); + LADSPA_Data *buffer = NULL; + unsigned int buffer_mask = 0; + LADSPA_Data delay_samples = 0; + LADSPA_Data last_delay_time = 0; + unsigned int sample_rate = 0; + long write_phase = 0; + + sample_rate = s_rate; + + plugin_data->buffer = buffer; + plugin_data->buffer_mask = buffer_mask; + plugin_data->delay_samples = delay_samples; + plugin_data->last_delay_time = last_delay_time; + plugin_data->sample_rate = sample_rate; + plugin_data->write_phase = write_phase; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runDelay_n(LADSPA_Handle instance, unsigned long sample_count) { + Delay_n *plugin_data = (Delay_n *)instance; + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const in = plugin_data->in; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const out = plugin_data->out; + + /* Delay Time (s) (float value) */ + const LADSPA_Data delay_time = *(plugin_data->delay_time); + LADSPA_Data * buffer = plugin_data->buffer; + unsigned int buffer_mask = plugin_data->buffer_mask; + LADSPA_Data delay_samples = plugin_data->delay_samples; + LADSPA_Data last_delay_time = plugin_data->last_delay_time; + unsigned int sample_rate = plugin_data->sample_rate; + long write_phase = plugin_data->write_phase; + + unsigned int i; + + if (write_phase == 0) { + plugin_data->last_delay_time = delay_time; + plugin_data->delay_samples = delay_samples = CALC_DELAY (delay_time); + } + + if (delay_time == last_delay_time) { + long read_phase = write_phase - (long)delay_samples; + LADSPA_Data *readptr = buffer + (read_phase & buffer_mask); + LADSPA_Data *writeptr = buffer + (write_phase & buffer_mask); + LADSPA_Data *lastptr = buffer + buffer_mask + 1; + + long remain = sample_count; + + while (remain) { + long read_space = lastptr - readptr; + long write_space = lastptr - writeptr; + long to_process = MIN (MIN (read_space, remain), write_space); + + if (to_process == 0) + return; // buffer not allocated. + + remain -= to_process; + + for (i=0; ilast_delay_time = delay_time; + plugin_data->delay_samples = delay_samples; + } + + plugin_data->write_phase = write_phase; +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainDelay_n(LADSPA_Handle instance, LADSPA_Data gain) { + ((Delay_n *)instance)->run_adding_gain = gain; +} + +static void runAddingDelay_n(LADSPA_Handle instance, unsigned long sample_count) { + Delay_n *plugin_data = (Delay_n *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const in = plugin_data->in; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const out = plugin_data->out; + + /* Delay Time (s) (float value) */ + const LADSPA_Data delay_time = *(plugin_data->delay_time); + LADSPA_Data * buffer = plugin_data->buffer; + unsigned int buffer_mask = plugin_data->buffer_mask; + LADSPA_Data delay_samples = plugin_data->delay_samples; + LADSPA_Data last_delay_time = plugin_data->last_delay_time; + unsigned int sample_rate = plugin_data->sample_rate; + long write_phase = plugin_data->write_phase; + + unsigned int i; + + if (write_phase == 0) { + plugin_data->last_delay_time = delay_time; + plugin_data->delay_samples = delay_samples = CALC_DELAY (delay_time); + } + + if (delay_time == last_delay_time) { + long read_phase = write_phase - (long)delay_samples; + LADSPA_Data *readptr = buffer + (read_phase & buffer_mask); + LADSPA_Data *writeptr = buffer + (write_phase & buffer_mask); + LADSPA_Data *lastptr = buffer + buffer_mask + 1; + + long remain = sample_count; + + while (remain) { + long read_space = lastptr - readptr; + long write_space = lastptr - writeptr; + long to_process = MIN (MIN (read_space, remain), write_space); + + if (to_process == 0) + return; // buffer not allocated. + + remain -= to_process; + + for (i=0; ilast_delay_time = delay_time; + plugin_data->delay_samples = delay_samples; + } + + plugin_data->write_phase = write_phase; +} + +static void activateDelay_l(LADSPA_Handle instance) { + Delay_l *plugin_data = (Delay_l *)instance; + LADSPA_Data *buffer = plugin_data->buffer; + unsigned int buffer_mask = plugin_data->buffer_mask; + LADSPA_Data delay_samples = plugin_data->delay_samples; + LADSPA_Data last_delay_time = plugin_data->last_delay_time; + unsigned int sample_rate = plugin_data->sample_rate; + long write_phase = plugin_data->write_phase; + unsigned int minsize, size; + + if (plugin_data->max_delay && *plugin_data->max_delay > 0) + minsize = sample_rate * *plugin_data->max_delay; + else if (plugin_data->delay_time) + minsize = sample_rate * *plugin_data->delay_time; + else + minsize = sample_rate; /* 1 second default */ + + size = 1; + while (size < minsize) size <<= 1; + + /* calloc sets the buffer to zero. */ + buffer = calloc(size, sizeof(LADSPA_Data)); + if (buffer) + buffer_mask = size - 1; + else + buffer_mask = 0; + write_phase = 0; + plugin_data->buffer = buffer; + plugin_data->buffer_mask = buffer_mask; + plugin_data->delay_samples = delay_samples; + plugin_data->last_delay_time = last_delay_time; + plugin_data->sample_rate = sample_rate; + plugin_data->write_phase = write_phase; + +} + +static void cleanupDelay_l(LADSPA_Handle instance) { + Delay_l *plugin_data = (Delay_l *)instance; + free(plugin_data->buffer); + free(instance); +} + +static void connectPortDelay_l( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + Delay_l *plugin; + + plugin = (Delay_l *)instance; + switch (port) { + case DELAY_L_IN: + plugin->in = data; + break; + case DELAY_L_OUT: + plugin->out = data; + break; + case DELAY_L_MAX_DELAY: + plugin->max_delay = data; + break; + case DELAY_L_DELAY_TIME: + plugin->delay_time = data; + break; + } +} + +static LADSPA_Handle instantiateDelay_l( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + Delay_l *plugin_data = (Delay_l *)malloc(sizeof(Delay_l)); + LADSPA_Data *buffer = NULL; + unsigned int buffer_mask = 0; + LADSPA_Data delay_samples = 0; + LADSPA_Data last_delay_time = 0; + unsigned int sample_rate = 0; + long write_phase = 0; + + sample_rate = s_rate; + + plugin_data->buffer = buffer; + plugin_data->buffer_mask = buffer_mask; + plugin_data->delay_samples = delay_samples; + plugin_data->last_delay_time = last_delay_time; + plugin_data->sample_rate = sample_rate; + plugin_data->write_phase = write_phase; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runDelay_l(LADSPA_Handle instance, unsigned long sample_count) { + Delay_l *plugin_data = (Delay_l *)instance; + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const in = plugin_data->in; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const out = plugin_data->out; + + /* Delay Time (s) (float value) */ + const LADSPA_Data delay_time = *(plugin_data->delay_time); + LADSPA_Data * buffer = plugin_data->buffer; + unsigned int buffer_mask = plugin_data->buffer_mask; + LADSPA_Data delay_samples = plugin_data->delay_samples; + LADSPA_Data last_delay_time = plugin_data->last_delay_time; + unsigned int sample_rate = plugin_data->sample_rate; + long write_phase = plugin_data->write_phase; + + unsigned int i; + + if (write_phase == 0) { + plugin_data->last_delay_time = delay_time; + plugin_data->delay_samples = delay_samples = CALC_DELAY (delay_time); + } + + if (delay_time == last_delay_time) { + long idelay_samples = (long)delay_samples; + LADSPA_Data frac = delay_samples - idelay_samples; + + for (i=0; ilast_delay_time = delay_time; + plugin_data->delay_samples = delay_samples; + } + + plugin_data->write_phase = write_phase; +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainDelay_l(LADSPA_Handle instance, LADSPA_Data gain) { + ((Delay_l *)instance)->run_adding_gain = gain; +} + +static void runAddingDelay_l(LADSPA_Handle instance, unsigned long sample_count) { + Delay_l *plugin_data = (Delay_l *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const in = plugin_data->in; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const out = plugin_data->out; + + /* Delay Time (s) (float value) */ + const LADSPA_Data delay_time = *(plugin_data->delay_time); + LADSPA_Data * buffer = plugin_data->buffer; + unsigned int buffer_mask = plugin_data->buffer_mask; + LADSPA_Data delay_samples = plugin_data->delay_samples; + LADSPA_Data last_delay_time = plugin_data->last_delay_time; + unsigned int sample_rate = plugin_data->sample_rate; + long write_phase = plugin_data->write_phase; + + unsigned int i; + + if (write_phase == 0) { + plugin_data->last_delay_time = delay_time; + plugin_data->delay_samples = delay_samples = CALC_DELAY (delay_time); + } + + if (delay_time == last_delay_time) { + long idelay_samples = (long)delay_samples; + LADSPA_Data frac = delay_samples - idelay_samples; + + for (i=0; ilast_delay_time = delay_time; + plugin_data->delay_samples = delay_samples; + } + + plugin_data->write_phase = write_phase; +} + +static void activateDelay_c(LADSPA_Handle instance) { + Delay_c *plugin_data = (Delay_c *)instance; + LADSPA_Data *buffer = plugin_data->buffer; + unsigned int buffer_mask = plugin_data->buffer_mask; + LADSPA_Data delay_samples = plugin_data->delay_samples; + LADSPA_Data last_delay_time = plugin_data->last_delay_time; + unsigned int sample_rate = plugin_data->sample_rate; + long write_phase = plugin_data->write_phase; + unsigned int minsize, size; + + if (plugin_data->max_delay && *plugin_data->max_delay > 0) + minsize = sample_rate * *plugin_data->max_delay; + else if (plugin_data->delay_time) + minsize = sample_rate * *plugin_data->delay_time; + else + minsize = sample_rate; /* 1 second default */ + + size = 1; + while (size < minsize) size <<= 1; + + /* calloc sets the buffer to zero. */ + buffer = calloc(size, sizeof(LADSPA_Data)); + if (buffer) + buffer_mask = size - 1; + else + buffer_mask = 0; + write_phase = 0; + plugin_data->buffer = buffer; + plugin_data->buffer_mask = buffer_mask; + plugin_data->delay_samples = delay_samples; + plugin_data->last_delay_time = last_delay_time; + plugin_data->sample_rate = sample_rate; + plugin_data->write_phase = write_phase; + +} + +static void cleanupDelay_c(LADSPA_Handle instance) { + Delay_c *plugin_data = (Delay_c *)instance; + free(plugin_data->buffer); + free(instance); +} + +static void connectPortDelay_c( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + Delay_c *plugin; + + plugin = (Delay_c *)instance; + switch (port) { + case DELAY_C_IN: + plugin->in = data; + break; + case DELAY_C_OUT: + plugin->out = data; + break; + case DELAY_C_MAX_DELAY: + plugin->max_delay = data; + break; + case DELAY_C_DELAY_TIME: + plugin->delay_time = data; + break; + } +} + +static LADSPA_Handle instantiateDelay_c( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + Delay_c *plugin_data = (Delay_c *)malloc(sizeof(Delay_c)); + LADSPA_Data *buffer = NULL; + unsigned int buffer_mask = 0; + LADSPA_Data delay_samples = 0; + LADSPA_Data last_delay_time = 0; + unsigned int sample_rate = 0; + long write_phase = 0; + + sample_rate = s_rate; + + plugin_data->buffer = buffer; + plugin_data->buffer_mask = buffer_mask; + plugin_data->delay_samples = delay_samples; + plugin_data->last_delay_time = last_delay_time; + plugin_data->sample_rate = sample_rate; + plugin_data->write_phase = write_phase; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runDelay_c(LADSPA_Handle instance, unsigned long sample_count) { + Delay_c *plugin_data = (Delay_c *)instance; + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const in = plugin_data->in; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const out = plugin_data->out; + + /* Delay Time (s) (float value) */ + const LADSPA_Data delay_time = *(plugin_data->delay_time); + LADSPA_Data * buffer = plugin_data->buffer; + unsigned int buffer_mask = plugin_data->buffer_mask; + LADSPA_Data delay_samples = plugin_data->delay_samples; + LADSPA_Data last_delay_time = plugin_data->last_delay_time; + unsigned int sample_rate = plugin_data->sample_rate; + long write_phase = plugin_data->write_phase; + + unsigned int i; + + if (write_phase == 0) { + plugin_data->last_delay_time = delay_time; + plugin_data->delay_samples = delay_samples = CALC_DELAY (delay_time); + } + + if (delay_time == last_delay_time) { + long idelay_samples = (long)delay_samples; + LADSPA_Data frac = delay_samples - idelay_samples; + + for (i=0; ilast_delay_time = delay_time; + plugin_data->delay_samples = delay_samples; + } + + plugin_data->write_phase = write_phase; +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainDelay_c(LADSPA_Handle instance, LADSPA_Data gain) { + ((Delay_c *)instance)->run_adding_gain = gain; +} + +static void runAddingDelay_c(LADSPA_Handle instance, unsigned long sample_count) { + Delay_c *plugin_data = (Delay_c *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const in = plugin_data->in; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const out = plugin_data->out; + + /* Delay Time (s) (float value) */ + const LADSPA_Data delay_time = *(plugin_data->delay_time); + LADSPA_Data * buffer = plugin_data->buffer; + unsigned int buffer_mask = plugin_data->buffer_mask; + LADSPA_Data delay_samples = plugin_data->delay_samples; + LADSPA_Data last_delay_time = plugin_data->last_delay_time; + unsigned int sample_rate = plugin_data->sample_rate; + long write_phase = plugin_data->write_phase; + + unsigned int i; + + if (write_phase == 0) { + plugin_data->last_delay_time = delay_time; + plugin_data->delay_samples = delay_samples = CALC_DELAY (delay_time); + } + + if (delay_time == last_delay_time) { + long idelay_samples = (long)delay_samples; + LADSPA_Data frac = delay_samples - idelay_samples; + + for (i=0; ilast_delay_time = delay_time; + plugin_data->delay_samples = delay_samples; + } + + plugin_data->write_phase = write_phase; +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + delay_nDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (delay_nDescriptor) { + delay_nDescriptor->UniqueID = 1898; + delay_nDescriptor->Label = "delay_n"; + delay_nDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + delay_nDescriptor->Name = + D_("Simple delay line, noninterpolating"); + delay_nDescriptor->Maker = + "Andy Wingo "; + delay_nDescriptor->Copyright = + "GPL"; + delay_nDescriptor->PortCount = 4; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(4, + sizeof(LADSPA_PortDescriptor)); + delay_nDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(4, + sizeof(LADSPA_PortRangeHint)); + delay_nDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(4, sizeof(char*)); + delay_nDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Input */ + port_descriptors[DELAY_N_IN] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[DELAY_N_IN] = + D_("Input"); + port_range_hints[DELAY_N_IN].HintDescriptor = 0; + + /* Parameters for Output */ + port_descriptors[DELAY_N_OUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[DELAY_N_OUT] = + D_("Output"); + port_range_hints[DELAY_N_OUT].HintDescriptor = 0; + + /* Parameters for Max Delay (s) */ + port_descriptors[DELAY_N_MAX_DELAY] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[DELAY_N_MAX_DELAY] = + D_("Max Delay (s)"); + port_range_hints[DELAY_N_MAX_DELAY].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW; + port_range_hints[DELAY_N_MAX_DELAY].LowerBound = 0; + + /* Parameters for Delay Time (s) */ + port_descriptors[DELAY_N_DELAY_TIME] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[DELAY_N_DELAY_TIME] = + D_("Delay Time (s)"); + port_range_hints[DELAY_N_DELAY_TIME].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW; + port_range_hints[DELAY_N_DELAY_TIME].LowerBound = 0; + + delay_nDescriptor->activate = activateDelay_n; + delay_nDescriptor->cleanup = cleanupDelay_n; + delay_nDescriptor->connect_port = connectPortDelay_n; + delay_nDescriptor->deactivate = NULL; + delay_nDescriptor->instantiate = instantiateDelay_n; + delay_nDescriptor->run = runDelay_n; + delay_nDescriptor->run_adding = runAddingDelay_n; + delay_nDescriptor->set_run_adding_gain = setRunAddingGainDelay_n; + } + + delay_lDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (delay_lDescriptor) { + delay_lDescriptor->UniqueID = 1899; + delay_lDescriptor->Label = "delay_l"; + delay_lDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + delay_lDescriptor->Name = + D_("Simple delay line, linear interpolation"); + delay_lDescriptor->Maker = + "Andy Wingo "; + delay_lDescriptor->Copyright = + "GPL"; + delay_lDescriptor->PortCount = 4; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(4, + sizeof(LADSPA_PortDescriptor)); + delay_lDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(4, + sizeof(LADSPA_PortRangeHint)); + delay_lDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(4, sizeof(char*)); + delay_lDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Input */ + port_descriptors[DELAY_L_IN] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[DELAY_L_IN] = + D_("Input"); + port_range_hints[DELAY_L_IN].HintDescriptor = 0; + + /* Parameters for Output */ + port_descriptors[DELAY_L_OUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[DELAY_L_OUT] = + D_("Output"); + port_range_hints[DELAY_L_OUT].HintDescriptor = 0; + + /* Parameters for Max Delay (s) */ + port_descriptors[DELAY_L_MAX_DELAY] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[DELAY_L_MAX_DELAY] = + D_("Max Delay (s)"); + port_range_hints[DELAY_L_MAX_DELAY].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW; + port_range_hints[DELAY_L_MAX_DELAY].LowerBound = 0; + + /* Parameters for Delay Time (s) */ + port_descriptors[DELAY_L_DELAY_TIME] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[DELAY_L_DELAY_TIME] = + D_("Delay Time (s)"); + port_range_hints[DELAY_L_DELAY_TIME].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW; + port_range_hints[DELAY_L_DELAY_TIME].LowerBound = 0; + + delay_lDescriptor->activate = activateDelay_l; + delay_lDescriptor->cleanup = cleanupDelay_l; + delay_lDescriptor->connect_port = connectPortDelay_l; + delay_lDescriptor->deactivate = NULL; + delay_lDescriptor->instantiate = instantiateDelay_l; + delay_lDescriptor->run = runDelay_l; + delay_lDescriptor->run_adding = runAddingDelay_l; + delay_lDescriptor->set_run_adding_gain = setRunAddingGainDelay_l; + } + + delay_cDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (delay_cDescriptor) { + delay_cDescriptor->UniqueID = 1900; + delay_cDescriptor->Label = "delay_c"; + delay_cDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + delay_cDescriptor->Name = + D_("Simple delay line, cubic spline interpolation"); + delay_cDescriptor->Maker = + "Andy Wingo "; + delay_cDescriptor->Copyright = + "GPL"; + delay_cDescriptor->PortCount = 4; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(4, + sizeof(LADSPA_PortDescriptor)); + delay_cDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(4, + sizeof(LADSPA_PortRangeHint)); + delay_cDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(4, sizeof(char*)); + delay_cDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Input */ + port_descriptors[DELAY_C_IN] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[DELAY_C_IN] = + D_("Input"); + port_range_hints[DELAY_C_IN].HintDescriptor = 0; + + /* Parameters for Output */ + port_descriptors[DELAY_C_OUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[DELAY_C_OUT] = + D_("Output"); + port_range_hints[DELAY_C_OUT].HintDescriptor = 0; + + /* Parameters for Max Delay (s) */ + port_descriptors[DELAY_C_MAX_DELAY] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[DELAY_C_MAX_DELAY] = + D_("Max Delay (s)"); + port_range_hints[DELAY_C_MAX_DELAY].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW; + port_range_hints[DELAY_C_MAX_DELAY].LowerBound = 0; + + /* Parameters for Delay Time (s) */ + port_descriptors[DELAY_C_DELAY_TIME] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[DELAY_C_DELAY_TIME] = + D_("Delay Time (s)"); + port_range_hints[DELAY_C_DELAY_TIME].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW; + port_range_hints[DELAY_C_DELAY_TIME].LowerBound = 0; + + delay_cDescriptor->activate = activateDelay_c; + delay_cDescriptor->cleanup = cleanupDelay_c; + delay_cDescriptor->connect_port = connectPortDelay_c; + delay_cDescriptor->deactivate = NULL; + delay_cDescriptor->instantiate = instantiateDelay_c; + delay_cDescriptor->run = runDelay_c; + delay_cDescriptor->run_adding = runAddingDelay_c; + delay_cDescriptor->set_run_adding_gain = setRunAddingGainDelay_c; + } +} + +void _fini() { + if (delay_nDescriptor) { + free((LADSPA_PortDescriptor *)delay_nDescriptor->PortDescriptors); + free((char **)delay_nDescriptor->PortNames); + free((LADSPA_PortRangeHint *)delay_nDescriptor->PortRangeHints); + free(delay_nDescriptor); + } + if (delay_lDescriptor) { + free((LADSPA_PortDescriptor *)delay_lDescriptor->PortDescriptors); + free((char **)delay_lDescriptor->PortNames); + free((LADSPA_PortRangeHint *)delay_lDescriptor->PortRangeHints); + free(delay_lDescriptor); + } + if (delay_cDescriptor) { + free((LADSPA_PortDescriptor *)delay_cDescriptor->PortDescriptors); + free((char **)delay_cDescriptor->PortNames); + free((LADSPA_PortRangeHint *)delay_cDescriptor->PortRangeHints); + free(delay_cDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/delayorama_1402.c b/plugins/LadspaEffect/swh/delayorama_1402.c new file mode 100644 index 000000000..3949b0643 --- /dev/null +++ b/plugins/LadspaEffect/swh/delayorama_1402.c @@ -0,0 +1,858 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + +#line 9 "delayorama_1402.xml" + +#include + +#define N_TAPS 128 + +typedef struct { + unsigned int delay; + float gain; +} tap; + +#define DELAYORAMA_SEED 0 +#define DELAYORAMA_GAIN 1 +#define DELAYORAMA_FEEDBACK_PC 2 +#define DELAYORAMA_TAP_COUNT 3 +#define DELAYORAMA_FIRST_DELAY 4 +#define DELAYORAMA_DELAY_RANGE 5 +#define DELAYORAMA_DELAY_SCALE 6 +#define DELAYORAMA_DELAY_RAND_PC 7 +#define DELAYORAMA_GAIN_SCALE 8 +#define DELAYORAMA_GAIN_RAND_PC 9 +#define DELAYORAMA_WET 10 +#define DELAYORAMA_INPUT 11 +#define DELAYORAMA_OUTPUT 12 + +static LADSPA_Descriptor *delayoramaDescriptor = NULL; + +typedef struct { + LADSPA_Data *seed; + LADSPA_Data *gain; + LADSPA_Data *feedback_pc; + LADSPA_Data *tap_count; + LADSPA_Data *first_delay; + LADSPA_Data *delay_range; + LADSPA_Data *delay_scale; + LADSPA_Data *delay_rand_pc; + LADSPA_Data *gain_scale; + LADSPA_Data *gain_rand_pc; + LADSPA_Data *wet; + LADSPA_Data *input; + LADSPA_Data *output; + unsigned int active_set; + LADSPA_Data *buffer; + unsigned long buffer_pos; + unsigned int buffer_size; + float last_a_rand; + float last_ampsc; + float last_d_rand; + float last_delaysc; + unsigned int last_ntaps; + LADSPA_Data last_out; + float last_range; + float last_seed; + float last_start; + unsigned int next_set; + unsigned int sample_rate; + tap ** taps; + LADSPA_Data run_adding_gain; +} Delayorama; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return delayoramaDescriptor; + default: + return NULL; + } +} + +static void activateDelayorama(LADSPA_Handle instance) { + Delayorama *plugin_data = (Delayorama *)instance; + unsigned int active_set = plugin_data->active_set; + LADSPA_Data *buffer = plugin_data->buffer; + unsigned long buffer_pos = plugin_data->buffer_pos; + unsigned int buffer_size = plugin_data->buffer_size; + float last_a_rand = plugin_data->last_a_rand; + float last_ampsc = plugin_data->last_ampsc; + float last_d_rand = plugin_data->last_d_rand; + float last_delaysc = plugin_data->last_delaysc; + unsigned int last_ntaps = plugin_data->last_ntaps; + LADSPA_Data last_out = plugin_data->last_out; + float last_range = plugin_data->last_range; + float last_seed = plugin_data->last_seed; + float last_start = plugin_data->last_start; + unsigned int next_set = plugin_data->next_set; + unsigned int sample_rate = plugin_data->sample_rate; + tap **taps = plugin_data->taps; +#line 52 "delayorama_1402.xml" + memset(buffer, 0, buffer_size * sizeof(LADSPA_Data)); + + last_out = 0.0f; + last_ampsc = 0.0f; + last_delaysc = 0.0f; + last_start = 0; + last_range = 0; + last_ntaps = 0; + last_seed = 0; + last_a_rand = 0; + last_d_rand = 0; + plugin_data->active_set = active_set; + plugin_data->buffer = buffer; + plugin_data->buffer_pos = buffer_pos; + plugin_data->buffer_size = buffer_size; + plugin_data->last_a_rand = last_a_rand; + plugin_data->last_ampsc = last_ampsc; + plugin_data->last_d_rand = last_d_rand; + plugin_data->last_delaysc = last_delaysc; + plugin_data->last_ntaps = last_ntaps; + plugin_data->last_out = last_out; + plugin_data->last_range = last_range; + plugin_data->last_seed = last_seed; + plugin_data->last_start = last_start; + plugin_data->next_set = next_set; + plugin_data->sample_rate = sample_rate; + plugin_data->taps = taps; + +} + +static void cleanupDelayorama(LADSPA_Handle instance) { +#line 66 "delayorama_1402.xml" + Delayorama *plugin_data = (Delayorama *)instance; + free(plugin_data->taps[0]); + free(plugin_data->taps[1]); + free(plugin_data->taps); + free(plugin_data->buffer); + free(instance); +} + +static void connectPortDelayorama( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + Delayorama *plugin; + + plugin = (Delayorama *)instance; + switch (port) { + case DELAYORAMA_SEED: + plugin->seed = data; + break; + case DELAYORAMA_GAIN: + plugin->gain = data; + break; + case DELAYORAMA_FEEDBACK_PC: + plugin->feedback_pc = data; + break; + case DELAYORAMA_TAP_COUNT: + plugin->tap_count = data; + break; + case DELAYORAMA_FIRST_DELAY: + plugin->first_delay = data; + break; + case DELAYORAMA_DELAY_RANGE: + plugin->delay_range = data; + break; + case DELAYORAMA_DELAY_SCALE: + plugin->delay_scale = data; + break; + case DELAYORAMA_DELAY_RAND_PC: + plugin->delay_rand_pc = data; + break; + case DELAYORAMA_GAIN_SCALE: + plugin->gain_scale = data; + break; + case DELAYORAMA_GAIN_RAND_PC: + plugin->gain_rand_pc = data; + break; + case DELAYORAMA_WET: + plugin->wet = data; + break; + case DELAYORAMA_INPUT: + plugin->input = data; + break; + case DELAYORAMA_OUTPUT: + plugin->output = data; + break; + } +} + +static LADSPA_Handle instantiateDelayorama( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + Delayorama *plugin_data = (Delayorama *)malloc(sizeof(Delayorama)); + unsigned int active_set; + LADSPA_Data *buffer = NULL; + unsigned long buffer_pos; + unsigned int buffer_size; + float last_a_rand; + float last_ampsc; + float last_d_rand; + float last_delaysc; + unsigned int last_ntaps; + LADSPA_Data last_out; + float last_range; + float last_seed; + float last_start; + unsigned int next_set; + unsigned int sample_rate; + tap **taps = NULL; + +#line 25 "delayorama_1402.xml" + sample_rate = s_rate; + + buffer_pos = 0; + + buffer_size = 6.0f * sample_rate; + + taps = malloc(2 * sizeof(tap *)); + taps[0] = calloc(N_TAPS, sizeof(tap)); + taps[1] = calloc(N_TAPS, sizeof(tap)); + active_set = 0; + next_set = 1; + + buffer = calloc(buffer_size, sizeof(LADSPA_Data)); + + last_out = 0.0f; + + last_ampsc = 0.0f; + last_delaysc = 0.0f; + last_start = 0; + last_range = 0; + last_ntaps = 0; + last_seed = 0; + last_a_rand = 0; + last_d_rand = 0; + + plugin_data->active_set = active_set; + plugin_data->buffer = buffer; + plugin_data->buffer_pos = buffer_pos; + plugin_data->buffer_size = buffer_size; + plugin_data->last_a_rand = last_a_rand; + plugin_data->last_ampsc = last_ampsc; + plugin_data->last_d_rand = last_d_rand; + plugin_data->last_delaysc = last_delaysc; + plugin_data->last_ntaps = last_ntaps; + plugin_data->last_out = last_out; + plugin_data->last_range = last_range; + plugin_data->last_seed = last_seed; + plugin_data->last_start = last_start; + plugin_data->next_set = next_set; + plugin_data->sample_rate = sample_rate; + plugin_data->taps = taps; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runDelayorama(LADSPA_Handle instance, unsigned long sample_count) { + Delayorama *plugin_data = (Delayorama *)instance; + + /* Random seed (float value) */ + const LADSPA_Data seed = *(plugin_data->seed); + + /* Input gain (dB) (float value) */ + const LADSPA_Data gain = *(plugin_data->gain); + + /* Feedback (%) (float value) */ + const LADSPA_Data feedback_pc = *(plugin_data->feedback_pc); + + /* Number of taps (float value) */ + const LADSPA_Data tap_count = *(plugin_data->tap_count); + + /* First delay (s) (float value) */ + const LADSPA_Data first_delay = *(plugin_data->first_delay); + + /* Delay range (s) (float value) */ + const LADSPA_Data delay_range = *(plugin_data->delay_range); + + /* Delay change (float value) */ + const LADSPA_Data delay_scale = *(plugin_data->delay_scale); + + /* Delay random (%) (float value) */ + const LADSPA_Data delay_rand_pc = *(plugin_data->delay_rand_pc); + + /* Amplitude change (float value) */ + const LADSPA_Data gain_scale = *(plugin_data->gain_scale); + + /* Amplitude random (%) (float value) */ + const LADSPA_Data gain_rand_pc = *(plugin_data->gain_rand_pc); + + /* Dry/wet mix (float value) */ + const LADSPA_Data wet = *(plugin_data->wet); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + unsigned int active_set = plugin_data->active_set; + LADSPA_Data * buffer = plugin_data->buffer; + unsigned long buffer_pos = plugin_data->buffer_pos; + unsigned int buffer_size = plugin_data->buffer_size; + float last_a_rand = plugin_data->last_a_rand; + float last_ampsc = plugin_data->last_ampsc; + float last_d_rand = plugin_data->last_d_rand; + float last_delaysc = plugin_data->last_delaysc; + unsigned int last_ntaps = plugin_data->last_ntaps; + LADSPA_Data last_out = plugin_data->last_out; + float last_range = plugin_data->last_range; + float last_seed = plugin_data->last_seed; + float last_start = plugin_data->last_start; + unsigned int next_set = plugin_data->next_set; + unsigned int sample_rate = plugin_data->sample_rate; + tap ** taps = plugin_data->taps; + +#line 73 "delayorama_1402.xml" + unsigned long pos; + float coef = DB_CO(gain); + unsigned int i; + unsigned int recalc = 0; + unsigned int ntaps = LIMIT(f_round(tap_count), 2, N_TAPS); + float range = f_clamp(delay_range * sample_rate, 0.0f, + (float)(buffer_size-1)); + LADSPA_Data out; + float xfade = 0.0f; + + const float feedback = feedback_pc * 0.01f; + const float gain_rand = gain_rand_pc * 0.01f; + const float delay_rand = delay_rand_pc * 0.01f; + + + if (ntaps != last_ntaps) { + recalc = 1; + plugin_data->last_ntaps = ntaps; + } + if (first_delay != last_start) { + recalc = 1; + plugin_data->last_start = first_delay; + } + if (range != last_range) { + recalc = 1; + plugin_data->last_range = range; + } + if (delay_scale != last_delaysc) { + recalc = 1; + plugin_data->last_delaysc = delay_scale; + } + if (gain_scale != last_ampsc) { + recalc = 1; + plugin_data->last_ampsc = gain_scale; + } + if (seed != last_seed) { + recalc = 1; + plugin_data->last_seed = seed; + } + if (gain_rand != last_a_rand) { + recalc = 1; + plugin_data->last_a_rand = gain_rand; + } + if (delay_rand != last_d_rand) { + recalc = 1; + plugin_data->last_d_rand = delay_rand; + } + + if (recalc) { + float delay_base = first_delay * sample_rate; + float delay_fix; + float gain, delay, delay_sum; + float d_rand, g_rand; + + srand(f_round(seed)); + if (delay_base + range > buffer_size-1) { + delay_base = buffer_size - 1 - range; + } + + if (gain_scale <= 1.0f) { + gain = 1.0f; + } else { + gain = 1.0f / pow(gain_scale, ntaps-1); + } + + if (delay_scale == 1.0f) { + delay_fix = range / (ntaps - 1); + } else { + delay_fix = range * (delay_scale - 1.0f) / (pow(delay_scale, ntaps - 1) - 1.0f); + } + delay = 1.0f; + delay_sum = 0.0f; + + for (i=0; i= buffer_size) { + buffer_pos = 0; + } + } + + if (recalc) { + plugin_data->active_set = next_set; + plugin_data->next_set = active_set; + } + + plugin_data->buffer_pos = buffer_pos; + plugin_data->last_out = out; +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainDelayorama(LADSPA_Handle instance, LADSPA_Data gain) { + ((Delayorama *)instance)->run_adding_gain = gain; +} + +static void runAddingDelayorama(LADSPA_Handle instance, unsigned long sample_count) { + Delayorama *plugin_data = (Delayorama *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Random seed (float value) */ + const LADSPA_Data seed = *(plugin_data->seed); + + /* Input gain (dB) (float value) */ + const LADSPA_Data gain = *(plugin_data->gain); + + /* Feedback (%) (float value) */ + const LADSPA_Data feedback_pc = *(plugin_data->feedback_pc); + + /* Number of taps (float value) */ + const LADSPA_Data tap_count = *(plugin_data->tap_count); + + /* First delay (s) (float value) */ + const LADSPA_Data first_delay = *(plugin_data->first_delay); + + /* Delay range (s) (float value) */ + const LADSPA_Data delay_range = *(plugin_data->delay_range); + + /* Delay change (float value) */ + const LADSPA_Data delay_scale = *(plugin_data->delay_scale); + + /* Delay random (%) (float value) */ + const LADSPA_Data delay_rand_pc = *(plugin_data->delay_rand_pc); + + /* Amplitude change (float value) */ + const LADSPA_Data gain_scale = *(plugin_data->gain_scale); + + /* Amplitude random (%) (float value) */ + const LADSPA_Data gain_rand_pc = *(plugin_data->gain_rand_pc); + + /* Dry/wet mix (float value) */ + const LADSPA_Data wet = *(plugin_data->wet); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + unsigned int active_set = plugin_data->active_set; + LADSPA_Data * buffer = plugin_data->buffer; + unsigned long buffer_pos = plugin_data->buffer_pos; + unsigned int buffer_size = plugin_data->buffer_size; + float last_a_rand = plugin_data->last_a_rand; + float last_ampsc = plugin_data->last_ampsc; + float last_d_rand = plugin_data->last_d_rand; + float last_delaysc = plugin_data->last_delaysc; + unsigned int last_ntaps = plugin_data->last_ntaps; + LADSPA_Data last_out = plugin_data->last_out; + float last_range = plugin_data->last_range; + float last_seed = plugin_data->last_seed; + float last_start = plugin_data->last_start; + unsigned int next_set = plugin_data->next_set; + unsigned int sample_rate = plugin_data->sample_rate; + tap ** taps = plugin_data->taps; + +#line 73 "delayorama_1402.xml" + unsigned long pos; + float coef = DB_CO(gain); + unsigned int i; + unsigned int recalc = 0; + unsigned int ntaps = LIMIT(f_round(tap_count), 2, N_TAPS); + float range = f_clamp(delay_range * sample_rate, 0.0f, + (float)(buffer_size-1)); + LADSPA_Data out; + float xfade = 0.0f; + + const float feedback = feedback_pc * 0.01f; + const float gain_rand = gain_rand_pc * 0.01f; + const float delay_rand = delay_rand_pc * 0.01f; + + + if (ntaps != last_ntaps) { + recalc = 1; + plugin_data->last_ntaps = ntaps; + } + if (first_delay != last_start) { + recalc = 1; + plugin_data->last_start = first_delay; + } + if (range != last_range) { + recalc = 1; + plugin_data->last_range = range; + } + if (delay_scale != last_delaysc) { + recalc = 1; + plugin_data->last_delaysc = delay_scale; + } + if (gain_scale != last_ampsc) { + recalc = 1; + plugin_data->last_ampsc = gain_scale; + } + if (seed != last_seed) { + recalc = 1; + plugin_data->last_seed = seed; + } + if (gain_rand != last_a_rand) { + recalc = 1; + plugin_data->last_a_rand = gain_rand; + } + if (delay_rand != last_d_rand) { + recalc = 1; + plugin_data->last_d_rand = delay_rand; + } + + if (recalc) { + float delay_base = first_delay * sample_rate; + float delay_fix; + float gain, delay, delay_sum; + float d_rand, g_rand; + + srand(f_round(seed)); + if (delay_base + range > buffer_size-1) { + delay_base = buffer_size - 1 - range; + } + + if (gain_scale <= 1.0f) { + gain = 1.0f; + } else { + gain = 1.0f / pow(gain_scale, ntaps-1); + } + + if (delay_scale == 1.0f) { + delay_fix = range / (ntaps - 1); + } else { + delay_fix = range * (delay_scale - 1.0f) / (pow(delay_scale, ntaps - 1) - 1.0f); + } + delay = 1.0f; + delay_sum = 0.0f; + + for (i=0; i= buffer_size) { + buffer_pos = 0; + } + } + + if (recalc) { + plugin_data->active_set = next_set; + plugin_data->next_set = active_set; + } + + plugin_data->buffer_pos = buffer_pos; + plugin_data->last_out = out; +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + delayoramaDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (delayoramaDescriptor) { + delayoramaDescriptor->UniqueID = 1402; + delayoramaDescriptor->Label = "delayorama"; + delayoramaDescriptor->Properties = + 0; + delayoramaDescriptor->Name = + D_("Delayorama"); + delayoramaDescriptor->Maker = + "Steve Harris "; + delayoramaDescriptor->Copyright = + "GPL"; + delayoramaDescriptor->PortCount = 13; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(13, + sizeof(LADSPA_PortDescriptor)); + delayoramaDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(13, + sizeof(LADSPA_PortRangeHint)); + delayoramaDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(13, sizeof(char*)); + delayoramaDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Random seed */ + port_descriptors[DELAYORAMA_SEED] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[DELAYORAMA_SEED] = + D_("Random seed"); + port_range_hints[DELAYORAMA_SEED].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_INTEGER | LADSPA_HINT_DEFAULT_0; + port_range_hints[DELAYORAMA_SEED].LowerBound = 0; + port_range_hints[DELAYORAMA_SEED].UpperBound = 1000; + + /* Parameters for Input gain (dB) */ + port_descriptors[DELAYORAMA_GAIN] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[DELAYORAMA_GAIN] = + D_("Input gain (dB)"); + port_range_hints[DELAYORAMA_GAIN].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[DELAYORAMA_GAIN].LowerBound = -96; + port_range_hints[DELAYORAMA_GAIN].UpperBound = +24; + + /* Parameters for Feedback (%) */ + port_descriptors[DELAYORAMA_FEEDBACK_PC] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[DELAYORAMA_FEEDBACK_PC] = + D_("Feedback (%)"); + port_range_hints[DELAYORAMA_FEEDBACK_PC].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[DELAYORAMA_FEEDBACK_PC].LowerBound = 0; + port_range_hints[DELAYORAMA_FEEDBACK_PC].UpperBound = 100; + + /* Parameters for Number of taps */ + port_descriptors[DELAYORAMA_TAP_COUNT] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[DELAYORAMA_TAP_COUNT] = + D_("Number of taps"); + port_range_hints[DELAYORAMA_TAP_COUNT].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_INTEGER | LADSPA_HINT_DEFAULT_MINIMUM; + port_range_hints[DELAYORAMA_TAP_COUNT].LowerBound = 2; + port_range_hints[DELAYORAMA_TAP_COUNT].UpperBound = N_TAPS; + + /* Parameters for First delay (s) */ + port_descriptors[DELAYORAMA_FIRST_DELAY] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[DELAYORAMA_FIRST_DELAY] = + D_("First delay (s)"); + port_range_hints[DELAYORAMA_FIRST_DELAY].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[DELAYORAMA_FIRST_DELAY].LowerBound = 0; + port_range_hints[DELAYORAMA_FIRST_DELAY].UpperBound = 5; + + /* Parameters for Delay range (s) */ + port_descriptors[DELAYORAMA_DELAY_RANGE] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[DELAYORAMA_DELAY_RANGE] = + D_("Delay range (s)"); + port_range_hints[DELAYORAMA_DELAY_RANGE].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MAXIMUM; + port_range_hints[DELAYORAMA_DELAY_RANGE].LowerBound = 0.0001; + port_range_hints[DELAYORAMA_DELAY_RANGE].UpperBound = 6; + + /* Parameters for Delay change */ + port_descriptors[DELAYORAMA_DELAY_SCALE] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[DELAYORAMA_DELAY_SCALE] = + D_("Delay change"); + port_range_hints[DELAYORAMA_DELAY_SCALE].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1; + port_range_hints[DELAYORAMA_DELAY_SCALE].LowerBound = 0.2; + port_range_hints[DELAYORAMA_DELAY_SCALE].UpperBound = 5; + + /* Parameters for Delay random (%) */ + port_descriptors[DELAYORAMA_DELAY_RAND_PC] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[DELAYORAMA_DELAY_RAND_PC] = + D_("Delay random (%)"); + port_range_hints[DELAYORAMA_DELAY_RAND_PC].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[DELAYORAMA_DELAY_RAND_PC].LowerBound = 0; + port_range_hints[DELAYORAMA_DELAY_RAND_PC].UpperBound = 100; + + /* Parameters for Amplitude change */ + port_descriptors[DELAYORAMA_GAIN_SCALE] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[DELAYORAMA_GAIN_SCALE] = + D_("Amplitude change"); + port_range_hints[DELAYORAMA_GAIN_SCALE].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1; + port_range_hints[DELAYORAMA_GAIN_SCALE].LowerBound = 0.2; + port_range_hints[DELAYORAMA_GAIN_SCALE].UpperBound = 5; + + /* Parameters for Amplitude random (%) */ + port_descriptors[DELAYORAMA_GAIN_RAND_PC] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[DELAYORAMA_GAIN_RAND_PC] = + D_("Amplitude random (%)"); + port_range_hints[DELAYORAMA_GAIN_RAND_PC].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[DELAYORAMA_GAIN_RAND_PC].LowerBound = 0; + port_range_hints[DELAYORAMA_GAIN_RAND_PC].UpperBound = 100; + + /* Parameters for Dry/wet mix */ + port_descriptors[DELAYORAMA_WET] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[DELAYORAMA_WET] = + D_("Dry/wet mix"); + port_range_hints[DELAYORAMA_WET].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1; + port_range_hints[DELAYORAMA_WET].LowerBound = 0; + port_range_hints[DELAYORAMA_WET].UpperBound = 1; + + /* Parameters for Input */ + port_descriptors[DELAYORAMA_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[DELAYORAMA_INPUT] = + D_("Input"); + port_range_hints[DELAYORAMA_INPUT].HintDescriptor = 0; + + /* Parameters for Output */ + port_descriptors[DELAYORAMA_OUTPUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[DELAYORAMA_OUTPUT] = + D_("Output"); + port_range_hints[DELAYORAMA_OUTPUT].HintDescriptor = 0; + + delayoramaDescriptor->activate = activateDelayorama; + delayoramaDescriptor->cleanup = cleanupDelayorama; + delayoramaDescriptor->connect_port = connectPortDelayorama; + delayoramaDescriptor->deactivate = NULL; + delayoramaDescriptor->instantiate = instantiateDelayorama; + delayoramaDescriptor->run = runDelayorama; + delayoramaDescriptor->run_adding = runAddingDelayorama; + delayoramaDescriptor->set_run_adding_gain = setRunAddingGainDelayorama; + } +} + +void _fini() { + if (delayoramaDescriptor) { + free((LADSPA_PortDescriptor *)delayoramaDescriptor->PortDescriptors); + free((char **)delayoramaDescriptor->PortNames); + free((LADSPA_PortRangeHint *)delayoramaDescriptor->PortRangeHints); + free(delayoramaDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/diode_1185.c b/plugins/LadspaEffect/swh/diode_1185.c new file mode 100644 index 000000000..cd488f199 --- /dev/null +++ b/plugins/LadspaEffect/swh/diode_1185.c @@ -0,0 +1,275 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + + +#define DIODE_MODE 0 +#define DIODE_INPUT 1 +#define DIODE_OUTPUT 2 + +static LADSPA_Descriptor *diodeDescriptor = NULL; + +typedef struct { + LADSPA_Data *mode; + LADSPA_Data *input; + LADSPA_Data *output; + LADSPA_Data run_adding_gain; +} Diode; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return diodeDescriptor; + default: + return NULL; + } +} + +static void cleanupDiode(LADSPA_Handle instance) { + free(instance); +} + +static void connectPortDiode( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + Diode *plugin; + + plugin = (Diode *)instance; + switch (port) { + case DIODE_MODE: + plugin->mode = data; + break; + case DIODE_INPUT: + plugin->input = data; + break; + case DIODE_OUTPUT: + plugin->output = data; + break; + } +} + +static LADSPA_Handle instantiateDiode( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + Diode *plugin_data = (Diode *)malloc(sizeof(Diode)); + plugin_data->run_adding_gain = 1.0f; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runDiode(LADSPA_Handle instance, unsigned long sample_count) { + Diode *plugin_data = (Diode *)instance; + + /* Mode (0 for none, 1 for half wave, 2 for full wave) (float value) */ + const LADSPA_Data mode = *(plugin_data->mode); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + +#line 17 "diode_1185.xml" + unsigned long pos; + + if (mode >= 0.0f && mode < 1.0f) { + for (pos = 0; pos < sample_count; pos++) { + buffer_write(output[pos], ((1.0f-mode) * input[pos]) + + (mode * (input[pos] > 0.0f ? input[pos] : 0.0f))); + } + } else if (mode >= 1.0f && mode < 2.0f) { + float fac = mode - 1.0f; + for (pos = 0; pos < sample_count; pos++) { + buffer_write(output[pos], ((1.0f-fac) * (input[pos] > 0 ? + input[pos] : 0.0)) + (fac * fabs(input[pos]))); + } + } else if (mode >= 2) { + float fac = mode < 3 ? mode - 2 : 1.0; + for (pos = 0; pos < sample_count; pos++) { + buffer_write(output[pos], (1.0-fac) * fabs(input[pos])); + } + } else { + for (pos = 0; pos < sample_count; pos++) { + buffer_write(output[pos], input[pos]); + } + } +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainDiode(LADSPA_Handle instance, LADSPA_Data gain) { + ((Diode *)instance)->run_adding_gain = gain; +} + +static void runAddingDiode(LADSPA_Handle instance, unsigned long sample_count) { + Diode *plugin_data = (Diode *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Mode (0 for none, 1 for half wave, 2 for full wave) (float value) */ + const LADSPA_Data mode = *(plugin_data->mode); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + +#line 17 "diode_1185.xml" + unsigned long pos; + + if (mode >= 0.0f && mode < 1.0f) { + for (pos = 0; pos < sample_count; pos++) { + buffer_write(output[pos], ((1.0f-mode) * input[pos]) + + (mode * (input[pos] > 0.0f ? input[pos] : 0.0f))); + } + } else if (mode >= 1.0f && mode < 2.0f) { + float fac = mode - 1.0f; + for (pos = 0; pos < sample_count; pos++) { + buffer_write(output[pos], ((1.0f-fac) * (input[pos] > 0 ? + input[pos] : 0.0)) + (fac * fabs(input[pos]))); + } + } else if (mode >= 2) { + float fac = mode < 3 ? mode - 2 : 1.0; + for (pos = 0; pos < sample_count; pos++) { + buffer_write(output[pos], (1.0-fac) * fabs(input[pos])); + } + } else { + for (pos = 0; pos < sample_count; pos++) { + buffer_write(output[pos], input[pos]); + } + } +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + diodeDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (diodeDescriptor) { + diodeDescriptor->UniqueID = 1185; + diodeDescriptor->Label = "diode"; + diodeDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + diodeDescriptor->Name = + D_("Diode Processor"); + diodeDescriptor->Maker = + "Steve Harris "; + diodeDescriptor->Copyright = + "GPL"; + diodeDescriptor->PortCount = 3; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(3, + sizeof(LADSPA_PortDescriptor)); + diodeDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(3, + sizeof(LADSPA_PortRangeHint)); + diodeDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(3, sizeof(char*)); + diodeDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Mode (0 for none, 1 for half wave, 2 for full wave) */ + port_descriptors[DIODE_MODE] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[DIODE_MODE] = + D_("Mode (0 for none, 1 for half wave, 2 for full wave)"); + port_range_hints[DIODE_MODE].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[DIODE_MODE].LowerBound = 0; + port_range_hints[DIODE_MODE].UpperBound = 3; + + /* Parameters for Input */ + port_descriptors[DIODE_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[DIODE_INPUT] = + D_("Input"); + port_range_hints[DIODE_INPUT].HintDescriptor = 0; + + /* Parameters for Output */ + port_descriptors[DIODE_OUTPUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[DIODE_OUTPUT] = + D_("Output"); + port_range_hints[DIODE_OUTPUT].HintDescriptor = 0; + + diodeDescriptor->activate = NULL; + diodeDescriptor->cleanup = cleanupDiode; + diodeDescriptor->connect_port = connectPortDiode; + diodeDescriptor->deactivate = NULL; + diodeDescriptor->instantiate = instantiateDiode; + diodeDescriptor->run = runDiode; + diodeDescriptor->run_adding = runAddingDiode; + diodeDescriptor->set_run_adding_gain = setRunAddingGainDiode; + } +} + +void _fini() { + if (diodeDescriptor) { + free((LADSPA_PortDescriptor *)diodeDescriptor->PortDescriptors); + free((char **)diodeDescriptor->PortNames); + free((LADSPA_PortRangeHint *)diodeDescriptor->PortRangeHints); + free(diodeDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/divider_1186.c b/plugins/LadspaEffect/swh/divider_1186.c new file mode 100644 index 000000000..4dbd7310b --- /dev/null +++ b/plugins/LadspaEffect/swh/divider_1186.c @@ -0,0 +1,342 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + + +#define DIVIDER_DENOMINATOR 0 +#define DIVIDER_INPUT 1 +#define DIVIDER_OUTPUT 2 + +static LADSPA_Descriptor *dividerDescriptor = NULL; + +typedef struct { + LADSPA_Data *denominator; + LADSPA_Data *input; + LADSPA_Data *output; + LADSPA_Data amp; + float count; + LADSPA_Data lamp; + LADSPA_Data last; + LADSPA_Data out; + int zeroxs; + LADSPA_Data run_adding_gain; +} Divider; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return dividerDescriptor; + default: + return NULL; + } +} + +static void cleanupDivider(LADSPA_Handle instance) { + free(instance); +} + +static void connectPortDivider( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + Divider *plugin; + + plugin = (Divider *)instance; + switch (port) { + case DIVIDER_DENOMINATOR: + plugin->denominator = data; + break; + case DIVIDER_INPUT: + plugin->input = data; + break; + case DIVIDER_OUTPUT: + plugin->output = data; + break; + } +} + +static LADSPA_Handle instantiateDivider( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + Divider *plugin_data = (Divider *)malloc(sizeof(Divider)); + LADSPA_Data amp; + float count; + LADSPA_Data lamp; + LADSPA_Data last; + LADSPA_Data out; + int zeroxs; + +#line 16 "divider_1186.xml" + out = 1.0f; + amp = 0.0f; + count = 0.0f; + lamp = 0.0f; + last = 0.0f; + zeroxs = 0; + + plugin_data->amp = amp; + plugin_data->count = count; + plugin_data->lamp = lamp; + plugin_data->last = last; + plugin_data->out = out; + plugin_data->zeroxs = zeroxs; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runDivider(LADSPA_Handle instance, unsigned long sample_count) { + Divider *plugin_data = (Divider *)instance; + + /* Denominator (float value) */ + const LADSPA_Data denominator = *(plugin_data->denominator); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + LADSPA_Data amp = plugin_data->amp; + float count = plugin_data->count; + LADSPA_Data lamp = plugin_data->lamp; + LADSPA_Data last = plugin_data->last; + LADSPA_Data out = plugin_data->out; + int zeroxs = plugin_data->zeroxs; + +#line 25 "divider_1186.xml" + /* Integer version of denominator */ + int den = (int)denominator; + + unsigned long pos; + + for (pos = 0; pos < sample_count; pos++) { + count += 1.0f; + if ((input[pos] > 0.0f && last <= 0.0f) || + (input[pos] < 0.0f && last >= 0.0)) { + zeroxs++; + if (den == 1) { + out = out > 0.0f ? -1.0f : 1.0f; + lamp = amp / count; + zeroxs = 0; + count = 0; + amp = 0; + } + } + amp += fabs(input[pos]); + if (den > 1 && (zeroxs % den) == den-1) { + out = out > 0.0f ? -1.0f : 1.0f; + lamp = amp / count; + zeroxs = 0; + count = 0; + amp = 0; + } + last = input[pos]; + buffer_write(output[pos], out * lamp); + } + + plugin_data->last = last; + plugin_data->amp = amp; + plugin_data->lamp = lamp; + plugin_data->zeroxs = zeroxs; + plugin_data->count = count; + plugin_data->out = out; +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainDivider(LADSPA_Handle instance, LADSPA_Data gain) { + ((Divider *)instance)->run_adding_gain = gain; +} + +static void runAddingDivider(LADSPA_Handle instance, unsigned long sample_count) { + Divider *plugin_data = (Divider *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Denominator (float value) */ + const LADSPA_Data denominator = *(plugin_data->denominator); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + LADSPA_Data amp = plugin_data->amp; + float count = plugin_data->count; + LADSPA_Data lamp = plugin_data->lamp; + LADSPA_Data last = plugin_data->last; + LADSPA_Data out = plugin_data->out; + int zeroxs = plugin_data->zeroxs; + +#line 25 "divider_1186.xml" + /* Integer version of denominator */ + int den = (int)denominator; + + unsigned long pos; + + for (pos = 0; pos < sample_count; pos++) { + count += 1.0f; + if ((input[pos] > 0.0f && last <= 0.0f) || + (input[pos] < 0.0f && last >= 0.0)) { + zeroxs++; + if (den == 1) { + out = out > 0.0f ? -1.0f : 1.0f; + lamp = amp / count; + zeroxs = 0; + count = 0; + amp = 0; + } + } + amp += fabs(input[pos]); + if (den > 1 && (zeroxs % den) == den-1) { + out = out > 0.0f ? -1.0f : 1.0f; + lamp = amp / count; + zeroxs = 0; + count = 0; + amp = 0; + } + last = input[pos]; + buffer_write(output[pos], out * lamp); + } + + plugin_data->last = last; + plugin_data->amp = amp; + plugin_data->lamp = lamp; + plugin_data->zeroxs = zeroxs; + plugin_data->count = count; + plugin_data->out = out; +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + dividerDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (dividerDescriptor) { + dividerDescriptor->UniqueID = 1186; + dividerDescriptor->Label = "divider"; + dividerDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + dividerDescriptor->Name = + D_("Audio Divider (Suboctave Generator)"); + dividerDescriptor->Maker = + "Steve Harris "; + dividerDescriptor->Copyright = + "GPL"; + dividerDescriptor->PortCount = 3; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(3, + sizeof(LADSPA_PortDescriptor)); + dividerDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(3, + sizeof(LADSPA_PortRangeHint)); + dividerDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(3, sizeof(char*)); + dividerDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Denominator */ + port_descriptors[DIVIDER_DENOMINATOR] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[DIVIDER_DENOMINATOR] = + D_("Denominator"); + port_range_hints[DIVIDER_DENOMINATOR].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_INTEGER | LADSPA_HINT_DEFAULT_1; + port_range_hints[DIVIDER_DENOMINATOR].LowerBound = 1; + port_range_hints[DIVIDER_DENOMINATOR].UpperBound = 8; + + /* Parameters for Input */ + port_descriptors[DIVIDER_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[DIVIDER_INPUT] = + D_("Input"); + port_range_hints[DIVIDER_INPUT].HintDescriptor = 0; + + /* Parameters for Output */ + port_descriptors[DIVIDER_OUTPUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[DIVIDER_OUTPUT] = + D_("Output"); + port_range_hints[DIVIDER_OUTPUT].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; + port_range_hints[DIVIDER_OUTPUT].LowerBound = -1; + port_range_hints[DIVIDER_OUTPUT].UpperBound = +1; + + dividerDescriptor->activate = NULL; + dividerDescriptor->cleanup = cleanupDivider; + dividerDescriptor->connect_port = connectPortDivider; + dividerDescriptor->deactivate = NULL; + dividerDescriptor->instantiate = instantiateDivider; + dividerDescriptor->run = runDivider; + dividerDescriptor->run_adding = runAddingDivider; + dividerDescriptor->set_run_adding_gain = setRunAddingGainDivider; + } +} + +void _fini() { + if (dividerDescriptor) { + free((LADSPA_PortDescriptor *)dividerDescriptor->PortDescriptors); + free((char **)dividerDescriptor->PortNames); + free((LADSPA_PortRangeHint *)dividerDescriptor->PortRangeHints); + free(dividerDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/dj_eq_1901.c b/plugins/LadspaEffect/swh/dj_eq_1901.c new file mode 100644 index 000000000..2184ae1cd --- /dev/null +++ b/plugins/LadspaEffect/swh/dj_eq_1901.c @@ -0,0 +1,691 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + +#line 10 "dj_eq_1901.xml" + +#include "ladspa-util.h" +#include "util/biquad.h" + +#define BANDS 3 + +#define PEAK_BW 0.3f /* Peak EQ bandwidth (octaves) */ +#define SHELF_SLOPE 1.5f /* Shelf EQ slope (arb. units) */ + +#define DJ_EQ_MONO_LO 0 +#define DJ_EQ_MONO_MID 1 +#define DJ_EQ_MONO_HI 2 +#define DJ_EQ_MONO_INPUT 3 +#define DJ_EQ_MONO_OUTPUT 4 +#define DJ_EQ_MONO_LATENCY 5 +#define DJ_EQ_LO 0 +#define DJ_EQ_MID 1 +#define DJ_EQ_HI 2 +#define DJ_EQ_LEFT_INPUT 3 +#define DJ_EQ_RIGHT_INPUT 4 +#define DJ_EQ_LEFT_OUTPUT 5 +#define DJ_EQ_RIGHT_OUTPUT 6 +#define DJ_EQ_LATENCY 7 + +static LADSPA_Descriptor *dj_eq_monoDescriptor = NULL; + +typedef struct { + LADSPA_Data *lo; + LADSPA_Data *mid; + LADSPA_Data *hi; + LADSPA_Data *input; + LADSPA_Data *output; + LADSPA_Data *latency; + biquad * filters; + float fs; + LADSPA_Data run_adding_gain; +} Dj_eq_mono; + +static LADSPA_Descriptor *dj_eqDescriptor = NULL; + +typedef struct { + LADSPA_Data *lo; + LADSPA_Data *mid; + LADSPA_Data *hi; + LADSPA_Data *left_input; + LADSPA_Data *right_input; + LADSPA_Data *left_output; + LADSPA_Data *right_output; + LADSPA_Data *latency; + biquad * filters; + float fs; + LADSPA_Data run_adding_gain; +} Dj_eq; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return dj_eq_monoDescriptor; + case 1: + return dj_eqDescriptor; + default: + return NULL; + } +} + +static void activateDj_eq_mono(LADSPA_Handle instance) { + Dj_eq_mono *plugin_data = (Dj_eq_mono *)instance; + biquad *filters = plugin_data->filters; + float fs = plugin_data->fs; +#line 33 "dj_eq_1901.xml" + biquad_init(&filters[0]); + eq_set_params(&filters[0], 100.0f, 0.0f, PEAK_BW, fs); + biquad_init(&filters[1]); + eq_set_params(&filters[1], 1000.0f, 0.0f, PEAK_BW, fs); + biquad_init(&filters[2]); + hs_set_params(&filters[2], 10000.0f, 0.0f, SHELF_SLOPE, fs); + plugin_data->filters = filters; + plugin_data->fs = fs; + +} + +static void cleanupDj_eq_mono(LADSPA_Handle instance) { + free(instance); +} + +static void connectPortDj_eq_mono( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + Dj_eq_mono *plugin; + + plugin = (Dj_eq_mono *)instance; + switch (port) { + case DJ_EQ_MONO_LO: + plugin->lo = data; + break; + case DJ_EQ_MONO_MID: + plugin->mid = data; + break; + case DJ_EQ_MONO_HI: + plugin->hi = data; + break; + case DJ_EQ_MONO_INPUT: + plugin->input = data; + break; + case DJ_EQ_MONO_OUTPUT: + plugin->output = data; + break; + case DJ_EQ_MONO_LATENCY: + plugin->latency = data; + break; + } +} + +static LADSPA_Handle instantiateDj_eq_mono( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + Dj_eq_mono *plugin_data = (Dj_eq_mono *)malloc(sizeof(Dj_eq_mono)); + biquad *filters = NULL; + float fs; + +#line 27 "dj_eq_1901.xml" + fs = s_rate; + + filters = calloc(BANDS, sizeof(biquad)); + + plugin_data->filters = filters; + plugin_data->fs = fs; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runDj_eq_mono(LADSPA_Handle instance, unsigned long sample_count) { + Dj_eq_mono *plugin_data = (Dj_eq_mono *)instance; + + /* Lo gain (dB) (float value) */ + const LADSPA_Data lo = *(plugin_data->lo); + + /* Mid gain (dB) (float value) */ + const LADSPA_Data mid = *(plugin_data->mid); + + /* Hi gain (dB) (float value) */ + const LADSPA_Data hi = *(plugin_data->hi); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + biquad * filters = plugin_data->filters; + float fs = plugin_data->fs; + +#line 42 "dj_eq_1901.xml" + unsigned long pos; + float samp; + + eq_set_params(&filters[0], 100.0f, lo, PEAK_BW, fs); + eq_set_params(&filters[1], 1000.0f, mid, PEAK_BW, fs); + hs_set_params(&filters[2], 10000.0f, hi, SHELF_SLOPE, fs); + + for (pos = 0; pos < sample_count; pos++) { + samp = biquad_run(&filters[0], input[pos]); + samp = biquad_run(&filters[1], samp); + samp = biquad_run(&filters[2], samp); + buffer_write(output[pos], samp); + } + + *(plugin_data->latency) = 3; //XXX is this right? +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainDj_eq_mono(LADSPA_Handle instance, LADSPA_Data gain) { + ((Dj_eq_mono *)instance)->run_adding_gain = gain; +} + +static void runAddingDj_eq_mono(LADSPA_Handle instance, unsigned long sample_count) { + Dj_eq_mono *plugin_data = (Dj_eq_mono *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Lo gain (dB) (float value) */ + const LADSPA_Data lo = *(plugin_data->lo); + + /* Mid gain (dB) (float value) */ + const LADSPA_Data mid = *(plugin_data->mid); + + /* Hi gain (dB) (float value) */ + const LADSPA_Data hi = *(plugin_data->hi); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + biquad * filters = plugin_data->filters; + float fs = plugin_data->fs; + +#line 42 "dj_eq_1901.xml" + unsigned long pos; + float samp; + + eq_set_params(&filters[0], 100.0f, lo, PEAK_BW, fs); + eq_set_params(&filters[1], 1000.0f, mid, PEAK_BW, fs); + hs_set_params(&filters[2], 10000.0f, hi, SHELF_SLOPE, fs); + + for (pos = 0; pos < sample_count; pos++) { + samp = biquad_run(&filters[0], input[pos]); + samp = biquad_run(&filters[1], samp); + samp = biquad_run(&filters[2], samp); + buffer_write(output[pos], samp); + } + + *(plugin_data->latency) = 3; //XXX is this right? +} + +static void activateDj_eq(LADSPA_Handle instance) { + Dj_eq *plugin_data = (Dj_eq *)instance; + biquad *filters = plugin_data->filters; + float fs = plugin_data->fs; +#line 33 "dj_eq_1901.xml" + int i; + + for (i=0; i<2; i++) { + biquad_init(&filters[i*BANDS + 0]); + eq_set_params(&filters[i*BANDS + 0], 100.0f, 0.0f, PEAK_BW, fs); + biquad_init(&filters[i*BANDS + 1]); + eq_set_params(&filters[i*BANDS + 1], 1000.0f, 0.0f, PEAK_BW, fs); + biquad_init(&filters[i*BANDS + 2]); + hs_set_params(&filters[i*BANDS + 2], 10000.0f, 0.0f, SHELF_SLOPE, fs); + } + plugin_data->filters = filters; + plugin_data->fs = fs; + +} + +static void cleanupDj_eq(LADSPA_Handle instance) { + free(instance); +} + +static void connectPortDj_eq( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + Dj_eq *plugin; + + plugin = (Dj_eq *)instance; + switch (port) { + case DJ_EQ_LO: + plugin->lo = data; + break; + case DJ_EQ_MID: + plugin->mid = data; + break; + case DJ_EQ_HI: + plugin->hi = data; + break; + case DJ_EQ_LEFT_INPUT: + plugin->left_input = data; + break; + case DJ_EQ_RIGHT_INPUT: + plugin->right_input = data; + break; + case DJ_EQ_LEFT_OUTPUT: + plugin->left_output = data; + break; + case DJ_EQ_RIGHT_OUTPUT: + plugin->right_output = data; + break; + case DJ_EQ_LATENCY: + plugin->latency = data; + break; + } +} + +static LADSPA_Handle instantiateDj_eq( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + Dj_eq *plugin_data = (Dj_eq *)malloc(sizeof(Dj_eq)); + biquad *filters = NULL; + float fs; + +#line 27 "dj_eq_1901.xml" + fs = s_rate; + + filters = calloc(BANDS * 2, sizeof(biquad)); + + plugin_data->filters = filters; + plugin_data->fs = fs; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runDj_eq(LADSPA_Handle instance, unsigned long sample_count) { + Dj_eq *plugin_data = (Dj_eq *)instance; + + /* Lo gain (dB) (float value) */ + const LADSPA_Data lo = *(plugin_data->lo); + + /* Mid gain (dB) (float value) */ + const LADSPA_Data mid = *(plugin_data->mid); + + /* Hi gain (dB) (float value) */ + const LADSPA_Data hi = *(plugin_data->hi); + + /* Input L (array of floats of length sample_count) */ + const LADSPA_Data * const left_input = plugin_data->left_input; + + /* Input R (array of floats of length sample_count) */ + const LADSPA_Data * const right_input = plugin_data->right_input; + + /* Output L (array of floats of length sample_count) */ + LADSPA_Data * const left_output = plugin_data->left_output; + + /* Output R (array of floats of length sample_count) */ + LADSPA_Data * const right_output = plugin_data->right_output; + biquad * filters = plugin_data->filters; + float fs = plugin_data->fs; + +#line 42 "dj_eq_1901.xml" + unsigned long pos; + unsigned int i; + float samp; + + for (i=0; i<2; i++) { + eq_set_params(&filters[i*BANDS + 0], 100.0f, lo, PEAK_BW, fs); + eq_set_params(&filters[i*BANDS + 1], 1000.0f, mid, PEAK_BW, fs); + hs_set_params(&filters[i*BANDS + 2], 10000.0f, hi, SHELF_SLOPE, fs); + } + + for (pos = 0; pos < sample_count; pos++) { + samp = biquad_run(&filters[0], left_input[pos]); + samp = biquad_run(&filters[1], samp); + samp = biquad_run(&filters[2], samp); + buffer_write(left_output[pos], samp); + + samp = biquad_run(&filters[3], right_input[pos]); + samp = biquad_run(&filters[4], samp); + samp = biquad_run(&filters[5], samp); + buffer_write(right_output[pos], samp); + } + + *(plugin_data->latency) = 3; //XXX is this right? +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainDj_eq(LADSPA_Handle instance, LADSPA_Data gain) { + ((Dj_eq *)instance)->run_adding_gain = gain; +} + +static void runAddingDj_eq(LADSPA_Handle instance, unsigned long sample_count) { + Dj_eq *plugin_data = (Dj_eq *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Lo gain (dB) (float value) */ + const LADSPA_Data lo = *(plugin_data->lo); + + /* Mid gain (dB) (float value) */ + const LADSPA_Data mid = *(plugin_data->mid); + + /* Hi gain (dB) (float value) */ + const LADSPA_Data hi = *(plugin_data->hi); + + /* Input L (array of floats of length sample_count) */ + const LADSPA_Data * const left_input = plugin_data->left_input; + + /* Input R (array of floats of length sample_count) */ + const LADSPA_Data * const right_input = plugin_data->right_input; + + /* Output L (array of floats of length sample_count) */ + LADSPA_Data * const left_output = plugin_data->left_output; + + /* Output R (array of floats of length sample_count) */ + LADSPA_Data * const right_output = plugin_data->right_output; + biquad * filters = plugin_data->filters; + float fs = plugin_data->fs; + +#line 42 "dj_eq_1901.xml" + unsigned long pos; + unsigned int i; + float samp; + + for (i=0; i<2; i++) { + eq_set_params(&filters[i*BANDS + 0], 100.0f, lo, PEAK_BW, fs); + eq_set_params(&filters[i*BANDS + 1], 1000.0f, mid, PEAK_BW, fs); + hs_set_params(&filters[i*BANDS + 2], 10000.0f, hi, SHELF_SLOPE, fs); + } + + for (pos = 0; pos < sample_count; pos++) { + samp = biquad_run(&filters[0], left_input[pos]); + samp = biquad_run(&filters[1], samp); + samp = biquad_run(&filters[2], samp); + buffer_write(left_output[pos], samp); + + samp = biquad_run(&filters[3], right_input[pos]); + samp = biquad_run(&filters[4], samp); + samp = biquad_run(&filters[5], samp); + buffer_write(right_output[pos], samp); + } + + *(plugin_data->latency) = 3; //XXX is this right? +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + dj_eq_monoDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (dj_eq_monoDescriptor) { + dj_eq_monoDescriptor->UniqueID = 1907; + dj_eq_monoDescriptor->Label = "dj_eq_mono"; + dj_eq_monoDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + dj_eq_monoDescriptor->Name = + D_("DJ EQ (mono)"); + dj_eq_monoDescriptor->Maker = + "Steve Harris "; + dj_eq_monoDescriptor->Copyright = + "GPL"; + dj_eq_monoDescriptor->PortCount = 6; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(6, + sizeof(LADSPA_PortDescriptor)); + dj_eq_monoDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(6, + sizeof(LADSPA_PortRangeHint)); + dj_eq_monoDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(6, sizeof(char*)); + dj_eq_monoDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Lo gain (dB) */ + port_descriptors[DJ_EQ_MONO_LO] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[DJ_EQ_MONO_LO] = + D_("Lo gain (dB)"); + port_range_hints[DJ_EQ_MONO_LO].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[DJ_EQ_MONO_LO].LowerBound = -70; + port_range_hints[DJ_EQ_MONO_LO].UpperBound = +6; + + /* Parameters for Mid gain (dB) */ + port_descriptors[DJ_EQ_MONO_MID] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[DJ_EQ_MONO_MID] = + D_("Mid gain (dB)"); + port_range_hints[DJ_EQ_MONO_MID].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[DJ_EQ_MONO_MID].LowerBound = -70; + port_range_hints[DJ_EQ_MONO_MID].UpperBound = +6; + + /* Parameters for Hi gain (dB) */ + port_descriptors[DJ_EQ_MONO_HI] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[DJ_EQ_MONO_HI] = + D_("Hi gain (dB)"); + port_range_hints[DJ_EQ_MONO_HI].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[DJ_EQ_MONO_HI].LowerBound = -70; + port_range_hints[DJ_EQ_MONO_HI].UpperBound = +6; + + /* Parameters for Input */ + port_descriptors[DJ_EQ_MONO_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[DJ_EQ_MONO_INPUT] = + D_("Input"); + port_range_hints[DJ_EQ_MONO_INPUT].HintDescriptor = 0; + + /* Parameters for Output */ + port_descriptors[DJ_EQ_MONO_OUTPUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[DJ_EQ_MONO_OUTPUT] = + D_("Output"); + port_range_hints[DJ_EQ_MONO_OUTPUT].HintDescriptor = 0; + + /* Parameters for latency */ + port_descriptors[DJ_EQ_MONO_LATENCY] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_CONTROL; + port_names[DJ_EQ_MONO_LATENCY] = + D_("latency"); + port_range_hints[DJ_EQ_MONO_LATENCY].HintDescriptor = 0; + + dj_eq_monoDescriptor->activate = activateDj_eq_mono; + dj_eq_monoDescriptor->cleanup = cleanupDj_eq_mono; + dj_eq_monoDescriptor->connect_port = connectPortDj_eq_mono; + dj_eq_monoDescriptor->deactivate = NULL; + dj_eq_monoDescriptor->instantiate = instantiateDj_eq_mono; + dj_eq_monoDescriptor->run = runDj_eq_mono; + dj_eq_monoDescriptor->run_adding = runAddingDj_eq_mono; + dj_eq_monoDescriptor->set_run_adding_gain = setRunAddingGainDj_eq_mono; + } + + dj_eqDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (dj_eqDescriptor) { + dj_eqDescriptor->UniqueID = 1901; + dj_eqDescriptor->Label = "dj_eq"; + dj_eqDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + dj_eqDescriptor->Name = + D_("DJ EQ"); + dj_eqDescriptor->Maker = + "Steve Harris "; + dj_eqDescriptor->Copyright = + "GPL"; + dj_eqDescriptor->PortCount = 8; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(8, + sizeof(LADSPA_PortDescriptor)); + dj_eqDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(8, + sizeof(LADSPA_PortRangeHint)); + dj_eqDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(8, sizeof(char*)); + dj_eqDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Lo gain (dB) */ + port_descriptors[DJ_EQ_LO] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[DJ_EQ_LO] = + D_("Lo gain (dB)"); + port_range_hints[DJ_EQ_LO].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[DJ_EQ_LO].LowerBound = -70; + port_range_hints[DJ_EQ_LO].UpperBound = +6; + + /* Parameters for Mid gain (dB) */ + port_descriptors[DJ_EQ_MID] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[DJ_EQ_MID] = + D_("Mid gain (dB)"); + port_range_hints[DJ_EQ_MID].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[DJ_EQ_MID].LowerBound = -70; + port_range_hints[DJ_EQ_MID].UpperBound = +6; + + /* Parameters for Hi gain (dB) */ + port_descriptors[DJ_EQ_HI] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[DJ_EQ_HI] = + D_("Hi gain (dB)"); + port_range_hints[DJ_EQ_HI].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[DJ_EQ_HI].LowerBound = -70; + port_range_hints[DJ_EQ_HI].UpperBound = +6; + + /* Parameters for Input L */ + port_descriptors[DJ_EQ_LEFT_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[DJ_EQ_LEFT_INPUT] = + D_("Input L"); + port_range_hints[DJ_EQ_LEFT_INPUT].HintDescriptor = 0; + + /* Parameters for Input R */ + port_descriptors[DJ_EQ_RIGHT_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[DJ_EQ_RIGHT_INPUT] = + D_("Input R"); + port_range_hints[DJ_EQ_RIGHT_INPUT].HintDescriptor = 0; + + /* Parameters for Output L */ + port_descriptors[DJ_EQ_LEFT_OUTPUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[DJ_EQ_LEFT_OUTPUT] = + D_("Output L"); + port_range_hints[DJ_EQ_LEFT_OUTPUT].HintDescriptor = 0; + + /* Parameters for Output R */ + port_descriptors[DJ_EQ_RIGHT_OUTPUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[DJ_EQ_RIGHT_OUTPUT] = + D_("Output R"); + port_range_hints[DJ_EQ_RIGHT_OUTPUT].HintDescriptor = 0; + + /* Parameters for latency */ + port_descriptors[DJ_EQ_LATENCY] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_CONTROL; + port_names[DJ_EQ_LATENCY] = + D_("latency"); + port_range_hints[DJ_EQ_LATENCY].HintDescriptor = 0; + + dj_eqDescriptor->activate = activateDj_eq; + dj_eqDescriptor->cleanup = cleanupDj_eq; + dj_eqDescriptor->connect_port = connectPortDj_eq; + dj_eqDescriptor->deactivate = NULL; + dj_eqDescriptor->instantiate = instantiateDj_eq; + dj_eqDescriptor->run = runDj_eq; + dj_eqDescriptor->run_adding = runAddingDj_eq; + dj_eqDescriptor->set_run_adding_gain = setRunAddingGainDj_eq; + } +} + +void _fini() { + if (dj_eq_monoDescriptor) { + free((LADSPA_PortDescriptor *)dj_eq_monoDescriptor->PortDescriptors); + free((char **)dj_eq_monoDescriptor->PortNames); + free((LADSPA_PortRangeHint *)dj_eq_monoDescriptor->PortRangeHints); + free(dj_eq_monoDescriptor); + } + if (dj_eqDescriptor) { + free((LADSPA_PortDescriptor *)dj_eqDescriptor->PortDescriptors); + free((char **)dj_eqDescriptor->PortNames); + free((LADSPA_PortRangeHint *)dj_eqDescriptor->PortRangeHints); + free(dj_eqDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/dj_flanger_1438.c b/plugins/LadspaEffect/swh/dj_flanger_1438.c new file mode 100644 index 000000000..c15564b6f --- /dev/null +++ b/plugins/LadspaEffect/swh/dj_flanger_1438.c @@ -0,0 +1,483 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + +#line 10 "dj_flanger_1438.xml" + +#include +#include "ladspa-util.h" + +#define DELAY_TIME 0.005f + +#define DJFLANGER_SYNC 0 +#define DJFLANGER_PERIOD 1 +#define DJFLANGER_DEPTH 2 +#define DJFLANGER_FEEDBACK 3 +#define DJFLANGER_INPUT 4 +#define DJFLANGER_OUTPUT 5 + +static LADSPA_Descriptor *djFlangerDescriptor = NULL; + +typedef struct { + LADSPA_Data *sync; + LADSPA_Data *period; + LADSPA_Data *depth; + LADSPA_Data *feedback; + LADSPA_Data *input; + LADSPA_Data *output; + LADSPA_Data *buffer; + unsigned int buffer_mask; + unsigned int buffer_pos; + float fs; + unsigned int last_sync; + float x; + float y; + LADSPA_Data run_adding_gain; +} DjFlanger; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return djFlangerDescriptor; + default: + return NULL; + } +} + +static void activateDjFlanger(LADSPA_Handle instance) { + DjFlanger *plugin_data = (DjFlanger *)instance; + LADSPA_Data *buffer = plugin_data->buffer; + unsigned int buffer_mask = plugin_data->buffer_mask; + unsigned int buffer_pos = plugin_data->buffer_pos; + float fs = plugin_data->fs; + unsigned int last_sync = plugin_data->last_sync; + float x = plugin_data->x; + float y = plugin_data->y; +#line 38 "dj_flanger_1438.xml" + memset(buffer, 0, (buffer_mask + 1) * sizeof(LADSPA_Data)); + last_sync = 0; + plugin_data->buffer = buffer; + plugin_data->buffer_mask = buffer_mask; + plugin_data->buffer_pos = buffer_pos; + plugin_data->fs = fs; + plugin_data->last_sync = last_sync; + plugin_data->x = x; + plugin_data->y = y; + +} + +static void cleanupDjFlanger(LADSPA_Handle instance) { +#line 103 "dj_flanger_1438.xml" + DjFlanger *plugin_data = (DjFlanger *)instance; + free(plugin_data->buffer); + free(instance); +} + +static void connectPortDjFlanger( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + DjFlanger *plugin; + + plugin = (DjFlanger *)instance; + switch (port) { + case DJFLANGER_SYNC: + plugin->sync = data; + break; + case DJFLANGER_PERIOD: + plugin->period = data; + break; + case DJFLANGER_DEPTH: + plugin->depth = data; + break; + case DJFLANGER_FEEDBACK: + plugin->feedback = data; + break; + case DJFLANGER_INPUT: + plugin->input = data; + break; + case DJFLANGER_OUTPUT: + plugin->output = data; + break; + } +} + +static LADSPA_Handle instantiateDjFlanger( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + DjFlanger *plugin_data = (DjFlanger *)malloc(sizeof(DjFlanger)); + LADSPA_Data *buffer = NULL; + unsigned int buffer_mask; + unsigned int buffer_pos; + float fs; + unsigned int last_sync; + float x; + float y; + +#line 23 "dj_flanger_1438.xml" + int buffer_size = 2048; + + fs = s_rate; + while (buffer_size < fs * DELAY_TIME + 3.0f) { + buffer_size *= 2; + } + buffer = calloc(buffer_size, sizeof(LADSPA_Data)); + buffer_mask = buffer_size - 1; + buffer_pos = 0; + x = 0.5f; + y = 0.0f; + last_sync = 0; + + plugin_data->buffer = buffer; + plugin_data->buffer_mask = buffer_mask; + plugin_data->buffer_pos = buffer_pos; + plugin_data->fs = fs; + plugin_data->last_sync = last_sync; + plugin_data->x = x; + plugin_data->y = y; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runDjFlanger(LADSPA_Handle instance, unsigned long sample_count) { + DjFlanger *plugin_data = (DjFlanger *)instance; + + /* LFO sync (float value) */ + const LADSPA_Data sync = *(plugin_data->sync); + + /* LFO period (s) (float value) */ + const LADSPA_Data period = *(plugin_data->period); + + /* LFO depth (ms) (float value) */ + const LADSPA_Data depth = *(plugin_data->depth); + + /* Feedback (%) (float value) */ + const LADSPA_Data feedback = *(plugin_data->feedback); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + LADSPA_Data * buffer = plugin_data->buffer; + unsigned int buffer_mask = plugin_data->buffer_mask; + unsigned int buffer_pos = plugin_data->buffer_pos; + float fs = plugin_data->fs; + unsigned int last_sync = plugin_data->last_sync; + float x = plugin_data->x; + float y = plugin_data->y; + +#line 43 "dj_flanger_1438.xml" + unsigned long pos; + const float omega = 6.2831852f / (period * fs); + const float dr = 0.001f * fs * depth; + float fb; + float d; + float dout, out; + unsigned int dof; + + if (feedback > 99.0f) { + fb = 0.99f; + } else if (feedback < -99.0f) { + fb = -0.99f; + } else { + fb = feedback * 0.01f; + } + + if (sync > 0) { + if (!last_sync) { + x = 0.5f; + y = 0.0f; + } + plugin_data->last_sync = 1; + } else { + plugin_data->last_sync = 0; + } + + for (pos = 0; pos < sample_count; pos++) { + /* Write input into delay line */ + buffer[buffer_pos] = input[pos]; + + /* Calcuate delay */ + d = (x + 0.5f) * dr; + + dof = f_round(d); + //dout = buffer[(buffer_pos - f_round(d)) & buffer_mask]; + dout = cube_interp(d - floor(d), + buffer[(buffer_pos - dof - 3) & buffer_mask], + buffer[(buffer_pos - dof - 2) & buffer_mask], + buffer[(buffer_pos - dof - 1) & buffer_mask], + buffer[(buffer_pos - dof) & buffer_mask]); + + /* Write output */ + out = (buffer[buffer_pos] + dout) * 0.5f; + buffer[buffer_pos] = input[pos] + out * fb; + buffer_write(output[pos], out); + + /* Roll ringbuffer */ + buffer_pos = (buffer_pos + 1) & buffer_mask; + + /* Run LFO */ + x -= omega * y; + y += omega * x; + } + + plugin_data->x = x; + plugin_data->y = y; + plugin_data->buffer_pos = buffer_pos; +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainDjFlanger(LADSPA_Handle instance, LADSPA_Data gain) { + ((DjFlanger *)instance)->run_adding_gain = gain; +} + +static void runAddingDjFlanger(LADSPA_Handle instance, unsigned long sample_count) { + DjFlanger *plugin_data = (DjFlanger *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* LFO sync (float value) */ + const LADSPA_Data sync = *(plugin_data->sync); + + /* LFO period (s) (float value) */ + const LADSPA_Data period = *(plugin_data->period); + + /* LFO depth (ms) (float value) */ + const LADSPA_Data depth = *(plugin_data->depth); + + /* Feedback (%) (float value) */ + const LADSPA_Data feedback = *(plugin_data->feedback); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + LADSPA_Data * buffer = plugin_data->buffer; + unsigned int buffer_mask = plugin_data->buffer_mask; + unsigned int buffer_pos = plugin_data->buffer_pos; + float fs = plugin_data->fs; + unsigned int last_sync = plugin_data->last_sync; + float x = plugin_data->x; + float y = plugin_data->y; + +#line 43 "dj_flanger_1438.xml" + unsigned long pos; + const float omega = 6.2831852f / (period * fs); + const float dr = 0.001f * fs * depth; + float fb; + float d; + float dout, out; + unsigned int dof; + + if (feedback > 99.0f) { + fb = 0.99f; + } else if (feedback < -99.0f) { + fb = -0.99f; + } else { + fb = feedback * 0.01f; + } + + if (sync > 0) { + if (!last_sync) { + x = 0.5f; + y = 0.0f; + } + plugin_data->last_sync = 1; + } else { + plugin_data->last_sync = 0; + } + + for (pos = 0; pos < sample_count; pos++) { + /* Write input into delay line */ + buffer[buffer_pos] = input[pos]; + + /* Calcuate delay */ + d = (x + 0.5f) * dr; + + dof = f_round(d); + //dout = buffer[(buffer_pos - f_round(d)) & buffer_mask]; + dout = cube_interp(d - floor(d), + buffer[(buffer_pos - dof - 3) & buffer_mask], + buffer[(buffer_pos - dof - 2) & buffer_mask], + buffer[(buffer_pos - dof - 1) & buffer_mask], + buffer[(buffer_pos - dof) & buffer_mask]); + + /* Write output */ + out = (buffer[buffer_pos] + dout) * 0.5f; + buffer[buffer_pos] = input[pos] + out * fb; + buffer_write(output[pos], out); + + /* Roll ringbuffer */ + buffer_pos = (buffer_pos + 1) & buffer_mask; + + /* Run LFO */ + x -= omega * y; + y += omega * x; + } + + plugin_data->x = x; + plugin_data->y = y; + plugin_data->buffer_pos = buffer_pos; +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + djFlangerDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (djFlangerDescriptor) { + djFlangerDescriptor->UniqueID = 1438; + djFlangerDescriptor->Label = "djFlanger"; + djFlangerDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + djFlangerDescriptor->Name = + D_("DJ flanger"); + djFlangerDescriptor->Maker = + "Steve Harris "; + djFlangerDescriptor->Copyright = + "GPL"; + djFlangerDescriptor->PortCount = 6; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(6, + sizeof(LADSPA_PortDescriptor)); + djFlangerDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(6, + sizeof(LADSPA_PortRangeHint)); + djFlangerDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(6, sizeof(char*)); + djFlangerDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for LFO sync */ + port_descriptors[DJFLANGER_SYNC] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[DJFLANGER_SYNC] = + D_("LFO sync"); + port_range_hints[DJFLANGER_SYNC].HintDescriptor = 0; + + /* Parameters for LFO period (s) */ + port_descriptors[DJFLANGER_PERIOD] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[DJFLANGER_PERIOD] = + D_("LFO period (s)"); + port_range_hints[DJFLANGER_PERIOD].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1; + port_range_hints[DJFLANGER_PERIOD].LowerBound = 0.1; + port_range_hints[DJFLANGER_PERIOD].UpperBound = 32.0; + + /* Parameters for LFO depth (ms) */ + port_descriptors[DJFLANGER_DEPTH] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[DJFLANGER_DEPTH] = + D_("LFO depth (ms)"); + port_range_hints[DJFLANGER_DEPTH].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_HIGH; + port_range_hints[DJFLANGER_DEPTH].LowerBound = 1; + port_range_hints[DJFLANGER_DEPTH].UpperBound = 5; + + /* Parameters for Feedback (%) */ + port_descriptors[DJFLANGER_FEEDBACK] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[DJFLANGER_FEEDBACK] = + D_("Feedback (%)"); + port_range_hints[DJFLANGER_FEEDBACK].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[DJFLANGER_FEEDBACK].LowerBound = -100; + port_range_hints[DJFLANGER_FEEDBACK].UpperBound = 100; + + /* Parameters for Input */ + port_descriptors[DJFLANGER_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[DJFLANGER_INPUT] = + D_("Input"); + port_range_hints[DJFLANGER_INPUT].HintDescriptor = 0; + + /* Parameters for Output */ + port_descriptors[DJFLANGER_OUTPUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[DJFLANGER_OUTPUT] = + D_("Output"); + port_range_hints[DJFLANGER_OUTPUT].HintDescriptor = 0; + + djFlangerDescriptor->activate = activateDjFlanger; + djFlangerDescriptor->cleanup = cleanupDjFlanger; + djFlangerDescriptor->connect_port = connectPortDjFlanger; + djFlangerDescriptor->deactivate = NULL; + djFlangerDescriptor->instantiate = instantiateDjFlanger; + djFlangerDescriptor->run = runDjFlanger; + djFlangerDescriptor->run_adding = runAddingDjFlanger; + djFlangerDescriptor->set_run_adding_gain = setRunAddingGainDjFlanger; + } +} + +void _fini() { + if (djFlangerDescriptor) { + free((LADSPA_PortDescriptor *)djFlangerDescriptor->PortDescriptors); + free((char **)djFlangerDescriptor->PortNames); + free((LADSPA_PortRangeHint *)djFlangerDescriptor->PortRangeHints); + free(djFlangerDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/dyson_compress_1403.c b/plugins/LadspaEffect/swh/dyson_compress_1403.c new file mode 100644 index 000000000..f7bb71556 --- /dev/null +++ b/plugins/LadspaEffect/swh/dyson_compress_1403.c @@ -0,0 +1,896 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + +#line 10 "dyson_compress_1403.xml" + +/* + * Copyright (c) 1996, John S. Dyson + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * This code (easily) runs realtime on a P5-166 w/EDO, Triton-II on FreeBSD. + * + * More info/comments: dyson@freebsd.org + * + * This program provides compression of a stereo 16bit audio stream, + * such as that contained by a 16Bit wav file. Extreme measures have + * been taken to make the compression as subtile as possible. One + * possible purpose for this code would be to master cassette tapes from + * CD's for playback in automobiles where dynamic range needs to be + * restricted. + * + * Suitably recoded for an embedded DSP, this would make a killer audio + * compressor for broadcast or recording. When writing this code, I + * ignored the issues of roundoff error or trucation -- Pentiums have + * really nice FP processors :-). + */ + + #include + + #define MAXLEVEL 0.9f + #define NFILT 12 + #define NEFILT 17 + + /* These filters should filter at least the lowest audio freq */ + #define RLEVELSQ0FILTER .001 + #define RLEVELSQ1FILTER .010 + /* These are the attack time for the rms measurement */ + #define RLEVELSQ0FFILTER .001 + #define RLEVELSQEFILTER .001 + + #define RMASTERGAIN0FILTER .000003 + + #define RPEAKGAINFILTER .001 + + #define MAXFASTGAIN 3 + #define MAXSLOWGAIN 9 + + #define FLOORLEVEL 0.06 + + float hardlimit(float value, float knee, float limit) { + float ab = fabs(value); + if (ab >= limit) { + value = value > 0 ? limit : -limit; + } + + return value; + } + +#define DYSONCOMPRESS_PEAK_LIMIT 0 +#define DYSONCOMPRESS_RELEASE_TIME 1 +#define DYSONCOMPRESS_CFRATE 2 +#define DYSONCOMPRESS_CRATE 3 +#define DYSONCOMPRESS_INPUT 4 +#define DYSONCOMPRESS_OUTPUT 5 + +static LADSPA_Descriptor *dysonCompressDescriptor = NULL; + +typedef struct { + LADSPA_Data *peak_limit; + LADSPA_Data *release_time; + LADSPA_Data *cfrate; + LADSPA_Data *crate; + LADSPA_Data *input; + LADSPA_Data *output; + LADSPA_Data *delay; + float extra_maxlevel; + float lastrgain; + float maxgain; + float mingain; + float ndelay; + unsigned int ndelayptr; + int peaklimitdelay; + float rgain; + float rlevelsq0; + float rlevelsq1; + LADSPA_Data *rlevelsqe; + LADSPA_Data *rlevelsqn; + float rmastergain0; + float rpeakgain0; + float rpeakgain1; + float rpeaklimitdelay; + float sample_rate; + LADSPA_Data run_adding_gain; +} DysonCompress; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return dysonCompressDescriptor; + default: + return NULL; + } +} + +static void activateDysonCompress(LADSPA_Handle instance) { + DysonCompress *plugin_data = (DysonCompress *)instance; + LADSPA_Data *delay = plugin_data->delay; + float extra_maxlevel = plugin_data->extra_maxlevel; + float lastrgain = plugin_data->lastrgain; + float maxgain = plugin_data->maxgain; + float mingain = plugin_data->mingain; + float ndelay = plugin_data->ndelay; + unsigned int ndelayptr = plugin_data->ndelayptr; + int peaklimitdelay = plugin_data->peaklimitdelay; + float rgain = plugin_data->rgain; + float rlevelsq0 = plugin_data->rlevelsq0; + float rlevelsq1 = plugin_data->rlevelsq1; + LADSPA_Data *rlevelsqe = plugin_data->rlevelsqe; + LADSPA_Data *rlevelsqn = plugin_data->rlevelsqn; + float rmastergain0 = plugin_data->rmastergain0; + float rpeakgain0 = plugin_data->rpeakgain0; + float rpeakgain1 = plugin_data->rpeakgain1; + float rpeaklimitdelay = plugin_data->rpeaklimitdelay; + float sample_rate = plugin_data->sample_rate; +#line 105 "dyson_compress_1403.xml" + unsigned int i; + + for (i=0; idelay = delay; + plugin_data->extra_maxlevel = extra_maxlevel; + plugin_data->lastrgain = lastrgain; + plugin_data->maxgain = maxgain; + plugin_data->mingain = mingain; + plugin_data->ndelay = ndelay; + plugin_data->ndelayptr = ndelayptr; + plugin_data->peaklimitdelay = peaklimitdelay; + plugin_data->rgain = rgain; + plugin_data->rlevelsq0 = rlevelsq0; + plugin_data->rlevelsq1 = rlevelsq1; + plugin_data->rlevelsqe = rlevelsqe; + plugin_data->rlevelsqn = rlevelsqn; + plugin_data->rmastergain0 = rmastergain0; + plugin_data->rpeakgain0 = rpeakgain0; + plugin_data->rpeakgain1 = rpeakgain1; + plugin_data->rpeaklimitdelay = rpeaklimitdelay; + plugin_data->sample_rate = sample_rate; + +} + +static void cleanupDysonCompress(LADSPA_Handle instance) { +#line 137 "dyson_compress_1403.xml" + DysonCompress *plugin_data = (DysonCompress *)instance; + free(plugin_data->delay); + free(plugin_data->rlevelsqn); + free(plugin_data->rlevelsqe); + free(instance); +} + +static void connectPortDysonCompress( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + DysonCompress *plugin; + + plugin = (DysonCompress *)instance; + switch (port) { + case DYSONCOMPRESS_PEAK_LIMIT: + plugin->peak_limit = data; + break; + case DYSONCOMPRESS_RELEASE_TIME: + plugin->release_time = data; + break; + case DYSONCOMPRESS_CFRATE: + plugin->cfrate = data; + break; + case DYSONCOMPRESS_CRATE: + plugin->crate = data; + break; + case DYSONCOMPRESS_INPUT: + plugin->input = data; + break; + case DYSONCOMPRESS_OUTPUT: + plugin->output = data; + break; + } +} + +static LADSPA_Handle instantiateDysonCompress( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + DysonCompress *plugin_data = (DysonCompress *)malloc(sizeof(DysonCompress)); + LADSPA_Data *delay = NULL; + float extra_maxlevel; + float lastrgain; + float maxgain; + float mingain; + float ndelay; + unsigned int ndelayptr; + int peaklimitdelay; + float rgain; + float rlevelsq0; + float rlevelsq1; + LADSPA_Data *rlevelsqe = NULL; + LADSPA_Data *rlevelsqn = NULL; + float rmastergain0; + float rpeakgain0; + float rpeakgain1; + float rpeaklimitdelay; + float sample_rate; + +#line 78 "dyson_compress_1403.xml" + sample_rate = (float)s_rate; + + mingain = 10000; + maxgain = 0; + + rpeaklimitdelay = 2500; + + rgain = rmastergain0 = 1.0; + rlevelsq0 = 0; + rlevelsq1 = 0; + ndelay = (int)(1.0 / RLEVELSQ0FFILTER); + + delay = calloc(ndelay, sizeof(LADSPA_Data)); + rlevelsqn = calloc(NFILT + 1, sizeof(float)); + rlevelsqe = calloc(NEFILT + 1, sizeof(float)); + + rpeakgain0 = 1.0; + rpeakgain1 = 1.0; + rpeaklimitdelay = 0; + ndelayptr = 0; + lastrgain = 1.0; + + extra_maxlevel = 0.0f; + peaklimitdelay = 0; + + plugin_data->delay = delay; + plugin_data->extra_maxlevel = extra_maxlevel; + plugin_data->lastrgain = lastrgain; + plugin_data->maxgain = maxgain; + plugin_data->mingain = mingain; + plugin_data->ndelay = ndelay; + plugin_data->ndelayptr = ndelayptr; + plugin_data->peaklimitdelay = peaklimitdelay; + plugin_data->rgain = rgain; + plugin_data->rlevelsq0 = rlevelsq0; + plugin_data->rlevelsq1 = rlevelsq1; + plugin_data->rlevelsqe = rlevelsqe; + plugin_data->rlevelsqn = rlevelsqn; + plugin_data->rmastergain0 = rmastergain0; + plugin_data->rpeakgain0 = rpeakgain0; + plugin_data->rpeakgain1 = rpeakgain1; + plugin_data->rpeaklimitdelay = rpeaklimitdelay; + plugin_data->sample_rate = sample_rate; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runDysonCompress(LADSPA_Handle instance, unsigned long sample_count) { + DysonCompress *plugin_data = (DysonCompress *)instance; + + /* Peak limit (dB) (float value) */ + const LADSPA_Data peak_limit = *(plugin_data->peak_limit); + + /* Release time (s) (float value) */ + const LADSPA_Data release_time = *(plugin_data->release_time); + + /* Fast compression ratio (float value) */ + const LADSPA_Data cfrate = *(plugin_data->cfrate); + + /* Compression ratio (float value) */ + const LADSPA_Data crate = *(plugin_data->crate); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + LADSPA_Data * delay = plugin_data->delay; + float extra_maxlevel = plugin_data->extra_maxlevel; + float lastrgain = plugin_data->lastrgain; + float maxgain = plugin_data->maxgain; + float mingain = plugin_data->mingain; + float ndelay = plugin_data->ndelay; + unsigned int ndelayptr = plugin_data->ndelayptr; + int peaklimitdelay = plugin_data->peaklimitdelay; + float rgain = plugin_data->rgain; + float rlevelsq0 = plugin_data->rlevelsq0; + float rlevelsq1 = plugin_data->rlevelsq1; + LADSPA_Data * rlevelsqe = plugin_data->rlevelsqe; + LADSPA_Data * rlevelsqn = plugin_data->rlevelsqn; + float rmastergain0 = plugin_data->rmastergain0; + float rpeakgain0 = plugin_data->rpeakgain0; + float rpeakgain1 = plugin_data->rpeakgain1; + float rpeaklimitdelay = plugin_data->rpeaklimitdelay; + float sample_rate = plugin_data->sample_rate; + +#line 143 "dyson_compress_1403.xml" + unsigned long pos; + float targetlevel = MAXLEVEL * DB_CO(peak_limit); + float rgainfilter = 1.0f / (release_time * sample_rate); + float fastgaincompressionratio = cfrate; + float compressionratio = crate; + float efilt; + float levelsqe; + float gain; + float tgain; + float d; + float fastgain; + float qgain; + float tslowgain; + float slowgain; + float npeakgain; + float new; + float nrgain; + float ngain; + float ngsq; + float tnrgain; + float sqrtrpeakgain; + float totalgain; + unsigned int i; + + for (pos = 0; pos < sample_count; pos++) { + // Ergh! this was originally meant to track a stereo signal + float levelsq0 = 2.0f * (input[pos] * input[pos]); + + delay[ndelayptr] = input[pos]; + ndelayptr++; + + if (ndelayptr >= ndelay) { + ndelayptr = 0; + } + + if (levelsq0 > rlevelsq0) { + rlevelsq0 = (levelsq0 * RLEVELSQ0FFILTER) + + rlevelsq0 * (1 - RLEVELSQ0FFILTER); + } else { + rlevelsq0 = (levelsq0 * RLEVELSQ0FILTER) + + rlevelsq0 * (1 - RLEVELSQ0FILTER); + } + + if (rlevelsq0 <= FLOORLEVEL * FLOORLEVEL) { + goto skipagc; + } + + if (rlevelsq0 > rlevelsq1) { + rlevelsq1 = rlevelsq0; + } else { + rlevelsq1 = rlevelsq0 * RLEVELSQ1FILTER + + rlevelsq1 * (1 - RLEVELSQ1FILTER); + } + + rlevelsqn[0] = rlevelsq1; + for(i = 0; i < NFILT-1; i++) { + if (rlevelsqn[i] > rlevelsqn[i+1]) + rlevelsqn[i+1] = rlevelsqn[i]; + else + rlevelsqn[i+1] = rlevelsqn[i] * RLEVELSQ1FILTER + + rlevelsqn[i+1] * (1 - RLEVELSQ1FILTER); + } + + efilt = RLEVELSQEFILTER; + levelsqe = rlevelsqe[0] = rlevelsqn[NFILT-1]; + for(i = 0; i < NEFILT-1; i++) { + rlevelsqe[i+1] = rlevelsqe[i] * efilt + + rlevelsqe[i+1] * (1.0 - efilt); + if (rlevelsqe[i+1] > levelsqe) + levelsqe = rlevelsqe[i+1]; + efilt *= 1.0f / 1.5f; + } + + gain = targetlevel / sqrt(levelsqe); + if (compressionratio < 0.99f) { + if (compressionratio == 0.50f) + gain = sqrt(gain); + else + gain = f_exp(log(gain) * compressionratio); + } + + if (gain < rgain) + rgain = gain * RLEVELSQEFILTER/2 + + rgain * (1 - RLEVELSQEFILTER/2); + else + rgain = gain * rgainfilter + + rgain * (1 - rgainfilter); + + lastrgain = rgain; + if ( gain < lastrgain) + lastrgain = gain; + + skipagc:; + + tgain = lastrgain; + + d = delay[ndelayptr]; + + fastgain = tgain; + if (fastgain > MAXFASTGAIN) + fastgain = MAXFASTGAIN; + + if (fastgain < 0.0001) + fastgain = 0.0001; + + qgain = f_exp(log(fastgain) * fastgaincompressionratio); + + tslowgain = tgain / qgain; + if (tslowgain > MAXSLOWGAIN) + tslowgain = MAXSLOWGAIN; + if (tslowgain < rmastergain0) + rmastergain0 = tslowgain; + else + rmastergain0 = tslowgain * RMASTERGAIN0FILTER + + (1 - RMASTERGAIN0FILTER) * rmastergain0; + + slowgain = rmastergain0; + npeakgain = slowgain * qgain; + + new = d * npeakgain; + if (fabs(new) >= MAXLEVEL) + nrgain = MAXLEVEL / fabs(new); + else + nrgain = 1.0; + + ngain = nrgain; + + ngsq = ngain * ngain; + if (ngsq <= rpeakgain0) { + rpeakgain0 = ngsq /* * 0.50 + rpeakgain0 * 0.50 */; + rpeaklimitdelay = peaklimitdelay; + } else if (rpeaklimitdelay == 0) { + if (nrgain > 1.0) + tnrgain = 1.0; + else + tnrgain = nrgain; + rpeakgain0 = tnrgain * RPEAKGAINFILTER + + (1.0 - RPEAKGAINFILTER) * rpeakgain0; + } + + if (rpeakgain0 <= rpeakgain1) { + rpeakgain1 = rpeakgain0; + rpeaklimitdelay = peaklimitdelay; + } else if (rpeaklimitdelay == 0) { + rpeakgain1 = RPEAKGAINFILTER * rpeakgain0 + + (1.0 - RPEAKGAINFILTER) * rpeakgain1; + } else { + --rpeaklimitdelay; + } + + sqrtrpeakgain = sqrt(rpeakgain1); + totalgain = npeakgain * sqrtrpeakgain; + + buffer_write(output[pos], new * sqrtrpeakgain); + + if (totalgain > maxgain) + maxgain = totalgain; + if (totalgain < mingain) + mingain = totalgain; + if (output[pos] > extra_maxlevel) + extra_maxlevel = output[pos]; + } + + plugin_data->ndelayptr = ndelayptr; + plugin_data->rlevelsq0 = rlevelsq0; + plugin_data->rlevelsq1 = rlevelsq1; + plugin_data->mingain = mingain; + plugin_data->maxgain = maxgain; + plugin_data->rpeaklimitdelay = rpeaklimitdelay; + plugin_data->rgain = rgain; + plugin_data->rmastergain0 = rmastergain0; + plugin_data->rpeakgain0 = rpeakgain0; + plugin_data->rpeakgain1 = rpeakgain1; + plugin_data->lastrgain = lastrgain; + plugin_data->extra_maxlevel = extra_maxlevel; +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainDysonCompress(LADSPA_Handle instance, LADSPA_Data gain) { + ((DysonCompress *)instance)->run_adding_gain = gain; +} + +static void runAddingDysonCompress(LADSPA_Handle instance, unsigned long sample_count) { + DysonCompress *plugin_data = (DysonCompress *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Peak limit (dB) (float value) */ + const LADSPA_Data peak_limit = *(plugin_data->peak_limit); + + /* Release time (s) (float value) */ + const LADSPA_Data release_time = *(plugin_data->release_time); + + /* Fast compression ratio (float value) */ + const LADSPA_Data cfrate = *(plugin_data->cfrate); + + /* Compression ratio (float value) */ + const LADSPA_Data crate = *(plugin_data->crate); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + LADSPA_Data * delay = plugin_data->delay; + float extra_maxlevel = plugin_data->extra_maxlevel; + float lastrgain = plugin_data->lastrgain; + float maxgain = plugin_data->maxgain; + float mingain = plugin_data->mingain; + float ndelay = plugin_data->ndelay; + unsigned int ndelayptr = plugin_data->ndelayptr; + int peaklimitdelay = plugin_data->peaklimitdelay; + float rgain = plugin_data->rgain; + float rlevelsq0 = plugin_data->rlevelsq0; + float rlevelsq1 = plugin_data->rlevelsq1; + LADSPA_Data * rlevelsqe = plugin_data->rlevelsqe; + LADSPA_Data * rlevelsqn = plugin_data->rlevelsqn; + float rmastergain0 = plugin_data->rmastergain0; + float rpeakgain0 = plugin_data->rpeakgain0; + float rpeakgain1 = plugin_data->rpeakgain1; + float rpeaklimitdelay = plugin_data->rpeaklimitdelay; + float sample_rate = plugin_data->sample_rate; + +#line 143 "dyson_compress_1403.xml" + unsigned long pos; + float targetlevel = MAXLEVEL * DB_CO(peak_limit); + float rgainfilter = 1.0f / (release_time * sample_rate); + float fastgaincompressionratio = cfrate; + float compressionratio = crate; + float efilt; + float levelsqe; + float gain; + float tgain; + float d; + float fastgain; + float qgain; + float tslowgain; + float slowgain; + float npeakgain; + float new; + float nrgain; + float ngain; + float ngsq; + float tnrgain; + float sqrtrpeakgain; + float totalgain; + unsigned int i; + + for (pos = 0; pos < sample_count; pos++) { + // Ergh! this was originally meant to track a stereo signal + float levelsq0 = 2.0f * (input[pos] * input[pos]); + + delay[ndelayptr] = input[pos]; + ndelayptr++; + + if (ndelayptr >= ndelay) { + ndelayptr = 0; + } + + if (levelsq0 > rlevelsq0) { + rlevelsq0 = (levelsq0 * RLEVELSQ0FFILTER) + + rlevelsq0 * (1 - RLEVELSQ0FFILTER); + } else { + rlevelsq0 = (levelsq0 * RLEVELSQ0FILTER) + + rlevelsq0 * (1 - RLEVELSQ0FILTER); + } + + if (rlevelsq0 <= FLOORLEVEL * FLOORLEVEL) { + goto skipagc; + } + + if (rlevelsq0 > rlevelsq1) { + rlevelsq1 = rlevelsq0; + } else { + rlevelsq1 = rlevelsq0 * RLEVELSQ1FILTER + + rlevelsq1 * (1 - RLEVELSQ1FILTER); + } + + rlevelsqn[0] = rlevelsq1; + for(i = 0; i < NFILT-1; i++) { + if (rlevelsqn[i] > rlevelsqn[i+1]) + rlevelsqn[i+1] = rlevelsqn[i]; + else + rlevelsqn[i+1] = rlevelsqn[i] * RLEVELSQ1FILTER + + rlevelsqn[i+1] * (1 - RLEVELSQ1FILTER); + } + + efilt = RLEVELSQEFILTER; + levelsqe = rlevelsqe[0] = rlevelsqn[NFILT-1]; + for(i = 0; i < NEFILT-1; i++) { + rlevelsqe[i+1] = rlevelsqe[i] * efilt + + rlevelsqe[i+1] * (1.0 - efilt); + if (rlevelsqe[i+1] > levelsqe) + levelsqe = rlevelsqe[i+1]; + efilt *= 1.0f / 1.5f; + } + + gain = targetlevel / sqrt(levelsqe); + if (compressionratio < 0.99f) { + if (compressionratio == 0.50f) + gain = sqrt(gain); + else + gain = f_exp(log(gain) * compressionratio); + } + + if (gain < rgain) + rgain = gain * RLEVELSQEFILTER/2 + + rgain * (1 - RLEVELSQEFILTER/2); + else + rgain = gain * rgainfilter + + rgain * (1 - rgainfilter); + + lastrgain = rgain; + if ( gain < lastrgain) + lastrgain = gain; + + skipagc:; + + tgain = lastrgain; + + d = delay[ndelayptr]; + + fastgain = tgain; + if (fastgain > MAXFASTGAIN) + fastgain = MAXFASTGAIN; + + if (fastgain < 0.0001) + fastgain = 0.0001; + + qgain = f_exp(log(fastgain) * fastgaincompressionratio); + + tslowgain = tgain / qgain; + if (tslowgain > MAXSLOWGAIN) + tslowgain = MAXSLOWGAIN; + if (tslowgain < rmastergain0) + rmastergain0 = tslowgain; + else + rmastergain0 = tslowgain * RMASTERGAIN0FILTER + + (1 - RMASTERGAIN0FILTER) * rmastergain0; + + slowgain = rmastergain0; + npeakgain = slowgain * qgain; + + new = d * npeakgain; + if (fabs(new) >= MAXLEVEL) + nrgain = MAXLEVEL / fabs(new); + else + nrgain = 1.0; + + ngain = nrgain; + + ngsq = ngain * ngain; + if (ngsq <= rpeakgain0) { + rpeakgain0 = ngsq /* * 0.50 + rpeakgain0 * 0.50 */; + rpeaklimitdelay = peaklimitdelay; + } else if (rpeaklimitdelay == 0) { + if (nrgain > 1.0) + tnrgain = 1.0; + else + tnrgain = nrgain; + rpeakgain0 = tnrgain * RPEAKGAINFILTER + + (1.0 - RPEAKGAINFILTER) * rpeakgain0; + } + + if (rpeakgain0 <= rpeakgain1) { + rpeakgain1 = rpeakgain0; + rpeaklimitdelay = peaklimitdelay; + } else if (rpeaklimitdelay == 0) { + rpeakgain1 = RPEAKGAINFILTER * rpeakgain0 + + (1.0 - RPEAKGAINFILTER) * rpeakgain1; + } else { + --rpeaklimitdelay; + } + + sqrtrpeakgain = sqrt(rpeakgain1); + totalgain = npeakgain * sqrtrpeakgain; + + buffer_write(output[pos], new * sqrtrpeakgain); + + if (totalgain > maxgain) + maxgain = totalgain; + if (totalgain < mingain) + mingain = totalgain; + if (output[pos] > extra_maxlevel) + extra_maxlevel = output[pos]; + } + + plugin_data->ndelayptr = ndelayptr; + plugin_data->rlevelsq0 = rlevelsq0; + plugin_data->rlevelsq1 = rlevelsq1; + plugin_data->mingain = mingain; + plugin_data->maxgain = maxgain; + plugin_data->rpeaklimitdelay = rpeaklimitdelay; + plugin_data->rgain = rgain; + plugin_data->rmastergain0 = rmastergain0; + plugin_data->rpeakgain0 = rpeakgain0; + plugin_data->rpeakgain1 = rpeakgain1; + plugin_data->lastrgain = lastrgain; + plugin_data->extra_maxlevel = extra_maxlevel; +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + dysonCompressDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (dysonCompressDescriptor) { + dysonCompressDescriptor->UniqueID = 1403; + dysonCompressDescriptor->Label = "dysonCompress"; + dysonCompressDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + dysonCompressDescriptor->Name = + D_("Dyson compressor"); + dysonCompressDescriptor->Maker = + "Steve Harris "; + dysonCompressDescriptor->Copyright = + "GPL"; + dysonCompressDescriptor->PortCount = 6; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(6, + sizeof(LADSPA_PortDescriptor)); + dysonCompressDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(6, + sizeof(LADSPA_PortRangeHint)); + dysonCompressDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(6, sizeof(char*)); + dysonCompressDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Peak limit (dB) */ + port_descriptors[DYSONCOMPRESS_PEAK_LIMIT] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[DYSONCOMPRESS_PEAK_LIMIT] = + D_("Peak limit (dB)"); + port_range_hints[DYSONCOMPRESS_PEAK_LIMIT].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[DYSONCOMPRESS_PEAK_LIMIT].LowerBound = -30; + port_range_hints[DYSONCOMPRESS_PEAK_LIMIT].UpperBound = 0; + + /* Parameters for Release time (s) */ + port_descriptors[DYSONCOMPRESS_RELEASE_TIME] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[DYSONCOMPRESS_RELEASE_TIME] = + D_("Release time (s)"); + port_range_hints[DYSONCOMPRESS_RELEASE_TIME].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; + port_range_hints[DYSONCOMPRESS_RELEASE_TIME].LowerBound = 0; + port_range_hints[DYSONCOMPRESS_RELEASE_TIME].UpperBound = 1; + + /* Parameters for Fast compression ratio */ + port_descriptors[DYSONCOMPRESS_CFRATE] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[DYSONCOMPRESS_CFRATE] = + D_("Fast compression ratio"); + port_range_hints[DYSONCOMPRESS_CFRATE].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; + port_range_hints[DYSONCOMPRESS_CFRATE].LowerBound = 0; + port_range_hints[DYSONCOMPRESS_CFRATE].UpperBound = 1; + + /* Parameters for Compression ratio */ + port_descriptors[DYSONCOMPRESS_CRATE] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[DYSONCOMPRESS_CRATE] = + D_("Compression ratio"); + port_range_hints[DYSONCOMPRESS_CRATE].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; + port_range_hints[DYSONCOMPRESS_CRATE].LowerBound = 0; + port_range_hints[DYSONCOMPRESS_CRATE].UpperBound = 1; + + /* Parameters for Input */ + port_descriptors[DYSONCOMPRESS_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[DYSONCOMPRESS_INPUT] = + D_("Input"); + port_range_hints[DYSONCOMPRESS_INPUT].HintDescriptor = 0; + + /* Parameters for Output */ + port_descriptors[DYSONCOMPRESS_OUTPUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[DYSONCOMPRESS_OUTPUT] = + D_("Output"); + port_range_hints[DYSONCOMPRESS_OUTPUT].HintDescriptor = 0; + + dysonCompressDescriptor->activate = activateDysonCompress; + dysonCompressDescriptor->cleanup = cleanupDysonCompress; + dysonCompressDescriptor->connect_port = connectPortDysonCompress; + dysonCompressDescriptor->deactivate = NULL; + dysonCompressDescriptor->instantiate = instantiateDysonCompress; + dysonCompressDescriptor->run = runDysonCompress; + dysonCompressDescriptor->run_adding = runAddingDysonCompress; + dysonCompressDescriptor->set_run_adding_gain = setRunAddingGainDysonCompress; + } +} + +void _fini() { + if (dysonCompressDescriptor) { + free((LADSPA_PortDescriptor *)dysonCompressDescriptor->PortDescriptors); + free((char **)dysonCompressDescriptor->PortNames); + free((LADSPA_PortRangeHint *)dysonCompressDescriptor->PortRangeHints); + free(dysonCompressDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/fad_delay_1192.c b/plugins/LadspaEffect/swh/fad_delay_1192.c new file mode 100644 index 000000000..89f496a84 --- /dev/null +++ b/plugins/LadspaEffect/swh/fad_delay_1192.c @@ -0,0 +1,399 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + + +#include "ladspa-util.h" + +#define BASE_BUFFER 8 // Base buffer length (s) + +#define FADDELAY_DELAY 0 +#define FADDELAY_FB_DB 1 +#define FADDELAY_INPUT 2 +#define FADDELAY_OUTPUT 3 + +static LADSPA_Descriptor *fadDelayDescriptor = NULL; + +typedef struct { + LADSPA_Data *delay; + LADSPA_Data *fb_db; + LADSPA_Data *input; + LADSPA_Data *output; + LADSPA_Data *buffer; + unsigned long buffer_mask; + unsigned long buffer_size; + LADSPA_Data last_in; + int last_phase; + float phase; + long sample_rate; + LADSPA_Data run_adding_gain; +} FadDelay; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return fadDelayDescriptor; + default: + return NULL; + } +} + +static void activateFadDelay(LADSPA_Handle instance) { + FadDelay *plugin_data = (FadDelay *)instance; + LADSPA_Data *buffer = plugin_data->buffer; + unsigned long buffer_mask = plugin_data->buffer_mask; + unsigned long buffer_size = plugin_data->buffer_size; + LADSPA_Data last_in = plugin_data->last_in; + int last_phase = plugin_data->last_phase; + float phase = plugin_data->phase; + long sample_rate = plugin_data->sample_rate; + unsigned int i; + + for (i = 0; i < buffer_size; i++) { + buffer[i] = 0; + } + phase = 0; + last_phase = 0; + last_in = 0.0f; + sample_rate = sample_rate; + plugin_data->buffer = buffer; + plugin_data->buffer_mask = buffer_mask; + plugin_data->buffer_size = buffer_size; + plugin_data->last_in = last_in; + plugin_data->last_phase = last_phase; + plugin_data->phase = phase; + plugin_data->sample_rate = sample_rate; + +} + +static void cleanupFadDelay(LADSPA_Handle instance) { + FadDelay *plugin_data = (FadDelay *)instance; + free(plugin_data->buffer); + free(instance); +} + +static void connectPortFadDelay( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + FadDelay *plugin; + + plugin = (FadDelay *)instance; + switch (port) { + case FADDELAY_DELAY: + plugin->delay = data; + break; + case FADDELAY_FB_DB: + plugin->fb_db = data; + break; + case FADDELAY_INPUT: + plugin->input = data; + break; + case FADDELAY_OUTPUT: + plugin->output = data; + break; + } +} + +static LADSPA_Handle instantiateFadDelay( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + FadDelay *plugin_data = (FadDelay *)malloc(sizeof(FadDelay)); + LADSPA_Data *buffer = NULL; + unsigned long buffer_mask; + unsigned long buffer_size; + LADSPA_Data last_in; + int last_phase; + float phase; + long sample_rate; + + unsigned int min_bs; + + sample_rate = s_rate; + min_bs = BASE_BUFFER * s_rate; + for (buffer_size = 4096; buffer_size < min_bs; + buffer_size *= 2); + buffer = calloc(buffer_size, sizeof(LADSPA_Data)); + buffer_mask = buffer_size - 1; + phase = 0; + last_phase = 0; + last_in = 0.0f; + + plugin_data->buffer = buffer; + plugin_data->buffer_mask = buffer_mask; + plugin_data->buffer_size = buffer_size; + plugin_data->last_in = last_in; + plugin_data->last_phase = last_phase; + plugin_data->phase = phase; + plugin_data->sample_rate = sample_rate; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runFadDelay(LADSPA_Handle instance, unsigned long sample_count) { + FadDelay *plugin_data = (FadDelay *)instance; + + /* Delay (seconds) (float value) */ + const LADSPA_Data delay = *(plugin_data->delay); + + /* Feedback (dB) (float value) */ + const LADSPA_Data fb_db = *(plugin_data->fb_db); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + LADSPA_Data * buffer = plugin_data->buffer; + unsigned long buffer_mask = plugin_data->buffer_mask; + unsigned long buffer_size = plugin_data->buffer_size; + LADSPA_Data last_in = plugin_data->last_in; + int last_phase = plugin_data->last_phase; + float phase = plugin_data->phase; + long sample_rate = plugin_data->sample_rate; + + unsigned long int pos; + float increment = (float)buffer_size / ((float)sample_rate * + f_max(fabs(delay), 0.01)); + float lin_int, lin_inc; + int track; + int fph; + LADSPA_Data out; + const float fb = DB_CO(fb_db); + + for (pos = 0; pos < sample_count; pos++) { + fph = f_round(floor(phase)); + last_phase = fph; + lin_int = phase - (float)fph; + out = LIN_INTERP(lin_int, buffer[(fph+1) & buffer_mask], + buffer[(fph+2) & buffer_mask]); + phase += increment; + lin_inc = 1.0f / (floor(phase) - last_phase + 1); + lin_inc = lin_inc > 1.0f ? 1.0f : lin_inc; + lin_int = 0.0f; + for (track = last_phase; track < phase; track++) { + lin_int += lin_inc; + buffer[track % buffer_size] = out * fb + + LIN_INTERP(lin_int, last_in, input[pos]); + } + last_in = input[pos]; + buffer_write(output[pos], out); + if (phase >= buffer_size) { + phase -= buffer_size; + } + } + + // Store current phase in instance + plugin_data->phase = phase; + plugin_data->last_phase = last_phase; + plugin_data->last_in = last_in; +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainFadDelay(LADSPA_Handle instance, LADSPA_Data gain) { + ((FadDelay *)instance)->run_adding_gain = gain; +} + +static void runAddingFadDelay(LADSPA_Handle instance, unsigned long sample_count) { + FadDelay *plugin_data = (FadDelay *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Delay (seconds) (float value) */ + const LADSPA_Data delay = *(plugin_data->delay); + + /* Feedback (dB) (float value) */ + const LADSPA_Data fb_db = *(plugin_data->fb_db); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + LADSPA_Data * buffer = plugin_data->buffer; + unsigned long buffer_mask = plugin_data->buffer_mask; + unsigned long buffer_size = plugin_data->buffer_size; + LADSPA_Data last_in = plugin_data->last_in; + int last_phase = plugin_data->last_phase; + float phase = plugin_data->phase; + long sample_rate = plugin_data->sample_rate; + + unsigned long int pos; + float increment = (float)buffer_size / ((float)sample_rate * + f_max(fabs(delay), 0.01)); + float lin_int, lin_inc; + int track; + int fph; + LADSPA_Data out; + const float fb = DB_CO(fb_db); + + for (pos = 0; pos < sample_count; pos++) { + fph = f_round(floor(phase)); + last_phase = fph; + lin_int = phase - (float)fph; + out = LIN_INTERP(lin_int, buffer[(fph+1) & buffer_mask], + buffer[(fph+2) & buffer_mask]); + phase += increment; + lin_inc = 1.0f / (floor(phase) - last_phase + 1); + lin_inc = lin_inc > 1.0f ? 1.0f : lin_inc; + lin_int = 0.0f; + for (track = last_phase; track < phase; track++) { + lin_int += lin_inc; + buffer[track % buffer_size] = out * fb + + LIN_INTERP(lin_int, last_in, input[pos]); + } + last_in = input[pos]; + buffer_write(output[pos], out); + if (phase >= buffer_size) { + phase -= buffer_size; + } + } + + // Store current phase in instance + plugin_data->phase = phase; + plugin_data->last_phase = last_phase; + plugin_data->last_in = last_in; +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + fadDelayDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (fadDelayDescriptor) { + fadDelayDescriptor->UniqueID = 1192; + fadDelayDescriptor->Label = "fadDelay"; + fadDelayDescriptor->Properties = + 0; + fadDelayDescriptor->Name = + D_("Fractionally Addressed Delay Line"); + fadDelayDescriptor->Maker = + "Steve Harris "; + fadDelayDescriptor->Copyright = + "GPL"; + fadDelayDescriptor->PortCount = 4; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(4, + sizeof(LADSPA_PortDescriptor)); + fadDelayDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(4, + sizeof(LADSPA_PortRangeHint)); + fadDelayDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(4, sizeof(char*)); + fadDelayDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Delay (seconds) */ + port_descriptors[FADDELAY_DELAY] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[FADDELAY_DELAY] = + D_("Delay (seconds)"); + port_range_hints[FADDELAY_DELAY].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1; + port_range_hints[FADDELAY_DELAY].LowerBound = 0.1; + port_range_hints[FADDELAY_DELAY].UpperBound = 10; + + /* Parameters for Feedback (dB) */ + port_descriptors[FADDELAY_FB_DB] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[FADDELAY_FB_DB] = + D_("Feedback (dB)"); + port_range_hints[FADDELAY_FB_DB].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[FADDELAY_FB_DB].LowerBound = -70; + port_range_hints[FADDELAY_FB_DB].UpperBound = 0; + + /* Parameters for Input */ + port_descriptors[FADDELAY_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[FADDELAY_INPUT] = + D_("Input"); + port_range_hints[FADDELAY_INPUT].HintDescriptor = 0; + + /* Parameters for Output */ + port_descriptors[FADDELAY_OUTPUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[FADDELAY_OUTPUT] = + D_("Output"); + port_range_hints[FADDELAY_OUTPUT].HintDescriptor = 0; + + fadDelayDescriptor->activate = activateFadDelay; + fadDelayDescriptor->cleanup = cleanupFadDelay; + fadDelayDescriptor->connect_port = connectPortFadDelay; + fadDelayDescriptor->deactivate = NULL; + fadDelayDescriptor->instantiate = instantiateFadDelay; + fadDelayDescriptor->run = runFadDelay; + fadDelayDescriptor->run_adding = runAddingFadDelay; + fadDelayDescriptor->set_run_adding_gain = setRunAddingGainFadDelay; + } +} + +void _fini() { + if (fadDelayDescriptor) { + free((LADSPA_PortDescriptor *)fadDelayDescriptor->PortDescriptors); + free((char **)fadDelayDescriptor->PortNames); + free((LADSPA_PortRangeHint *)fadDelayDescriptor->PortRangeHints); + free(fadDelayDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/fast_lookahead_limiter_1913.c b/plugins/LadspaEffect/swh/fast_lookahead_limiter_1913.c new file mode 100644 index 000000000..33007e1b9 --- /dev/null +++ b/plugins/LadspaEffect/swh/fast_lookahead_limiter_1913.c @@ -0,0 +1,714 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + +#line 10 "fast_lookahead_limiter_1913.xml" + +#include "ladspa-util.h" + +//#define DEBUG + +#define NUM_CHUNKS 16 +#define BUFFER_TIME 0.0053 + +#ifdef DEBUG + #include "stdio.h" +#endif + +#define FASTLOOKAHEADLIMITER_INGAIN 0 +#define FASTLOOKAHEADLIMITER_LIMIT 1 +#define FASTLOOKAHEADLIMITER_RELEASE 2 +#define FASTLOOKAHEADLIMITER_ATTENUATION 3 +#define FASTLOOKAHEADLIMITER_IN_1 4 +#define FASTLOOKAHEADLIMITER_IN_2 5 +#define FASTLOOKAHEADLIMITER_OUT_1 6 +#define FASTLOOKAHEADLIMITER_OUT_2 7 +#define FASTLOOKAHEADLIMITER_LATENCY 8 + +static LADSPA_Descriptor *fastLookaheadLimiterDescriptor = NULL; + +typedef struct { + LADSPA_Data *ingain; + LADSPA_Data *limit; + LADSPA_Data *release; + LADSPA_Data *attenuation; + LADSPA_Data *in_1; + LADSPA_Data *in_2; + LADSPA_Data *out_1; + LADSPA_Data *out_2; + LADSPA_Data *latency; + float atten; + float atten_lp; + LADSPA_Data *buffer; + unsigned int buffer_len; + unsigned int buffer_pos; + unsigned int chunk_num; + unsigned int chunk_pos; + unsigned int chunk_size; + float * chunks; + unsigned int delay; + float delta; + unsigned int fs; + float peak; + LADSPA_Data run_adding_gain; +} FastLookaheadLimiter; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return fastLookaheadLimiterDescriptor; + default: + return NULL; + } +} + +static void activateFastLookaheadLimiter(LADSPA_Handle instance) { + FastLookaheadLimiter *plugin_data = (FastLookaheadLimiter *)instance; + float atten = plugin_data->atten; + float atten_lp = plugin_data->atten_lp; + LADSPA_Data *buffer = plugin_data->buffer; + unsigned int buffer_len = plugin_data->buffer_len; + unsigned int buffer_pos = plugin_data->buffer_pos; + unsigned int chunk_num = plugin_data->chunk_num; + unsigned int chunk_pos = plugin_data->chunk_pos; + unsigned int chunk_size = plugin_data->chunk_size; + float *chunks = plugin_data->chunks; + unsigned int delay = plugin_data->delay; + float delta = plugin_data->delta; + unsigned int fs = plugin_data->fs; + float peak = plugin_data->peak; +#line 56 "fast_lookahead_limiter_1913.xml" + memset(buffer, 0, NUM_CHUNKS * sizeof(float)); + + chunk_pos = 0; + chunk_num = 0; + peak = 0.0f; + atten = 1.0f; + atten_lp = 1.0f; + delta = 0.0f; + plugin_data->atten = atten; + plugin_data->atten_lp = atten_lp; + plugin_data->buffer = buffer; + plugin_data->buffer_len = buffer_len; + plugin_data->buffer_pos = buffer_pos; + plugin_data->chunk_num = chunk_num; + plugin_data->chunk_pos = chunk_pos; + plugin_data->chunk_size = chunk_size; + plugin_data->chunks = chunks; + plugin_data->delay = delay; + plugin_data->delta = delta; + plugin_data->fs = fs; + plugin_data->peak = peak; + +} + +static void cleanupFastLookaheadLimiter(LADSPA_Handle instance) { +#line 188 "fast_lookahead_limiter_1913.xml" + FastLookaheadLimiter *plugin_data = (FastLookaheadLimiter *)instance; + free(plugin_data->buffer); + free(instance); +} + +static void connectPortFastLookaheadLimiter( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + FastLookaheadLimiter *plugin; + + plugin = (FastLookaheadLimiter *)instance; + switch (port) { + case FASTLOOKAHEADLIMITER_INGAIN: + plugin->ingain = data; + break; + case FASTLOOKAHEADLIMITER_LIMIT: + plugin->limit = data; + break; + case FASTLOOKAHEADLIMITER_RELEASE: + plugin->release = data; + break; + case FASTLOOKAHEADLIMITER_ATTENUATION: + plugin->attenuation = data; + break; + case FASTLOOKAHEADLIMITER_IN_1: + plugin->in_1 = data; + break; + case FASTLOOKAHEADLIMITER_IN_2: + plugin->in_2 = data; + break; + case FASTLOOKAHEADLIMITER_OUT_1: + plugin->out_1 = data; + break; + case FASTLOOKAHEADLIMITER_OUT_2: + plugin->out_2 = data; + break; + case FASTLOOKAHEADLIMITER_LATENCY: + plugin->latency = data; + break; + } +} + +static LADSPA_Handle instantiateFastLookaheadLimiter( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + FastLookaheadLimiter *plugin_data = (FastLookaheadLimiter *)malloc(sizeof(FastLookaheadLimiter)); + float atten; + float atten_lp; + LADSPA_Data *buffer = NULL; + unsigned int buffer_len; + unsigned int buffer_pos; + unsigned int chunk_num; + unsigned int chunk_pos; + unsigned int chunk_size; + float *chunks = NULL; + unsigned int delay; + float delta; + unsigned int fs; + float peak; + +#line 31 "fast_lookahead_limiter_1913.xml" + fs = s_rate; + buffer_len = 128; + buffer_pos = 0; + + /* Find size for power-of-two interleaved delay buffer */ + while(buffer_len < fs * BUFFER_TIME * 2) { + buffer_len *= 2; + } + buffer = calloc(buffer_len, sizeof(float)); + delay = (int)(0.005 * fs); + + chunk_pos = 0; + chunk_num = 0; + + /* find a chunk size (in smaples) thats roughly 0.5ms */ + chunk_size = s_rate / 2000; + chunks = calloc(NUM_CHUNKS, sizeof(float)); + + peak = 0.0f; + atten = 1.0f; + atten_lp = 1.0f; + delta = 0.0f; + + plugin_data->atten = atten; + plugin_data->atten_lp = atten_lp; + plugin_data->buffer = buffer; + plugin_data->buffer_len = buffer_len; + plugin_data->buffer_pos = buffer_pos; + plugin_data->chunk_num = chunk_num; + plugin_data->chunk_pos = chunk_pos; + plugin_data->chunk_size = chunk_size; + plugin_data->chunks = chunks; + plugin_data->delay = delay; + plugin_data->delta = delta; + plugin_data->fs = fs; + plugin_data->peak = peak; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runFastLookaheadLimiter(LADSPA_Handle instance, unsigned long sample_count) { + FastLookaheadLimiter *plugin_data = (FastLookaheadLimiter *)instance; + + /* Input gain (dB) (float value) */ + const LADSPA_Data ingain = *(plugin_data->ingain); + + /* Limit (dB) (float value) */ + const LADSPA_Data limit = *(plugin_data->limit); + + /* Release time (s) (float value) */ + const LADSPA_Data release = *(plugin_data->release); + + /* Input 1 (array of floats of length sample_count) */ + const LADSPA_Data * const in_1 = plugin_data->in_1; + + /* Input 2 (array of floats of length sample_count) */ + const LADSPA_Data * const in_2 = plugin_data->in_2; + + /* Output 1 (array of floats of length sample_count) */ + LADSPA_Data * const out_1 = plugin_data->out_1; + + /* Output 2 (array of floats of length sample_count) */ + LADSPA_Data * const out_2 = plugin_data->out_2; + float atten = plugin_data->atten; + float atten_lp = plugin_data->atten_lp; + LADSPA_Data * buffer = plugin_data->buffer; + unsigned int buffer_len = plugin_data->buffer_len; + unsigned int buffer_pos = plugin_data->buffer_pos; + unsigned int chunk_num = plugin_data->chunk_num; + unsigned int chunk_pos = plugin_data->chunk_pos; + unsigned int chunk_size = plugin_data->chunk_size; + float * chunks = plugin_data->chunks; + unsigned int delay = plugin_data->delay; + float delta = plugin_data->delta; + unsigned int fs = plugin_data->fs; + float peak = plugin_data->peak; + +#line 67 "fast_lookahead_limiter_1913.xml" + unsigned long pos; + const float max = DB_CO(limit); + const float trim = DB_CO(ingain); + float sig; + unsigned int i; + + #ifdef DEBUG + float clip = 0.0, clipp = 0.0; + int clipc = 0; + #endif + + for (pos = 0; pos < sample_count; pos++) { + if (chunk_pos++ == chunk_size) { + /* we've got a full chunk */ + + delta = (1.0f - atten) / (fs * release); + round_to_zero(&delta); + for (i=0; i<10; i++) { + const int p = (chunk_num - 9 + i) & (NUM_CHUNKS - 1); + const float this_delta = (max / chunks[p] - atten) / + ((float)(i+1) * fs * 0.0005f + 1.0f); + + if (this_delta < delta) { + delta = this_delta; + } + } + + chunks[chunk_num++ & (NUM_CHUNKS - 1)] = peak; + peak = 0.0f; + chunk_pos = 0; + } + + buffer[(buffer_pos * 2) & (buffer_len - 1)] = in_1[pos] * trim + + 1.0e-30; + buffer[(buffer_pos * 2 + 1) & (buffer_len - 1)] = in_2[pos] * trim + + 1.0e-30; + + sig = fabs(in_1[pos]) > fabs(in_2[pos]) ? fabs(in_1[pos]) : + fabs(in_2[pos]); + sig += 1.0e-30; + if (sig * trim > peak) { + peak = sig * trim; + } + //round_to_zero(&peak); + //round_to_zero(&sig); + + atten += delta; + atten_lp = atten * 0.1f + atten_lp * 0.9f; + //round_to_zero(&atten_lp); + if (delta > 0.0f && atten > 1.0f) { + atten = 1.0f; + delta = 0.0f; + } + + buffer_write(out_1[pos], buffer[(buffer_pos * 2 - delay * 2) & + (buffer_len - 1)] * atten_lp); + buffer_write(out_2[pos], buffer[(buffer_pos * 2 - delay * 2 + 1) & + (buffer_len - 1)] * atten_lp); + round_to_zero(&out_1[pos]); + round_to_zero(&out_2[pos]); + + if (out_1[pos] < -max) { + #ifdef DEBUG + clip += 20.0*log10(out_1[pos] / -max); + clipc++; + if (fabs(out_1[pos] - max) > clipp) { + clipp = fabs(out_1[pos] / -max); + } + #endif + buffer_write(out_1[pos], -max); + } else if (out_1[pos] > max) { + #ifdef DEBUG + clip += 20.0*log10(out_1[pos] / max); + clipc++; + if (fabs(out_1[pos] - max) > clipp) { + clipp = fabs(out_1[pos] / max); + } + #endif + buffer_write(out_1[pos], max); + } + if (out_2[pos] < -max) { + #ifdef DEBUG + clip += 20.0*log10(out_2[pos] / -max); + clipc++; + if (fabs(out_2[pos] - max) > clipp) { + clipp = fabs(out_2[pos] / -max); + } + #endif + buffer_write(out_2[pos], -max); + } else if (out_2[pos] > max) { + #ifdef DEBUG + clip += 20.0*log10(out_2[pos] / max); + clipc++; + if (fabs(out_2[pos] - max) > clipp) { + clipp = fabs(out_2[pos] / max); + } + #endif + buffer_write(out_2[pos], max); + } + + buffer_pos++; + } + + #ifdef DEBUG + if (clipc > 0) { + printf("%d overs: %fdB avg, %fdB peak\n", clipc, clip/(float)clipc, 20.0*log10(clipp)); + } + #endif + + plugin_data->buffer_pos = buffer_pos; + plugin_data->peak = peak; + plugin_data->atten = atten; + plugin_data->atten_lp = atten_lp; + plugin_data->chunk_pos = chunk_pos; + plugin_data->chunk_num = chunk_num; + + *(plugin_data->attenuation) = -CO_DB(atten); + *(plugin_data->latency) = delay; +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainFastLookaheadLimiter(LADSPA_Handle instance, LADSPA_Data gain) { + ((FastLookaheadLimiter *)instance)->run_adding_gain = gain; +} + +static void runAddingFastLookaheadLimiter(LADSPA_Handle instance, unsigned long sample_count) { + FastLookaheadLimiter *plugin_data = (FastLookaheadLimiter *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Input gain (dB) (float value) */ + const LADSPA_Data ingain = *(plugin_data->ingain); + + /* Limit (dB) (float value) */ + const LADSPA_Data limit = *(plugin_data->limit); + + /* Release time (s) (float value) */ + const LADSPA_Data release = *(plugin_data->release); + + /* Input 1 (array of floats of length sample_count) */ + const LADSPA_Data * const in_1 = plugin_data->in_1; + + /* Input 2 (array of floats of length sample_count) */ + const LADSPA_Data * const in_2 = plugin_data->in_2; + + /* Output 1 (array of floats of length sample_count) */ + LADSPA_Data * const out_1 = plugin_data->out_1; + + /* Output 2 (array of floats of length sample_count) */ + LADSPA_Data * const out_2 = plugin_data->out_2; + float atten = plugin_data->atten; + float atten_lp = plugin_data->atten_lp; + LADSPA_Data * buffer = plugin_data->buffer; + unsigned int buffer_len = plugin_data->buffer_len; + unsigned int buffer_pos = plugin_data->buffer_pos; + unsigned int chunk_num = plugin_data->chunk_num; + unsigned int chunk_pos = plugin_data->chunk_pos; + unsigned int chunk_size = plugin_data->chunk_size; + float * chunks = plugin_data->chunks; + unsigned int delay = plugin_data->delay; + float delta = plugin_data->delta; + unsigned int fs = plugin_data->fs; + float peak = plugin_data->peak; + +#line 67 "fast_lookahead_limiter_1913.xml" + unsigned long pos; + const float max = DB_CO(limit); + const float trim = DB_CO(ingain); + float sig; + unsigned int i; + + #ifdef DEBUG + float clip = 0.0, clipp = 0.0; + int clipc = 0; + #endif + + for (pos = 0; pos < sample_count; pos++) { + if (chunk_pos++ == chunk_size) { + /* we've got a full chunk */ + + delta = (1.0f - atten) / (fs * release); + round_to_zero(&delta); + for (i=0; i<10; i++) { + const int p = (chunk_num - 9 + i) & (NUM_CHUNKS - 1); + const float this_delta = (max / chunks[p] - atten) / + ((float)(i+1) * fs * 0.0005f + 1.0f); + + if (this_delta < delta) { + delta = this_delta; + } + } + + chunks[chunk_num++ & (NUM_CHUNKS - 1)] = peak; + peak = 0.0f; + chunk_pos = 0; + } + + buffer[(buffer_pos * 2) & (buffer_len - 1)] = in_1[pos] * trim + + 1.0e-30; + buffer[(buffer_pos * 2 + 1) & (buffer_len - 1)] = in_2[pos] * trim + + 1.0e-30; + + sig = fabs(in_1[pos]) > fabs(in_2[pos]) ? fabs(in_1[pos]) : + fabs(in_2[pos]); + sig += 1.0e-30; + if (sig * trim > peak) { + peak = sig * trim; + } + //round_to_zero(&peak); + //round_to_zero(&sig); + + atten += delta; + atten_lp = atten * 0.1f + atten_lp * 0.9f; + //round_to_zero(&atten_lp); + if (delta > 0.0f && atten > 1.0f) { + atten = 1.0f; + delta = 0.0f; + } + + buffer_write(out_1[pos], buffer[(buffer_pos * 2 - delay * 2) & + (buffer_len - 1)] * atten_lp); + buffer_write(out_2[pos], buffer[(buffer_pos * 2 - delay * 2 + 1) & + (buffer_len - 1)] * atten_lp); + round_to_zero(&out_1[pos]); + round_to_zero(&out_2[pos]); + + if (out_1[pos] < -max) { + #ifdef DEBUG + clip += 20.0*log10(out_1[pos] / -max); + clipc++; + if (fabs(out_1[pos] - max) > clipp) { + clipp = fabs(out_1[pos] / -max); + } + #endif + buffer_write(out_1[pos], -max); + } else if (out_1[pos] > max) { + #ifdef DEBUG + clip += 20.0*log10(out_1[pos] / max); + clipc++; + if (fabs(out_1[pos] - max) > clipp) { + clipp = fabs(out_1[pos] / max); + } + #endif + buffer_write(out_1[pos], max); + } + if (out_2[pos] < -max) { + #ifdef DEBUG + clip += 20.0*log10(out_2[pos] / -max); + clipc++; + if (fabs(out_2[pos] - max) > clipp) { + clipp = fabs(out_2[pos] / -max); + } + #endif + buffer_write(out_2[pos], -max); + } else if (out_2[pos] > max) { + #ifdef DEBUG + clip += 20.0*log10(out_2[pos] / max); + clipc++; + if (fabs(out_2[pos] - max) > clipp) { + clipp = fabs(out_2[pos] / max); + } + #endif + buffer_write(out_2[pos], max); + } + + buffer_pos++; + } + + #ifdef DEBUG + if (clipc > 0) { + printf("%d overs: %fdB avg, %fdB peak\n", clipc, clip/(float)clipc, 20.0*log10(clipp)); + } + #endif + + plugin_data->buffer_pos = buffer_pos; + plugin_data->peak = peak; + plugin_data->atten = atten; + plugin_data->atten_lp = atten_lp; + plugin_data->chunk_pos = chunk_pos; + plugin_data->chunk_num = chunk_num; + + *(plugin_data->attenuation) = -CO_DB(atten); + *(plugin_data->latency) = delay; +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + fastLookaheadLimiterDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (fastLookaheadLimiterDescriptor) { + fastLookaheadLimiterDescriptor->UniqueID = 1913; + fastLookaheadLimiterDescriptor->Label = "fastLookaheadLimiter"; + fastLookaheadLimiterDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + fastLookaheadLimiterDescriptor->Name = + D_("Fast Lookahead limiter"); + fastLookaheadLimiterDescriptor->Maker = + "Steve Harris "; + fastLookaheadLimiterDescriptor->Copyright = + "GPL"; + fastLookaheadLimiterDescriptor->PortCount = 9; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(9, + sizeof(LADSPA_PortDescriptor)); + fastLookaheadLimiterDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(9, + sizeof(LADSPA_PortRangeHint)); + fastLookaheadLimiterDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(9, sizeof(char*)); + fastLookaheadLimiterDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Input gain (dB) */ + port_descriptors[FASTLOOKAHEADLIMITER_INGAIN] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[FASTLOOKAHEADLIMITER_INGAIN] = + D_("Input gain (dB)"); + port_range_hints[FASTLOOKAHEADLIMITER_INGAIN].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[FASTLOOKAHEADLIMITER_INGAIN].LowerBound = -20; + port_range_hints[FASTLOOKAHEADLIMITER_INGAIN].UpperBound = 20; + + /* Parameters for Limit (dB) */ + port_descriptors[FASTLOOKAHEADLIMITER_LIMIT] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[FASTLOOKAHEADLIMITER_LIMIT] = + D_("Limit (dB)"); + port_range_hints[FASTLOOKAHEADLIMITER_LIMIT].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[FASTLOOKAHEADLIMITER_LIMIT].LowerBound = -20; + port_range_hints[FASTLOOKAHEADLIMITER_LIMIT].UpperBound = 0; + + /* Parameters for Release time (s) */ + port_descriptors[FASTLOOKAHEADLIMITER_RELEASE] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[FASTLOOKAHEADLIMITER_RELEASE] = + D_("Release time (s)"); + port_range_hints[FASTLOOKAHEADLIMITER_RELEASE].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; + port_range_hints[FASTLOOKAHEADLIMITER_RELEASE].LowerBound = 0.01; + port_range_hints[FASTLOOKAHEADLIMITER_RELEASE].UpperBound = 2.0; + + /* Parameters for Attenuation (dB) */ + port_descriptors[FASTLOOKAHEADLIMITER_ATTENUATION] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_CONTROL; + port_names[FASTLOOKAHEADLIMITER_ATTENUATION] = + D_("Attenuation (dB)"); + port_range_hints[FASTLOOKAHEADLIMITER_ATTENUATION].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; + port_range_hints[FASTLOOKAHEADLIMITER_ATTENUATION].LowerBound = 0; + port_range_hints[FASTLOOKAHEADLIMITER_ATTENUATION].UpperBound = 70; + + /* Parameters for Input 1 */ + port_descriptors[FASTLOOKAHEADLIMITER_IN_1] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[FASTLOOKAHEADLIMITER_IN_1] = + D_("Input 1"); + port_range_hints[FASTLOOKAHEADLIMITER_IN_1].HintDescriptor = 0; + + /* Parameters for Input 2 */ + port_descriptors[FASTLOOKAHEADLIMITER_IN_2] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[FASTLOOKAHEADLIMITER_IN_2] = + D_("Input 2"); + port_range_hints[FASTLOOKAHEADLIMITER_IN_2].HintDescriptor = 0; + + /* Parameters for Output 1 */ + port_descriptors[FASTLOOKAHEADLIMITER_OUT_1] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[FASTLOOKAHEADLIMITER_OUT_1] = + D_("Output 1"); + port_range_hints[FASTLOOKAHEADLIMITER_OUT_1].HintDescriptor = 0; + + /* Parameters for Output 2 */ + port_descriptors[FASTLOOKAHEADLIMITER_OUT_2] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[FASTLOOKAHEADLIMITER_OUT_2] = + D_("Output 2"); + port_range_hints[FASTLOOKAHEADLIMITER_OUT_2].HintDescriptor = 0; + + /* Parameters for latency */ + port_descriptors[FASTLOOKAHEADLIMITER_LATENCY] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_CONTROL; + port_names[FASTLOOKAHEADLIMITER_LATENCY] = + D_("latency"); + port_range_hints[FASTLOOKAHEADLIMITER_LATENCY].HintDescriptor = 0; + + fastLookaheadLimiterDescriptor->activate = activateFastLookaheadLimiter; + fastLookaheadLimiterDescriptor->cleanup = cleanupFastLookaheadLimiter; + fastLookaheadLimiterDescriptor->connect_port = connectPortFastLookaheadLimiter; + fastLookaheadLimiterDescriptor->deactivate = NULL; + fastLookaheadLimiterDescriptor->instantiate = instantiateFastLookaheadLimiter; + fastLookaheadLimiterDescriptor->run = runFastLookaheadLimiter; + fastLookaheadLimiterDescriptor->run_adding = runAddingFastLookaheadLimiter; + fastLookaheadLimiterDescriptor->set_run_adding_gain = setRunAddingGainFastLookaheadLimiter; + } +} + +void _fini() { + if (fastLookaheadLimiterDescriptor) { + free((LADSPA_PortDescriptor *)fastLookaheadLimiterDescriptor->PortDescriptors); + free((char **)fastLookaheadLimiterDescriptor->PortNames); + free((LADSPA_PortRangeHint *)fastLookaheadLimiterDescriptor->PortRangeHints); + free(fastLookaheadLimiterDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/flanger_1191.c b/plugins/LadspaEffect/swh/flanger_1191.c new file mode 100644 index 000000000..cb91cadba --- /dev/null +++ b/plugins/LadspaEffect/swh/flanger_1191.c @@ -0,0 +1,555 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + +#line 10 "flanger_1191.xml" + +#include "ladspa-util.h" + +#define FLANGER_DELAY_BASE 0 +#define FLANGER_DETUNE 1 +#define FLANGER_LAW_FREQ 2 +#define FLANGER_FEEDBACK 3 +#define FLANGER_INPUT 4 +#define FLANGER_OUTPUT 5 + +static LADSPA_Descriptor *flangerDescriptor = NULL; + +typedef struct { + LADSPA_Data *delay_base; + LADSPA_Data *detune; + LADSPA_Data *law_freq; + LADSPA_Data *feedback; + LADSPA_Data *input; + LADSPA_Data *output; + long count; + long delay_pos; + long delay_size; + LADSPA_Data *delay_tbl; + float next_law_peak; + int next_law_pos; + long old_d_base; + float prev_law_peak; + int prev_law_pos; + long sample_rate; + LADSPA_Data run_adding_gain; +} Flanger; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return flangerDescriptor; + default: + return NULL; + } +} + +static void activateFlanger(LADSPA_Handle instance) { + Flanger *plugin_data = (Flanger *)instance; + long count = plugin_data->count; + long delay_pos = plugin_data->delay_pos; + long delay_size = plugin_data->delay_size; + LADSPA_Data *delay_tbl = plugin_data->delay_tbl; + float next_law_peak = plugin_data->next_law_peak; + int next_law_pos = plugin_data->next_law_pos; + long old_d_base = plugin_data->old_d_base; + float prev_law_peak = plugin_data->prev_law_peak; + int prev_law_pos = plugin_data->prev_law_pos; + long sample_rate = plugin_data->sample_rate; +#line 39 "flanger_1191.xml" + memset(delay_tbl, 0, sizeof(LADSPA_Data) * delay_size); + delay_pos = 0; + count = 0; + old_d_base = 0; + plugin_data->count = count; + plugin_data->delay_pos = delay_pos; + plugin_data->delay_size = delay_size; + plugin_data->delay_tbl = delay_tbl; + plugin_data->next_law_peak = next_law_peak; + plugin_data->next_law_pos = next_law_pos; + plugin_data->old_d_base = old_d_base; + plugin_data->prev_law_peak = prev_law_peak; + plugin_data->prev_law_pos = prev_law_pos; + plugin_data->sample_rate = sample_rate; + +} + +static void cleanupFlanger(LADSPA_Handle instance) { +#line 46 "flanger_1191.xml" + Flanger *plugin_data = (Flanger *)instance; + free(plugin_data->delay_tbl); + free(instance); +} + +static void connectPortFlanger( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + Flanger *plugin; + + plugin = (Flanger *)instance; + switch (port) { + case FLANGER_DELAY_BASE: + plugin->delay_base = data; + break; + case FLANGER_DETUNE: + plugin->detune = data; + break; + case FLANGER_LAW_FREQ: + plugin->law_freq = data; + break; + case FLANGER_FEEDBACK: + plugin->feedback = data; + break; + case FLANGER_INPUT: + plugin->input = data; + break; + case FLANGER_OUTPUT: + plugin->output = data; + break; + } +} + +static LADSPA_Handle instantiateFlanger( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + Flanger *plugin_data = (Flanger *)malloc(sizeof(Flanger)); + long count; + long delay_pos; + long delay_size; + LADSPA_Data *delay_tbl = NULL; + float next_law_peak; + int next_law_pos; + long old_d_base; + float prev_law_peak; + int prev_law_pos; + long sample_rate; + +#line 21 "flanger_1191.xml" + int min_size; + + sample_rate = s_rate; + + prev_law_peak = 0.0f; + next_law_peak = 1.0f; + prev_law_pos = 0; + next_law_pos = 10; + + min_size = sample_rate * 0.04f; + for (delay_size = 1024; delay_size < min_size; delay_size *= 2); + delay_tbl = malloc(sizeof(LADSPA_Data) * delay_size); + delay_pos = 0; + count = 0; + old_d_base = 0; + + plugin_data->count = count; + plugin_data->delay_pos = delay_pos; + plugin_data->delay_size = delay_size; + plugin_data->delay_tbl = delay_tbl; + plugin_data->next_law_peak = next_law_peak; + plugin_data->next_law_pos = next_law_pos; + plugin_data->old_d_base = old_d_base; + plugin_data->prev_law_peak = prev_law_peak; + plugin_data->prev_law_pos = prev_law_pos; + plugin_data->sample_rate = sample_rate; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runFlanger(LADSPA_Handle instance, unsigned long sample_count) { + Flanger *plugin_data = (Flanger *)instance; + + /* Delay base (ms) (float value) */ + const LADSPA_Data delay_base = *(plugin_data->delay_base); + + /* Max slowdown (ms) (float value) */ + const LADSPA_Data detune = *(plugin_data->detune); + + /* LFO frequency (Hz) (float value) */ + const LADSPA_Data law_freq = *(plugin_data->law_freq); + + /* Feedback (float value) */ + const LADSPA_Data feedback = *(plugin_data->feedback); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + long count = plugin_data->count; + long delay_pos = plugin_data->delay_pos; + long delay_size = plugin_data->delay_size; + LADSPA_Data * delay_tbl = plugin_data->delay_tbl; + float next_law_peak = plugin_data->next_law_peak; + int next_law_pos = plugin_data->next_law_pos; + long old_d_base = plugin_data->old_d_base; + float prev_law_peak = plugin_data->prev_law_peak; + int prev_law_pos = plugin_data->prev_law_pos; + long sample_rate = plugin_data->sample_rate; + +#line 50 "flanger_1191.xml" + unsigned long pos; + long d_base, new_d_base; + LADSPA_Data out; + float delay_depth; + float dp; // float delay position + float dp_frac; // fractional part + long dp_idx; // integer delay index + long law_p; // period of law + float frac = 0.0f, step; // Portion the way through the block + float law; /* law amplitude */ + float n_ph, p_ph; + const float fb = f_clamp(feedback, -0.999f, 0.999f); + + // Set law params + law_p = (float)sample_rate / law_freq; + if (law_p < 1) { + law_p = 1; + } + + // Calculate base delay size in samples + new_d_base = (LIMIT(f_round(delay_base), 0, 25) * sample_rate) / 1000; + + // Calculate delay depth in samples + delay_depth = f_clamp(detune * (float)sample_rate * 0.001f, 0.0f, delay_size - new_d_base - 1.0f); + + step = 1.0f/sample_count; + for (pos = 0; pos < sample_count; pos++) { + if (count % law_p == 0) { + // Value for amplitude of law peak + next_law_peak = (float)rand() / (float)RAND_MAX; + next_law_pos = count + law_p; + } else if (count % law_p == law_p / 2) { + // Value for amplitude of law peak + prev_law_peak = (float)rand() / (float)RAND_MAX; + prev_law_pos = count + law_p; + } + + // Calculate position in delay table + d_base = LIN_INTERP(frac, old_d_base, new_d_base); + n_ph = (float)(law_p - abs(next_law_pos - count))/(float)law_p; + p_ph = n_ph + 0.5f; + while (p_ph > 1.0f) { + p_ph -= 1.0f; + } + law = f_sin_sq(3.1415926f*p_ph)*prev_law_peak + + f_sin_sq(3.1415926f*n_ph)*next_law_peak; + + dp = (float)(delay_pos - d_base) - (delay_depth * law); + // Get the integer part + dp_idx = f_round(dp - 0.5f); + // Get the fractional part + dp_frac = dp - dp_idx; + + // Accumulate into output buffer + out = cube_interp(dp_frac, delay_tbl[(dp_idx-1) & (delay_size-1)], delay_tbl[dp_idx & (delay_size-1)], delay_tbl[(dp_idx+1) & (delay_size-1)], delay_tbl[(dp_idx+2) & (delay_size-1)]); + + // Store new delayed value + delay_tbl[delay_pos] = flush_to_zero(input[pos] + (fb * out)); + // Sometimes the delay can pick up NaN values, I'm not sure why + // and this is easier than fixing it + if (isnan(delay_tbl[delay_pos])) { + delay_tbl[delay_pos] = 0.0f; + } + + out = f_clamp(delay_tbl[delay_pos] * 0.707f, -1.0, 1.0); + buffer_write(output[pos], out); + + frac += step; + delay_pos = (delay_pos + 1) & (delay_size-1); + + count++; + } + + plugin_data->count = count; + plugin_data->prev_law_peak = prev_law_peak; + plugin_data->next_law_peak = next_law_peak; + plugin_data->prev_law_pos = prev_law_pos; + plugin_data->next_law_pos = next_law_pos; + plugin_data->delay_pos = delay_pos; + plugin_data->old_d_base = new_d_base; +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainFlanger(LADSPA_Handle instance, LADSPA_Data gain) { + ((Flanger *)instance)->run_adding_gain = gain; +} + +static void runAddingFlanger(LADSPA_Handle instance, unsigned long sample_count) { + Flanger *plugin_data = (Flanger *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Delay base (ms) (float value) */ + const LADSPA_Data delay_base = *(plugin_data->delay_base); + + /* Max slowdown (ms) (float value) */ + const LADSPA_Data detune = *(plugin_data->detune); + + /* LFO frequency (Hz) (float value) */ + const LADSPA_Data law_freq = *(plugin_data->law_freq); + + /* Feedback (float value) */ + const LADSPA_Data feedback = *(plugin_data->feedback); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + long count = plugin_data->count; + long delay_pos = plugin_data->delay_pos; + long delay_size = plugin_data->delay_size; + LADSPA_Data * delay_tbl = plugin_data->delay_tbl; + float next_law_peak = plugin_data->next_law_peak; + int next_law_pos = plugin_data->next_law_pos; + long old_d_base = plugin_data->old_d_base; + float prev_law_peak = plugin_data->prev_law_peak; + int prev_law_pos = plugin_data->prev_law_pos; + long sample_rate = plugin_data->sample_rate; + +#line 50 "flanger_1191.xml" + unsigned long pos; + long d_base, new_d_base; + LADSPA_Data out; + float delay_depth; + float dp; // float delay position + float dp_frac; // fractional part + long dp_idx; // integer delay index + long law_p; // period of law + float frac = 0.0f, step; // Portion the way through the block + float law; /* law amplitude */ + float n_ph, p_ph; + const float fb = f_clamp(feedback, -0.999f, 0.999f); + + // Set law params + law_p = (float)sample_rate / law_freq; + if (law_p < 1) { + law_p = 1; + } + + // Calculate base delay size in samples + new_d_base = (LIMIT(f_round(delay_base), 0, 25) * sample_rate) / 1000; + + // Calculate delay depth in samples + delay_depth = f_clamp(detune * (float)sample_rate * 0.001f, 0.0f, delay_size - new_d_base - 1.0f); + + step = 1.0f/sample_count; + for (pos = 0; pos < sample_count; pos++) { + if (count % law_p == 0) { + // Value for amplitude of law peak + next_law_peak = (float)rand() / (float)RAND_MAX; + next_law_pos = count + law_p; + } else if (count % law_p == law_p / 2) { + // Value for amplitude of law peak + prev_law_peak = (float)rand() / (float)RAND_MAX; + prev_law_pos = count + law_p; + } + + // Calculate position in delay table + d_base = LIN_INTERP(frac, old_d_base, new_d_base); + n_ph = (float)(law_p - abs(next_law_pos - count))/(float)law_p; + p_ph = n_ph + 0.5f; + while (p_ph > 1.0f) { + p_ph -= 1.0f; + } + law = f_sin_sq(3.1415926f*p_ph)*prev_law_peak + + f_sin_sq(3.1415926f*n_ph)*next_law_peak; + + dp = (float)(delay_pos - d_base) - (delay_depth * law); + // Get the integer part + dp_idx = f_round(dp - 0.5f); + // Get the fractional part + dp_frac = dp - dp_idx; + + // Accumulate into output buffer + out = cube_interp(dp_frac, delay_tbl[(dp_idx-1) & (delay_size-1)], delay_tbl[dp_idx & (delay_size-1)], delay_tbl[(dp_idx+1) & (delay_size-1)], delay_tbl[(dp_idx+2) & (delay_size-1)]); + + // Store new delayed value + delay_tbl[delay_pos] = flush_to_zero(input[pos] + (fb * out)); + // Sometimes the delay can pick up NaN values, I'm not sure why + // and this is easier than fixing it + if (isnan(delay_tbl[delay_pos])) { + delay_tbl[delay_pos] = 0.0f; + } + + out = f_clamp(delay_tbl[delay_pos] * 0.707f, -1.0, 1.0); + buffer_write(output[pos], out); + + frac += step; + delay_pos = (delay_pos + 1) & (delay_size-1); + + count++; + } + + plugin_data->count = count; + plugin_data->prev_law_peak = prev_law_peak; + plugin_data->next_law_peak = next_law_peak; + plugin_data->prev_law_pos = prev_law_pos; + plugin_data->next_law_pos = next_law_pos; + plugin_data->delay_pos = delay_pos; + plugin_data->old_d_base = new_d_base; +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + flangerDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (flangerDescriptor) { + flangerDescriptor->UniqueID = 1191; + flangerDescriptor->Label = "flanger"; + flangerDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + flangerDescriptor->Name = + D_("Flanger"); + flangerDescriptor->Maker = + "Steve Harris "; + flangerDescriptor->Copyright = + "GPL"; + flangerDescriptor->PortCount = 6; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(6, + sizeof(LADSPA_PortDescriptor)); + flangerDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(6, + sizeof(LADSPA_PortRangeHint)); + flangerDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(6, sizeof(char*)); + flangerDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Delay base (ms) */ + port_descriptors[FLANGER_DELAY_BASE] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[FLANGER_DELAY_BASE] = + D_("Delay base (ms)"); + port_range_hints[FLANGER_DELAY_BASE].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; + port_range_hints[FLANGER_DELAY_BASE].LowerBound = 0.1; + port_range_hints[FLANGER_DELAY_BASE].UpperBound = 25; + + /* Parameters for Max slowdown (ms) */ + port_descriptors[FLANGER_DETUNE] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[FLANGER_DETUNE] = + D_("Max slowdown (ms)"); + port_range_hints[FLANGER_DETUNE].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; + port_range_hints[FLANGER_DETUNE].LowerBound = 0; + port_range_hints[FLANGER_DETUNE].UpperBound = 10; + + /* Parameters for LFO frequency (Hz) */ + port_descriptors[FLANGER_LAW_FREQ] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[FLANGER_LAW_FREQ] = + D_("LFO frequency (Hz)"); + port_range_hints[FLANGER_LAW_FREQ].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW | LADSPA_HINT_LOGARITHMIC; + port_range_hints[FLANGER_LAW_FREQ].LowerBound = 0.05; + port_range_hints[FLANGER_LAW_FREQ].UpperBound = 100; + + /* Parameters for Feedback */ + port_descriptors[FLANGER_FEEDBACK] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[FLANGER_FEEDBACK] = + D_("Feedback"); + port_range_hints[FLANGER_FEEDBACK].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[FLANGER_FEEDBACK].LowerBound = -1; + port_range_hints[FLANGER_FEEDBACK].UpperBound = 1; + + /* Parameters for Input */ + port_descriptors[FLANGER_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[FLANGER_INPUT] = + D_("Input"); + port_range_hints[FLANGER_INPUT].HintDescriptor = 0; + + /* Parameters for Output */ + port_descriptors[FLANGER_OUTPUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[FLANGER_OUTPUT] = + D_("Output"); + port_range_hints[FLANGER_OUTPUT].HintDescriptor = 0; + + flangerDescriptor->activate = activateFlanger; + flangerDescriptor->cleanup = cleanupFlanger; + flangerDescriptor->connect_port = connectPortFlanger; + flangerDescriptor->deactivate = NULL; + flangerDescriptor->instantiate = instantiateFlanger; + flangerDescriptor->run = runFlanger; + flangerDescriptor->run_adding = runAddingFlanger; + flangerDescriptor->set_run_adding_gain = setRunAddingGainFlanger; + } +} + +void _fini() { + if (flangerDescriptor) { + free((LADSPA_PortDescriptor *)flangerDescriptor->PortDescriptors); + free((char **)flangerDescriptor->PortNames); + free((LADSPA_PortRangeHint *)flangerDescriptor->PortRangeHints); + free(flangerDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/foldover_1213.c b/plugins/LadspaEffect/swh/foldover_1213.c new file mode 100644 index 000000000..76119b5b3 --- /dev/null +++ b/plugins/LadspaEffect/swh/foldover_1213.c @@ -0,0 +1,266 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + + +#define FOLDOVER_DRIVE_P 0 +#define FOLDOVER_PUSH 1 +#define FOLDOVER_INPUT 2 +#define FOLDOVER_OUTPUT 3 + +static LADSPA_Descriptor *foldoverDescriptor = NULL; + +typedef struct { + LADSPA_Data *drive_p; + LADSPA_Data *push; + LADSPA_Data *input; + LADSPA_Data *output; + LADSPA_Data run_adding_gain; +} Foldover; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return foldoverDescriptor; + default: + return NULL; + } +} + +static void cleanupFoldover(LADSPA_Handle instance) { + free(instance); +} + +static void connectPortFoldover( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + Foldover *plugin; + + plugin = (Foldover *)instance; + switch (port) { + case FOLDOVER_DRIVE_P: + plugin->drive_p = data; + break; + case FOLDOVER_PUSH: + plugin->push = data; + break; + case FOLDOVER_INPUT: + plugin->input = data; + break; + case FOLDOVER_OUTPUT: + plugin->output = data; + break; + } +} + +static LADSPA_Handle instantiateFoldover( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + Foldover *plugin_data = (Foldover *)malloc(sizeof(Foldover)); + plugin_data->run_adding_gain = 1.0f; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runFoldover(LADSPA_Handle instance, unsigned long sample_count) { + Foldover *plugin_data = (Foldover *)instance; + + /* Drive (float value) */ + const LADSPA_Data drive_p = *(plugin_data->drive_p); + + /* Skew (float value) */ + const LADSPA_Data push = *(plugin_data->push); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + +#line 18 "foldover_1213.xml" + unsigned long pos; + float x; + const float drive = drive_p + 1.0f; + + for (pos = 0; pos < sample_count; pos++) { + x = input[pos] * drive + push; + buffer_write(output[pos], 1.5f * x - 0.5f * x * x * x); + } +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainFoldover(LADSPA_Handle instance, LADSPA_Data gain) { + ((Foldover *)instance)->run_adding_gain = gain; +} + +static void runAddingFoldover(LADSPA_Handle instance, unsigned long sample_count) { + Foldover *plugin_data = (Foldover *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Drive (float value) */ + const LADSPA_Data drive_p = *(plugin_data->drive_p); + + /* Skew (float value) */ + const LADSPA_Data push = *(plugin_data->push); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + +#line 18 "foldover_1213.xml" + unsigned long pos; + float x; + const float drive = drive_p + 1.0f; + + for (pos = 0; pos < sample_count; pos++) { + x = input[pos] * drive + push; + buffer_write(output[pos], 1.5f * x - 0.5f * x * x * x); + } +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + foldoverDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (foldoverDescriptor) { + foldoverDescriptor->UniqueID = 1213; + foldoverDescriptor->Label = "foldover"; + foldoverDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + foldoverDescriptor->Name = + D_("Foldover distortion"); + foldoverDescriptor->Maker = + "Steve Harris "; + foldoverDescriptor->Copyright = + "GPL"; + foldoverDescriptor->PortCount = 4; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(4, + sizeof(LADSPA_PortDescriptor)); + foldoverDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(4, + sizeof(LADSPA_PortRangeHint)); + foldoverDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(4, sizeof(char*)); + foldoverDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Drive */ + port_descriptors[FOLDOVER_DRIVE_P] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[FOLDOVER_DRIVE_P] = + D_("Drive"); + port_range_hints[FOLDOVER_DRIVE_P].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[FOLDOVER_DRIVE_P].LowerBound = 0; + port_range_hints[FOLDOVER_DRIVE_P].UpperBound = 1; + + /* Parameters for Skew */ + port_descriptors[FOLDOVER_PUSH] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[FOLDOVER_PUSH] = + D_("Skew"); + port_range_hints[FOLDOVER_PUSH].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[FOLDOVER_PUSH].LowerBound = 0; + port_range_hints[FOLDOVER_PUSH].UpperBound = 1; + + /* Parameters for Input */ + port_descriptors[FOLDOVER_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[FOLDOVER_INPUT] = + D_("Input"); + port_range_hints[FOLDOVER_INPUT].HintDescriptor = 0; + + /* Parameters for Output */ + port_descriptors[FOLDOVER_OUTPUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[FOLDOVER_OUTPUT] = + D_("Output"); + port_range_hints[FOLDOVER_OUTPUT].HintDescriptor = 0; + + foldoverDescriptor->activate = NULL; + foldoverDescriptor->cleanup = cleanupFoldover; + foldoverDescriptor->connect_port = connectPortFoldover; + foldoverDescriptor->deactivate = NULL; + foldoverDescriptor->instantiate = instantiateFoldover; + foldoverDescriptor->run = runFoldover; + foldoverDescriptor->run_adding = runAddingFoldover; + foldoverDescriptor->set_run_adding_gain = setRunAddingGainFoldover; + } +} + +void _fini() { + if (foldoverDescriptor) { + free((LADSPA_PortDescriptor *)foldoverDescriptor->PortDescriptors); + free((char **)foldoverDescriptor->PortNames); + free((LADSPA_PortRangeHint *)foldoverDescriptor->PortRangeHints); + free(foldoverDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/foverdrive_1196.c b/plugins/LadspaEffect/swh/foverdrive_1196.c new file mode 100644 index 000000000..d00eb052c --- /dev/null +++ b/plugins/LadspaEffect/swh/foverdrive_1196.c @@ -0,0 +1,245 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + + +#define FOVERDRIVE_DRIVE 0 +#define FOVERDRIVE_INPUT 1 +#define FOVERDRIVE_OUTPUT 2 + +static LADSPA_Descriptor *foverdriveDescriptor = NULL; + +typedef struct { + LADSPA_Data *drive; + LADSPA_Data *input; + LADSPA_Data *output; + LADSPA_Data run_adding_gain; +} Foverdrive; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return foverdriveDescriptor; + default: + return NULL; + } +} + +static void cleanupFoverdrive(LADSPA_Handle instance) { + free(instance); +} + +static void connectPortFoverdrive( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + Foverdrive *plugin; + + plugin = (Foverdrive *)instance; + switch (port) { + case FOVERDRIVE_DRIVE: + plugin->drive = data; + break; + case FOVERDRIVE_INPUT: + plugin->input = data; + break; + case FOVERDRIVE_OUTPUT: + plugin->output = data; + break; + } +} + +static LADSPA_Handle instantiateFoverdrive( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + Foverdrive *plugin_data = (Foverdrive *)malloc(sizeof(Foverdrive)); + plugin_data->run_adding_gain = 1.0f; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runFoverdrive(LADSPA_Handle instance, unsigned long sample_count) { + Foverdrive *plugin_data = (Foverdrive *)instance; + + /* Drive level (float value) */ + const LADSPA_Data drive = *(plugin_data->drive); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + +#line 16 "foverdrive_1196.xml" + unsigned long pos; + const float drivem1 = drive - 1.0f; + + for (pos = 0; pos < sample_count; pos++) { + LADSPA_Data x = input[pos]; + const float fx = fabs(x); + buffer_write(output[pos], x*(fx + drive)/(x*x + drivem1*fx + 1.0f)); + } +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainFoverdrive(LADSPA_Handle instance, LADSPA_Data gain) { + ((Foverdrive *)instance)->run_adding_gain = gain; +} + +static void runAddingFoverdrive(LADSPA_Handle instance, unsigned long sample_count) { + Foverdrive *plugin_data = (Foverdrive *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Drive level (float value) */ + const LADSPA_Data drive = *(plugin_data->drive); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + +#line 16 "foverdrive_1196.xml" + unsigned long pos; + const float drivem1 = drive - 1.0f; + + for (pos = 0; pos < sample_count; pos++) { + LADSPA_Data x = input[pos]; + const float fx = fabs(x); + buffer_write(output[pos], x*(fx + drive)/(x*x + drivem1*fx + 1.0f)); + } +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + foverdriveDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (foverdriveDescriptor) { + foverdriveDescriptor->UniqueID = 1196; + foverdriveDescriptor->Label = "foverdrive"; + foverdriveDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + foverdriveDescriptor->Name = + D_("Fast overdrive"); + foverdriveDescriptor->Maker = + "Steve Harris "; + foverdriveDescriptor->Copyright = + "GPL"; + foverdriveDescriptor->PortCount = 3; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(3, + sizeof(LADSPA_PortDescriptor)); + foverdriveDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(3, + sizeof(LADSPA_PortRangeHint)); + foverdriveDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(3, sizeof(char*)); + foverdriveDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Drive level */ + port_descriptors[FOVERDRIVE_DRIVE] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[FOVERDRIVE_DRIVE] = + D_("Drive level"); + port_range_hints[FOVERDRIVE_DRIVE].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MINIMUM; + port_range_hints[FOVERDRIVE_DRIVE].LowerBound = 1; + port_range_hints[FOVERDRIVE_DRIVE].UpperBound = 3; + + /* Parameters for Input */ + port_descriptors[FOVERDRIVE_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[FOVERDRIVE_INPUT] = + D_("Input"); + port_range_hints[FOVERDRIVE_INPUT].HintDescriptor = 0; + + /* Parameters for Output */ + port_descriptors[FOVERDRIVE_OUTPUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[FOVERDRIVE_OUTPUT] = + D_("Output"); + port_range_hints[FOVERDRIVE_OUTPUT].HintDescriptor = 0; + + foverdriveDescriptor->activate = NULL; + foverdriveDescriptor->cleanup = cleanupFoverdrive; + foverdriveDescriptor->connect_port = connectPortFoverdrive; + foverdriveDescriptor->deactivate = NULL; + foverdriveDescriptor->instantiate = instantiateFoverdrive; + foverdriveDescriptor->run = runFoverdrive; + foverdriveDescriptor->run_adding = runAddingFoverdrive; + foverdriveDescriptor->set_run_adding_gain = setRunAddingGainFoverdrive; + } +} + +void _fini() { + if (foverdriveDescriptor) { + free((LADSPA_PortDescriptor *)foverdriveDescriptor->PortDescriptors); + free((char **)foverdriveDescriptor->PortNames); + free((LADSPA_PortRangeHint *)foverdriveDescriptor->PortRangeHints); + free(foverdriveDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/freq_tracker_1418.c b/plugins/LadspaEffect/swh/freq_tracker_1418.c new file mode 100644 index 000000000..fff203f92 --- /dev/null +++ b/plugins/LadspaEffect/swh/freq_tracker_1418.c @@ -0,0 +1,330 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + +#line 10 "freq_tracker_1418.xml" + +#include "ladspa-util.h" + +#define FREQTRACKER_SPEED 0 +#define FREQTRACKER_INPUT 1 +#define FREQTRACKER_FREQ 2 + +static LADSPA_Descriptor *freqTrackerDescriptor = NULL; + +typedef struct { + LADSPA_Data *speed; + LADSPA_Data *input; + LADSPA_Data *freq; + int cross_time; + LADSPA_Data f; + LADSPA_Data fo; + float fs; + LADSPA_Data last_amp; + LADSPA_Data run_adding_gain; +} FreqTracker; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return freqTrackerDescriptor; + default: + return NULL; + } +} + +static void activateFreqTracker(LADSPA_Handle instance) { + FreqTracker *plugin_data = (FreqTracker *)instance; + int cross_time = plugin_data->cross_time; + LADSPA_Data f = plugin_data->f; + LADSPA_Data fo = plugin_data->fo; + float fs = plugin_data->fs; + LADSPA_Data last_amp = plugin_data->last_amp; +#line 27 "freq_tracker_1418.xml" + cross_time = 0; + f = 0.0f; + fo = 0.0f; + last_amp = 0.0f; + plugin_data->cross_time = cross_time; + plugin_data->f = f; + plugin_data->fo = fo; + plugin_data->fs = fs; + plugin_data->last_amp = last_amp; + +} + +static void cleanupFreqTracker(LADSPA_Handle instance) { + free(instance); +} + +static void connectPortFreqTracker( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + FreqTracker *plugin; + + plugin = (FreqTracker *)instance; + switch (port) { + case FREQTRACKER_SPEED: + plugin->speed = data; + break; + case FREQTRACKER_INPUT: + plugin->input = data; + break; + case FREQTRACKER_FREQ: + plugin->freq = data; + break; + } +} + +static LADSPA_Handle instantiateFreqTracker( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + FreqTracker *plugin_data = (FreqTracker *)malloc(sizeof(FreqTracker)); + int cross_time; + LADSPA_Data f; + LADSPA_Data fo; + float fs; + LADSPA_Data last_amp; + +#line 19 "freq_tracker_1418.xml" + fs = s_rate; + f = 0.0f; + fo = 0.0f; + cross_time = 0; + last_amp = 0.0f; + + plugin_data->cross_time = cross_time; + plugin_data->f = f; + plugin_data->fo = fo; + plugin_data->fs = fs; + plugin_data->last_amp = last_amp; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runFreqTracker(LADSPA_Handle instance, unsigned long sample_count) { + FreqTracker *plugin_data = (FreqTracker *)instance; + + /* Tracking speed (float value) */ + const LADSPA_Data speed = *(plugin_data->speed); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Frequency (Hz) (array of floats of length sample_count) */ + LADSPA_Data * const freq = plugin_data->freq; + int cross_time = plugin_data->cross_time; + LADSPA_Data f = plugin_data->f; + LADSPA_Data fo = plugin_data->fo; + float fs = plugin_data->fs; + LADSPA_Data last_amp = plugin_data->last_amp; + +#line 34 "freq_tracker_1418.xml" + unsigned long pos; + float xm1 = last_amp; + const float damp_lp = (1.0f - speed) * 0.9f; + const float damp_lpi = 1.0f - damp_lp; + + for (pos = 0; pos < sample_count; pos++) { + if (input[pos] < 0.0f && xm1 > 0.0f) { + if (cross_time > 3.0f) { + f = fs / ((float)cross_time * 2.0f); + } + cross_time = 0; + } + xm1 = input[pos]; + cross_time++; + fo = fo * damp_lp + f * damp_lpi; + fo = flush_to_zero(fo); + buffer_write(freq[pos], fo); + } + + plugin_data->last_amp = xm1; + plugin_data->fo = fo; + plugin_data->f = f; + plugin_data->cross_time = cross_time; +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainFreqTracker(LADSPA_Handle instance, LADSPA_Data gain) { + ((FreqTracker *)instance)->run_adding_gain = gain; +} + +static void runAddingFreqTracker(LADSPA_Handle instance, unsigned long sample_count) { + FreqTracker *plugin_data = (FreqTracker *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Tracking speed (float value) */ + const LADSPA_Data speed = *(plugin_data->speed); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Frequency (Hz) (array of floats of length sample_count) */ + LADSPA_Data * const freq = plugin_data->freq; + int cross_time = plugin_data->cross_time; + LADSPA_Data f = plugin_data->f; + LADSPA_Data fo = plugin_data->fo; + float fs = plugin_data->fs; + LADSPA_Data last_amp = plugin_data->last_amp; + +#line 34 "freq_tracker_1418.xml" + unsigned long pos; + float xm1 = last_amp; + const float damp_lp = (1.0f - speed) * 0.9f; + const float damp_lpi = 1.0f - damp_lp; + + for (pos = 0; pos < sample_count; pos++) { + if (input[pos] < 0.0f && xm1 > 0.0f) { + if (cross_time > 3.0f) { + f = fs / ((float)cross_time * 2.0f); + } + cross_time = 0; + } + xm1 = input[pos]; + cross_time++; + fo = fo * damp_lp + f * damp_lpi; + fo = flush_to_zero(fo); + buffer_write(freq[pos], fo); + } + + plugin_data->last_amp = xm1; + plugin_data->fo = fo; + plugin_data->f = f; + plugin_data->cross_time = cross_time; +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + freqTrackerDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (freqTrackerDescriptor) { + freqTrackerDescriptor->UniqueID = 1418; + freqTrackerDescriptor->Label = "freqTracker"; + freqTrackerDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + freqTrackerDescriptor->Name = + D_("Frequency tracker"); + freqTrackerDescriptor->Maker = + "Steve Harris "; + freqTrackerDescriptor->Copyright = + "GPL"; + freqTrackerDescriptor->PortCount = 3; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(3, + sizeof(LADSPA_PortDescriptor)); + freqTrackerDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(3, + sizeof(LADSPA_PortRangeHint)); + freqTrackerDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(3, sizeof(char*)); + freqTrackerDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Tracking speed */ + port_descriptors[FREQTRACKER_SPEED] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[FREQTRACKER_SPEED] = + D_("Tracking speed"); + port_range_hints[FREQTRACKER_SPEED].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; + port_range_hints[FREQTRACKER_SPEED].LowerBound = 0; + port_range_hints[FREQTRACKER_SPEED].UpperBound = 1; + + /* Parameters for Input */ + port_descriptors[FREQTRACKER_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[FREQTRACKER_INPUT] = + D_("Input"); + port_range_hints[FREQTRACKER_INPUT].HintDescriptor = 0; + + /* Parameters for Frequency (Hz) */ + port_descriptors[FREQTRACKER_FREQ] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[FREQTRACKER_FREQ] = + D_("Frequency (Hz)"); + port_range_hints[FREQTRACKER_FREQ].HintDescriptor = 0; + + freqTrackerDescriptor->activate = activateFreqTracker; + freqTrackerDescriptor->cleanup = cleanupFreqTracker; + freqTrackerDescriptor->connect_port = connectPortFreqTracker; + freqTrackerDescriptor->deactivate = NULL; + freqTrackerDescriptor->instantiate = instantiateFreqTracker; + freqTrackerDescriptor->run = runFreqTracker; + freqTrackerDescriptor->run_adding = runAddingFreqTracker; + freqTrackerDescriptor->set_run_adding_gain = setRunAddingGainFreqTracker; + } +} + +void _fini() { + if (freqTrackerDescriptor) { + free((LADSPA_PortDescriptor *)freqTrackerDescriptor->PortDescriptors); + free((char **)freqTrackerDescriptor->PortNames); + free((LADSPA_PortRangeHint *)freqTrackerDescriptor->PortRangeHints); + free(freqTrackerDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/gate_1410.c b/plugins/LadspaEffect/swh/gate_1410.c new file mode 100644 index 000000000..fddd78fc0 --- /dev/null +++ b/plugins/LadspaEffect/swh/gate_1410.c @@ -0,0 +1,593 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + +#line 10 "gate_1410.xml" + +#include "ladspa-util.h" +#include "util/biquad.h" + +#define ENV_TR 0.0001f + +#define CLOSED 1 +#define OPENING 2 +#define OPEN 3 +#define CLOSING 4 + +#define GATE_LF_FC 0 +#define GATE_HF_FC 1 +#define GATE_THRESHOLD 2 +#define GATE_ATTACK 3 +#define GATE_HOLD 4 +#define GATE_DECAY 5 +#define GATE_RANGE 6 +#define GATE_SELECT 7 +#define GATE_INPUT 8 +#define GATE_OUTPUT 9 + +static LADSPA_Descriptor *gateDescriptor = NULL; + +typedef struct { + LADSPA_Data *lf_fc; + LADSPA_Data *hf_fc; + LADSPA_Data *threshold; + LADSPA_Data *attack; + LADSPA_Data *hold; + LADSPA_Data *decay; + LADSPA_Data *range; + LADSPA_Data *select; + LADSPA_Data *input; + LADSPA_Data *output; + float env; + float fs; + float gate; + biquad * hf; + int hold_count; + biquad * lf; + int state; + LADSPA_Data run_adding_gain; +} Gate; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return gateDescriptor; + default: + return NULL; + } +} + +static void activateGate(LADSPA_Handle instance) { + Gate *plugin_data = (Gate *)instance; + float env = plugin_data->env; + float fs = plugin_data->fs; + float gate = plugin_data->gate; + biquad *hf = plugin_data->hf; + int hold_count = plugin_data->hold_count; + biquad *lf = plugin_data->lf; + int state = plugin_data->state; +#line 41 "gate_1410.xml" + env = 0.0f; + gate = 0.0f; + state = CLOSED; + biquad_init(lf); + biquad_init(hf); + plugin_data->env = env; + plugin_data->fs = fs; + plugin_data->gate = gate; + plugin_data->hf = hf; + plugin_data->hold_count = hold_count; + plugin_data->lf = lf; + plugin_data->state = state; + +} + +static void cleanupGate(LADSPA_Handle instance) { +#line 49 "gate_1410.xml" + Gate *plugin_data = (Gate *)instance; + free(plugin_data->lf); + free(plugin_data->hf); + free(instance); +} + +static void connectPortGate( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + Gate *plugin; + + plugin = (Gate *)instance; + switch (port) { + case GATE_LF_FC: + plugin->lf_fc = data; + break; + case GATE_HF_FC: + plugin->hf_fc = data; + break; + case GATE_THRESHOLD: + plugin->threshold = data; + break; + case GATE_ATTACK: + plugin->attack = data; + break; + case GATE_HOLD: + plugin->hold = data; + break; + case GATE_DECAY: + plugin->decay = data; + break; + case GATE_RANGE: + plugin->range = data; + break; + case GATE_SELECT: + plugin->select = data; + break; + case GATE_INPUT: + plugin->input = data; + break; + case GATE_OUTPUT: + plugin->output = data; + break; + } +} + +static LADSPA_Handle instantiateGate( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + Gate *plugin_data = (Gate *)malloc(sizeof(Gate)); + float env; + float fs; + float gate; + biquad *hf = NULL; + int hold_count; + biquad *lf = NULL; + int state; + +#line 28 "gate_1410.xml" + fs = s_rate; + env = 0.0f; + gate = 0.0f; + state = CLOSED; + hold_count = 0; + + lf = malloc(sizeof(biquad)); + hf = malloc(sizeof(biquad)); + biquad_init(lf); + biquad_init(hf); + + plugin_data->env = env; + plugin_data->fs = fs; + plugin_data->gate = gate; + plugin_data->hf = hf; + plugin_data->hold_count = hold_count; + plugin_data->lf = lf; + plugin_data->state = state; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runGate(LADSPA_Handle instance, unsigned long sample_count) { + Gate *plugin_data = (Gate *)instance; + + /* LF key filter (Hz) (float value) */ + const LADSPA_Data lf_fc = *(plugin_data->lf_fc); + + /* HF key filter (Hz) (float value) */ + const LADSPA_Data hf_fc = *(plugin_data->hf_fc); + + /* Threshold (dB) (float value) */ + const LADSPA_Data threshold = *(plugin_data->threshold); + + /* Attack (ms) (float value) */ + const LADSPA_Data attack = *(plugin_data->attack); + + /* Hold (ms) (float value) */ + const LADSPA_Data hold = *(plugin_data->hold); + + /* Decay (ms) (float value) */ + const LADSPA_Data decay = *(plugin_data->decay); + + /* Range (dB) (float value) */ + const LADSPA_Data range = *(plugin_data->range); + + /* Output select (-1 = key listen, 0 = gate, 1 = bypass) (float value) */ + const LADSPA_Data select = *(plugin_data->select); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + float env = plugin_data->env; + float fs = plugin_data->fs; + float gate = plugin_data->gate; + biquad * hf = plugin_data->hf; + int hold_count = plugin_data->hold_count; + biquad * lf = plugin_data->lf; + int state = plugin_data->state; + +#line 55 "gate_1410.xml" + unsigned long pos; + float cut = DB_CO(range); + float t_level = DB_CO(threshold); + float a_rate = 1000.0f / (attack * fs); + float d_rate = 1000.0f / (decay * fs); + float post_filter, apost_filter; + int op = f_round(select); + + ls_set_params(lf, lf_fc, -40.0f, 0.6f, fs); + hs_set_params(hf, hf_fc, -50.0f, 0.6f, fs); + + for (pos = 0; pos < sample_count; pos++) { + post_filter = biquad_run(lf, input[pos]); + post_filter = biquad_run(hf, post_filter); + apost_filter = fabs(post_filter); + + if (apost_filter > env) { + env = apost_filter; + } else { + env = apost_filter * ENV_TR + env * (1.0f - ENV_TR); + } + + if (state == CLOSED) { + if (env >= t_level) { + state = OPENING; + } + } else if (state == OPENING) { + gate += a_rate; + if (gate >= 1.0f) { + gate = 1.0f; + state = OPEN; + hold_count = f_round(hold * fs * 0.001f); + plugin_data->hold_count = hold_count; + } + } else if (state == OPEN) { + if (hold_count <= 0) { + if (env < t_level) { + state = CLOSING; + } + } else { + hold_count--; + } + } else if (state == CLOSING) { + gate -= d_rate; + if (env >= t_level) { + state = OPENING; + } else if (gate <= 0.0f) { + gate = 0.0f; + state = CLOSED; + } + } + + if (op == 0) { + buffer_write(output[pos], input[pos] * (cut * (1.0f - gate) + gate)); + } else if (op == -1) { + buffer_write(output[pos], post_filter); + } else { + buffer_write(output[pos], input[pos]); + } + } + + plugin_data->env = env; + plugin_data->gate = gate; + plugin_data->state = state; + plugin_data->hold_count = hold_count; +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainGate(LADSPA_Handle instance, LADSPA_Data gain) { + ((Gate *)instance)->run_adding_gain = gain; +} + +static void runAddingGate(LADSPA_Handle instance, unsigned long sample_count) { + Gate *plugin_data = (Gate *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* LF key filter (Hz) (float value) */ + const LADSPA_Data lf_fc = *(plugin_data->lf_fc); + + /* HF key filter (Hz) (float value) */ + const LADSPA_Data hf_fc = *(plugin_data->hf_fc); + + /* Threshold (dB) (float value) */ + const LADSPA_Data threshold = *(plugin_data->threshold); + + /* Attack (ms) (float value) */ + const LADSPA_Data attack = *(plugin_data->attack); + + /* Hold (ms) (float value) */ + const LADSPA_Data hold = *(plugin_data->hold); + + /* Decay (ms) (float value) */ + const LADSPA_Data decay = *(plugin_data->decay); + + /* Range (dB) (float value) */ + const LADSPA_Data range = *(plugin_data->range); + + /* Output select (-1 = key listen, 0 = gate, 1 = bypass) (float value) */ + const LADSPA_Data select = *(plugin_data->select); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + float env = plugin_data->env; + float fs = plugin_data->fs; + float gate = plugin_data->gate; + biquad * hf = plugin_data->hf; + int hold_count = plugin_data->hold_count; + biquad * lf = plugin_data->lf; + int state = plugin_data->state; + +#line 55 "gate_1410.xml" + unsigned long pos; + float cut = DB_CO(range); + float t_level = DB_CO(threshold); + float a_rate = 1000.0f / (attack * fs); + float d_rate = 1000.0f / (decay * fs); + float post_filter, apost_filter; + int op = f_round(select); + + ls_set_params(lf, lf_fc, -40.0f, 0.6f, fs); + hs_set_params(hf, hf_fc, -50.0f, 0.6f, fs); + + for (pos = 0; pos < sample_count; pos++) { + post_filter = biquad_run(lf, input[pos]); + post_filter = biquad_run(hf, post_filter); + apost_filter = fabs(post_filter); + + if (apost_filter > env) { + env = apost_filter; + } else { + env = apost_filter * ENV_TR + env * (1.0f - ENV_TR); + } + + if (state == CLOSED) { + if (env >= t_level) { + state = OPENING; + } + } else if (state == OPENING) { + gate += a_rate; + if (gate >= 1.0f) { + gate = 1.0f; + state = OPEN; + hold_count = f_round(hold * fs * 0.001f); + plugin_data->hold_count = hold_count; + } + } else if (state == OPEN) { + if (hold_count <= 0) { + if (env < t_level) { + state = CLOSING; + } + } else { + hold_count--; + } + } else if (state == CLOSING) { + gate -= d_rate; + if (env >= t_level) { + state = OPENING; + } else if (gate <= 0.0f) { + gate = 0.0f; + state = CLOSED; + } + } + + if (op == 0) { + buffer_write(output[pos], input[pos] * (cut * (1.0f - gate) + gate)); + } else if (op == -1) { + buffer_write(output[pos], post_filter); + } else { + buffer_write(output[pos], input[pos]); + } + } + + plugin_data->env = env; + plugin_data->gate = gate; + plugin_data->state = state; + plugin_data->hold_count = hold_count; +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + gateDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (gateDescriptor) { + gateDescriptor->UniqueID = 1410; + gateDescriptor->Label = "gate"; + gateDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + gateDescriptor->Name = + D_("Gate"); + gateDescriptor->Maker = + "Steve Harris "; + gateDescriptor->Copyright = + "GPL"; + gateDescriptor->PortCount = 10; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(10, + sizeof(LADSPA_PortDescriptor)); + gateDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(10, + sizeof(LADSPA_PortRangeHint)); + gateDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(10, sizeof(char*)); + gateDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for LF key filter (Hz) */ + port_descriptors[GATE_LF_FC] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[GATE_LF_FC] = + D_("LF key filter (Hz)"); + port_range_hints[GATE_LF_FC].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_SAMPLE_RATE | LADSPA_HINT_DEFAULT_MINIMUM; + port_range_hints[GATE_LF_FC].LowerBound = 0.0007f; + port_range_hints[GATE_LF_FC].UpperBound = 0.1; + + /* Parameters for HF key filter (Hz) */ + port_descriptors[GATE_HF_FC] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[GATE_HF_FC] = + D_("HF key filter (Hz)"); + port_range_hints[GATE_HF_FC].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_SAMPLE_RATE | LADSPA_HINT_DEFAULT_MAXIMUM; + port_range_hints[GATE_HF_FC].LowerBound = 0.005f; + port_range_hints[GATE_HF_FC].UpperBound = 0.49; + + /* Parameters for Threshold (dB) */ + port_descriptors[GATE_THRESHOLD] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[GATE_THRESHOLD] = + D_("Threshold (dB)"); + port_range_hints[GATE_THRESHOLD].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MINIMUM; + port_range_hints[GATE_THRESHOLD].LowerBound = -70; + port_range_hints[GATE_THRESHOLD].UpperBound = +20; + + /* Parameters for Attack (ms) */ + port_descriptors[GATE_ATTACK] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[GATE_ATTACK] = + D_("Attack (ms)"); + port_range_hints[GATE_ATTACK].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; + port_range_hints[GATE_ATTACK].LowerBound = 0.01; + port_range_hints[GATE_ATTACK].UpperBound = 1000; + + /* Parameters for Hold (ms) */ + port_descriptors[GATE_HOLD] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[GATE_HOLD] = + D_("Hold (ms)"); + port_range_hints[GATE_HOLD].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_HIGH; + port_range_hints[GATE_HOLD].LowerBound = 2; + port_range_hints[GATE_HOLD].UpperBound = 2000; + + /* Parameters for Decay (ms) */ + port_descriptors[GATE_DECAY] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[GATE_DECAY] = + D_("Decay (ms)"); + port_range_hints[GATE_DECAY].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; + port_range_hints[GATE_DECAY].LowerBound = 2; + port_range_hints[GATE_DECAY].UpperBound = 4000; + + /* Parameters for Range (dB) */ + port_descriptors[GATE_RANGE] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[GATE_RANGE] = + D_("Range (dB)"); + port_range_hints[GATE_RANGE].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MINIMUM; + port_range_hints[GATE_RANGE].LowerBound = -90; + port_range_hints[GATE_RANGE].UpperBound = 0; + + /* Parameters for Output select (-1 = key listen, 0 = gate, 1 = bypass) */ + port_descriptors[GATE_SELECT] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[GATE_SELECT] = + D_("Output select (-1 = key listen, 0 = gate, 1 = bypass)"); + port_range_hints[GATE_SELECT].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_INTEGER | LADSPA_HINT_DEFAULT_0; + port_range_hints[GATE_SELECT].LowerBound = -1; + port_range_hints[GATE_SELECT].UpperBound = 1; + + /* Parameters for Input */ + port_descriptors[GATE_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[GATE_INPUT] = + D_("Input"); + port_range_hints[GATE_INPUT].HintDescriptor = 0; + + /* Parameters for Output */ + port_descriptors[GATE_OUTPUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[GATE_OUTPUT] = + D_("Output"); + port_range_hints[GATE_OUTPUT].HintDescriptor = 0; + + gateDescriptor->activate = activateGate; + gateDescriptor->cleanup = cleanupGate; + gateDescriptor->connect_port = connectPortGate; + gateDescriptor->deactivate = NULL; + gateDescriptor->instantiate = instantiateGate; + gateDescriptor->run = runGate; + gateDescriptor->run_adding = runAddingGate; + gateDescriptor->set_run_adding_gain = setRunAddingGainGate; + } +} + +void _fini() { + if (gateDescriptor) { + free((LADSPA_PortDescriptor *)gateDescriptor->PortDescriptors); + free((char **)gateDescriptor->PortNames); + free((LADSPA_PortRangeHint *)gateDescriptor->PortRangeHints); + free(gateDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/giant_flange_1437.c b/plugins/LadspaEffect/swh/giant_flange_1437.c new file mode 100644 index 000000000..967334c6e --- /dev/null +++ b/plugins/LadspaEffect/swh/giant_flange_1437.c @@ -0,0 +1,648 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + +#line 10 "giant_flange_1437.xml" + +#include +#include "ladspa-util.h" + +#define INT_SCALE 16384.0f +/* INT_SCALE reciprocal includes factor of two scaling */ +#define INT_SCALE_R 0.000030517578125f + +#define MAX_AMP 1.0f +#define CLIP 0.8f +#define CLIP_A ((MAX_AMP - CLIP) * (MAX_AMP - CLIP)) +#define CLIP_B (MAX_AMP - 2.0f * CLIP) + +#define GIANTFLANGE_DELDOUBLE 0 +#define GIANTFLANGE_FREQ1 1 +#define GIANTFLANGE_DELAY1 2 +#define GIANTFLANGE_FREQ2 3 +#define GIANTFLANGE_DELAY2 4 +#define GIANTFLANGE_FEEDBACK 5 +#define GIANTFLANGE_WET 6 +#define GIANTFLANGE_INPUT 7 +#define GIANTFLANGE_OUTPUT 8 + +static LADSPA_Descriptor *giantFlangeDescriptor = NULL; + +typedef struct { + LADSPA_Data *deldouble; + LADSPA_Data *freq1; + LADSPA_Data *delay1; + LADSPA_Data *freq2; + LADSPA_Data *delay2; + LADSPA_Data *feedback; + LADSPA_Data *wet; + LADSPA_Data *input; + LADSPA_Data *output; + int16_t * buffer; + unsigned int buffer_mask; + unsigned int buffer_pos; + float fs; + float x1; + float x2; + float y1; + float y2; + LADSPA_Data run_adding_gain; +} GiantFlange; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return giantFlangeDescriptor; + default: + return NULL; + } +} + +static void activateGiantFlange(LADSPA_Handle instance) { + GiantFlange *plugin_data = (GiantFlange *)instance; + int16_t *buffer = plugin_data->buffer; + unsigned int buffer_mask = plugin_data->buffer_mask; + unsigned int buffer_pos = plugin_data->buffer_pos; + float fs = plugin_data->fs; + float x1 = plugin_data->x1; + float x2 = plugin_data->x2; + float y1 = plugin_data->y1; + float y2 = plugin_data->y2; +#line 51 "giant_flange_1437.xml" + memset(buffer, 0, (buffer_mask + 1) * sizeof(int16_t)); + plugin_data->buffer = buffer; + plugin_data->buffer_mask = buffer_mask; + plugin_data->buffer_pos = buffer_pos; + plugin_data->fs = fs; + plugin_data->x1 = x1; + plugin_data->x2 = x2; + plugin_data->y1 = y1; + plugin_data->y2 = y2; + +} + +static void cleanupGiantFlange(LADSPA_Handle instance) { +#line 55 "giant_flange_1437.xml" + GiantFlange *plugin_data = (GiantFlange *)instance; + free(plugin_data->buffer); + free(instance); +} + +static void connectPortGiantFlange( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + GiantFlange *plugin; + + plugin = (GiantFlange *)instance; + switch (port) { + case GIANTFLANGE_DELDOUBLE: + plugin->deldouble = data; + break; + case GIANTFLANGE_FREQ1: + plugin->freq1 = data; + break; + case GIANTFLANGE_DELAY1: + plugin->delay1 = data; + break; + case GIANTFLANGE_FREQ2: + plugin->freq2 = data; + break; + case GIANTFLANGE_DELAY2: + plugin->delay2 = data; + break; + case GIANTFLANGE_FEEDBACK: + plugin->feedback = data; + break; + case GIANTFLANGE_WET: + plugin->wet = data; + break; + case GIANTFLANGE_INPUT: + plugin->input = data; + break; + case GIANTFLANGE_OUTPUT: + plugin->output = data; + break; + } +} + +static LADSPA_Handle instantiateGiantFlange( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + GiantFlange *plugin_data = (GiantFlange *)malloc(sizeof(GiantFlange)); + int16_t *buffer = NULL; + unsigned int buffer_mask; + unsigned int buffer_pos; + float fs; + float x1; + float x2; + float y1; + float y2; + +#line 35 "giant_flange_1437.xml" + int buffer_size = 32768; + + fs = s_rate; + while (buffer_size < fs * 10.5f) { + buffer_size *= 2; + } + buffer = calloc(buffer_size, sizeof(int16_t)); + buffer_mask = buffer_size - 1; + buffer_pos = 0; + x1 = 0.5f; + y1 = 0.0f; + x2 = 0.5f; + y2 = 0.0f; + + plugin_data->buffer = buffer; + plugin_data->buffer_mask = buffer_mask; + plugin_data->buffer_pos = buffer_pos; + plugin_data->fs = fs; + plugin_data->x1 = x1; + plugin_data->x2 = x2; + plugin_data->y1 = y1; + plugin_data->y2 = y2; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runGiantFlange(LADSPA_Handle instance, unsigned long sample_count) { + GiantFlange *plugin_data = (GiantFlange *)instance; + + /* Double delay (float value) */ + const LADSPA_Data deldouble = *(plugin_data->deldouble); + + /* LFO frequency 1 (Hz) (float value) */ + const LADSPA_Data freq1 = *(plugin_data->freq1); + + /* Delay 1 range (s) (float value) */ + const LADSPA_Data delay1 = *(plugin_data->delay1); + + /* LFO frequency 2 (Hz) (float value) */ + const LADSPA_Data freq2 = *(plugin_data->freq2); + + /* Delay 2 range (s) (float value) */ + const LADSPA_Data delay2 = *(plugin_data->delay2); + + /* Feedback (float value) */ + const LADSPA_Data feedback = *(plugin_data->feedback); + + /* Dry/Wet level (float value) */ + const LADSPA_Data wet = *(plugin_data->wet); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + int16_t * buffer = plugin_data->buffer; + unsigned int buffer_mask = plugin_data->buffer_mask; + unsigned int buffer_pos = plugin_data->buffer_pos; + float fs = plugin_data->fs; + float x1 = plugin_data->x1; + float x2 = plugin_data->x2; + float y1 = plugin_data->y1; + float y2 = plugin_data->y2; + +#line 59 "giant_flange_1437.xml" + unsigned long pos; + const float omega1 = 6.2831852f * (freq1 / fs); + const float omega2 = 6.2831852f * (freq2 / fs); + float fb; + float d1, d2; + float d1out, d2out; + float fbs; + + if (feedback > 99.0f) { + fb = 0.99f; + } else if (feedback < -99.0f) { + fb = -0.99f; + } else { + fb = feedback * 0.01f; + } + + if (f_round(deldouble)) { + const float dr1 = delay1 * fs * 0.25f; + const float dr2 = delay2 * fs * 0.25f; + + for (pos = 0; pos < sample_count; pos++) { + /* Write input into delay line */ + buffer[buffer_pos] = f_round(input[pos] * INT_SCALE); + + /* Calcuate delays */ + d1 = (x1 + 1.0f) * dr1; + d2 = (y2 + 1.0f) * dr2; + + d1out = buffer[(buffer_pos - f_round(d1)) & buffer_mask] * INT_SCALE_R; + d2out = buffer[(buffer_pos - f_round(d2)) & buffer_mask] * INT_SCALE_R; + + /* Add feedback, must be done afterwards for case where delay = 0 */ + fbs = input[pos] + (d1out + d2out) * fb; + if(fbs < CLIP && fbs > -CLIP) { + buffer[buffer_pos] = fbs * INT_SCALE; + } else if (fbs > 0.0f) { + buffer[buffer_pos] = (MAX_AMP - (CLIP_A / (CLIP_B + fbs))) * + INT_SCALE; + } else { + buffer[buffer_pos] = (MAX_AMP - (CLIP_A / (CLIP_B - fbs))) * + -INT_SCALE; + } + + /* Write output */ + buffer_write(output[pos], LIN_INTERP(wet, input[pos], d1out + d2out)); + + if (pos % 2) { + buffer_pos = (buffer_pos + 1) & buffer_mask; + } + + /* Run LFOs */ + x1 -= omega1 * y1; + y1 += omega1 * x1; + x2 -= omega2 * y2; + y2 += omega2 * x2; + } + } else { + const float dr1 = delay1 * fs * 0.5f; + const float dr2 = delay2 * fs * 0.5f; + + for (pos = 0; pos < sample_count; pos++) { + /* Write input into delay line */ + buffer[buffer_pos] = f_round(input[pos] * INT_SCALE); + + /* Calcuate delays */ + d1 = (x1 + 1.0f) * dr1; + d2 = (y2 + 1.0f) * dr2; + + d1out = buffer[(buffer_pos - f_round(d1)) & buffer_mask] * INT_SCALE_R; + d2out = buffer[(buffer_pos - f_round(d2)) & buffer_mask] * INT_SCALE_R; + + /* Add feedback, must be done afterwards for case where delay = 0 */ + fbs = input[pos] + (d1out + d2out) * fb; + if(fbs < CLIP && fbs > -CLIP) { + buffer[buffer_pos] = fbs * INT_SCALE; + } else if (fbs > 0.0f) { + buffer[buffer_pos] = (MAX_AMP - (CLIP_A / (CLIP_B + fbs))) * + INT_SCALE; + } else { + buffer[buffer_pos] = (MAX_AMP - (CLIP_A / (CLIP_B - fbs))) * + -INT_SCALE; + } + + /* Write output */ + buffer_write(output[pos], LIN_INTERP(wet, input[pos], d1out + d2out)); + + buffer_pos = (buffer_pos + 1) & buffer_mask; + + /* Run LFOs */ + x1 -= omega1 * y1; + y1 += omega1 * x1; + x2 -= omega2 * y2; + y2 += omega2 * x2; + } + } + + plugin_data->x1 = x1; + plugin_data->y1 = y1; + plugin_data->x2 = x2; + plugin_data->y2 = y2; + plugin_data->buffer_pos = buffer_pos; +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainGiantFlange(LADSPA_Handle instance, LADSPA_Data gain) { + ((GiantFlange *)instance)->run_adding_gain = gain; +} + +static void runAddingGiantFlange(LADSPA_Handle instance, unsigned long sample_count) { + GiantFlange *plugin_data = (GiantFlange *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Double delay (float value) */ + const LADSPA_Data deldouble = *(plugin_data->deldouble); + + /* LFO frequency 1 (Hz) (float value) */ + const LADSPA_Data freq1 = *(plugin_data->freq1); + + /* Delay 1 range (s) (float value) */ + const LADSPA_Data delay1 = *(plugin_data->delay1); + + /* LFO frequency 2 (Hz) (float value) */ + const LADSPA_Data freq2 = *(plugin_data->freq2); + + /* Delay 2 range (s) (float value) */ + const LADSPA_Data delay2 = *(plugin_data->delay2); + + /* Feedback (float value) */ + const LADSPA_Data feedback = *(plugin_data->feedback); + + /* Dry/Wet level (float value) */ + const LADSPA_Data wet = *(plugin_data->wet); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + int16_t * buffer = plugin_data->buffer; + unsigned int buffer_mask = plugin_data->buffer_mask; + unsigned int buffer_pos = plugin_data->buffer_pos; + float fs = plugin_data->fs; + float x1 = plugin_data->x1; + float x2 = plugin_data->x2; + float y1 = plugin_data->y1; + float y2 = plugin_data->y2; + +#line 59 "giant_flange_1437.xml" + unsigned long pos; + const float omega1 = 6.2831852f * (freq1 / fs); + const float omega2 = 6.2831852f * (freq2 / fs); + float fb; + float d1, d2; + float d1out, d2out; + float fbs; + + if (feedback > 99.0f) { + fb = 0.99f; + } else if (feedback < -99.0f) { + fb = -0.99f; + } else { + fb = feedback * 0.01f; + } + + if (f_round(deldouble)) { + const float dr1 = delay1 * fs * 0.25f; + const float dr2 = delay2 * fs * 0.25f; + + for (pos = 0; pos < sample_count; pos++) { + /* Write input into delay line */ + buffer[buffer_pos] = f_round(input[pos] * INT_SCALE); + + /* Calcuate delays */ + d1 = (x1 + 1.0f) * dr1; + d2 = (y2 + 1.0f) * dr2; + + d1out = buffer[(buffer_pos - f_round(d1)) & buffer_mask] * INT_SCALE_R; + d2out = buffer[(buffer_pos - f_round(d2)) & buffer_mask] * INT_SCALE_R; + + /* Add feedback, must be done afterwards for case where delay = 0 */ + fbs = input[pos] + (d1out + d2out) * fb; + if(fbs < CLIP && fbs > -CLIP) { + buffer[buffer_pos] = fbs * INT_SCALE; + } else if (fbs > 0.0f) { + buffer[buffer_pos] = (MAX_AMP - (CLIP_A / (CLIP_B + fbs))) * + INT_SCALE; + } else { + buffer[buffer_pos] = (MAX_AMP - (CLIP_A / (CLIP_B - fbs))) * + -INT_SCALE; + } + + /* Write output */ + buffer_write(output[pos], LIN_INTERP(wet, input[pos], d1out + d2out)); + + if (pos % 2) { + buffer_pos = (buffer_pos + 1) & buffer_mask; + } + + /* Run LFOs */ + x1 -= omega1 * y1; + y1 += omega1 * x1; + x2 -= omega2 * y2; + y2 += omega2 * x2; + } + } else { + const float dr1 = delay1 * fs * 0.5f; + const float dr2 = delay2 * fs * 0.5f; + + for (pos = 0; pos < sample_count; pos++) { + /* Write input into delay line */ + buffer[buffer_pos] = f_round(input[pos] * INT_SCALE); + + /* Calcuate delays */ + d1 = (x1 + 1.0f) * dr1; + d2 = (y2 + 1.0f) * dr2; + + d1out = buffer[(buffer_pos - f_round(d1)) & buffer_mask] * INT_SCALE_R; + d2out = buffer[(buffer_pos - f_round(d2)) & buffer_mask] * INT_SCALE_R; + + /* Add feedback, must be done afterwards for case where delay = 0 */ + fbs = input[pos] + (d1out + d2out) * fb; + if(fbs < CLIP && fbs > -CLIP) { + buffer[buffer_pos] = fbs * INT_SCALE; + } else if (fbs > 0.0f) { + buffer[buffer_pos] = (MAX_AMP - (CLIP_A / (CLIP_B + fbs))) * + INT_SCALE; + } else { + buffer[buffer_pos] = (MAX_AMP - (CLIP_A / (CLIP_B - fbs))) * + -INT_SCALE; + } + + /* Write output */ + buffer_write(output[pos], LIN_INTERP(wet, input[pos], d1out + d2out)); + + buffer_pos = (buffer_pos + 1) & buffer_mask; + + /* Run LFOs */ + x1 -= omega1 * y1; + y1 += omega1 * x1; + x2 -= omega2 * y2; + y2 += omega2 * x2; + } + } + + plugin_data->x1 = x1; + plugin_data->y1 = y1; + plugin_data->x2 = x2; + plugin_data->y2 = y2; + plugin_data->buffer_pos = buffer_pos; +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + giantFlangeDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (giantFlangeDescriptor) { + giantFlangeDescriptor->UniqueID = 1437; + giantFlangeDescriptor->Label = "giantFlange"; + giantFlangeDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + giantFlangeDescriptor->Name = + D_("Giant flange"); + giantFlangeDescriptor->Maker = + "Steve Harris "; + giantFlangeDescriptor->Copyright = + "GPL"; + giantFlangeDescriptor->PortCount = 9; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(9, + sizeof(LADSPA_PortDescriptor)); + giantFlangeDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(9, + sizeof(LADSPA_PortRangeHint)); + giantFlangeDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(9, sizeof(char*)); + giantFlangeDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Double delay */ + port_descriptors[GIANTFLANGE_DELDOUBLE] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[GIANTFLANGE_DELDOUBLE] = + D_("Double delay"); + port_range_hints[GIANTFLANGE_DELDOUBLE].HintDescriptor = 0; + + /* Parameters for LFO frequency 1 (Hz) */ + port_descriptors[GIANTFLANGE_FREQ1] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[GIANTFLANGE_FREQ1] = + D_("LFO frequency 1 (Hz)"); + port_range_hints[GIANTFLANGE_FREQ1].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1; + port_range_hints[GIANTFLANGE_FREQ1].LowerBound = 0; + port_range_hints[GIANTFLANGE_FREQ1].UpperBound = 30.0; + + /* Parameters for Delay 1 range (s) */ + port_descriptors[GIANTFLANGE_DELAY1] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[GIANTFLANGE_DELAY1] = + D_("Delay 1 range (s)"); + port_range_hints[GIANTFLANGE_DELAY1].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; + port_range_hints[GIANTFLANGE_DELAY1].LowerBound = 0; + port_range_hints[GIANTFLANGE_DELAY1].UpperBound = 10.5; + + /* Parameters for LFO frequency 2 (Hz) */ + port_descriptors[GIANTFLANGE_FREQ2] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[GIANTFLANGE_FREQ2] = + D_("LFO frequency 2 (Hz)"); + port_range_hints[GIANTFLANGE_FREQ2].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1; + port_range_hints[GIANTFLANGE_FREQ2].LowerBound = 0; + port_range_hints[GIANTFLANGE_FREQ2].UpperBound = 30.0; + + /* Parameters for Delay 2 range (s) */ + port_descriptors[GIANTFLANGE_DELAY2] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[GIANTFLANGE_DELAY2] = + D_("Delay 2 range (s)"); + port_range_hints[GIANTFLANGE_DELAY2].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[GIANTFLANGE_DELAY2].LowerBound = 0; + port_range_hints[GIANTFLANGE_DELAY2].UpperBound = 10.5; + + /* Parameters for Feedback */ + port_descriptors[GIANTFLANGE_FEEDBACK] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[GIANTFLANGE_FEEDBACK] = + D_("Feedback"); + port_range_hints[GIANTFLANGE_FEEDBACK].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[GIANTFLANGE_FEEDBACK].LowerBound = -100; + port_range_hints[GIANTFLANGE_FEEDBACK].UpperBound = 100; + + /* Parameters for Dry/Wet level */ + port_descriptors[GIANTFLANGE_WET] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[GIANTFLANGE_WET] = + D_("Dry/Wet level"); + port_range_hints[GIANTFLANGE_WET].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[GIANTFLANGE_WET].LowerBound = 0; + port_range_hints[GIANTFLANGE_WET].UpperBound = 1; + + /* Parameters for Input */ + port_descriptors[GIANTFLANGE_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[GIANTFLANGE_INPUT] = + D_("Input"); + port_range_hints[GIANTFLANGE_INPUT].HintDescriptor = 0; + + /* Parameters for Output */ + port_descriptors[GIANTFLANGE_OUTPUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[GIANTFLANGE_OUTPUT] = + D_("Output"); + port_range_hints[GIANTFLANGE_OUTPUT].HintDescriptor = 0; + + giantFlangeDescriptor->activate = activateGiantFlange; + giantFlangeDescriptor->cleanup = cleanupGiantFlange; + giantFlangeDescriptor->connect_port = connectPortGiantFlange; + giantFlangeDescriptor->deactivate = NULL; + giantFlangeDescriptor->instantiate = instantiateGiantFlange; + giantFlangeDescriptor->run = runGiantFlange; + giantFlangeDescriptor->run_adding = runAddingGiantFlange; + giantFlangeDescriptor->set_run_adding_gain = setRunAddingGainGiantFlange; + } +} + +void _fini() { + if (giantFlangeDescriptor) { + free((LADSPA_PortDescriptor *)giantFlangeDescriptor->PortDescriptors); + free((char **)giantFlangeDescriptor->PortNames); + free((LADSPA_PortRangeHint *)giantFlangeDescriptor->PortRangeHints); + free(giantFlangeDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/gong_1424.c b/plugins/LadspaEffect/swh/gong_1424.c new file mode 100644 index 000000000..deca3cd9e --- /dev/null +++ b/plugins/LadspaEffect/swh/gong_1424.c @@ -0,0 +1,958 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + +#line 10 "gong_1424.xml" + +#include "util/waveguide_nl.h" + +#define RUN_WG(n, junct_a, junct_b) waveguide_nl_process(w[n], junct_a - out[n*2+1], junct_b - out[n*2], out+n*2, out+n*2+1) + +#define GONG_DAMP_I 0 +#define GONG_DAMP_O 1 +#define GONG_MICPOS 2 +#define GONG_SCALE0 3 +#define GONG_APA0 4 +#define GONG_APB0 5 +#define GONG_SCALE1 6 +#define GONG_APA1 7 +#define GONG_APB1 8 +#define GONG_SCALE2 9 +#define GONG_APA2 10 +#define GONG_APB2 11 +#define GONG_SCALE3 12 +#define GONG_APA3 13 +#define GONG_APB3 14 +#define GONG_SCALE4 15 +#define GONG_APA4 16 +#define GONG_APB4 17 +#define GONG_SCALE5 18 +#define GONG_APA5 19 +#define GONG_APB5 20 +#define GONG_SCALE6 21 +#define GONG_APA6 22 +#define GONG_APB6 23 +#define GONG_SCALE7 24 +#define GONG_APA7 25 +#define GONG_APB7 26 +#define GONG_INPUT 27 +#define GONG_OUTPUT 28 + +static LADSPA_Descriptor *gongDescriptor = NULL; + +typedef struct { + LADSPA_Data *damp_i; + LADSPA_Data *damp_o; + LADSPA_Data *micpos; + LADSPA_Data *scale0; + LADSPA_Data *apa0; + LADSPA_Data *apb0; + LADSPA_Data *scale1; + LADSPA_Data *apa1; + LADSPA_Data *apb1; + LADSPA_Data *scale2; + LADSPA_Data *apa2; + LADSPA_Data *apb2; + LADSPA_Data *scale3; + LADSPA_Data *apa3; + LADSPA_Data *apb3; + LADSPA_Data *scale4; + LADSPA_Data *apa4; + LADSPA_Data *apb4; + LADSPA_Data *scale5; + LADSPA_Data *apa5; + LADSPA_Data *apb5; + LADSPA_Data *scale6; + LADSPA_Data *apa6; + LADSPA_Data *apb6; + LADSPA_Data *scale7; + LADSPA_Data *apa7; + LADSPA_Data *apb7; + LADSPA_Data *input; + LADSPA_Data *output; + int maxsize_i; + int maxsize_o; + float * out; + waveguide_nl **w; + LADSPA_Data run_adding_gain; +} Gong; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return gongDescriptor; + default: + return NULL; + } +} + +static void activateGong(LADSPA_Handle instance) { + Gong *plugin_data = (Gong *)instance; + int maxsize_i = plugin_data->maxsize_i; + int maxsize_o = plugin_data->maxsize_o; + float *out = plugin_data->out; + waveguide_nl **w = plugin_data->w; +#line 44 "gong_1424.xml" + unsigned int i; + + for (i = 0; i < 8; i++) { + waveguide_nl_reset(w[i]); + } + plugin_data->maxsize_i = maxsize_i; + plugin_data->maxsize_o = maxsize_o; + plugin_data->out = out; + plugin_data->w = w; + +} + +static void cleanupGong(LADSPA_Handle instance) { +#line 110 "gong_1424.xml" + Gong *plugin_data = (Gong *)instance; + unsigned int i; + + for (i = 0; i < 8; i++) { + waveguide_nl_free(plugin_data->w[i]); + } + free(plugin_data->w); + free(plugin_data->out); + free(instance); +} + +static void connectPortGong( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + Gong *plugin; + + plugin = (Gong *)instance; + switch (port) { + case GONG_DAMP_I: + plugin->damp_i = data; + break; + case GONG_DAMP_O: + plugin->damp_o = data; + break; + case GONG_MICPOS: + plugin->micpos = data; + break; + case GONG_SCALE0: + plugin->scale0 = data; + break; + case GONG_APA0: + plugin->apa0 = data; + break; + case GONG_APB0: + plugin->apb0 = data; + break; + case GONG_SCALE1: + plugin->scale1 = data; + break; + case GONG_APA1: + plugin->apa1 = data; + break; + case GONG_APB1: + plugin->apb1 = data; + break; + case GONG_SCALE2: + plugin->scale2 = data; + break; + case GONG_APA2: + plugin->apa2 = data; + break; + case GONG_APB2: + plugin->apb2 = data; + break; + case GONG_SCALE3: + plugin->scale3 = data; + break; + case GONG_APA3: + plugin->apa3 = data; + break; + case GONG_APB3: + plugin->apb3 = data; + break; + case GONG_SCALE4: + plugin->scale4 = data; + break; + case GONG_APA4: + plugin->apa4 = data; + break; + case GONG_APB4: + plugin->apb4 = data; + break; + case GONG_SCALE5: + plugin->scale5 = data; + break; + case GONG_APA5: + plugin->apa5 = data; + break; + case GONG_APB5: + plugin->apb5 = data; + break; + case GONG_SCALE6: + plugin->scale6 = data; + break; + case GONG_APA6: + plugin->apa6 = data; + break; + case GONG_APB6: + plugin->apb6 = data; + break; + case GONG_SCALE7: + plugin->scale7 = data; + break; + case GONG_APA7: + plugin->apa7 = data; + break; + case GONG_APB7: + plugin->apb7 = data; + break; + case GONG_INPUT: + plugin->input = data; + break; + case GONG_OUTPUT: + plugin->output = data; + break; + } +} + +static LADSPA_Handle instantiateGong( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + Gong *plugin_data = (Gong *)malloc(sizeof(Gong)); + int maxsize_i; + int maxsize_o; + float *out = NULL; + waveguide_nl **w = NULL; + +#line 23 "gong_1424.xml" + /* Max delay length for inner waveguides */ + maxsize_i = (float)s_rate * 0.03643242f; + /* Max delay length for outer waveguides */ + maxsize_o = (float)s_rate * 0.05722782f; + + /* The waveguide structures */ + w = malloc(8 * sizeof(waveguide_nl *)); + w[0] = waveguide_nl_new(maxsize_i, 0.5, 0.0f, 0.0f); + w[1] = waveguide_nl_new(maxsize_i, 0.5, 0.0f, 0.0f); + w[2] = waveguide_nl_new(maxsize_i, 0.5, 0.0f, 0.0f); + w[3] = waveguide_nl_new(maxsize_i, 0.5, 0.0f, 0.0f); + w[4] = waveguide_nl_new(maxsize_o, 0.5, 0.0f, 0.0f); + w[5] = waveguide_nl_new(maxsize_o, 0.5, 0.0f, 0.0f); + w[6] = waveguide_nl_new(maxsize_o, 0.5, 0.0f, 0.0f); + w[7] = waveguide_nl_new(maxsize_o, 0.5, 0.0f, 0.0f); + + /* Buffers to hold the currect deflections */ + out = calloc(32, sizeof(float)); + + plugin_data->maxsize_i = maxsize_i; + plugin_data->maxsize_o = maxsize_o; + plugin_data->out = out; + plugin_data->w = w; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runGong(LADSPA_Handle instance, unsigned long sample_count) { + Gong *plugin_data = (Gong *)instance; + + /* Inner damping (float value) */ + const LADSPA_Data damp_i = *(plugin_data->damp_i); + + /* Outer damping (float value) */ + const LADSPA_Data damp_o = *(plugin_data->damp_o); + + /* Mic position (float value) */ + const LADSPA_Data micpos = *(plugin_data->micpos); + + /* Inner size 1 (float value) */ + const LADSPA_Data scale0 = *(plugin_data->scale0); + + /* Inner stiffness 1 + (float value) */ + const LADSPA_Data apa0 = *(plugin_data->apa0); + + /* Inner stiffness 1 - (float value) */ + const LADSPA_Data apb0 = *(plugin_data->apb0); + + /* Inner size 2 (float value) */ + const LADSPA_Data scale1 = *(plugin_data->scale1); + + /* Inner stiffness 2 + (float value) */ + const LADSPA_Data apa1 = *(plugin_data->apa1); + + /* Inner stiffness 2 - (float value) */ + const LADSPA_Data apb1 = *(plugin_data->apb1); + + /* Inner size 3 (float value) */ + const LADSPA_Data scale2 = *(plugin_data->scale2); + + /* Inner stiffness 3 + (float value) */ + const LADSPA_Data apa2 = *(plugin_data->apa2); + + /* Inner stiffness 3 - (float value) */ + const LADSPA_Data apb2 = *(plugin_data->apb2); + + /* Inner size 4 (float value) */ + const LADSPA_Data scale3 = *(plugin_data->scale3); + + /* Inner stiffness 4 + (float value) */ + const LADSPA_Data apa3 = *(plugin_data->apa3); + + /* Inner stiffness 4 - (float value) */ + const LADSPA_Data apb3 = *(plugin_data->apb3); + + /* Outer size 1 (float value) */ + const LADSPA_Data scale4 = *(plugin_data->scale4); + + /* Outer stiffness 1 + (float value) */ + const LADSPA_Data apa4 = *(plugin_data->apa4); + + /* Outer stiffness 1 - (float value) */ + const LADSPA_Data apb4 = *(plugin_data->apb4); + + /* Outer size 2 (float value) */ + const LADSPA_Data scale5 = *(plugin_data->scale5); + + /* Outer stiffness 2 + (float value) */ + const LADSPA_Data apa5 = *(plugin_data->apa5); + + /* Outer stiffness 2 - (float value) */ + const LADSPA_Data apb5 = *(plugin_data->apb5); + + /* Outer size 3 (float value) */ + const LADSPA_Data scale6 = *(plugin_data->scale6); + + /* Outer stiffness 3 + (float value) */ + const LADSPA_Data apa6 = *(plugin_data->apa6); + + /* Outer stiffness 3 - (float value) */ + const LADSPA_Data apb6 = *(plugin_data->apb6); + + /* Outer size 4 (float value) */ + const LADSPA_Data scale7 = *(plugin_data->scale7); + + /* Outer stiffness 4 + (float value) */ + const LADSPA_Data apa7 = *(plugin_data->apa7); + + /* Outer stiffness 4 - (float value) */ + const LADSPA_Data apb7 = *(plugin_data->apb7); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + int maxsize_i = plugin_data->maxsize_i; + int maxsize_o = plugin_data->maxsize_o; + float * out = plugin_data->out; + waveguide_nl ** w = plugin_data->w; + +#line 52 "gong_1424.xml" + unsigned long pos; + /* The a coef of the inner lowpass */ + const float lpi = 1.0f - damp_i * 0.1423f; + /* The a coef of the outer lowpass */ + const float lpo = 1.0f - damp_o * 0.19543f; + + /* Set the parameters of the waveguides */ + waveguide_nl_set_delay(w[0], maxsize_i * scale0); + waveguide_nl_set_ap(w[0], apa0, apb0); + waveguide_nl_set_delay(w[1], maxsize_i * scale1); + waveguide_nl_set_ap(w[1], apa1, apb1); + waveguide_nl_set_delay(w[2], maxsize_i * scale2); + waveguide_nl_set_ap(w[2], apa2, apb2); + waveguide_nl_set_delay(w[3], maxsize_i * scale3); + waveguide_nl_set_ap(w[3], apa3, apb3); + waveguide_nl_set_delay(w[4], maxsize_o * scale4); + waveguide_nl_set_ap(w[4], apa4, apb4); + waveguide_nl_set_delay(w[5], maxsize_o * scale5); + waveguide_nl_set_ap(w[5], apa5, apb5); + waveguide_nl_set_delay(w[6], maxsize_o * scale6); + waveguide_nl_set_ap(w[6], apa6, apb6); + waveguide_nl_set_delay(w[7], maxsize_o * scale7); + waveguide_nl_set_ap(w[7], apa7, apb7); + + for (pos=0; pos<4; pos++) { + waveguide_nl_set_fc(w[pos], lpi); + } + for (; pos<8; pos++) { + waveguide_nl_set_fc(w[pos], lpo); + } + + for (pos = 0; pos < sample_count; pos++) { + /* Calcualte the deflections at the wavejunctions + alpha is the centre, beta is north, gamma is east, + delta is south and epsilon is west */ + const float alpha = (out[0] + out[2] + out[4] + out[6]) * 0.5f + + input[pos]; + const float beta = (out[1] + out[9] + out[14]) * 0.666666666666f; + const float gamma = (out[3] + out[8] + out[11]) * 0.666666666666f; + const float delta = (out[5] + out[10] + out[13]) * 0.666666666666f; + const float epsilon = (out[7] + out[12] + out[15]) * 0.666666666666f; + + /* Inject the energy at the junctions + reflections into the + waveguides (the macro gives the reflection calcs) */ + RUN_WG(0, beta, alpha); + RUN_WG(1, gamma, alpha); + RUN_WG(2, delta, alpha); + RUN_WG(3, epsilon, alpha); + RUN_WG(4, beta, gamma); + RUN_WG(5, gamma, delta); + RUN_WG(6, delta, epsilon); + RUN_WG(7, epsilon, beta); + + buffer_write(output[pos], (1.0f - micpos) * alpha + micpos * delta); + } +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainGong(LADSPA_Handle instance, LADSPA_Data gain) { + ((Gong *)instance)->run_adding_gain = gain; +} + +static void runAddingGong(LADSPA_Handle instance, unsigned long sample_count) { + Gong *plugin_data = (Gong *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Inner damping (float value) */ + const LADSPA_Data damp_i = *(plugin_data->damp_i); + + /* Outer damping (float value) */ + const LADSPA_Data damp_o = *(plugin_data->damp_o); + + /* Mic position (float value) */ + const LADSPA_Data micpos = *(plugin_data->micpos); + + /* Inner size 1 (float value) */ + const LADSPA_Data scale0 = *(plugin_data->scale0); + + /* Inner stiffness 1 + (float value) */ + const LADSPA_Data apa0 = *(plugin_data->apa0); + + /* Inner stiffness 1 - (float value) */ + const LADSPA_Data apb0 = *(plugin_data->apb0); + + /* Inner size 2 (float value) */ + const LADSPA_Data scale1 = *(plugin_data->scale1); + + /* Inner stiffness 2 + (float value) */ + const LADSPA_Data apa1 = *(plugin_data->apa1); + + /* Inner stiffness 2 - (float value) */ + const LADSPA_Data apb1 = *(plugin_data->apb1); + + /* Inner size 3 (float value) */ + const LADSPA_Data scale2 = *(plugin_data->scale2); + + /* Inner stiffness 3 + (float value) */ + const LADSPA_Data apa2 = *(plugin_data->apa2); + + /* Inner stiffness 3 - (float value) */ + const LADSPA_Data apb2 = *(plugin_data->apb2); + + /* Inner size 4 (float value) */ + const LADSPA_Data scale3 = *(plugin_data->scale3); + + /* Inner stiffness 4 + (float value) */ + const LADSPA_Data apa3 = *(plugin_data->apa3); + + /* Inner stiffness 4 - (float value) */ + const LADSPA_Data apb3 = *(plugin_data->apb3); + + /* Outer size 1 (float value) */ + const LADSPA_Data scale4 = *(plugin_data->scale4); + + /* Outer stiffness 1 + (float value) */ + const LADSPA_Data apa4 = *(plugin_data->apa4); + + /* Outer stiffness 1 - (float value) */ + const LADSPA_Data apb4 = *(plugin_data->apb4); + + /* Outer size 2 (float value) */ + const LADSPA_Data scale5 = *(plugin_data->scale5); + + /* Outer stiffness 2 + (float value) */ + const LADSPA_Data apa5 = *(plugin_data->apa5); + + /* Outer stiffness 2 - (float value) */ + const LADSPA_Data apb5 = *(plugin_data->apb5); + + /* Outer size 3 (float value) */ + const LADSPA_Data scale6 = *(plugin_data->scale6); + + /* Outer stiffness 3 + (float value) */ + const LADSPA_Data apa6 = *(plugin_data->apa6); + + /* Outer stiffness 3 - (float value) */ + const LADSPA_Data apb6 = *(plugin_data->apb6); + + /* Outer size 4 (float value) */ + const LADSPA_Data scale7 = *(plugin_data->scale7); + + /* Outer stiffness 4 + (float value) */ + const LADSPA_Data apa7 = *(plugin_data->apa7); + + /* Outer stiffness 4 - (float value) */ + const LADSPA_Data apb7 = *(plugin_data->apb7); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + int maxsize_i = plugin_data->maxsize_i; + int maxsize_o = plugin_data->maxsize_o; + float * out = plugin_data->out; + waveguide_nl ** w = plugin_data->w; + +#line 52 "gong_1424.xml" + unsigned long pos; + /* The a coef of the inner lowpass */ + const float lpi = 1.0f - damp_i * 0.1423f; + /* The a coef of the outer lowpass */ + const float lpo = 1.0f - damp_o * 0.19543f; + + /* Set the parameters of the waveguides */ + waveguide_nl_set_delay(w[0], maxsize_i * scale0); + waveguide_nl_set_ap(w[0], apa0, apb0); + waveguide_nl_set_delay(w[1], maxsize_i * scale1); + waveguide_nl_set_ap(w[1], apa1, apb1); + waveguide_nl_set_delay(w[2], maxsize_i * scale2); + waveguide_nl_set_ap(w[2], apa2, apb2); + waveguide_nl_set_delay(w[3], maxsize_i * scale3); + waveguide_nl_set_ap(w[3], apa3, apb3); + waveguide_nl_set_delay(w[4], maxsize_o * scale4); + waveguide_nl_set_ap(w[4], apa4, apb4); + waveguide_nl_set_delay(w[5], maxsize_o * scale5); + waveguide_nl_set_ap(w[5], apa5, apb5); + waveguide_nl_set_delay(w[6], maxsize_o * scale6); + waveguide_nl_set_ap(w[6], apa6, apb6); + waveguide_nl_set_delay(w[7], maxsize_o * scale7); + waveguide_nl_set_ap(w[7], apa7, apb7); + + for (pos=0; pos<4; pos++) { + waveguide_nl_set_fc(w[pos], lpi); + } + for (; pos<8; pos++) { + waveguide_nl_set_fc(w[pos], lpo); + } + + for (pos = 0; pos < sample_count; pos++) { + /* Calcualte the deflections at the wavejunctions + alpha is the centre, beta is north, gamma is east, + delta is south and epsilon is west */ + const float alpha = (out[0] + out[2] + out[4] + out[6]) * 0.5f + + input[pos]; + const float beta = (out[1] + out[9] + out[14]) * 0.666666666666f; + const float gamma = (out[3] + out[8] + out[11]) * 0.666666666666f; + const float delta = (out[5] + out[10] + out[13]) * 0.666666666666f; + const float epsilon = (out[7] + out[12] + out[15]) * 0.666666666666f; + + /* Inject the energy at the junctions + reflections into the + waveguides (the macro gives the reflection calcs) */ + RUN_WG(0, beta, alpha); + RUN_WG(1, gamma, alpha); + RUN_WG(2, delta, alpha); + RUN_WG(3, epsilon, alpha); + RUN_WG(4, beta, gamma); + RUN_WG(5, gamma, delta); + RUN_WG(6, delta, epsilon); + RUN_WG(7, epsilon, beta); + + buffer_write(output[pos], (1.0f - micpos) * alpha + micpos * delta); + } +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + gongDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (gongDescriptor) { + gongDescriptor->UniqueID = 1424; + gongDescriptor->Label = "gong"; + gongDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + gongDescriptor->Name = + D_("Gong model"); + gongDescriptor->Maker = + "Steve Harris "; + gongDescriptor->Copyright = + "GPL"; + gongDescriptor->PortCount = 29; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(29, + sizeof(LADSPA_PortDescriptor)); + gongDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(29, + sizeof(LADSPA_PortRangeHint)); + gongDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(29, sizeof(char*)); + gongDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Inner damping */ + port_descriptors[GONG_DAMP_I] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[GONG_DAMP_I] = + D_("Inner damping"); + port_range_hints[GONG_DAMP_I].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; + port_range_hints[GONG_DAMP_I].LowerBound = 0; + port_range_hints[GONG_DAMP_I].UpperBound = 1; + + /* Parameters for Outer damping */ + port_descriptors[GONG_DAMP_O] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[GONG_DAMP_O] = + D_("Outer damping"); + port_range_hints[GONG_DAMP_O].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; + port_range_hints[GONG_DAMP_O].LowerBound = 0; + port_range_hints[GONG_DAMP_O].UpperBound = 1; + + /* Parameters for Mic position */ + port_descriptors[GONG_MICPOS] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[GONG_MICPOS] = + D_("Mic position"); + port_range_hints[GONG_MICPOS].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; + port_range_hints[GONG_MICPOS].LowerBound = 0; + port_range_hints[GONG_MICPOS].UpperBound = 1; + + /* Parameters for Inner size 1 */ + port_descriptors[GONG_SCALE0] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[GONG_SCALE0] = + D_("Inner size 1"); + port_range_hints[GONG_SCALE0].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; + port_range_hints[GONG_SCALE0].LowerBound = 0; + port_range_hints[GONG_SCALE0].UpperBound = 1; + + /* Parameters for Inner stiffness 1 + */ + port_descriptors[GONG_APA0] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[GONG_APA0] = + D_("Inner stiffness 1 +"); + port_range_hints[GONG_APA0].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; + port_range_hints[GONG_APA0].LowerBound = 0; + port_range_hints[GONG_APA0].UpperBound = 1; + + /* Parameters for Inner stiffness 1 - */ + port_descriptors[GONG_APB0] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[GONG_APB0] = + D_("Inner stiffness 1 -"); + port_range_hints[GONG_APB0].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; + port_range_hints[GONG_APB0].LowerBound = 0; + port_range_hints[GONG_APB0].UpperBound = 1; + + /* Parameters for Inner size 2 */ + port_descriptors[GONG_SCALE1] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[GONG_SCALE1] = + D_("Inner size 2"); + port_range_hints[GONG_SCALE1].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; + port_range_hints[GONG_SCALE1].LowerBound = 0; + port_range_hints[GONG_SCALE1].UpperBound = 1; + + /* Parameters for Inner stiffness 2 + */ + port_descriptors[GONG_APA1] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[GONG_APA1] = + D_("Inner stiffness 2 +"); + port_range_hints[GONG_APA1].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; + port_range_hints[GONG_APA1].LowerBound = 0; + port_range_hints[GONG_APA1].UpperBound = 1; + + /* Parameters for Inner stiffness 2 - */ + port_descriptors[GONG_APB1] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[GONG_APB1] = + D_("Inner stiffness 2 -"); + port_range_hints[GONG_APB1].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; + port_range_hints[GONG_APB1].LowerBound = 0; + port_range_hints[GONG_APB1].UpperBound = 1; + + /* Parameters for Inner size 3 */ + port_descriptors[GONG_SCALE2] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[GONG_SCALE2] = + D_("Inner size 3"); + port_range_hints[GONG_SCALE2].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; + port_range_hints[GONG_SCALE2].LowerBound = 0; + port_range_hints[GONG_SCALE2].UpperBound = 1; + + /* Parameters for Inner stiffness 3 + */ + port_descriptors[GONG_APA2] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[GONG_APA2] = + D_("Inner stiffness 3 +"); + port_range_hints[GONG_APA2].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; + port_range_hints[GONG_APA2].LowerBound = 0; + port_range_hints[GONG_APA2].UpperBound = 1; + + /* Parameters for Inner stiffness 3 - */ + port_descriptors[GONG_APB2] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[GONG_APB2] = + D_("Inner stiffness 3 -"); + port_range_hints[GONG_APB2].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; + port_range_hints[GONG_APB2].LowerBound = 0; + port_range_hints[GONG_APB2].UpperBound = 1; + + /* Parameters for Inner size 4 */ + port_descriptors[GONG_SCALE3] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[GONG_SCALE3] = + D_("Inner size 4"); + port_range_hints[GONG_SCALE3].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; + port_range_hints[GONG_SCALE3].LowerBound = 0; + port_range_hints[GONG_SCALE3].UpperBound = 1; + + /* Parameters for Inner stiffness 4 + */ + port_descriptors[GONG_APA3] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[GONG_APA3] = + D_("Inner stiffness 4 +"); + port_range_hints[GONG_APA3].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; + port_range_hints[GONG_APA3].LowerBound = 0; + port_range_hints[GONG_APA3].UpperBound = 1; + + /* Parameters for Inner stiffness 4 - */ + port_descriptors[GONG_APB3] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[GONG_APB3] = + D_("Inner stiffness 4 -"); + port_range_hints[GONG_APB3].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; + port_range_hints[GONG_APB3].LowerBound = 0; + port_range_hints[GONG_APB3].UpperBound = 1; + + /* Parameters for Outer size 1 */ + port_descriptors[GONG_SCALE4] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[GONG_SCALE4] = + D_("Outer size 1"); + port_range_hints[GONG_SCALE4].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; + port_range_hints[GONG_SCALE4].LowerBound = 0; + port_range_hints[GONG_SCALE4].UpperBound = 1; + + /* Parameters for Outer stiffness 1 + */ + port_descriptors[GONG_APA4] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[GONG_APA4] = + D_("Outer stiffness 1 +"); + port_range_hints[GONG_APA4].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; + port_range_hints[GONG_APA4].LowerBound = 0; + port_range_hints[GONG_APA4].UpperBound = 1; + + /* Parameters for Outer stiffness 1 - */ + port_descriptors[GONG_APB4] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[GONG_APB4] = + D_("Outer stiffness 1 -"); + port_range_hints[GONG_APB4].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; + port_range_hints[GONG_APB4].LowerBound = 0; + port_range_hints[GONG_APB4].UpperBound = 1; + + /* Parameters for Outer size 2 */ + port_descriptors[GONG_SCALE5] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[GONG_SCALE5] = + D_("Outer size 2"); + port_range_hints[GONG_SCALE5].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; + port_range_hints[GONG_SCALE5].LowerBound = 0; + port_range_hints[GONG_SCALE5].UpperBound = 1; + + /* Parameters for Outer stiffness 2 + */ + port_descriptors[GONG_APA5] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[GONG_APA5] = + D_("Outer stiffness 2 +"); + port_range_hints[GONG_APA5].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; + port_range_hints[GONG_APA5].LowerBound = 0; + port_range_hints[GONG_APA5].UpperBound = 1; + + /* Parameters for Outer stiffness 2 - */ + port_descriptors[GONG_APB5] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[GONG_APB5] = + D_("Outer stiffness 2 -"); + port_range_hints[GONG_APB5].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; + port_range_hints[GONG_APB5].LowerBound = 0; + port_range_hints[GONG_APB5].UpperBound = 1; + + /* Parameters for Outer size 3 */ + port_descriptors[GONG_SCALE6] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[GONG_SCALE6] = + D_("Outer size 3"); + port_range_hints[GONG_SCALE6].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; + port_range_hints[GONG_SCALE6].LowerBound = 0; + port_range_hints[GONG_SCALE6].UpperBound = 1; + + /* Parameters for Outer stiffness 3 + */ + port_descriptors[GONG_APA6] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[GONG_APA6] = + D_("Outer stiffness 3 +"); + port_range_hints[GONG_APA6].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; + port_range_hints[GONG_APA6].LowerBound = 0; + port_range_hints[GONG_APA6].UpperBound = 1; + + /* Parameters for Outer stiffness 3 - */ + port_descriptors[GONG_APB6] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[GONG_APB6] = + D_("Outer stiffness 3 -"); + port_range_hints[GONG_APB6].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; + port_range_hints[GONG_APB6].LowerBound = 0; + port_range_hints[GONG_APB6].UpperBound = 1; + + /* Parameters for Outer size 4 */ + port_descriptors[GONG_SCALE7] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[GONG_SCALE7] = + D_("Outer size 4"); + port_range_hints[GONG_SCALE7].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; + port_range_hints[GONG_SCALE7].LowerBound = 0; + port_range_hints[GONG_SCALE7].UpperBound = 1; + + /* Parameters for Outer stiffness 4 + */ + port_descriptors[GONG_APA7] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[GONG_APA7] = + D_("Outer stiffness 4 +"); + port_range_hints[GONG_APA7].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; + port_range_hints[GONG_APA7].LowerBound = 0; + port_range_hints[GONG_APA7].UpperBound = 1; + + /* Parameters for Outer stiffness 4 - */ + port_descriptors[GONG_APB7] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[GONG_APB7] = + D_("Outer stiffness 4 -"); + port_range_hints[GONG_APB7].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; + port_range_hints[GONG_APB7].LowerBound = 0; + port_range_hints[GONG_APB7].UpperBound = 1; + + /* Parameters for Input */ + port_descriptors[GONG_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[GONG_INPUT] = + D_("Input"); + port_range_hints[GONG_INPUT].HintDescriptor = 0; + + /* Parameters for Output */ + port_descriptors[GONG_OUTPUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[GONG_OUTPUT] = + D_("Output"); + port_range_hints[GONG_OUTPUT].HintDescriptor = 0; + + gongDescriptor->activate = activateGong; + gongDescriptor->cleanup = cleanupGong; + gongDescriptor->connect_port = connectPortGong; + gongDescriptor->deactivate = NULL; + gongDescriptor->instantiate = instantiateGong; + gongDescriptor->run = runGong; + gongDescriptor->run_adding = runAddingGong; + gongDescriptor->set_run_adding_gain = setRunAddingGainGong; + } +} + +void _fini() { + if (gongDescriptor) { + free((LADSPA_PortDescriptor *)gongDescriptor->PortDescriptors); + free((char **)gongDescriptor->PortNames); + free((LADSPA_PortRangeHint *)gongDescriptor->PortRangeHints); + free(gongDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/gong_beater_1439.c b/plugins/LadspaEffect/swh/gong_beater_1439.c new file mode 100644 index 000000000..e6e1803c8 --- /dev/null +++ b/plugins/LadspaEffect/swh/gong_beater_1439.c @@ -0,0 +1,411 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + +#line 10 "gong_beater_1439.xml" + +#include "ladspa-util.h" + +#define GONGBEATER_IMP_GAIN 0 +#define GONGBEATER_STRIKE_GAIN 1 +#define GONGBEATER_STRIKE_DURATION 2 +#define GONGBEATER_INPUT 3 +#define GONGBEATER_OUTPUT 4 + +static LADSPA_Descriptor *gongBeaterDescriptor = NULL; + +typedef struct { + LADSPA_Data *imp_gain; + LADSPA_Data *strike_gain; + LADSPA_Data *strike_duration; + LADSPA_Data *input; + LADSPA_Data *output; + float fs; + float imp_level; + unsigned int running; + float x; + float xm; + float y; + float ym; + LADSPA_Data run_adding_gain; +} GongBeater; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return gongBeaterDescriptor; + default: + return NULL; + } +} + +static void activateGongBeater(LADSPA_Handle instance) { + GongBeater *plugin_data = (GongBeater *)instance; + float fs = plugin_data->fs; + float imp_level = plugin_data->imp_level; + unsigned int running = plugin_data->running; + float x = plugin_data->x; + float xm = plugin_data->xm; + float y = plugin_data->y; + float ym = plugin_data->ym; +#line 31 "gong_beater_1439.xml" + running = 0; + x = 0.5f; + y = 0.0f; + xm = 0.5f; + ym = 0.0f; + plugin_data->fs = fs; + plugin_data->imp_level = imp_level; + plugin_data->running = running; + plugin_data->x = x; + plugin_data->xm = xm; + plugin_data->y = y; + plugin_data->ym = ym; + +} + +static void cleanupGongBeater(LADSPA_Handle instance) { + free(instance); +} + +static void connectPortGongBeater( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + GongBeater *plugin; + + plugin = (GongBeater *)instance; + switch (port) { + case GONGBEATER_IMP_GAIN: + plugin->imp_gain = data; + break; + case GONGBEATER_STRIKE_GAIN: + plugin->strike_gain = data; + break; + case GONGBEATER_STRIKE_DURATION: + plugin->strike_duration = data; + break; + case GONGBEATER_INPUT: + plugin->input = data; + break; + case GONGBEATER_OUTPUT: + plugin->output = data; + break; + } +} + +static LADSPA_Handle instantiateGongBeater( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + GongBeater *plugin_data = (GongBeater *)malloc(sizeof(GongBeater)); + float fs; + float imp_level; + unsigned int running; + float x; + float xm; + float y; + float ym; + +#line 21 "gong_beater_1439.xml" + running = 0; + x = 0.5f; + y = 0.0f; + xm = 0.5f; + ym = 0.0f; + fs = (float)s_rate; + imp_level = 0.0f; + + plugin_data->fs = fs; + plugin_data->imp_level = imp_level; + plugin_data->running = running; + plugin_data->x = x; + plugin_data->xm = xm; + plugin_data->y = y; + plugin_data->ym = ym; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runGongBeater(LADSPA_Handle instance, unsigned long sample_count) { + GongBeater *plugin_data = (GongBeater *)instance; + + /* Impulse gain (dB) (float value) */ + const LADSPA_Data imp_gain = *(plugin_data->imp_gain); + + /* Strike gain (dB) (float value) */ + const LADSPA_Data strike_gain = *(plugin_data->strike_gain); + + /* Strike duration (s) (float value) */ + const LADSPA_Data strike_duration = *(plugin_data->strike_duration); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + float fs = plugin_data->fs; + float imp_level = plugin_data->imp_level; + unsigned int running = plugin_data->running; + float x = plugin_data->x; + float xm = plugin_data->xm; + float y = plugin_data->y; + float ym = plugin_data->ym; + +#line 39 "gong_beater_1439.xml" + unsigned long pos; + const float imp_amp = DB_CO(imp_gain); + const float strike_amp = DB_CO(strike_gain); + const float omega = 6.2831852f / (strike_duration * fs); + + pos = 0; + while (pos < sample_count) { + for (; !running && pos < sample_count; pos++) { + if (fabs(input[pos]) > 0.05f) { + running = strike_duration * fs; + imp_level = fabs(input[pos]); + } + buffer_write(output[pos], input[pos] * imp_amp); + } + for (; running && pos < sample_count; pos++, running--) { + if (fabs(input[pos]) > imp_level) { + imp_level = fabs(input[pos]); + } + x -= omega * y; + y += omega * x; + xm -= omega * 0.5f * ym; + ym += omega * 0.5f * xm; + + buffer_write(output[pos], input[pos] * imp_amp + y * strike_amp * + imp_level * 4.0f * ym); + } + } + + plugin_data->x = x; + plugin_data->y = y; + plugin_data->xm = xm; + plugin_data->ym = ym; + plugin_data->running = running; + plugin_data->imp_level = imp_level; +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainGongBeater(LADSPA_Handle instance, LADSPA_Data gain) { + ((GongBeater *)instance)->run_adding_gain = gain; +} + +static void runAddingGongBeater(LADSPA_Handle instance, unsigned long sample_count) { + GongBeater *plugin_data = (GongBeater *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Impulse gain (dB) (float value) */ + const LADSPA_Data imp_gain = *(plugin_data->imp_gain); + + /* Strike gain (dB) (float value) */ + const LADSPA_Data strike_gain = *(plugin_data->strike_gain); + + /* Strike duration (s) (float value) */ + const LADSPA_Data strike_duration = *(plugin_data->strike_duration); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + float fs = plugin_data->fs; + float imp_level = plugin_data->imp_level; + unsigned int running = plugin_data->running; + float x = plugin_data->x; + float xm = plugin_data->xm; + float y = plugin_data->y; + float ym = plugin_data->ym; + +#line 39 "gong_beater_1439.xml" + unsigned long pos; + const float imp_amp = DB_CO(imp_gain); + const float strike_amp = DB_CO(strike_gain); + const float omega = 6.2831852f / (strike_duration * fs); + + pos = 0; + while (pos < sample_count) { + for (; !running && pos < sample_count; pos++) { + if (fabs(input[pos]) > 0.05f) { + running = strike_duration * fs; + imp_level = fabs(input[pos]); + } + buffer_write(output[pos], input[pos] * imp_amp); + } + for (; running && pos < sample_count; pos++, running--) { + if (fabs(input[pos]) > imp_level) { + imp_level = fabs(input[pos]); + } + x -= omega * y; + y += omega * x; + xm -= omega * 0.5f * ym; + ym += omega * 0.5f * xm; + + buffer_write(output[pos], input[pos] * imp_amp + y * strike_amp * + imp_level * 4.0f * ym); + } + } + + plugin_data->x = x; + plugin_data->y = y; + plugin_data->xm = xm; + plugin_data->ym = ym; + plugin_data->running = running; + plugin_data->imp_level = imp_level; +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + gongBeaterDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (gongBeaterDescriptor) { + gongBeaterDescriptor->UniqueID = 1439; + gongBeaterDescriptor->Label = "gongBeater"; + gongBeaterDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + gongBeaterDescriptor->Name = + D_("Gong beater"); + gongBeaterDescriptor->Maker = + "Steve Harris "; + gongBeaterDescriptor->Copyright = + "GPL"; + gongBeaterDescriptor->PortCount = 5; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(5, + sizeof(LADSPA_PortDescriptor)); + gongBeaterDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(5, + sizeof(LADSPA_PortRangeHint)); + gongBeaterDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(5, sizeof(char*)); + gongBeaterDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Impulse gain (dB) */ + port_descriptors[GONGBEATER_IMP_GAIN] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[GONGBEATER_IMP_GAIN] = + D_("Impulse gain (dB)"); + port_range_hints[GONGBEATER_IMP_GAIN].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MINIMUM; + port_range_hints[GONGBEATER_IMP_GAIN].LowerBound = -70; + port_range_hints[GONGBEATER_IMP_GAIN].UpperBound = 0; + + /* Parameters for Strike gain (dB) */ + port_descriptors[GONGBEATER_STRIKE_GAIN] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[GONGBEATER_STRIKE_GAIN] = + D_("Strike gain (dB)"); + port_range_hints[GONGBEATER_STRIKE_GAIN].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MAXIMUM; + port_range_hints[GONGBEATER_STRIKE_GAIN].LowerBound = -70; + port_range_hints[GONGBEATER_STRIKE_GAIN].UpperBound = 0; + + /* Parameters for Strike duration (s) */ + port_descriptors[GONGBEATER_STRIKE_DURATION] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[GONGBEATER_STRIKE_DURATION] = + D_("Strike duration (s)"); + port_range_hints[GONGBEATER_STRIKE_DURATION].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; + port_range_hints[GONGBEATER_STRIKE_DURATION].LowerBound = 0.001; + port_range_hints[GONGBEATER_STRIKE_DURATION].UpperBound = 0.2; + + /* Parameters for Input */ + port_descriptors[GONGBEATER_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[GONGBEATER_INPUT] = + D_("Input"); + port_range_hints[GONGBEATER_INPUT].HintDescriptor = 0; + + /* Parameters for Output */ + port_descriptors[GONGBEATER_OUTPUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[GONGBEATER_OUTPUT] = + D_("Output"); + port_range_hints[GONGBEATER_OUTPUT].HintDescriptor = 0; + + gongBeaterDescriptor->activate = activateGongBeater; + gongBeaterDescriptor->cleanup = cleanupGongBeater; + gongBeaterDescriptor->connect_port = connectPortGongBeater; + gongBeaterDescriptor->deactivate = NULL; + gongBeaterDescriptor->instantiate = instantiateGongBeater; + gongBeaterDescriptor->run = runGongBeater; + gongBeaterDescriptor->run_adding = runAddingGongBeater; + gongBeaterDescriptor->set_run_adding_gain = setRunAddingGainGongBeater; + } +} + +void _fini() { + if (gongBeaterDescriptor) { + free((LADSPA_PortDescriptor *)gongBeaterDescriptor->PortDescriptors); + free((char **)gongBeaterDescriptor->PortNames); + free((LADSPA_PortRangeHint *)gongBeaterDescriptor->PortRangeHints); + free(gongBeaterDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/gsm/COPYRIGHT b/plugins/LadspaEffect/swh/gsm/COPYRIGHT new file mode 100644 index 000000000..eba0e523b --- /dev/null +++ b/plugins/LadspaEffect/swh/gsm/COPYRIGHT @@ -0,0 +1,16 @@ +Copyright 1992, 1993, 1994 by Jutta Degener and Carsten Bormann, +Technische Universitaet Berlin + +Any use of this software is permitted provided that this notice is not +removed and that neither the authors nor the Technische Universitaet Berlin +are deemed to have made any representations as to the suitability of this +software for any purpose nor are held responsible for any defects of +this software. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. + +As a matter of courtesy, the authors request to be informed about uses +this software has found, about bugs in this software, and about any +improvements that may be of general interest. + +Berlin, 28.11.1994 +Jutta Degener +Carsten Bormann diff --git a/plugins/LadspaEffect/swh/gsm/README b/plugins/LadspaEffect/swh/gsm/README new file mode 100644 index 000000000..b57132b05 --- /dev/null +++ b/plugins/LadspaEffect/swh/gsm/README @@ -0,0 +1,36 @@ +GSM 06.10 13 kbit/s RPE/LTP speech codec +---------------------------------------- + +All the file in this directory were written by Jutta Degener +and Carsten Borman for The Communications and Operating Systems +Research Group (KBS) at the Technische Universitaet Berlin. + +Their work was released under the following license which is +assumed to be compatible with The GNU Lesser General Public License. + +---------------------------------------------------------------------------- + +Copyright 1992, 1993, 1994 by Jutta Degener and Carsten Bormann, +Technische Universitaet Berlin + +Any use of this software is permitted provided that this notice is not +removed and that neither the authors nor the Technische Universitaet Berlin +are deemed to have made any representations as to the suitability of this +software for any purpose nor are held responsible for any defects of +this software. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. + +As a matter of courtesy, the authors request to be informed about uses +this software has found, about bugs in this software, and about any +improvements that may be of general interest. + +Berlin, 28.11.1994 +Jutta Degener (jutta@cs.tu-berlin.de) +Carsten Bormann (cabo@cs.tu-berlin.de) + +---------------------------------------------------------------------------- + +Jutta Degener and Carsten Bormann's work can be found on their homepage +at: + + http://kbs.cs.tu-berlin.de/~jutta/toast.html + diff --git a/plugins/LadspaEffect/swh/gsm/add.c b/plugins/LadspaEffect/swh/gsm/add.c new file mode 100644 index 000000000..13b71fda1 --- /dev/null +++ b/plugins/LadspaEffect/swh/gsm/add.c @@ -0,0 +1,251 @@ +/* + * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische + * Universitaet Berlin. See the accompanying file "COPYRIGHT" for + * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. + */ + +/* $Header: /home/cvs/giga/ladspa-swh/gsm/add.c,v 1.1 2001/06/10 21:36:51 swh Exp $ */ + +/* + * See private.h for the more commonly used macro versions. + */ + +#include +#include + +#include "private.h" +#include "gsm.h" +#include "proto.h" + +#define saturate(x) \ + ((x) < MIN_WORD ? MIN_WORD : (x) > MAX_WORD ? MAX_WORD: (x)) + +word gsm_add P2((a,b), word a, word b) +{ + longword sum = (longword)a + (longword)b; + return saturate(sum); +} + +word gsm_sub P2((a,b), word a, word b) +{ + longword diff = (longword)a - (longword)b; + return saturate(diff); +} + +word gsm_mult P2((a,b), word a, word b) +{ + if (a == MIN_WORD && b == MIN_WORD) return MAX_WORD; + else return SASR( (longword)a * (longword)b, 15 ); +} + +word gsm_mult_r P2((a,b), word a, word b) +{ + if (b == MIN_WORD && a == MIN_WORD) return MAX_WORD; + else { + longword prod = (longword)a * (longword)b + 16384; + prod >>= 15; + return prod & 0xFFFF; + } +} + +word gsm_abs P1((a), word a) +{ + return a < 0 ? (a == MIN_WORD ? MAX_WORD : -a) : a; +} + +longword gsm_L_mult P2((a,b),word a, word b) +{ + assert( a != MIN_WORD || b != MIN_WORD ); + return ((longword)a * (longword)b) << 1; +} + +longword gsm_L_add P2((a,b), longword a, longword b) +{ + if (a < 0) { + if (b >= 0) return a + b; + else { + ulongword A = (ulongword)-(a + 1) + (ulongword)-(b + 1); + return A >= MAX_LONGWORD ? MIN_LONGWORD :-(longword)A-2; + } + } + else if (b <= 0) return a + b; + else { + ulongword A = (ulongword)a + (ulongword)b; + return A > MAX_LONGWORD ? MAX_LONGWORD : A; + } +} + +longword gsm_L_sub P2((a,b), longword a, longword b) +{ + if (a >= 0) { + if (b >= 0) return a - b; + else { + /* a>=0, b<0 */ + + ulongword A = (ulongword)a + -(b + 1); + return A >= MAX_LONGWORD ? MAX_LONGWORD : (A + 1); + } + } + else if (b <= 0) return a - b; + else { + /* a<0, b>0 */ + + ulongword A = (ulongword)-(a + 1) + b; + return A >= MAX_LONGWORD ? MIN_LONGWORD : -(longword)A - 1; + } +} + +static unsigned char const bitoff[ 256 ] = { + 8, 7, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +}; + +word gsm_norm P1((a), longword a ) +/* + * the number of left shifts needed to normalize the 32 bit + * variable L_var1 for positive values on the interval + * + * with minimum of + * minimum of 1073741824 (01000000000000000000000000000000) and + * maximum of 2147483647 (01111111111111111111111111111111) + * + * + * and for negative values on the interval with + * minimum of -2147483648 (-10000000000000000000000000000000) and + * maximum of -1073741824 ( -1000000000000000000000000000000). + * + * in order to normalize the result, the following + * operation must be done: L_norm_var1 = L_var1 << norm( L_var1 ); + * + * (That's 'ffs', only from the left, not the right..) + */ +{ + assert(a != 0); + + if (a < 0) { + if (a <= -1073741824) return 0; + a = ~a; + } + + return a & 0xffff0000 + ? ( a & 0xff000000 + ? -1 + bitoff[ 0xFF & (a >> 24) ] + : 7 + bitoff[ 0xFF & (a >> 16) ] ) + : ( a & 0xff00 + ? 15 + bitoff[ 0xFF & (a >> 8) ] + : 23 + bitoff[ 0xFF & a ] ); +} + +longword gsm_L_asl (longword a, int n) +{ + if (n >= 32) return 0; + if (n <= -32) return -(a < 0); + if (n < 0) return gsm_L_asr(a, -n); + return a << n; +} + +word gsm_asr (word a, int n) +{ + if (n >= 16) return -(a < 0); + if (n <= -16) return 0; + if (n < 0) return a << -n; + +# ifdef SASR + return a >> n; +# else + if (a >= 0) return a >> n; + else return -(word)( -(uword)a >> n ); +# endif +} + +word gsm_asl (word a, int n) +{ + if (n >= 16) return 0; + if (n <= -16) return -(a < 0); + if (n < 0) return gsm_asr(a, -n); + return a << n; +} + +longword gsm_L_asr (longword a, int n) +{ + if (n >= 32) return -(a < 0); + if (n <= -32) return 0; + if (n < 0) return a << -n; + +# ifdef SASR + return a >> n; +# else + if (a >= 0) return a >> n; + else return -(longword)( -(ulongword)a >> n ); +# endif +} + +/* +** word gsm_asr (word a, int n) +** { +** if (n >= 16) return -(a < 0); +** if (n <= -16) return 0; +** if (n < 0) return a << -n; +** +** # ifdef SASR +** return a >> n; +** # else +** if (a >= 0) return a >> n; +** else return -(word)( -(uword)a >> n ); +** # endif +** } +** +*/ +/* + * (From p. 46, end of section 4.2.5) + * + * NOTE: The following lines gives [sic] one correct implementation + * of the div(num, denum) arithmetic operation. Compute div + * which is the integer division of num by denum: with denum + * >= num > 0 + */ + +word gsm_div P2((num,denum), word num, word denum) +{ + longword L_num = num; + longword L_denum = denum; + word div = 0; + int k = 15; + + /* The parameter num sometimes becomes zero. + * Although this is explicitly guarded against in 4.2.5, + * we assume that the result should then be zero as well. + */ + + /* assert(num != 0); */ + + assert(num >= 0 && denum >= num); + if (num == 0) + return 0; + + while (k--) { + div <<= 1; + L_num <<= 1; + + if (L_num >= L_denum) { + L_num -= L_denum; + div++; + } + } + + return div; +} diff --git a/plugins/LadspaEffect/swh/gsm/code.c b/plugins/LadspaEffect/swh/gsm/code.c new file mode 100644 index 000000000..3521b8eb8 --- /dev/null +++ b/plugins/LadspaEffect/swh/gsm/code.c @@ -0,0 +1,100 @@ +/* + * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische + * Universitaet Berlin. See the accompanying file "COPYRIGHT" for + * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. + */ + +/* $Header: /home/cvs/giga/ladspa-swh/gsm/code.c,v 1.2 2003/03/07 23:26:13 swh Exp $ */ + +#include "config.h" +#include + + +#ifdef HAS_STDLIB_H +#include +#else +# include "proto.h" + extern char * memcpy P((char *, char *, int)); +#endif + +#include "private.h" +#include "gsm.h" +#include "proto.h" + +/* + * 4.2 FIXED POINT IMPLEMENTATION OF THE RPE-LTP CODER + */ + +void Gsm_Coder P8((S,s,LARc,Nc,bc,Mc,xmaxc,xMc), + + struct gsm_state * S, + + word * s, /* [0..159] samples IN */ + +/* + * The RPE-LTD coder works on a frame by frame basis. The length of + * the frame is equal to 160 samples. Some computations are done + * once per frame to produce at the output of the coder the + * LARc[1..8] parameters which are the coded LAR coefficients and + * also to realize the inverse filtering operation for the entire + * frame (160 samples of signal d[0..159]). These parts produce at + * the output of the coder: + */ + + word * LARc, /* [0..7] LAR coefficients OUT */ + +/* + * Procedure 4.2.11 to 4.2.18 are to be executed four times per + * frame. That means once for each sub-segment RPE-LTP analysis of + * 40 samples. These parts produce at the output of the coder: + */ + + word * Nc, /* [0..3] LTP lag OUT */ + word * bc, /* [0..3] coded LTP gain OUT */ + word * Mc, /* [0..3] RPE grid selection OUT */ + word * xmaxc,/* [0..3] Coded maximum amplitude OUT */ + word * xMc /* [13*4] normalized RPE samples OUT */ +) +{ + int k; + word * dp = S->dp0 + 120; /* [ -120...-1 ] */ + word * dpp = dp; /* [ 0...39 ] */ + + static word e[50]; + + word so[160]; + + Gsm_Preprocess (S, s, so); + Gsm_LPC_Analysis (S, so, LARc); + Gsm_Short_Term_Analysis_Filter (S, LARc, so); + + for (k = 0; k <= 3; k++, xMc += 13) { + + Gsm_Long_Term_Predictor ( S, + so+k*40, /* d [0..39] IN */ + dp, /* dp [-120..-1] IN */ + e + 5, /* e [0..39] OUT */ + dpp, /* dpp [0..39] OUT */ + Nc++, + bc++); + + Gsm_RPE_Encoding ( S, + e + 5, /* e ][0..39][ IN/OUT */ + xmaxc++, Mc++, xMc ); + /* + * Gsm_Update_of_reconstructed_short_time_residual_signal + * ( dpp, e + 5, dp ); + */ + + { register int i; + register longword ltmp; + for (i = 0; i <= 39; i++) + dp[ i ] = GSM_ADD( e[5 + i], dpp[i] ); + } + dp += 40; + dpp += 40; + + } + (void)memcpy( (char *)S->dp0, (char *)(S->dp0 + 160), + 120 * sizeof(*S->dp0) ); +} diff --git a/plugins/LadspaEffect/swh/gsm/config.h b/plugins/LadspaEffect/swh/gsm/config.h new file mode 100644 index 000000000..1f2613a98 --- /dev/null +++ b/plugins/LadspaEffect/swh/gsm/config.h @@ -0,0 +1,37 @@ +/* + * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische + * Universitaet Berlin. See the accompanying file "COPYRIGHT" for + * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. + */ + +/*$Header: /home/cvs/giga/ladspa-swh/gsm/config.h,v 1.1 2001/06/10 21:36:51 swh Exp $*/ + +#ifndef CONFIG_H +#define CONFIG_H + +//*efine SIGHANDLER_T int /* signal handlers are void */ +//*efine HAS_SYSV_SIGNAL 1 /* sigs not blocked/reset? */ + +#define HAS_STDLIB_H 1 /* /usr/include/stdlib.h */ +//*efine HAS_LIMITS_H 1 /* /usr/include/limits.h */ +#define HAS_FCNTL_H 1 /* /usr/include/fcntl.h */ +//*efine HAS_ERRNO_DECL 1 /* errno.h declares errno */ + +#define HAS_FSTAT 1 /* fstat syscall */ +#define HAS_FCHMOD 1 /* fchmod syscall */ +#define HAS_CHMOD 1 /* chmod syscall */ +#define HAS_FCHOWN 1 /* fchown syscall */ +#define HAS_CHOWN 1 /* chown syscall */ +//*efine HAS__FSETMODE 1 /* _fsetmode -- set file mode */ + +#define HAS_STRING_H 1 /* /usr/include/string.h */ +//*efine HAS_STRINGS_H 1 /* /usr/include/strings.h */ + +#define HAS_UNISTD_H 1 /* /usr/include/unistd.h */ +#define HAS_UTIME 1 /* POSIX utime(path, times) */ +//*efine HAS_UTIMES 1 /* use utimes() syscall instead */ +#define HAS_UTIME_H 1 /* UTIME header file */ +//*efine HAS_UTIMBUF 1 /* struct utimbuf */ +//*efine HAS_UTIMEUSEC 1 /* microseconds in utimbuf? */ + +#endif /* CONFIG_H */ diff --git a/plugins/LadspaEffect/swh/gsm/decode.c b/plugins/LadspaEffect/swh/gsm/decode.c new file mode 100644 index 000000000..187f4fb2c --- /dev/null +++ b/plugins/LadspaEffect/swh/gsm/decode.c @@ -0,0 +1,63 @@ +/* + * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische + * Universitaet Berlin. See the accompanying file "COPYRIGHT" for + * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. + */ + +/* $Header: /home/cvs/giga/ladspa-swh/gsm/decode.c,v 1.1 2001/06/10 21:36:51 swh Exp $ */ + +#include + +#include "private.h" +#include "gsm.h" +#include "proto.h" + +/* + * 4.3 FIXED POINT IMPLEMENTATION OF THE RPE-LTP DECODER + */ + +static void Postprocessing P2((S,s), + struct gsm_state * S, + register word * s) +{ + register int k; + register word msr = S->msr; + register longword ltmp; /* for GSM_ADD */ + register word tmp; + + for (k = 160; k--; s++) { + tmp = GSM_MULT_R( msr, 28180 ); + msr = GSM_ADD(*s, tmp); /* Deemphasis */ + *s = GSM_ADD(msr, msr) & 0xFFF8; /* Truncation & Upscaling */ + } + S->msr = msr; +} + +void Gsm_Decoder P8((S,LARcr, Ncr,bcr,Mcr,xmaxcr,xMcr,s), + struct gsm_state * S, + + word * LARcr, /* [0..7] IN */ + + word * Ncr, /* [0..3] IN */ + word * bcr, /* [0..3] IN */ + word * Mcr, /* [0..3] IN */ + word * xmaxcr, /* [0..3] IN */ + word * xMcr, /* [0..13*4] IN */ + + word * s) /* [0..159] OUT */ +{ + int j, k; + word erp[40], wt[160]; + word * drp = S->dp0 + 120; + + for (j=0; j <= 3; j++, xmaxcr++, bcr++, Ncr++, Mcr++, xMcr += 13) { + + Gsm_RPE_Decoding( S, *xmaxcr, *Mcr, xMcr, erp ); + Gsm_Long_Term_Synthesis_Filtering( S, *Ncr, *bcr, erp, drp ); + + for (k = 0; k <= 39; k++) wt[ j * 40 + k ] = drp[ k ]; + } + + Gsm_Short_Term_Synthesis_Filter( S, LARcr, wt, s ); + Postprocessing(S, s); +} diff --git a/plugins/LadspaEffect/swh/gsm/gsm.h b/plugins/LadspaEffect/swh/gsm/gsm.h new file mode 100644 index 000000000..e5ce0bb20 --- /dev/null +++ b/plugins/LadspaEffect/swh/gsm/gsm.h @@ -0,0 +1,71 @@ +/* + * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische + * Universitaet Berlin. See the accompanying file "COPYRIGHT" for + * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. + */ + +/*$Header: /home/cvs/giga/ladspa-swh/gsm/gsm.h,v 1.1 2001/06/10 21:36:51 swh Exp $*/ + +#ifndef GSM_H +#define GSM_H + +#ifdef __cplusplus +# define NeedFunctionPrototypes 1 +#endif + +#if __STDC__ +# define NeedFunctionPrototypes 1 +#endif + +#ifdef _NO_PROTO +# undef NeedFunctionPrototypes +#endif + +#ifdef NeedFunctionPrototypes +# include /* for FILE * */ +#endif + +#undef GSM_P +#if NeedFunctionPrototypes +# define GSM_P( protos ) protos +#else +# define GSM_P( protos ) ( /* protos */ ) +#endif + +/* + * Interface + */ + +typedef struct gsm_state * gsm; +typedef short gsm_signal; /* signed 16 bit */ +typedef unsigned char gsm_byte; +typedef gsm_byte gsm_frame[33]; /* 33 * 8 bits */ + +#define GSM_MAGIC 0xD /* 13 kbit/s RPE-LTP */ + +#define GSM_PATCHLEVEL 10 +#define GSM_MINOR 0 +#define GSM_MAJOR 1 + +#define GSM_OPT_VERBOSE 1 +#define GSM_OPT_FAST 2 +#define GSM_OPT_LTP_CUT 3 +#define GSM_OPT_WAV49 4 +#define GSM_OPT_FRAME_INDEX 5 +#define GSM_OPT_FRAME_CHAIN 6 + +extern gsm gsm_create GSM_P((void)); +extern void gsm_destroy GSM_P((gsm)); + +extern int gsm_print GSM_P((FILE *, gsm, gsm_byte *)); +extern int gsm_option GSM_P((gsm, int, int *)); + +extern void gsm_encode GSM_P((gsm, gsm_signal *, gsm_byte *)); +extern int gsm_decode GSM_P((gsm, gsm_byte *, gsm_signal *)); + +extern int gsm_explode GSM_P((gsm, gsm_byte *, gsm_signal *)); +extern void gsm_implode GSM_P((gsm, gsm_signal *, gsm_byte *)); + +#undef GSM_P + +#endif /* GSM_H */ diff --git a/plugins/LadspaEffect/swh/gsm/gsm_create.c b/plugins/LadspaEffect/swh/gsm/gsm_create.c new file mode 100644 index 000000000..cadaff60e --- /dev/null +++ b/plugins/LadspaEffect/swh/gsm/gsm_create.c @@ -0,0 +1,45 @@ +/* + * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische + * Universitaet Berlin. See the accompanying file "COPYRIGHT" for + * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. + */ + +static char const ident[] = "$Header: /home/cvs/giga/ladspa-swh/gsm/gsm_create.c,v 1.1 2001/06/10 21:36:51 swh Exp $"; + +#include "config.h" + +#ifdef HAS_STRING_H +#include +#else +# include "proto.h" + extern char * memset P((char *, int, int)); +#endif + +#ifdef HAS_STDLIB_H +# include +#else +# ifdef HAS_MALLOC_H +# include +# else + extern char * malloc(); +# endif +#endif + +#include + +#include "gsm.h" +#include "private.h" +#include "proto.h" + +gsm gsm_create P0() +{ + gsm r; + + r = (gsm)malloc(sizeof(struct gsm_state)); + if (!r) return r; + + memset((char *)r, 0, sizeof(*r)); + r->nrp = 40; + + return r; +} diff --git a/plugins/LadspaEffect/swh/gsm/gsm_decode.c b/plugins/LadspaEffect/swh/gsm/gsm_decode.c new file mode 100644 index 000000000..08135212f --- /dev/null +++ b/plugins/LadspaEffect/swh/gsm/gsm_decode.c @@ -0,0 +1,361 @@ +/* + * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische + * Universitaet Berlin. See the accompanying file "COPYRIGHT" for + * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. + */ + +/* $Header: /home/cvs/giga/ladspa-swh/gsm/gsm_decode.c,v 1.1 2001/06/10 21:36:51 swh Exp $ */ + +#include "private.h" + +#include "gsm.h" +#include "proto.h" + +int gsm_decode P3((s, c, target), gsm s, gsm_byte * c, gsm_signal * target) +{ + word LARc[8], Nc[4], Mc[4], bc[4], xmaxc[4], xmc[13*4]; + +#ifdef WAV49 + if (s->wav_fmt) { + + uword sr = 0; + + s->frame_index = !s->frame_index; + if (s->frame_index) { + + sr = *c++; + LARc[0] = sr & 0x3f; sr >>= 6; + sr |= (uword)*c++ << 2; + LARc[1] = sr & 0x3f; sr >>= 6; + sr |= (uword)*c++ << 4; + LARc[2] = sr & 0x1f; sr >>= 5; + LARc[3] = sr & 0x1f; sr >>= 5; + sr |= (uword)*c++ << 2; + LARc[4] = sr & 0xf; sr >>= 4; + LARc[5] = sr & 0xf; sr >>= 4; + sr |= (uword)*c++ << 2; /* 5 */ + LARc[6] = sr & 0x7; sr >>= 3; + LARc[7] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 4; + Nc[0] = sr & 0x7f; sr >>= 7; + bc[0] = sr & 0x3; sr >>= 2; + Mc[0] = sr & 0x3; sr >>= 2; + sr |= (uword)*c++ << 1; + xmaxc[0] = sr & 0x3f; sr >>= 6; + xmc[0] = sr & 0x7; sr >>= 3; + sr = *c++; + xmc[1] = sr & 0x7; sr >>= 3; + xmc[2] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 2; + xmc[3] = sr & 0x7; sr >>= 3; + xmc[4] = sr & 0x7; sr >>= 3; + xmc[5] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 1; /* 10 */ + xmc[6] = sr & 0x7; sr >>= 3; + xmc[7] = sr & 0x7; sr >>= 3; + xmc[8] = sr & 0x7; sr >>= 3; + sr = *c++; + xmc[9] = sr & 0x7; sr >>= 3; + xmc[10] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 2; + xmc[11] = sr & 0x7; sr >>= 3; + xmc[12] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 4; + Nc[1] = sr & 0x7f; sr >>= 7; + bc[1] = sr & 0x3; sr >>= 2; + Mc[1] = sr & 0x3; sr >>= 2; + sr |= (uword)*c++ << 1; + xmaxc[1] = sr & 0x3f; sr >>= 6; + xmc[13] = sr & 0x7; sr >>= 3; + sr = *c++; /* 15 */ + xmc[14] = sr & 0x7; sr >>= 3; + xmc[15] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 2; + xmc[16] = sr & 0x7; sr >>= 3; + xmc[17] = sr & 0x7; sr >>= 3; + xmc[18] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 1; + xmc[19] = sr & 0x7; sr >>= 3; + xmc[20] = sr & 0x7; sr >>= 3; + xmc[21] = sr & 0x7; sr >>= 3; + sr = *c++; + xmc[22] = sr & 0x7; sr >>= 3; + xmc[23] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 2; + xmc[24] = sr & 0x7; sr >>= 3; + xmc[25] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 4; /* 20 */ + Nc[2] = sr & 0x7f; sr >>= 7; + bc[2] = sr & 0x3; sr >>= 2; + Mc[2] = sr & 0x3; sr >>= 2; + sr |= (uword)*c++ << 1; + xmaxc[2] = sr & 0x3f; sr >>= 6; + xmc[26] = sr & 0x7; sr >>= 3; + sr = *c++; + xmc[27] = sr & 0x7; sr >>= 3; + xmc[28] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 2; + xmc[29] = sr & 0x7; sr >>= 3; + xmc[30] = sr & 0x7; sr >>= 3; + xmc[31] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 1; + xmc[32] = sr & 0x7; sr >>= 3; + xmc[33] = sr & 0x7; sr >>= 3; + xmc[34] = sr & 0x7; sr >>= 3; + sr = *c++; /* 25 */ + xmc[35] = sr & 0x7; sr >>= 3; + xmc[36] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 2; + xmc[37] = sr & 0x7; sr >>= 3; + xmc[38] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 4; + Nc[3] = sr & 0x7f; sr >>= 7; + bc[3] = sr & 0x3; sr >>= 2; + Mc[3] = sr & 0x3; sr >>= 2; + sr |= (uword)*c++ << 1; + xmaxc[3] = sr & 0x3f; sr >>= 6; + xmc[39] = sr & 0x7; sr >>= 3; + sr = *c++; + xmc[40] = sr & 0x7; sr >>= 3; + xmc[41] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 2; /* 30 */ + xmc[42] = sr & 0x7; sr >>= 3; + xmc[43] = sr & 0x7; sr >>= 3; + xmc[44] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 1; + xmc[45] = sr & 0x7; sr >>= 3; + xmc[46] = sr & 0x7; sr >>= 3; + xmc[47] = sr & 0x7; sr >>= 3; + sr = *c++; + xmc[48] = sr & 0x7; sr >>= 3; + xmc[49] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 2; + xmc[50] = sr & 0x7; sr >>= 3; + xmc[51] = sr & 0x7; sr >>= 3; + + s->frame_chain = sr & 0xf; + } + else { + sr = s->frame_chain; + sr |= (uword)*c++ << 4; /* 1 */ + LARc[0] = sr & 0x3f; sr >>= 6; + LARc[1] = sr & 0x3f; sr >>= 6; + sr = *c++; + LARc[2] = sr & 0x1f; sr >>= 5; + sr |= (uword)*c++ << 3; + LARc[3] = sr & 0x1f; sr >>= 5; + LARc[4] = sr & 0xf; sr >>= 4; + sr |= (uword)*c++ << 2; + LARc[5] = sr & 0xf; sr >>= 4; + LARc[6] = sr & 0x7; sr >>= 3; + LARc[7] = sr & 0x7; sr >>= 3; + sr = *c++; /* 5 */ + Nc[0] = sr & 0x7f; sr >>= 7; + sr |= (uword)*c++ << 1; + bc[0] = sr & 0x3; sr >>= 2; + Mc[0] = sr & 0x3; sr >>= 2; + sr |= (uword)*c++ << 5; + xmaxc[0] = sr & 0x3f; sr >>= 6; + xmc[0] = sr & 0x7; sr >>= 3; + xmc[1] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 1; + xmc[2] = sr & 0x7; sr >>= 3; + xmc[3] = sr & 0x7; sr >>= 3; + xmc[4] = sr & 0x7; sr >>= 3; + sr = *c++; + xmc[5] = sr & 0x7; sr >>= 3; + xmc[6] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 2; /* 10 */ + xmc[7] = sr & 0x7; sr >>= 3; + xmc[8] = sr & 0x7; sr >>= 3; + xmc[9] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 1; + xmc[10] = sr & 0x7; sr >>= 3; + xmc[11] = sr & 0x7; sr >>= 3; + xmc[12] = sr & 0x7; sr >>= 3; + sr = *c++; + Nc[1] = sr & 0x7f; sr >>= 7; + sr |= (uword)*c++ << 1; + bc[1] = sr & 0x3; sr >>= 2; + Mc[1] = sr & 0x3; sr >>= 2; + sr |= (uword)*c++ << 5; + xmaxc[1] = sr & 0x3f; sr >>= 6; + xmc[13] = sr & 0x7; sr >>= 3; + xmc[14] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 1; /* 15 */ + xmc[15] = sr & 0x7; sr >>= 3; + xmc[16] = sr & 0x7; sr >>= 3; + xmc[17] = sr & 0x7; sr >>= 3; + sr = *c++; + xmc[18] = sr & 0x7; sr >>= 3; + xmc[19] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 2; + xmc[20] = sr & 0x7; sr >>= 3; + xmc[21] = sr & 0x7; sr >>= 3; + xmc[22] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 1; + xmc[23] = sr & 0x7; sr >>= 3; + xmc[24] = sr & 0x7; sr >>= 3; + xmc[25] = sr & 0x7; sr >>= 3; + sr = *c++; + Nc[2] = sr & 0x7f; sr >>= 7; + sr |= (uword)*c++ << 1; /* 20 */ + bc[2] = sr & 0x3; sr >>= 2; + Mc[2] = sr & 0x3; sr >>= 2; + sr |= (uword)*c++ << 5; + xmaxc[2] = sr & 0x3f; sr >>= 6; + xmc[26] = sr & 0x7; sr >>= 3; + xmc[27] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 1; + xmc[28] = sr & 0x7; sr >>= 3; + xmc[29] = sr & 0x7; sr >>= 3; + xmc[30] = sr & 0x7; sr >>= 3; + sr = *c++; + xmc[31] = sr & 0x7; sr >>= 3; + xmc[32] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 2; + xmc[33] = sr & 0x7; sr >>= 3; + xmc[34] = sr & 0x7; sr >>= 3; + xmc[35] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 1; /* 25 */ + xmc[36] = sr & 0x7; sr >>= 3; + xmc[37] = sr & 0x7; sr >>= 3; + xmc[38] = sr & 0x7; sr >>= 3; + sr = *c++; + Nc[3] = sr & 0x7f; sr >>= 7; + sr |= (uword)*c++ << 1; + bc[3] = sr & 0x3; sr >>= 2; + Mc[3] = sr & 0x3; sr >>= 2; + sr |= (uword)*c++ << 5; + xmaxc[3] = sr & 0x3f; sr >>= 6; + xmc[39] = sr & 0x7; sr >>= 3; + xmc[40] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 1; + xmc[41] = sr & 0x7; sr >>= 3; + xmc[42] = sr & 0x7; sr >>= 3; + xmc[43] = sr & 0x7; sr >>= 3; + sr = *c++; /* 30 */ + xmc[44] = sr & 0x7; sr >>= 3; + xmc[45] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 2; + xmc[46] = sr & 0x7; sr >>= 3; + xmc[47] = sr & 0x7; sr >>= 3; + xmc[48] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 1; + xmc[49] = sr & 0x7; sr >>= 3; + xmc[50] = sr & 0x7; sr >>= 3; + xmc[51] = sr & 0x7; sr >>= 3; + } + } + else +#endif + { + /* GSM_MAGIC = (*c >> 4) & 0xF; */ + + if (((*c >> 4) & 0x0F) != GSM_MAGIC) return -1; + + LARc[0] = (*c++ & 0xF) << 2; /* 1 */ + LARc[0] |= (*c >> 6) & 0x3; + LARc[1] = *c++ & 0x3F; + LARc[2] = (*c >> 3) & 0x1F; + LARc[3] = (*c++ & 0x7) << 2; + LARc[3] |= (*c >> 6) & 0x3; + LARc[4] = (*c >> 2) & 0xF; + LARc[5] = (*c++ & 0x3) << 2; + LARc[5] |= (*c >> 6) & 0x3; + LARc[6] = (*c >> 3) & 0x7; + LARc[7] = *c++ & 0x7; + Nc[0] = (*c >> 1) & 0x7F; + bc[0] = (*c++ & 0x1) << 1; + bc[0] |= (*c >> 7) & 0x1; + Mc[0] = (*c >> 5) & 0x3; + xmaxc[0] = (*c++ & 0x1F) << 1; + xmaxc[0] |= (*c >> 7) & 0x1; + xmc[0] = (*c >> 4) & 0x7; + xmc[1] = (*c >> 1) & 0x7; + xmc[2] = (*c++ & 0x1) << 2; + xmc[2] |= (*c >> 6) & 0x3; + xmc[3] = (*c >> 3) & 0x7; + xmc[4] = *c++ & 0x7; + xmc[5] = (*c >> 5) & 0x7; + xmc[6] = (*c >> 2) & 0x7; + xmc[7] = (*c++ & 0x3) << 1; /* 10 */ + xmc[7] |= (*c >> 7) & 0x1; + xmc[8] = (*c >> 4) & 0x7; + xmc[9] = (*c >> 1) & 0x7; + xmc[10] = (*c++ & 0x1) << 2; + xmc[10] |= (*c >> 6) & 0x3; + xmc[11] = (*c >> 3) & 0x7; + xmc[12] = *c++ & 0x7; + Nc[1] = (*c >> 1) & 0x7F; + bc[1] = (*c++ & 0x1) << 1; + bc[1] |= (*c >> 7) & 0x1; + Mc[1] = (*c >> 5) & 0x3; + xmaxc[1] = (*c++ & 0x1F) << 1; + xmaxc[1] |= (*c >> 7) & 0x1; + xmc[13] = (*c >> 4) & 0x7; + xmc[14] = (*c >> 1) & 0x7; + xmc[15] = (*c++ & 0x1) << 2; + xmc[15] |= (*c >> 6) & 0x3; + xmc[16] = (*c >> 3) & 0x7; + xmc[17] = *c++ & 0x7; + xmc[18] = (*c >> 5) & 0x7; + xmc[19] = (*c >> 2) & 0x7; + xmc[20] = (*c++ & 0x3) << 1; + xmc[20] |= (*c >> 7) & 0x1; + xmc[21] = (*c >> 4) & 0x7; + xmc[22] = (*c >> 1) & 0x7; + xmc[23] = (*c++ & 0x1) << 2; + xmc[23] |= (*c >> 6) & 0x3; + xmc[24] = (*c >> 3) & 0x7; + xmc[25] = *c++ & 0x7; + Nc[2] = (*c >> 1) & 0x7F; + bc[2] = (*c++ & 0x1) << 1; /* 20 */ + bc[2] |= (*c >> 7) & 0x1; + Mc[2] = (*c >> 5) & 0x3; + xmaxc[2] = (*c++ & 0x1F) << 1; + xmaxc[2] |= (*c >> 7) & 0x1; + xmc[26] = (*c >> 4) & 0x7; + xmc[27] = (*c >> 1) & 0x7; + xmc[28] = (*c++ & 0x1) << 2; + xmc[28] |= (*c >> 6) & 0x3; + xmc[29] = (*c >> 3) & 0x7; + xmc[30] = *c++ & 0x7; + xmc[31] = (*c >> 5) & 0x7; + xmc[32] = (*c >> 2) & 0x7; + xmc[33] = (*c++ & 0x3) << 1; + xmc[33] |= (*c >> 7) & 0x1; + xmc[34] = (*c >> 4) & 0x7; + xmc[35] = (*c >> 1) & 0x7; + xmc[36] = (*c++ & 0x1) << 2; + xmc[36] |= (*c >> 6) & 0x3; + xmc[37] = (*c >> 3) & 0x7; + xmc[38] = *c++ & 0x7; + Nc[3] = (*c >> 1) & 0x7F; + bc[3] = (*c++ & 0x1) << 1; + bc[3] |= (*c >> 7) & 0x1; + Mc[3] = (*c >> 5) & 0x3; + xmaxc[3] = (*c++ & 0x1F) << 1; + xmaxc[3] |= (*c >> 7) & 0x1; + xmc[39] = (*c >> 4) & 0x7; + xmc[40] = (*c >> 1) & 0x7; + xmc[41] = (*c++ & 0x1) << 2; + xmc[41] |= (*c >> 6) & 0x3; + xmc[42] = (*c >> 3) & 0x7; + xmc[43] = *c++ & 0x7; /* 30 */ + xmc[44] = (*c >> 5) & 0x7; + xmc[45] = (*c >> 2) & 0x7; + xmc[46] = (*c++ & 0x3) << 1; + xmc[46] |= (*c >> 7) & 0x1; + xmc[47] = (*c >> 4) & 0x7; + xmc[48] = (*c >> 1) & 0x7; + xmc[49] = (*c++ & 0x1) << 2; + xmc[49] |= (*c >> 6) & 0x3; + xmc[50] = (*c >> 3) & 0x7; + xmc[51] = *c & 0x7; /* 33 */ + } + + Gsm_Decoder(s, LARc, Nc, bc, Mc, xmaxc, xmc, target); + + return 0; +} diff --git a/plugins/LadspaEffect/swh/gsm/gsm_destroy.c b/plugins/LadspaEffect/swh/gsm/gsm_destroy.c new file mode 100644 index 000000000..8630364df --- /dev/null +++ b/plugins/LadspaEffect/swh/gsm/gsm_destroy.c @@ -0,0 +1,26 @@ +/* + * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische + * Universitaet Berlin. See the accompanying file "COPYRIGHT" for + * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. + */ + +/* $Header: /home/cvs/giga/ladspa-swh/gsm/gsm_destroy.c,v 1.1 2001/06/10 21:36:51 swh Exp $ */ + +#include "gsm.h" +#include "config.h" +#include "proto.h" + +#ifdef HAS_STDLIB_H +# include +#else +# ifdef HAS_MALLOC_H +# include +# else + extern void free(); +# endif +#endif + +void gsm_destroy P1((S), gsm S) +{ + if (S) free((char *)S); +} diff --git a/plugins/LadspaEffect/swh/gsm/gsm_encode.c b/plugins/LadspaEffect/swh/gsm/gsm_encode.c new file mode 100644 index 000000000..ea298e1f8 --- /dev/null +++ b/plugins/LadspaEffect/swh/gsm/gsm_encode.c @@ -0,0 +1,451 @@ +/* + * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische + * Universitaet Berlin. See the accompanying file "COPYRIGHT" for + * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. + */ + +/* $Header: /home/cvs/giga/ladspa-swh/gsm/gsm_encode.c,v 1.1 2001/06/10 21:36:51 swh Exp $ */ + +#include "private.h" +#include "gsm.h" +#include "proto.h" + +void gsm_encode P3((s, source, c), gsm s, gsm_signal * source, gsm_byte * c) +{ + word LARc[8], Nc[4], Mc[4], bc[4], xmaxc[4], xmc[13*4]; + + Gsm_Coder(s, source, LARc, Nc, bc, Mc, xmaxc, xmc); + + + /* variable size + + GSM_MAGIC 4 + + LARc[0] 6 + LARc[1] 6 + LARc[2] 5 + LARc[3] 5 + LARc[4] 4 + LARc[5] 4 + LARc[6] 3 + LARc[7] 3 + + Nc[0] 7 + bc[0] 2 + Mc[0] 2 + xmaxc[0] 6 + xmc[0] 3 + xmc[1] 3 + xmc[2] 3 + xmc[3] 3 + xmc[4] 3 + xmc[5] 3 + xmc[6] 3 + xmc[7] 3 + xmc[8] 3 + xmc[9] 3 + xmc[10] 3 + xmc[11] 3 + xmc[12] 3 + + Nc[1] 7 + bc[1] 2 + Mc[1] 2 + xmaxc[1] 6 + xmc[13] 3 + xmc[14] 3 + xmc[15] 3 + xmc[16] 3 + xmc[17] 3 + xmc[18] 3 + xmc[19] 3 + xmc[20] 3 + xmc[21] 3 + xmc[22] 3 + xmc[23] 3 + xmc[24] 3 + xmc[25] 3 + + Nc[2] 7 + bc[2] 2 + Mc[2] 2 + xmaxc[2] 6 + xmc[26] 3 + xmc[27] 3 + xmc[28] 3 + xmc[29] 3 + xmc[30] 3 + xmc[31] 3 + xmc[32] 3 + xmc[33] 3 + xmc[34] 3 + xmc[35] 3 + xmc[36] 3 + xmc[37] 3 + xmc[38] 3 + + Nc[3] 7 + bc[3] 2 + Mc[3] 2 + xmaxc[3] 6 + xmc[39] 3 + xmc[40] 3 + xmc[41] 3 + xmc[42] 3 + xmc[43] 3 + xmc[44] 3 + xmc[45] 3 + xmc[46] 3 + xmc[47] 3 + xmc[48] 3 + xmc[49] 3 + xmc[50] 3 + xmc[51] 3 + */ + +#ifdef WAV49 + + if (s->wav_fmt) { + s->frame_index = !s->frame_index; + if (s->frame_index) { + + uword sr; + + sr = 0; + sr = sr >> 6 | LARc[0] << 10; + sr = sr >> 6 | LARc[1] << 10; + *c++ = sr >> 4; + sr = sr >> 5 | LARc[2] << 11; + *c++ = sr >> 7; + sr = sr >> 5 | LARc[3] << 11; + sr = sr >> 4 | LARc[4] << 12; + *c++ = sr >> 6; + sr = sr >> 4 | LARc[5] << 12; + sr = sr >> 3 | LARc[6] << 13; + *c++ = sr >> 7; + sr = sr >> 3 | LARc[7] << 13; + sr = sr >> 7 | Nc[0] << 9; + *c++ = sr >> 5; + sr = sr >> 2 | bc[0] << 14; + sr = sr >> 2 | Mc[0] << 14; + sr = sr >> 6 | xmaxc[0] << 10; + *c++ = sr >> 3; + sr = sr >> 3 | xmc[0] << 13; + *c++ = sr >> 8; + sr = sr >> 3 | xmc[1] << 13; + sr = sr >> 3 | xmc[2] << 13; + sr = sr >> 3 | xmc[3] << 13; + *c++ = sr >> 7; + sr = sr >> 3 | xmc[4] << 13; + sr = sr >> 3 | xmc[5] << 13; + sr = sr >> 3 | xmc[6] << 13; + *c++ = sr >> 6; + sr = sr >> 3 | xmc[7] << 13; + sr = sr >> 3 | xmc[8] << 13; + *c++ = sr >> 8; + sr = sr >> 3 | xmc[9] << 13; + sr = sr >> 3 | xmc[10] << 13; + sr = sr >> 3 | xmc[11] << 13; + *c++ = sr >> 7; + sr = sr >> 3 | xmc[12] << 13; + sr = sr >> 7 | Nc[1] << 9; + *c++ = sr >> 5; + sr = sr >> 2 | bc[1] << 14; + sr = sr >> 2 | Mc[1] << 14; + sr = sr >> 6 | xmaxc[1] << 10; + *c++ = sr >> 3; + sr = sr >> 3 | xmc[13] << 13; + *c++ = sr >> 8; + sr = sr >> 3 | xmc[14] << 13; + sr = sr >> 3 | xmc[15] << 13; + sr = sr >> 3 | xmc[16] << 13; + *c++ = sr >> 7; + sr = sr >> 3 | xmc[17] << 13; + sr = sr >> 3 | xmc[18] << 13; + sr = sr >> 3 | xmc[19] << 13; + *c++ = sr >> 6; + sr = sr >> 3 | xmc[20] << 13; + sr = sr >> 3 | xmc[21] << 13; + *c++ = sr >> 8; + sr = sr >> 3 | xmc[22] << 13; + sr = sr >> 3 | xmc[23] << 13; + sr = sr >> 3 | xmc[24] << 13; + *c++ = sr >> 7; + sr = sr >> 3 | xmc[25] << 13; + sr = sr >> 7 | Nc[2] << 9; + *c++ = sr >> 5; + sr = sr >> 2 | bc[2] << 14; + sr = sr >> 2 | Mc[2] << 14; + sr = sr >> 6 | xmaxc[2] << 10; + *c++ = sr >> 3; + sr = sr >> 3 | xmc[26] << 13; + *c++ = sr >> 8; + sr = sr >> 3 | xmc[27] << 13; + sr = sr >> 3 | xmc[28] << 13; + sr = sr >> 3 | xmc[29] << 13; + *c++ = sr >> 7; + sr = sr >> 3 | xmc[30] << 13; + sr = sr >> 3 | xmc[31] << 13; + sr = sr >> 3 | xmc[32] << 13; + *c++ = sr >> 6; + sr = sr >> 3 | xmc[33] << 13; + sr = sr >> 3 | xmc[34] << 13; + *c++ = sr >> 8; + sr = sr >> 3 | xmc[35] << 13; + sr = sr >> 3 | xmc[36] << 13; + sr = sr >> 3 | xmc[37] << 13; + *c++ = sr >> 7; + sr = sr >> 3 | xmc[38] << 13; + sr = sr >> 7 | Nc[3] << 9; + *c++ = sr >> 5; + sr = sr >> 2 | bc[3] << 14; + sr = sr >> 2 | Mc[3] << 14; + sr = sr >> 6 | xmaxc[3] << 10; + *c++ = sr >> 3; + sr = sr >> 3 | xmc[39] << 13; + *c++ = sr >> 8; + sr = sr >> 3 | xmc[40] << 13; + sr = sr >> 3 | xmc[41] << 13; + sr = sr >> 3 | xmc[42] << 13; + *c++ = sr >> 7; + sr = sr >> 3 | xmc[43] << 13; + sr = sr >> 3 | xmc[44] << 13; + sr = sr >> 3 | xmc[45] << 13; + *c++ = sr >> 6; + sr = sr >> 3 | xmc[46] << 13; + sr = sr >> 3 | xmc[47] << 13; + *c++ = sr >> 8; + sr = sr >> 3 | xmc[48] << 13; + sr = sr >> 3 | xmc[49] << 13; + sr = sr >> 3 | xmc[50] << 13; + *c++ = sr >> 7; + sr = sr >> 3 | xmc[51] << 13; + sr = sr >> 4; + *c = sr >> 8; + s->frame_chain = *c; + } + else { + uword sr; + + sr = 0; + sr = sr >> 4 | s->frame_chain << 12; + sr = sr >> 6 | LARc[0] << 10; + *c++ = sr >> 6; + sr = sr >> 6 | LARc[1] << 10; + *c++ = sr >> 8; + sr = sr >> 5 | LARc[2] << 11; + sr = sr >> 5 | LARc[3] << 11; + *c++ = sr >> 6; + sr = sr >> 4 | LARc[4] << 12; + sr = sr >> 4 | LARc[5] << 12; + *c++ = sr >> 6; + sr = sr >> 3 | LARc[6] << 13; + sr = sr >> 3 | LARc[7] << 13; + *c++ = sr >> 8; + sr = sr >> 7 | Nc[0] << 9; + sr = sr >> 2 | bc[0] << 14; + *c++ = sr >> 7; + sr = sr >> 2 | Mc[0] << 14; + sr = sr >> 6 | xmaxc[0] << 10; + *c++ = sr >> 7; + sr = sr >> 3 | xmc[0] << 13; + sr = sr >> 3 | xmc[1] << 13; + sr = sr >> 3 | xmc[2] << 13; + *c++ = sr >> 6; + sr = sr >> 3 | xmc[3] << 13; + sr = sr >> 3 | xmc[4] << 13; + *c++ = sr >> 8; + sr = sr >> 3 | xmc[5] << 13; + sr = sr >> 3 | xmc[6] << 13; + sr = sr >> 3 | xmc[7] << 13; + *c++ = sr >> 7; + sr = sr >> 3 | xmc[8] << 13; + sr = sr >> 3 | xmc[9] << 13; + sr = sr >> 3 | xmc[10] << 13; + *c++ = sr >> 6; + sr = sr >> 3 | xmc[11] << 13; + sr = sr >> 3 | xmc[12] << 13; + *c++ = sr >> 8; + sr = sr >> 7 | Nc[1] << 9; + sr = sr >> 2 | bc[1] << 14; + *c++ = sr >> 7; + sr = sr >> 2 | Mc[1] << 14; + sr = sr >> 6 | xmaxc[1] << 10; + *c++ = sr >> 7; + sr = sr >> 3 | xmc[13] << 13; + sr = sr >> 3 | xmc[14] << 13; + sr = sr >> 3 | xmc[15] << 13; + *c++ = sr >> 6; + sr = sr >> 3 | xmc[16] << 13; + sr = sr >> 3 | xmc[17] << 13; + *c++ = sr >> 8; + sr = sr >> 3 | xmc[18] << 13; + sr = sr >> 3 | xmc[19] << 13; + sr = sr >> 3 | xmc[20] << 13; + *c++ = sr >> 7; + sr = sr >> 3 | xmc[21] << 13; + sr = sr >> 3 | xmc[22] << 13; + sr = sr >> 3 | xmc[23] << 13; + *c++ = sr >> 6; + sr = sr >> 3 | xmc[24] << 13; + sr = sr >> 3 | xmc[25] << 13; + *c++ = sr >> 8; + sr = sr >> 7 | Nc[2] << 9; + sr = sr >> 2 | bc[2] << 14; + *c++ = sr >> 7; + sr = sr >> 2 | Mc[2] << 14; + sr = sr >> 6 | xmaxc[2] << 10; + *c++ = sr >> 7; + sr = sr >> 3 | xmc[26] << 13; + sr = sr >> 3 | xmc[27] << 13; + sr = sr >> 3 | xmc[28] << 13; + *c++ = sr >> 6; + sr = sr >> 3 | xmc[29] << 13; + sr = sr >> 3 | xmc[30] << 13; + *c++ = sr >> 8; + sr = sr >> 3 | xmc[31] << 13; + sr = sr >> 3 | xmc[32] << 13; + sr = sr >> 3 | xmc[33] << 13; + *c++ = sr >> 7; + sr = sr >> 3 | xmc[34] << 13; + sr = sr >> 3 | xmc[35] << 13; + sr = sr >> 3 | xmc[36] << 13; + *c++ = sr >> 6; + sr = sr >> 3 | xmc[37] << 13; + sr = sr >> 3 | xmc[38] << 13; + *c++ = sr >> 8; + sr = sr >> 7 | Nc[3] << 9; + sr = sr >> 2 | bc[3] << 14; + *c++ = sr >> 7; + sr = sr >> 2 | Mc[3] << 14; + sr = sr >> 6 | xmaxc[3] << 10; + *c++ = sr >> 7; + sr = sr >> 3 | xmc[39] << 13; + sr = sr >> 3 | xmc[40] << 13; + sr = sr >> 3 | xmc[41] << 13; + *c++ = sr >> 6; + sr = sr >> 3 | xmc[42] << 13; + sr = sr >> 3 | xmc[43] << 13; + *c++ = sr >> 8; + sr = sr >> 3 | xmc[44] << 13; + sr = sr >> 3 | xmc[45] << 13; + sr = sr >> 3 | xmc[46] << 13; + *c++ = sr >> 7; + sr = sr >> 3 | xmc[47] << 13; + sr = sr >> 3 | xmc[48] << 13; + sr = sr >> 3 | xmc[49] << 13; + *c++ = sr >> 6; + sr = sr >> 3 | xmc[50] << 13; + sr = sr >> 3 | xmc[51] << 13; + *c++ = sr >> 8; + } + } + + else + +#endif /* WAV49 */ + { + + *c++ = ((GSM_MAGIC & 0xF) << 4) /* 1 */ + | ((LARc[0] >> 2) & 0xF); + *c++ = ((LARc[0] & 0x3) << 6) + | (LARc[1] & 0x3F); + *c++ = ((LARc[2] & 0x1F) << 3) + | ((LARc[3] >> 2) & 0x7); + *c++ = ((LARc[3] & 0x3) << 6) + | ((LARc[4] & 0xF) << 2) + | ((LARc[5] >> 2) & 0x3); + *c++ = ((LARc[5] & 0x3) << 6) + | ((LARc[6] & 0x7) << 3) + | (LARc[7] & 0x7); + *c++ = ((Nc[0] & 0x7F) << 1) + | ((bc[0] >> 1) & 0x1); + *c++ = ((bc[0] & 0x1) << 7) + | ((Mc[0] & 0x3) << 5) + | ((xmaxc[0] >> 1) & 0x1F); + *c++ = ((xmaxc[0] & 0x1) << 7) + | ((xmc[0] & 0x7) << 4) + | ((xmc[1] & 0x7) << 1) + | ((xmc[2] >> 2) & 0x1); + *c++ = ((xmc[2] & 0x3) << 6) + | ((xmc[3] & 0x7) << 3) + | (xmc[4] & 0x7); + *c++ = ((xmc[5] & 0x7) << 5) /* 10 */ + | ((xmc[6] & 0x7) << 2) + | ((xmc[7] >> 1) & 0x3); + *c++ = ((xmc[7] & 0x1) << 7) + | ((xmc[8] & 0x7) << 4) + | ((xmc[9] & 0x7) << 1) + | ((xmc[10] >> 2) & 0x1); + *c++ = ((xmc[10] & 0x3) << 6) + | ((xmc[11] & 0x7) << 3) + | (xmc[12] & 0x7); + *c++ = ((Nc[1] & 0x7F) << 1) + | ((bc[1] >> 1) & 0x1); + *c++ = ((bc[1] & 0x1) << 7) + | ((Mc[1] & 0x3) << 5) + | ((xmaxc[1] >> 1) & 0x1F); + *c++ = ((xmaxc[1] & 0x1) << 7) + | ((xmc[13] & 0x7) << 4) + | ((xmc[14] & 0x7) << 1) + | ((xmc[15] >> 2) & 0x1); + *c++ = ((xmc[15] & 0x3) << 6) + | ((xmc[16] & 0x7) << 3) + | (xmc[17] & 0x7); + *c++ = ((xmc[18] & 0x7) << 5) + | ((xmc[19] & 0x7) << 2) + | ((xmc[20] >> 1) & 0x3); + *c++ = ((xmc[20] & 0x1) << 7) + | ((xmc[21] & 0x7) << 4) + | ((xmc[22] & 0x7) << 1) + | ((xmc[23] >> 2) & 0x1); + *c++ = ((xmc[23] & 0x3) << 6) + | ((xmc[24] & 0x7) << 3) + | (xmc[25] & 0x7); + *c++ = ((Nc[2] & 0x7F) << 1) /* 20 */ + | ((bc[2] >> 1) & 0x1); + *c++ = ((bc[2] & 0x1) << 7) + | ((Mc[2] & 0x3) << 5) + | ((xmaxc[2] >> 1) & 0x1F); + *c++ = ((xmaxc[2] & 0x1) << 7) + | ((xmc[26] & 0x7) << 4) + | ((xmc[27] & 0x7) << 1) + | ((xmc[28] >> 2) & 0x1); + *c++ = ((xmc[28] & 0x3) << 6) + | ((xmc[29] & 0x7) << 3) + | (xmc[30] & 0x7); + *c++ = ((xmc[31] & 0x7) << 5) + | ((xmc[32] & 0x7) << 2) + | ((xmc[33] >> 1) & 0x3); + *c++ = ((xmc[33] & 0x1) << 7) + | ((xmc[34] & 0x7) << 4) + | ((xmc[35] & 0x7) << 1) + | ((xmc[36] >> 2) & 0x1); + *c++ = ((xmc[36] & 0x3) << 6) + | ((xmc[37] & 0x7) << 3) + | (xmc[38] & 0x7); + *c++ = ((Nc[3] & 0x7F) << 1) + | ((bc[3] >> 1) & 0x1); + *c++ = ((bc[3] & 0x1) << 7) + | ((Mc[3] & 0x3) << 5) + | ((xmaxc[3] >> 1) & 0x1F); + *c++ = ((xmaxc[3] & 0x1) << 7) + | ((xmc[39] & 0x7) << 4) + | ((xmc[40] & 0x7) << 1) + | ((xmc[41] >> 2) & 0x1); + *c++ = ((xmc[41] & 0x3) << 6) /* 30 */ + | ((xmc[42] & 0x7) << 3) + | (xmc[43] & 0x7); + *c++ = ((xmc[44] & 0x7) << 5) + | ((xmc[45] & 0x7) << 2) + | ((xmc[46] >> 1) & 0x3); + *c++ = ((xmc[46] & 0x1) << 7) + | ((xmc[47] & 0x7) << 4) + | ((xmc[48] & 0x7) << 1) + | ((xmc[49] >> 2) & 0x1); + *c++ = ((xmc[49] & 0x3) << 6) + | ((xmc[50] & 0x7) << 3) + | (xmc[51] & 0x7); + + } +} diff --git a/plugins/LadspaEffect/swh/gsm/gsm_option.c b/plugins/LadspaEffect/swh/gsm/gsm_option.c new file mode 100644 index 000000000..b9901ef9e --- /dev/null +++ b/plugins/LadspaEffect/swh/gsm/gsm_option.c @@ -0,0 +1,69 @@ +/* + * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische + * Universitaet Berlin. See the accompanying file "COPYRIGHT" for + * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. + */ + +/* $Header: /home/cvs/giga/ladspa-swh/gsm/gsm_option.c,v 1.1 2001/06/10 21:36:51 swh Exp $ */ + +#include "private.h" + +#include "gsm.h" +#include "proto.h" + +int gsm_option P3((r, opt, val), gsm r, int opt, int * val) +{ + int result = -1; + + switch (opt) { + case GSM_OPT_LTP_CUT: +#ifdef LTP_CUT + result = r->ltp_cut; + if (val) r->ltp_cut = *val; +#endif + break; + + case GSM_OPT_VERBOSE: +#ifndef NDEBUG + result = r->verbose; + if (val) r->verbose = *val; +#endif + break; + + case GSM_OPT_FAST: + +#if defined(FAST) && defined(USE_FLOAT_MUL) + result = r->fast; + if (val) r->fast = !!*val; +#endif + break; + + case GSM_OPT_FRAME_CHAIN: + +#ifdef WAV49 + result = r->frame_chain; + if (val) r->frame_chain = *val; +#endif + break; + + case GSM_OPT_FRAME_INDEX: + +#ifdef WAV49 + result = r->frame_index; + if (val) r->frame_index = *val; +#endif + break; + + case GSM_OPT_WAV49: + +#ifdef WAV49 + result = r->wav_fmt; + if (val) r->wav_fmt = !!*val; +#endif + break; + + default: + break; + } + return result; +} diff --git a/plugins/LadspaEffect/swh/gsm/long_term.c b/plugins/LadspaEffect/swh/gsm/long_term.c new file mode 100644 index 000000000..176b82779 --- /dev/null +++ b/plugins/LadspaEffect/swh/gsm/long_term.c @@ -0,0 +1,949 @@ +/* + * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische + * Universitaet Berlin. See the accompanying file "COPYRIGHT" for + * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. + */ + +/* $Header: /home/cvs/giga/ladspa-swh/gsm/long_term.c,v 1.1 2001/06/10 21:36:51 swh Exp $ */ + +#include +#include + +#include "private.h" + +#include "gsm.h" +#include "proto.h" + +/* + * 4.2.11 .. 4.2.12 LONG TERM PREDICTOR (LTP) SECTION + */ + + +/* + * This module computes the LTP gain (bc) and the LTP lag (Nc) + * for the long term analysis filter. This is done by calculating a + * maximum of the cross-correlation function between the current + * sub-segment short term residual signal d[0..39] (output of + * the short term analysis filter; for simplification the index + * of this array begins at 0 and ends at 39 for each sub-segment of the + * RPE-LTP analysis) and the previous reconstructed short term + * residual signal dp[ -120 .. -1 ]. A dynamic scaling must be + * performed to avoid overflow. + */ + + /* The next procedure exists in six versions. First two integer + * version (if USE_FLOAT_MUL is not defined); then four floating + * point versions, twice with proper scaling (USE_FLOAT_MUL defined), + * once without (USE_FLOAT_MUL and FAST defined, and fast run-time + * option used). Every pair has first a Cut version (see the -C + * option to toast or the LTP_CUT option to gsm_option()), then the + * uncut one. (For a detailed explanation of why this is altogether + * a bad idea, see Henry Spencer and Geoff Collyer, ``#ifdef Considered + * Harmful''.) + */ + +#ifndef USE_FLOAT_MUL + +#ifdef LTP_CUT + +static void Cut_Calculation_of_the_LTP_parameters P5((st, d,dp,bc_out,Nc_out), + + struct gsm_state * st, + + register word * d, /* [0..39] IN */ + register word * dp, /* [-120..-1] IN */ + word * bc_out, /* OUT */ + word * Nc_out /* OUT */ +) +{ + register int k, lambda; + word Nc, bc; + word wt[40]; + + longword L_result; + longword L_max, L_power; + word R, S, dmax, scal, best_k; + word ltp_cut; + + register word temp, wt_k; + + /* Search of the optimum scaling of d[0..39]. + */ + dmax = 0; + for (k = 0; k <= 39; k++) { + temp = d[k]; + temp = GSM_ABS( temp ); + if (temp > dmax) { + dmax = temp; + best_k = k; + } + } + temp = 0; + if (dmax == 0) scal = 0; + else { + assert(dmax > 0); + temp = gsm_norm( (longword)dmax << 16 ); + } + if (temp > 6) scal = 0; + else scal = 6 - temp; + assert(scal >= 0); + + /* Search for the maximum cross-correlation and coding of the LTP lag + */ + L_max = 0; + Nc = 40; /* index for the maximum cross-correlation */ + wt_k = SASR(d[best_k], scal); + + for (lambda = 40; lambda <= 120; lambda++) { + L_result = (longword)wt_k * dp[best_k - lambda]; + if (L_result > L_max) { + Nc = lambda; + L_max = L_result; + } + } + *Nc_out = Nc; + L_max <<= 1; + + /* Rescaling of L_max + */ + assert(scal <= 100 && scal >= -100); + L_max = L_max >> (6 - scal); /* sub(6, scal) */ + + assert( Nc <= 120 && Nc >= 40); + + /* Compute the power of the reconstructed short term residual + * signal dp[..] + */ + L_power = 0; + for (k = 0; k <= 39; k++) { + + register longword L_temp; + + L_temp = SASR( dp[k - Nc], 3 ); + L_power += L_temp * L_temp; + } + L_power <<= 1; /* from L_MULT */ + + /* Normalization of L_max and L_power + */ + + if (L_max <= 0) { + *bc_out = 0; + return; + } + if (L_max >= L_power) { + *bc_out = 3; + return; + } + + temp = gsm_norm( L_power ); + + R = SASR( L_max << temp, 16 ); + S = SASR( L_power << temp, 16 ); + + /* Coding of the LTP gain + */ + + /* Table 4.3a must be used to obtain the level DLB[i] for the + * quantization of the LTP gain b to get the coded version bc. + */ + for (bc = 0; bc <= 2; bc++) if (R <= gsm_mult(S, gsm_DLB[bc])) break; + *bc_out = bc; +} + +#endif /* LTP_CUT */ + +static void Calculation_of_the_LTP_parameters P4((d,dp,bc_out,Nc_out), + register word * d, /* [0..39] IN */ + register word * dp, /* [-120..-1] IN */ + word * bc_out, /* OUT */ + word * Nc_out /* OUT */ +) +{ + register int k, lambda; + word Nc, bc; + word wt[40]; + + longword L_max, L_power; + word R, S, dmax, scal; + register word temp; + + /* Search of the optimum scaling of d[0..39]. + */ + dmax = 0; + + for (k = 0; k <= 39; k++) { + temp = d[k]; + temp = GSM_ABS( temp ); + if (temp > dmax) dmax = temp; + } + + temp = 0; + if (dmax == 0) scal = 0; + else { + assert(dmax > 0); + temp = gsm_norm( (longword)dmax << 16 ); + } + + if (temp > 6) scal = 0; + else scal = 6 - temp; + + assert(scal >= 0); + + /* Initialization of a working array wt + */ + + for (k = 0; k <= 39; k++) wt[k] = SASR( d[k], scal ); + + /* Search for the maximum cross-correlation and coding of the LTP lag + */ + L_max = 0; + Nc = 40; /* index for the maximum cross-correlation */ + + for (lambda = 40; lambda <= 120; lambda++) { + +# undef STEP +# define STEP(k) (longword)wt[k] * dp[k - lambda] + + register longword L_result; + + L_result = STEP(0) ; L_result += STEP(1) ; + L_result += STEP(2) ; L_result += STEP(3) ; + L_result += STEP(4) ; L_result += STEP(5) ; + L_result += STEP(6) ; L_result += STEP(7) ; + L_result += STEP(8) ; L_result += STEP(9) ; + L_result += STEP(10) ; L_result += STEP(11) ; + L_result += STEP(12) ; L_result += STEP(13) ; + L_result += STEP(14) ; L_result += STEP(15) ; + L_result += STEP(16) ; L_result += STEP(17) ; + L_result += STEP(18) ; L_result += STEP(19) ; + L_result += STEP(20) ; L_result += STEP(21) ; + L_result += STEP(22) ; L_result += STEP(23) ; + L_result += STEP(24) ; L_result += STEP(25) ; + L_result += STEP(26) ; L_result += STEP(27) ; + L_result += STEP(28) ; L_result += STEP(29) ; + L_result += STEP(30) ; L_result += STEP(31) ; + L_result += STEP(32) ; L_result += STEP(33) ; + L_result += STEP(34) ; L_result += STEP(35) ; + L_result += STEP(36) ; L_result += STEP(37) ; + L_result += STEP(38) ; L_result += STEP(39) ; + + if (L_result > L_max) { + + Nc = lambda; + L_max = L_result; + } + } + + *Nc_out = Nc; + + L_max <<= 1; + + /* Rescaling of L_max + */ + assert(scal <= 100 && scal >= -100); + L_max = L_max >> (6 - scal); /* sub(6, scal) */ + + assert( Nc <= 120 && Nc >= 40); + + /* Compute the power of the reconstructed short term residual + * signal dp[..] + */ + L_power = 0; + for (k = 0; k <= 39; k++) { + + register longword L_temp; + + L_temp = SASR( dp[k - Nc], 3 ); + L_power += L_temp * L_temp; + } + L_power <<= 1; /* from L_MULT */ + + /* Normalization of L_max and L_power + */ + + if (L_max <= 0) { + *bc_out = 0; + return; + } + if (L_max >= L_power) { + *bc_out = 3; + return; + } + + temp = gsm_norm( L_power ); + + R = SASR( L_max << temp, 16 ); + S = SASR( L_power << temp, 16 ); + + /* Coding of the LTP gain + */ + + /* Table 4.3a must be used to obtain the level DLB[i] for the + * quantization of the LTP gain b to get the coded version bc. + */ + for (bc = 0; bc <= 2; bc++) if (R <= gsm_mult(S, gsm_DLB[bc])) break; + *bc_out = bc; +} + +#else /* USE_FLOAT_MUL */ + +#ifdef LTP_CUT + +static void Cut_Calculation_of_the_LTP_parameters P5((st, d,dp,bc_out,Nc_out), + struct gsm_state * st, /* IN */ + register word * d, /* [0..39] IN */ + register word * dp, /* [-120..-1] IN */ + word * bc_out, /* OUT */ + word * Nc_out /* OUT */ +) +{ + register int k, lambda; + word Nc, bc; + word ltp_cut; + + float wt_float[40]; + float dp_float_base[120], * dp_float = dp_float_base + 120; + + longword L_max, L_power; + word R, S, dmax, scal; + register word temp; + + /* Search of the optimum scaling of d[0..39]. + */ + dmax = 0; + + for (k = 0; k <= 39; k++) { + temp = d[k]; + temp = GSM_ABS( temp ); + if (temp > dmax) dmax = temp; + } + + temp = 0; + if (dmax == 0) scal = 0; + else { + assert(dmax > 0); + temp = gsm_norm( (longword)dmax << 16 ); + } + + if (temp > 6) scal = 0; + else scal = 6 - temp; + + assert(scal >= 0); + ltp_cut = (longword)SASR(dmax, scal) * st->ltp_cut / 100; + + + /* Initialization of a working array wt + */ + + for (k = 0; k < 40; k++) { + register word w = SASR( d[k], scal ); + if (w < 0 ? w > -ltp_cut : w < ltp_cut) { + wt_float[k] = 0.0; + } + else { + wt_float[k] = w; + } + } + for (k = -120; k < 0; k++) dp_float[k] = dp[k]; + + /* Search for the maximum cross-correlation and coding of the LTP lag + */ + L_max = 0; + Nc = 40; /* index for the maximum cross-correlation */ + + for (lambda = 40; lambda <= 120; lambda += 9) { + + /* Calculate L_result for l = lambda .. lambda + 9. + */ + register float *lp = dp_float - lambda; + + register float W; + register float a = lp[-8], b = lp[-7], c = lp[-6], + d = lp[-5], e = lp[-4], f = lp[-3], + g = lp[-2], h = lp[-1]; + register float E; + register float S0 = 0, S1 = 0, S2 = 0, S3 = 0, S4 = 0, + S5 = 0, S6 = 0, S7 = 0, S8 = 0; + +# undef STEP +# define STEP(K, a, b, c, d, e, f, g, h) \ + if ((W = wt_float[K]) != 0.0) { \ + E = W * a; S8 += E; \ + E = W * b; S7 += E; \ + E = W * c; S6 += E; \ + E = W * d; S5 += E; \ + E = W * e; S4 += E; \ + E = W * f; S3 += E; \ + E = W * g; S2 += E; \ + E = W * h; S1 += E; \ + a = lp[K]; \ + E = W * a; S0 += E; } else (a = lp[K]) + +# define STEP_A(K) STEP(K, a, b, c, d, e, f, g, h) +# define STEP_B(K) STEP(K, b, c, d, e, f, g, h, a) +# define STEP_C(K) STEP(K, c, d, e, f, g, h, a, b) +# define STEP_D(K) STEP(K, d, e, f, g, h, a, b, c) +# define STEP_E(K) STEP(K, e, f, g, h, a, b, c, d) +# define STEP_F(K) STEP(K, f, g, h, a, b, c, d, e) +# define STEP_G(K) STEP(K, g, h, a, b, c, d, e, f) +# define STEP_H(K) STEP(K, h, a, b, c, d, e, f, g) + + STEP_A( 0); STEP_B( 1); STEP_C( 2); STEP_D( 3); + STEP_E( 4); STEP_F( 5); STEP_G( 6); STEP_H( 7); + + STEP_A( 8); STEP_B( 9); STEP_C(10); STEP_D(11); + STEP_E(12); STEP_F(13); STEP_G(14); STEP_H(15); + + STEP_A(16); STEP_B(17); STEP_C(18); STEP_D(19); + STEP_E(20); STEP_F(21); STEP_G(22); STEP_H(23); + + STEP_A(24); STEP_B(25); STEP_C(26); STEP_D(27); + STEP_E(28); STEP_F(29); STEP_G(30); STEP_H(31); + + STEP_A(32); STEP_B(33); STEP_C(34); STEP_D(35); + STEP_E(36); STEP_F(37); STEP_G(38); STEP_H(39); + + if (S0 > L_max) { L_max = S0; Nc = lambda; } + if (S1 > L_max) { L_max = S1; Nc = lambda + 1; } + if (S2 > L_max) { L_max = S2; Nc = lambda + 2; } + if (S3 > L_max) { L_max = S3; Nc = lambda + 3; } + if (S4 > L_max) { L_max = S4; Nc = lambda + 4; } + if (S5 > L_max) { L_max = S5; Nc = lambda + 5; } + if (S6 > L_max) { L_max = S6; Nc = lambda + 6; } + if (S7 > L_max) { L_max = S7; Nc = lambda + 7; } + if (S8 > L_max) { L_max = S8; Nc = lambda + 8; } + + } + *Nc_out = Nc; + + L_max <<= 1; + + /* Rescaling of L_max + */ + assert(scal <= 100 && scal >= -100); + L_max = L_max >> (6 - scal); /* sub(6, scal) */ + + assert( Nc <= 120 && Nc >= 40); + + /* Compute the power of the reconstructed short term residual + * signal dp[..] + */ + L_power = 0; + for (k = 0; k <= 39; k++) { + + register longword L_temp; + + L_temp = SASR( dp[k - Nc], 3 ); + L_power += L_temp * L_temp; + } + L_power <<= 1; /* from L_MULT */ + + /* Normalization of L_max and L_power + */ + + if (L_max <= 0) { + *bc_out = 0; + return; + } + if (L_max >= L_power) { + *bc_out = 3; + return; + } + + temp = gsm_norm( L_power ); + + R = SASR( L_max << temp, 16 ); + S = SASR( L_power << temp, 16 ); + + /* Coding of the LTP gain + */ + + /* Table 4.3a must be used to obtain the level DLB[i] for the + * quantization of the LTP gain b to get the coded version bc. + */ + for (bc = 0; bc <= 2; bc++) if (R <= gsm_mult(S, gsm_DLB[bc])) break; + *bc_out = bc; +} + +#endif /* LTP_CUT */ + +static void Calculation_of_the_LTP_parameters P4((d,dp,bc_out,Nc_out), + register word * d, /* [0..39] IN */ + register word * dp, /* [-120..-1] IN */ + word * bc_out, /* OUT */ + word * Nc_out /* OUT */ +) +{ + register int k, lambda; + word Nc, bc; + + float wt_float[40]; + float dp_float_base[120], * dp_float = dp_float_base + 120; + + longword L_max, L_power; + word R, S, dmax, scal; + register word temp; + + /* Search of the optimum scaling of d[0..39]. + */ + dmax = 0; + + for (k = 0; k <= 39; k++) { + temp = d[k]; + temp = GSM_ABS( temp ); + if (temp > dmax) dmax = temp; + } + + temp = 0; + if (dmax == 0) scal = 0; + else { + assert(dmax > 0); + temp = gsm_norm( (longword)dmax << 16 ); + } + + if (temp > 6) scal = 0; + else scal = 6 - temp; + + assert(scal >= 0); + + /* Initialization of a working array wt + */ + + for (k = 0; k < 40; k++) wt_float[k] = SASR( d[k], scal ); + for (k = -120; k < 0; k++) dp_float[k] = dp[k]; + + /* Search for the maximum cross-correlation and coding of the LTP lag + */ + L_max = 0; + Nc = 40; /* index for the maximum cross-correlation */ + + for (lambda = 40; lambda <= 120; lambda += 9) { + + /* Calculate L_result for l = lambda .. lambda + 9. + */ + register float *lp = dp_float - lambda; + + register float W; + register float a = lp[-8], b = lp[-7], c = lp[-6], + d = lp[-5], e = lp[-4], f = lp[-3], + g = lp[-2], h = lp[-1]; + register float E; + register float S0 = 0, S1 = 0, S2 = 0, S3 = 0, S4 = 0, + S5 = 0, S6 = 0, S7 = 0, S8 = 0; + +# undef STEP +# define STEP(K, a, b, c, d, e, f, g, h) \ + W = wt_float[K]; \ + E = W * a; S8 += E; \ + E = W * b; S7 += E; \ + E = W * c; S6 += E; \ + E = W * d; S5 += E; \ + E = W * e; S4 += E; \ + E = W * f; S3 += E; \ + E = W * g; S2 += E; \ + E = W * h; S1 += E; \ + a = lp[K]; \ + E = W * a; S0 += E + +# define STEP_A(K) STEP(K, a, b, c, d, e, f, g, h) +# define STEP_B(K) STEP(K, b, c, d, e, f, g, h, a) +# define STEP_C(K) STEP(K, c, d, e, f, g, h, a, b) +# define STEP_D(K) STEP(K, d, e, f, g, h, a, b, c) +# define STEP_E(K) STEP(K, e, f, g, h, a, b, c, d) +# define STEP_F(K) STEP(K, f, g, h, a, b, c, d, e) +# define STEP_G(K) STEP(K, g, h, a, b, c, d, e, f) +# define STEP_H(K) STEP(K, h, a, b, c, d, e, f, g) + + STEP_A( 0); STEP_B( 1); STEP_C( 2); STEP_D( 3); + STEP_E( 4); STEP_F( 5); STEP_G( 6); STEP_H( 7); + + STEP_A( 8); STEP_B( 9); STEP_C(10); STEP_D(11); + STEP_E(12); STEP_F(13); STEP_G(14); STEP_H(15); + + STEP_A(16); STEP_B(17); STEP_C(18); STEP_D(19); + STEP_E(20); STEP_F(21); STEP_G(22); STEP_H(23); + + STEP_A(24); STEP_B(25); STEP_C(26); STEP_D(27); + STEP_E(28); STEP_F(29); STEP_G(30); STEP_H(31); + + STEP_A(32); STEP_B(33); STEP_C(34); STEP_D(35); + STEP_E(36); STEP_F(37); STEP_G(38); STEP_H(39); + + if (S0 > L_max) { L_max = S0; Nc = lambda; } + if (S1 > L_max) { L_max = S1; Nc = lambda + 1; } + if (S2 > L_max) { L_max = S2; Nc = lambda + 2; } + if (S3 > L_max) { L_max = S3; Nc = lambda + 3; } + if (S4 > L_max) { L_max = S4; Nc = lambda + 4; } + if (S5 > L_max) { L_max = S5; Nc = lambda + 5; } + if (S6 > L_max) { L_max = S6; Nc = lambda + 6; } + if (S7 > L_max) { L_max = S7; Nc = lambda + 7; } + if (S8 > L_max) { L_max = S8; Nc = lambda + 8; } + } + *Nc_out = Nc; + + L_max <<= 1; + + /* Rescaling of L_max + */ + assert(scal <= 100 && scal >= -100); + L_max = L_max >> (6 - scal); /* sub(6, scal) */ + + assert( Nc <= 120 && Nc >= 40); + + /* Compute the power of the reconstructed short term residual + * signal dp[..] + */ + L_power = 0; + for (k = 0; k <= 39; k++) { + + register longword L_temp; + + L_temp = SASR( dp[k - Nc], 3 ); + L_power += L_temp * L_temp; + } + L_power <<= 1; /* from L_MULT */ + + /* Normalization of L_max and L_power + */ + + if (L_max <= 0) { + *bc_out = 0; + return; + } + if (L_max >= L_power) { + *bc_out = 3; + return; + } + + temp = gsm_norm( L_power ); + + R = SASR( L_max << temp, 16 ); + S = SASR( L_power << temp, 16 ); + + /* Coding of the LTP gain + */ + + /* Table 4.3a must be used to obtain the level DLB[i] for the + * quantization of the LTP gain b to get the coded version bc. + */ + for (bc = 0; bc <= 2; bc++) if (R <= gsm_mult(S, gsm_DLB[bc])) break; + *bc_out = bc; +} + +#ifdef FAST +#ifdef LTP_CUT + +static void Cut_Fast_Calculation_of_the_LTP_parameters P5((st, + d,dp,bc_out,Nc_out), + struct gsm_state * st, /* IN */ + register word * d, /* [0..39] IN */ + register word * dp, /* [-120..-1] IN */ + word * bc_out, /* OUT */ + word * Nc_out /* OUT */ +) +{ + register int k, lambda; + register float wt_float; + word Nc, bc; + word wt_max, best_k, ltp_cut; + + float dp_float_base[120], * dp_float = dp_float_base + 120; + + register float L_result, L_max, L_power; + + wt_max = 0; + + for (k = 0; k < 40; ++k) { + if ( d[k] > wt_max) wt_max = d[best_k = k]; + else if (-d[k] > wt_max) wt_max = -d[best_k = k]; + } + + assert(wt_max >= 0); + wt_float = (float)wt_max; + + for (k = -120; k < 0; ++k) dp_float[k] = (float)dp[k]; + + /* Search for the maximum cross-correlation and coding of the LTP lag + */ + L_max = 0; + Nc = 40; /* index for the maximum cross-correlation */ + + for (lambda = 40; lambda <= 120; lambda++) { + L_result = wt_float * dp_float[best_k - lambda]; + if (L_result > L_max) { + Nc = lambda; + L_max = L_result; + } + } + + *Nc_out = Nc; + if (L_max <= 0.) { + *bc_out = 0; + return; + } + + /* Compute the power of the reconstructed short term residual + * signal dp[..] + */ + dp_float -= Nc; + L_power = 0; + for (k = 0; k < 40; ++k) { + register float f = dp_float[k]; + L_power += f * f; + } + + if (L_max >= L_power) { + *bc_out = 3; + return; + } + + /* Coding of the LTP gain + * Table 4.3a must be used to obtain the level DLB[i] for the + * quantization of the LTP gain b to get the coded version bc. + */ + lambda = L_max / L_power * 32768.; + for (bc = 0; bc <= 2; ++bc) if (lambda <= gsm_DLB[bc]) break; + *bc_out = bc; +} + +#endif /* LTP_CUT */ + +static void Fast_Calculation_of_the_LTP_parameters P4((d,dp,bc_out,Nc_out), + register word * d, /* [0..39] IN */ + register word * dp, /* [-120..-1] IN */ + word * bc_out, /* OUT */ + word * Nc_out /* OUT */ +) +{ + register int k, lambda; + word Nc, bc; + + float wt_float[40]; + float dp_float_base[120], * dp_float = dp_float_base + 120; + + register float L_max, L_power; + + for (k = 0; k < 40; ++k) wt_float[k] = (float)d[k]; + for (k = -120; k < 0; ++k) dp_float[k] = (float)dp[k]; + + /* Search for the maximum cross-correlation and coding of the LTP lag + */ + L_max = 0; + Nc = 40; /* index for the maximum cross-correlation */ + + for (lambda = 40; lambda <= 120; lambda += 9) { + + /* Calculate L_result for l = lambda .. lambda + 9. + */ + register float *lp = dp_float - lambda; + + register float W; + register float a = lp[-8], b = lp[-7], c = lp[-6], + d = lp[-5], e = lp[-4], f = lp[-3], + g = lp[-2], h = lp[-1]; + register float E; + register float S0 = 0, S1 = 0, S2 = 0, S3 = 0, S4 = 0, + S5 = 0, S6 = 0, S7 = 0, S8 = 0; + +# undef STEP +# define STEP(K, a, b, c, d, e, f, g, h) \ + W = wt_float[K]; \ + E = W * a; S8 += E; \ + E = W * b; S7 += E; \ + E = W * c; S6 += E; \ + E = W * d; S5 += E; \ + E = W * e; S4 += E; \ + E = W * f; S3 += E; \ + E = W * g; S2 += E; \ + E = W * h; S1 += E; \ + a = lp[K]; \ + E = W * a; S0 += E + +# define STEP_A(K) STEP(K, a, b, c, d, e, f, g, h) +# define STEP_B(K) STEP(K, b, c, d, e, f, g, h, a) +# define STEP_C(K) STEP(K, c, d, e, f, g, h, a, b) +# define STEP_D(K) STEP(K, d, e, f, g, h, a, b, c) +# define STEP_E(K) STEP(K, e, f, g, h, a, b, c, d) +# define STEP_F(K) STEP(K, f, g, h, a, b, c, d, e) +# define STEP_G(K) STEP(K, g, h, a, b, c, d, e, f) +# define STEP_H(K) STEP(K, h, a, b, c, d, e, f, g) + + STEP_A( 0); STEP_B( 1); STEP_C( 2); STEP_D( 3); + STEP_E( 4); STEP_F( 5); STEP_G( 6); STEP_H( 7); + + STEP_A( 8); STEP_B( 9); STEP_C(10); STEP_D(11); + STEP_E(12); STEP_F(13); STEP_G(14); STEP_H(15); + + STEP_A(16); STEP_B(17); STEP_C(18); STEP_D(19); + STEP_E(20); STEP_F(21); STEP_G(22); STEP_H(23); + + STEP_A(24); STEP_B(25); STEP_C(26); STEP_D(27); + STEP_E(28); STEP_F(29); STEP_G(30); STEP_H(31); + + STEP_A(32); STEP_B(33); STEP_C(34); STEP_D(35); + STEP_E(36); STEP_F(37); STEP_G(38); STEP_H(39); + + if (S0 > L_max) { L_max = S0; Nc = lambda; } + if (S1 > L_max) { L_max = S1; Nc = lambda + 1; } + if (S2 > L_max) { L_max = S2; Nc = lambda + 2; } + if (S3 > L_max) { L_max = S3; Nc = lambda + 3; } + if (S4 > L_max) { L_max = S4; Nc = lambda + 4; } + if (S5 > L_max) { L_max = S5; Nc = lambda + 5; } + if (S6 > L_max) { L_max = S6; Nc = lambda + 6; } + if (S7 > L_max) { L_max = S7; Nc = lambda + 7; } + if (S8 > L_max) { L_max = S8; Nc = lambda + 8; } + } + *Nc_out = Nc; + + if (L_max <= 0.) { + *bc_out = 0; + return; + } + + /* Compute the power of the reconstructed short term residual + * signal dp[..] + */ + dp_float -= Nc; + L_power = 0; + for (k = 0; k < 40; ++k) { + register float f = dp_float[k]; + L_power += f * f; + } + + if (L_max >= L_power) { + *bc_out = 3; + return; + } + + /* Coding of the LTP gain + * Table 4.3a must be used to obtain the level DLB[i] for the + * quantization of the LTP gain b to get the coded version bc. + */ + lambda = L_max / L_power * 32768.; + for (bc = 0; bc <= 2; ++bc) if (lambda <= gsm_DLB[bc]) break; + *bc_out = bc; +} + +#endif /* FAST */ +#endif /* USE_FLOAT_MUL */ + + +/* 4.2.12 */ + +static void Long_term_analysis_filtering P6((bc,Nc,dp,d,dpp,e), + word bc, /* IN */ + word Nc, /* IN */ + register word * dp, /* previous d [-120..-1] IN */ + register word * d, /* d [0..39] IN */ + register word * dpp, /* estimate [0..39] OUT */ + register word * e /* long term res. signal [0..39] OUT */ +) +/* + * In this part, we have to decode the bc parameter to compute + * the samples of the estimate dpp[0..39]. The decoding of bc needs the + * use of table 4.3b. The long term residual signal e[0..39] + * is then calculated to be fed to the RPE encoding section. + */ +{ + register int k; + register longword ltmp; + +# undef STEP +# define STEP(BP) \ + for (k = 0; k <= 39; k++) { \ + dpp[k] = GSM_MULT_R( BP, dp[k - Nc]); \ + e[k] = GSM_SUB( d[k], dpp[k] ); \ + } + + switch (bc) { + case 0: STEP( 3277 ); break; + case 1: STEP( 11469 ); break; + case 2: STEP( 21299 ); break; + case 3: STEP( 32767 ); break; + } +} + +void Gsm_Long_Term_Predictor P7((S,d,dp,e,dpp,Nc,bc), /* 4x for 160 samples */ + + struct gsm_state * S, + + word * d, /* [0..39] residual signal IN */ + word * dp, /* [-120..-1] d' IN */ + + word * e, /* [0..39] OUT */ + word * dpp, /* [0..39] OUT */ + word * Nc, /* correlation lag OUT */ + word * bc /* gain factor OUT */ +) +{ + assert( d ); assert( dp ); assert( e ); + assert( dpp); assert( Nc ); assert( bc ); + +#if defined(FAST) && defined(USE_FLOAT_MUL) + if (S->fast) +#if defined (LTP_CUT) + if (S->ltp_cut) + Cut_Fast_Calculation_of_the_LTP_parameters(S, + d, dp, bc, Nc); + else +#endif /* LTP_CUT */ + Fast_Calculation_of_the_LTP_parameters(d, dp, bc, Nc ); + else +#endif /* FAST & USE_FLOAT_MUL */ +#ifdef LTP_CUT + if (S->ltp_cut) + Cut_Calculation_of_the_LTP_parameters(S, d, dp, bc, Nc); + else +#endif + Calculation_of_the_LTP_parameters(d, dp, bc, Nc); + + Long_term_analysis_filtering( *bc, *Nc, dp, d, dpp, e ); +} + +/* 4.3.2 */ +void Gsm_Long_Term_Synthesis_Filtering P5((S,Ncr,bcr,erp,drp), + struct gsm_state * S, + + word Ncr, + word bcr, + register word * erp, /* [0..39] IN */ + register word * drp /* [-120..-1] IN, [-120..40] OUT */ +) +/* + * This procedure uses the bcr and Ncr parameter to realize the + * long term synthesis filtering. The decoding of bcr needs + * table 4.3b. + */ +{ + register longword ltmp; /* for ADD */ + register int k; + word brp, drpp, Nr; + + /* Check the limits of Nr. + */ + Nr = Ncr < 40 || Ncr > 120 ? S->nrp : Ncr; + S->nrp = Nr; + assert(Nr >= 40 && Nr <= 120); + + /* Decoding of the LTP gain bcr + */ + brp = gsm_QLB[ bcr ]; + + /* Computation of the reconstructed short term residual + * signal drp[0..39] + */ + assert(brp != MIN_WORD); + + for (k = 0; k <= 39; k++) { + drpp = GSM_MULT_R( brp, drp[ k - Nr ] ); + drp[k] = GSM_ADD( erp[k], drpp ); + } + + /* + * Update of the reconstructed short term residual signal + * drp[ -1..-120 ] + */ + + for (k = 0; k <= 119; k++) drp[ -120 + k ] = drp[ -80 + k ]; +} diff --git a/plugins/LadspaEffect/swh/gsm/lpc.c b/plugins/LadspaEffect/swh/gsm/lpc.c new file mode 100644 index 000000000..7c030cb5a --- /dev/null +++ b/plugins/LadspaEffect/swh/gsm/lpc.c @@ -0,0 +1,341 @@ +/* + * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische + * Universitaet Berlin. See the accompanying file "COPYRIGHT" for + * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. + */ + +/* $Header: /home/cvs/giga/ladspa-swh/gsm/lpc.c,v 1.1 2001/06/10 21:36:51 swh Exp $ */ + +#include +#include + +#include "private.h" + +#include "gsm.h" +#include "proto.h" + +#undef P + +/* + * 4.2.4 .. 4.2.7 LPC ANALYSIS SECTION + */ + +/* 4.2.4 */ + + +static void Autocorrelation P2((s, L_ACF), + word * s, /* [0..159] IN/OUT */ + longword * L_ACF) /* [0..8] OUT */ +/* + * The goal is to compute the array L_ACF[k]. The signal s[i] must + * be scaled in order to avoid an overflow situation. + */ +{ + register int k, i; + + word temp, smax, scalauto; + +#ifdef USE_FLOAT_MUL + float float_s[160]; +#endif + + /* Dynamic scaling of the array s[0..159] + */ + + /* Search for the maximum. + */ + smax = 0; + for (k = 0; k <= 159; k++) { + temp = GSM_ABS( s[k] ); + if (temp > smax) smax = temp; + } + + /* Computation of the scaling factor. + */ + if (smax == 0) scalauto = 0; + else { + assert(smax > 0); + scalauto = 4 - gsm_norm( (longword)smax << 16 );/* sub(4,..) */ + } + + /* Scaling of the array s[0...159] + */ + + if (scalauto > 0) { + +# ifdef USE_FLOAT_MUL +# define SCALE(n) \ + case n: for (k = 0; k <= 159; k++) \ + float_s[k] = (float) \ + (s[k] = GSM_MULT_R(s[k], 16384 >> (n-1)));\ + break; +# else +# define SCALE(n) \ + case n: for (k = 0; k <= 159; k++) \ + s[k] = GSM_MULT_R( s[k], 16384 >> (n-1) );\ + break; +# endif /* USE_FLOAT_MUL */ + + switch (scalauto) { + SCALE(1) + SCALE(2) + SCALE(3) + SCALE(4) + } +# undef SCALE + } +# ifdef USE_FLOAT_MUL + else for (k = 0; k <= 159; k++) float_s[k] = (float) s[k]; +# endif + + /* Compute the L_ACF[..]. + */ + { +# ifdef USE_FLOAT_MUL + register float * sp = float_s; + register float sl = *sp; + +# define STEP(k) L_ACF[k] += (longword)(sl * sp[ -(k) ]); +# else + word * sp = s; + word sl = *sp; + +# define STEP(k) L_ACF[k] += ((longword)sl * sp[ -(k) ]); +# endif + +# define NEXTI sl = *++sp + + + for (k = 9; k--; L_ACF[k] = 0) ; + + STEP (0); + NEXTI; + STEP(0); STEP(1); + NEXTI; + STEP(0); STEP(1); STEP(2); + NEXTI; + STEP(0); STEP(1); STEP(2); STEP(3); + NEXTI; + STEP(0); STEP(1); STEP(2); STEP(3); STEP(4); + NEXTI; + STEP(0); STEP(1); STEP(2); STEP(3); STEP(4); STEP(5); + NEXTI; + STEP(0); STEP(1); STEP(2); STEP(3); STEP(4); STEP(5); STEP(6); + NEXTI; + STEP(0); STEP(1); STEP(2); STEP(3); STEP(4); STEP(5); STEP(6); STEP(7); + + for (i = 8; i <= 159; i++) { + + NEXTI; + + STEP(0); + STEP(1); STEP(2); STEP(3); STEP(4); + STEP(5); STEP(6); STEP(7); STEP(8); + } + + for (k = 9; k--; L_ACF[k] <<= 1) ; + + } + /* Rescaling of the array s[0..159] + */ + if (scalauto > 0) { + assert(scalauto <= 4); + for (k = 160; k--; *s++ <<= scalauto) ; + } +} + +#if defined(USE_FLOAT_MUL) && defined(FAST) + +static void Fast_Autocorrelation P2((s, L_ACF), + word * s, /* [0..159] IN/OUT */ + longword * L_ACF) /* [0..8] OUT */ +{ + register int k, i; + float f_L_ACF[9]; + float scale; + + float s_f[160]; + register float *sf = s_f; + + for (i = 0; i < 160; ++i) sf[i] = s[i]; + for (k = 0; k <= 8; k++) { + register float L_temp2 = 0; + register float *sfl = sf - k; + for (i = k; i < 160; ++i) L_temp2 += sf[i] * sfl[i]; + f_L_ACF[k] = L_temp2; + } + scale = MAX_LONGWORD / f_L_ACF[0]; + + for (k = 0; k <= 8; k++) { + L_ACF[k] = f_L_ACF[k] * scale; + } +} +#endif /* defined (USE_FLOAT_MUL) && defined (FAST) */ + +/* 4.2.5 */ + +static void Reflection_coefficients P2( (L_ACF, r), + longword * L_ACF, /* 0...8 IN */ + register word * r /* 0...7 OUT */ +) +{ + register int i, m, n; + register word temp; + register longword ltmp; + word ACF[9]; /* 0..8 */ + word P[ 9]; /* 0..8 */ + word K[ 9]; /* 2..8 */ + + /* Schur recursion with 16 bits arithmetic. + */ + + if (L_ACF[0] == 0) { + for (i = 8; i--; *r++ = 0) ; + return; + } + + assert( L_ACF[0] != 0 ); + temp = gsm_norm( L_ACF[0] ); + + assert(temp >= 0 && temp < 32); + + /* ? overflow ? */ + for (i = 0; i <= 8; i++) ACF[i] = SASR( L_ACF[i] << temp, 16 ); + + /* Initialize array P[..] and K[..] for the recursion. + */ + + for (i = 1; i <= 7; i++) K[ i ] = ACF[ i ]; + for (i = 0; i <= 8; i++) P[ i ] = ACF[ i ]; + + /* Compute reflection coefficients + */ + for (n = 1; n <= 8; n++, r++) { + + temp = P[1]; + temp = GSM_ABS(temp); + if (P[0] < temp) { + for (i = n; i <= 8; i++) *r++ = 0; + return; + } + + *r = gsm_div( temp, P[0] ); + + assert(*r >= 0); + if (P[1] > 0) *r = -*r; /* r[n] = sub(0, r[n]) */ + assert (*r != MIN_WORD); + if (n == 8) return; + + /* Schur recursion + */ + temp = GSM_MULT_R( P[1], *r ); + P[0] = GSM_ADD( P[0], temp ); + + for (m = 1; m <= 8 - n; m++) { + temp = GSM_MULT_R( K[ m ], *r ); + P[m] = GSM_ADD( P[ m+1 ], temp ); + + temp = GSM_MULT_R( P[ m+1 ], *r ); + K[m] = GSM_ADD( K[ m ], temp ); + } + } +} + +/* 4.2.6 */ + +static void Transformation_to_Log_Area_Ratios P1((r), + register word * r /* 0..7 IN/OUT */ +) +/* + * The following scaling for r[..] and LAR[..] has been used: + * + * r[..] = integer( real_r[..]*32768. ); -1 <= real_r < 1. + * LAR[..] = integer( real_LAR[..] * 16384 ); + * with -1.625 <= real_LAR <= 1.625 + */ +{ + register word temp; + register int i; + + + /* Computation of the LAR[0..7] from the r[0..7] + */ + for (i = 1; i <= 8; i++, r++) { + + temp = *r; + temp = GSM_ABS(temp); + assert(temp >= 0); + + if (temp < 22118) { + temp >>= 1; + } else if (temp < 31130) { + assert( temp >= 11059 ); + temp -= 11059; + } else { + assert( temp >= 26112 ); + temp -= 26112; + temp <<= 2; + } + + *r = *r < 0 ? -temp : temp; + assert( *r != MIN_WORD ); + } +} + +/* 4.2.7 */ + +static void Quantization_and_coding P1((LAR), + register word * LAR /* [0..7] IN/OUT */ +) +{ + register word temp; + longword ltmp; + + + /* This procedure needs four tables; the following equations + * give the optimum scaling for the constants: + * + * A[0..7] = integer( real_A[0..7] * 1024 ) + * B[0..7] = integer( real_B[0..7] * 512 ) + * MAC[0..7] = maximum of the LARc[0..7] + * MIC[0..7] = minimum of the LARc[0..7] + */ + +# undef STEP +# define STEP( A, B, MAC, MIC ) \ + temp = GSM_MULT( A, *LAR ); \ + temp = GSM_ADD( temp, B ); \ + temp = GSM_ADD( temp, 256 ); \ + temp = SASR( temp, 9 ); \ + *LAR = temp>MAC ? MAC - MIC : (tempfast) Fast_Autocorrelation (s, L_ACF ); + else +#endif + Autocorrelation (s, L_ACF ); + Reflection_coefficients (L_ACF, LARc ); + Transformation_to_Log_Area_Ratios (LARc); + Quantization_and_coding (LARc); +} diff --git a/plugins/LadspaEffect/swh/gsm/preprocess.c b/plugins/LadspaEffect/swh/gsm/preprocess.c new file mode 100644 index 000000000..a3afe0cf1 --- /dev/null +++ b/plugins/LadspaEffect/swh/gsm/preprocess.c @@ -0,0 +1,113 @@ +/* + * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische + * Universitaet Berlin. See the accompanying file "COPYRIGHT" for + * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. + */ + +/* $Header: /home/cvs/giga/ladspa-swh/gsm/preprocess.c,v 1.1 2001/06/10 21:36:51 swh Exp $ */ + +#include +#include + +#include "private.h" + +#include "gsm.h" +#include "proto.h" + +/* 4.2.0 .. 4.2.3 PREPROCESSING SECTION + * + * After A-law to linear conversion (or directly from the + * Ato D converter) the following scaling is assumed for + * input to the RPE-LTP algorithm: + * + * in: 0.1.....................12 + * S.v.v.v.v.v.v.v.v.v.v.v.v.*.*.* + * + * Where S is the sign bit, v a valid bit, and * a "don't care" bit. + * The original signal is called sop[..] + * + * out: 0.1................... 12 + * S.S.v.v.v.v.v.v.v.v.v.v.v.v.0.0 + */ + + +void Gsm_Preprocess P3((S, s, so), + struct gsm_state * S, + word * s, + word * so ) /* [0..159] IN/OUT */ +{ + + word z1 = S->z1; + longword L_z2 = S->L_z2; + word mp = S->mp; + + word s1; + longword L_s2; + + longword L_temp; + + word msp, lsp; + word SO; + + longword ltmp; /* for ADD */ + ulongword utmp; /* for L_ADD */ + + register int k = 160; + + while (k--) { + + /* 4.2.1 Downscaling of the input signal + */ + SO = SASR( *s, 3 ) << 2; + s++; + + assert (SO >= -0x4000); /* downscaled by */ + assert (SO <= 0x3FFC); /* previous routine. */ + + + /* 4.2.2 Offset compensation + * + * This part implements a high-pass filter and requires extended + * arithmetic precision for the recursive part of this filter. + * The input of this procedure is the array so[0...159] and the + * output the array sof[ 0...159 ]. + */ + /* Compute the non-recursive part + */ + + s1 = SO - z1; /* s1 = gsm_sub( *so, z1 ); */ + z1 = SO; + + assert(s1 != MIN_WORD); + + /* Compute the recursive part + */ + L_s2 = s1; + L_s2 <<= 15; + + /* Execution of a 31 bv 16 bits multiplication + */ + + msp = SASR( L_z2, 15 ); + lsp = L_z2-((longword)msp<<15); /* gsm_L_sub(L_z2,(msp<<15)); */ + + L_s2 += GSM_MULT_R( lsp, 32735 ); + L_temp = (longword)msp * 32735; /* GSM_L_MULT(msp,32735) >> 1;*/ + L_z2 = GSM_L_ADD( L_temp, L_s2 ); + + /* Compute sof[k] with rounding + */ + L_temp = GSM_L_ADD( L_z2, 16384 ); + + /* 4.2.3 Preemphasis + */ + + msp = GSM_MULT_R( mp, -28180 ); + mp = SASR( L_temp, 15 ); + *so++ = GSM_ADD( mp, msp ); + } + + S->z1 = z1; + S->L_z2 = L_z2; + S->mp = mp; +} diff --git a/plugins/LadspaEffect/swh/gsm/private.h b/plugins/LadspaEffect/swh/gsm/private.h new file mode 100644 index 000000000..60be5a317 --- /dev/null +++ b/plugins/LadspaEffect/swh/gsm/private.h @@ -0,0 +1,278 @@ +/* + * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische + * Universitaet Berlin. See the accompanying file "COPYRIGHT" for + * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. + */ + +/*$Header: /home/cvs/giga/ladspa-swh/gsm/private.h,v 1.1 2001/06/10 21:36:51 swh Exp $*/ + +#ifndef PRIVATE_H +#define PRIVATE_H + +/* Added by Erik de Castro Lopo */ +#define NeedFunctionPrototypes 1 +#define SASR +#define USE_FLOAT_MUL +#define FAST +#define WAV49 +/* Added by Erik de Castro Lopo */ + + + +typedef short word; /* 16 bit signed int */ +typedef int longword; /* 32 bit signed int */ + +typedef unsigned short uword; /* unsigned word */ +typedef unsigned int ulongword; /* unsigned longword */ + +struct gsm_state { + + word dp0[ 280 ]; + + word z1; /* preprocessing.c, Offset_com. */ + longword L_z2; /* Offset_com. */ + int mp; /* Preemphasis */ + + word u[8]; /* short_term_aly_filter.c */ + word LARpp[2][8]; /* */ + word j; /* */ + + word ltp_cut; /* long_term.c, LTP crosscorr. */ + word nrp; /* 40 */ /* long_term.c, synthesis */ + word v[9]; /* short_term.c, synthesis */ + word msr; /* decoder.c, Postprocessing */ + + char verbose; /* only used if !NDEBUG */ + char fast; /* only used if FAST */ + + char wav_fmt; /* only used if WAV49 defined */ + unsigned char frame_index; /* odd/even chaining */ + unsigned char frame_chain; /* half-byte to carry forward */ +}; + + +#define MIN_WORD (-32767 - 1) +#define MAX_WORD 32767 + +#define MIN_LONGWORD (-2147483647 - 1) +#define MAX_LONGWORD 2147483647 + +#ifdef SASR /* flag: >> is a signed arithmetic shift right */ +#undef SASR +#define SASR(x, by) ((x) >> (by)) +#else +#define SASR(x, by) ((x) >= 0 ? (x) >> (by) : (~(-((x) + 1) >> (by)))) +#endif /* SASR */ + +#include "proto.h" + +/* + * Prototypes from add.c + */ +extern word gsm_mult (word a, word b); +extern longword gsm_L_mult (word a, word b); +extern word gsm_mult_r (word a, word b); + +extern word gsm_div (word num, word denum); + +extern word gsm_add (word a, word b ); +extern longword gsm_L_add (longword a, longword b ); + +extern word gsm_sub (word a, word b); +extern longword gsm_L_sub (longword a, longword b); + +extern word gsm_abs (word a); + +extern word gsm_norm (longword a ); + +extern longword gsm_L_asl (longword a, int n); +extern word gsm_asl (word a, int n); + +extern longword gsm_L_asr (longword a, int n); +extern word gsm_asr (word a, int n); + +/* + * Inlined functions from add.h + */ + +/* + * #define GSM_MULT_R(a, b) (* word a, word b, !(a == b == MIN_WORD) *) \ + * (0x0FFFF & SASR(((longword)(a) * (longword)(b) + 16384), 15)) + */ +#define GSM_MULT_R(a, b) /* word a, word b, !(a == b == MIN_WORD) */ \ + (SASR( ((longword)(a) * (longword)(b) + 16384), 15 )) + +# define GSM_MULT(a,b) /* word a, word b, !(a == b == MIN_WORD) */ \ + (SASR( ((longword)(a) * (longword)(b)), 15 )) + +# define GSM_L_MULT(a, b) /* word a, word b */ \ + (((longword)(a) * (longword)(b)) << 1) + +# define GSM_L_ADD(a, b) \ + ( (a) < 0 ? ( (b) >= 0 ? (a) + (b) \ + : (utmp = (ulongword)-((a) + 1) + (ulongword)-((b) + 1)) \ + >= MAX_LONGWORD ? MIN_LONGWORD : -(longword)utmp-2 ) \ + : ((b) <= 0 ? (a) + (b) \ + : (utmp = (ulongword)(a) + (ulongword)(b)) >= MAX_LONGWORD \ + ? MAX_LONGWORD : utmp)) + +/* + * # define GSM_ADD(a, b) \ + * ((ltmp = (longword)(a) + (longword)(b)) >= MAX_WORD \ + * ? MAX_WORD : ltmp <= MIN_WORD ? MIN_WORD : ltmp) + */ +/* Nonportable, but faster: */ + +#define GSM_ADD(a, b) \ + ((ulongword)((ltmp = (longword)(a) + (longword)(b)) - MIN_WORD) > \ + MAX_WORD - MIN_WORD ? (ltmp > 0 ? MAX_WORD : MIN_WORD) : ltmp) + +# define GSM_SUB(a, b) \ + ((ltmp = (longword)(a) - (longword)(b)) >= MAX_WORD \ + ? MAX_WORD : ltmp <= MIN_WORD ? MIN_WORD : ltmp) + +# define GSM_ABS(a) ((a) < 0 ? ((a) == MIN_WORD ? MAX_WORD : -(a)) : (a)) + +/* Use these if necessary: + +# define GSM_MULT_R(a, b) gsm_mult_r(a, b) +# define GSM_MULT(a, b) gsm_mult(a, b) +# define GSM_L_MULT(a, b) gsm_L_mult(a, b) + +# define GSM_L_ADD(a, b) gsm_L_add(a, b) +# define GSM_ADD(a, b) gsm_add(a, b) +# define GSM_SUB(a, b) gsm_sub(a, b) + +# define GSM_ABS(a) gsm_abs(a) + +*/ + +/* + * More prototypes from implementations.. + */ +extern void Gsm_Coder P(( + struct gsm_state * S, + word * s, /* [0..159] samples IN */ + word * LARc, /* [0..7] LAR coefficients OUT */ + word * Nc, /* [0..3] LTP lag OUT */ + word * bc, /* [0..3] coded LTP gain OUT */ + word * Mc, /* [0..3] RPE grid selection OUT */ + word * xmaxc,/* [0..3] Coded maximum amplitude OUT */ + word * xMc /* [13*4] normalized RPE samples OUT */)); + +extern void Gsm_Long_Term_Predictor P(( /* 4x for 160 samples */ + struct gsm_state * S, + word * d, /* [0..39] residual signal IN */ + word * dp, /* [-120..-1] d' IN */ + word * e, /* [0..40] OUT */ + word * dpp, /* [0..40] OUT */ + word * Nc, /* correlation lag OUT */ + word * bc /* gain factor OUT */)); + +extern void Gsm_LPC_Analysis P(( + struct gsm_state * S, + word * s, /* 0..159 signals IN/OUT */ + word * LARc)); /* 0..7 LARc's OUT */ + +extern void Gsm_Preprocess P(( + struct gsm_state * S, + word * s, word * so)); + +extern void Gsm_Encoding P(( + struct gsm_state * S, + word * e, + word * ep, + word * xmaxc, + word * Mc, + word * xMc)); + +extern void Gsm_Short_Term_Analysis_Filter P(( + struct gsm_state * S, + word * LARc, /* coded log area ratio [0..7] IN */ + word * d /* st res. signal [0..159] IN/OUT */)); + +extern void Gsm_Decoder P(( + struct gsm_state * S, + word * LARcr, /* [0..7] IN */ + word * Ncr, /* [0..3] IN */ + word * bcr, /* [0..3] IN */ + word * Mcr, /* [0..3] IN */ + word * xmaxcr, /* [0..3] IN */ + word * xMcr, /* [0..13*4] IN */ + word * s)); /* [0..159] OUT */ + +extern void Gsm_Decoding P(( + struct gsm_state * S, + word xmaxcr, + word Mcr, + word * xMcr, /* [0..12] IN */ + word * erp)); /* [0..39] OUT */ + +extern void Gsm_Long_Term_Synthesis_Filtering P(( + struct gsm_state* S, + word Ncr, + word bcr, + word * erp, /* [0..39] IN */ + word * drp)); /* [-120..-1] IN, [0..40] OUT */ + +void Gsm_RPE_Decoding P(( + struct gsm_state *S, + word xmaxcr, + word Mcr, + word * xMcr, /* [0..12], 3 bits IN */ + word * erp)); /* [0..39] OUT */ + +void Gsm_RPE_Encoding P(( + struct gsm_state * S, + word * e, /* -5..-1][0..39][40..44 IN/OUT */ + word * xmaxc, /* OUT */ + word * Mc, /* OUT */ + word * xMc)); /* [0..12] OUT */ + +extern void Gsm_Short_Term_Synthesis_Filter P(( + struct gsm_state * S, + word * LARcr, /* log area ratios [0..7] IN */ + word * drp, /* received d [0...39] IN */ + word * s)); /* signal s [0..159] OUT */ + +extern void Gsm_Update_of_reconstructed_short_time_residual_signal P(( + word * dpp, /* [0...39] IN */ + word * ep, /* [0...39] IN */ + word * dp)); /* [-120...-1] IN/OUT */ + +/* + * Tables from table.c + */ +#ifndef GSM_TABLE_C + +extern word gsm_A[8], gsm_B[8], gsm_MIC[8], gsm_MAC[8]; +extern word gsm_INVA[8]; +extern word gsm_DLB[4], gsm_QLB[4]; +extern word gsm_H[11]; +extern word gsm_NRFAC[8]; +extern word gsm_FAC[8]; + +#endif /* GSM_TABLE_C */ + +/* + * Debugging + */ +#ifdef NDEBUG + +# define gsm_debug_words(a, b, c, d) /* nil */ +# define gsm_debug_longwords(a, b, c, d) /* nil */ +# define gsm_debug_word(a, b) /* nil */ +# define gsm_debug_longword(a, b) /* nil */ + +#else /* !NDEBUG => DEBUG */ + + extern void gsm_debug_words P((char * name, int, int, word *)); + extern void gsm_debug_longwords P((char * name, int, int, longword *)); + extern void gsm_debug_longword P((char * name, longword)); + extern void gsm_debug_word P((char * name, word)); + +#endif /* !NDEBUG */ + +#include "unproto.h" + +#endif /* PRIVATE_H */ diff --git a/plugins/LadspaEffect/swh/gsm/proto.h b/plugins/LadspaEffect/swh/gsm/proto.h new file mode 100644 index 000000000..92e422b2a --- /dev/null +++ b/plugins/LadspaEffect/swh/gsm/proto.h @@ -0,0 +1,65 @@ +/* + * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische + * Universitaet Berlin. See the accompanying file "COPYRIGHT" for + * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. + */ + +/*$Header: /home/cvs/giga/ladspa-swh/gsm/proto.h,v 1.1 2001/06/10 21:36:51 swh Exp $*/ + +#ifndef PROTO_H +#define PROTO_H + +/*#if __cplusplus*/ +# define NeedFunctionPrototypes 1 +/*#endif*/ + +#if __STDC__ +# define NeedFunctionPrototypes 1 +#endif + +#ifdef _NO_PROTO +# undef NeedFunctionPrototypes +#endif + +#undef P /* gnu stdio.h actually defines this... */ +#undef P0 +#undef P1 +#undef P2 +#undef P3 +#undef P4 +#undef P5 +#undef P6 +#undef P7 +#undef P8 + +#if NeedFunctionPrototypes + +# define P( protos ) protos + +# define P0() (void) +# define P1(x, a) (a) +# define P2(x, a, b) (a, b) +# define P3(x, a, b, c) (a, b, c) +# define P4(x, a, b, c, d) (a, b, c, d) +# define P5(x, a, b, c, d, e) (a, b, c, d, e) +# define P6(x, a, b, c, d, e, f) (a, b, c, d, e, f) +# define P7(x, a, b, c, d, e, f, g) (a, b, c, d, e, f, g) +# define P8(x, a, b, c, d, e, f, g, h) (a, b, c, d, e, f, g, h) + +#else /* !NeedFunctionPrototypes */ + +# define P( protos ) ( /* protos */ ) + +# define P0() () +# define P1(x, a) x a; +# define P2(x, a, b) x a; b; +# define P3(x, a, b, c) x a; b; c; +# define P4(x, a, b, c, d) x a; b; c; d; +# define P5(x, a, b, c, d, e) x a; b; c; d; e; +# define P6(x, a, b, c, d, e, f) x a; b; c; d; e; f; +# define P7(x, a, b, c, d, e, f, g) x a; b; c; d; e; f; g; +# define P8(x, a, b, c, d, e, f, g, h) x a; b; c; d; e; f; g; h; + +#endif /* !NeedFunctionPrototypes */ + +#endif /* PROTO_H */ diff --git a/plugins/LadspaEffect/swh/gsm/rpe.c b/plugins/LadspaEffect/swh/gsm/rpe.c new file mode 100644 index 000000000..2c0260b60 --- /dev/null +++ b/plugins/LadspaEffect/swh/gsm/rpe.c @@ -0,0 +1,488 @@ +/* + * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische + * Universitaet Berlin. See the accompanying file "COPYRIGHT" for + * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. + */ + +/* $Header: /home/cvs/giga/ladspa-swh/gsm/rpe.c,v 1.1 2001/06/10 21:36:51 swh Exp $ */ + +#include +#include + +#include "private.h" + +#include "gsm.h" +#include "proto.h" + +/* 4.2.13 .. 4.2.17 RPE ENCODING SECTION + */ + +/* 4.2.13 */ + +static void Weighting_filter P2((e, x), + register word * e, /* signal [-5..0.39.44] IN */ + word * x /* signal [0..39] OUT */ +) +/* + * The coefficients of the weighting filter are stored in a table + * (see table 4.4). The following scaling is used: + * + * H[0..10] = integer( real_H[ 0..10] * 8192 ); + */ +{ + /* word wt[ 50 ]; */ + + register longword L_result; + register int k /* , i */ ; + + /* Initialization of a temporary working array wt[0...49] + */ + + /* for (k = 0; k <= 4; k++) wt[k] = 0; + * for (k = 5; k <= 44; k++) wt[k] = *e++; + * for (k = 45; k <= 49; k++) wt[k] = 0; + * + * (e[-5..-1] and e[40..44] are allocated by the caller, + * are initially zero and are not written anywhere.) + */ + e -= 5; + + /* Compute the signal x[0..39] + */ + for (k = 0; k <= 39; k++) { + + L_result = 8192 >> 1; + + /* for (i = 0; i <= 10; i++) { + * L_temp = GSM_L_MULT( wt[k+i], gsm_H[i] ); + * L_result = GSM_L_ADD( L_result, L_temp ); + * } + */ + +#undef STEP +#define STEP( i, H ) (e[ k + i ] * (longword)H) + + /* Every one of these multiplications is done twice -- + * but I don't see an elegant way to optimize this. + * Do you? + */ + +#ifdef STUPID_COMPILER + L_result += STEP( 0, -134 ) ; + L_result += STEP( 1, -374 ) ; + /* + STEP( 2, 0 ) */ + L_result += STEP( 3, 2054 ) ; + L_result += STEP( 4, 5741 ) ; + L_result += STEP( 5, 8192 ) ; + L_result += STEP( 6, 5741 ) ; + L_result += STEP( 7, 2054 ) ; + /* + STEP( 8, 0 ) */ + L_result += STEP( 9, -374 ) ; + L_result += STEP( 10, -134 ) ; +#else + L_result += + STEP( 0, -134 ) + + STEP( 1, -374 ) + /* + STEP( 2, 0 ) */ + + STEP( 3, 2054 ) + + STEP( 4, 5741 ) + + STEP( 5, 8192 ) + + STEP( 6, 5741 ) + + STEP( 7, 2054 ) + /* + STEP( 8, 0 ) */ + + STEP( 9, -374 ) + + STEP(10, -134 ) + ; +#endif + + /* L_result = GSM_L_ADD( L_result, L_result ); (* scaling(x2) *) + * L_result = GSM_L_ADD( L_result, L_result ); (* scaling(x4) *) + * + * x[k] = SASR( L_result, 16 ); + */ + + /* 2 adds vs. >>16 => 14, minus one shift to compensate for + * those we lost when replacing L_MULT by '*'. + */ + + L_result = SASR( L_result, 13 ); + x[k] = ( L_result < MIN_WORD ? MIN_WORD + : (L_result > MAX_WORD ? MAX_WORD : L_result )); + } +} + +/* 4.2.14 */ + +static void RPE_grid_selection P3((x,xM,Mc_out), + word * x, /* [0..39] IN */ + word * xM, /* [0..12] OUT */ + word * Mc_out /* OUT */ +) +/* + * The signal x[0..39] is used to select the RPE grid which is + * represented by Mc. + */ +{ + /* register word temp1; */ + register int /* m, */ i; + register longword L_result, L_temp; + longword EM; /* xxx should be L_EM? */ + word Mc; + + longword L_common_0_3; + + EM = 0; + Mc = 0; + + /* for (m = 0; m <= 3; m++) { + * L_result = 0; + * + * + * for (i = 0; i <= 12; i++) { + * + * temp1 = SASR( x[m + 3*i], 2 ); + * + * assert(temp1 != MIN_WORD); + * + * L_temp = GSM_L_MULT( temp1, temp1 ); + * L_result = GSM_L_ADD( L_temp, L_result ); + * } + * + * if (L_result > EM) { + * Mc = m; + * EM = L_result; + * } + * } + */ + +#undef STEP +#define STEP( m, i ) L_temp = SASR( x[m + 3 * i], 2 ); \ + L_result += L_temp * L_temp; + + /* common part of 0 and 3 */ + + L_result = 0; + STEP( 0, 1 ); STEP( 0, 2 ); STEP( 0, 3 ); STEP( 0, 4 ); + STEP( 0, 5 ); STEP( 0, 6 ); STEP( 0, 7 ); STEP( 0, 8 ); + STEP( 0, 9 ); STEP( 0, 10); STEP( 0, 11); STEP( 0, 12); + L_common_0_3 = L_result; + + /* i = 0 */ + + STEP( 0, 0 ); + L_result <<= 1; /* implicit in L_MULT */ + EM = L_result; + + /* i = 1 */ + + L_result = 0; + STEP( 1, 0 ); + STEP( 1, 1 ); STEP( 1, 2 ); STEP( 1, 3 ); STEP( 1, 4 ); + STEP( 1, 5 ); STEP( 1, 6 ); STEP( 1, 7 ); STEP( 1, 8 ); + STEP( 1, 9 ); STEP( 1, 10); STEP( 1, 11); STEP( 1, 12); + L_result <<= 1; + if (L_result > EM) { + Mc = 1; + EM = L_result; + } + + /* i = 2 */ + + L_result = 0; + STEP( 2, 0 ); + STEP( 2, 1 ); STEP( 2, 2 ); STEP( 2, 3 ); STEP( 2, 4 ); + STEP( 2, 5 ); STEP( 2, 6 ); STEP( 2, 7 ); STEP( 2, 8 ); + STEP( 2, 9 ); STEP( 2, 10); STEP( 2, 11); STEP( 2, 12); + L_result <<= 1; + if (L_result > EM) { + Mc = 2; + EM = L_result; + } + + /* i = 3 */ + + L_result = L_common_0_3; + STEP( 3, 12 ); + L_result <<= 1; + if (L_result > EM) { + Mc = 3; + EM = L_result; + } + + /**/ + + /* Down-sampling by a factor 3 to get the selected xM[0..12] + * RPE sequence. + */ + for (i = 0; i <= 12; i ++) xM[i] = x[Mc + 3*i]; + *Mc_out = Mc; +} + +/* 4.12.15 */ + +static void APCM_quantization_xmaxc_to_exp_mant P3((xmaxc,exp_out,mant_out), + word xmaxc, /* IN */ + word * exp_out, /* OUT */ + word * mant_out ) /* OUT */ +{ + word exp, mant; + + /* Compute exponent and mantissa of the decoded version of xmaxc + */ + + exp = 0; + if (xmaxc > 15) exp = SASR(xmaxc, 3) - 1; + mant = xmaxc - (exp << 3); + + if (mant == 0) { + exp = -4; + mant = 7; + } + else { + while (mant <= 7) { + mant = mant << 1 | 1; + exp--; + } + mant -= 8; + } + + assert( exp >= -4 && exp <= 6 ); + assert( mant >= 0 && mant <= 7 ); + + *exp_out = exp; + *mant_out = mant; +} + +static void APCM_quantization P5((xM,xMc,mant_out,exp_out,xmaxc_out), + word * xM, /* [0..12] IN */ + + word * xMc, /* [0..12] OUT */ + word * mant_out, /* OUT */ + word * exp_out, /* OUT */ + word * xmaxc_out /* OUT */ +) +{ + int i, itest; + + word xmax, xmaxc, temp, temp1, temp2; + word exp, mant; + + + /* Find the maximum absolute value xmax of xM[0..12]. + */ + + xmax = 0; + for (i = 0; i <= 12; i++) { + temp = xM[i]; + temp = GSM_ABS(temp); + if (temp > xmax) xmax = temp; + } + + /* Qantizing and coding of xmax to get xmaxc. + */ + + exp = 0; + temp = SASR( xmax, 9 ); + itest = 0; + + for (i = 0; i <= 5; i++) { + + itest |= (temp <= 0); + temp = SASR( temp, 1 ); + + assert(exp <= 5); + if (itest == 0) exp++; /* exp = add (exp, 1) */ + } + + assert(exp <= 6 && exp >= 0); + temp = exp + 5; + + assert(temp <= 11 && temp >= 0); + xmaxc = gsm_add( SASR(xmax, temp), exp << 3 ); + + /* Quantizing and coding of the xM[0..12] RPE sequence + * to get the xMc[0..12] + */ + + APCM_quantization_xmaxc_to_exp_mant( xmaxc, &exp, &mant ); + + /* This computation uses the fact that the decoded version of xmaxc + * can be calculated by using the exponent and the mantissa part of + * xmaxc (logarithmic table). + * So, this method avoids any division and uses only a scaling + * of the RPE samples by a function of the exponent. A direct + * multiplication by the inverse of the mantissa (NRFAC[0..7] + * found in table 4.5) gives the 3 bit coded version xMc[0..12] + * of the RPE samples. + */ + + + /* Direct computation of xMc[0..12] using table 4.5 + */ + + assert( exp <= 4096 && exp >= -4096); + assert( mant >= 0 && mant <= 7 ); + + temp1 = 6 - exp; /* normalization by the exponent */ + temp2 = gsm_NRFAC[ mant ]; /* inverse mantissa */ + + for (i = 0; i <= 12; i++) { + + assert(temp1 >= 0 && temp1 < 16); + + temp = xM[i] << temp1; + temp = GSM_MULT( temp, temp2 ); + temp = SASR(temp, 12); + xMc[i] = temp + 4; /* see note below */ + } + + /* NOTE: This equation is used to make all the xMc[i] positive. + */ + + *mant_out = mant; + *exp_out = exp; + *xmaxc_out = xmaxc; +} + +/* 4.2.16 */ + +static void APCM_inverse_quantization P4((xMc,mant,exp,xMp), + register word * xMc, /* [0..12] IN */ + word mant, + word exp, + register word * xMp) /* [0..12] OUT */ +/* + * This part is for decoding the RPE sequence of coded xMc[0..12] + * samples to obtain the xMp[0..12] array. Table 4.6 is used to get + * the mantissa of xmaxc (FAC[0..7]). + */ +{ + int i; + word temp, temp1, temp2, temp3; + longword ltmp; + + assert( mant >= 0 && mant <= 7 ); + + temp1 = gsm_FAC[ mant ]; /* see 4.2-15 for mant */ + temp2 = gsm_sub( 6, exp ); /* see 4.2-15 for exp */ + temp3 = gsm_asl( 1, gsm_sub( temp2, 1 )); + + for (i = 13; i--;) { + + assert( *xMc <= 7 && *xMc >= 0 ); /* 3 bit unsigned */ + + /* temp = gsm_sub( *xMc++ << 1, 7 ); */ + temp = (*xMc++ << 1) - 7; /* restore sign */ + assert( temp <= 7 && temp >= -7 ); /* 4 bit signed */ + + temp <<= 12; /* 16 bit signed */ + temp = GSM_MULT_R( temp1, temp ); + temp = GSM_ADD( temp, temp3 ); + *xMp++ = gsm_asr( temp, temp2 ); + } +} + +/* 4.2.17 */ + +static void RPE_grid_positioning P3((Mc,xMp,ep), + word Mc, /* grid position IN */ + register word * xMp, /* [0..12] IN */ + register word * ep /* [0..39] OUT */ +) +/* + * This procedure computes the reconstructed long term residual signal + * ep[0..39] for the LTP analysis filter. The inputs are the Mc + * which is the grid position selection and the xMp[0..12] decoded + * RPE samples which are upsampled by a factor of 3 by inserting zero + * values. + */ +{ + int i = 13; + + assert(0 <= Mc && Mc <= 3); + + switch (Mc) { + case 3: *ep++ = 0; + case 2: do { + *ep++ = 0; + case 1: *ep++ = 0; + case 0: *ep++ = *xMp++; + } while (--i); + } + while (++Mc < 4) *ep++ = 0; + + /* + + int i, k; + for (k = 0; k <= 39; k++) ep[k] = 0; + for (i = 0; i <= 12; i++) { + ep[ Mc + (3*i) ] = xMp[i]; + } + */ +} + +/* 4.2.18 */ + +/* This procedure adds the reconstructed long term residual signal + * ep[0..39] to the estimated signal dpp[0..39] from the long term + * analysis filter to compute the reconstructed short term residual + * signal dp[-40..-1]; also the reconstructed short term residual + * array dp[-120..-41] is updated. + */ + +#if 0 /* Has been inlined in code.c */ +void Gsm_Update_of_reconstructed_short_time_residual_signal P3((dpp, ep, dp), + word * dpp, /* [0...39] IN */ + word * ep, /* [0...39] IN */ + word * dp) /* [-120...-1] IN/OUT */ +{ + int k; + + for (k = 0; k <= 79; k++) + dp[ -120 + k ] = dp[ -80 + k ]; + + for (k = 0; k <= 39; k++) + dp[ -40 + k ] = gsm_add( ep[k], dpp[k] ); +} +#endif /* Has been inlined in code.c */ + +void Gsm_RPE_Encoding P5((S,e,xmaxc,Mc,xMc), + + struct gsm_state * S, + + word * e, /* -5..-1][0..39][40..44 IN/OUT */ + word * xmaxc, /* OUT */ + word * Mc, /* OUT */ + word * xMc) /* [0..12] OUT */ +{ + word x[40]; + word xM[13], xMp[13]; + word mant, exp; + + Weighting_filter(e, x); + RPE_grid_selection(x, xM, Mc); + + APCM_quantization( xM, xMc, &mant, &exp, xmaxc); + APCM_inverse_quantization( xMc, mant, exp, xMp); + + RPE_grid_positioning( *Mc, xMp, e ); + +} + +void Gsm_RPE_Decoding P5((S, xmaxcr, Mcr, xMcr, erp), + struct gsm_state * S, + + word xmaxcr, + word Mcr, + word * xMcr, /* [0..12], 3 bits IN */ + word * erp /* [0..39] OUT */ +) +{ + word exp, mant; + word xMp[ 13 ]; + + APCM_quantization_xmaxc_to_exp_mant( xmaxcr, &exp, &mant ); + APCM_inverse_quantization( xMcr, mant, exp, xMp ); + RPE_grid_positioning( Mcr, xMp, erp ); + +} diff --git a/plugins/LadspaEffect/swh/gsm/short_term.c b/plugins/LadspaEffect/swh/gsm/short_term.c new file mode 100644 index 000000000..ba7f01840 --- /dev/null +++ b/plugins/LadspaEffect/swh/gsm/short_term.c @@ -0,0 +1,429 @@ +/* + * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische + * Universitaet Berlin. See the accompanying file "COPYRIGHT" for + * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. + */ + +/* $Header: /home/cvs/giga/ladspa-swh/gsm/short_term.c,v 1.1 2001/06/10 21:36:51 swh Exp $ */ + +#include +#include + +#include "private.h" + +#include "gsm.h" +#include "proto.h" + +/* + * SHORT TERM ANALYSIS FILTERING SECTION + */ + +/* 4.2.8 */ + +static void Decoding_of_the_coded_Log_Area_Ratios P2((LARc,LARpp), + word * LARc, /* coded log area ratio [0..7] IN */ + word * LARpp) /* out: decoded .. */ +{ + register word temp1 /* , temp2 */; + register long ltmp; /* for GSM_ADD */ + + /* This procedure requires for efficient implementation + * two tables. + * + * INVA[1..8] = integer( (32768 * 8) / real_A[1..8]) + * MIC[1..8] = minimum value of the LARc[1..8] + */ + + /* Compute the LARpp[1..8] + */ + + /* for (i = 1; i <= 8; i++, B++, MIC++, INVA++, LARc++, LARpp++) { + * + * temp1 = GSM_ADD( *LARc, *MIC ) << 10; + * temp2 = *B << 1; + * temp1 = GSM_SUB( temp1, temp2 ); + * + * assert(*INVA != MIN_WORD); + * + * temp1 = GSM_MULT_R( *INVA, temp1 ); + * *LARpp = GSM_ADD( temp1, temp1 ); + * } + */ + +#undef STEP +#define STEP( B, MIC, INVA ) \ + temp1 = GSM_ADD( *LARc++, MIC ) << 10; \ + temp1 = GSM_SUB( temp1, B << 1 ); \ + temp1 = GSM_MULT_R( INVA, temp1 ); \ + *LARpp++ = GSM_ADD( temp1, temp1 ); + + STEP( 0, -32, 13107 ); + STEP( 0, -32, 13107 ); + STEP( 2048, -16, 13107 ); + STEP( -2560, -16, 13107 ); + + STEP( 94, -8, 19223 ); + STEP( -1792, -8, 17476 ); + STEP( -341, -4, 31454 ); + STEP( -1144, -4, 29708 ); + + /* NOTE: the addition of *MIC is used to restore + * the sign of *LARc. + */ +} + +/* 4.2.9 */ +/* Computation of the quantized reflection coefficients + */ + +/* 4.2.9.1 Interpolation of the LARpp[1..8] to get the LARp[1..8] + */ + +/* + * Within each frame of 160 analyzed speech samples the short term + * analysis and synthesis filters operate with four different sets of + * coefficients, derived from the previous set of decoded LARs(LARpp(j-1)) + * and the actual set of decoded LARs (LARpp(j)) + * + * (Initial value: LARpp(j-1)[1..8] = 0.) + */ + +static void Coefficients_0_12 P3((LARpp_j_1, LARpp_j, LARp), + register word * LARpp_j_1, + register word * LARpp_j, + register word * LARp) +{ + register int i; + register longword ltmp; + + for (i = 1; i <= 8; i++, LARp++, LARpp_j_1++, LARpp_j++) { + *LARp = GSM_ADD( SASR( *LARpp_j_1, 2 ), SASR( *LARpp_j, 2 )); + *LARp = GSM_ADD( *LARp, SASR( *LARpp_j_1, 1)); + } +} + +static void Coefficients_13_26 P3((LARpp_j_1, LARpp_j, LARp), + register word * LARpp_j_1, + register word * LARpp_j, + register word * LARp) +{ + register int i; + register longword ltmp; + for (i = 1; i <= 8; i++, LARpp_j_1++, LARpp_j++, LARp++) { + *LARp = GSM_ADD( SASR( *LARpp_j_1, 1), SASR( *LARpp_j, 1 )); + } +} + +static void Coefficients_27_39 P3((LARpp_j_1, LARpp_j, LARp), + register word * LARpp_j_1, + register word * LARpp_j, + register word * LARp) +{ + register int i; + register longword ltmp; + + for (i = 1; i <= 8; i++, LARpp_j_1++, LARpp_j++, LARp++) { + *LARp = GSM_ADD( SASR( *LARpp_j_1, 2 ), SASR( *LARpp_j, 2 )); + *LARp = GSM_ADD( *LARp, SASR( *LARpp_j, 1 )); + } +} + + +static void Coefficients_40_159 P2((LARpp_j, LARp), + register word * LARpp_j, + register word * LARp) +{ + register int i; + + for (i = 1; i <= 8; i++, LARp++, LARpp_j++) + *LARp = *LARpp_j; +} + +/* 4.2.9.2 */ + +static void LARp_to_rp P1((LARp), + register word * LARp) /* [0..7] IN/OUT */ +/* + * The input of this procedure is the interpolated LARp[0..7] array. + * The reflection coefficients, rp[i], are used in the analysis + * filter and in the synthesis filter. + */ +{ + register int i; + register word temp; + register longword ltmp; + + for (i = 1; i <= 8; i++, LARp++) { + + /* temp = GSM_ABS( *LARp ); + * + * if (temp < 11059) temp <<= 1; + * else if (temp < 20070) temp += 11059; + * else temp = GSM_ADD( temp >> 2, 26112 ); + * + * *LARp = *LARp < 0 ? -temp : temp; + */ + + if (*LARp < 0) { + temp = *LARp == MIN_WORD ? MAX_WORD : -(*LARp); + *LARp = - ((temp < 11059) ? temp << 1 + : ((temp < 20070) ? temp + 11059 + : GSM_ADD( temp >> 2, 26112 ))); + } else { + temp = *LARp; + *LARp = (temp < 11059) ? temp << 1 + : ((temp < 20070) ? temp + 11059 + : GSM_ADD( temp >> 2, 26112 )); + } + } +} + + +/* 4.2.10 */ +static void Short_term_analysis_filtering P4((S,rp,k_n,s), + struct gsm_state * S, + register word * rp, /* [0..7] IN */ + register int k_n, /* k_end - k_start */ + register word * s /* [0..n-1] IN/OUT */ +) +/* + * This procedure computes the short term residual signal d[..] to be fed + * to the RPE-LTP loop from the s[..] signal and from the local rp[..] + * array (quantized reflection coefficients). As the call of this + * procedure can be done in many ways (see the interpolation of the LAR + * coefficient), it is assumed that the computation begins with index + * k_start (for arrays d[..] and s[..]) and stops with index k_end + * (k_start and k_end are defined in 4.2.9.1). This procedure also + * needs to keep the array u[0..7] in memory for each call. + */ +{ + register word * u = S->u; + register int i; + register word di, zzz, ui, sav, rpi; + register longword ltmp; + + for (; k_n--; s++) { + + di = sav = *s; + + for (i = 0; i < 8; i++) { /* YYY */ + + ui = u[i]; + rpi = rp[i]; + u[i] = sav; + + zzz = GSM_MULT_R(rpi, di); + sav = GSM_ADD( ui, zzz); + + zzz = GSM_MULT_R(rpi, ui); + di = GSM_ADD( di, zzz ); + } + + *s = di; + } +} + +#if defined(USE_FLOAT_MUL) && defined(FAST) + +static void Fast_Short_term_analysis_filtering P4((S,rp,k_n,s), + struct gsm_state * S, + register word * rp, /* [0..7] IN */ + register int k_n, /* k_end - k_start */ + register word * s /* [0..n-1] IN/OUT */ +) +{ + register word * u = S->u; + register int i; + + float uf[8], + rpf[8]; + + register float scalef = 3.0517578125e-5; + register float sav, di, temp; + + for (i = 0; i < 8; ++i) { + uf[i] = u[i]; + rpf[i] = rp[i] * scalef; + } + for (; k_n--; s++) { + sav = di = *s; + for (i = 0; i < 8; ++i) { + register float rpfi = rpf[i]; + register float ufi = uf[i]; + + uf[i] = sav; + temp = rpfi * di + ufi; + di += rpfi * ufi; + sav = temp; + } + *s = di; + } + for (i = 0; i < 8; ++i) u[i] = uf[i]; +} +#endif /* ! (defined (USE_FLOAT_MUL) && defined (FAST)) */ + +static void Short_term_synthesis_filtering P5((S,rrp,k,wt,sr), + struct gsm_state * S, + register word * rrp, /* [0..7] IN */ + register int k, /* k_end - k_start */ + register word * wt, /* [0..k-1] IN */ + register word * sr /* [0..k-1] OUT */ +) +{ + register word * v = S->v; + register int i; + register word sri, tmp1, tmp2; + register longword ltmp; /* for GSM_ADD & GSM_SUB */ + + while (k--) { + sri = *wt++; + for (i = 8; i--;) { + + /* sri = GSM_SUB( sri, gsm_mult_r( rrp[i], v[i] ) ); + */ + tmp1 = rrp[i]; + tmp2 = v[i]; + tmp2 = ( tmp1 == MIN_WORD && tmp2 == MIN_WORD + ? MAX_WORD + : 0x0FFFF & (( (longword)tmp1 * (longword)tmp2 + + 16384) >> 15)) ; + + sri = GSM_SUB( sri, tmp2 ); + + /* v[i+1] = GSM_ADD( v[i], gsm_mult_r( rrp[i], sri ) ); + */ + tmp1 = ( tmp1 == MIN_WORD && sri == MIN_WORD + ? MAX_WORD + : 0x0FFFF & (( (longword)tmp1 * (longword)sri + + 16384) >> 15)) ; + + v[i+1] = GSM_ADD( v[i], tmp1); + } + *sr++ = v[0] = sri; + } +} + + +#if defined(FAST) && defined(USE_FLOAT_MUL) + +static void Fast_Short_term_synthesis_filtering P5((S,rrp,k,wt,sr), + struct gsm_state * S, + register word * rrp, /* [0..7] IN */ + register int k, /* k_end - k_start */ + register word * wt, /* [0..k-1] IN */ + register word * sr /* [0..k-1] OUT */ +) +{ + register word * v = S->v; + register int i; + + float va[9], rrpa[8]; + register float scalef = 3.0517578125e-5, temp; + + for (i = 0; i < 8; ++i) { + va[i] = v[i]; + rrpa[i] = (float)rrp[i] * scalef; + } + while (k--) { + register float sri = *wt++; + for (i = 8; i--;) { + sri -= rrpa[i] * va[i]; + if (sri < -32768.) sri = -32768.; + else if (sri > 32767.) sri = 32767.; + + temp = va[i] + rrpa[i] * sri; + if (temp < -32768.) temp = -32768.; + else if (temp > 32767.) temp = 32767.; + va[i+1] = temp; + } + *sr++ = va[0] = sri; + } + for (i = 0; i < 9; ++i) v[i] = va[i]; +} + +#endif /* defined(FAST) && defined(USE_FLOAT_MUL) */ + +void Gsm_Short_Term_Analysis_Filter P3((S,LARc,s), + + struct gsm_state * S, + + word * LARc, /* coded log area ratio [0..7] IN */ + word * s /* signal [0..159] IN/OUT */ +) +{ + word * LARpp_j = S->LARpp[ S->j ]; + word * LARpp_j_1 = S->LARpp[ S->j ^= 1 ]; + + word LARp[8]; + +#undef FILTER +#if defined(FAST) && defined(USE_FLOAT_MUL) +# define FILTER (* (S->fast \ + ? Fast_Short_term_analysis_filtering \ + : Short_term_analysis_filtering )) + +#else +# define FILTER Short_term_analysis_filtering +#endif + + Decoding_of_the_coded_Log_Area_Ratios( LARc, LARpp_j ); + + Coefficients_0_12( LARpp_j_1, LARpp_j, LARp ); + LARp_to_rp( LARp ); + FILTER( S, LARp, 13, s); + + Coefficients_13_26( LARpp_j_1, LARpp_j, LARp); + LARp_to_rp( LARp ); + FILTER( S, LARp, 14, s + 13); + + Coefficients_27_39( LARpp_j_1, LARpp_j, LARp); + LARp_to_rp( LARp ); + FILTER( S, LARp, 13, s + 27); + + Coefficients_40_159( LARpp_j, LARp); + LARp_to_rp( LARp ); + FILTER( S, LARp, 120, s + 40); +} + +void Gsm_Short_Term_Synthesis_Filter P4((S, LARcr, wt, s), + struct gsm_state * S, + + word * LARcr, /* received log area ratios [0..7] IN */ + word * wt, /* received d [0..159] IN */ + + word * s /* signal s [0..159] OUT */ +) +{ + word * LARpp_j = S->LARpp[ S->j ]; + word * LARpp_j_1 = S->LARpp[ S->j ^=1 ]; + + word LARp[8]; + +#undef FILTER +#if defined(FAST) && defined(USE_FLOAT_MUL) + +# define FILTER (* (S->fast \ + ? Fast_Short_term_synthesis_filtering \ + : Short_term_synthesis_filtering )) +#else +# define FILTER Short_term_synthesis_filtering +#endif + + Decoding_of_the_coded_Log_Area_Ratios( LARcr, LARpp_j ); + + Coefficients_0_12( LARpp_j_1, LARpp_j, LARp ); + LARp_to_rp( LARp ); + FILTER( S, LARp, 13, wt, s ); + + Coefficients_13_26( LARpp_j_1, LARpp_j, LARp); + LARp_to_rp( LARp ); + FILTER( S, LARp, 14, wt + 13, s + 13 ); + + Coefficients_27_39( LARpp_j_1, LARpp_j, LARp); + LARp_to_rp( LARp ); + FILTER( S, LARp, 13, wt + 27, s + 27 ); + + Coefficients_40_159( LARpp_j, LARp ); + LARp_to_rp( LARp ); + FILTER(S, LARp, 120, wt + 40, s + 40); +} diff --git a/plugins/LadspaEffect/swh/gsm/table.c b/plugins/LadspaEffect/swh/gsm/table.c new file mode 100644 index 000000000..6b889757b --- /dev/null +++ b/plugins/LadspaEffect/swh/gsm/table.c @@ -0,0 +1,63 @@ +/* + * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische + * Universitaet Berlin. See the accompanying file "COPYRIGHT" for + * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. + */ + +/* $Header: /home/cvs/giga/ladspa-swh/gsm/table.c,v 1.1 2001/06/10 21:36:51 swh Exp $ */ + +/* Most of these tables are inlined at their point of use. + */ + +/* 4.4 TABLES USED IN THE FIXED POINT IMPLEMENTATION OF THE RPE-LTP + * CODER AND DECODER + * + * (Most of them inlined, so watch out.) + */ + +#define GSM_TABLE_C +#include "private.h" +#include "gsm.h" + +/* Table 4.1 Quantization of the Log.-Area Ratios + */ +/* i 1 2 3 4 5 6 7 8 */ +word gsm_A[8] = {20480, 20480, 20480, 20480, 13964, 15360, 8534, 9036}; +word gsm_B[8] = { 0, 0, 2048, -2560, 94, -1792, -341, -1144}; +word gsm_MIC[8] = { -32, -32, -16, -16, -8, -8, -4, -4 }; +word gsm_MAC[8] = { 31, 31, 15, 15, 7, 7, 3, 3 }; + + +/* Table 4.2 Tabulation of 1/A[1..8] + */ +word gsm_INVA[8]={ 13107, 13107, 13107, 13107, 19223, 17476, 31454, 29708 }; + + +/* Table 4.3a Decision level of the LTP gain quantizer + */ +/* bc 0 1 2 3 */ +word gsm_DLB[4] = { 6554, 16384, 26214, 32767 }; + + +/* Table 4.3b Quantization levels of the LTP gain quantizer + */ +/* bc 0 1 2 3 */ +word gsm_QLB[4] = { 3277, 11469, 21299, 32767 }; + + +/* Table 4.4 Coefficients of the weighting filter + */ +/* i 0 1 2 3 4 5 6 7 8 9 10 */ +word gsm_H[11] = {-134, -374, 0, 2054, 5741, 8192, 5741, 2054, 0, -374, -134 }; + + +/* Table 4.5 Normalized inverse mantissa used to compute xM/xmax + */ +/* i 0 1 2 3 4 5 6 7 */ +word gsm_NRFAC[8] = { 29128, 26215, 23832, 21846, 20165, 18725, 17476, 16384 }; + + +/* Table 4.6 Normalized direct mantissa used to compute xM/xmax + */ +/* i 0 1 2 3 4 5 6 7 */ +word gsm_FAC[8] = { 18431, 20479, 22527, 24575, 26623, 28671, 30719, 32767 }; diff --git a/plugins/LadspaEffect/swh/gsm/unproto.h b/plugins/LadspaEffect/swh/gsm/unproto.h new file mode 100644 index 000000000..9f5d731d6 --- /dev/null +++ b/plugins/LadspaEffect/swh/gsm/unproto.h @@ -0,0 +1,23 @@ +/* + * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische + * Universitaet Berlin. See the accompanying file "COPYRIGHT" for + * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. + */ + +/*$Header: /home/cvs/giga/ladspa-swh/gsm/unproto.h,v 1.1 2001/06/10 21:36:51 swh Exp $*/ + +#ifdef PROTO_H /* sic */ +#undef PROTO_H + +#undef P +#undef P0 +#undef P1 +#undef P2 +#undef P3 +#undef P4 +#undef P5 +#undef P6 +#undef P7 +#undef P8 + +#endif /* PROTO_H */ diff --git a/plugins/LadspaEffect/swh/gsm_1215.c b/plugins/LadspaEffect/swh/gsm_1215.c new file mode 100644 index 000000000..b2ed56c5d --- /dev/null +++ b/plugins/LadspaEffect/swh/gsm_1215.c @@ -0,0 +1,504 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + +#line 9 "gsm_1215.xml" + +#include +#include "ladspa-util.h" +#include "gsm/gsm.h" +#include "util/biquad.h" + +#define SCALE 32768.0f +#define SCALE_R 0.0000305175f + +int bits[] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80}; + +#define GSM_DRYWET 0 +#define GSM_PASSES 1 +#define GSM_ERROR 2 +#define GSM_INPUT 3 +#define GSM_OUTPUT 4 +#define GSM_LATENCY 5 + +static LADSPA_Descriptor *gsmDescriptor = NULL; + +typedef struct { + LADSPA_Data *drywet; + LADSPA_Data *passes; + LADSPA_Data *error; + LADSPA_Data *input; + LADSPA_Data *output; + LADSPA_Data *latency; + biquad * blf; + int count; + LADSPA_Data *dry; + gsm_signal * dst; + float fs; + gsm handle; + int resamp; + float rsf; + gsm_signal * src; + LADSPA_Data run_adding_gain; +} Gsm; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return gsmDescriptor; + default: + return NULL; + } +} + +static void activateGsm(LADSPA_Handle instance) { + Gsm *plugin_data = (Gsm *)instance; + biquad *blf = plugin_data->blf; + int count = plugin_data->count; + LADSPA_Data *dry = plugin_data->dry; + gsm_signal *dst = plugin_data->dst; + float fs = plugin_data->fs; + gsm handle = plugin_data->handle; + int resamp = plugin_data->resamp; + float rsf = plugin_data->rsf; + gsm_signal *src = plugin_data->src; +#line 41 "gsm_1215.xml" + count = 0; + memset(src, 0, sizeof(gsm_signal) * 160); + memset(dst, 0, sizeof(gsm_signal) * 163); + memset(dry, 0, sizeof(LADSPA_Data) * 160 * resamp); + handle = gsm_create(); + biquad_init(blf); + hs_set_params(blf, 3500.0f, -50.0f, 0.7f, fs); + plugin_data->blf = blf; + plugin_data->count = count; + plugin_data->dry = dry; + plugin_data->dst = dst; + plugin_data->fs = fs; + plugin_data->handle = handle; + plugin_data->resamp = resamp; + plugin_data->rsf = rsf; + plugin_data->src = src; + +} + +static void cleanupGsm(LADSPA_Handle instance) { +#line 51 "gsm_1215.xml" + Gsm *plugin_data = (Gsm *)instance; + free(plugin_data->src); + free(plugin_data->dst); + free(plugin_data->dry); + free(plugin_data->blf); + if (plugin_data->handle) { + gsm_destroy(plugin_data->handle); + } + free(instance); +} + +static void connectPortGsm( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + Gsm *plugin; + + plugin = (Gsm *)instance; + switch (port) { + case GSM_DRYWET: + plugin->drywet = data; + break; + case GSM_PASSES: + plugin->passes = data; + break; + case GSM_ERROR: + plugin->error = data; + break; + case GSM_INPUT: + plugin->input = data; + break; + case GSM_OUTPUT: + plugin->output = data; + break; + case GSM_LATENCY: + plugin->latency = data; + break; + } +} + +static LADSPA_Handle instantiateGsm( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + Gsm *plugin_data = (Gsm *)malloc(sizeof(Gsm)); + biquad *blf = NULL; + int count; + LADSPA_Data *dry = NULL; + gsm_signal *dst = NULL; + float fs; + gsm handle; + int resamp; + float rsf; + gsm_signal *src = NULL; + +#line 27 "gsm_1215.xml" + count = 0; + resamp = s_rate / 8000; + fs = s_rate; + rsf = SCALE / (float)resamp; + src = malloc(sizeof(gsm_signal) * 160); + dst = malloc(sizeof(gsm_signal) * 163); + dry = malloc(sizeof(LADSPA_Data) * 160 * resamp); + handle = NULL; + + blf = malloc(sizeof(biquad)); + biquad_init(blf); + + plugin_data->blf = blf; + plugin_data->count = count; + plugin_data->dry = dry; + plugin_data->dst = dst; + plugin_data->fs = fs; + plugin_data->handle = handle; + plugin_data->resamp = resamp; + plugin_data->rsf = rsf; + plugin_data->src = src; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runGsm(LADSPA_Handle instance, unsigned long sample_count) { + Gsm *plugin_data = (Gsm *)instance; + + /* Dry/wet mix (float value) */ + const LADSPA_Data drywet = *(plugin_data->drywet); + + /* Number of passes (float value) */ + const LADSPA_Data passes = *(plugin_data->passes); + + /* Error rate (bits/block) (float value) */ + const LADSPA_Data error = *(plugin_data->error); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + biquad * blf = plugin_data->blf; + int count = plugin_data->count; + LADSPA_Data * dry = plugin_data->dry; + gsm_signal * dst = plugin_data->dst; + float fs = plugin_data->fs; + gsm handle = plugin_data->handle; + int resamp = plugin_data->resamp; + float rsf = plugin_data->rsf; + gsm_signal * src = plugin_data->src; + +#line 61 "gsm_1215.xml" + unsigned long pos; + gsm_frame frame; + int samp; + float part; + int error_rate = f_round(error); + int num_passes = f_round(passes); + + fs = fs; // So gcc doesn't think it's unused + + for (pos = 0; pos < sample_count; pos++) { + + // oversample into buffer down to aprox 8kHz, 13bit + src[count / resamp] += f_round(biquad_run(blf, input[pos]) * rsf); + + // interpolate output, so it doesn't sound totaly awful + samp = count / resamp; + part = (float)count / (float)resamp - (float)samp; + buffer_write(output[pos], cube_interp(part, dst[samp], dst[samp+1], dst[samp+2], dst[samp+3]) * SCALE_R * drywet + dry[count] * (1.0f - drywet)); + + // Maintain delayed, dry buffer. + dry[count] = input[pos]; + + count++; + + // If we have a full, downsampled buffer then run the encode + + // decode process. + if (count >= 160 * resamp) { + int i, j; + gsm_signal *in; + + count = 0; + dst[0] = dst[160]; + dst[1] = dst[161]; + dst[2] = dst[162]; + + in = src; + for (j=0; jcount = count; + + *(plugin_data->latency) = 160 * resamp; +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainGsm(LADSPA_Handle instance, LADSPA_Data gain) { + ((Gsm *)instance)->run_adding_gain = gain; +} + +static void runAddingGsm(LADSPA_Handle instance, unsigned long sample_count) { + Gsm *plugin_data = (Gsm *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Dry/wet mix (float value) */ + const LADSPA_Data drywet = *(plugin_data->drywet); + + /* Number of passes (float value) */ + const LADSPA_Data passes = *(plugin_data->passes); + + /* Error rate (bits/block) (float value) */ + const LADSPA_Data error = *(plugin_data->error); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + biquad * blf = plugin_data->blf; + int count = plugin_data->count; + LADSPA_Data * dry = plugin_data->dry; + gsm_signal * dst = plugin_data->dst; + float fs = plugin_data->fs; + gsm handle = plugin_data->handle; + int resamp = plugin_data->resamp; + float rsf = plugin_data->rsf; + gsm_signal * src = plugin_data->src; + +#line 61 "gsm_1215.xml" + unsigned long pos; + gsm_frame frame; + int samp; + float part; + int error_rate = f_round(error); + int num_passes = f_round(passes); + + fs = fs; // So gcc doesn't think it's unused + + for (pos = 0; pos < sample_count; pos++) { + + // oversample into buffer down to aprox 8kHz, 13bit + src[count / resamp] += f_round(biquad_run(blf, input[pos]) * rsf); + + // interpolate output, so it doesn't sound totaly awful + samp = count / resamp; + part = (float)count / (float)resamp - (float)samp; + buffer_write(output[pos], cube_interp(part, dst[samp], dst[samp+1], dst[samp+2], dst[samp+3]) * SCALE_R * drywet + dry[count] * (1.0f - drywet)); + + // Maintain delayed, dry buffer. + dry[count] = input[pos]; + + count++; + + // If we have a full, downsampled buffer then run the encode + + // decode process. + if (count >= 160 * resamp) { + int i, j; + gsm_signal *in; + + count = 0; + dst[0] = dst[160]; + dst[1] = dst[161]; + dst[2] = dst[162]; + + in = src; + for (j=0; jcount = count; + + *(plugin_data->latency) = 160 * resamp; +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + gsmDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (gsmDescriptor) { + gsmDescriptor->UniqueID = 1215; + gsmDescriptor->Label = "gsm"; + gsmDescriptor->Properties = + 0; + gsmDescriptor->Name = + D_("GSM simulator"); + gsmDescriptor->Maker = + "Steve Harris "; + gsmDescriptor->Copyright = + "GPL"; + gsmDescriptor->PortCount = 6; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(6, + sizeof(LADSPA_PortDescriptor)); + gsmDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(6, + sizeof(LADSPA_PortRangeHint)); + gsmDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(6, sizeof(char*)); + gsmDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Dry/wet mix */ + port_descriptors[GSM_DRYWET] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[GSM_DRYWET] = + D_("Dry/wet mix"); + port_range_hints[GSM_DRYWET].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1; + port_range_hints[GSM_DRYWET].LowerBound = 0; + port_range_hints[GSM_DRYWET].UpperBound = 1; + + /* Parameters for Number of passes */ + port_descriptors[GSM_PASSES] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[GSM_PASSES] = + D_("Number of passes"); + port_range_hints[GSM_PASSES].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_INTEGER | LADSPA_HINT_DEFAULT_1; + port_range_hints[GSM_PASSES].LowerBound = 0; + port_range_hints[GSM_PASSES].UpperBound = 10; + + /* Parameters for Error rate (bits/block) */ + port_descriptors[GSM_ERROR] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[GSM_ERROR] = + D_("Error rate (bits/block)"); + port_range_hints[GSM_ERROR].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[GSM_ERROR].LowerBound = 0; + port_range_hints[GSM_ERROR].UpperBound = 30; + + /* Parameters for Input */ + port_descriptors[GSM_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[GSM_INPUT] = + D_("Input"); + port_range_hints[GSM_INPUT].HintDescriptor = 0; + + /* Parameters for Output */ + port_descriptors[GSM_OUTPUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[GSM_OUTPUT] = + D_("Output"); + port_range_hints[GSM_OUTPUT].HintDescriptor = 0; + + /* Parameters for latency */ + port_descriptors[GSM_LATENCY] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_CONTROL; + port_names[GSM_LATENCY] = + D_("latency"); + port_range_hints[GSM_LATENCY].HintDescriptor = 0; + + gsmDescriptor->activate = activateGsm; + gsmDescriptor->cleanup = cleanupGsm; + gsmDescriptor->connect_port = connectPortGsm; + gsmDescriptor->deactivate = NULL; + gsmDescriptor->instantiate = instantiateGsm; + gsmDescriptor->run = runGsm; + gsmDescriptor->run_adding = runAddingGsm; + gsmDescriptor->set_run_adding_gain = setRunAddingGainGsm; + } +} + +void _fini() { + if (gsmDescriptor) { + free((LADSPA_PortDescriptor *)gsmDescriptor->PortDescriptors); + free((char **)gsmDescriptor->PortNames); + free((LADSPA_PortRangeHint *)gsmDescriptor->PortRangeHints); + free(gsmDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/gverb/gverb.c b/plugins/LadspaEffect/swh/gverb/gverb.c new file mode 100644 index 000000000..a64496ab1 --- /dev/null +++ b/plugins/LadspaEffect/swh/gverb/gverb.c @@ -0,0 +1,207 @@ +/* + + Copyright (C) 1999 Juhana Sadeharju + kouhia at nic.funet.fi + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + */ + + +#include +#include +#include +#include +#include "gverbdsp.h" +#include "gverb.h" +#include "../ladspa-util.h" + +ty_gverb *gverb_new(int srate, float maxroomsize, float roomsize, + float revtime, + float damping, float spread, + float inputbandwidth, float earlylevel, + float taillevel) +{ + ty_gverb *p; + float ga,gb,gt; + int i,n; + float r; + float diffscale; + int a,b,c,cc,d,dd,e; + float spread1,spread2; + + p = (ty_gverb *)malloc(sizeof(ty_gverb)); + p->rate = srate; + p->fdndamping = damping; + p->maxroomsize = maxroomsize; + p->roomsize = roomsize; + p->revtime = revtime; + p->earlylevel = earlylevel; + p->taillevel = taillevel; + + p->maxdelay = p->rate*p->maxroomsize/340.0; + p->largestdelay = p->rate*p->roomsize/340.0; + + + /* Input damper */ + + p->inputbandwidth = inputbandwidth; + p->inputdamper = damper_make(1.0 - p->inputbandwidth); + + + /* FDN section */ + + + p->fdndels = (ty_fixeddelay **)calloc(FDNORDER, sizeof(ty_fixeddelay *)); + for(i = 0; i < FDNORDER; i++) { + p->fdndels[i] = fixeddelay_make((int)p->maxdelay+1000); + } + p->fdngains = (float *)calloc(FDNORDER, sizeof(float)); + p->fdnlens = (int *)calloc(FDNORDER, sizeof(int)); + + p->fdndamps = (ty_damper **)calloc(FDNORDER, sizeof(ty_damper *)); + for(i = 0; i < FDNORDER; i++) { + p->fdndamps[i] = damper_make(p->fdndamping); + } + + ga = 60.0; + gt = p->revtime; + ga = powf(10.0f,-ga/20.0f); + n = p->rate*gt; + p->alpha = pow((double)ga, 1.0/(double)n); + + gb = 0.0; + for(i = 0; i < FDNORDER; i++) { + if (i == 0) gb = 1.000000*p->largestdelay; + if (i == 1) gb = 0.816490*p->largestdelay; + if (i == 2) gb = 0.707100*p->largestdelay; + if (i == 3) gb = 0.632450*p->largestdelay; + +#if 0 + p->fdnlens[i] = nearest_prime((int)gb, 0.5); +#else + p->fdnlens[i] = f_round(gb); +#endif + p->fdngains[i] = -powf((float)p->alpha,p->fdnlens[i]); + } + + p->d = (float *)calloc(FDNORDER, sizeof(float)); + p->u = (float *)calloc(FDNORDER, sizeof(float)); + p->f = (float *)calloc(FDNORDER, sizeof(float)); + + /* Diffuser section */ + + diffscale = (float)p->fdnlens[3]/(210+159+562+410); + spread1 = spread; + spread2 = 3.0*spread; + + b = 210; + r = 0.125541; + a = spread1*r; + c = 210+159+a; + cc = c-b; + r = 0.854046; + a = spread2*r; + d = 210+159+562+a; + dd = d-c; + e = 1341-d; + + p->ldifs = (ty_diffuser **)calloc(4, sizeof(ty_diffuser *)); + p->ldifs[0] = diffuser_make((int)(diffscale*b),0.75); + p->ldifs[1] = diffuser_make((int)(diffscale*cc),0.75); + p->ldifs[2] = diffuser_make((int)(diffscale*dd),0.625); + p->ldifs[3] = diffuser_make((int)(diffscale*e),0.625); + + b = 210; + r = -0.568366; + a = spread1*r; + c = 210+159+a; + cc = c-b; + r = -0.126815; + a = spread2*r; + d = 210+159+562+a; + dd = d-c; + e = 1341-d; + + p->rdifs = (ty_diffuser **)calloc(4, sizeof(ty_diffuser *)); + p->rdifs[0] = diffuser_make((int)(diffscale*b),0.75); + p->rdifs[1] = diffuser_make((int)(diffscale*cc),0.75); + p->rdifs[2] = diffuser_make((int)(diffscale*dd),0.625); + p->rdifs[3] = diffuser_make((int)(diffscale*e),0.625); + + + + /* Tapped delay section */ + + p->tapdelay = fixeddelay_make(44000); + p->taps = (int *)calloc(FDNORDER, sizeof(int)); + p->tapgains = (float *)calloc(FDNORDER, sizeof(float)); + + p->taps[0] = 5+0.410*p->largestdelay; + p->taps[1] = 5+0.300*p->largestdelay; + p->taps[2] = 5+0.155*p->largestdelay; + p->taps[3] = 5+0.000*p->largestdelay; + + for(i = 0; i < FDNORDER; i++) { + p->tapgains[i] = pow(p->alpha,(double)p->taps[i]); + } + + return(p); +} + +void gverb_free(ty_gverb *p) +{ + int i; + + damper_free(p->inputdamper); + for(i = 0; i < FDNORDER; i++) { + fixeddelay_free(p->fdndels[i]); + damper_free(p->fdndamps[i]); + diffuser_free(p->ldifs[i]); + diffuser_free(p->rdifs[i]); + } + free(p->fdndels); + free(p->fdngains); + free(p->fdnlens); + free(p->fdndamps); + free(p->d); + free(p->u); + free(p->f); + free(p->ldifs); + free(p->rdifs); + free(p->taps); + free(p->tapgains); + fixeddelay_free(p->tapdelay); + free(p); +} + +void gverb_flush(ty_gverb *p) +{ + int i; + + damper_flush(p->inputdamper); + for(i = 0; i < FDNORDER; i++) { + fixeddelay_flush(p->fdndels[i]); + damper_flush(p->fdndamps[i]); + diffuser_flush(p->ldifs[i]); + diffuser_flush(p->rdifs[i]); + } + memset(p->d, 0, FDNORDER * sizeof(float)); + memset(p->u, 0, FDNORDER * sizeof(float)); + memset(p->f, 0, FDNORDER * sizeof(float)); + fixeddelay_flush(p->tapdelay); +} + +/* swh: other functions are now in the .h file for inlining */ diff --git a/plugins/LadspaEffect/swh/gverb/gverb.h b/plugins/LadspaEffect/swh/gverb/gverb.h new file mode 100644 index 000000000..302e74090 --- /dev/null +++ b/plugins/LadspaEffect/swh/gverb/gverb.h @@ -0,0 +1,234 @@ +/* + + Copyright (C) 1999 Juhana Sadeharju + kouhia at nic.funet.fi + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + */ + +#ifndef GVERB_H +#define GVERB_H + +#include +#include +#include +#include "gverbdsp.h" +#include "gverb.h" +#include "../ladspa-util.h" + +#define FDNORDER 4 + +typedef struct { + int rate; + float inputbandwidth; + float taillevel; + float earlylevel; + ty_damper *inputdamper; + float maxroomsize; + float roomsize; + float revtime; + float maxdelay; + float largestdelay; + ty_fixeddelay **fdndels; + float *fdngains; + int *fdnlens; + ty_damper **fdndamps; + float fdndamping; + ty_diffuser **ldifs; + ty_diffuser **rdifs; + ty_fixeddelay *tapdelay; + int *taps; + float *tapgains; + float *d; + float *u; + float *f; + double alpha; +} ty_gverb; + + +ty_gverb *gverb_new(int, float, float, float, float, float, float, float, float); +void gverb_free(ty_gverb *); +void gverb_flush(ty_gverb *); +static void gverb_do(ty_gverb *, float, float *, float *); +static void gverb_set_roomsize(ty_gverb *, float); +static void gverb_set_revtime(ty_gverb *, float); +static void gverb_set_damping(ty_gverb *, float); +static void gverb_set_inputbandwidth(ty_gverb *, float); +static void gverb_set_earlylevel(ty_gverb *, float); +static void gverb_set_taillevel(ty_gverb *, float); + +/* + * This FDN reverb can be made smoother by setting matrix elements at the + * diagonal and near of it to zero or nearly zero. By setting diagonals to zero + * means we remove the effect of the parallel comb structure from the + * reverberation. A comb generates uniform impulse stream to the reverberation + * impulse response, and thus it is not good. By setting near diagonal elements + * to zero means we remove delay sequences having consequtive delays of the + * similar lenths, when the delays are in sorted in length with respect to + * matrix element index. The matrix described here could be generated by + * differencing Rocchesso's circulant matrix at max diffuse value and at low + * diffuse value (approaching parallel combs). + * + * Example 1: + * Set a(k,k), for all k, equal to 0. + * + * Example 2: + * Set a(k,k), a(k,k-1) and a(k,k+1) equal to 0. + * + * Example 3: The transition to zero gains could be smooth as well. + * a(k,k-1) and a(k,k+1) could be 0.3, and a(k,k-2) and a(k,k+2) could + * be 0.5, say. + */ + +static inline void gverb_fdnmatrix(float *a, float *b) +{ + const float dl0 = a[0], dl1 = a[1], dl2 = a[2], dl3 = a[3]; + + b[0] = 0.5f*(+dl0 + dl1 - dl2 - dl3); + b[1] = 0.5f*(+dl0 - dl1 - dl2 + dl3); + b[2] = 0.5f*(-dl0 + dl1 - dl2 + dl3); + b[3] = 0.5f*(+dl0 + dl1 + dl2 + dl3); +} + +static inline void gverb_do(ty_gverb *p, float x, float *yl, float *yr) +{ + float z; + unsigned int i; + float lsum,rsum,sum,sign; + + if (isnan(x) || fabsf(x) > 100000.0f) { + x = 0.0f; + } + + z = damper_do(p->inputdamper, x); + + z = diffuser_do(p->ldifs[0],z); + + for(i = 0; i < FDNORDER; i++) { + p->u[i] = p->tapgains[i]*fixeddelay_read(p->tapdelay,p->taps[i]); + } + fixeddelay_write(p->tapdelay,z); + + for(i = 0; i < FDNORDER; i++) { + p->d[i] = damper_do(p->fdndamps[i], + p->fdngains[i]*fixeddelay_read(p->fdndels[i], + p->fdnlens[i])); + } + + sum = 0.0f; + sign = 1.0f; + for(i = 0; i < FDNORDER; i++) { + sum += sign*(p->taillevel*p->d[i] + p->earlylevel*p->u[i]); + sign = -sign; + } + sum += x*p->earlylevel; + lsum = sum; + rsum = sum; + + gverb_fdnmatrix(p->d,p->f); + + for(i = 0; i < FDNORDER; i++) { + fixeddelay_write(p->fdndels[i],p->u[i]+p->f[i]); + } + + lsum = diffuser_do(p->ldifs[1],lsum); + lsum = diffuser_do(p->ldifs[2],lsum); + lsum = diffuser_do(p->ldifs[3],lsum); + rsum = diffuser_do(p->rdifs[1],rsum); + rsum = diffuser_do(p->rdifs[2],rsum); + rsum = diffuser_do(p->rdifs[3],rsum); + + *yl = lsum; + *yr = rsum; +} + +static inline void gverb_set_roomsize(ty_gverb *p, const float a) +{ + unsigned int i; + + if (a <= 1.0 || isnan(a)) { + p->roomsize = 1.0; + } else { + p->roomsize = a; + } + p->largestdelay = p->rate * p->roomsize * 0.00294f; + + p->fdnlens[0] = f_round(1.000000f*p->largestdelay); + p->fdnlens[1] = f_round(0.816490f*p->largestdelay); + p->fdnlens[2] = f_round(0.707100f*p->largestdelay); + p->fdnlens[3] = f_round(0.632450f*p->largestdelay); + for(i = 0; i < FDNORDER; i++) { + p->fdngains[i] = -powf((float)p->alpha, p->fdnlens[i]); + } + + p->taps[0] = 5+f_round(0.410f*p->largestdelay); + p->taps[1] = 5+f_round(0.300f*p->largestdelay); + p->taps[2] = 5+f_round(0.155f*p->largestdelay); + p->taps[3] = 5+f_round(0.000f*p->largestdelay); + + for(i = 0; i < FDNORDER; i++) { + p->tapgains[i] = powf((float)p->alpha, p->taps[i]); + } + +} + +static inline void gverb_set_revtime(ty_gverb *p,float a) +{ + float ga,gt; + double n; + unsigned int i; + + p->revtime = a; + + ga = 60.0; + gt = p->revtime; + ga = powf(10.0f,-ga/20.0f); + n = p->rate*gt; + p->alpha = (double)powf(ga,1.0f/n); + + for(i = 0; i < FDNORDER; i++) { + p->fdngains[i] = -powf((float)p->alpha, p->fdnlens[i]); + } + +} + +static inline void gverb_set_damping(ty_gverb *p,float a) +{ + unsigned int i; + + p->fdndamping = a; + for(i = 0; i < FDNORDER; i++) { + damper_set(p->fdndamps[i],p->fdndamping); + } +} + +static inline void gverb_set_inputbandwidth(ty_gverb *p,float a) +{ + p->inputbandwidth = a; + damper_set(p->inputdamper,1.0 - p->inputbandwidth); +} + +static inline void gverb_set_earlylevel(ty_gverb *p,float a) +{ + p->earlylevel = a; +} + +static inline void gverb_set_taillevel(ty_gverb *p,float a) +{ + p->taillevel = a; +} + +#endif diff --git a/plugins/LadspaEffect/swh/gverb/gverbdsp.c b/plugins/LadspaEffect/swh/gverb/gverbdsp.c new file mode 100644 index 000000000..05a90f897 --- /dev/null +++ b/plugins/LadspaEffect/swh/gverb/gverbdsp.c @@ -0,0 +1,130 @@ + + +/* + + Copyright (C) 1999 Juhana Sadeharju + kouhia at nic.funet.fi + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + */ + +#include +#include +#include +#include + +#include "gverbdsp.h" + +#define TRUE 1 +#define FALSE 0 + +ty_diffuser *diffuser_make(int size, float coeff) +{ + ty_diffuser *p; + int i; + + p = (ty_diffuser *)malloc(sizeof(ty_diffuser)); + p->size = size; + p->coeff = coeff; + p->idx = 0; + p->buf = (float *)malloc(size*sizeof(float)); + for (i = 0; i < size; i++) p->buf[i] = 0.0; + return(p); +} + +void diffuser_free(ty_diffuser *p) +{ + free(p->buf); + free(p); +} + +void diffuser_flush(ty_diffuser *p) +{ + memset(p->buf, 0, p->size * sizeof(float)); +} + +ty_damper *damper_make(float damping) +{ + ty_damper *p; + + p = (ty_damper *)malloc(sizeof(ty_damper)); + p->damping = damping; + p->delay = 0.0f; + return(p); +} + +void damper_free(ty_damper *p) +{ + free(p); +} + +void damper_flush(ty_damper *p) +{ + p->delay = 0.0f; +} + +ty_fixeddelay *fixeddelay_make(int size) +{ + ty_fixeddelay *p; + int i; + + p = (ty_fixeddelay *)malloc(sizeof(ty_fixeddelay)); + p->size = size; + p->idx = 0; + p->buf = (float *)malloc(size*sizeof(float)); + for (i = 0; i < size; i++) p->buf[i] = 0.0; + return(p); +} + +void fixeddelay_free(ty_fixeddelay *p) +{ + free(p->buf); + free(p); +} + +void fixeddelay_flush(ty_fixeddelay *p) +{ + memset(p->buf, 0, p->size * sizeof(float)); +} + +int isprime(int n) +{ + unsigned int i; + const unsigned int lim = (int)sqrtf((float)n); + + if (n == 2) return(TRUE); + if ((n & 1) == 0) return(FALSE); + for(i = 3; i <= lim; i += 2) + if ((n % i) == 0) return(FALSE); + return(TRUE); +} + +int nearest_prime(int n, float rerror) + /* relative error; new prime will be in range + * [n-n*rerror, n+n*rerror]; + */ +{ + int bound,k; + + if (isprime(n)) return(n); + /* assume n is large enough and n*rerror enough smaller than n */ + bound = n*rerror; + for(k = 1; k <= bound; k++) { + if (isprime(n+k)) return(n+k); + if (isprime(n-k)) return(n-k); + } + return(-1); +} diff --git a/plugins/LadspaEffect/swh/gverb/gverbdsp.h b/plugins/LadspaEffect/swh/gverb/gverbdsp.h new file mode 100644 index 000000000..b0cec5e20 --- /dev/null +++ b/plugins/LadspaEffect/swh/gverb/gverbdsp.h @@ -0,0 +1,85 @@ + +#ifndef GVERBDSP_H +#define GVERBDSP_H + +#include "../ladspa-util.h" + +typedef struct { + int size; + int idx; + float *buf; +} ty_fixeddelay; + +typedef struct { + int size; + float coeff; + int idx; + float *buf; +} ty_diffuser; + +typedef struct { + float damping; + float delay; +} ty_damper; + +ty_diffuser *diffuser_make(int, float); +void diffuser_free(ty_diffuser *); +void diffuser_flush(ty_diffuser *); +//float diffuser_do(ty_diffuser *, float); + +ty_damper *damper_make(float); +void damper_free(ty_damper *); +void damper_flush(ty_damper *); +//void damper_set(ty_damper *, float); +//float damper_do(ty_damper *, float); + +ty_fixeddelay *fixeddelay_make(int); +void fixeddelay_free(ty_fixeddelay *); +void fixeddelay_flush(ty_fixeddelay *); +//float fixeddelay_read(ty_fixeddelay *, int); +//void fixeddelay_write(ty_fixeddelay *, float); + +int isprime(int); +int nearest_prime(int, float); + +static inline float diffuser_do(ty_diffuser *p, float x) +{ + float y,w; + + w = x - p->buf[p->idx]*p->coeff; + w = flush_to_zero(w); + y = p->buf[p->idx] + w*p->coeff; + p->buf[p->idx] = w; + p->idx = (p->idx + 1) % p->size; + return(y); +} + +static inline float fixeddelay_read(ty_fixeddelay *p, int n) +{ + int i; + + i = (p->idx - n + p->size) % p->size; + return(p->buf[i]); +} + +static inline void fixeddelay_write(ty_fixeddelay *p, float x) +{ + p->buf[p->idx] = x; + p->idx = (p->idx + 1) % p->size; +} + +static inline void damper_set(ty_damper *p, float damping) +{ + p->damping = damping; +} + +static inline float damper_do(ty_damper *p, float x) +{ + float y; + + y = x*(1.0-p->damping) + p->delay*p->damping; + p->delay = y; + return(y); +} + +#endif diff --git a/plugins/LadspaEffect/swh/gverb_1216.c b/plugins/LadspaEffect/swh/gverb_1216.c new file mode 100644 index 000000000..0bf339fd7 --- /dev/null +++ b/plugins/LadspaEffect/swh/gverb_1216.c @@ -0,0 +1,440 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + +#line 10 "gverb_1216.xml" + +/* + +GVerb algorithm designed and implemented by Juhana Sadeharju. +LADSPA implementation and GVerb speeds ups by Steve Harris. + +Comments and suggestions should be mailed to Juhana Sadeharju +(kouhia at nic funet fi). + +*/ + +#include "ladspa-util.h" +#include "gverb/gverbdsp.h" +#include "gverb/gverb.h" + +#define GVERB_ROOMSIZE 0 +#define GVERB_REVTIME 1 +#define GVERB_DAMPING 2 +#define GVERB_INPUTBANDWIDTH 3 +#define GVERB_DRYLEVEL 4 +#define GVERB_EARLYLEVEL 5 +#define GVERB_TAILLEVEL 6 +#define GVERB_INPUT 7 +#define GVERB_OUTL 8 +#define GVERB_OUTR 9 + +static LADSPA_Descriptor *gverbDescriptor = NULL; + +typedef struct { + LADSPA_Data *roomsize; + LADSPA_Data *revtime; + LADSPA_Data *damping; + LADSPA_Data *inputbandwidth; + LADSPA_Data *drylevel; + LADSPA_Data *earlylevel; + LADSPA_Data *taillevel; + LADSPA_Data *input; + LADSPA_Data *outl; + LADSPA_Data *outr; + ty_gverb * verb; + LADSPA_Data run_adding_gain; +} Gverb; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return gverbDescriptor; + default: + return NULL; + } +} + +static void activateGverb(LADSPA_Handle instance) { + Gverb *plugin_data = (Gverb *)instance; + ty_gverb *verb = plugin_data->verb; +#line 54 "gverb_1216.xml" + gverb_flush(plugin_data->verb); + plugin_data->verb = verb; + +} + +static void cleanupGverb(LADSPA_Handle instance) { +#line 58 "gverb_1216.xml" + Gverb *plugin_data = (Gverb *)instance; + gverb_free(plugin_data->verb); + free(instance); +} + +static void connectPortGverb( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + Gverb *plugin; + + plugin = (Gverb *)instance; + switch (port) { + case GVERB_ROOMSIZE: + plugin->roomsize = data; + break; + case GVERB_REVTIME: + plugin->revtime = data; + break; + case GVERB_DAMPING: + plugin->damping = data; + break; + case GVERB_INPUTBANDWIDTH: + plugin->inputbandwidth = data; + break; + case GVERB_DRYLEVEL: + plugin->drylevel = data; + break; + case GVERB_EARLYLEVEL: + plugin->earlylevel = data; + break; + case GVERB_TAILLEVEL: + plugin->taillevel = data; + break; + case GVERB_INPUT: + plugin->input = data; + break; + case GVERB_OUTL: + plugin->outl = data; + break; + case GVERB_OUTR: + plugin->outr = data; + break; + } +} + +static LADSPA_Handle instantiateGverb( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + Gverb *plugin_data = (Gverb *)malloc(sizeof(Gverb)); + ty_gverb *verb = NULL; + +#line 50 "gverb_1216.xml" + verb = gverb_new(s_rate, 300.0f, 50.0f, 7.0f, 0.5f, 15.0f, 0.5f, 0.5f, 0.5f); + + plugin_data->verb = verb; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runGverb(LADSPA_Handle instance, unsigned long sample_count) { + Gverb *plugin_data = (Gverb *)instance; + + /* Roomsize (m) (float value) */ + const LADSPA_Data roomsize = *(plugin_data->roomsize); + + /* Reverb time (s) (float value) */ + const LADSPA_Data revtime = *(plugin_data->revtime); + + /* Damping (float value) */ + const LADSPA_Data damping = *(plugin_data->damping); + + /* Input bandwidth (float value) */ + const LADSPA_Data inputbandwidth = *(plugin_data->inputbandwidth); + + /* Dry signal level (dB) (float value) */ + const LADSPA_Data drylevel = *(plugin_data->drylevel); + + /* Early reflection level (dB) (float value) */ + const LADSPA_Data earlylevel = *(plugin_data->earlylevel); + + /* Tail level (dB) (float value) */ + const LADSPA_Data taillevel = *(plugin_data->taillevel); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Left output (array of floats of length sample_count) */ + LADSPA_Data * const outl = plugin_data->outl; + + /* Right output (array of floats of length sample_count) */ + LADSPA_Data * const outr = plugin_data->outr; + ty_gverb * verb = plugin_data->verb; + +#line 62 "gverb_1216.xml" + unsigned long pos; + float l, r; + float dryc = DB_CO(drylevel); + + gverb_set_roomsize(verb, roomsize); + gverb_set_revtime(verb, revtime); + gverb_set_damping(verb, damping); + gverb_set_inputbandwidth(verb, inputbandwidth); + gverb_set_earlylevel(verb, DB_CO(earlylevel)); + gverb_set_taillevel(verb, DB_CO(taillevel)); + + for (pos = 0; pos < sample_count; pos++) { + gverb_do(verb, input[pos], &l, &r); + buffer_write(outl[pos], l + input[pos] * dryc); + buffer_write(outr[pos], r + input[pos] * dryc); + } +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainGverb(LADSPA_Handle instance, LADSPA_Data gain) { + ((Gverb *)instance)->run_adding_gain = gain; +} + +static void runAddingGverb(LADSPA_Handle instance, unsigned long sample_count) { + Gverb *plugin_data = (Gverb *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Roomsize (m) (float value) */ + const LADSPA_Data roomsize = *(plugin_data->roomsize); + + /* Reverb time (s) (float value) */ + const LADSPA_Data revtime = *(plugin_data->revtime); + + /* Damping (float value) */ + const LADSPA_Data damping = *(plugin_data->damping); + + /* Input bandwidth (float value) */ + const LADSPA_Data inputbandwidth = *(plugin_data->inputbandwidth); + + /* Dry signal level (dB) (float value) */ + const LADSPA_Data drylevel = *(plugin_data->drylevel); + + /* Early reflection level (dB) (float value) */ + const LADSPA_Data earlylevel = *(plugin_data->earlylevel); + + /* Tail level (dB) (float value) */ + const LADSPA_Data taillevel = *(plugin_data->taillevel); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Left output (array of floats of length sample_count) */ + LADSPA_Data * const outl = plugin_data->outl; + + /* Right output (array of floats of length sample_count) */ + LADSPA_Data * const outr = plugin_data->outr; + ty_gverb * verb = plugin_data->verb; + +#line 62 "gverb_1216.xml" + unsigned long pos; + float l, r; + float dryc = DB_CO(drylevel); + + gverb_set_roomsize(verb, roomsize); + gverb_set_revtime(verb, revtime); + gverb_set_damping(verb, damping); + gverb_set_inputbandwidth(verb, inputbandwidth); + gverb_set_earlylevel(verb, DB_CO(earlylevel)); + gverb_set_taillevel(verb, DB_CO(taillevel)); + + for (pos = 0; pos < sample_count; pos++) { + gverb_do(verb, input[pos], &l, &r); + buffer_write(outl[pos], l + input[pos] * dryc); + buffer_write(outr[pos], r + input[pos] * dryc); + } +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + gverbDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (gverbDescriptor) { + gverbDescriptor->UniqueID = 1216; + gverbDescriptor->Label = "gverb"; + gverbDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + gverbDescriptor->Name = + D_("GVerb"); + gverbDescriptor->Maker = + "Juhana Sadeharju , LADSPAification by Steve Harris "; + gverbDescriptor->Copyright = + "GPL"; + gverbDescriptor->PortCount = 10; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(10, + sizeof(LADSPA_PortDescriptor)); + gverbDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(10, + sizeof(LADSPA_PortRangeHint)); + gverbDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(10, sizeof(char*)); + gverbDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Roomsize (m) */ + port_descriptors[GVERB_ROOMSIZE] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[GVERB_ROOMSIZE] = + D_("Roomsize (m)"); + port_range_hints[GVERB_ROOMSIZE].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; + port_range_hints[GVERB_ROOMSIZE].LowerBound = 1; + port_range_hints[GVERB_ROOMSIZE].UpperBound = 300; + + /* Parameters for Reverb time (s) */ + port_descriptors[GVERB_REVTIME] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[GVERB_REVTIME] = + D_("Reverb time (s)"); + port_range_hints[GVERB_REVTIME].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; + port_range_hints[GVERB_REVTIME].LowerBound = 0.1; + port_range_hints[GVERB_REVTIME].UpperBound = 30; + + /* Parameters for Damping */ + port_descriptors[GVERB_DAMPING] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[GVERB_DAMPING] = + D_("Damping"); + port_range_hints[GVERB_DAMPING].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; + port_range_hints[GVERB_DAMPING].LowerBound = 0; + port_range_hints[GVERB_DAMPING].UpperBound = 1; + + /* Parameters for Input bandwidth */ + port_descriptors[GVERB_INPUTBANDWIDTH] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[GVERB_INPUTBANDWIDTH] = + D_("Input bandwidth"); + port_range_hints[GVERB_INPUTBANDWIDTH].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_HIGH; + port_range_hints[GVERB_INPUTBANDWIDTH].LowerBound = 0; + port_range_hints[GVERB_INPUTBANDWIDTH].UpperBound = 1; + + /* Parameters for Dry signal level (dB) */ + port_descriptors[GVERB_DRYLEVEL] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[GVERB_DRYLEVEL] = + D_("Dry signal level (dB)"); + port_range_hints[GVERB_DRYLEVEL].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MINIMUM; + port_range_hints[GVERB_DRYLEVEL].LowerBound = -70; + port_range_hints[GVERB_DRYLEVEL].UpperBound = 0; + + /* Parameters for Early reflection level (dB) */ + port_descriptors[GVERB_EARLYLEVEL] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[GVERB_EARLYLEVEL] = + D_("Early reflection level (dB)"); + port_range_hints[GVERB_EARLYLEVEL].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[GVERB_EARLYLEVEL].LowerBound = -70; + port_range_hints[GVERB_EARLYLEVEL].UpperBound = 0; + + /* Parameters for Tail level (dB) */ + port_descriptors[GVERB_TAILLEVEL] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[GVERB_TAILLEVEL] = + D_("Tail level (dB)"); + port_range_hints[GVERB_TAILLEVEL].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_HIGH; + port_range_hints[GVERB_TAILLEVEL].LowerBound = -70; + port_range_hints[GVERB_TAILLEVEL].UpperBound = 0; + + /* Parameters for Input */ + port_descriptors[GVERB_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[GVERB_INPUT] = + D_("Input"); + port_range_hints[GVERB_INPUT].HintDescriptor = 0; + + /* Parameters for Left output */ + port_descriptors[GVERB_OUTL] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[GVERB_OUTL] = + D_("Left output"); + port_range_hints[GVERB_OUTL].HintDescriptor = 0; + + /* Parameters for Right output */ + port_descriptors[GVERB_OUTR] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[GVERB_OUTR] = + D_("Right output"); + port_range_hints[GVERB_OUTR].HintDescriptor = 0; + + gverbDescriptor->activate = activateGverb; + gverbDescriptor->cleanup = cleanupGverb; + gverbDescriptor->connect_port = connectPortGverb; + gverbDescriptor->deactivate = NULL; + gverbDescriptor->instantiate = instantiateGverb; + gverbDescriptor->run = runGverb; + gverbDescriptor->run_adding = runAddingGverb; + gverbDescriptor->set_run_adding_gain = setRunAddingGainGverb; + } +} + +void _fini() { + if (gverbDescriptor) { + free((LADSPA_PortDescriptor *)gverbDescriptor->PortDescriptors); + free((char **)gverbDescriptor->PortNames); + free((LADSPA_PortRangeHint *)gverbDescriptor->PortRangeHints); + free(gverbDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/hard_limiter_1413.c b/plugins/LadspaEffect/swh/hard_limiter_1413.c new file mode 100644 index 000000000..ba958b442 --- /dev/null +++ b/plugins/LadspaEffect/swh/hard_limiter_1413.c @@ -0,0 +1,297 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + +#line 10 "hard_limiter_1413.xml" + +#include +#include "ladspa-util.h" + +#define HARDLIMITER_LIMIT_DB 0 +#define HARDLIMITER_WET_GAIN 1 +#define HARDLIMITER_RES_GAIN 2 +#define HARDLIMITER_INPUT 3 +#define HARDLIMITER_OUTPUT 4 + +static LADSPA_Descriptor *hardLimiterDescriptor = NULL; + +typedef struct { + LADSPA_Data *limit_db; + LADSPA_Data *wet_gain; + LADSPA_Data *res_gain; + LADSPA_Data *input; + LADSPA_Data *output; + LADSPA_Data run_adding_gain; +} HardLimiter; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return hardLimiterDescriptor; + default: + return NULL; + } +} + +static void cleanupHardLimiter(LADSPA_Handle instance) { + free(instance); +} + +static void connectPortHardLimiter( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + HardLimiter *plugin; + + plugin = (HardLimiter *)instance; + switch (port) { + case HARDLIMITER_LIMIT_DB: + plugin->limit_db = data; + break; + case HARDLIMITER_WET_GAIN: + plugin->wet_gain = data; + break; + case HARDLIMITER_RES_GAIN: + plugin->res_gain = data; + break; + case HARDLIMITER_INPUT: + plugin->input = data; + break; + case HARDLIMITER_OUTPUT: + plugin->output = data; + break; + } +} + +static LADSPA_Handle instantiateHardLimiter( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + HardLimiter *plugin_data = (HardLimiter *)malloc(sizeof(HardLimiter)); + plugin_data->run_adding_gain = 1.0f; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runHardLimiter(LADSPA_Handle instance, unsigned long sample_count) { + HardLimiter *plugin_data = (HardLimiter *)instance; + + /* dB limit (float value) */ + const LADSPA_Data limit_db = *(plugin_data->limit_db); + + /* Wet level (float value) */ + const LADSPA_Data wet_gain = *(plugin_data->wet_gain); + + /* Residue level (float value) */ + const LADSPA_Data res_gain = *(plugin_data->res_gain); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + +#line 21 "hard_limiter_1413.xml" + unsigned long i; + for (i = 0; i < sample_count; i++) + { + float limit_g = pow(10, limit_db / 20); + float sign = input[i] < 0.0 ? -1.0 : 1.0; + float data = input[i] * sign; + float residue = data > limit_g ? data - limit_g : 0.0; + data -= residue; + buffer_write(output[i], + sign * (wet_gain * data + res_gain * residue)); + } +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainHardLimiter(LADSPA_Handle instance, LADSPA_Data gain) { + ((HardLimiter *)instance)->run_adding_gain = gain; +} + +static void runAddingHardLimiter(LADSPA_Handle instance, unsigned long sample_count) { + HardLimiter *plugin_data = (HardLimiter *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* dB limit (float value) */ + const LADSPA_Data limit_db = *(plugin_data->limit_db); + + /* Wet level (float value) */ + const LADSPA_Data wet_gain = *(plugin_data->wet_gain); + + /* Residue level (float value) */ + const LADSPA_Data res_gain = *(plugin_data->res_gain); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + +#line 21 "hard_limiter_1413.xml" + unsigned long i; + for (i = 0; i < sample_count; i++) + { + float limit_g = pow(10, limit_db / 20); + float sign = input[i] < 0.0 ? -1.0 : 1.0; + float data = input[i] * sign; + float residue = data > limit_g ? data - limit_g : 0.0; + data -= residue; + buffer_write(output[i], + sign * (wet_gain * data + res_gain * residue)); + } +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + hardLimiterDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (hardLimiterDescriptor) { + hardLimiterDescriptor->UniqueID = 1413; + hardLimiterDescriptor->Label = "hardLimiter"; + hardLimiterDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + hardLimiterDescriptor->Name = + D_("Hard Limiter"); + hardLimiterDescriptor->Maker = + "Marcus Andersson"; + hardLimiterDescriptor->Copyright = + "GPL"; + hardLimiterDescriptor->PortCount = 5; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(5, + sizeof(LADSPA_PortDescriptor)); + hardLimiterDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(5, + sizeof(LADSPA_PortRangeHint)); + hardLimiterDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(5, sizeof(char*)); + hardLimiterDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for dB limit */ + port_descriptors[HARDLIMITER_LIMIT_DB] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[HARDLIMITER_LIMIT_DB] = + D_("dB limit"); + port_range_hints[HARDLIMITER_LIMIT_DB].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[HARDLIMITER_LIMIT_DB].LowerBound = -50.0; + port_range_hints[HARDLIMITER_LIMIT_DB].UpperBound = 0.0; + + /* Parameters for Wet level */ + port_descriptors[HARDLIMITER_WET_GAIN] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[HARDLIMITER_WET_GAIN] = + D_("Wet level"); + port_range_hints[HARDLIMITER_WET_GAIN].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1; + port_range_hints[HARDLIMITER_WET_GAIN].LowerBound = 0.0; + port_range_hints[HARDLIMITER_WET_GAIN].UpperBound = 1.0; + + /* Parameters for Residue level */ + port_descriptors[HARDLIMITER_RES_GAIN] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[HARDLIMITER_RES_GAIN] = + D_("Residue level"); + port_range_hints[HARDLIMITER_RES_GAIN].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[HARDLIMITER_RES_GAIN].LowerBound = 0.0; + port_range_hints[HARDLIMITER_RES_GAIN].UpperBound = 1.0; + + /* Parameters for Input */ + port_descriptors[HARDLIMITER_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[HARDLIMITER_INPUT] = + D_("Input"); + port_range_hints[HARDLIMITER_INPUT].HintDescriptor = 0; + + /* Parameters for Output */ + port_descriptors[HARDLIMITER_OUTPUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[HARDLIMITER_OUTPUT] = + D_("Output"); + port_range_hints[HARDLIMITER_OUTPUT].HintDescriptor = 0; + + hardLimiterDescriptor->activate = NULL; + hardLimiterDescriptor->cleanup = cleanupHardLimiter; + hardLimiterDescriptor->connect_port = connectPortHardLimiter; + hardLimiterDescriptor->deactivate = NULL; + hardLimiterDescriptor->instantiate = instantiateHardLimiter; + hardLimiterDescriptor->run = runHardLimiter; + hardLimiterDescriptor->run_adding = runAddingHardLimiter; + hardLimiterDescriptor->set_run_adding_gain = setRunAddingGainHardLimiter; + } +} + +void _fini() { + if (hardLimiterDescriptor) { + free((LADSPA_PortDescriptor *)hardLimiterDescriptor->PortDescriptors); + free((char **)hardLimiterDescriptor->PortNames); + free((LADSPA_PortRangeHint *)hardLimiterDescriptor->PortRangeHints); + free(hardLimiterDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/harmonic_gen_1220.c b/plugins/LadspaEffect/swh/harmonic_gen_1220.c new file mode 100644 index 000000000..9509a5b55 --- /dev/null +++ b/plugins/LadspaEffect/swh/harmonic_gen_1220.c @@ -0,0 +1,553 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + +#line 10 "harmonic_gen_1220.xml" + +#define HARMONICS 11 + +/* Calculate Chebychev coefficents from partial magnitudes, adapted from + * example in Num. Rec. */ +void chebpc(float c[], float d[]) +{ + int k, j; + float sv, dd[HARMONICS]; + + for (j = 0; j < HARMONICS; j++) { + d[j] = dd[j] = 0.0; + } + + d[0] = c[HARMONICS - 1]; + + for (j = HARMONICS - 2; j >= 1; j--) { + for (k = HARMONICS - j; k >= 1; k--) { + sv = d[k]; + d[k] = 2.0 * d[k - 1] - dd[k]; + dd[k] = sv; + } + sv = d[0]; + d[0] = -dd[0] + c[j]; + dd[0] = sv; + } + + for (j = HARMONICS - 1; j >= 1; j--) { + d[j] = d[j - 1] - dd[j]; + } + d[0] = -dd[0] + 0.5 * c[0]; +} + +#define HARMONICGEN_MAG_1 0 +#define HARMONICGEN_MAG_2 1 +#define HARMONICGEN_MAG_3 2 +#define HARMONICGEN_MAG_4 3 +#define HARMONICGEN_MAG_5 4 +#define HARMONICGEN_MAG_6 5 +#define HARMONICGEN_MAG_7 6 +#define HARMONICGEN_MAG_8 7 +#define HARMONICGEN_MAG_9 8 +#define HARMONICGEN_MAG_10 9 +#define HARMONICGEN_INPUT 10 +#define HARMONICGEN_OUTPUT 11 + +static LADSPA_Descriptor *harmonicGenDescriptor = NULL; + +typedef struct { + LADSPA_Data *mag_1; + LADSPA_Data *mag_2; + LADSPA_Data *mag_3; + LADSPA_Data *mag_4; + LADSPA_Data *mag_5; + LADSPA_Data *mag_6; + LADSPA_Data *mag_7; + LADSPA_Data *mag_8; + LADSPA_Data *mag_9; + LADSPA_Data *mag_10; + LADSPA_Data *input; + LADSPA_Data *output; + float itm1; + float otm1; + LADSPA_Data run_adding_gain; +} HarmonicGen; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return harmonicGenDescriptor; + default: + return NULL; + } +} + +static void activateHarmonicGen(LADSPA_Handle instance) { + HarmonicGen *plugin_data = (HarmonicGen *)instance; + float itm1 = plugin_data->itm1; + float otm1 = plugin_data->otm1; +#line 56 "harmonic_gen_1220.xml" + itm1 = 0.0f; + otm1 = 0.0f; + plugin_data->itm1 = itm1; + plugin_data->otm1 = otm1; + +} + +static void cleanupHarmonicGen(LADSPA_Handle instance) { + free(instance); +} + +static void connectPortHarmonicGen( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + HarmonicGen *plugin; + + plugin = (HarmonicGen *)instance; + switch (port) { + case HARMONICGEN_MAG_1: + plugin->mag_1 = data; + break; + case HARMONICGEN_MAG_2: + plugin->mag_2 = data; + break; + case HARMONICGEN_MAG_3: + plugin->mag_3 = data; + break; + case HARMONICGEN_MAG_4: + plugin->mag_4 = data; + break; + case HARMONICGEN_MAG_5: + plugin->mag_5 = data; + break; + case HARMONICGEN_MAG_6: + plugin->mag_6 = data; + break; + case HARMONICGEN_MAG_7: + plugin->mag_7 = data; + break; + case HARMONICGEN_MAG_8: + plugin->mag_8 = data; + break; + case HARMONICGEN_MAG_9: + plugin->mag_9 = data; + break; + case HARMONICGEN_MAG_10: + plugin->mag_10 = data; + break; + case HARMONICGEN_INPUT: + plugin->input = data; + break; + case HARMONICGEN_OUTPUT: + plugin->output = data; + break; + } +} + +static LADSPA_Handle instantiateHarmonicGen( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + HarmonicGen *plugin_data = (HarmonicGen *)malloc(sizeof(HarmonicGen)); + plugin_data->run_adding_gain = 1.0f; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runHarmonicGen(LADSPA_Handle instance, unsigned long sample_count) { + HarmonicGen *plugin_data = (HarmonicGen *)instance; + + /* Fundamental magnitude (float value) */ + const LADSPA_Data mag_1 = *(plugin_data->mag_1); + + /* 2nd harmonic magnitude (float value) */ + const LADSPA_Data mag_2 = *(plugin_data->mag_2); + + /* 3rd harmonic magnitude (float value) */ + const LADSPA_Data mag_3 = *(plugin_data->mag_3); + + /* 4th harmonic magnitude (float value) */ + const LADSPA_Data mag_4 = *(plugin_data->mag_4); + + /* 5th harmonic magnitude (float value) */ + const LADSPA_Data mag_5 = *(plugin_data->mag_5); + + /* 6th harmonic magnitude (float value) */ + const LADSPA_Data mag_6 = *(plugin_data->mag_6); + + /* 7th harmonic magnitude (float value) */ + const LADSPA_Data mag_7 = *(plugin_data->mag_7); + + /* 8th harmonic magnitude (float value) */ + const LADSPA_Data mag_8 = *(plugin_data->mag_8); + + /* 9th harmonic magnitude (float value) */ + const LADSPA_Data mag_9 = *(plugin_data->mag_9); + + /* 10th harmonic magnitude (float value) */ + const LADSPA_Data mag_10 = *(plugin_data->mag_10); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + float itm1 = plugin_data->itm1; + float otm1 = plugin_data->otm1; + +#line 61 "harmonic_gen_1220.xml" + unsigned long pos, i; + float mag_fix; + float mag[HARMONICS] = {0.0f, mag_1, mag_2, mag_3, mag_4, mag_5, mag_6, + mag_7, mag_8, mag_9, mag_10}; + float p[HARMONICS]; + + // Normalise magnitudes + mag_fix = (fabs(mag_1) + fabs(mag_2) + fabs(mag_3) + fabs(mag_4) + + fabs(mag_5) + fabs(mag_6) + fabs(mag_7) + fabs(mag_8) + + fabs(mag_9) + fabs(mag_10)); + if (mag_fix < 1.0f) { + mag_fix = 1.0f; + } else { + mag_fix = 1.0f / mag_fix; + } + for (i=0; iitm1 = itm1; + plugin_data->otm1 = otm1; +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainHarmonicGen(LADSPA_Handle instance, LADSPA_Data gain) { + ((HarmonicGen *)instance)->run_adding_gain = gain; +} + +static void runAddingHarmonicGen(LADSPA_Handle instance, unsigned long sample_count) { + HarmonicGen *plugin_data = (HarmonicGen *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Fundamental magnitude (float value) */ + const LADSPA_Data mag_1 = *(plugin_data->mag_1); + + /* 2nd harmonic magnitude (float value) */ + const LADSPA_Data mag_2 = *(plugin_data->mag_2); + + /* 3rd harmonic magnitude (float value) */ + const LADSPA_Data mag_3 = *(plugin_data->mag_3); + + /* 4th harmonic magnitude (float value) */ + const LADSPA_Data mag_4 = *(plugin_data->mag_4); + + /* 5th harmonic magnitude (float value) */ + const LADSPA_Data mag_5 = *(plugin_data->mag_5); + + /* 6th harmonic magnitude (float value) */ + const LADSPA_Data mag_6 = *(plugin_data->mag_6); + + /* 7th harmonic magnitude (float value) */ + const LADSPA_Data mag_7 = *(plugin_data->mag_7); + + /* 8th harmonic magnitude (float value) */ + const LADSPA_Data mag_8 = *(plugin_data->mag_8); + + /* 9th harmonic magnitude (float value) */ + const LADSPA_Data mag_9 = *(plugin_data->mag_9); + + /* 10th harmonic magnitude (float value) */ + const LADSPA_Data mag_10 = *(plugin_data->mag_10); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + float itm1 = plugin_data->itm1; + float otm1 = plugin_data->otm1; + +#line 61 "harmonic_gen_1220.xml" + unsigned long pos, i; + float mag_fix; + float mag[HARMONICS] = {0.0f, mag_1, mag_2, mag_3, mag_4, mag_5, mag_6, + mag_7, mag_8, mag_9, mag_10}; + float p[HARMONICS]; + + // Normalise magnitudes + mag_fix = (fabs(mag_1) + fabs(mag_2) + fabs(mag_3) + fabs(mag_4) + + fabs(mag_5) + fabs(mag_6) + fabs(mag_7) + fabs(mag_8) + + fabs(mag_9) + fabs(mag_10)); + if (mag_fix < 1.0f) { + mag_fix = 1.0f; + } else { + mag_fix = 1.0f / mag_fix; + } + for (i=0; iitm1 = itm1; + plugin_data->otm1 = otm1; +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + harmonicGenDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (harmonicGenDescriptor) { + harmonicGenDescriptor->UniqueID = 1220; + harmonicGenDescriptor->Label = "harmonicGen"; + harmonicGenDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + harmonicGenDescriptor->Name = + D_("Harmonic generator"); + harmonicGenDescriptor->Maker = + "Steve Harris "; + harmonicGenDescriptor->Copyright = + "GPL"; + harmonicGenDescriptor->PortCount = 12; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(12, + sizeof(LADSPA_PortDescriptor)); + harmonicGenDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(12, + sizeof(LADSPA_PortRangeHint)); + harmonicGenDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(12, sizeof(char*)); + harmonicGenDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Fundamental magnitude */ + port_descriptors[HARMONICGEN_MAG_1] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[HARMONICGEN_MAG_1] = + D_("Fundamental magnitude"); + port_range_hints[HARMONICGEN_MAG_1].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1; + port_range_hints[HARMONICGEN_MAG_1].LowerBound = -1; + port_range_hints[HARMONICGEN_MAG_1].UpperBound = +1; + + /* Parameters for 2nd harmonic magnitude */ + port_descriptors[HARMONICGEN_MAG_2] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[HARMONICGEN_MAG_2] = + D_("2nd harmonic magnitude"); + port_range_hints[HARMONICGEN_MAG_2].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[HARMONICGEN_MAG_2].LowerBound = -1; + port_range_hints[HARMONICGEN_MAG_2].UpperBound = +1; + + /* Parameters for 3rd harmonic magnitude */ + port_descriptors[HARMONICGEN_MAG_3] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[HARMONICGEN_MAG_3] = + D_("3rd harmonic magnitude"); + port_range_hints[HARMONICGEN_MAG_3].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[HARMONICGEN_MAG_3].LowerBound = -1; + port_range_hints[HARMONICGEN_MAG_3].UpperBound = +1; + + /* Parameters for 4th harmonic magnitude */ + port_descriptors[HARMONICGEN_MAG_4] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[HARMONICGEN_MAG_4] = + D_("4th harmonic magnitude"); + port_range_hints[HARMONICGEN_MAG_4].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[HARMONICGEN_MAG_4].LowerBound = -1; + port_range_hints[HARMONICGEN_MAG_4].UpperBound = +1; + + /* Parameters for 5th harmonic magnitude */ + port_descriptors[HARMONICGEN_MAG_5] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[HARMONICGEN_MAG_5] = + D_("5th harmonic magnitude"); + port_range_hints[HARMONICGEN_MAG_5].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[HARMONICGEN_MAG_5].LowerBound = -1; + port_range_hints[HARMONICGEN_MAG_5].UpperBound = +1; + + /* Parameters for 6th harmonic magnitude */ + port_descriptors[HARMONICGEN_MAG_6] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[HARMONICGEN_MAG_6] = + D_("6th harmonic magnitude"); + port_range_hints[HARMONICGEN_MAG_6].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[HARMONICGEN_MAG_6].LowerBound = -1; + port_range_hints[HARMONICGEN_MAG_6].UpperBound = +1; + + /* Parameters for 7th harmonic magnitude */ + port_descriptors[HARMONICGEN_MAG_7] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[HARMONICGEN_MAG_7] = + D_("7th harmonic magnitude"); + port_range_hints[HARMONICGEN_MAG_7].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[HARMONICGEN_MAG_7].LowerBound = -1; + port_range_hints[HARMONICGEN_MAG_7].UpperBound = +1; + + /* Parameters for 8th harmonic magnitude */ + port_descriptors[HARMONICGEN_MAG_8] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[HARMONICGEN_MAG_8] = + D_("8th harmonic magnitude"); + port_range_hints[HARMONICGEN_MAG_8].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[HARMONICGEN_MAG_8].LowerBound = -1; + port_range_hints[HARMONICGEN_MAG_8].UpperBound = +1; + + /* Parameters for 9th harmonic magnitude */ + port_descriptors[HARMONICGEN_MAG_9] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[HARMONICGEN_MAG_9] = + D_("9th harmonic magnitude"); + port_range_hints[HARMONICGEN_MAG_9].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[HARMONICGEN_MAG_9].LowerBound = -1; + port_range_hints[HARMONICGEN_MAG_9].UpperBound = +1; + + /* Parameters for 10th harmonic magnitude */ + port_descriptors[HARMONICGEN_MAG_10] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[HARMONICGEN_MAG_10] = + D_("10th harmonic magnitude"); + port_range_hints[HARMONICGEN_MAG_10].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[HARMONICGEN_MAG_10].LowerBound = -1; + port_range_hints[HARMONICGEN_MAG_10].UpperBound = +1; + + /* Parameters for Input */ + port_descriptors[HARMONICGEN_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[HARMONICGEN_INPUT] = + D_("Input"); + port_range_hints[HARMONICGEN_INPUT].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; + port_range_hints[HARMONICGEN_INPUT].LowerBound = -1; + port_range_hints[HARMONICGEN_INPUT].UpperBound = +1; + + /* Parameters for Output */ + port_descriptors[HARMONICGEN_OUTPUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[HARMONICGEN_OUTPUT] = + D_("Output"); + port_range_hints[HARMONICGEN_OUTPUT].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; + port_range_hints[HARMONICGEN_OUTPUT].LowerBound = -1; + port_range_hints[HARMONICGEN_OUTPUT].UpperBound = +1; + + harmonicGenDescriptor->activate = activateHarmonicGen; + harmonicGenDescriptor->cleanup = cleanupHarmonicGen; + harmonicGenDescriptor->connect_port = connectPortHarmonicGen; + harmonicGenDescriptor->deactivate = NULL; + harmonicGenDescriptor->instantiate = instantiateHarmonicGen; + harmonicGenDescriptor->run = runHarmonicGen; + harmonicGenDescriptor->run_adding = runAddingHarmonicGen; + harmonicGenDescriptor->set_run_adding_gain = setRunAddingGainHarmonicGen; + } +} + +void _fini() { + if (harmonicGenDescriptor) { + free((LADSPA_PortDescriptor *)harmonicGenDescriptor->PortDescriptors); + free((char **)harmonicGenDescriptor->PortNames); + free((LADSPA_PortRangeHint *)harmonicGenDescriptor->PortRangeHints); + free(harmonicGenDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/hermes_filter_1200.c b/plugins/LadspaEffect/swh/hermes_filter_1200.c new file mode 100644 index 000000000..2d3bb5197 --- /dev/null +++ b/plugins/LadspaEffect/swh/hermes_filter_1200.c @@ -0,0 +1,2009 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + +#line 9 "hermes_filter_1200.xml" + +#include "ladspa-util.h" +#include "util/blo.h" + +// Return the value of the LDO's for given coeffs +#define LFO(a,b) (a*lfo1 + b*lfo2) + +// Ampmod / ringmod two signals together with given depth +#define RINGMOD(c,m,d) (c * ((d * 0.5f) * m + (2.0f - d))) + +// Stuff needed for the soft clipping code +#define MAX_AMP 1.0f +#define CLIP 0.8f +#define CLIP_A ((MAX_AMP - CLIP) * (MAX_AMP - CLIP)) +#define CLIP_B (MAX_AMP - 2.0f * CLIP) + +// Constants to match filter types +#define F_LP 1 +#define F_HP 2 +#define F_BP 3 +#define F_BR 4 +#define F_AP 5 + +// Number of filter oversamples +#define F_R 3 + +// Magic number +#define NOISE 23 + +LADSPA_Data *sin_tbl, *tri_tbl, *saw_tbl, *squ_tbl; +int tbl_ref_count = 0; +long sample_rate; + +/* Structure to hold parameters for SV filter */ + +typedef struct { + float f; // 2.0*sin(PI*fs/(fc*r)); + float q; // 2.0*cos(pow(q, 0.1)*PI*0.5); + float qnrm; // sqrt(m/2.0f+0.01f); + float h; // high pass output + float b; // band pass output + float l; // low pass output + float p; // peaking output (allpass with resonance) + float n; // notch output + float *op; // pointer to output value +} sv_filter; + +inline float soft_clip(float sc_in) { + if ((sc_in < CLIP) && (sc_in > -CLIP)) { + return sc_in; + } else if (sc_in > 0.0f) { + return MAX_AMP - (CLIP_A / (CLIP_B + sc_in)); + } else { + return -(MAX_AMP - (CLIP_A / (CLIP_B - sc_in))); + } +} + +/* Store data in SVF struct, takes the sampling frequency, cutoff frequency + and Q, and fills in the structure passed */ + +inline void setup_svf(sv_filter *sv, float fs, float fc, float q, int t) { + sv->f = 2.0f * sinf(M_PI * fc / (float)(fs * F_R)); + sv->q = 2.0f * cosf(powf(q, 0.1f) * M_PI * 0.5f); + sv->qnrm = sqrtf(sv->q*0.5f + 0.01f); + + switch(t) { + case F_LP: + sv->op = &(sv->l); + break; + case F_HP: + sv->op = &(sv->h); + break; + case F_BP: + sv->op = &(sv->b); + break; + case F_BR: + sv->op = &(sv->n); + break; + default: + sv->op = &(sv->p); + } +} + +/* Change the frequency of a running SVF */ + +inline void setup_f_svf(sv_filter *sv, const float fs, const float fc) { + sv->f = 2.0f * sin(M_PI * fc / ((float)(fs * F_R))); +} + +/* Run one sample through the SV filter. Filter is by andy@vellocet */ + +inline float run_svf(sv_filter *sv, float in) { + float out; + int i; + + in = sv->qnrm * in ; + for (i=0; i < F_R; i++) { + // only needed for pentium chips + in = flush_to_zero(in); + sv->l = flush_to_zero(sv->l); + // very slight waveshape for extra stability + sv->b = sv->b - sv->b * sv->b * sv->b * 0.001f; + + // regular state variable code here + // the notch and peaking outputs are optional + sv->h = in - sv->l - sv->q * sv->b; + sv->b = sv->b + sv->f * sv->h; + sv->l = sv->l + sv->f * sv->b; + sv->n = sv->l + sv->h; + sv->p = sv->l - sv->h; + + out = *(sv->op); + in = out; + } + + return out; +} + +inline int wave_tbl(const float wave) { + switch (f_round(wave)) { + case 0: + return BLO_SINE; + break; + + case 1: + return BLO_TRI; + break; + + case 2: + return BLO_SAW; + break; + + case 3: + return BLO_SQUARE; + break; + } + return NOISE; +} + +#define HERMESFILTER_LFO1_FREQ 0 +#define HERMESFILTER_LFO1_WAVE 1 +#define HERMESFILTER_LFO2_FREQ 2 +#define HERMESFILTER_LFO2_WAVE 3 +#define HERMESFILTER_OSC1_FREQ 4 +#define HERMESFILTER_OSC1_WAVE 5 +#define HERMESFILTER_OSC2_FREQ 6 +#define HERMESFILTER_OSC2_WAVE 7 +#define HERMESFILTER_RM1_DEPTH 8 +#define HERMESFILTER_RM2_DEPTH 9 +#define HERMESFILTER_RM3_DEPTH 10 +#define HERMESFILTER_OSC1_GAIN_DB 11 +#define HERMESFILTER_RM1_GAIN_DB 12 +#define HERMESFILTER_OSC2_GAIN_DB 13 +#define HERMESFILTER_RM2_GAIN_DB 14 +#define HERMESFILTER_IN_GAIN_DB 15 +#define HERMESFILTER_RM3_GAIN_DB 16 +#define HERMESFILTER_XOVER_LFREQP 17 +#define HERMESFILTER_XOVER_UFREQP 18 +#define HERMESFILTER_DRIVE1 19 +#define HERMESFILTER_DRIVE2 20 +#define HERMESFILTER_DRIVE3 21 +#define HERMESFILTER_FILT1_TYPE 22 +#define HERMESFILTER_FILT1_FREQ 23 +#define HERMESFILTER_FILT1_Q 24 +#define HERMESFILTER_FILT1_RES 25 +#define HERMESFILTER_FILT1_LFO1 26 +#define HERMESFILTER_FILT1_LFO2 27 +#define HERMESFILTER_FILT2_TYPE 28 +#define HERMESFILTER_FILT2_FREQ 29 +#define HERMESFILTER_FILT2_Q 30 +#define HERMESFILTER_FILT2_RES 31 +#define HERMESFILTER_FILT2_LFO1 32 +#define HERMESFILTER_FILT2_LFO2 33 +#define HERMESFILTER_FILT3_TYPE 34 +#define HERMESFILTER_FILT3_FREQ 35 +#define HERMESFILTER_FILT3_Q 36 +#define HERMESFILTER_FILT3_RES 37 +#define HERMESFILTER_FILT3_LFO1 38 +#define HERMESFILTER_FILT3_LFO2 39 +#define HERMESFILTER_DELA1_LENGTH 40 +#define HERMESFILTER_DELA1_FB 41 +#define HERMESFILTER_DELA1_WET 42 +#define HERMESFILTER_DELA2_LENGTH 43 +#define HERMESFILTER_DELA2_FB 44 +#define HERMESFILTER_DELA2_WET 45 +#define HERMESFILTER_DELA3_LENGTH 46 +#define HERMESFILTER_DELA3_FB 47 +#define HERMESFILTER_DELA3_WET 48 +#define HERMESFILTER_BAND1_GAIN_DB 49 +#define HERMESFILTER_BAND2_GAIN_DB 50 +#define HERMESFILTER_BAND3_GAIN_DB 51 +#define HERMESFILTER_INPUT 52 +#define HERMESFILTER_OUTPUT 53 + +static LADSPA_Descriptor *hermesFilterDescriptor = NULL; + +typedef struct { + LADSPA_Data *lfo1_freq; + LADSPA_Data *lfo1_wave; + LADSPA_Data *lfo2_freq; + LADSPA_Data *lfo2_wave; + LADSPA_Data *osc1_freq; + LADSPA_Data *osc1_wave; + LADSPA_Data *osc2_freq; + LADSPA_Data *osc2_wave; + LADSPA_Data *rm1_depth; + LADSPA_Data *rm2_depth; + LADSPA_Data *rm3_depth; + LADSPA_Data *osc1_gain_db; + LADSPA_Data *rm1_gain_db; + LADSPA_Data *osc2_gain_db; + LADSPA_Data *rm2_gain_db; + LADSPA_Data *in_gain_db; + LADSPA_Data *rm3_gain_db; + LADSPA_Data *xover_lfreqp; + LADSPA_Data *xover_ufreqp; + LADSPA_Data *drive1; + LADSPA_Data *drive2; + LADSPA_Data *drive3; + LADSPA_Data *filt1_type; + LADSPA_Data *filt1_freq; + LADSPA_Data *filt1_q; + LADSPA_Data *filt1_res; + LADSPA_Data *filt1_lfo1; + LADSPA_Data *filt1_lfo2; + LADSPA_Data *filt2_type; + LADSPA_Data *filt2_freq; + LADSPA_Data *filt2_q; + LADSPA_Data *filt2_res; + LADSPA_Data *filt2_lfo1; + LADSPA_Data *filt2_lfo2; + LADSPA_Data *filt3_type; + LADSPA_Data *filt3_freq; + LADSPA_Data *filt3_q; + LADSPA_Data *filt3_res; + LADSPA_Data *filt3_lfo1; + LADSPA_Data *filt3_lfo2; + LADSPA_Data *dela1_length; + LADSPA_Data *dela1_fb; + LADSPA_Data *dela1_wet; + LADSPA_Data *dela2_length; + LADSPA_Data *dela2_fb; + LADSPA_Data *dela2_wet; + LADSPA_Data *dela3_length; + LADSPA_Data *dela3_fb; + LADSPA_Data *dela3_wet; + LADSPA_Data *band1_gain_db; + LADSPA_Data *band2_gain_db; + LADSPA_Data *band3_gain_db; + LADSPA_Data *input; + LADSPA_Data *output; + long count; + float ** dela_data; + int * dela_pos; + sv_filter ** filt_data; + float lfo1; + blo_h_osc * lfo1_d; + float lfo1_phase; + float lfo2; + blo_h_osc * lfo2_d; + float lfo2_phase; + blo_h_osc * osc1_d; + blo_h_osc * osc2_d; + blo_h_tables *tables; + sv_filter * xover_b1_data; + sv_filter * xover_b2_data; + LADSPA_Data run_adding_gain; +} HermesFilter; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return hermesFilterDescriptor; + default: + return NULL; + } +} + +static void activateHermesFilter(LADSPA_Handle instance) { + HermesFilter *plugin_data = (HermesFilter *)instance; + long count = plugin_data->count; + float **dela_data = plugin_data->dela_data; + int *dela_pos = plugin_data->dela_pos; + sv_filter **filt_data = plugin_data->filt_data; + float lfo1 = plugin_data->lfo1; + blo_h_osc *lfo1_d = plugin_data->lfo1_d; + float lfo1_phase = plugin_data->lfo1_phase; + float lfo2 = plugin_data->lfo2; + blo_h_osc *lfo2_d = plugin_data->lfo2_d; + float lfo2_phase = plugin_data->lfo2_phase; + blo_h_osc *osc1_d = plugin_data->osc1_d; + blo_h_osc *osc2_d = plugin_data->osc2_d; + blo_h_tables *tables = plugin_data->tables; + sv_filter *xover_b1_data = plugin_data->xover_b1_data; + sv_filter *xover_b2_data = plugin_data->xover_b2_data; +#line 186 "hermes_filter_1200.xml" + setup_svf(filt_data[0], 0, 0, 0, 0); + setup_svf(filt_data[1], 0, 0, 0, 0); + setup_svf(filt_data[2], 0, 0, 0, 0); + setup_svf(xover_b1_data, sample_rate, 1000.0, 0.0, F_HP); + setup_svf(xover_b2_data, sample_rate, 100.0, 0.0, F_LP); + memset(dela_data[0], 0, sample_rate * 2 * sizeof(float)); + memset(dela_data[1], 0, sample_rate * 2 * sizeof(float)); + memset(dela_data[2], 0, sample_rate * 2 * sizeof(float)); + dela_pos[0] = 0; + dela_pos[1] = 0; + dela_pos[2] = 0; + /* + osc1_d->ph.all = 0; + osc2_d->ph.all = 0; + lfo1_d->ph.all = 0; + lfo2_d->ph.all = 0; + */ + count = 0; + lfo1 = 0.0f; + lfo2 = 0.0f; + lfo1_phase = 0.0f; + lfo2_phase = 0.0f; + plugin_data->count = count; + plugin_data->dela_data = dela_data; + plugin_data->dela_pos = dela_pos; + plugin_data->filt_data = filt_data; + plugin_data->lfo1 = lfo1; + plugin_data->lfo1_d = lfo1_d; + plugin_data->lfo1_phase = lfo1_phase; + plugin_data->lfo2 = lfo2; + plugin_data->lfo2_d = lfo2_d; + plugin_data->lfo2_phase = lfo2_phase; + plugin_data->osc1_d = osc1_d; + plugin_data->osc2_d = osc2_d; + plugin_data->tables = tables; + plugin_data->xover_b1_data = xover_b1_data; + plugin_data->xover_b2_data = xover_b2_data; + +} + +static void cleanupHermesFilter(LADSPA_Handle instance) { +#line 211 "hermes_filter_1200.xml" + HermesFilter *plugin_data = (HermesFilter *)instance; + free(plugin_data->filt_data[0]); + free(plugin_data->filt_data[1]); + free(plugin_data->filt_data[2]); + free(plugin_data->dela_data[0]); + free(plugin_data->dela_data[1]); + free(plugin_data->dela_data[2]); + free(plugin_data->filt_data); + free(plugin_data->dela_data); + free(plugin_data->dela_pos); + free(plugin_data->xover_b1_data); + free(plugin_data->xover_b2_data); + + blo_h_free(plugin_data->osc1_d); + blo_h_free(plugin_data->osc2_d); + blo_h_free(plugin_data->lfo1_d); + blo_h_free(plugin_data->lfo2_d); + blo_h_tables_free(plugin_data->tables); + free(instance); +} + +static void connectPortHermesFilter( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + HermesFilter *plugin; + + plugin = (HermesFilter *)instance; + switch (port) { + case HERMESFILTER_LFO1_FREQ: + plugin->lfo1_freq = data; + break; + case HERMESFILTER_LFO1_WAVE: + plugin->lfo1_wave = data; + break; + case HERMESFILTER_LFO2_FREQ: + plugin->lfo2_freq = data; + break; + case HERMESFILTER_LFO2_WAVE: + plugin->lfo2_wave = data; + break; + case HERMESFILTER_OSC1_FREQ: + plugin->osc1_freq = data; + break; + case HERMESFILTER_OSC1_WAVE: + plugin->osc1_wave = data; + break; + case HERMESFILTER_OSC2_FREQ: + plugin->osc2_freq = data; + break; + case HERMESFILTER_OSC2_WAVE: + plugin->osc2_wave = data; + break; + case HERMESFILTER_RM1_DEPTH: + plugin->rm1_depth = data; + break; + case HERMESFILTER_RM2_DEPTH: + plugin->rm2_depth = data; + break; + case HERMESFILTER_RM3_DEPTH: + plugin->rm3_depth = data; + break; + case HERMESFILTER_OSC1_GAIN_DB: + plugin->osc1_gain_db = data; + break; + case HERMESFILTER_RM1_GAIN_DB: + plugin->rm1_gain_db = data; + break; + case HERMESFILTER_OSC2_GAIN_DB: + plugin->osc2_gain_db = data; + break; + case HERMESFILTER_RM2_GAIN_DB: + plugin->rm2_gain_db = data; + break; + case HERMESFILTER_IN_GAIN_DB: + plugin->in_gain_db = data; + break; + case HERMESFILTER_RM3_GAIN_DB: + plugin->rm3_gain_db = data; + break; + case HERMESFILTER_XOVER_LFREQP: + plugin->xover_lfreqp = data; + break; + case HERMESFILTER_XOVER_UFREQP: + plugin->xover_ufreqp = data; + break; + case HERMESFILTER_DRIVE1: + plugin->drive1 = data; + break; + case HERMESFILTER_DRIVE2: + plugin->drive2 = data; + break; + case HERMESFILTER_DRIVE3: + plugin->drive3 = data; + break; + case HERMESFILTER_FILT1_TYPE: + plugin->filt1_type = data; + break; + case HERMESFILTER_FILT1_FREQ: + plugin->filt1_freq = data; + break; + case HERMESFILTER_FILT1_Q: + plugin->filt1_q = data; + break; + case HERMESFILTER_FILT1_RES: + plugin->filt1_res = data; + break; + case HERMESFILTER_FILT1_LFO1: + plugin->filt1_lfo1 = data; + break; + case HERMESFILTER_FILT1_LFO2: + plugin->filt1_lfo2 = data; + break; + case HERMESFILTER_FILT2_TYPE: + plugin->filt2_type = data; + break; + case HERMESFILTER_FILT2_FREQ: + plugin->filt2_freq = data; + break; + case HERMESFILTER_FILT2_Q: + plugin->filt2_q = data; + break; + case HERMESFILTER_FILT2_RES: + plugin->filt2_res = data; + break; + case HERMESFILTER_FILT2_LFO1: + plugin->filt2_lfo1 = data; + break; + case HERMESFILTER_FILT2_LFO2: + plugin->filt2_lfo2 = data; + break; + case HERMESFILTER_FILT3_TYPE: + plugin->filt3_type = data; + break; + case HERMESFILTER_FILT3_FREQ: + plugin->filt3_freq = data; + break; + case HERMESFILTER_FILT3_Q: + plugin->filt3_q = data; + break; + case HERMESFILTER_FILT3_RES: + plugin->filt3_res = data; + break; + case HERMESFILTER_FILT3_LFO1: + plugin->filt3_lfo1 = data; + break; + case HERMESFILTER_FILT3_LFO2: + plugin->filt3_lfo2 = data; + break; + case HERMESFILTER_DELA1_LENGTH: + plugin->dela1_length = data; + break; + case HERMESFILTER_DELA1_FB: + plugin->dela1_fb = data; + break; + case HERMESFILTER_DELA1_WET: + plugin->dela1_wet = data; + break; + case HERMESFILTER_DELA2_LENGTH: + plugin->dela2_length = data; + break; + case HERMESFILTER_DELA2_FB: + plugin->dela2_fb = data; + break; + case HERMESFILTER_DELA2_WET: + plugin->dela2_wet = data; + break; + case HERMESFILTER_DELA3_LENGTH: + plugin->dela3_length = data; + break; + case HERMESFILTER_DELA3_FB: + plugin->dela3_fb = data; + break; + case HERMESFILTER_DELA3_WET: + plugin->dela3_wet = data; + break; + case HERMESFILTER_BAND1_GAIN_DB: + plugin->band1_gain_db = data; + break; + case HERMESFILTER_BAND2_GAIN_DB: + plugin->band2_gain_db = data; + break; + case HERMESFILTER_BAND3_GAIN_DB: + plugin->band3_gain_db = data; + break; + case HERMESFILTER_INPUT: + plugin->input = data; + break; + case HERMESFILTER_OUTPUT: + plugin->output = data; + break; + } +} + +static LADSPA_Handle instantiateHermesFilter( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + HermesFilter *plugin_data = (HermesFilter *)malloc(sizeof(HermesFilter)); + long count; + float **dela_data = NULL; + int *dela_pos = NULL; + sv_filter **filt_data = NULL; + float lfo1; + blo_h_osc *lfo1_d = NULL; + float lfo1_phase; + float lfo2; + blo_h_osc *lfo2_d = NULL; + float lfo2_phase; + blo_h_osc *osc1_d = NULL; + blo_h_osc *osc2_d = NULL; + blo_h_tables *tables = NULL; + sv_filter *xover_b1_data = NULL; + sv_filter *xover_b2_data = NULL; + +#line 157 "hermes_filter_1200.xml" + long i; + + sample_rate = s_rate; + count = 0; + + tables = blo_h_tables_new(1024); + osc1_d = blo_h_new(tables, BLO_SINE, (float)s_rate); + osc2_d = blo_h_new(tables, BLO_SINE, (float)s_rate); + lfo1_d = blo_h_new(tables, BLO_SINE, (float)s_rate); + lfo2_d = blo_h_new(tables, BLO_SINE, (float)s_rate); + + xover_b1_data = calloc(1, sizeof(sv_filter)); + xover_b2_data = calloc(1, sizeof(sv_filter)); + + dela_data = malloc(3 * sizeof(float)); + dela_pos = malloc(3 * sizeof(int)); + filt_data = malloc(3 * sizeof(sv_filter *)); + for (i = 0; i < 3; i++) { + dela_data[i] = malloc(sample_rate * 2 * sizeof(float)); + dela_pos[i] = 0; + filt_data[i] = calloc(1, sizeof(sv_filter)); + } + lfo1 = 0.0f; + lfo2 = 0.0f; + lfo1_phase = 0.0f; + lfo2_phase = 0.0f; + + plugin_data->count = count; + plugin_data->dela_data = dela_data; + plugin_data->dela_pos = dela_pos; + plugin_data->filt_data = filt_data; + plugin_data->lfo1 = lfo1; + plugin_data->lfo1_d = lfo1_d; + plugin_data->lfo1_phase = lfo1_phase; + plugin_data->lfo2 = lfo2; + plugin_data->lfo2_d = lfo2_d; + plugin_data->lfo2_phase = lfo2_phase; + plugin_data->osc1_d = osc1_d; + plugin_data->osc2_d = osc2_d; + plugin_data->tables = tables; + plugin_data->xover_b1_data = xover_b1_data; + plugin_data->xover_b2_data = xover_b2_data; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runHermesFilter(LADSPA_Handle instance, unsigned long sample_count) { + HermesFilter *plugin_data = (HermesFilter *)instance; + + /* LFO1 freq (Hz) (float value) */ + const LADSPA_Data lfo1_freq = *(plugin_data->lfo1_freq); + + /* LFO1 wave (0 = sin, 1 = tri, 2 = saw, 3 = squ, 4 = s&h) (float value) */ + const LADSPA_Data lfo1_wave = *(plugin_data->lfo1_wave); + + /* LFO2 freq (Hz) (float value) */ + const LADSPA_Data lfo2_freq = *(plugin_data->lfo2_freq); + + /* LFO2 wave (0 = sin, 1 = tri, 2 = saw, 3 = squ, 4 = s&h) (float value) */ + const LADSPA_Data lfo2_wave = *(plugin_data->lfo2_wave); + + /* Osc1 freq (Hz) (float value) */ + const LADSPA_Data osc1_freq = *(plugin_data->osc1_freq); + + /* Osc1 wave (0 = sin, 1 = tri, 2 = saw, 3 = squ, 4 = noise) (float value) */ + const LADSPA_Data osc1_wave = *(plugin_data->osc1_wave); + + /* Osc2 freq (Hz) (float value) */ + const LADSPA_Data osc2_freq = *(plugin_data->osc2_freq); + + /* Osc2 wave (0 = sin, 1 = tri, 2 = saw, 3 = squ, 4 = noise) (float value) */ + const LADSPA_Data osc2_wave = *(plugin_data->osc2_wave); + + /* Ringmod 1 depth (0=none, 1=AM, 2=RM) (float value) */ + const LADSPA_Data rm1_depth = *(plugin_data->rm1_depth); + + /* Ringmod 2 depth (0=none, 1=AM, 2=RM) (float value) */ + const LADSPA_Data rm2_depth = *(plugin_data->rm2_depth); + + /* Ringmod 3 depth (0=none, 1=AM, 2=RM) (float value) */ + const LADSPA_Data rm3_depth = *(plugin_data->rm3_depth); + + /* Osc1 gain (dB) (float value) */ + const LADSPA_Data osc1_gain_db = *(plugin_data->osc1_gain_db); + + /* RM1 gain (dB) (float value) */ + const LADSPA_Data rm1_gain_db = *(plugin_data->rm1_gain_db); + + /* Osc2 gain (dB) (float value) */ + const LADSPA_Data osc2_gain_db = *(plugin_data->osc2_gain_db); + + /* RM2 gain (dB) (float value) */ + const LADSPA_Data rm2_gain_db = *(plugin_data->rm2_gain_db); + + /* Input gain (dB) (float value) */ + const LADSPA_Data in_gain_db = *(plugin_data->in_gain_db); + + /* RM3 gain (dB) (float value) */ + const LADSPA_Data rm3_gain_db = *(plugin_data->rm3_gain_db); + + /* Xover lower freq (float value) */ + const LADSPA_Data xover_lfreqp = *(plugin_data->xover_lfreqp); + + /* Xover upper freq (float value) */ + const LADSPA_Data xover_ufreqp = *(plugin_data->xover_ufreqp); + + /* Dist1 drive (float value) */ + const LADSPA_Data drive1 = *(plugin_data->drive1); + + /* Dist2 drive (float value) */ + const LADSPA_Data drive2 = *(plugin_data->drive2); + + /* Dist3 drive (float value) */ + const LADSPA_Data drive3 = *(plugin_data->drive3); + + /* Filt1 type (0=none, 1=LP, 2=HP, 3=BP, 4=BR, 5=AP) (float value) */ + const LADSPA_Data filt1_type = *(plugin_data->filt1_type); + + /* Filt1 freq (float value) */ + const LADSPA_Data filt1_freq = *(plugin_data->filt1_freq); + + /* Filt1 q (float value) */ + const LADSPA_Data filt1_q = *(plugin_data->filt1_q); + + /* Filt1 resonance (float value) */ + const LADSPA_Data filt1_res = *(plugin_data->filt1_res); + + /* Filt1 LFO1 level (float value) */ + const LADSPA_Data filt1_lfo1 = *(plugin_data->filt1_lfo1); + + /* Filt1 LFO2 level (float value) */ + const LADSPA_Data filt1_lfo2 = *(plugin_data->filt1_lfo2); + + /* Filt2 type (0=none, 1=LP, 2=HP, 3=BP, 4=BR, 5=AP) (float value) */ + const LADSPA_Data filt2_type = *(plugin_data->filt2_type); + + /* Filt2 freq (float value) */ + const LADSPA_Data filt2_freq = *(plugin_data->filt2_freq); + + /* Filt2 q (float value) */ + const LADSPA_Data filt2_q = *(plugin_data->filt2_q); + + /* Filt2 resonance (float value) */ + const LADSPA_Data filt2_res = *(plugin_data->filt2_res); + + /* Filt2 LFO1 level (float value) */ + const LADSPA_Data filt2_lfo1 = *(plugin_data->filt2_lfo1); + + /* Filt2 LFO2 level (float value) */ + const LADSPA_Data filt2_lfo2 = *(plugin_data->filt2_lfo2); + + /* Filt3 type (0=none, 1=LP, 2=HP, 3=BP, 4=BR, 5=AP) (float value) */ + const LADSPA_Data filt3_type = *(plugin_data->filt3_type); + + /* Filt3 freq (float value) */ + const LADSPA_Data filt3_freq = *(plugin_data->filt3_freq); + + /* Filt3 q (float value) */ + const LADSPA_Data filt3_q = *(plugin_data->filt3_q); + + /* Filt3 resonance (float value) */ + const LADSPA_Data filt3_res = *(plugin_data->filt3_res); + + /* Filt3 LFO1 level (float value) */ + const LADSPA_Data filt3_lfo1 = *(plugin_data->filt3_lfo1); + + /* Filt3 LFO2 level (float value) */ + const LADSPA_Data filt3_lfo2 = *(plugin_data->filt3_lfo2); + + /* Delay1 length (s) (float value) */ + const LADSPA_Data dela1_length = *(plugin_data->dela1_length); + + /* Delay1 feedback (float value) */ + const LADSPA_Data dela1_fb = *(plugin_data->dela1_fb); + + /* Delay1 wetness (float value) */ + const LADSPA_Data dela1_wet = *(plugin_data->dela1_wet); + + /* Delay2 length (s) (float value) */ + const LADSPA_Data dela2_length = *(plugin_data->dela2_length); + + /* Delay2 feedback (float value) */ + const LADSPA_Data dela2_fb = *(plugin_data->dela2_fb); + + /* Delay2 wetness (float value) */ + const LADSPA_Data dela2_wet = *(plugin_data->dela2_wet); + + /* Delay3 length (s) (float value) */ + const LADSPA_Data dela3_length = *(plugin_data->dela3_length); + + /* Delay3 feedback (float value) */ + const LADSPA_Data dela3_fb = *(plugin_data->dela3_fb); + + /* Delay3 wetness (float value) */ + const LADSPA_Data dela3_wet = *(plugin_data->dela3_wet); + + /* Band 1 gain (dB) (float value) */ + const LADSPA_Data band1_gain_db = *(plugin_data->band1_gain_db); + + /* Band 2 gain (dB) (float value) */ + const LADSPA_Data band2_gain_db = *(plugin_data->band2_gain_db); + + /* Band 3 gain (dB) (float value) */ + const LADSPA_Data band3_gain_db = *(plugin_data->band3_gain_db); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + long count = plugin_data->count; + float ** dela_data = plugin_data->dela_data; + int * dela_pos = plugin_data->dela_pos; + sv_filter ** filt_data = plugin_data->filt_data; + float lfo1 = plugin_data->lfo1; + blo_h_osc * lfo1_d = plugin_data->lfo1_d; + float lfo1_phase = plugin_data->lfo1_phase; + float lfo2 = plugin_data->lfo2; + blo_h_osc * lfo2_d = plugin_data->lfo2_d; + float lfo2_phase = plugin_data->lfo2_phase; + blo_h_osc * osc1_d = plugin_data->osc1_d; + blo_h_osc * osc2_d = plugin_data->osc2_d; + blo_h_tables * tables = plugin_data->tables; + sv_filter * xover_b1_data = plugin_data->xover_b1_data; + sv_filter * xover_b2_data = plugin_data->xover_b2_data; + +#line 231 "hermes_filter_1200.xml" + unsigned long pos; + int i; + + // dB gains converted to coefficients + float osc1_gain, rm1_gain, osc2_gain, rm2_gain, in_gain, rm3_gain; + + // Output values for the oscilators etc. + float osc1, osc2, in, rm1, rm2, rm3, mixer1; + + // Outputs from xover + float xover[3], band_gain[3]; + + // Output values for disortions + float dist[3]; + + // Stuff for distortions + float drive[3]; + + // Stuff for filters + float filt[3]; + float filt_freq[3]; + float filt_res[3]; + float filt_lfo1[3]; + float filt_lfo2[3]; + int filt_t[3]; + + // Values for delays + float dela[3], dela_wet[3], dela_fb[3]; + int dela_offset[3]; + + // Output of mixer2 + float mixer2; + + // X overs + const float xover_ufreq = f_clamp(xover_ufreqp, 200.0f, (float)(sample_rate / 6)); + const float xover_lfreq = f_clamp(xover_lfreqp, 0.0f, xover_ufreq); + setup_f_svf(xover_b1_data, sample_rate, xover_ufreq); + setup_f_svf(xover_b2_data, sample_rate, xover_lfreq); + + // Calculate delay offsets + dela_offset[0] = dela1_length * sample_rate; + dela_offset[1] = dela2_length * sample_rate; + dela_offset[2] = dela3_length * sample_rate; + for (i = 0; i < 3; i++) { + if (dela_offset[i] > sample_rate * 2 || dela_offset[i] < 0) { + dela_offset[i] = 0; + } + dela[i] = 0.0f; + filt_t[i] = 0; + } + + // Convert dB gains to coefficients + osc1_gain = DB_CO(osc1_gain_db); + osc2_gain = DB_CO(osc2_gain_db); + in_gain = DB_CO(in_gain_db); + rm1_gain = DB_CO(rm1_gain_db); + rm2_gain = DB_CO(rm2_gain_db); + rm3_gain = DB_CO(rm3_gain_db); + band_gain[0] = DB_CO(band1_gain_db); + band_gain[1] = DB_CO(band2_gain_db); + band_gain[2] = DB_CO(band3_gain_db); + + osc1_d->wave = wave_tbl(osc1_wave); + osc2_d->wave = wave_tbl(osc2_wave); + lfo1_d->wave = wave_tbl(lfo1_wave); + lfo2_d->wave = wave_tbl(lfo2_wave); + + blo_hd_set_freq(osc1_d, osc1_freq); + blo_hd_set_freq(osc2_d, osc2_freq); + blo_hd_set_freq(lfo1_d, lfo1_freq * 16); + blo_hd_set_freq(lfo2_d, lfo2_freq * 16); + + #define SETUP_F(n,f,q,t) setup_svf(filt_data[n], sample_rate, f, q, (int)t) + + // Set filter stuff + SETUP_F(0, filt1_freq, filt1_q, filt1_type); + SETUP_F(1, filt2_freq, filt2_q, filt2_type); + SETUP_F(2, filt3_freq, filt3_q, filt3_type); + + filt_freq[0] = filt1_freq; + filt_freq[1] = filt2_freq; + filt_freq[2] = filt3_freq; + filt_res[0] = filt1_res; + filt_res[1] = filt2_res; + filt_res[2] = filt3_res; + filt_lfo1[0] = filt1_lfo1; + filt_lfo1[1] = filt2_lfo1; + filt_lfo1[2] = filt3_lfo1; + filt_lfo2[0] = filt1_lfo2; + filt_lfo2[1] = filt2_lfo2; + filt_lfo2[2] = filt3_lfo2; + + // Setup distortions + drive[0] = drive1; + drive[1] = drive2; + drive[2] = drive3; + + // Setup delays + dela_wet[0] = dela1_wet; + dela_wet[1] = dela2_wet; + dela_wet[2] = dela3_wet; + dela_fb[0] = dela1_fb; + dela_fb[1] = dela2_fb; + dela_fb[2] = dela3_fb; + + tables = tables; // To shut up gcc + + for (pos = 0; pos < sample_count; pos++) { + count++; // Count of number of samples processed + + // Calculate oscilator values for this sample + + if (osc1_d->wave == NOISE) { + osc1 = rand() * (0.5f/(float)RAND_MAX) - 1.0f; + } else { + osc1 = blo_hd_run_lin(osc1_d); + } + if (osc2_d->wave == NOISE) { + osc2 = rand() * (0.5f/(float)RAND_MAX) - 1.0f; + } else { + osc2 = blo_hd_run_lin(osc2_d); + } + + // Calculate LFO values every 16 samples + if ((count & 15) == 1) { + // Calculate lfo values + if (lfo1_d->wave == NOISE) { + lfo1_phase += lfo1_freq; + if (lfo1_phase >= sample_rate) { + lfo1_phase -= sample_rate; + lfo1 = rand() * (0.5f/(float)RAND_MAX) - 1.0f; + } + } else { + lfo1 = blo_hd_run_lin(lfo1_d); + } + if (lfo2_d->wave == NOISE) { + lfo2_phase += lfo1_freq; + if (lfo2_phase >= sample_rate) { + lfo2_phase -= sample_rate; + lfo2 = rand() * (0.5f/(float)RAND_MAX) - 1.0f; + } + } else { + lfo2 = blo_hd_run_lin(lfo2_d); + } + } + + in = input[pos]; + rm1 = RINGMOD(osc2, osc1, rm1_depth); + rm2 = RINGMOD(in, osc2, rm2_depth); + rm3 = RINGMOD(osc1, in, rm3_depth); + + mixer1 = (osc1 * osc1_gain) + (osc2 * osc2_gain) + (in * in_gain) + + (rm1 * rm1_gain) + (rm2 * rm2_gain) + (rm3 * rm3_gain); + + mixer1 = soft_clip(mixer1); + + // Higpass off the top band + xover[0] = run_svf(xover_b1_data, mixer1); + // Lowpass off the bottom band + xover[2] = run_svf(xover_b2_data, mixer1); + // The middle band is whats left + xover[1] = mixer1 - xover[0] - xover[2]; + + mixer2 = 0.0f; + for (i = 0; i < 3; i++) { + dist[i] = xover[i]*(fabs(xover[i]) + drive1)/(xover[i]*xover[i] + (drive[i]-1)*fabs(xover[i]) + 1.0f); + + if (filt_t[i] == 0) { + filt[i] = dist[i]; + } else { + if (count % 16 == 1) { + setup_f_svf(filt_data[i], sample_rate, filt_freq[i]+LFO(filt_lfo1[i], filt_lfo2[i])); + } + filt[i] = run_svf(filt_data[i], dist[i] + (filt_res[i] * (filt_data[i])->b)); + } + + dela[i] = (dela_data[i][dela_pos[i]] * dela_wet[i]) + filt[i]; + dela_data[i][(dela_pos[i] + dela_offset[i]) % + (2 * sample_rate)] = filt[i] + (dela[i] * dela_fb[i]); + dela_pos[i] = (dela_pos[i] + 1) % (2 * sample_rate); + + mixer2 += band_gain[i] * dela[i]; + } + + buffer_write(output[pos], soft_clip(mixer2)); + } + + plugin_data->count = count; + plugin_data->lfo1 = lfo1; + plugin_data->lfo2 = lfo2; + plugin_data->lfo1_phase = lfo1_phase; + plugin_data->lfo2_phase = lfo2_phase; +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainHermesFilter(LADSPA_Handle instance, LADSPA_Data gain) { + ((HermesFilter *)instance)->run_adding_gain = gain; +} + +static void runAddingHermesFilter(LADSPA_Handle instance, unsigned long sample_count) { + HermesFilter *plugin_data = (HermesFilter *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* LFO1 freq (Hz) (float value) */ + const LADSPA_Data lfo1_freq = *(plugin_data->lfo1_freq); + + /* LFO1 wave (0 = sin, 1 = tri, 2 = saw, 3 = squ, 4 = s&h) (float value) */ + const LADSPA_Data lfo1_wave = *(plugin_data->lfo1_wave); + + /* LFO2 freq (Hz) (float value) */ + const LADSPA_Data lfo2_freq = *(plugin_data->lfo2_freq); + + /* LFO2 wave (0 = sin, 1 = tri, 2 = saw, 3 = squ, 4 = s&h) (float value) */ + const LADSPA_Data lfo2_wave = *(plugin_data->lfo2_wave); + + /* Osc1 freq (Hz) (float value) */ + const LADSPA_Data osc1_freq = *(plugin_data->osc1_freq); + + /* Osc1 wave (0 = sin, 1 = tri, 2 = saw, 3 = squ, 4 = noise) (float value) */ + const LADSPA_Data osc1_wave = *(plugin_data->osc1_wave); + + /* Osc2 freq (Hz) (float value) */ + const LADSPA_Data osc2_freq = *(plugin_data->osc2_freq); + + /* Osc2 wave (0 = sin, 1 = tri, 2 = saw, 3 = squ, 4 = noise) (float value) */ + const LADSPA_Data osc2_wave = *(plugin_data->osc2_wave); + + /* Ringmod 1 depth (0=none, 1=AM, 2=RM) (float value) */ + const LADSPA_Data rm1_depth = *(plugin_data->rm1_depth); + + /* Ringmod 2 depth (0=none, 1=AM, 2=RM) (float value) */ + const LADSPA_Data rm2_depth = *(plugin_data->rm2_depth); + + /* Ringmod 3 depth (0=none, 1=AM, 2=RM) (float value) */ + const LADSPA_Data rm3_depth = *(plugin_data->rm3_depth); + + /* Osc1 gain (dB) (float value) */ + const LADSPA_Data osc1_gain_db = *(plugin_data->osc1_gain_db); + + /* RM1 gain (dB) (float value) */ + const LADSPA_Data rm1_gain_db = *(plugin_data->rm1_gain_db); + + /* Osc2 gain (dB) (float value) */ + const LADSPA_Data osc2_gain_db = *(plugin_data->osc2_gain_db); + + /* RM2 gain (dB) (float value) */ + const LADSPA_Data rm2_gain_db = *(plugin_data->rm2_gain_db); + + /* Input gain (dB) (float value) */ + const LADSPA_Data in_gain_db = *(plugin_data->in_gain_db); + + /* RM3 gain (dB) (float value) */ + const LADSPA_Data rm3_gain_db = *(plugin_data->rm3_gain_db); + + /* Xover lower freq (float value) */ + const LADSPA_Data xover_lfreqp = *(plugin_data->xover_lfreqp); + + /* Xover upper freq (float value) */ + const LADSPA_Data xover_ufreqp = *(plugin_data->xover_ufreqp); + + /* Dist1 drive (float value) */ + const LADSPA_Data drive1 = *(plugin_data->drive1); + + /* Dist2 drive (float value) */ + const LADSPA_Data drive2 = *(plugin_data->drive2); + + /* Dist3 drive (float value) */ + const LADSPA_Data drive3 = *(plugin_data->drive3); + + /* Filt1 type (0=none, 1=LP, 2=HP, 3=BP, 4=BR, 5=AP) (float value) */ + const LADSPA_Data filt1_type = *(plugin_data->filt1_type); + + /* Filt1 freq (float value) */ + const LADSPA_Data filt1_freq = *(plugin_data->filt1_freq); + + /* Filt1 q (float value) */ + const LADSPA_Data filt1_q = *(plugin_data->filt1_q); + + /* Filt1 resonance (float value) */ + const LADSPA_Data filt1_res = *(plugin_data->filt1_res); + + /* Filt1 LFO1 level (float value) */ + const LADSPA_Data filt1_lfo1 = *(plugin_data->filt1_lfo1); + + /* Filt1 LFO2 level (float value) */ + const LADSPA_Data filt1_lfo2 = *(plugin_data->filt1_lfo2); + + /* Filt2 type (0=none, 1=LP, 2=HP, 3=BP, 4=BR, 5=AP) (float value) */ + const LADSPA_Data filt2_type = *(plugin_data->filt2_type); + + /* Filt2 freq (float value) */ + const LADSPA_Data filt2_freq = *(plugin_data->filt2_freq); + + /* Filt2 q (float value) */ + const LADSPA_Data filt2_q = *(plugin_data->filt2_q); + + /* Filt2 resonance (float value) */ + const LADSPA_Data filt2_res = *(plugin_data->filt2_res); + + /* Filt2 LFO1 level (float value) */ + const LADSPA_Data filt2_lfo1 = *(plugin_data->filt2_lfo1); + + /* Filt2 LFO2 level (float value) */ + const LADSPA_Data filt2_lfo2 = *(plugin_data->filt2_lfo2); + + /* Filt3 type (0=none, 1=LP, 2=HP, 3=BP, 4=BR, 5=AP) (float value) */ + const LADSPA_Data filt3_type = *(plugin_data->filt3_type); + + /* Filt3 freq (float value) */ + const LADSPA_Data filt3_freq = *(plugin_data->filt3_freq); + + /* Filt3 q (float value) */ + const LADSPA_Data filt3_q = *(plugin_data->filt3_q); + + /* Filt3 resonance (float value) */ + const LADSPA_Data filt3_res = *(plugin_data->filt3_res); + + /* Filt3 LFO1 level (float value) */ + const LADSPA_Data filt3_lfo1 = *(plugin_data->filt3_lfo1); + + /* Filt3 LFO2 level (float value) */ + const LADSPA_Data filt3_lfo2 = *(plugin_data->filt3_lfo2); + + /* Delay1 length (s) (float value) */ + const LADSPA_Data dela1_length = *(plugin_data->dela1_length); + + /* Delay1 feedback (float value) */ + const LADSPA_Data dela1_fb = *(plugin_data->dela1_fb); + + /* Delay1 wetness (float value) */ + const LADSPA_Data dela1_wet = *(plugin_data->dela1_wet); + + /* Delay2 length (s) (float value) */ + const LADSPA_Data dela2_length = *(plugin_data->dela2_length); + + /* Delay2 feedback (float value) */ + const LADSPA_Data dela2_fb = *(plugin_data->dela2_fb); + + /* Delay2 wetness (float value) */ + const LADSPA_Data dela2_wet = *(plugin_data->dela2_wet); + + /* Delay3 length (s) (float value) */ + const LADSPA_Data dela3_length = *(plugin_data->dela3_length); + + /* Delay3 feedback (float value) */ + const LADSPA_Data dela3_fb = *(plugin_data->dela3_fb); + + /* Delay3 wetness (float value) */ + const LADSPA_Data dela3_wet = *(plugin_data->dela3_wet); + + /* Band 1 gain (dB) (float value) */ + const LADSPA_Data band1_gain_db = *(plugin_data->band1_gain_db); + + /* Band 2 gain (dB) (float value) */ + const LADSPA_Data band2_gain_db = *(plugin_data->band2_gain_db); + + /* Band 3 gain (dB) (float value) */ + const LADSPA_Data band3_gain_db = *(plugin_data->band3_gain_db); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + long count = plugin_data->count; + float ** dela_data = plugin_data->dela_data; + int * dela_pos = plugin_data->dela_pos; + sv_filter ** filt_data = plugin_data->filt_data; + float lfo1 = plugin_data->lfo1; + blo_h_osc * lfo1_d = plugin_data->lfo1_d; + float lfo1_phase = plugin_data->lfo1_phase; + float lfo2 = plugin_data->lfo2; + blo_h_osc * lfo2_d = plugin_data->lfo2_d; + float lfo2_phase = plugin_data->lfo2_phase; + blo_h_osc * osc1_d = plugin_data->osc1_d; + blo_h_osc * osc2_d = plugin_data->osc2_d; + blo_h_tables * tables = plugin_data->tables; + sv_filter * xover_b1_data = plugin_data->xover_b1_data; + sv_filter * xover_b2_data = plugin_data->xover_b2_data; + +#line 231 "hermes_filter_1200.xml" + unsigned long pos; + int i; + + // dB gains converted to coefficients + float osc1_gain, rm1_gain, osc2_gain, rm2_gain, in_gain, rm3_gain; + + // Output values for the oscilators etc. + float osc1, osc2, in, rm1, rm2, rm3, mixer1; + + // Outputs from xover + float xover[3], band_gain[3]; + + // Output values for disortions + float dist[3]; + + // Stuff for distortions + float drive[3]; + + // Stuff for filters + float filt[3]; + float filt_freq[3]; + float filt_res[3]; + float filt_lfo1[3]; + float filt_lfo2[3]; + int filt_t[3]; + + // Values for delays + float dela[3], dela_wet[3], dela_fb[3]; + int dela_offset[3]; + + // Output of mixer2 + float mixer2; + + // X overs + const float xover_ufreq = f_clamp(xover_ufreqp, 200.0f, (float)(sample_rate / 6)); + const float xover_lfreq = f_clamp(xover_lfreqp, 0.0f, xover_ufreq); + setup_f_svf(xover_b1_data, sample_rate, xover_ufreq); + setup_f_svf(xover_b2_data, sample_rate, xover_lfreq); + + // Calculate delay offsets + dela_offset[0] = dela1_length * sample_rate; + dela_offset[1] = dela2_length * sample_rate; + dela_offset[2] = dela3_length * sample_rate; + for (i = 0; i < 3; i++) { + if (dela_offset[i] > sample_rate * 2 || dela_offset[i] < 0) { + dela_offset[i] = 0; + } + dela[i] = 0.0f; + filt_t[i] = 0; + } + + // Convert dB gains to coefficients + osc1_gain = DB_CO(osc1_gain_db); + osc2_gain = DB_CO(osc2_gain_db); + in_gain = DB_CO(in_gain_db); + rm1_gain = DB_CO(rm1_gain_db); + rm2_gain = DB_CO(rm2_gain_db); + rm3_gain = DB_CO(rm3_gain_db); + band_gain[0] = DB_CO(band1_gain_db); + band_gain[1] = DB_CO(band2_gain_db); + band_gain[2] = DB_CO(band3_gain_db); + + osc1_d->wave = wave_tbl(osc1_wave); + osc2_d->wave = wave_tbl(osc2_wave); + lfo1_d->wave = wave_tbl(lfo1_wave); + lfo2_d->wave = wave_tbl(lfo2_wave); + + blo_hd_set_freq(osc1_d, osc1_freq); + blo_hd_set_freq(osc2_d, osc2_freq); + blo_hd_set_freq(lfo1_d, lfo1_freq * 16); + blo_hd_set_freq(lfo2_d, lfo2_freq * 16); + + #define SETUP_F(n,f,q,t) setup_svf(filt_data[n], sample_rate, f, q, (int)t) + + // Set filter stuff + SETUP_F(0, filt1_freq, filt1_q, filt1_type); + SETUP_F(1, filt2_freq, filt2_q, filt2_type); + SETUP_F(2, filt3_freq, filt3_q, filt3_type); + + filt_freq[0] = filt1_freq; + filt_freq[1] = filt2_freq; + filt_freq[2] = filt3_freq; + filt_res[0] = filt1_res; + filt_res[1] = filt2_res; + filt_res[2] = filt3_res; + filt_lfo1[0] = filt1_lfo1; + filt_lfo1[1] = filt2_lfo1; + filt_lfo1[2] = filt3_lfo1; + filt_lfo2[0] = filt1_lfo2; + filt_lfo2[1] = filt2_lfo2; + filt_lfo2[2] = filt3_lfo2; + + // Setup distortions + drive[0] = drive1; + drive[1] = drive2; + drive[2] = drive3; + + // Setup delays + dela_wet[0] = dela1_wet; + dela_wet[1] = dela2_wet; + dela_wet[2] = dela3_wet; + dela_fb[0] = dela1_fb; + dela_fb[1] = dela2_fb; + dela_fb[2] = dela3_fb; + + tables = tables; // To shut up gcc + + for (pos = 0; pos < sample_count; pos++) { + count++; // Count of number of samples processed + + // Calculate oscilator values for this sample + + if (osc1_d->wave == NOISE) { + osc1 = rand() * (0.5f/(float)RAND_MAX) - 1.0f; + } else { + osc1 = blo_hd_run_lin(osc1_d); + } + if (osc2_d->wave == NOISE) { + osc2 = rand() * (0.5f/(float)RAND_MAX) - 1.0f; + } else { + osc2 = blo_hd_run_lin(osc2_d); + } + + // Calculate LFO values every 16 samples + if ((count & 15) == 1) { + // Calculate lfo values + if (lfo1_d->wave == NOISE) { + lfo1_phase += lfo1_freq; + if (lfo1_phase >= sample_rate) { + lfo1_phase -= sample_rate; + lfo1 = rand() * (0.5f/(float)RAND_MAX) - 1.0f; + } + } else { + lfo1 = blo_hd_run_lin(lfo1_d); + } + if (lfo2_d->wave == NOISE) { + lfo2_phase += lfo1_freq; + if (lfo2_phase >= sample_rate) { + lfo2_phase -= sample_rate; + lfo2 = rand() * (0.5f/(float)RAND_MAX) - 1.0f; + } + } else { + lfo2 = blo_hd_run_lin(lfo2_d); + } + } + + in = input[pos]; + rm1 = RINGMOD(osc2, osc1, rm1_depth); + rm2 = RINGMOD(in, osc2, rm2_depth); + rm3 = RINGMOD(osc1, in, rm3_depth); + + mixer1 = (osc1 * osc1_gain) + (osc2 * osc2_gain) + (in * in_gain) + + (rm1 * rm1_gain) + (rm2 * rm2_gain) + (rm3 * rm3_gain); + + mixer1 = soft_clip(mixer1); + + // Higpass off the top band + xover[0] = run_svf(xover_b1_data, mixer1); + // Lowpass off the bottom band + xover[2] = run_svf(xover_b2_data, mixer1); + // The middle band is whats left + xover[1] = mixer1 - xover[0] - xover[2]; + + mixer2 = 0.0f; + for (i = 0; i < 3; i++) { + dist[i] = xover[i]*(fabs(xover[i]) + drive1)/(xover[i]*xover[i] + (drive[i]-1)*fabs(xover[i]) + 1.0f); + + if (filt_t[i] == 0) { + filt[i] = dist[i]; + } else { + if (count % 16 == 1) { + setup_f_svf(filt_data[i], sample_rate, filt_freq[i]+LFO(filt_lfo1[i], filt_lfo2[i])); + } + filt[i] = run_svf(filt_data[i], dist[i] + (filt_res[i] * (filt_data[i])->b)); + } + + dela[i] = (dela_data[i][dela_pos[i]] * dela_wet[i]) + filt[i]; + dela_data[i][(dela_pos[i] + dela_offset[i]) % + (2 * sample_rate)] = filt[i] + (dela[i] * dela_fb[i]); + dela_pos[i] = (dela_pos[i] + 1) % (2 * sample_rate); + + mixer2 += band_gain[i] * dela[i]; + } + + buffer_write(output[pos], soft_clip(mixer2)); + } + + plugin_data->count = count; + plugin_data->lfo1 = lfo1; + plugin_data->lfo2 = lfo2; + plugin_data->lfo1_phase = lfo1_phase; + plugin_data->lfo2_phase = lfo2_phase; +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + hermesFilterDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (hermesFilterDescriptor) { + hermesFilterDescriptor->UniqueID = 1200; + hermesFilterDescriptor->Label = "hermesFilter"; + hermesFilterDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + hermesFilterDescriptor->Name = + D_("Hermes Filter"); + hermesFilterDescriptor->Maker = + "Steve Harris "; + hermesFilterDescriptor->Copyright = + "GPL"; + hermesFilterDescriptor->PortCount = 54; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(54, + sizeof(LADSPA_PortDescriptor)); + hermesFilterDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(54, + sizeof(LADSPA_PortRangeHint)); + hermesFilterDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(54, sizeof(char*)); + hermesFilterDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for LFO1 freq (Hz) */ + port_descriptors[HERMESFILTER_LFO1_FREQ] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[HERMESFILTER_LFO1_FREQ] = + D_("LFO1 freq (Hz)"); + port_range_hints[HERMESFILTER_LFO1_FREQ].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; + port_range_hints[HERMESFILTER_LFO1_FREQ].LowerBound = 0; + port_range_hints[HERMESFILTER_LFO1_FREQ].UpperBound = 1000; + + /* Parameters for LFO1 wave (0 = sin, 1 = tri, 2 = saw, 3 = squ, 4 = s&h) */ + port_descriptors[HERMESFILTER_LFO1_WAVE] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[HERMESFILTER_LFO1_WAVE] = + D_("LFO1 wave (0 = sin, 1 = tri, 2 = saw, 3 = squ, 4 = s&h)"); + port_range_hints[HERMESFILTER_LFO1_WAVE].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_INTEGER | LADSPA_HINT_DEFAULT_0; + port_range_hints[HERMESFILTER_LFO1_WAVE].LowerBound = 0; + port_range_hints[HERMESFILTER_LFO1_WAVE].UpperBound = 4; + + /* Parameters for LFO2 freq (Hz) */ + port_descriptors[HERMESFILTER_LFO2_FREQ] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[HERMESFILTER_LFO2_FREQ] = + D_("LFO2 freq (Hz)"); + port_range_hints[HERMESFILTER_LFO2_FREQ].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; + port_range_hints[HERMESFILTER_LFO2_FREQ].LowerBound = 0; + port_range_hints[HERMESFILTER_LFO2_FREQ].UpperBound = 1000; + + /* Parameters for LFO2 wave (0 = sin, 1 = tri, 2 = saw, 3 = squ, 4 = s&h) */ + port_descriptors[HERMESFILTER_LFO2_WAVE] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[HERMESFILTER_LFO2_WAVE] = + D_("LFO2 wave (0 = sin, 1 = tri, 2 = saw, 3 = squ, 4 = s&h)"); + port_range_hints[HERMESFILTER_LFO2_WAVE].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_INTEGER | LADSPA_HINT_DEFAULT_0; + port_range_hints[HERMESFILTER_LFO2_WAVE].LowerBound = 0; + port_range_hints[HERMESFILTER_LFO2_WAVE].UpperBound = 4; + + /* Parameters for Osc1 freq (Hz) */ + port_descriptors[HERMESFILTER_OSC1_FREQ] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[HERMESFILTER_OSC1_FREQ] = + D_("Osc1 freq (Hz)"); + port_range_hints[HERMESFILTER_OSC1_FREQ].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_440; + port_range_hints[HERMESFILTER_OSC1_FREQ].LowerBound = 0; + port_range_hints[HERMESFILTER_OSC1_FREQ].UpperBound = 4000; + + /* Parameters for Osc1 wave (0 = sin, 1 = tri, 2 = saw, 3 = squ, 4 = noise) */ + port_descriptors[HERMESFILTER_OSC1_WAVE] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[HERMESFILTER_OSC1_WAVE] = + D_("Osc1 wave (0 = sin, 1 = tri, 2 = saw, 3 = squ, 4 = noise)"); + port_range_hints[HERMESFILTER_OSC1_WAVE].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_INTEGER | LADSPA_HINT_DEFAULT_0; + port_range_hints[HERMESFILTER_OSC1_WAVE].LowerBound = 0; + port_range_hints[HERMESFILTER_OSC1_WAVE].UpperBound = 4; + + /* Parameters for Osc2 freq (Hz) */ + port_descriptors[HERMESFILTER_OSC2_FREQ] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[HERMESFILTER_OSC2_FREQ] = + D_("Osc2 freq (Hz)"); + port_range_hints[HERMESFILTER_OSC2_FREQ].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_440; + port_range_hints[HERMESFILTER_OSC2_FREQ].LowerBound = 0; + port_range_hints[HERMESFILTER_OSC2_FREQ].UpperBound = 4000; + + /* Parameters for Osc2 wave (0 = sin, 1 = tri, 2 = saw, 3 = squ, 4 = noise) */ + port_descriptors[HERMESFILTER_OSC2_WAVE] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[HERMESFILTER_OSC2_WAVE] = + D_("Osc2 wave (0 = sin, 1 = tri, 2 = saw, 3 = squ, 4 = noise)"); + port_range_hints[HERMESFILTER_OSC2_WAVE].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_INTEGER | LADSPA_HINT_DEFAULT_0; + port_range_hints[HERMESFILTER_OSC2_WAVE].LowerBound = 0; + port_range_hints[HERMESFILTER_OSC2_WAVE].UpperBound = 4; + + /* Parameters for Ringmod 1 depth (0=none, 1=AM, 2=RM) */ + port_descriptors[HERMESFILTER_RM1_DEPTH] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[HERMESFILTER_RM1_DEPTH] = + D_("Ringmod 1 depth (0=none, 1=AM, 2=RM)"); + port_range_hints[HERMESFILTER_RM1_DEPTH].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[HERMESFILTER_RM1_DEPTH].LowerBound = 0; + port_range_hints[HERMESFILTER_RM1_DEPTH].UpperBound = 2; + + /* Parameters for Ringmod 2 depth (0=none, 1=AM, 2=RM) */ + port_descriptors[HERMESFILTER_RM2_DEPTH] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[HERMESFILTER_RM2_DEPTH] = + D_("Ringmod 2 depth (0=none, 1=AM, 2=RM)"); + port_range_hints[HERMESFILTER_RM2_DEPTH].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[HERMESFILTER_RM2_DEPTH].LowerBound = 0; + port_range_hints[HERMESFILTER_RM2_DEPTH].UpperBound = 2; + + /* Parameters for Ringmod 3 depth (0=none, 1=AM, 2=RM) */ + port_descriptors[HERMESFILTER_RM3_DEPTH] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[HERMESFILTER_RM3_DEPTH] = + D_("Ringmod 3 depth (0=none, 1=AM, 2=RM)"); + port_range_hints[HERMESFILTER_RM3_DEPTH].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[HERMESFILTER_RM3_DEPTH].LowerBound = 0; + port_range_hints[HERMESFILTER_RM3_DEPTH].UpperBound = 2; + + /* Parameters for Osc1 gain (dB) */ + port_descriptors[HERMESFILTER_OSC1_GAIN_DB] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[HERMESFILTER_OSC1_GAIN_DB] = + D_("Osc1 gain (dB)"); + port_range_hints[HERMESFILTER_OSC1_GAIN_DB].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MINIMUM; + port_range_hints[HERMESFILTER_OSC1_GAIN_DB].LowerBound = -70; + port_range_hints[HERMESFILTER_OSC1_GAIN_DB].UpperBound = +20; + + /* Parameters for RM1 gain (dB) */ + port_descriptors[HERMESFILTER_RM1_GAIN_DB] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[HERMESFILTER_RM1_GAIN_DB] = + D_("RM1 gain (dB)"); + port_range_hints[HERMESFILTER_RM1_GAIN_DB].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MINIMUM; + port_range_hints[HERMESFILTER_RM1_GAIN_DB].LowerBound = -70; + port_range_hints[HERMESFILTER_RM1_GAIN_DB].UpperBound = +20; + + /* Parameters for Osc2 gain (dB) */ + port_descriptors[HERMESFILTER_OSC2_GAIN_DB] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[HERMESFILTER_OSC2_GAIN_DB] = + D_("Osc2 gain (dB)"); + port_range_hints[HERMESFILTER_OSC2_GAIN_DB].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MINIMUM; + port_range_hints[HERMESFILTER_OSC2_GAIN_DB].LowerBound = -70; + port_range_hints[HERMESFILTER_OSC2_GAIN_DB].UpperBound = +20; + + /* Parameters for RM2 gain (dB) */ + port_descriptors[HERMESFILTER_RM2_GAIN_DB] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[HERMESFILTER_RM2_GAIN_DB] = + D_("RM2 gain (dB)"); + port_range_hints[HERMESFILTER_RM2_GAIN_DB].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MINIMUM; + port_range_hints[HERMESFILTER_RM2_GAIN_DB].LowerBound = -70; + port_range_hints[HERMESFILTER_RM2_GAIN_DB].UpperBound = +20; + + /* Parameters for Input gain (dB) */ + port_descriptors[HERMESFILTER_IN_GAIN_DB] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[HERMESFILTER_IN_GAIN_DB] = + D_("Input gain (dB)"); + port_range_hints[HERMESFILTER_IN_GAIN_DB].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[HERMESFILTER_IN_GAIN_DB].LowerBound = -70; + port_range_hints[HERMESFILTER_IN_GAIN_DB].UpperBound = +20; + + /* Parameters for RM3 gain (dB) */ + port_descriptors[HERMESFILTER_RM3_GAIN_DB] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[HERMESFILTER_RM3_GAIN_DB] = + D_("RM3 gain (dB)"); + port_range_hints[HERMESFILTER_RM3_GAIN_DB].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MINIMUM; + port_range_hints[HERMESFILTER_RM3_GAIN_DB].LowerBound = -70; + port_range_hints[HERMESFILTER_RM3_GAIN_DB].UpperBound = +20; + + /* Parameters for Xover lower freq */ + port_descriptors[HERMESFILTER_XOVER_LFREQP] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[HERMESFILTER_XOVER_LFREQP] = + D_("Xover lower freq"); + port_range_hints[HERMESFILTER_XOVER_LFREQP].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; + port_range_hints[HERMESFILTER_XOVER_LFREQP].LowerBound = 50; + port_range_hints[HERMESFILTER_XOVER_LFREQP].UpperBound = 6000; + + /* Parameters for Xover upper freq */ + port_descriptors[HERMESFILTER_XOVER_UFREQP] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[HERMESFILTER_XOVER_UFREQP] = + D_("Xover upper freq"); + port_range_hints[HERMESFILTER_XOVER_UFREQP].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_HIGH; + port_range_hints[HERMESFILTER_XOVER_UFREQP].LowerBound = 1000; + port_range_hints[HERMESFILTER_XOVER_UFREQP].UpperBound = 10000; + + /* Parameters for Dist1 drive */ + port_descriptors[HERMESFILTER_DRIVE1] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[HERMESFILTER_DRIVE1] = + D_("Dist1 drive"); + port_range_hints[HERMESFILTER_DRIVE1].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[HERMESFILTER_DRIVE1].LowerBound = 0; + port_range_hints[HERMESFILTER_DRIVE1].UpperBound = 3; + + /* Parameters for Dist2 drive */ + port_descriptors[HERMESFILTER_DRIVE2] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[HERMESFILTER_DRIVE2] = + D_("Dist2 drive"); + port_range_hints[HERMESFILTER_DRIVE2].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[HERMESFILTER_DRIVE2].LowerBound = 0; + port_range_hints[HERMESFILTER_DRIVE2].UpperBound = 3; + + /* Parameters for Dist3 drive */ + port_descriptors[HERMESFILTER_DRIVE3] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[HERMESFILTER_DRIVE3] = + D_("Dist3 drive"); + port_range_hints[HERMESFILTER_DRIVE3].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[HERMESFILTER_DRIVE3].LowerBound = 0; + port_range_hints[HERMESFILTER_DRIVE3].UpperBound = 3; + + /* Parameters for Filt1 type (0=none, 1=LP, 2=HP, 3=BP, 4=BR, 5=AP) */ + port_descriptors[HERMESFILTER_FILT1_TYPE] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[HERMESFILTER_FILT1_TYPE] = + D_("Filt1 type (0=none, 1=LP, 2=HP, 3=BP, 4=BR, 5=AP)"); + port_range_hints[HERMESFILTER_FILT1_TYPE].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_INTEGER | LADSPA_HINT_DEFAULT_0; + port_range_hints[HERMESFILTER_FILT1_TYPE].LowerBound = 0; + port_range_hints[HERMESFILTER_FILT1_TYPE].UpperBound = 5; + + /* Parameters for Filt1 freq */ + port_descriptors[HERMESFILTER_FILT1_FREQ] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[HERMESFILTER_FILT1_FREQ] = + D_("Filt1 freq"); + port_range_hints[HERMESFILTER_FILT1_FREQ].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_440; + port_range_hints[HERMESFILTER_FILT1_FREQ].LowerBound = 0; + port_range_hints[HERMESFILTER_FILT1_FREQ].UpperBound = 8000; + + /* Parameters for Filt1 q */ + port_descriptors[HERMESFILTER_FILT1_Q] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[HERMESFILTER_FILT1_Q] = + D_("Filt1 q"); + port_range_hints[HERMESFILTER_FILT1_Q].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[HERMESFILTER_FILT1_Q].LowerBound = 0; + port_range_hints[HERMESFILTER_FILT1_Q].UpperBound = 1; + + /* Parameters for Filt1 resonance */ + port_descriptors[HERMESFILTER_FILT1_RES] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[HERMESFILTER_FILT1_RES] = + D_("Filt1 resonance"); + port_range_hints[HERMESFILTER_FILT1_RES].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[HERMESFILTER_FILT1_RES].LowerBound = 0; + port_range_hints[HERMESFILTER_FILT1_RES].UpperBound = 1; + + /* Parameters for Filt1 LFO1 level */ + port_descriptors[HERMESFILTER_FILT1_LFO1] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[HERMESFILTER_FILT1_LFO1] = + D_("Filt1 LFO1 level"); + port_range_hints[HERMESFILTER_FILT1_LFO1].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[HERMESFILTER_FILT1_LFO1].LowerBound = -500; + port_range_hints[HERMESFILTER_FILT1_LFO1].UpperBound = 500; + + /* Parameters for Filt1 LFO2 level */ + port_descriptors[HERMESFILTER_FILT1_LFO2] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[HERMESFILTER_FILT1_LFO2] = + D_("Filt1 LFO2 level"); + port_range_hints[HERMESFILTER_FILT1_LFO2].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[HERMESFILTER_FILT1_LFO2].LowerBound = -500; + port_range_hints[HERMESFILTER_FILT1_LFO2].UpperBound = 500; + + /* Parameters for Filt2 type (0=none, 1=LP, 2=HP, 3=BP, 4=BR, 5=AP) */ + port_descriptors[HERMESFILTER_FILT2_TYPE] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[HERMESFILTER_FILT2_TYPE] = + D_("Filt2 type (0=none, 1=LP, 2=HP, 3=BP, 4=BR, 5=AP)"); + port_range_hints[HERMESFILTER_FILT2_TYPE].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_INTEGER | LADSPA_HINT_DEFAULT_0; + port_range_hints[HERMESFILTER_FILT2_TYPE].LowerBound = 0; + port_range_hints[HERMESFILTER_FILT2_TYPE].UpperBound = 5; + + /* Parameters for Filt2 freq */ + port_descriptors[HERMESFILTER_FILT2_FREQ] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[HERMESFILTER_FILT2_FREQ] = + D_("Filt2 freq"); + port_range_hints[HERMESFILTER_FILT2_FREQ].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_440; + port_range_hints[HERMESFILTER_FILT2_FREQ].LowerBound = 0; + port_range_hints[HERMESFILTER_FILT2_FREQ].UpperBound = 8000; + + /* Parameters for Filt2 q */ + port_descriptors[HERMESFILTER_FILT2_Q] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[HERMESFILTER_FILT2_Q] = + D_("Filt2 q"); + port_range_hints[HERMESFILTER_FILT2_Q].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[HERMESFILTER_FILT2_Q].LowerBound = 0; + port_range_hints[HERMESFILTER_FILT2_Q].UpperBound = 1; + + /* Parameters for Filt2 resonance */ + port_descriptors[HERMESFILTER_FILT2_RES] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[HERMESFILTER_FILT2_RES] = + D_("Filt2 resonance"); + port_range_hints[HERMESFILTER_FILT2_RES].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[HERMESFILTER_FILT2_RES].LowerBound = 0; + port_range_hints[HERMESFILTER_FILT2_RES].UpperBound = 1; + + /* Parameters for Filt2 LFO1 level */ + port_descriptors[HERMESFILTER_FILT2_LFO1] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[HERMESFILTER_FILT2_LFO1] = + D_("Filt2 LFO1 level"); + port_range_hints[HERMESFILTER_FILT2_LFO1].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[HERMESFILTER_FILT2_LFO1].LowerBound = -500; + port_range_hints[HERMESFILTER_FILT2_LFO1].UpperBound = 500; + + /* Parameters for Filt2 LFO2 level */ + port_descriptors[HERMESFILTER_FILT2_LFO2] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[HERMESFILTER_FILT2_LFO2] = + D_("Filt2 LFO2 level"); + port_range_hints[HERMESFILTER_FILT2_LFO2].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[HERMESFILTER_FILT2_LFO2].LowerBound = -500; + port_range_hints[HERMESFILTER_FILT2_LFO2].UpperBound = 500; + + /* Parameters for Filt3 type (0=none, 1=LP, 2=HP, 3=BP, 4=BR, 5=AP) */ + port_descriptors[HERMESFILTER_FILT3_TYPE] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[HERMESFILTER_FILT3_TYPE] = + D_("Filt3 type (0=none, 1=LP, 2=HP, 3=BP, 4=BR, 5=AP)"); + port_range_hints[HERMESFILTER_FILT3_TYPE].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_INTEGER | LADSPA_HINT_DEFAULT_0; + port_range_hints[HERMESFILTER_FILT3_TYPE].LowerBound = 0; + port_range_hints[HERMESFILTER_FILT3_TYPE].UpperBound = 5; + + /* Parameters for Filt3 freq */ + port_descriptors[HERMESFILTER_FILT3_FREQ] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[HERMESFILTER_FILT3_FREQ] = + D_("Filt3 freq"); + port_range_hints[HERMESFILTER_FILT3_FREQ].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_440; + port_range_hints[HERMESFILTER_FILT3_FREQ].LowerBound = 0; + port_range_hints[HERMESFILTER_FILT3_FREQ].UpperBound = 8000; + + /* Parameters for Filt3 q */ + port_descriptors[HERMESFILTER_FILT3_Q] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[HERMESFILTER_FILT3_Q] = + D_("Filt3 q"); + port_range_hints[HERMESFILTER_FILT3_Q].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[HERMESFILTER_FILT3_Q].LowerBound = 0; + port_range_hints[HERMESFILTER_FILT3_Q].UpperBound = 1; + + /* Parameters for Filt3 resonance */ + port_descriptors[HERMESFILTER_FILT3_RES] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[HERMESFILTER_FILT3_RES] = + D_("Filt3 resonance"); + port_range_hints[HERMESFILTER_FILT3_RES].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[HERMESFILTER_FILT3_RES].LowerBound = 0; + port_range_hints[HERMESFILTER_FILT3_RES].UpperBound = 1; + + /* Parameters for Filt3 LFO1 level */ + port_descriptors[HERMESFILTER_FILT3_LFO1] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[HERMESFILTER_FILT3_LFO1] = + D_("Filt3 LFO1 level"); + port_range_hints[HERMESFILTER_FILT3_LFO1].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[HERMESFILTER_FILT3_LFO1].LowerBound = -500; + port_range_hints[HERMESFILTER_FILT3_LFO1].UpperBound = 500; + + /* Parameters for Filt3 LFO2 level */ + port_descriptors[HERMESFILTER_FILT3_LFO2] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[HERMESFILTER_FILT3_LFO2] = + D_("Filt3 LFO2 level"); + port_range_hints[HERMESFILTER_FILT3_LFO2].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[HERMESFILTER_FILT3_LFO2].LowerBound = -500; + port_range_hints[HERMESFILTER_FILT3_LFO2].UpperBound = 500; + + /* Parameters for Delay1 length (s) */ + port_descriptors[HERMESFILTER_DELA1_LENGTH] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[HERMESFILTER_DELA1_LENGTH] = + D_("Delay1 length (s)"); + port_range_hints[HERMESFILTER_DELA1_LENGTH].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[HERMESFILTER_DELA1_LENGTH].LowerBound = 0; + port_range_hints[HERMESFILTER_DELA1_LENGTH].UpperBound = 2; + + /* Parameters for Delay1 feedback */ + port_descriptors[HERMESFILTER_DELA1_FB] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[HERMESFILTER_DELA1_FB] = + D_("Delay1 feedback"); + port_range_hints[HERMESFILTER_DELA1_FB].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[HERMESFILTER_DELA1_FB].LowerBound = 0; + port_range_hints[HERMESFILTER_DELA1_FB].UpperBound = 1; + + /* Parameters for Delay1 wetness */ + port_descriptors[HERMESFILTER_DELA1_WET] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[HERMESFILTER_DELA1_WET] = + D_("Delay1 wetness"); + port_range_hints[HERMESFILTER_DELA1_WET].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[HERMESFILTER_DELA1_WET].LowerBound = 0; + port_range_hints[HERMESFILTER_DELA1_WET].UpperBound = 1; + + /* Parameters for Delay2 length (s) */ + port_descriptors[HERMESFILTER_DELA2_LENGTH] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[HERMESFILTER_DELA2_LENGTH] = + D_("Delay2 length (s)"); + port_range_hints[HERMESFILTER_DELA2_LENGTH].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[HERMESFILTER_DELA2_LENGTH].LowerBound = 0; + port_range_hints[HERMESFILTER_DELA2_LENGTH].UpperBound = 2; + + /* Parameters for Delay2 feedback */ + port_descriptors[HERMESFILTER_DELA2_FB] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[HERMESFILTER_DELA2_FB] = + D_("Delay2 feedback"); + port_range_hints[HERMESFILTER_DELA2_FB].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[HERMESFILTER_DELA2_FB].LowerBound = 0; + port_range_hints[HERMESFILTER_DELA2_FB].UpperBound = 1; + + /* Parameters for Delay2 wetness */ + port_descriptors[HERMESFILTER_DELA2_WET] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[HERMESFILTER_DELA2_WET] = + D_("Delay2 wetness"); + port_range_hints[HERMESFILTER_DELA2_WET].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[HERMESFILTER_DELA2_WET].LowerBound = 0; + port_range_hints[HERMESFILTER_DELA2_WET].UpperBound = 1; + + /* Parameters for Delay3 length (s) */ + port_descriptors[HERMESFILTER_DELA3_LENGTH] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[HERMESFILTER_DELA3_LENGTH] = + D_("Delay3 length (s)"); + port_range_hints[HERMESFILTER_DELA3_LENGTH].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[HERMESFILTER_DELA3_LENGTH].LowerBound = 0; + port_range_hints[HERMESFILTER_DELA3_LENGTH].UpperBound = 2; + + /* Parameters for Delay3 feedback */ + port_descriptors[HERMESFILTER_DELA3_FB] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[HERMESFILTER_DELA3_FB] = + D_("Delay3 feedback"); + port_range_hints[HERMESFILTER_DELA3_FB].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[HERMESFILTER_DELA3_FB].LowerBound = 0; + port_range_hints[HERMESFILTER_DELA3_FB].UpperBound = 1; + + /* Parameters for Delay3 wetness */ + port_descriptors[HERMESFILTER_DELA3_WET] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[HERMESFILTER_DELA3_WET] = + D_("Delay3 wetness"); + port_range_hints[HERMESFILTER_DELA3_WET].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[HERMESFILTER_DELA3_WET].LowerBound = 0; + port_range_hints[HERMESFILTER_DELA3_WET].UpperBound = 1; + + /* Parameters for Band 1 gain (dB) */ + port_descriptors[HERMESFILTER_BAND1_GAIN_DB] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[HERMESFILTER_BAND1_GAIN_DB] = + D_("Band 1 gain (dB)"); + port_range_hints[HERMESFILTER_BAND1_GAIN_DB].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[HERMESFILTER_BAND1_GAIN_DB].LowerBound = -70; + port_range_hints[HERMESFILTER_BAND1_GAIN_DB].UpperBound = +20; + + /* Parameters for Band 2 gain (dB) */ + port_descriptors[HERMESFILTER_BAND2_GAIN_DB] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[HERMESFILTER_BAND2_GAIN_DB] = + D_("Band 2 gain (dB)"); + port_range_hints[HERMESFILTER_BAND2_GAIN_DB].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[HERMESFILTER_BAND2_GAIN_DB].LowerBound = -70; + port_range_hints[HERMESFILTER_BAND2_GAIN_DB].UpperBound = +20; + + /* Parameters for Band 3 gain (dB) */ + port_descriptors[HERMESFILTER_BAND3_GAIN_DB] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[HERMESFILTER_BAND3_GAIN_DB] = + D_("Band 3 gain (dB)"); + port_range_hints[HERMESFILTER_BAND3_GAIN_DB].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[HERMESFILTER_BAND3_GAIN_DB].LowerBound = -70; + port_range_hints[HERMESFILTER_BAND3_GAIN_DB].UpperBound = +20; + + /* Parameters for Input */ + port_descriptors[HERMESFILTER_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[HERMESFILTER_INPUT] = + D_("Input"); + port_range_hints[HERMESFILTER_INPUT].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; + port_range_hints[HERMESFILTER_INPUT].LowerBound = -1; + port_range_hints[HERMESFILTER_INPUT].UpperBound = +1; + + /* Parameters for Output */ + port_descriptors[HERMESFILTER_OUTPUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[HERMESFILTER_OUTPUT] = + D_("Output"); + port_range_hints[HERMESFILTER_OUTPUT].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; + port_range_hints[HERMESFILTER_OUTPUT].LowerBound = -1; + port_range_hints[HERMESFILTER_OUTPUT].UpperBound = +1; + + hermesFilterDescriptor->activate = activateHermesFilter; + hermesFilterDescriptor->cleanup = cleanupHermesFilter; + hermesFilterDescriptor->connect_port = connectPortHermesFilter; + hermesFilterDescriptor->deactivate = NULL; + hermesFilterDescriptor->instantiate = instantiateHermesFilter; + hermesFilterDescriptor->run = runHermesFilter; + hermesFilterDescriptor->run_adding = runAddingHermesFilter; + hermesFilterDescriptor->set_run_adding_gain = setRunAddingGainHermesFilter; + } +} + +void _fini() { + if (hermesFilterDescriptor) { + free((LADSPA_PortDescriptor *)hermesFilterDescriptor->PortDescriptors); + free((char **)hermesFilterDescriptor->PortNames); + free((LADSPA_PortRangeHint *)hermesFilterDescriptor->PortRangeHints); + free(hermesFilterDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/highpass_iir_1890.c b/plugins/LadspaEffect/swh/highpass_iir_1890.c new file mode 100644 index 000000000..09e3688a7 --- /dev/null +++ b/plugins/LadspaEffect/swh/highpass_iir_1890.c @@ -0,0 +1,289 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + + +#include "config.h" +#include "util/iir.h" + +#define HIGHPASS_IIR_CUTOFF 0 +#define HIGHPASS_IIR_STAGES 1 +#define HIGHPASS_IIR_INPUT 2 +#define HIGHPASS_IIR_OUTPUT 3 + +static LADSPA_Descriptor *highpass_iirDescriptor = NULL; + +typedef struct { + LADSPA_Data *cutoff; + LADSPA_Data *stages; + LADSPA_Data *input; + LADSPA_Data *output; + iir_stage_t* gt; + iirf_t* iirf; + long sample_rate; + LADSPA_Data run_adding_gain; +} Highpass_iir; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return highpass_iirDescriptor; + default: + return NULL; + } +} + +static void activateHighpass_iir(LADSPA_Handle instance) { + Highpass_iir *plugin_data = (Highpass_iir *)instance; + iir_stage_t*gt = plugin_data->gt; + iirf_t*iirf = plugin_data->iirf; + long sample_rate = plugin_data->sample_rate; + + gt = init_iir_stage(IIR_STAGE_HIGHPASS,10,3,2); + iirf = init_iirf_t(gt); + chebyshev(iirf, gt, 2*CLAMP((int)(*(plugin_data->stages)),1,10), IIR_STAGE_HIGHPASS, *(plugin_data->cutoff)/(float)sample_rate, 0.5f); + plugin_data->gt = gt; + plugin_data->iirf = iirf; + plugin_data->sample_rate = sample_rate; + +} + +static void cleanupHighpass_iir(LADSPA_Handle instance) { + Highpass_iir *plugin_data = (Highpass_iir *)instance; + free_iirf_t(plugin_data->iirf, plugin_data->gt); + free_iir_stage(plugin_data->gt); + free(instance); +} + +static void connectPortHighpass_iir( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + Highpass_iir *plugin; + + plugin = (Highpass_iir *)instance; + switch (port) { + case HIGHPASS_IIR_CUTOFF: + plugin->cutoff = data; + break; + case HIGHPASS_IIR_STAGES: + plugin->stages = data; + break; + case HIGHPASS_IIR_INPUT: + plugin->input = data; + break; + case HIGHPASS_IIR_OUTPUT: + plugin->output = data; + break; + } +} + +static LADSPA_Handle instantiateHighpass_iir( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + Highpass_iir *plugin_data = (Highpass_iir *)malloc(sizeof(Highpass_iir)); + iir_stage_t*gt = NULL; + iirf_t*iirf = NULL; + long sample_rate; + + sample_rate = s_rate; + + plugin_data->gt = gt; + plugin_data->iirf = iirf; + plugin_data->sample_rate = sample_rate; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runHighpass_iir(LADSPA_Handle instance, unsigned long sample_count) { + Highpass_iir *plugin_data = (Highpass_iir *)instance; + + /* Cutoff Frequency (float value) */ + const LADSPA_Data cutoff = *(plugin_data->cutoff); + + /* Stages(2 poles per stage) (float value) */ + const LADSPA_Data stages = *(plugin_data->stages); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + iir_stage_t* gt = plugin_data->gt; + iirf_t* iirf = plugin_data->iirf; + long sample_rate = plugin_data->sample_rate; + + chebyshev(iirf, gt, 2*CLAMP((int)stages,1,10), IIR_STAGE_HIGHPASS, cutoff/(float)sample_rate, 0.5f); + iir_process_buffer_ns_5(iirf, gt, input, output, sample_count,RUN_ADDING); +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainHighpass_iir(LADSPA_Handle instance, LADSPA_Data gain) { + ((Highpass_iir *)instance)->run_adding_gain = gain; +} + +static void runAddingHighpass_iir(LADSPA_Handle instance, unsigned long sample_count) { + Highpass_iir *plugin_data = (Highpass_iir *)instance; + + /* Cutoff Frequency (float value) */ + const LADSPA_Data cutoff = *(plugin_data->cutoff); + + /* Stages(2 poles per stage) (float value) */ + const LADSPA_Data stages = *(plugin_data->stages); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + iir_stage_t* gt = plugin_data->gt; + iirf_t* iirf = plugin_data->iirf; + long sample_rate = plugin_data->sample_rate; + + chebyshev(iirf, gt, 2*CLAMP((int)stages,1,10), IIR_STAGE_HIGHPASS, cutoff/(float)sample_rate, 0.5f); + iir_process_buffer_ns_5(iirf, gt, input, output, sample_count,RUN_ADDING); +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + highpass_iirDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (highpass_iirDescriptor) { + highpass_iirDescriptor->UniqueID = 1890; + highpass_iirDescriptor->Label = "highpass_iir"; + highpass_iirDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + highpass_iirDescriptor->Name = + D_("Glame Highpass Filter"); + highpass_iirDescriptor->Maker = + "Alexander Ehlert "; + highpass_iirDescriptor->Copyright = + "GPL"; + highpass_iirDescriptor->PortCount = 4; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(4, + sizeof(LADSPA_PortDescriptor)); + highpass_iirDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(4, + sizeof(LADSPA_PortRangeHint)); + highpass_iirDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(4, sizeof(char*)); + highpass_iirDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Cutoff Frequency */ + port_descriptors[HIGHPASS_IIR_CUTOFF] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[HIGHPASS_IIR_CUTOFF] = + D_("Cutoff Frequency"); + port_range_hints[HIGHPASS_IIR_CUTOFF].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW | LADSPA_HINT_SAMPLE_RATE | LADSPA_HINT_LOGARITHMIC; + port_range_hints[HIGHPASS_IIR_CUTOFF].LowerBound = 0.0001; + port_range_hints[HIGHPASS_IIR_CUTOFF].UpperBound = 0.45; + + /* Parameters for Stages(2 poles per stage) */ + port_descriptors[HIGHPASS_IIR_STAGES] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[HIGHPASS_IIR_STAGES] = + D_("Stages(2 poles per stage)"); + port_range_hints[HIGHPASS_IIR_STAGES].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1 | LADSPA_HINT_INTEGER; + port_range_hints[HIGHPASS_IIR_STAGES].LowerBound = 1.0; + port_range_hints[HIGHPASS_IIR_STAGES].UpperBound = 10.0; + + /* Parameters for Input */ + port_descriptors[HIGHPASS_IIR_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[HIGHPASS_IIR_INPUT] = + D_("Input"); + port_range_hints[HIGHPASS_IIR_INPUT].HintDescriptor = 0; + + /* Parameters for Output */ + port_descriptors[HIGHPASS_IIR_OUTPUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[HIGHPASS_IIR_OUTPUT] = + D_("Output"); + port_range_hints[HIGHPASS_IIR_OUTPUT].HintDescriptor = 0; + + highpass_iirDescriptor->activate = activateHighpass_iir; + highpass_iirDescriptor->cleanup = cleanupHighpass_iir; + highpass_iirDescriptor->connect_port = connectPortHighpass_iir; + highpass_iirDescriptor->deactivate = NULL; + highpass_iirDescriptor->instantiate = instantiateHighpass_iir; + highpass_iirDescriptor->run = runHighpass_iir; + highpass_iirDescriptor->run_adding = runAddingHighpass_iir; + highpass_iirDescriptor->set_run_adding_gain = setRunAddingGainHighpass_iir; + } +} + +void _fini() { + if (highpass_iirDescriptor) { + free((LADSPA_PortDescriptor *)highpass_iirDescriptor->PortDescriptors); + free((char **)highpass_iirDescriptor->PortNames); + free((LADSPA_PortRangeHint *)highpass_iirDescriptor->PortRangeHints); + free(highpass_iirDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/hilbert_1440.c b/plugins/LadspaEffect/swh/hilbert_1440.c new file mode 100644 index 000000000..0009d7948 --- /dev/null +++ b/plugins/LadspaEffect/swh/hilbert_1440.c @@ -0,0 +1,327 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + +#line 10 "hilbert_1440.xml" + +#include "ladspa-util.h" + +#define D_SIZE 256 +#define NZEROS 200 + +/* The non-zero taps of the Hilbert transformer */ +static float xcoeffs[] = { + +0.0008103736f, +0.0008457886f, +0.0009017196f, +0.0009793364f, + +0.0010798341f, +0.0012044365f, +0.0013544008f, +0.0015310235f, + +0.0017356466f, +0.0019696659f, +0.0022345404f, +0.0025318040f, + +0.0028630784f, +0.0032300896f, +0.0036346867f, +0.0040788644f, + +0.0045647903f, +0.0050948365f, +0.0056716186f, +0.0062980419f, + +0.0069773575f, +0.0077132300f, +0.0085098208f, +0.0093718901f, + +0.0103049226f, +0.0113152847f, +0.0124104218f, +0.0135991079f, + +0.0148917649f, +0.0163008758f, +0.0178415242f, +0.0195321089f, + +0.0213953037f, +0.0234593652f, +0.0257599469f, +0.0283426636f, + +0.0312667947f, +0.0346107648f, +0.0384804823f, +0.0430224431f, + +0.0484451086f, +0.0550553725f, +0.0633242001f, +0.0740128560f, + +0.0884368322f, +0.1090816773f, +0.1412745301f, +0.1988673273f, + +0.3326528346f, +0.9997730178f, -0.9997730178f, -0.3326528346f, + -0.1988673273f, -0.1412745301f, -0.1090816773f, -0.0884368322f, + -0.0740128560f, -0.0633242001f, -0.0550553725f, -0.0484451086f, + -0.0430224431f, -0.0384804823f, -0.0346107648f, -0.0312667947f, + -0.0283426636f, -0.0257599469f, -0.0234593652f, -0.0213953037f, + -0.0195321089f, -0.0178415242f, -0.0163008758f, -0.0148917649f, + -0.0135991079f, -0.0124104218f, -0.0113152847f, -0.0103049226f, + -0.0093718901f, -0.0085098208f, -0.0077132300f, -0.0069773575f, + -0.0062980419f, -0.0056716186f, -0.0050948365f, -0.0045647903f, + -0.0040788644f, -0.0036346867f, -0.0032300896f, -0.0028630784f, + -0.0025318040f, -0.0022345404f, -0.0019696659f, -0.0017356466f, + -0.0015310235f, -0.0013544008f, -0.0012044365f, -0.0010798341f, + -0.0009793364f, -0.0009017196f, -0.0008457886f, -0.0008103736f, +}; + +#define HILBERT_INPUT 0 +#define HILBERT_OUTPUT0 1 +#define HILBERT_OUTPUT90 2 +#define HILBERT_LATENCY 3 + +static LADSPA_Descriptor *hilbertDescriptor = NULL; + +typedef struct { + LADSPA_Data *input; + LADSPA_Data *output0; + LADSPA_Data *output90; + LADSPA_Data *latency; + LADSPA_Data *delay; + unsigned int dptr; + LADSPA_Data run_adding_gain; +} Hilbert; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return hilbertDescriptor; + default: + return NULL; + } +} + +static void cleanupHilbert(LADSPA_Handle instance) { +#line 59 "hilbert_1440.xml" + Hilbert *plugin_data = (Hilbert *)instance; + free(plugin_data->delay); + free(instance); +} + +static void connectPortHilbert( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + Hilbert *plugin; + + plugin = (Hilbert *)instance; + switch (port) { + case HILBERT_INPUT: + plugin->input = data; + break; + case HILBERT_OUTPUT0: + plugin->output0 = data; + break; + case HILBERT_OUTPUT90: + plugin->output90 = data; + break; + case HILBERT_LATENCY: + plugin->latency = data; + break; + } +} + +static LADSPA_Handle instantiateHilbert( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + Hilbert *plugin_data = (Hilbert *)malloc(sizeof(Hilbert)); + LADSPA_Data *delay = NULL; + unsigned int dptr; + +#line 53 "hilbert_1440.xml" + delay = calloc(D_SIZE, sizeof(LADSPA_Data)); + + dptr = 0; + + plugin_data->delay = delay; + plugin_data->dptr = dptr; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runHilbert(LADSPA_Handle instance, unsigned long sample_count) { + Hilbert *plugin_data = (Hilbert *)instance; + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* 0deg output (array of floats of length sample_count) */ + LADSPA_Data * const output0 = plugin_data->output0; + + /* 90deg output (array of floats of length sample_count) */ + LADSPA_Data * const output90 = plugin_data->output90; + LADSPA_Data * delay = plugin_data->delay; + unsigned int dptr = plugin_data->dptr; + +#line 63 "hilbert_1440.xml" + unsigned long pos; + unsigned int i; + float hilb; + + for (pos = 0; pos < sample_count; pos++) { + delay[dptr] = input[pos]; + hilb = 0.0f; + for (i = 0; i < NZEROS/2; i++) { + hilb += (xcoeffs[i] * delay[(dptr - i*2) & (D_SIZE - 1)]); + } + buffer_write(output0[pos], delay[(dptr - 99) & (D_SIZE - 1)]); + buffer_write(output90[pos], hilb); + dptr = (dptr + 1) & (D_SIZE - 1); + } + + plugin_data->dptr = dptr; + + *(plugin_data->latency) = 99; +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainHilbert(LADSPA_Handle instance, LADSPA_Data gain) { + ((Hilbert *)instance)->run_adding_gain = gain; +} + +static void runAddingHilbert(LADSPA_Handle instance, unsigned long sample_count) { + Hilbert *plugin_data = (Hilbert *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* 0deg output (array of floats of length sample_count) */ + LADSPA_Data * const output0 = plugin_data->output0; + + /* 90deg output (array of floats of length sample_count) */ + LADSPA_Data * const output90 = plugin_data->output90; + LADSPA_Data * delay = plugin_data->delay; + unsigned int dptr = plugin_data->dptr; + +#line 63 "hilbert_1440.xml" + unsigned long pos; + unsigned int i; + float hilb; + + for (pos = 0; pos < sample_count; pos++) { + delay[dptr] = input[pos]; + hilb = 0.0f; + for (i = 0; i < NZEROS/2; i++) { + hilb += (xcoeffs[i] * delay[(dptr - i*2) & (D_SIZE - 1)]); + } + buffer_write(output0[pos], delay[(dptr - 99) & (D_SIZE - 1)]); + buffer_write(output90[pos], hilb); + dptr = (dptr + 1) & (D_SIZE - 1); + } + + plugin_data->dptr = dptr; + + *(plugin_data->latency) = 99; +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + hilbertDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (hilbertDescriptor) { + hilbertDescriptor->UniqueID = 1440; + hilbertDescriptor->Label = "hilbert"; + hilbertDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + hilbertDescriptor->Name = + D_("Hilbert transformer"); + hilbertDescriptor->Maker = + "Steve Harris "; + hilbertDescriptor->Copyright = + "GPL"; + hilbertDescriptor->PortCount = 4; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(4, + sizeof(LADSPA_PortDescriptor)); + hilbertDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(4, + sizeof(LADSPA_PortRangeHint)); + hilbertDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(4, sizeof(char*)); + hilbertDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Input */ + port_descriptors[HILBERT_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[HILBERT_INPUT] = + D_("Input"); + port_range_hints[HILBERT_INPUT].HintDescriptor = 0; + + /* Parameters for 0deg output */ + port_descriptors[HILBERT_OUTPUT0] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[HILBERT_OUTPUT0] = + D_("0deg output"); + port_range_hints[HILBERT_OUTPUT0].HintDescriptor = 0; + + /* Parameters for 90deg output */ + port_descriptors[HILBERT_OUTPUT90] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[HILBERT_OUTPUT90] = + D_("90deg output"); + port_range_hints[HILBERT_OUTPUT90].HintDescriptor = 0; + + /* Parameters for latency */ + port_descriptors[HILBERT_LATENCY] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_CONTROL; + port_names[HILBERT_LATENCY] = + D_("latency"); + port_range_hints[HILBERT_LATENCY].HintDescriptor = 0; + + hilbertDescriptor->activate = NULL; + hilbertDescriptor->cleanup = cleanupHilbert; + hilbertDescriptor->connect_port = connectPortHilbert; + hilbertDescriptor->deactivate = NULL; + hilbertDescriptor->instantiate = instantiateHilbert; + hilbertDescriptor->run = runHilbert; + hilbertDescriptor->run_adding = runAddingHilbert; + hilbertDescriptor->set_run_adding_gain = setRunAddingGainHilbert; + } +} + +void _fini() { + if (hilbertDescriptor) { + free((LADSPA_PortDescriptor *)hilbertDescriptor->PortDescriptors); + free((char **)hilbertDescriptor->PortNames); + free((LADSPA_PortRangeHint *)hilbertDescriptor->PortRangeHints); + free(hilbertDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/imp_1199.c b/plugins/LadspaEffect/swh/imp_1199.c new file mode 100644 index 000000000..599bedb81 --- /dev/null +++ b/plugins/LadspaEffect/swh/imp_1199.c @@ -0,0 +1,637 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + +#line 9 "imp_1199.xml" + +#include + +#include "config.h" + +#ifdef FFTW3 + +#include + +typedef fftwf_plan fft_plan; +typedef float fftw_real; +#define local_malloc(s) fftwf_malloc(s) +#define local_free(s) fftwf_free(s) + +#else + +#ifdef EXPLICIT_S +#include +#else +#include +#endif //EXPLICIT_S + +typedef rfftw_plan fft_plan; +#define local_malloc(s) malloc(s) +#define local_free(s) free(s) + +#endif //FFTW3 + +#include "ladspa-util.h" + +#define MAX_FFT_LENGTH 16384 +#define SEG_LENGTH 128 + +#define IMP_LENGTH(a) (sizeof(a) / sizeof(float)) + +#define MK_IMP(i) impulse2freq(c, i, IMP_LENGTH(i), impulse_freq[c]); c++ + +inline void impulse2freq(int id, float *imp, unsigned int length, fftw_real *out); + +#include "impulses/all.h" + +fft_plan plan_rc[IMPULSES], + plan_cr[IMPULSES]; + +static fftw_real *real_in, *real_out, *comp_in, *comp_out; + +unsigned int fft_length[IMPULSES]; + +inline void impulse2freq(int id, float *imp, unsigned int length, fftw_real *out) +{ + fftw_real impulse_time[MAX_FFT_LENGTH]; +#ifdef FFTW3 + fft_plan tmp_plan; +#endif + unsigned int i, fftl = 128; + + while (fftl < length+SEG_LENGTH) { + fftl *= 2; + } + + fft_length[id] = fftl; +#ifdef FFTW3 + plan_rc[id] = fftwf_plan_r2r_1d(fftl, real_in, comp_out, FFTW_R2HC, FFTW_MEASURE); + plan_cr[id] = fftwf_plan_r2r_1d(fftl, comp_in, real_out, FFTW_HC2R, FFTW_MEASURE); + tmp_plan = fftwf_plan_r2r_1d(fftl, impulse_time, out, FFTW_R2HC, FFTW_MEASURE); +#else + plan_rc[id] = rfftw_create_plan(fftl, FFTW_REAL_TO_COMPLEX, FFTW_ESTIMATE); + plan_cr[id] = rfftw_create_plan(fftl, FFTW_COMPLEX_TO_REAL, FFTW_ESTIMATE); +#endif + + for (i=0; iblock_freq; + fftw_real *block_time = plugin_data->block_time; + unsigned int count = plugin_data->count; + fftw_real **impulse_freq = plugin_data->impulse_freq; + unsigned long in_ptr = plugin_data->in_ptr; + fftw_real *op = plugin_data->op; + LADSPA_Data *opc = plugin_data->opc; + unsigned long out_ptr = plugin_data->out_ptr; + LADSPA_Data *overlap = plugin_data->overlap; +#line 161 "imp_1199.xml" + memset(block_time, 0, MAX_FFT_LENGTH * sizeof(fftw_real)); + memset(block_freq, 0, MAX_FFT_LENGTH * sizeof(fftw_real)); + memset(op, 0, MAX_FFT_LENGTH * sizeof(fftw_real)); + memset(overlap, 0, (MAX_FFT_LENGTH - SEG_LENGTH) * sizeof(float)); + memset(opc, 0, SEG_LENGTH * sizeof(LADSPA_Data)); + + in_ptr = 0; + out_ptr = 0; + count = 0; + plugin_data->block_freq = block_freq; + plugin_data->block_time = block_time; + plugin_data->count = count; + plugin_data->impulse_freq = impulse_freq; + plugin_data->in_ptr = in_ptr; + plugin_data->op = op; + plugin_data->opc = opc; + plugin_data->out_ptr = out_ptr; + plugin_data->overlap = overlap; + +} + +static void cleanupImp(LADSPA_Handle instance) { +#line 173 "imp_1199.xml" + Imp *plugin_data = (Imp *)instance; + local_free(plugin_data->block_time); + local_free(plugin_data->block_freq); + local_free(plugin_data->op); + local_free(plugin_data->overlap); + local_free(plugin_data->opc); + free(instance); +} + +static void connectPortImp( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + Imp *plugin; + + plugin = (Imp *)instance; + switch (port) { + case IMP_IMPULSE: + plugin->impulse = data; + break; + case IMP_HIGH_LAT: + plugin->high_lat = data; + break; + case IMP_GAIN: + plugin->gain = data; + break; + case IMP_INPUT: + plugin->input = data; + break; + case IMP_OUTPUT: + plugin->output = data; + break; + case IMP_LATENCY: + plugin->latency = data; + break; + } +} + +static LADSPA_Handle instantiateImp( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + Imp *plugin_data = (Imp *)malloc(sizeof(Imp)); + fftw_real *block_freq = NULL; + fftw_real *block_time = NULL; + unsigned int count; + fftw_real **impulse_freq = NULL; + unsigned long in_ptr; + fftw_real *op = NULL; + LADSPA_Data *opc = NULL; + unsigned long out_ptr; + LADSPA_Data *overlap = NULL; + +#line 135 "imp_1199.xml" + unsigned int i; + + impulse_freq = local_malloc(IMPULSES * sizeof(fftw_real *)); + for (i=0; iblock_freq = block_freq; + plugin_data->block_time = block_time; + plugin_data->count = count; + plugin_data->impulse_freq = impulse_freq; + plugin_data->in_ptr = in_ptr; + plugin_data->op = op; + plugin_data->opc = opc; + plugin_data->out_ptr = out_ptr; + plugin_data->overlap = overlap; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runImp(LADSPA_Handle instance, unsigned long sample_count) { + Imp *plugin_data = (Imp *)instance; + + /* Impulse ID (float value) */ + const LADSPA_Data impulse = *(plugin_data->impulse); + + /* High latency mode (float value) */ + const LADSPA_Data high_lat = *(plugin_data->high_lat); + + /* Gain (dB) (float value) */ + const LADSPA_Data gain = *(plugin_data->gain); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + fftw_real * block_freq = plugin_data->block_freq; + fftw_real * block_time = plugin_data->block_time; + unsigned int count = plugin_data->count; + fftw_real ** impulse_freq = plugin_data->impulse_freq; + unsigned long in_ptr = plugin_data->in_ptr; + fftw_real * op = plugin_data->op; + LADSPA_Data * opc = plugin_data->opc; + unsigned long out_ptr = plugin_data->out_ptr; + LADSPA_Data * overlap = plugin_data->overlap; + +#line 181 "imp_1199.xml" + unsigned long i, pos, ipos, limit; + unsigned int im; + unsigned int len; + fftw_real tmp; + fftw_real *imp_freq; + float coef; + + im = f_round(impulse) - 1; + if (im >= IMPULSES) { + im = 0; + } + + coef = pow(10.0f, gain * 0.05f) / (float)fft_length[im]; + + imp_freq = impulse_freq[im]; + + for (pos = 0; pos < sample_count; pos += SEG_LENGTH) { + limit = pos + SEG_LENGTH; + + for (ipos = pos; ipos < sample_count && iposcount = 1; + out_ptr = 0; + } + } + } + + for (ipos = pos; ipos < sample_count && iposin_ptr = in_ptr; + plugin_data->out_ptr = out_ptr; + + *(plugin_data->latency) = SEG_LENGTH; +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainImp(LADSPA_Handle instance, LADSPA_Data gain) { + ((Imp *)instance)->run_adding_gain = gain; +} + +static void runAddingImp(LADSPA_Handle instance, unsigned long sample_count) { + Imp *plugin_data = (Imp *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Impulse ID (float value) */ + const LADSPA_Data impulse = *(plugin_data->impulse); + + /* High latency mode (float value) */ + const LADSPA_Data high_lat = *(plugin_data->high_lat); + + /* Gain (dB) (float value) */ + const LADSPA_Data gain = *(plugin_data->gain); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + fftw_real * block_freq = plugin_data->block_freq; + fftw_real * block_time = plugin_data->block_time; + unsigned int count = plugin_data->count; + fftw_real ** impulse_freq = plugin_data->impulse_freq; + unsigned long in_ptr = plugin_data->in_ptr; + fftw_real * op = plugin_data->op; + LADSPA_Data * opc = plugin_data->opc; + unsigned long out_ptr = plugin_data->out_ptr; + LADSPA_Data * overlap = plugin_data->overlap; + +#line 181 "imp_1199.xml" + unsigned long i, pos, ipos, limit; + unsigned int im; + unsigned int len; + fftw_real tmp; + fftw_real *imp_freq; + float coef; + + im = f_round(impulse) - 1; + if (im >= IMPULSES) { + im = 0; + } + + coef = pow(10.0f, gain * 0.05f) / (float)fft_length[im]; + + imp_freq = impulse_freq[im]; + + for (pos = 0; pos < sample_count; pos += SEG_LENGTH) { + limit = pos + SEG_LENGTH; + + for (ipos = pos; ipos < sample_count && iposcount = 1; + out_ptr = 0; + } + } + } + + for (ipos = pos; ipos < sample_count && iposin_ptr = in_ptr; + plugin_data->out_ptr = out_ptr; + + *(plugin_data->latency) = SEG_LENGTH; +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + impDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (impDescriptor) { + impDescriptor->UniqueID = 1199; + impDescriptor->Label = "imp"; + impDescriptor->Properties = + 0; + impDescriptor->Name = + D_("Impulse convolver"); + impDescriptor->Maker = + "Steve Harris "; + impDescriptor->Copyright = + "GPL"; + impDescriptor->PortCount = 6; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(6, + sizeof(LADSPA_PortDescriptor)); + impDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(6, + sizeof(LADSPA_PortRangeHint)); + impDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(6, sizeof(char*)); + impDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Impulse ID */ + port_descriptors[IMP_IMPULSE] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[IMP_IMPULSE] = + D_("Impulse ID"); + port_range_hints[IMP_IMPULSE].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_INTEGER | LADSPA_HINT_DEFAULT_1; + port_range_hints[IMP_IMPULSE].LowerBound = 1; + port_range_hints[IMP_IMPULSE].UpperBound = IMPULSES; + + /* Parameters for High latency mode */ + port_descriptors[IMP_HIGH_LAT] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[IMP_HIGH_LAT] = + D_("High latency mode"); + port_range_hints[IMP_HIGH_LAT].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_INTEGER | LADSPA_HINT_DEFAULT_0; + port_range_hints[IMP_HIGH_LAT].LowerBound = 0; + port_range_hints[IMP_HIGH_LAT].UpperBound = 1; + + /* Parameters for Gain (dB) */ + port_descriptors[IMP_GAIN] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[IMP_GAIN] = + D_("Gain (dB)"); + port_range_hints[IMP_GAIN].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[IMP_GAIN].LowerBound = -90; + port_range_hints[IMP_GAIN].UpperBound = +24; + + /* Parameters for Input */ + port_descriptors[IMP_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[IMP_INPUT] = + D_("Input"); + port_range_hints[IMP_INPUT].HintDescriptor = 0; + + /* Parameters for Output */ + port_descriptors[IMP_OUTPUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[IMP_OUTPUT] = + D_("Output"); + port_range_hints[IMP_OUTPUT].HintDescriptor = 0; + + /* Parameters for latency */ + port_descriptors[IMP_LATENCY] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_CONTROL; + port_names[IMP_LATENCY] = + D_("latency"); + port_range_hints[IMP_LATENCY].HintDescriptor = 0; + + impDescriptor->activate = activateImp; + impDescriptor->cleanup = cleanupImp; + impDescriptor->connect_port = connectPortImp; + impDescriptor->deactivate = NULL; + impDescriptor->instantiate = instantiateImp; + impDescriptor->run = runImp; + impDescriptor->run_adding = runAddingImp; + impDescriptor->set_run_adding_gain = setRunAddingGainImp; + } +} + +void _fini() { + if (impDescriptor) { + free((LADSPA_PortDescriptor *)impDescriptor->PortDescriptors); + free((char **)impDescriptor->PortNames); + free((LADSPA_PortRangeHint *)impDescriptor->PortRangeHints); + free(impDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/impulse_1885.c b/plugins/LadspaEffect/swh/impulse_1885.c new file mode 100644 index 000000000..398aea098 --- /dev/null +++ b/plugins/LadspaEffect/swh/impulse_1885.c @@ -0,0 +1,268 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + +#line 10 "impulse_1885.xml" + +#include "ladspa-util.h" + +#define LOG001 -6.9077552789f + +#define IMPULSE_FC_FREQUENCY 0 +#define IMPULSE_FC_OUT 1 + +static LADSPA_Descriptor *impulse_fcDescriptor = NULL; + +typedef struct { + LADSPA_Data *frequency; + LADSPA_Data *out; + float phase; + LADSPA_Data sample_rate; + LADSPA_Data run_adding_gain; +} Impulse_fc; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return impulse_fcDescriptor; + default: + return NULL; + } +} + +static void activateImpulse_fc(LADSPA_Handle instance) { + Impulse_fc *plugin_data = (Impulse_fc *)instance; + float phase = plugin_data->phase; + LADSPA_Data sample_rate = plugin_data->sample_rate; +#line 29 "impulse_1885.xml" + phase = 0.f; + plugin_data->phase = phase; + plugin_data->sample_rate = sample_rate; + +} + +static void cleanupImpulse_fc(LADSPA_Handle instance) { + free(instance); +} + +static void connectPortImpulse_fc( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + Impulse_fc *plugin; + + plugin = (Impulse_fc *)instance; + switch (port) { + case IMPULSE_FC_FREQUENCY: + plugin->frequency = data; + break; + case IMPULSE_FC_OUT: + plugin->out = data; + break; + } +} + +static LADSPA_Handle instantiateImpulse_fc( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + Impulse_fc *plugin_data = (Impulse_fc *)malloc(sizeof(Impulse_fc)); + float phase; + LADSPA_Data sample_rate; + +#line 24 "impulse_1885.xml" + sample_rate = s_rate; + phase = 0.f; + + plugin_data->phase = phase; + plugin_data->sample_rate = sample_rate; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runImpulse_fc(LADSPA_Handle instance, unsigned long sample_count) { + Impulse_fc *plugin_data = (Impulse_fc *)instance; + + /* Frequency (Hz) (float value) */ + const LADSPA_Data frequency = *(plugin_data->frequency); + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const out = plugin_data->out; + float phase = plugin_data->phase; + LADSPA_Data sample_rate = plugin_data->sample_rate; + +#line 33 "impulse_1885.xml" + int i; + float phase_step = frequency / sample_rate; + + for (i=0; i 1.f) { + phase -= 1.f; + buffer_write(out[i], 1.f); + } else { + buffer_write(out[i], 0.f); + } + phase += phase_step; + } + + plugin_data->phase = phase; +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainImpulse_fc(LADSPA_Handle instance, LADSPA_Data gain) { + ((Impulse_fc *)instance)->run_adding_gain = gain; +} + +static void runAddingImpulse_fc(LADSPA_Handle instance, unsigned long sample_count) { + Impulse_fc *plugin_data = (Impulse_fc *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Frequency (Hz) (float value) */ + const LADSPA_Data frequency = *(plugin_data->frequency); + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const out = plugin_data->out; + float phase = plugin_data->phase; + LADSPA_Data sample_rate = plugin_data->sample_rate; + +#line 33 "impulse_1885.xml" + int i; + float phase_step = frequency / sample_rate; + + for (i=0; i 1.f) { + phase -= 1.f; + buffer_write(out[i], 1.f); + } else { + buffer_write(out[i], 0.f); + } + phase += phase_step; + } + + plugin_data->phase = phase; +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + impulse_fcDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (impulse_fcDescriptor) { + impulse_fcDescriptor->UniqueID = 1885; + impulse_fcDescriptor->Label = "impulse_fc"; + impulse_fcDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + impulse_fcDescriptor->Name = + D_("Nonbandlimited single-sample impulses (Frequency: Control)"); + impulse_fcDescriptor->Maker = + "Andy Wingo "; + impulse_fcDescriptor->Copyright = + "GPL"; + impulse_fcDescriptor->PortCount = 2; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(2, + sizeof(LADSPA_PortDescriptor)); + impulse_fcDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(2, + sizeof(LADSPA_PortRangeHint)); + impulse_fcDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(2, sizeof(char*)); + impulse_fcDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Frequency (Hz) */ + port_descriptors[IMPULSE_FC_FREQUENCY] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[IMPULSE_FC_FREQUENCY] = + D_("Frequency (Hz)"); + port_range_hints[IMPULSE_FC_FREQUENCY].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW; + port_range_hints[IMPULSE_FC_FREQUENCY].LowerBound = 0; + + /* Parameters for Output */ + port_descriptors[IMPULSE_FC_OUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[IMPULSE_FC_OUT] = + D_("Output"); + port_range_hints[IMPULSE_FC_OUT].HintDescriptor = 0; + + impulse_fcDescriptor->activate = activateImpulse_fc; + impulse_fcDescriptor->cleanup = cleanupImpulse_fc; + impulse_fcDescriptor->connect_port = connectPortImpulse_fc; + impulse_fcDescriptor->deactivate = NULL; + impulse_fcDescriptor->instantiate = instantiateImpulse_fc; + impulse_fcDescriptor->run = runImpulse_fc; + impulse_fcDescriptor->run_adding = runAddingImpulse_fc; + impulse_fcDescriptor->set_run_adding_gain = setRunAddingGainImpulse_fc; + } +} + +void _fini() { + if (impulse_fcDescriptor) { + free((LADSPA_PortDescriptor *)impulse_fcDescriptor->PortDescriptors); + free((char **)impulse_fcDescriptor->PortNames); + free((LADSPA_PortRangeHint *)impulse_fcDescriptor->PortRangeHints); + free(impulse_fcDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/impulses/01-unit.h b/plugins/LadspaEffect/swh/impulses/01-unit.h new file mode 100644 index 000000000..653bbbfd6 --- /dev/null +++ b/plugins/LadspaEffect/swh/impulses/01-unit.h @@ -0,0 +1 @@ +float unit[] = { 1.0f }; diff --git a/plugins/LadspaEffect/swh/impulses/02-steves-flat.h b/plugins/LadspaEffect/swh/impulses/02-steves-flat.h new file mode 100644 index 000000000..3ac42c65e --- /dev/null +++ b/plugins/LadspaEffect/swh/impulses/02-steves-flat.h @@ -0,0 +1,452 @@ +float steves_flat[] = { + -0.0000747256300, +0.0004581413362, -0.0004988051100, +0.0080212860617, + +0.0409775662455, +0.0272593302189, -0.0347729749807, +0.0206228755550, + +0.0830415514680, +0.0981127192346, +0.1165879969154, +0.0534580725429, + -0.0129770915478, -0.0194366926723, +0.0335325785381, +0.0388072508561, + -0.0213017054305, -0.0292409720411, +0.0075425029238, +0.0147545640387, + -0.0226343413216, -0.0257136599758, -0.0429779903773, -0.0507456071427, + -0.0301750856554, -0.0044625067799, +0.0074273297400, -0.0128299178065, + -0.0208570418077, -0.0048472053918, +0.0133211840459, -0.0247062189553, + -0.0180474936312, +0.0028139734788, +0.0078072570979, +0.0109728907727, + +0.0216466772225, +0.0407098426493, +0.0143495984063, -0.0056788739734, + -0.0043740007291, -0.0220882416929, -0.0512888670834, -0.0431623827872, + -0.0180879555998, -0.0222443669420, -0.0285499617727, -0.0158642771161, + -0.0133201606034, -0.0127702266735, -0.0090371884921, -0.0166105820447, + -0.0185939680423, -0.0080760329637, +0.0117406879686, +0.0131132236554, + -0.0026151664027, -0.0020506304148, +0.0098572965115, +0.0150237291004, + +0.0066948773059, -0.0022852435224, -0.0017129380290, +0.0013233096022, + -0.0018295526796, -0.0109795215200, -0.0199344166820, -0.0208222303881, + -0.0166376527884, -0.0175138915175, -0.0247779607485, -0.0277080299492, + -0.0245018478174, -0.0221699872648, -0.0199550440689, -0.0164751994994, + -0.0121488969008, -0.0113359097267, -0.0116449457557, -0.0095046272878, + -0.0111194014401, -0.0032949332310, +0.0129679526493, +0.0263678263579, + +0.0308535119214, +0.0248421204281, +0.0204144394813, +0.0190867045768, + +0.0219311074160, +0.0156608429323, +0.0037536223253, -0.0030656247219, + -0.0042825540871, -0.0021690468972, -0.0038422869371, -0.0138509230290, + -0.0235538240496, -0.0229926610943, -0.0196150165079, -0.0135943131403, + -0.0107564689746, -0.0127025354015, -0.0145724203168, -0.0171933814148, + -0.0138159530484, -0.0098164597618, -0.0087455221354, -0.0064264473918, + -0.0074598348126, -0.0121645223990, -0.0126989461487, -0.0097513631294, + -0.0067988070496, -0.0041353226856, -0.0043423317074, -0.0043674564704, + -0.0042041094728, -0.0019608702878, +0.0039238018742, +0.0101425627557, + +0.0102753362455, -0.0001845221427, -0.0073682584377, -0.0037386166578, + -0.0014888908730, -0.0020602161681, -0.0015174030822, +0.0007402363543, + +0.0053005178150, +0.0095026236493, +0.0096782375272, +0.0012873738392, + -0.0065135408053, -0.0044955596094, -0.0018158443313, -0.0040755883096, + -0.0083392303543, -0.0100848320169, -0.0083145812745, -0.0083637785308, + -0.0106060663470, -0.0145516776119, -0.0176741826058, -0.0173162520290, + -0.0160623778742, -0.0133682911741, -0.0081434215284, -0.0041882245115, + -0.0008310055067, +0.0048951197424, +0.0074982066542, +0.0052300877557, + +0.0007194071608, -0.0022146981451, -0.0038053565623, -0.0023047321511, + +0.0034375951826, +0.0083622505756, +0.0096198581294, +0.0133878518767, + +0.0194724842890, +0.0199918879565, +0.0158011264643, +0.0082251094414, + +0.0032514297690, +0.0029124112346, +0.0047323781608, +0.0047874710145, + +0.0029745240314, +0.0026771350520, +0.0030138472406, +0.0034298400919, + +0.0052113486892, +0.0017789716155, -0.0037898607956, -0.0057119988767, + -0.0046561534051, -0.0026514913615, +0.0001813941596, +0.0039354200955, + +0.0059624969456, +0.0080446810641, +0.0094737078283, +0.0084286012842, + +0.0058381560351, +0.0058541130701, +0.0100478007400, +0.0152600575526, + +0.0183627856252, +0.0187877732285, +0.0182146316856, +0.0176063327727, + +0.0157871009940, +0.0123767495296, +0.0075541788029, +0.0102779164716, + +0.0156277036143, +0.0113348574559, +0.0059646591451, +0.0026247377412, + +0.0011803881862, +0.0007245676119, -0.0023045880036, -0.0055248676796, + -0.0073599555901, -0.0046368665816, -0.0018872113446, +0.0023064763253, + +0.0029218095961, +0.0000173408440, -0.0015071398404, +0.0007385642527, + +0.0051101721475, +0.0005332994063, -0.0027207250036, +0.0007673215115, + +0.0019155073337, +0.0005625467630, +0.0038801975091, +0.0080619786638, + +0.0101137622527, +0.0115505873507, +0.0122711332709, +0.0097186562515, + +0.0040092952600, +0.0020222767666, +0.0011850873676, -0.0003067729262, + +0.0031021370713, +0.0066621848428, +0.0034938556252, +0.0013637715695, + +0.0059936326252, +0.0090966634051, +0.0103580331862, +0.0138644439855, + +0.0122683368259, +0.0051846238984, +0.0018034765478, +0.0035777345683, + +0.0070538745683, +0.0106506364958, +0.0122065988102, +0.0037282525127, + -0.0097867799637, -0.0191162978863, -0.0160759997340, -0.0059400965538, + +0.0007624637690, +0.0021018313096, -0.0012120572080, -0.0009874334643, + +0.0035154632092, +0.0026084779976, -0.0023815911511, -0.0018048459407, + +0.0015878619710, +0.0115002657509, +0.0151442933688, +0.0055393400048, + -0.0045969235417, -0.0052492592612, +0.0039214666977, +0.0093624266058, + +0.0107736656711, +0.0118124874208, +0.0079349854547, +0.0072958103253, + +0.0103136648428, +0.0080157508295, +0.0028874306179, -0.0016525261632, + -0.0005321318174, -0.0001136019843, -0.0043761485139, -0.0086800795514, + -0.0102800930859, -0.0076825846493, -0.0080295744946, -0.0099791869287, + -0.0068291066784, +0.0014600182963, +0.0084357221294, +0.0083239508077, + +0.0105090556433, +0.0209676743712, +0.0155793135804, -0.0057499238634, + -0.0117800400073, -0.0010136537424, +0.0205021238960, +0.0214418880593, + +0.0047571281427, -0.0013221275998, -0.0028140167231, +0.0035838463857, + +0.0027972812950, -0.0005072953482, -0.0061055625079, -0.0190592302237, + -0.0219839515828, -0.0133021999299, -0.0048697787582, -0.0140393515453, + -0.0313880365732, -0.0322599220738, -0.0222278621487, -0.0185733694837, + -0.0202459320339, -0.0219478572588, -0.0174627050375, -0.0110820962842, + -0.0042020625901, +0.0016826095719, -0.0021050025357, -0.0088914418017, + -0.0064301231318, +0.0049224643640, +0.0134595071826, +0.0118207758549, + +0.0002952411935, -0.0065936863495, -0.0085117450798, -0.0083368951778, + -0.0089617853724, -0.0143826512358, -0.0198868194547, -0.0229201985671, + -0.0210879791753, -0.0166534224329, -0.0129672463313, -0.0137536816904, + -0.0146976693507, -0.0094222618851, -0.0008786171499, +0.0055761983059, + +0.0032591560302, -0.0042438795369, -0.0064698643664, -0.0012681158452, + +0.0030560101391, -0.0009312883398, -0.0098521937195, -0.0142323206820, + -0.0130993279178, -0.0097967404982, -0.0036743416602, -0.0035161983579, + -0.0096935603180, -0.0169815290653, -0.0206942569819, -0.0170324560810, + -0.0137159873386, -0.0152915824281, -0.0178534433942, -0.0172026788742, + -0.0112864530073, -0.0078368071632, -0.0092339486856, -0.0084639172164, + -0.0059688538138, -0.0063049894148, -0.0084049468174, -0.0051594558912, + -0.0027000255417, -0.0042830874293, -0.0049426881403, -0.0025534139722, + -0.0001873474172, -0.0033615578186, -0.0071660206711, -0.0086420104172, + -0.0086939608742, -0.0076917667920, -0.0092880757570, -0.0133662731209, + -0.0171444003785, -0.0175337981717, -0.0124645060181, -0.0072337119444, + -0.0054154171185, -0.0091645132382, -0.0130219644039, -0.0103368580411, + -0.0069447987896, -0.0041669772926, -0.0047664111874, -0.0075998588803, + -0.0075558941487, -0.0055831173458, -0.0036531376868, -0.0052074999734, + -0.0109020859323, -0.0157361883930, -0.0172222539903, -0.0132375501524, + -0.0073726981560, -0.0039935544438, -0.0017452701258, -0.0045152500435, + -0.0077802295985, -0.0073526761838, -0.0040718693253, -0.0033338384160, + -0.0062312295671, -0.0082092388936, -0.0062941063410, -0.0002929348464, + +0.0062345161112, +0.0112047939226, +0.0105847326421, +0.0061261034075, + +0.0013483334619, -0.0012494920967, -0.0021418608380, -0.0017150569855, + -0.0013053633422, -0.0042484057424, -0.0095094562007, -0.0152183559238, + -0.0173283747630, -0.0166015008053, -0.0156999643362, -0.0152454122527, + -0.0136559646687, -0.0100450619528, -0.0046197563736, -0.0007542329952, + +0.0005524420822, +0.0011462686711, +0.0022597439782, +0.0067100415357, + +0.0091015643918, +0.0071974014002, +0.0028650158114, -0.0008570528089, + -0.0032883889734, -0.0042249530810, -0.0054351796264, -0.0063627778114, + -0.0045259024813, -0.0001674119335, +0.0021612341487, -0.0010521841451, + -0.0036361139661, -0.0042102357062, -0.0033228832696, -0.0043576544982, + -0.0077593427473, -0.0134104973168, -0.0186017375466, -0.0169262632346, + -0.0093301521681, -0.0030828070036, -0.0003904933071, +0.0013699122177, + +0.0039354489250, +0.0071919814849, +0.0131733183990, +0.0198125118501, + +0.0211508847787, +0.0178021271826, +0.0087791515526, -0.0019948024123, + -0.0066499467920, +0.0002749885877, +0.0121399021499, +0.0178126931330, + +0.0139416201088, +0.0038776172842, +0.0020008133289, +0.0095989280339, + +0.0162674841596, +0.0141164411802, +0.0050923556203, -0.0037555250605, + -0.0062519434426, +0.0001227985417, +0.0053736578307, +0.0025464228597, + -0.0019400555103, +0.0007114070218, +0.0095546029359, +0.0180404160302, + +0.0205341676989, +0.0131460314365, +0.0017651335357, -0.0021776524534, + +0.0021499907086, +0.0080382809528, +0.0064767545768, -0.0005905400447, + -0.0056409922297, -0.0057271342757, -0.0010248971826, +0.0001965295586, + -0.0016733409420, -0.0041532112866, -0.0048168336892, -0.0004342274051, + +0.0046055146832, +0.0059345901511, +0.0035574098888, +0.0035169479202, + +0.0042726223821, +0.0035716804075, +0.0063788069202, +0.0102540601983, + +0.0099536153108, +0.0069103044933, +0.0051097541221, +0.0102746875865, + +0.0167526818247, +0.0172246468259, +0.0113766599879, +0.0052510322660, + +0.0074379389347, +0.0136055854099, +0.0139783198489, +0.0088761622563, + +0.0036880932527, +0.0014514559843, +0.0044967560266, +0.0082283815707, + +0.0044520849758, -0.0028727564873, -0.0044896784256, +0.0009698043277, + +0.0073500815441, +0.0074535356034, -0.0004922752660, -0.0079106102539, + -0.0085194136820, -0.0001654659541, +0.0077844819250, +0.0062742429311, + +0.0033696732757, +0.0047521694970, +0.0086698163096, +0.0097220581125, + +0.0086553439843, +0.0097692084861, +0.0108593176179, +0.0076238737146, + +0.0007481355913, -0.0043912118404, -0.0026930200145, +0.0024288280121, + +0.0053480285538, +0.0054991375006, +0.0035035711100, +0.0035630171935, + +0.0057042293712, +0.0101991259057, +0.0127147013797, +0.0076009976385, + +0.0010203565623, -0.0001680461790, +0.0049075307703, +0.0106729792285, + +0.0125028778597, +0.0112498685840, +0.0075985903894, +0.0056879119686, + +0.0070147531644, +0.0077355441330, +0.0051466124232, +0.0038549430133, + +0.0067380636457, +0.0126514786530, +0.0161628192684, +0.0139460886554, + +0.0092421650459, +0.0056117016288, +0.0070535286167, +0.0114364808537, + +0.0131186003265, +0.0097553271620, +0.0075059040859, +0.0059946560653, + +0.0036953726590, +0.0036144487231, +0.0059943245284, +0.0052993790556, + +0.0005088377170, -0.0016146876651, -0.0013390360024, -0.0022557511149, + -0.0036896932805, -0.0032728643773, -0.0017285635272, +0.0000136218597, + -0.0015652021161, -0.0027440191040, -0.0008943291354, +0.0010105690036, + +0.0016489369117, +0.0001165425768, +0.0000480584970, +0.0023770649456, + +0.0070233587195, +0.0107160646651, +0.0102371950387, +0.0077407045840, + +0.0053095269807, +0.0051501151874, +0.0069093963688, +0.0080905052890, + +0.0057846055502, +0.0027135609141, +0.0028974199819, +0.0049991071439, + +0.0057285613277, +0.0039797740230, +0.0024058510339, +0.0023427868694, + +0.0012131959674, -0.0003557972056, -0.0000877853168, +0.0006679323881, + +0.0009092627304, -0.0021226028428, -0.0055329398924, -0.0054007429891, + -0.0038617034921, -0.0017439439770, +0.0014234338730, +0.0027731223144, + +0.0019790471826, +0.0000038054716, -0.0009416092406, -0.0005184378851, + -0.0023182819371, -0.0036341824002, -0.0023393273495, -0.0012571462842, + -0.0015296123047, -0.0029763979371, -0.0035542386614, -0.0026193754849, + -0.0020068674885, -0.0022936184426, -0.0036060449722, -0.0044930658718, + -0.0035938789940, -0.0034391231378, -0.0044602580919, -0.0044104410060, + -0.0027260872588, -0.0023267577606, -0.0007445463386, +0.0014639246711, + +0.0014658562358, +0.0000063856977, +0.0005639449855, +0.0039736477896, + +0.0051974385369, +0.0026448029565, -0.0009916713761, -0.0021272587799, + -0.0021297669323, -0.0028823566554, -0.0053606269722, -0.0089441994800, + -0.0103258164075, -0.0078037543337, -0.0038114539661, -0.0041416939686, + -0.0077367549649, -0.0093767691983, -0.0049238914160, +0.0003043656771, + +0.0001129100798, -0.0036184848295, -0.0057568284885, -0.0027392046046, + +0.0005968824982, +0.0009122033216, -0.0021714685623, -0.0062496226820, + -0.0061561724002, -0.0004889166481, +0.0049314302866, +0.0043125510073, + -0.0003473790411, -0.0025395470629, -0.0013720167594, -0.0005259190967, + -0.0017093776070, -0.0045928297775, -0.0071139693120, -0.0087535366904, + -0.0096900431391, -0.0110237601306, -0.0129355340653, -0.0138453445526, + -0.0132649524329, -0.0104173783664, -0.0064308871088, -0.0045004317666, + -0.0052939591415, -0.0071689756784, -0.0067878807328, -0.0048131867787, + -0.0042411984099, -0.0051894528114, -0.0075691412261, -0.0084582810822, + -0.0058850325296, -0.0035841923386, -0.0038244704099, -0.0069623558525, + -0.0100728245998, -0.0098737292310, -0.0070272362648, -0.0038863525719, + -0.0040507806687, -0.0070519862467, -0.0083977827279, -0.0079154247533, + -0.0060595508936, -0.0045879864486, -0.0052839841923, -0.0070780912080, + -0.0070135135030, -0.0030664607727, +0.0015887556808, +0.0033065946965, + +0.0003601071911, -0.0035770426638, -0.0033092037509, +0.0005350435804, + +0.0020688793821, -0.0000537234607, -0.0025886578307, -0.0040806622721, + -0.0041601591560, -0.0025284045260, -0.0024950922334, -0.0062667617195, + -0.0087170820000, -0.0056856632805, -0.0010811576239, -0.0014468432914, + -0.0051189218501, -0.0076374379154, -0.0073133962189, -0.0039924733434, + -0.0012206483495, -0.0015230248017, -0.0029420910314, -0.0042203980459, + -0.0040218792624, -0.0029184509794, -0.0018115775901, -0.0014781231173, + -0.0015003793615, +0.0012770529383, +0.0043077365091, +0.0045503065115, + +0.0034476998646, +0.0026506408960, +0.0023141593422, +0.0018534954401, + -0.0000894430036, -0.0026278657231, -0.0045251096747, -0.0036073422926, + -0.0003843238307, +0.0026418335345, +0.0042104230967, +0.0029565201125, + +0.0021220550859, +0.0029113445490, +0.0050072226010, +0.0053226587412, + +0.0025999733446, -0.0009697466687, -0.0025950291137, -0.0010905704015, + +0.0019591549432, +0.0038280884909, +0.0019455330834, -0.0007281568634, + -0.0010698997703, +0.0009943813337, +0.0020717046566, +0.0005126287739, + -0.0013075543712, -0.0017547982201, +0.0009649898295, +0.0055851930568, + +0.0079210320580, +0.0063426261076, +0.0030034542660, +0.0025351650048, + +0.0044688204039, +0.0048071470339, +0.0022986491620, -0.0005660495272, + -0.0018098622455, -0.0006422886965, +0.0012945379287, +0.0020593224583, + +0.0016145435187, +0.0012885414268, +0.0024348965865, +0.0049348321475, + +0.0067883564172, +0.0056932165659, +0.0028044886288, +0.0007815055429, + +0.0011305566856, +0.0014630453761, +0.0011665501076, +0.0015016910967, + +0.0028065787545, +0.0054792596759, +0.0087719874631, +0.0120228406457, + +0.0135962735357, +0.0137770046203, +0.0119019448392, +0.0096385683664, + +0.0110317170266, +0.0123311415260, +0.0111144283809, +0.0085588377932, + +0.0070326705937, +0.0070931257037, +0.0065731598646, +0.0063079300060, + +0.0058184800157, +0.0048052875417, +0.0047790096058, +0.0061594012854, + +0.0086919572358, +0.0103546024958, +0.0107134700254, +0.0092432029008, + +0.0072884588464, +0.0054407869311, +0.0034426259021, +0.0034245066663, + +0.0029076688089, +0.0023881786542, +0.0028031192346, +0.0037894139407, + +0.0069190974389, +0.0097940449565, +0.0104857903724, +0.0087359652116, + +0.0063516929335, +0.0061562733035, +0.0055411274232, +0.0037322597896, + +0.0020101540326, +0.0019343328875, +0.0036089134909, +0.0060746718779, + +0.0091017950254, +0.0082511711584, +0.0021507114426, -0.0019754146868, + +0.0018929339661, +0.0086581836735, +0.0081004802370, +0.0025738972128, + -0.0008139241270, -0.0007002356554, +0.0033556622201, +0.0075122321245, + +0.0080494234897, +0.0048872493337, +0.0013343512358, +0.0040446976796, + +0.0101389735042, +0.0143418721451, +0.0120999302805, +0.0055178477364, + +0.0026746845586, +0.0037804768476, +0.0060732736554, +0.0071600962430, + +0.0063961333495, +0.0057587023942, +0.0069891527170, +0.0104688963833, + +0.0129541722285, +0.0110105130520, +0.0074211026046, +0.0051097685369, + +0.0042494147690, +0.0028874306179, +0.0008414417255, +0.0000516189202, + +0.0015505424002, +0.0032787311463, +0.0044769646904, +0.0063625327618, + +0.0081126894595, +0.0083391438658, +0.0069201352950, +0.0052288769238, + +0.0049338951935, +0.0061401288767, +0.0081555298476, +0.0084563639323, + +0.0053476105296, +0.0018247093519, +0.0021899337497, +0.0060935118464, + +0.0099533414317, +0.0101412798501, +0.0063866629129, +0.0023150818815, + +0.0010860874401, +0.0030231735296, +0.0056132872418, +0.0057434228489, + +0.0038067115405, +0.0022620935683, +0.0037833165369, +0.0069945726312, + +0.0056246604135, +0.0002037368924, -0.0019557819117, +0.0014063957376, + +0.0057861767485, +0.0071906985804, +0.0049572901971, +0.0027254097690, + +0.0026091122430, +0.0057198548694, +0.0096820574148, +0.0101045368658, + +0.0069566908888, +0.0011590112370, -0.0020920437509, -0.0021247506288, + +0.0011814116276, +0.0054561673797, +0.0082199634063, +0.0076318306094, + +0.0029954685405, -0.0022127809952, -0.0060975911971, -0.0073766766034, + -0.0050588847654, -0.0033399790629, -0.0043015958609, -0.0041356253942, + -0.0030925080738, -0.0009980138295, +0.0014213005030, +0.0031680120955, + +0.0051382375018, +0.0060889423978, +0.0046977108888, +0.0025613708682, + +0.0018127740073, +0.0020081359794, +0.0009294288476, -0.0002107135901, + +0.0004109333047, +0.0015992783869, +0.0025257666421, +0.0015188733785, + -0.0003108666917, -0.0030349935562, -0.0043888910798, -0.0044862044909, + -0.0056074925466, -0.0063104381584, -0.0070704370193, -0.0069093675393, + -0.0064474639758, -0.0065124885345, -0.0071510005889, -0.0079914909468, + -0.0094096922963, -0.0099729021342, -0.0070438852044, -0.0025929389867, + -0.0016253401028, -0.0030569038489, -0.0037136216264, -0.0020782200859, + +0.0011658726179, +0.0029954541258, +0.0014782960931, -0.0035454168863, + -0.0061423775647, -0.0038470005320, -0.0011946154619, -0.0008877992914, + -0.0026542157328, -0.0032678624885, -0.0021232370883, -0.0000268401088, + +0.0017074172128, +0.0015192914039, +0.0013691338259, +0.0000969674595, + -0.0038607953676, -0.0051298049226, -0.0037118918658, -0.0034207156082, + -0.0048109669202, -0.0055778704075, -0.0050492125236, -0.0040507806687, + -0.0010503823120, +0.0023977499915, +0.0019033269407, -0.0019003142757, + -0.0048720418609, -0.0051566450314, -0.0024253252479, -0.0004952446868, + -0.0013819628791, -0.0023835659601, -0.0029509560520, -0.0012064931475, + +0.0004683325054, +0.0002549666155, -0.0006755145030, -0.0016286843059, + -0.0004755686675, +0.0021845138343, +0.0037515610278, +0.0034383447461, + +0.0021229632104, -0.0003199191016, -0.0030101859154, -0.0036932681173, + -0.0026251990097, -0.0021491834873, -0.0038137747267, -0.0054088152019, + -0.0046503154655, -0.0026782593966, -0.0008273585961, -0.0004635035925, + -0.0027871045405, -0.0059286801391, -0.0074347821221, -0.0057865227001, + -0.0035256832080, -0.0035032684027, -0.0031558749468, -0.0022848543265, + -0.0023997968742, -0.0024703710798, -0.0007829181802, +0.0004592656796, + -0.0011415694909, -0.0038754406687, -0.0042796711536, -0.0046060047823, + -0.0052900095224, -0.0044586292346, -0.0035621378984, -0.0029484767291, + -0.0029673743567, -0.0025392443555, -0.0022078944232, -0.0026867496348, + -0.0027547003712, -0.0025515688948, -0.0022191378634, -0.0026753332189, + -0.0021186532249, -0.0008557122455, -0.0010612221415, -0.0030778051149, + -0.0048290140822, -0.0046190788839, -0.0038990663071, -0.0025585888380, + -0.0013334575272, -0.0023617998138, -0.0046174500266, -0.0053816723857, + -0.0047013722140, -0.0042101348041, -0.0034755634135, -0.0017596559625, + -0.0007275946917, -0.0002008107146, +0.0013827268561, +0.0026901082515, + +0.0030221068440, +0.0026806666457, +0.0028967569069, +0.0038974951088, + +0.0036616567545, +0.0020765912285, -0.0001378330387, -0.0014561984099, + -0.0010542454426, -0.0009030788380, -0.0015282284970, -0.0024805766638, + -0.0023634286723, -0.0015071830846, -0.0004817381451, -0.0000909565441, + -0.0015917395163, -0.0027659293966, -0.0021020187001, -0.0011193132455, + -0.0012485839722, -0.0016790779782, -0.0004732046626, +0.0028757403241, + +0.0044769646904, +0.0041658961935, +0.0037679216735, +0.0041947687690, + +0.0051953916542, +0.0055461148972, +0.0037587683603, +0.0002758967110, + -0.0013863881814, -0.0002137550846, +0.0023300875490, +0.0026673330798, + +0.0006402418150, -0.0010760115889, -0.0018001611753, -0.0012621625877, + -0.0001944106034, +0.0010012427146, +0.0019943988017, +0.0022958383023, + +0.0022132999226, +0.0026976327074, +0.0031392115925, +0.0039377985151, + +0.0046998442588, +0.0052801066469, +0.0054009159649, +0.0038541934510, + +0.0039433049178, +0.0060203718307, +0.0065066073507, +0.0048411368174, + +0.0015419800883, -0.0008067600387, +0.0005492996856, +0.0026299414353, + +0.0033266166675, +0.0020148387993, -0.0007572312455, -0.0009581428634, + +0.0013949793229, +0.0030889332370, +0.0029678932842, +0.0020170586578, + -0.0000780265877, -0.0011707736046, -0.0004250596771, +0.0017072730653, + +0.0025711872551, +0.0000076253579, -0.0013139256542, +0.0000081587013, + +0.0044425857110, +0.0080615750532, +0.0070084107110, +0.0052879626409, + +0.0073393137884, +0.0092122546131, +0.0088441040375, +0.0068184542394, + +0.0034810698162, +0.0040748964051, +0.0079912170677, +0.0119434590786, + +0.0112605786808, +0.0051408898005, +0.0008626456989, +0.0000044108875, + +0.0018431745393, +0.0047054803930, +0.0053481871161, +0.0032021604401, + +0.0002677668392, -0.0017107037557, -0.0012368648489, -0.0011649356638, + -0.0034584099613, -0.0036001782031, -0.0012919288730, -0.0003377644583, + -0.0014651499178, -0.0017030783978, -0.0006543970169, +0.0002879762019, + +0.0021887085030, +0.0052418357086, +0.0056273127122, +0.0031077011318, + +0.0035685956699, +0.0067161965973, +0.0067470295683, +0.0052833355320, + +0.0057989913869, +0.0078575498682, +0.0083648163869, +0.0075770837074, + +0.0062297304426, +0.0029323178888, +0.0025319361197, +0.0040996175574, + +0.0055590448525, +0.0094595670411, +0.0126728700181, +0.0100440529262, + +0.0063612786856, +0.0058777531233, +0.0055040817304, +0.0007885399008, + -0.0028604751923, -0.0020346301354, +0.0006546564800, +0.0011162573362, + -0.0028205753954, -0.0044932244329, -0.0054969608851, -0.0053094837364, + -0.0009529535828, +0.0021590719492, +0.0005345534813, -0.0011826512890, + +0.0021510285647, +0.0064310168416, +0.0055308785949, +0.0017727588948, + +0.0010098194414, +0.0037083746880, +0.0064332943579, +0.0057021392443, + +0.0028010435236, +0.0019837175345, +0.0049146516143, +0.0085302390955, + +0.0101661595635, +0.0081879484317, +0.0045285836094, +0.0029148473132, + +0.0033690246155, +0.0059736971415, +0.0054985032551, +0.0029185518827, + +0.0006962860363, +0.0018849338271, +0.0050919520085, +0.0048357457316, + +0.0032076235985, +0.0055642917920, +0.0092209610713, +0.0081516667170, + +0.0045814133615, -0.0001052558924, -0.0036940609238, -0.0011177852914, + +0.0040940679117, +0.0046536740834, +0.0006280614208, -0.0013320593047, + +0.0004906752382, -0.0005134071669, -0.0012806998489, +0.0006573520230, + +0.0008897308573, +0.0005528601076, +0.0018375960629, +0.0021069917594, + +0.0000977314365, +0.0018047162092, +0.0070357985768, +0.0086593224317, + +0.0058038347146, +0.0027150023809, +0.0040623268162, +0.0093885459807, + +0.0117805012769, +0.0098612461294, +0.0078271060931, +0.0074667394377, + +0.0068778859081, +0.0064553199686, +0.0054319795707, +0.0016061397678, + -0.0032690444909, -0.0051601045514, -0.0028359702600, -0.0006244865840, + -0.0015503550097, -0.0022392751511, +0.0002094595151, +0.0036620027062, + +0.0049601154716, +0.0023878903603, -0.0014587498053, -0.0026545184414, + -0.0032621831100, -0.0029044687533, -0.0017744021669, -0.0024749981886, + -0.0027128545949, -0.0010972011475, +0.0006625701318, +0.0005290903229, + -0.0003213029093, +0.0003172523881, +0.0010285152636, -0.0005378976844, + -0.0029964487388, -0.0033829491838, -0.0022598737098, -0.0014111669927, + -0.0012192789565, -0.0013258754123, -0.0009644853156, -0.0015323799202, + -0.0027946434111, -0.0020415635901, -0.0012803250677, -0.0021430860846, + -0.0021094422527, -0.0017409601403, -0.0025211107050, -0.0036333175212, + -0.0042878730992, -0.0037045259722, -0.0028295269033, -0.0024896434885, + -0.0027795080121, -0.0046296448343, -0.0061291881451, -0.0070849814184, + -0.0071450617461, -0.0058743945054, -0.0043933740411, -0.0029293772963, + -0.0028740105635, -0.0040214324087, -0.0058031428102, -0.0060093590254, + -0.0036428312007, -0.0007608781560, +0.0011561283035, +0.0004037115562, + -0.0015397746445, -0.0026872397328, -0.0026414299238, -0.0018088388041, + -0.0024139520762, -0.0035568188875, -0.0039857416953, -0.0034252706433, + -0.0028839422684, -0.0042517643591, -0.0066552658041, -0.0076718313083, + -0.0061797980387, -0.0027978578815, -0.0008907687134, -0.0024543708005, + -0.0058142132745, -0.0079417747630, -0.0061119337896, -0.0047158445381, + -0.0062481091415, -0.0085857643906, -0.0105078880556, -0.0100740930907, + -0.0077852170726, -0.0057107880447, -0.0057628682334, -0.0072461229710, + -0.0072934895647, -0.0054676414547, -0.0047329547473, -0.0063348566034, + -0.0076989308815, -0.0071287011004, -0.0053808075054, -0.0029713239746, + -0.0016836906723, -0.0018713984559, -0.0025371542285, -0.0015544343603, + +0.0003901041112, +0.0000118920992, -0.0032592136880, -0.0056350966324, + -0.0038027042636, -0.0004022556747, +0.0011369423821, -0.0007093457243, + -0.0049737085018, -0.0077899018392, -0.0066428980193, -0.0048741752322, + -0.0052199686602, -0.0073149818319, -0.0081908025357, -0.0076032607412, + -0.0072567033362, -0.0067036125937, -0.0066689453216, -0.0061082003918, + -0.0052906149383, -0.0039157584909, -0.0028012453289, -0.0039611502745, + -0.0058281955006, -0.0055459851657, -0.0043841918984, -0.0039997383362, + -0.0046870007908, -0.0051153614268, -0.0042438795369, -0.0029151644353, + -0.0020310264692, -0.0021762686457, -0.0032332672890, -0.0047935828331, + -0.0045325043990, -0.0035315643918, -0.0042793107872, -0.0055943319553, + -0.0058948200871, -0.0053009070109, -0.0048205238440, -0.0038113242334, + -0.0015755518464, +0.0004595828029, +0.0003215479589, -0.0021622720048, + -0.0054096944970, -0.0068500656022, -0.0052460592056, -0.0016374051790, + -0.0005417608150, -0.0014177544946, -0.0023037087098, -0.0010475282080, + +0.0013461136046, +0.0023819226880, +0.0014698923422, -0.0010225043470, + -0.0018161470399, -0.0010028859867, +0.0007229099250, +0.0020640792987, + +0.0017642686566, +0.0011484308718, +0.0003239840375, +0.0003106216421, + +0.0005080449105, +0.0005269281233, +0.0002412582684, -0.0005021781415, + -0.0005523555949, -0.0012510200508, -0.0035050702358, -0.0054122458924, + -0.0054369238005, -0.0038430509141, -0.0033699471548, -0.0039295965695, + -0.0045771466203, -0.0049478630060, -0.0047697842189, -0.0036756389807, + -0.0016000135345, -0.0008085186276, -0.0011065706808, +0.0002817346505, + +0.0023111610919, +0.0034973151451, +0.0028689942600, +0.0008982499250, + -0.0000219535369, -0.0003541251052, +0.0004929815840, +0.0016320717521, + +0.0014637661100, +0.0014520902297, +0.0019098567848, +0.0033662425852, + +0.0042354469577, +0.0045176572926, +0.0046223942576, +0.0035891653978, + +0.0014096246227, -0.0004519430290, -0.0004662279637, +0.0010730709964, + +0.0023721351306, +0.0019239110846, +0.0005069349819, -0.0010489408452, + -0.0008821919867, +0.0023395435695, +0.0065296275732, +0.0071227478428, + +0.0036543052745, +0.0005514186409, +0.0006263316614, +0.0025835117956, + +0.0031195355732, +0.0027077518029, +0.0007961364293, -0.0020149829456, + -0.0017861212902, +0.0015652453591, +0.0032082001850, +0.0024514446239, + +0.0018557008839, +0.0035016251306, +0.0047309366941, +0.0034913618875, + +0.0015764455550, -0.0000556117823, -0.0006048249794, -0.0000167786711, + +0.0016657011681, +0.0031739221088, +0.0021161450726, +0.0012962388585, + +0.0031905998779, +0.0047842421294, +0.0044332882515, +0.0048715373482, + +0.0067858482648, +0.0073585717823, +0.0060907874752, +0.0052361563301, + +0.0056625421560, +0.0057112781427, +0.0055786199698, +0.0049617299141, + +0.0036091441258, +0.0018223165163, +0.0004653342539, +0.0004115387207, + +0.0019849571959, +0.0032562875115, +0.0037392509033, +0.0038166432455, + +0.0035702821850, +0.0027705420895, +0.0022551601137, +0.0028131374281, + +0.0041858460907, +0.0041370092019, +0.0035052432116, +0.0045875107654, + +0.0057061176929, +0.0081336916288, +0.0103184505127, +0.0104456022830, + +0.0087169234377, +0.0065468675139, +0.0061459668174, +0.0056310605248, + +0.0045202663470, +0.0039058267848, +0.0030250762648, +0.0018411709008, + +0.0010014733495, +0.0015390539117, +0.0024990562660, +0.0027889496179, + +0.0026068779698, +0.0028327269601, +0.0028903712092, +0.0027406172418, + +0.0033766499746, +0.0034872681221, +0.0026820648682, +0.0007115223386, + -0.0016852042116, -0.0015938296433, +0.0006516870593, +0.0025180259674, + +0.0036139874534, +0.0033915403241, +0.0018413871197, +0.0009754260484, + +0.0014144102926, +0.0030693581197, +0.0039772802854, +0.0034584820339, + +0.0016045829843, -0.0008033870060, -0.0016275743761, -0.0003146865780, + +0.0018860725852, +0.0039725666904, +0.0048708598585, +0.0046268051451, + +0.0036899239154, +0.0031196508900, +0.0022871895018, +0.0015972315042, + +0.0004982285224, -0.0003417717364, +0.0004924194123, +0.0017690110810, + +0.0030292853482, +0.0028826737775, +0.0009529824123, -0.0014794492660, + -0.0023717747630, -0.0010929632358, +0.0007350903180, +0.0004518421270, + -0.0014590813434, -0.0027666933736, -0.0028125752563, -0.0019024332322, + -0.0017323401705, -0.0031735473277, -0.0041915398839, -0.0036079044643, + -0.0013763844027, +0.0005498041983, -0.0000257734232, -0.0014357728283, + -0.0019112550073, -0.0013689464353, -0.0009183583845, -0.0013372774135, + -0.0013229924788, -0.0002723362890, +0.0002510169976, +0.0005312525236, + -0.0000553523180, -0.0012255349214, -0.0014278880048, -0.0007677107074, + -0.0005120377727, -0.0010415317074, -0.0020583278464, -0.0022086872297, + -0.0021272731947, -0.0024494842285, -0.0029081300786, -0.0032820897642, + -0.0029915621669, -0.0019692019649, -0.0009035112781, -0.0009204485103, + -0.0011844242926, -0.0011501029722, -0.0017737246771, -0.0020200136638, + -0.0026528175103, -0.0036242506953, -0.0038688387521, -0.0032731815006, + -0.0022627854728, -0.0019497854099, -0.0023965391596, -0.0036547665441, + -0.0040688278307, -0.0038201604244, -0.0036714587279, -0.0029563759661, + -0.0014739572781, +0.0004532115200, +0.0008079564559, -0.0006303965973, + -0.0026696105961, -0.0048818294196, -0.0063380566590, -0.0063812429988, + -0.0063158580726, -0.0064129840943, -0.0064989819927, -0.0053292606590, + -0.0033192796022, -0.0024800433216, -0.0033668480012, -0.0046607949287, + -0.0054964275429, -0.0054233019407, -0.0040425931378, -0.0026504246759, + -0.0021486069008, -0.0020621477328, -0.0011171798755, +0.0010216971258, + +0.0022364354619, +0.0017884564655, -0.0001448097364, -0.0022585908041, + -0.0031739365236, -0.0035135172297, -0.0050673461741, -0.0060172294329, + -0.0064332367001, -0.0065363448077, -0.0053445113761, -0.0043335964196, + -0.0047003055284, -0.0051328031729, -0.0045949199033, -0.0036535557122, + -0.0045797124305, -0.0067704245719, -0.0083307112866, -0.0088638088863, + -0.0078616580484, -0.0061673293519, -0.0053339021814, -0.0054644558138, + -0.0052421960750, -0.0038404851040, -0.0029712374873, -0.0039177909589, + -0.0050570685175, -0.0052598684559, -0.0051042044752, -0.0055861155961, + -0.0071543015478, -0.0084897915429, -0.0087608593410, -0.0064509090810, + -0.0021723911004, -0.0013004911850, -0.0038964860822, -0.0065515522805, + -0.0050643190943, -0.0010404361923, +0.0005490258065, -0.0009182574813, + -0.0045209438368, -0.0059731637981, -0.0033365483724, -0.0007178071330, + -0.0007913363458, -0.0032826807654, -0.0055908580218, -0.0059035842044, + -0.0051865410484, -0.0048713355429, -0.0055233108960, -0.0067591378888, + -0.0078800367473, -0.0089603583216, -0.0087173558779, -0.0066204976288, + -0.0056189810351, -0.0051540648053, -0.0048854042576, -0.0051940799190, + -0.0049613263035, -0.0031184977170, -0.0003840931959, +0.0002538278573, + -0.0012115094510, -0.0014209401366, -0.0002817346505, +0.0004490456820, + +0.0003253390157, -0.0000320005586, -0.0001438151245, -0.0009419119492, + -0.0019514286820, -0.0027267647485, -0.0046419117158, -0.0063352025550, + -0.0059981588295, -0.0049923322503, -0.0039264397582, -0.0035244291318, + -0.0045467172600, -0.0055329398924, -0.0060490137727, -0.0061963460750, + -0.0058135501995, -0.0057162079589, -0.0053102044704, -0.0054654792539, + -0.0057007842660, -0.0048351259008, -0.0025973066312, -0.0006517158888, + -0.0004654639867, -0.0016486918622, -0.0030242546300 +}; diff --git a/plugins/LadspaEffect/swh/impulses/03-stk-m1.h b/plugins/LadspaEffect/swh/impulses/03-stk-m1.h new file mode 100644 index 000000000..65593586f --- /dev/null +++ b/plugins/LadspaEffect/swh/impulses/03-stk-m1.h @@ -0,0 +1,302 @@ +float stk_m1[] = { + -0.0078354283852, -0.0305904437564, -0.0544448647061, -0.0654778659204, + -0.0493025333033, +0.0057999367459, +0.0697043517155, +0.1049470287295, + +0.1062267837260, +0.0866926526019, +0.0628288791663, +0.0440187979075, + +0.0317299114731, +0.0240030835890, +0.0188275299251, +0.0151256208396, + +0.0124967349496, +0.0107776923255, +0.0098134092201, +0.0094201860714, + +0.0094193485363, +0.0096668404215, +0.0100590864450, +0.0105258731710, + +0.0110197402272, +0.0115077445328, +0.0119674122026, +0.0123829696440, + +0.0127452039602, +0.0130483919895, +0.0132901607131, +0.0134696725937, + +0.0135874859906, +0.0136454155632, +0.0136451363841, +0.0135893006511, + +0.0134801417939, +0.0133203120082, +0.0131127426721, +0.0128596672131, + +0.0125634586499, +0.0122264900023, +0.0118511342892, +0.0114392061698, + +0.0109927994859, +0.0105137288993, +0.0100040882482, +0.0094655526042, + +0.0088999366311, +0.0083090549895, +0.0050828663466, -0.0031392244883, + -0.0117486757190, -0.0161038628782, -0.0114075193923, +0.0062480185012, + +0.0268223693279, +0.0378285693899, +0.0375009532272, +0.0302240217600, + +0.0214935465773, +0.0144385621475, +0.0095493062037, +0.0061736173876, + +0.0036425836194, +0.0015980186733, -0.0000926873162, -0.0014832762424, + -0.0026241398525, -0.0035754411511, -0.0043959472447, -0.0051326997389, + -0.0058197584309, -0.0064797367927, -0.0071275708829, -0.0077730319543, + -0.0084232390621, -0.0090827986557, -0.0097539441651, -0.0104376527131, + -0.0111346222482, -0.0118441548220, -0.0125656920796, -0.0132981173044, + -0.0140398950152, -0.0147899084965, -0.0155469014438, -0.0163094779649, + -0.0170759629871, -0.0178455189742, -0.0186167500340, -0.0193885394508, + -0.0201599100995, -0.0209300244438, -0.0216973470023, -0.0224610402377, + -0.0232202666148, -0.0239740490070, -0.0247215498806, -0.0254617921089, + -0.0261943569227, -0.0269185463770, -0.0276336625258, -0.0283391470094, + -0.0290338831148, -0.0297175916628, -0.0303895747073, -0.0310496926593, + -0.0316973871593, -0.0323319602623, -0.0329527140222, -0.0335593692588, + -0.0341516467951, -0.0347291278618, -0.0352913936909, -0.0358384442834, + -0.0363698608700, -0.0368852246838, -0.0373842565457, -0.0378665376885, + -0.0383317889321, -0.0387800102775, -0.0392109225445, -0.0396250840925, + -0.0400219365644, -0.0404010611897, -0.0407623183806, -0.0411058477272, + -0.0414313700492, -0.0417388853478, -0.0420285332119, -0.0423004532307, + -0.0425546454040, -0.0427911097330, -0.0430097066265, -0.0432102964965, + -0.0433928793431, -0.0435577343443, -0.0437051406792, -0.0438345399895, + -0.0439469094016, -0.0440422489157, -0.0441206981206, -0.0441821174262, + -0.0442265068337, -0.0442535871639, -0.0442643355433, -0.0442590311487, + -0.0442373948021, -0.0442001244508, -0.0441470805035, -0.0440782629637, + -0.0439940905960, -0.0438949821710, -0.0437810772752, -0.0436529342681, + -0.0435106927389, -0.0433544922763, -0.0431844724707, -0.0430009124988, + -0.0428038123618, -0.0425935908279, -0.0423702478970, -0.0421346211042, + -0.0418865708618, -0.0416269347037, -0.0413561313993, -0.0410743005386, + -0.0407815817084, -0.0404783936803, -0.0401644572717, -0.0398397724859, + -0.0395057352143, -0.0391627642248, -0.0388107199297, -0.0384496023279, + -0.0380796905984, -0.0377019618653, -0.0373165557201, -0.0369236117506, + -0.0365231299567, -0.0361155291077, -0.0357010883806, -0.0352800869555, + -0.0348528040094, -0.0344199374906, -0.0339820457564, -0.0335391288056, + -0.0330910470504, -0.0326383588466, -0.0321813433735, -0.0317198610422, + -0.0312544702084, -0.0307854500527, -0.0303132193431, -0.0298374988993, + -0.0293588470796, -0.0288781014204, -0.0283949827424, -0.0279096306347, + -0.0274230222237, -0.0269352970972, -0.0264460364883, -0.0259555195761, + -0.0254644443056, -0.0249728106780, -0.0244806186932, -0.0239882871194, + -0.0234960951347, -0.0230041823290, -0.0225128278794, -0.0220218921991, + -0.0215317940539, -0.0210426730351, -0.0205549479087, -0.0200691770340, + -0.0195846624625, -0.0191018229625, -0.0186206585351, -0.0181413087693, + -0.0176640528431, -0.0171893095246, -0.0167174975820, -0.0162490357834, + -0.0157830865937, -0.0153197896007, -0.0148592843946, -0.0144025480995, + -0.0139493015386, -0.0134991259426, -0.0130521609016, -0.0126089647728, + -0.0121695375550, -0.0117344376077, -0.0113032461604, -0.0108755444473, + -0.0104517512354, -0.0100327040609, -0.0096185425129, -0.0092082894660, + -0.0088023636885, -0.0084007651803, -0.0080036335304, -0.0076112479180, + -0.0072233291639, -0.0068402960375, -0.0064628464836, -0.0060900033782, + -0.0057206500047, -0.0053560426698, -0.0049970189075, -0.0046432995410, + -0.0042943262108, -0.0039502385070, -0.0036108968407, -0.0032763012119, + -0.0029474287459, -0.0026237210843, -0.0023050386393, -0.0019912418208, + -0.0016823306300, -0.0013784446534, -0.0010793047155, -0.0007846316358, + -0.0004954025398, -0.0002118966066, +0.0000671424684, +0.0003411563279, + +0.0006102845597, +0.0008743875761, +0.0011338841440, +0.0013883554965, + +0.0016373828642, +0.0018813850176, +0.0021211994895, +0.0023561283349, + +0.0025856131967, +0.0028100728431, +0.0030304843981, +0.0032464290948, + +0.0034576277541, +0.0036642199660, +0.0038667640867, +0.0040653997061, + +0.0042595684672, +0.0044485724227, +0.0046328303407, +0.0048126214005, + +0.0049886435480, +0.0051603384262, +0.0053277060351, +0.0054911651429, + +0.0056502969813, +0.0058048223724, +0.0059557184403, +0.0061028455960, + +0.0062457850726, +0.0063850952260, +0.0065207760562, +0.0066526879754, + +0.0067805518033, +0.0069046467190, +0.0070251123126, +0.0071419485843, + +0.0072554347108, +0.0073654311042, +0.0074723565328, +0.0075760714063, + +0.0076760173677, +0.0077730319543, +0.0078669755749, +0.0079572898724, + +0.0080448123829, +0.0081299618759, +0.0082119008138, +0.0082902104286, + +0.0083655886686, +0.0084387334789, +0.0085089469122, +0.0085758102026, + +0.0086400212951, +0.0087022781370, +0.0087621619602, +0.0088198123548, + +0.0088743917834, +0.0089256210679, +0.0089740585667, +0.0090209605820, + +0.0090661875258, +0.0091094602190, +0.0091503598934, +0.0091891657272, + +0.0092253193642, +0.0092588208044, +0.0092902284040, +0.0093202401101, + +0.0093485767447, +0.0093753778958, +0.0094005039766, +0.0094236758056, + +0.0094450329731, +0.0094647150691, +0.0094824429133, +0.0094983560972, + +0.0095127337986, +0.0095255760176, +0.0095370223431, +0.0095467935960, + +0.0095551689555, +0.0095621484227, +0.0095675924063, +0.0095717800867, + +0.0095747114625, +0.0095762469450, +0.0095765261241, +0.0095756885878, + +0.0095738739262, +0.0095709425504, +0.0095667548700, +0.0095614504754, + +0.0095551689555, +0.0095477707213, +0.0095392557717, +0.0095301824660, + +0.0095201320340, +0.0095088252974, +0.0094966810258, +0.0094839783970, + +0.0094704382319, +0.0094557813513, +0.0094402869356, +0.0094243737518, + +0.0094079022108, +0.0093907327225, +0.0093727256991, +0.0093537415504, + +0.0093340594543, +0.0093140981792, +0.0092935785480, +0.0092726401475, + +0.0092517017482, +0.0092311821159, +0.0092098249485, +0.0091867927084, + +0.0091626437541, +0.0091379364426, +0.0091129499520, +0.0090876842834, + +0.0090621394356, +0.0090363154087, +0.0090100726148, +0.0089835506417, + +0.0089567494895, +0.0089295295703, +0.0089020304719, +0.0088748105515, + +0.0088484281674, +0.0088216270164, +0.0087935695609, +0.0087645349789, + +0.0087349420410, +0.0087050699239, +0.0086751978068, +0.0086450465105, + +0.0086148952155, +0.0085846043302, +0.0085543134450, +0.0085238829707, + +0.0084938712646, +0.0084646970937, +0.0084353833349, +0.0084049528595, + +0.0083736848501, +0.0083421376604, +0.0083104508817, +0.0082786245141, + +0.0082469377365, +0.0082152509578, +0.0081835641792, +0.0081518774005, + +0.0081208885691, +0.0080907372740, +0.0080605859778, +0.0080293179672, + +0.0079974915995, +0.0079652464637, +0.0079330013279, +0.0079007561932, + +0.0078685110574, +0.0078365450995, +0.0078047187319, +0.0077740090796, + +0.0077442765515, +0.0077141252553, +0.0076828572459, +0.0076508912881, + +0.0076186461522, +0.0075864010176, +0.0075542954707, +0.0075223295141, + +0.0074905031464, +0.0074588163677, +0.0074279671253, +0.0073982345972, + +0.0073683624801, +0.0073379320059, +0.0073072223525, +0.0072760939321, + +0.0072448259215, +0.0072132787330, +0.0071818711323, +0.0071507427119, + +0.0071196142904, +0.0070893234052, +0.0070602888244, +0.0070311146546, + +0.0070012425375, +0.0069706724731, +0.0069402419988, +0.0069099511136, + +0.0068797998185, +0.0068496485222, +0.0068193576370, +0.0067892063419, + +0.0067597529930, +0.0067315559473, +0.0067033589028, +0.0066744639110, + +0.0066448709719, +0.0066151384450, +0.0065855455059, +0.0065565109251, + +0.0065276159333, +0.0064987209415, +0.0064696863607, +0.0064413497260, + +0.0064142693958, +0.0063871890656, +0.0063591316101, +0.0063306553864, + +0.0063018999836, +0.0062735633489, +0.0062456454824, +0.0062178672061, + +0.0061899493396, +0.0061627294192, +0.0061366262143, +0.0061105230094, + +0.0060835822681, +0.0060560831698, +0.0060283048934, +0.0060006662049, + +0.0059734462857, +0.0059466451335, +0.0059201231604, +0.0058934615984, + +0.0058673583934, +0.0058425114918, +0.0058175250012, +0.0057915613852, + +0.0057651790023, +0.0057385174391, +0.0057118558770, +0.0056857526721, + +0.0056600682354, +0.0056345233876, +0.0056089785398, +0.0055839920492, + +0.0055601222728, +0.0055362524977, +0.0055114055960, +0.0054860003384, + +0.0054604554906, +0.0054349106429, +0.0054097845632, +0.0053852168407, + +0.0053607887073, +0.0053362209848, +0.0053123512084, +0.0052897377377, + +0.0052669846756, +0.0052432544895, +0.0052189659461, +0.0051943982237, + +0.0051698305012, +0.0051456815468, +0.0051220909496, +0.0050986399415, + +0.0050750493443, +0.0050521566944, +0.0050303807588, +0.0050086048220, + +0.0049858517611, +0.0049625403431, +0.0049389497459, +0.0049156383279, + +0.0048928852658, +0.0048704113841, +0.0048476583232, +0.0048249052611, + +0.0048028501475, +0.0047820513361, +0.0047612525258, +0.0047396161792, + +0.0047172818864, +0.0046946684145, +0.0046724737108, +0.0046506977752, + +0.0046290614286, +0.0046072854930, +0.0045855095574, +0.0045637336218, + +0.0045427952213, +0.0045231131253, +0.0045034310293, +0.0044827718091, + +0.0044615542307, +0.0044403366522, +0.0044193982518, +0.0043985994415, + +0.0043776610422, +0.0043567226417, +0.0043356446522, +0.0043155437892, + +0.0042966992295, +0.0042778546698, +0.0042581725738, +0.0042377925304, + +0.0042174124883, +0.0041973116253, +0.0041774899391, +0.0041575286651, + +0.0041372882119, +0.0041173269379, +0.0040980636101, +0.0040800565855, + +0.0040621891511, +0.0040432050023, +0.0040236624953, +0.0040041199895, + +0.0039849962506, +0.0039658725117, +0.0039466091838, +0.0039274854461, + +0.0039082221183, +0.0038890983794, +0.0038709517670, +0.0038540614567, + +0.0038371711475, +0.0038193037131, +0.0038010175105, +0.0037827313091, + +0.0037644451066, +0.0037460193138, +0.0037274539333, +0.0037090281417, + +0.0036906023489, +0.0036724557365, +0.0036552862482, +0.0036392334754, + +0.0036233202916, +0.0036062903934, +0.0035888417260, +0.0035715326487, + +0.0035540839824, +0.0035364957272, +0.0035189074707, +0.0035013192155, + +0.0034837309590, +0.0034671198290, +0.0034519045913, +0.0034365497646, + +0.0034203574028, +0.0034036066827, +0.0033869955527, +0.0033703844215, + +0.0033533545234, +0.0033364642143, +0.0033195739052, +0.0033028231850, + +0.0032862120550, +0.0032698801030, +0.0032543856874, +0.0032400079859, + +0.0032260490527, +0.0032112525831, +0.0031958977564, +0.0031797053946, + +0.0031632338536, +0.0031467623115, +0.0031305699496, +0.0031145171756, + +0.0030987435820, +0.0030829699871, +0.0030685922857, +0.0030558896569, + +0.0030433266171, +0.0030296468618, +0.0030148503934, +0.0029992163876, + +0.0029834427939, +0.0029675296101, +0.0029518956042, +0.0029365407775, + +0.0029213255410, +0.0029063894824, +0.0028924305492, +0.0028797279192, + +0.0028671648794, +0.0028540434824, +0.0028400845492, +0.0028255672588, + +0.0028106312002, +0.0027958347307, +0.0027810382623, +0.0027665209719, + +0.0027521432705, +0.0027380447482, +0.0027247837611, +0.0027130582576, + +0.0027017515211, +0.0026893280703, +0.0026756483162, +0.0026615497939, + +0.0026473116815, +0.0026330735703, +0.0026191146370, +0.0026054348817, + +0.0025917551276, +0.0025783545515, +0.0025657915117, +0.0025546243653, + +0.0025435968080, +0.0025318713044, +0.0025193082646, +0.0025060472775, + +0.0024926467026, +0.0024791065363, +0.0024657059614, +0.0024525845632, + +0.0024396027553, +0.0024267605375, +0.0024140579075, +0.0024021928150, + +0.0023921423829, +0.0023825107190, +0.0023716227506, +0.0023594784789, + +0.0023466362611, +0.0023336544532, +0.0023206726452, +0.0023079700152, + +0.0022954069754, +0.0022831231148, +0.0022709788431, +0.0022591137494, + +0.0022482257822, +0.0022391524754, +0.0022299395796, +0.0022191912002, + +0.0022073261077, +0.0021951818349, +0.0021828979742, +0.0021706141136, + +0.0021587490199, +0.0021470235164, +0.0021355771909, +0.0021241308653, + +0.0021139408443, +0.0021054258946, +0.0020967713560, +0.0020867209239, + +0.0020755537775, +0.0020639678630, +0.0020522423595, +0.0020406564450, + +0.0020293497084, +0.0020183221522, +0.0020074341838, +0.0019966858056, + +0.0019863561944, +0.0019771432986, +0.0019693262963, +0.0019610905258, + +0.0019513192728, +0.0019407104836, +0.0019296829262, +0.0019186553689, + +0.0019077674005, +0.0018970190222, +0.0018865498220, +0.0018762202119, + +0.0018660301909, +0.0018562589368, +0.0018470460410, +0.0018385310925, + +0.0018309932681, +0.0018230366768, +0.0018138237799, +0.0018037733489, + +0.0017934437377, +0.0017831141276, +0.0017729241066, +0.0017628736745, + +0.0017529628314, +0.0017433311674, +0.0017339786827, +0.0017253241440, + +0.0017173675515, +0.0017103880855, +0.0017029898513, +0.0016943353126, + +0.0016848432377, +0.0016750719848, +0.0016653007307, +0.0016556690667, + +0.0016461769930, +0.0016368245070, +0.0016280303794, +0.0016196550199, + +0.0016114192494, +0.0016036022459, +0.0015969019578, +0.0015899224918, + +0.0015818263103, +0.0015727530035, +0.0015635401077, +0.0015543272119, + +0.0015452539052, +0.0015363201885, +0.0015275260609, +0.0015192902892, + +0.0015114732869, +0.0015037958735, +0.0014956996932, +0.0014883014578, + +0.0014821595269, +0.0014758780070, +0.0014683401838, +0.0014599648232, + +0.0014511706956, +0.0014423765679, +0.0014338616183, +0.0014253466698, + +0.0014171108993, +0.0014092938958, +0.0014020352506, +0.0013947766054, + +0.0013879367283, +0.0013823531546, +0.0013763508138, +0.0013692317576, + +0.0013612751663, +0.0013530393958, +0.0013446640351, +0.0013365678536, + +0.0013286112623, +0.0013207942600, +0.0013133960246, +0.0013066957365, + +0.0012998558595, +0.0012927368044, +0.0012863156944, +0.0012810112998, + +0.0012755673162, +0.0012688670281, +0.0012614687939, +0.0012536517904, + +0.0012458347881, +0.0012381573747, +0.0012307591405, +0.0012237796733, + +0.0012172189754, +0.0012107978665, +0.0012040975785, +0.0011972577002, + +0.0011909761803, +0.0011862301440, +0.0011812049274, +0.0011750629965, + +0.0011682231194, +0.0011609644742, +0.0011535662400, +0.0011464471838, + +0.0011394677178, +0.0011329070187, +0.0011269046780, +0.0011210419251, + +0.0011148999953, +0.0011083392963, +0.0011017785972, +0.0010961950246, + +0.0010918677553, +0.0010874008970, +0.0010818173232, +0.0010753962143, + +0.0010685563372, +0.0010618560492, +0.0010554349391, +0.0010494325984, + +0.0010437094356, +0.0010377070948, +0.0010315651639, +0.0010252836440, + +0.0010191417131, +0.0010139769075, +0.0010100684063, +0.0010060203162, + +0.0010008555105, +0.0009949927588, +0.0009885716499, +0.0009822901300, + +0.0009761481991, +0.0009707042155, +0.0009653998208, +0.0009598162471, + +0.0009540930843, +0.0009482303326, +0.0009425071698, +0.0009367840070, + +0.0009320379696, +0.0009286878255, +0.0009250585035, +0.0009204520550, + +0.0009148684824, +0.0009090057307, +0.0009031429778, +0.0008979781733, + +0.0008929529567, +0.0008875089731, +0.0008820649895, +0.0008764814157, + +0.0008710374321, +0.0008657330375, +0.0008612661792, +0.0008581952131, + +0.0008551242482, +0.0008506573899, +0.0008454925843, +0.0008399090105, + +0.0008343254379, +0.0008290210433, +0.0008244145948, +0.0008198081475, + +0.0008149225199, +0.0008098973044, +0.0008047324988, +0.0007997072834, + +0.0007948216569, +0.0007907735656, +0.0007879817799, +0.0007851899930, + +0.0007812814918, +0.0007763958642, +0.0007710914696, +0.0007660662541, + +0.0007617389848, +0.0007572721265, +0.0007526656780, +0.0007477800515, + +0.0007428944251, +0.0007381483876, +0.0007334023501, +0.0007287959028, + +0.0007251665796, +0.0007227935609, +0.0007204205422, +0.0007167912201, + +0.0007121847717, +0.0007072991452, +0.0007025531077, +0.0006983654286, + +0.0006943173372, +0.0006899900679, +0.0006855232096, +0.0006809167611, + +0.0006764499028, +0.0006721226335, +0.0006676557752, +0.0006634680948, + +0.0006601179508, +0.0006581637002, +0.0006560698607, +0.0006527197166, + +0.0006488112155, +0.0006449027143, +0.0006408546230, +0.0006366669438, + +0.0006320604953, +0.0006275936370, +0.0006232663677, +0.0006189390984, + +0.0006148910070, +0.0006108429169, +0.0006069344157, +0.0006038634508, + +0.0006023279672, +0.0006007924848, +0.0005977215199, +0.0005940921967, + +0.0005903232857, +0.0005864147834, +0.0005822271042, +0.0005778998349, + +0.0005735725656, +0.0005693848852, +0.0005653367951, +0.0005614282939, + +0.0005576593817, +0.0005538904696, +0.0005502611464, +0.0005474693607, + +0.0005460734672, +0.0005445379848, +0.0005420253759, +0.0005389544110, + +0.0005356042670, +0.0005316957658, +0.0005275080855, +0.0005233204063, + +0.0005194119040, +0.0005155034028, +0.0005117344906, +0.0005081051686, + +0.0005047550246, +0.0005012652916, +0.0004977755585, +0.0004952629496, + +0.0004941462354, +0.0004928899309, +0.0004906565023, +0.0004878647155, + +0.0004846541604, +0.0004808852494, +0.0004769767471, +0.0004730682459, + +0.0004692993337, +0.0004656700117, +0.0004621802787, +0.0004588301347, + +0.0004554799906, +0.0004524090246, +0.0004491984707, +0.0004469650410, + +0.0004459879157, +0.0004452899696, +0.0004437544859, +0.0004412418782, + +0.0004377521452, +0.0004339832330, +0.0004300747319, +0.0004263058197, + +0.0004226764977, +0.0004191867646, +0.0004159762096, +0.0004127656546, + +0.0004096946897, +0.0004067633138, +0.0004036923478, +0.0004007609719, + +0.0003988067213, +0.0003983879532, +0.0003982483642, +0.0003968524707, + +0.0003940606838, +0.0003904313618, +0.0003868020386, +0.0003830331276, + +0.0003795433934, +0.0003761932494, +0.0003731222845, +0.0003701909087, + +0.0003671199438, +0.0003643281569, +0.0003615363700, +0.0003588841721, + +0.0003569299215, +0.0003567903326, +0.0003569299215, +0.0003556736183, + +0.0003530214204, +0.0003496712763, +0.0003460419543, +0.0003426918103, + +0.0003393416663, +0.0003362707014, +0.0003333393244, +0.0003305475386, + +0.0003277557518, +0.0003251035539, +0.0003225909461, +0.0003200783384, + +0.0003175657307, +0.0003161698372, +0.0003165886054, +0.0003168677834, + +0.0003153323009, +0.0003126801042, +0.0003093299602, +0.0003058402260, + +0.0003026296721, +0.0002995587061, +0.0002966273302, +0.0002938355445, + +0.0002913229356, +0.0002888103279, +0.0002862977201, +0.0002839247014, + +0.0002815516827, +0.0002791786639, +0.0002780619496, +0.0002787598958, + +0.0002791786639, +0.0002777827705, +0.0002751305738, +0.0002720596077, + +0.0002688490539, +0.0002656384988, +0.0002628467119, +0.0002600549251, + +0.0002575423173, +0.0002550297096, +0.0002527962799, +0.0002504232611, + +0.0002483294215, +0.0002460959918, +0.0002441417412, +0.0002427458489, + +0.0002421874906, +0.0002424666698, +0.0002423270808, +0.0002407915972, + +0.0002382789895, +0.0002352080246, +0.0002322766487, +0.0002294848618, + +0.0002268326651, +0.0002243200562, +0.0002219470375, +0.0002198531979, + +0.0002176197681, +0.0002156655176, +0.0002135716780, +0.0002118966066, + +0.0002106403021, +0.0002102215340, +0.0002107798911, +0.0002107798911, + +0.0002093839977, +0.0002070109789, +0.0002042191932, +0.0002014274063, + +0.0001986356194, +0.0001962626007, +0.0001938895820, +0.0001917957424, + +0.0001897019016, +0.0001877476511, +0.0001859329906, +0.0001839787400, + +0.0001825828466, +0.0001814661311, +0.0001803494169, +0.0001799306487, + +0.0001813265422, +0.0001823036674, +0.0001811869532, +0.0001789535234, + +0.0001761617365, +0.0001732303607, +0.0001704385749, +0.0001679259660, + +0.0001656925375, +0.0001635986967, +0.0001616444461, +0.0001598297857, + +0.0001580151241, +0.0001563400515, +0.0001549441581, +0.0001541066230, + +0.0001532690867, +0.0001527107295, +0.0001534086756, +0.0001536878548, + +0.0001525711393, +0.0001506168888, +0.0001481042810, +0.0001457312623, + +0.0001434978337, +0.0001414039930, +0.0001393101534, +0.0001376350808, + +0.0001358204204, +0.0001342849379, +0.0001327494543, +0.0001314931511, + +0.0001307952037, +0.0001299576686, +0.0001288409532, +0.0001273054707, + +0.0001264679344, +0.0001270262916, +0.0001275846499, +0.0001267471136, + +0.0001249324520, +0.0001228386124, +0.0001206051827, +0.0001183717541, + +0.0001165570925, +0.0001147424309, +0.0001130673595, +0.0001115318759, + +0.0001101359824, +0.0001090192681, +0.0001087400902, +0.0001083213220, + +0.0001073441967, +0.0001059483033, +0.0001042732307, +0.0001035752845, + +0.0001042732307, +0.0001046919988, +0.0001039940527, +0.0001024585703, + +0.0001005043185, +0.0000984104789, +0.0000964562283, +0.0000946415667, + +0.0000929664953, +0.0000914310129, +0.0000900351194, +0.0000890579941, + +0.0000884996370, +0.0000879412787, +0.0000871037436, +0.0000858474391, + +0.0000844515457, +0.0000830556522, +0.0000826368841, +0.0000836140094, + +0.0000843119567, +0.0000838931885, +0.0000824972951, +0.0000806826335, + +0.0000787283829, +0.0000769137225, +0.0000752386499, +0.0000737031674, + +0.0000724468630, +0.0000710509696, +0.0000702134344, +0.0000697946663, + +0.0000693758981, +0.0000686779508, +0.0000675612365, +0.0000661653431, + +0.0000650486288, +0.0000646298607, +0.0000657465749 +}; diff --git a/plugins/LadspaEffect/swh/impulses/04-fender-68-vibrolux-sm57.h b/plugins/LadspaEffect/swh/impulses/04-fender-68-vibrolux-sm57.h new file mode 100644 index 000000000..8e4cfaae9 --- /dev/null +++ b/plugins/LadspaEffect/swh/impulses/04-fender-68-vibrolux-sm57.h @@ -0,0 +1,1154 @@ +float fender_68_vibrolux_sm57[] = { + +0.0000000000000, +0.0000061913321, +0.0000061913321, +0.0000000000000, + +0.0000000000000, -0.0000183742760, -0.0000730976633, -0.0000974635510, + -0.0000671060515, -0.0000183742760, +0.0000487317755, +0.0001402037148, + +0.0001461953265, +0.0001036548832, +0.0000427401638, -0.0000487317755, + -0.0001036548832, -0.0000974635510, -0.0001523866587, -0.0002316756541, + -0.0002133013781, -0.0001096464949, +0.0000183742760, +0.0002133013781, + +0.0003475134811, +0.0002925903735, +0.0001523866587, +0.0000305572199, + -0.0001096464949, -0.0001829438786, -0.0001523866587, -0.0000974635510, + -0.0001158378270, -0.0000974635510, -0.0000243658878, +0.0000792889954, + +0.0002438585980, +0.0003656880367, +0.0003047733174, +0.0001340123827, + -0.0000609147194, -0.0002560415418, -0.0003413221490, -0.0002498502097, + -0.0001280207709, -0.0001158378270, -0.0000792889954, +0.0000121829439, + +0.0000730976633, +0.0002073097663, +0.0003656880367, +0.0003107649291, + +0.0000852806071, -0.0001280207709, -0.0003535050929, -0.0004631515878, + -0.0002863990413, -0.0000243658878, +0.0000792889954, +0.0001340123827, + +0.0001951268224, +0.0002376672658, +0.0003596964250, +0.0004387857000, + +0.0003229478730, +0.0000671060515, -0.0001951268224, -0.0005118833633, + -0.0006582784102, -0.0003778709806, +0.0000609147194, +0.0002254843219, + +0.0003291392051, +0.0003475134811, +0.0002254843219, +0.0001402037148, + +0.0002804074296, +0.0001280207709, -0.0001705612143, -0.0005058917515, + -0.0006339125225, -0.0008228480128, -0.0003778709806, +0.0000305572199, + +0.0006764529658, +0.0005058917515, +0.0008715797883, -0.0002925903735, + +0.0007070101857, -0.0001158378270, -0.0003535050929, +0.0006095466347, + -0.0003596964250, -0.0009386858398, -0.0009508687837, -0.0001705612143, + +0.0005546235271, +0.0012067106052, +0.0010239664470, +0.0011214299980, + +0.0002254843219, +0.0001280207709, -0.0003656880367, -0.0002438585980, + -0.0004449770322, -0.0004815258638, -0.0009690433393, -0.0013652885960, + -0.0006826442980, +0.0009265028959, +0.0019320950669, +0.0019015378470, + +0.0010970641102, -0.0001645696026, -0.0009203115638, -0.0006033553026, + -0.0006460954663, -0.0010848811664, -0.0004693429199, -0.0004022368684, + -0.0014933093669, -0.0022552426603, +0.0010726982225, +0.0125190732974, + +0.0051258238466, -0.0314317954863, -0.0373013780707, +0.0362652286798, + +0.1530511284202, +0.1628701817456, -0.0260621130417, -0.1997020171760, + -0.1606942280807, -0.0844216097464, -0.0949780307569, -0.0449870181746, + +0.0905592170961, +0.1607551428001, +0.1115320551228, +0.0124337926902, + -0.0394711404034, -0.0241971240264, -0.0250015977631, -0.0405194727382, + -0.0221551827442, +0.0141404034352, +0.0177485520272, -0.0056317155982, + -0.0091364090274, +0.0046442979828, +0.0022184941082, -0.0105198721789, + -0.0022246854404, +0.0198270421410, +0.0181142400639, -0.0172488516077, + -0.0203023766727, +0.0083744757340, +0.0245628120631, +0.0209790293589, + +0.0021881366087, -0.0257635310565, -0.0325044937088, -0.0036265228680, + +0.0255624126223, +0.0260621130417, +0.0148352306771, +0.0107821050529, + -0.0041751547833, -0.0144451767525, +0.0067531455962, +0.0327727181945, + +0.0328336329139, +0.0142927900939, -0.0124337926902, -0.0314927102057, + -0.0242458558019, -0.0071493908528, +0.0106113441182, +0.0287499500699, + +0.0182666267226, -0.0132079089275, -0.0200403435191, -0.0085999600559, + -0.0060461354104, +0.0020906730577, +0.0184799281007, +0.0230635110845, + +0.0064789294987, -0.0109770321550, -0.0128665867785, -0.0016335130817, + +0.0088254443779, +0.0131589774316, +0.0150728979429, +0.0108368284402, + -0.0038703814659, -0.0179802276812, -0.0205034951069, -0.0130433393249, + -0.0006948272419, +0.0103553025764, +0.0109770321550, +0.0042907928900, + +0.0000792889954, -0.0025416417016, -0.0053818653885, -0.0022674256042, + +0.0040531256241, +0.0073139604554, +0.0078625923707, +0.0063752746155, + +0.0021697623327, -0.0027731176353, -0.0044859197124, -0.0048699820252, + -0.0055220691033, -0.0016822448572, +0.0081733572998, +0.0157982824046, + +0.0130980627122, +0.0014933093669, -0.0105260635111, -0.0152009187138, + -0.0122508488117, -0.0048394248053, +0.0038703814659, +0.0091607749151, + +0.0067287797084, +0.0008166566806, -0.0017126023567, +0.0003656880367, + +0.0036081485920, +0.0039678450170, +0.0006948272419, -0.0029560615139, + -0.0063083682844, -0.0069298981426, -0.0014202117036, +0.0067593369283, + +0.0093618933493, +0.0052356700619, -0.0015114839225, -0.0080515278610, + -0.0125799880168, -0.0111294188137, -0.0024319952067, +0.0069544637507, + +0.0091913321350, +0.0040287597364, -0.0029500699021, -0.0063692830038, + -0.0060217695227, -0.0054062312762, -0.0040409426802, +0.0001767525464, + +0.0038092670262, +0.0035715997603, +0.0016760535251, +0.0001829438786, + -0.0009265028959, -0.0026452965848, -0.0039800279609, -0.0031206311164, + -0.0007741162373, -0.0000730976633, -0.0014383862592, -0.0025416417016, + -0.0028158577991, -0.0033826642700, -0.0037727181945, -0.0035899740363, + -0.0021332135011, +0.0012372678250, +0.0037970840823, +0.0031390053925, + +0.0005851807470, -0.0024441781506, -0.0044371879369, -0.0038398242461, + -0.0011823447174, +0.0011032554424, +0.0018040742960, +0.0008837627322, + -0.0019992011184, -0.0053209506691, -0.0064607549431, -0.0041689634512, + -0.0001767525464, +0.0021453964450, +0.0016700619133, +0.0013531056521, + +0.0017737167965, +0.0013347313761, +0.0005180746954, -0.0003962452566, + -0.0025050928700, -0.0039984022369, -0.0032668264430, -0.0018771719593, + -0.0006033553026, +0.0008350309567, +0.0012800079888, +0.0000000000000, + -0.0009021370082, -0.0011823447174, -0.0016029558618, -0.0013896544837, + +0.0000792889954, +0.0001402037148, -0.0020417415618, -0.0033339324945, + -0.0014080287597, +0.0013225484322, +0.0016395046934, -0.0002804074296, + -0.0020539245057, -0.0022796085480, -0.0011154383863, +0.0001461953265, + +0.0003413221490, -0.0006460954663, -0.0016456960256, -0.0007862991811, + +0.0007375674056, +0.0013103654883, +0.0010667066107, +0.0001645696026, + -0.0007375674056, +0.0001583782704, +0.0015785899740, +0.0014445775914, + -0.0004022368684, -0.0019930097863, -0.0025903734771, -0.0014445775914, + +0.0007741162373, +0.0012981825444, +0.0003962452566, +0.0001461953265, + +0.0003535050929, +0.0006826442980, +0.0013958458159, +0.0018589974036, + +0.0017004194128, +0.0003596964250, -0.0011032554424, -0.0006520870781, + +0.0006582784102, +0.0002316756541, -0.0004875174755, +0.0005546235271, + +0.0018955462353, +0.0017309766327, +0.0014627521470, +0.0014933093669, + +0.0002073097663, -0.0016638705812, -0.0014383862592, -0.0002985819852, + -0.0005851807470, -0.0007497503495, +0.0005302576393, +0.0020906730577, + +0.0027183942481, +0.0021941282205, +0.0012007189934, +0.0007922907929, + +0.0009324945077, +0.0009752346715, +0.0005851807470, -0.0002863990413, + -0.0008715797883, -0.0006704613541, +0.0000061913321, -0.0000305572199, + -0.0008288396245, -0.0008532055123, -0.0003107649291, -0.0003351308169, + -0.0000305572199, +0.0013469143200, +0.0020906730577, +0.0019992011184, + +0.0014383862592, +0.0003718793689, -0.0003291392051, -0.0001158378270, + +0.0001158378270, -0.0000792889954, -0.0003291392051, +0.0001461953265, + +0.0007679249051, +0.0007191931296, +0.0009508687837, +0.0011457958858, + +0.0008472139005, +0.0005424405832, +0.0008837627322, +0.0015664070302, + +0.0014080287597, +0.0004753345317, -0.0002438585980, -0.0009081286199, + -0.0014993009786, -0.0014811264230, -0.0008837627322, -0.0004206111444, + -0.0003535050929, -0.0002985819852, -0.0001340123827, +0.0002011184342, + +0.0012190932694, +0.0021150389455, +0.0025232674256, +0.0025660075894, + +0.0010483323347, -0.0008350309567, -0.0004327940883, +0.0003475134811, + -0.0006155382465, -0.0017187936888, -0.0013165568205, -0.0000730976633, + +0.0001523866587, -0.0002498502097, +0.0000730976633, +0.0011092470541, + +0.0015969642500, +0.0005180746954, -0.0007010185740, -0.0004022368684, + -0.0001218294388, -0.0002742160975, +0.0001889354903, +0.0011032554424, + +0.0021819452766, +0.0022125024965, +0.0005789894148, -0.0009630517276, + -0.0017493509087, -0.0021759536649, -0.0018162572399, -0.0000183742760, + +0.0015542240863, +0.0007497503495, -0.0007313760735, -0.0007070101857, + +0.0000305572199, +0.0005058917515, +0.0010299580587, +0.0011701617735, + +0.0003535050929, -0.0007922907929, -0.0012434591572, -0.0010848811664, + -0.0002863990413, +0.0008228480128, +0.0009324945077, -0.0004509686439, + -0.0017737167965, -0.0014567605353, -0.0006704613541, -0.0006642700220, + -0.0007679249051, -0.0004084282005, +0.0003351308169, +0.0006399041342, + -0.0000061913321, -0.0004571599760, -0.0001036548832, +0.0002682244857, + +0.0002682244857, +0.0001096464949, +0.0004084282005, +0.0003107649291, + -0.0002376672658, -0.0000914719393, +0.0001340123827, -0.0001461953265, + -0.0002498502097, -0.0000061913321, +0.0008837627322, +0.0017615338526, + +0.0012678250449, +0.0001583782704, -0.0010910724985, -0.0022977831037, + -0.0026940283603, -0.0022490513281, -0.0008593968444, +0.0007313760735, + +0.0010177751148, +0.0004509686439, +0.0003778709806, +0.0009203115638, + +0.0012129019373, +0.0006948272419, +0.0000243658878, -0.0002438585980, + +0.0000000000000, +0.0002985819852, -0.0000609147194, -0.0005851807470, + -0.0010788895546, -0.0014323946475, -0.0009508687837, +0.0002438585980, + +0.0010117835031, +0.0011336129419, +0.0008653884562, +0.0005729978031, + +0.0003596964250, -0.0001461953265, -0.0001829438786, +0.0005180746954, + +0.0005668064709, -0.0000427401638, -0.0001767525464, -0.0000549231076, + -0.0001461953265, -0.0001523866587, -0.0001402037148, +0.0000000000000, + +0.0002620331536, +0.0002498502097, +0.0004449770322, +0.0009386858398, + +0.0005851807470, -0.0003962452566, -0.0010970641102, -0.0017797084082, + -0.0023221489914, -0.0019015378470, -0.0004997004194, +0.0009081286199, + +0.0015664070302, +0.0017309766327, +0.0019442780108, +0.0017371679648, + +0.0006520870781, -0.0000549231076, +0.0002133013781, +0.0006033553026, + +0.0004997004194, +0.0002925903735, +0.0004997004194, +0.0009630517276, + +0.0006217295786, -0.0002985819852, -0.0006582784102, -0.0006642700220, + -0.0007191931296, -0.0004937088077, -0.0003962452566, -0.0005364489714, + -0.0002620331536, +0.0002073097663, +0.0002682244857, +0.0002073097663, + +0.0004266027561, +0.0009324945077, +0.0012616337128, +0.0011945276613, + +0.0009630517276, +0.0012250848812, +0.0011945276613, +0.0000000000000, + -0.0009996005592, -0.0008777711204, -0.0007313760735, -0.0004327940883, + +0.0004875174755, +0.0007557419613, +0.0000305572199, -0.0006277211903, + -0.0003840623128, +0.0002376672658, +0.0005486319153, +0.0002194927102, + +0.0001583782704, +0.0005180746954, +0.0002073097663, -0.0003535050929, + -0.0000365488316, +0.0004266027561, +0.0004631515878, +0.0005242660276, + +0.0007010185740, +0.0009143199521, +0.0010423407230, +0.0006095466347, + -0.0000730976633, -0.0005486319153, -0.0005546235271, -0.0001523866587, + +0.0001705612143, +0.0001951268224, +0.0001461953265, +0.0000974635510, + +0.0000487317755, +0.0001218294388, +0.0001829438786, +0.0004022368684, + +0.0007191931296, +0.0007191931296, +0.0003413221490, +0.0000487317755, + +0.0002073097663, +0.0005118833633, +0.0003656880367, -0.0002011184342, + -0.0003900539245, +0.0000121829439, +0.0001829438786, -0.0002011184342, + -0.0003413221490, +0.0000305572199, +0.0005242660276, +0.0004144198123, + -0.0002620331536, -0.0005973636908, -0.0003229478730, +0.0002011184342, + +0.0002620331536, +0.0000730976633, +0.0004815258638, +0.0012007189934, + +0.0008410225684, -0.0002316756541, -0.0006217295786, +0.0001583782704, + +0.0007191931296, +0.0002073097663, -0.0002376672658, -0.0000427401638, + +0.0000549231076, +0.0000121829439, -0.0000365488316, +0.0000000000000, + -0.0000365488316, -0.0001096464949, +0.0000121829439, -0.0000365488316, + -0.0003778709806, -0.0003840623128, -0.0000061913321, +0.0005424405832, + +0.0011092470541, +0.0012738166567, +0.0011579788296, +0.0008044737368, + -0.0004631515878, -0.0020417415618, -0.0022977831037, -0.0015542240863, + -0.0008593968444, +0.0000000000000, +0.0007922907929, +0.0008410225684, + +0.0006033553026, +0.0003900539245, +0.0004997004194, +0.0008044737368, + +0.0004084282005, -0.0006095466347, -0.0016395046934, -0.0019015378470, + -0.0013774715398, -0.0002863990413, +0.0008837627322, +0.0012250848812, + +0.0005911723587, -0.0000243658878, -0.0003535050929, -0.0002498502097, + +0.0000914719393, +0.0000061913321, -0.0002863990413, -0.0003169562612, + -0.0001096464949, +0.0000427401638, -0.0002742160975, -0.0012556421011, + -0.0018468144598, -0.0010910724985, +0.0002985819852, +0.0013834631516, + +0.0015725983623, +0.0008653884562, +0.0000730976633, -0.0003535050929, + -0.0006642700220, -0.0008777711204, -0.0011457958858, -0.0012616337128, + -0.0008044737368, -0.0001583782704, +0.0007313760735, +0.0011214299980, + +0.0003596964250, -0.0006277211903, -0.0014140203715, -0.0019382863990, + -0.0012800079888, +0.0001951268224, +0.0008288396245, +0.0005302576393, + +0.0004327940883, +0.0001767525464, -0.0005608148592, -0.0007191931296, + -0.0004449770322, -0.0004022368684, -0.0003778709806, -0.0002438585980, + -0.0001461953265, -0.0001340123827, -0.0002560415418, -0.0003778709806, + -0.0005180746954, -0.0006095466347, -0.0004084282005, -0.0001705612143, + -0.0002376672658, -0.0002376672658, -0.0001036548832, -0.0001096464949, + +0.0000609147194, +0.0000121829439, -0.0007132015179, -0.0014933093669, + -0.0014933093669, -0.0009081286199, -0.0002863990413, +0.0002620331536, + +0.0008106650689, +0.0008899540643, +0.0002498502097, -0.0002620331536, + -0.0002073097663, +0.0001829438786, +0.0002620331536, -0.0001218294388, + -0.0004449770322, -0.0003718793689, -0.0003047733174, -0.0002011184342, + +0.0001158378270, +0.0004144198123, +0.0004449770322, +0.0002804074296, + -0.0001218294388, -0.0005364489714, -0.0005424405832, -0.0004022368684, + -0.0004327940883, -0.0003900539245, -0.0000183742760, +0.0003229478730, + +0.0006460954663, +0.0007862991811, +0.0004753345317, +0.0002316756541, + +0.0001218294388, -0.0002376672658, -0.0003351308169, -0.0000305572199, + +0.0001036548832, -0.0000852806071, -0.0005118833633, -0.0005058917515, + -0.0000121829439, +0.0003475134811, +0.0003475134811, +0.0003047733174, + +0.0004022368684, +0.0003535050929, -0.0001280207709, -0.0006033553026, + -0.0005364489714, -0.0002863990413, -0.0000730976633, +0.0002194927102, + +0.0002742160975, +0.0000730976633, +0.0003413221490, +0.0006704613541, + +0.0003718793689, -0.0004327940883, -0.0007801078490, -0.0002682244857, + +0.0002194927102, +0.0002194927102, +0.0006460954663, +0.0012434591572, + +0.0010177751148, +0.0001951268224, -0.0006217295786, -0.0009630517276, + -0.0004387857000, +0.0003596964250, +0.0008106650689, +0.0008106650689, + +0.0003718793689, -0.0001402037148, -0.0005546235271, -0.0007313760735, + -0.0004875174755, -0.0001645696026, +0.0002194927102, +0.0008777711204, + +0.0011579788296, +0.0005911723587, -0.0001889354903, -0.0004387857000, + -0.0001340123827, +0.0000974635510, +0.0000487317755, +0.0002011184342, + +0.0004631515878, +0.0002498502097, -0.0001705612143, -0.0002498502097, + +0.0000792889954, +0.0003778709806, +0.0002073097663, -0.0000305572199, + -0.0001280207709, -0.0003656880367, -0.0003656880367, +0.0000183742760, + +0.0003656880367, +0.0002438585980, -0.0001096464949, -0.0002742160975, + -0.0000792889954, +0.0001096464949, +0.0001402037148, +0.0001583782704, + +0.0002925903735, +0.0005242660276, +0.0005486319153, +0.0000730976633, + -0.0003778709806, -0.0001402037148, +0.0002376672658, +0.0001583782704, + -0.0001889354903, -0.0002438585980, -0.0000914719393, -0.0002498502097, + -0.0003778709806, -0.0001829438786, +0.0001218294388, +0.0002133013781, + +0.0000730976633, +0.0000792889954, -0.0000183742760, -0.0004266027561, + -0.0002682244857, +0.0002863990413, +0.0004875174755, +0.0004693429199, + +0.0002254843219, -0.0000792889954, -0.0000121829439, +0.0000183742760, + -0.0003169562612, -0.0007375674056, -0.0008350309567, -0.0004206111444, + +0.0002438585980, +0.0007313760735, +0.0008106650689, +0.0006095466347, + +0.0002925903735, -0.0003351308169, -0.0008593968444, -0.0007375674056, + -0.0000852806071, +0.0006886359097, +0.0009690433393, +0.0005851807470, + +0.0001829438786, -0.0001280207709, -0.0004206111444, -0.0004084282005, + -0.0001096464949, +0.0001951268224, +0.0002194927102, +0.0000792889954, + -0.0000792889954, -0.0002560415418, -0.0003229478730, -0.0001523866587, + +0.0001096464949, +0.0003778709806, +0.0003778709806, -0.0002254843219, + -0.0008593968444, -0.0008044737368, -0.0003107649291, +0.0000792889954, + +0.0003291392051, +0.0003656880367, +0.0001583782704, -0.0000792889954, + -0.0002254843219, -0.0001889354903, +0.0000671060515, +0.0002376672658, + +0.0001158378270, +0.0000061913321, -0.0000365488316, -0.0000730976633, + -0.0002011184342, -0.0006095466347, -0.0008899540643, -0.0007619332934, + -0.0004327940883, +0.0000183742760, +0.0004509686439, +0.0004571599760, + +0.0002925903735, +0.0002804074296, +0.0003047733174, +0.0001036548832, + -0.0000427401638, -0.0000487317755, +0.0000061913321, +0.0000549231076, + -0.0001583782704, -0.0002682244857, +0.0000792889954, +0.0002438585980, + -0.0000305572199, -0.0003047733174, -0.0002133013781, -0.0000183742760, + -0.0000487317755, -0.0002254843219, -0.0001280207709, +0.0000792889954, + +0.0000000000000, -0.0001218294388, +0.0000549231076, +0.0001829438786, + +0.0000549231076, -0.0000730976633, -0.0001829438786, -0.0002742160975, + -0.0002804074296, -0.0000609147194, +0.0002133013781, +0.0002438585980, + +0.0001829438786, +0.0001889354903, +0.0003778709806, +0.0004327940883, + +0.0001829438786, +0.0000243658878, -0.0000549231076, -0.0002985819852, + -0.0006217295786, -0.0007984821250, -0.0005118833633, +0.0000609147194, + +0.0004631515878, +0.0005729978031, +0.0004387857000, +0.0003107649291, + +0.0002376672658, +0.0001461953265, +0.0001218294388, +0.0002498502097, + +0.0003596964250, +0.0004266027561, +0.0004387857000, +0.0002316756541, + -0.0003475134811, -0.0009934092271, -0.0010483323347, -0.0002863990413, + +0.0006095466347, +0.0009324945077, +0.0006217295786, +0.0001218294388, + -0.0002376672658, -0.0002316756541, -0.0001218294388, -0.0001096464949, + -0.0001829438786, -0.0001523866587, +0.0000427401638, +0.0002804074296, + +0.0003778709806, +0.0002804074296, +0.0001767525464, +0.0001096464949, + -0.0001583782704, -0.0003718793689, -0.0001158378270, +0.0001705612143, + +0.0001889354903, +0.0000427401638, -0.0000914719393, -0.0001767525464, + -0.0002254843219, -0.0000852806071, -0.0000730976633, -0.0002194927102, + -0.0001402037148, +0.0000730976633, +0.0000852806071, -0.0000305572199, + -0.0001705612143, -0.0000852806071, +0.0003107649291, +0.0008044737368, + +0.0009690433393, +0.0007557419613, +0.0003535050929, -0.0000427401638, + -0.0002316756541, -0.0003229478730, -0.0004449770322, -0.0002925903735, + +0.0001583782704, +0.0003778709806, +0.0000671060515, -0.0002620331536, + -0.0003107649291, -0.0002438585980, -0.0000974635510, +0.0002498502097, + +0.0005364489714, +0.0004449770322, +0.0002376672658, +0.0002316756541, + +0.0002133013781, -0.0000730976633, -0.0003351308169, -0.0001523866587, + +0.0003596964250, +0.0005302576393, +0.0000549231076, -0.0002254843219, + +0.0000305572199, +0.0000609147194, -0.0003718793689, -0.0005789894148, + -0.0002742160975, +0.0001461953265, +0.0003169562612, +0.0002316756541, + -0.0000792889954, -0.0003962452566, -0.0004022368684, +0.0000000000000, + +0.0005058917515, +0.0006582784102, +0.0003047733174, -0.0004449770322, + -0.0011457958858, -0.0008532055123, +0.0002804074296, +0.0010667066107, + +0.0010239664470, +0.0006399041342, +0.0002742160975, -0.0002438585980, + -0.0008593968444, -0.0011092470541, -0.0007375674056, -0.0001705612143, + +0.0001523866587, +0.0003107649291, +0.0006095466347, +0.0008472139005, + +0.0005911723587, -0.0001402037148, -0.0005302576393, -0.0001402037148, + +0.0002682244857, +0.0000914719393, -0.0000792889954, +0.0001036548832, + +0.0000974635510, +0.0000121829439, +0.0002863990413, +0.0006033553026, + +0.0004693429199, +0.0000609147194, -0.0002742160975, -0.0003778709806, + -0.0003351308169, -0.0001705612143, +0.0000487317755, +0.0002560415418, + +0.0000914719393, -0.0005180746954, -0.0007435590174, -0.0003351308169, + +0.0002194927102, +0.0006033553026, +0.0004937088077, +0.0000974635510, + -0.0002254843219, -0.0004509686439, -0.0004571599760, -0.0001951268224, + +0.0002560415418, +0.0005973636908, +0.0002985819852, -0.0002073097663, + -0.0001158378270, +0.0002254843219, +0.0000792889954, -0.0005424405832, + -0.0008288396245, -0.0004997004194, -0.0000852806071, +0.0003351308169, + +0.0008166566806, +0.0010055921710, +0.0007010185740, +0.0001951268224, + -0.0000305572199, -0.0002620331536, -0.0008593968444, -0.0010483323347, + -0.0001705612143, +0.0009690433393, +0.0012616337128, +0.0005608148592, + -0.0004144198123, -0.0009446774516, -0.0008044737368, -0.0005242660276, + -0.0001036548832, +0.0004753345317, +0.0007191931296, +0.0006217295786, + +0.0003475134811, -0.0004387857000, -0.0009996005592, -0.0007619332934, + -0.0001889354903, +0.0003107649291, +0.0005546235271, +0.0005851807470, + +0.0005668064709, +0.0003900539245, -0.0000427401638, -0.0005424405832, + -0.0005973636908, -0.0001036548832, +0.0002073097663, +0.0000852806071, + -0.0000792889954, -0.0002011184342, -0.0001889354903, +0.0001158378270, + +0.0007801078490, +0.0011092470541, +0.0002438585980, -0.0012494507689, + -0.0017187936888, -0.0007070101857, +0.0005302576393, +0.0009265028959, + +0.0005608148592, +0.0001645696026, -0.0000974635510, -0.0001705612143, + +0.0001461953265, +0.0006460954663, +0.0006704613541, -0.0000549231076, + -0.0010299580587, -0.0016091471939, -0.0013896544837, -0.0005302576393, + +0.0004753345317, +0.0009874176153, +0.0010726982225, +0.0009996005592, + +0.0007497503495, +0.0001158378270, -0.0005486319153, -0.0009203115638, + -0.0010055921710, -0.0006826442980, -0.0002316756541, +0.0000365488316, + +0.0001767525464, +0.0001218294388, -0.0001829438786, -0.0003840623128, + +0.0000183742760, +0.0007741162373, +0.0008532055123, +0.0001523866587, + -0.0002985819852, -0.0002925903735, -0.0002376672658, -0.0001218294388, + -0.0000671060515, -0.0003840623128, -0.0009446774516, -0.0011945276613, + -0.0007801078490, +0.0001402037148, +0.0009690433393, +0.0011336129419, + +0.0004693429199, -0.0003900539245, -0.0006642700220, -0.0005486319153, + -0.0003900539245, +0.0000000000000, +0.0004144198123, +0.0005608148592, + +0.0003169562612, -0.0002620331536, -0.0005364489714, -0.0001218294388, + +0.0002925903735, +0.0005058917515, +0.0007070101857, +0.0007862991811, + +0.0005789894148, +0.0000730976633, -0.0006460954663, -0.0009934092271, + -0.0006886359097, -0.0003047733174, -0.0002742160975, -0.0003962452566, + -0.0001705612143, +0.0003778709806, +0.0006582784102, +0.0006399041342, + +0.0005789894148, +0.0002804074296, -0.0002498502097, -0.0007557419613, + -0.0008350309567, -0.0002254843219, +0.0006704613541, +0.0011579788296, + +0.0007862991811, -0.0001340123827, -0.0006277211903, -0.0004084282005, + -0.0002133013781, -0.0003413221490, -0.0002985819852, +0.0001218294388, + +0.0004206111444, +0.0004571599760, +0.0003413221490, -0.0000121829439, + -0.0003718793689, -0.0004509686439, -0.0003962452566, -0.0002376672658, + +0.0000000000000, +0.0002925903735, +0.0006582784102, +0.0008532055123, + +0.0008593968444, +0.0007497503495, +0.0003413221490, -0.0005911723587, + -0.0014811264230, -0.0011641701618, +0.0002925903735, +0.0014871180348, + +0.0014080287597, +0.0003900539245, -0.0004327940883, -0.0006764529658, + -0.0008837627322, -0.0009690433393, -0.0004875174755, +0.0003351308169, + +0.0006217295786, +0.0002316756541, +0.0001645696026, +0.0008959456761, + +0.0014749350909, +0.0010299580587, -0.0000487317755, -0.0008288396245, + -0.0011885360495, -0.0012921909327, -0.0009934092271, -0.0002316756541, + +0.0004875174755, +0.0006948272419, +0.0004144198123, +0.0000609147194, + -0.0000427401638, -0.0000549231076, -0.0004815258638, -0.0011579788296, + -0.0010055921710, -0.0000243658878, +0.0006277211903, +0.0004144198123, + +0.0000609147194, +0.0000974635510, +0.0003475134811, +0.0004084282005, + +0.0002011184342, +0.0000243658878, -0.0001705612143, -0.0003413221490, + +0.0000671060515, +0.0004997004194, +0.0004631515878, +0.0002804074296, + -0.0004022368684, -0.0015176752546, -0.0018955462353, -0.0012921909327, + -0.0004144198123, +0.0004693429199, +0.0012129019373, +0.0015664070302, + +0.0015969642500, +0.0012738166567, +0.0004571599760, -0.0002376672658, + -0.0005668064709, -0.0009874176153, -0.0012556421011, -0.0008106650689, + +0.0001218294388, +0.0006460954663, +0.0007497503495, +0.0009446774516, + +0.0010970641102, +0.0005424405832, -0.0002804074296, -0.0010726982225, + -0.0017797084082, -0.0017004194128, -0.0005608148592, +0.0008410225684, + +0.0017493509087, +0.0017737167965, +0.0008350309567, -0.0002620331536, + -0.0007679249051, -0.0005789894148, -0.0001645696026, -0.0001036548832, + -0.0002863990413, +0.0000121829439, +0.0006155382465, +0.0009812262832, + +0.0010299580587, +0.0006582784102, +0.0001829438786, -0.0000549231076, + -0.0004815258638, -0.0009874176153, -0.0009021370082, -0.0005364489714, + -0.0006095466347, -0.0007497503495, -0.0002133013781, +0.0004815258638, + +0.0005789894148, +0.0007191931296, +0.0012800079888, +0.0015480327541, + +0.0011823447174, +0.0003351308169, -0.0005180746954, -0.0010483323347, + -0.0011214299980, -0.0006886359097, -0.0000549231076, +0.0003962452566, + +0.0008410225684, +0.0010055921710, +0.0006399041342, +0.0000852806071, + -0.0002376672658, -0.0007191931296, -0.0011519872179, -0.0007191931296, + +0.0002498502097, +0.0008106650689, +0.0007375674056, +0.0002011184342, + -0.0002742160975, -0.0002925903735, -0.0003107649291, -0.0004693429199, + -0.0005302576393, -0.0002376672658, +0.0003413221490, +0.0007132015179, + +0.0007132015179, +0.0004387857000, -0.0002620331536, -0.0009324945077, + -0.0008593968444, -0.0004509686439, -0.0000549231076, +0.0006399041342, + +0.0012067106052, +0.0008288396245, -0.0000730976633, -0.0007070101857, + -0.0010117835031, -0.0009446774516, -0.0002925903735, +0.0005058917515, + +0.0009265028959, +0.0008959456761, +0.0004693429199, +0.0000183742760, + -0.0000792889954, +0.0000852806071, +0.0001951268224, +0.0000852806071, + +0.0000061913321, +0.0002742160975, +0.0004084282005, +0.0000671060515, + -0.0003413221490, -0.0006399041342, -0.0007557419613, -0.0004815258638, + -0.0002863990413, -0.0004266027561, -0.0002011184342, +0.0005546235271, + +0.0010970641102, +0.0010788895546, +0.0006704613541, +0.0001036548832, + -0.0003351308169, -0.0005424405832, -0.0005180746954, -0.0002254843219, + -0.0001036548832, -0.0003047733174, -0.0002742160975, +0.0000000000000, + +0.0002985819852, +0.0004571599760, +0.0000609147194, -0.0004631515878, + -0.0004631515878, -0.0003475134811, -0.0003778709806, -0.0003351308169, + -0.0004084282005, -0.0006399041342, -0.0006642700220, -0.0002194927102, + +0.0004815258638, +0.0008350309567, +0.0004937088077, -0.0001645696026, + -0.0005729978031, -0.0006826442980, -0.0006339125225, -0.0002742160975, + +0.0003596964250, +0.0006948272419, +0.0004084282005, +0.0000974635510, + -0.0000183742760, -0.0003351308169, -0.0006277211903, -0.0005729978031, + -0.0003291392051, -0.0001461953265, -0.0004266027561, -0.0007375674056, + -0.0004266027561, -0.0000730976633, +0.0000000000000, +0.0002620331536, + +0.0005851807470, +0.0004022368684, -0.0000121829439, -0.0002498502097, + -0.0001280207709, +0.0001218294388, +0.0002682244857, +0.0004206111444, + +0.0006095466347, +0.0002985819852, -0.0002560415418, -0.0003900539245, + -0.0001705612143, +0.0001461953265, +0.0002073097663, -0.0000914719393, + -0.0000792889954, +0.0003107649291, +0.0003291392051, +0.0000487317755, + -0.0001340123827, -0.0001523866587, -0.0001829438786, -0.0002316756541, + -0.0000730976633, +0.0001096464949, +0.0002682244857, +0.0004815258638, + +0.0004327940883, -0.0000427401638, -0.0003413221490, -0.0000427401638, + +0.0003596964250, +0.0002742160975, -0.0000365488316, +0.0000000000000, + +0.0002254843219, +0.0000427401638, -0.0004875174755, -0.0006033553026, + -0.0002560415418, +0.0000914719393, +0.0004144198123, +0.0005789894148, + +0.0004875174755, +0.0003169562612, +0.0001951268224, +0.0000121829439, + -0.0002011184342, -0.0001461953265, -0.0000183742760, -0.0001218294388, + -0.0000609147194, +0.0004266027561, +0.0009386858398, +0.0011092470541, + +0.0008288396245, +0.0001280207709, -0.0006642700220, -0.0010910724985, + -0.0010605152786, -0.0008593968444, -0.0003718793689, +0.0005118833633, + +0.0010726982225, +0.0007922907929, +0.0002804074296, +0.0000427401638, + +0.0000121829439, -0.0000852806071, -0.0001829438786, +0.0000671060515, + +0.0005364489714, +0.0008837627322, +0.0007801078490, +0.0002438585980, + -0.0000792889954, -0.0000243658878, -0.0000974635510, -0.0003718793689, + -0.0003778709806, -0.0001705612143, -0.0002133013781, -0.0002985819852, + -0.0001767525464, -0.0000121829439, +0.0000549231076, +0.0000000000000, + -0.0001218294388, -0.0000671060515, +0.0002316756541, +0.0006155382465, + +0.0006642700220, +0.0001158378270, -0.0004206111444, -0.0004206111444, + -0.0001889354903, -0.0001889354903, -0.0002804074296, -0.0001280207709, + +0.0000852806071, +0.0000427401638, -0.0000305572199, +0.0001340123827, + +0.0002011184342, -0.0000914719393, -0.0004266027561, -0.0004509686439, + -0.0001340123827, +0.0003351308169, +0.0004206111444, -0.0000852806071, + -0.0005486319153, -0.0006642700220, -0.0006704613541, -0.0003169562612, + +0.0002804074296, +0.0004509686439, +0.0003229478730, +0.0002560415418, + +0.0000792889954, -0.0001340123827, -0.0000914719393, +0.0001158378270, + +0.0000974635510, +0.0000243658878, +0.0001645696026, +0.0001645696026, + -0.0000549231076, -0.0001096464949, -0.0000487317755, -0.0002620331536, + -0.0006764529658, -0.0007557419613, -0.0003413221490, +0.0000305572199, + +0.0001705612143, +0.0004387857000, +0.0006764529658, +0.0006826442980, + +0.0005424405832, +0.0003413221490, +0.0000487317755, -0.0003291392051, + -0.0005973636908, -0.0004387857000, -0.0000914719393, -0.0000974635510, + -0.0004144198123, -0.0003962452566, +0.0000000000000, +0.0002804074296, + +0.0003229478730, +0.0003840623128, +0.0004693429199, +0.0002316756541, + -0.0002804074296, -0.0005789894148, -0.0005118833633, -0.0001645696026, + +0.0001767525464, +0.0001767525464, -0.0000121829439, +0.0000914719393, + +0.0003107649291, +0.0001583782704, -0.0000305572199, -0.0000305572199, + -0.0002133013781, -0.0003962452566, -0.0001583782704, +0.0002863990413, + +0.0006095466347, +0.0006095466347, +0.0002863990413, -0.0002376672658, + -0.0007010185740, -0.0007132015179, -0.0003475134811, -0.0001461953265, + -0.0000792889954, +0.0002011184342, +0.0005851807470, +0.0005364489714, + +0.0001705612143, +0.0000914719393, +0.0000974635510, -0.0001705612143, + -0.0003840623128, -0.0002498502097, +0.0000671060515, +0.0002804074296, + +0.0002073097663, -0.0000121829439, -0.0001767525464, -0.0002560415418, + -0.0001889354903, +0.0000852806071, +0.0002498502097, +0.0002376672658, + +0.0002498502097, +0.0000974635510, -0.0002438585980, -0.0004631515878, + -0.0003475134811, -0.0000549231076, +0.0000427401638, -0.0000305572199, + +0.0000974635510, +0.0003229478730, +0.0001645696026, -0.0003413221490, + -0.0005118833633, -0.0002985819852, -0.0002985819852, -0.0002985819852, + +0.0001889354903, +0.0006704613541, +0.0005364489714, -0.0000487317755, + -0.0005118833633, -0.0005302576393, -0.0004144198123, -0.0005180746954, + -0.0004327940883, +0.0000974635510, +0.0005242660276, +0.0004631515878, + +0.0001340123827, -0.0000974635510, -0.0001340123827, -0.0000852806071, + -0.0001523866587, -0.0001705612143, +0.0000852806071, +0.0004631515878, + +0.0004144198123, +0.0000243658878, -0.0001829438786, -0.0000730976633, + +0.0000609147194, -0.0000671060515, -0.0003047733174, -0.0001523866587, + +0.0001889354903, +0.0001523866587, -0.0001218294388, -0.0002073097663, + +0.0000121829439, +0.0002133013781, +0.0002316756541, +0.0002620331536, + +0.0003475134811, +0.0003351308169, +0.0000427401638, -0.0003291392051, + -0.0003656880367, -0.0001402037148, -0.0000305572199, +0.0000549231076, + +0.0001705612143, +0.0001340123827, +0.0001036548832, +0.0000000000000, + -0.0002316756541, -0.0002863990413, -0.0002316756541, -0.0003656880367, + -0.0004327940883, +0.0000061913321, +0.0007253844618, +0.0010483323347, + +0.0006704613541, +0.0000792889954, -0.0002133013781, -0.0002498502097, + -0.0003107649291, -0.0002682244857, -0.0000914719393, -0.0001280207709, + -0.0001767525464, +0.0000183742760, +0.0000852806071, +0.0000852806071, + +0.0003107649291, +0.0004327940883, +0.0004266027561, +0.0003107649291, + -0.0000974635510, -0.0004937088077, -0.0005424405832, -0.0003962452566, + -0.0002498502097, +0.0001705612143, +0.0006704613541, +0.0005118833633, + -0.0000183742760, -0.0002133013781, -0.0002742160975, -0.0003169562612, + -0.0000549231076, +0.0003900539245, +0.0007070101857, +0.0006033553026, + +0.0002073097663, -0.0000121829439, -0.0000914719393, -0.0002925903735, + -0.0005058917515, -0.0003840623128, +0.0001583782704, +0.0006826442980, + +0.0007862991811, +0.0005608148592, +0.0001705612143, -0.0002438585980, + -0.0003962452566, -0.0002376672658, -0.0000487317755, +0.0000243658878, + +0.0000365488316, -0.0000671060515, -0.0001280207709, +0.0000427401638, + +0.0002925903735, +0.0004144198123, +0.0004084282005, +0.0000974635510, + -0.0003413221490, -0.0003962452566, -0.0001036548832, +0.0000852806071, + +0.0000852806071, +0.0001280207709, +0.0003656880367, +0.0005118833633, + +0.0002742160975, -0.0000549231076, -0.0000914719393, -0.0000792889954, + -0.0002560415418, -0.0002254843219, +0.0000914719393, +0.0001829438786, + +0.0000061913321, -0.0000305572199, +0.0000487317755, +0.0000427401638, + -0.0000549231076, -0.0000487317755, +0.0001461953265, +0.0001829438786, + -0.0000243658878, -0.0000549231076, +0.0000305572199, -0.0001705612143, + -0.0004144198123, -0.0003413221490, -0.0001889354903, -0.0001583782704, + -0.0000243658878, +0.0002133013781, +0.0002742160975, +0.0002011184342, + +0.0003047733174, +0.0003596964250, +0.0001645696026, -0.0000914719393, + -0.0002620331536, -0.0003169562612, -0.0003229478730, -0.0002925903735, + -0.0002316756541, -0.0001461953265, +0.0000549231076, +0.0003840623128, + +0.0005424405832, +0.0004631515878, +0.0002376672658, -0.0000609147194, + -0.0002560415418, -0.0002498502097, -0.0002985819852, -0.0003840623128, + -0.0002133013781, +0.0000427401638, +0.0000549231076, -0.0000852806071, + -0.0000671060515, +0.0002804074296, +0.0004997004194, +0.0001461953265, + -0.0002073097663, -0.0000183742760, +0.0001889354903, -0.0001645696026, + -0.0006826442980, -0.0007313760735, -0.0004509686439, -0.0002011184342, + +0.0000183742760, +0.0002682244857, +0.0003169562612, +0.0001461953265, + +0.0001523866587, +0.0003656880367, +0.0003962452566, +0.0002560415418, + +0.0000671060515, -0.0001829438786, -0.0003413221490, -0.0003596964250, + -0.0002925903735, -0.0002011184342, -0.0001158378270, -0.0000730976633, + -0.0000549231076, -0.0000061913321, -0.0000121829439, -0.0001340123827, + -0.0002073097663, -0.0000914719393, +0.0001951268224, +0.0003169562612, + +0.0000549231076, -0.0001280207709, -0.0000671060515, -0.0000487317755, + -0.0000730976633, -0.0000487317755, -0.0000792889954, -0.0001523866587, + -0.0002073097663, -0.0002620331536, -0.0001096464949, +0.0002620331536, + +0.0003962452566, +0.0001705612143, -0.0000549231076, -0.0002620331536, + -0.0003840623128, -0.0003107649291, -0.0002133013781, -0.0002376672658, + -0.0001158378270, +0.0002073097663, +0.0003229478730, +0.0000852806071, + -0.0001523866587, -0.0002316756541, -0.0001889354903, -0.0000183742760, + +0.0001767525464, +0.0002863990413, +0.0002254843219, +0.0000609147194, + -0.0000243658878, +0.0000000000000, +0.0000305572199, +0.0000121829439, + +0.0000000000000, -0.0000243658878, +0.0000305572199, +0.0002376672658, + +0.0003718793689, +0.0001645696026, -0.0002498502097, -0.0005364489714, + -0.0004937088077, -0.0002498502097, +0.0000549231076, +0.0003107649291, + +0.0003718793689, +0.0003107649291, +0.0001951268224, +0.0001340123827, + +0.0002133013781, +0.0002620331536, +0.0001705612143, +0.0000183742760, + -0.0002254843219, -0.0004144198123, -0.0003656880367, -0.0001951268224, + -0.0000365488316, +0.0000852806071, +0.0002804074296, +0.0004875174755, + +0.0004753345317, +0.0002804074296, +0.0000609147194, -0.0001767525464, + -0.0003169562612, -0.0002863990413, -0.0002194927102, -0.0001461953265, + +0.0000000000000, +0.0001829438786, +0.0002804074296, +0.0002560415418, + +0.0003047733174, +0.0004206111444, +0.0003047733174, +0.0000000000000, + -0.0001461953265, -0.0000609147194, +0.0000730976633, +0.0002254843219, + +0.0002742160975, +0.0000609147194, -0.0003351308169, -0.0006033553026, + -0.0005424405832, -0.0002194927102, +0.0001583782704, +0.0004753345317, + +0.0006582784102, +0.0006460954663, +0.0005118833633, +0.0002560415418, + -0.0001645696026, -0.0005973636908, -0.0006582784102, -0.0003047733174, + +0.0000671060515, +0.0002804074296, +0.0003718793689, +0.0004266027561, + +0.0004631515878, +0.0003718793689, +0.0001218294388, -0.0001402037148, + -0.0003107649291, -0.0004084282005, -0.0003962452566, -0.0002376672658, + -0.0000974635510, -0.0000730976633, -0.0000061913321, +0.0001583782704, + +0.0002376672658, +0.0002133013781, +0.0002254843219, +0.0002438585980, + +0.0001158378270, -0.0002073097663, -0.0004266027561, -0.0002073097663, + +0.0001645696026, +0.0002985819852, +0.0001951268224, -0.0000121829439, + -0.0001402037148, -0.0001583782704, -0.0001218294388, +0.0000183742760, + +0.0001583782704, +0.0000914719393, -0.0001158378270, -0.0002804074296, + -0.0002620331536, -0.0000792889954, +0.0002316756541, +0.0004753345317, + +0.0003351308169, -0.0000671060515, -0.0003718793689, -0.0004327940883, + -0.0002376672658, +0.0000671060515, +0.0002742160975, +0.0002804074296, + +0.0001645696026, +0.0000365488316, -0.0001036548832, -0.0003475134811, + -0.0003900539245, -0.0000243658878, +0.0003229478730, +0.0002133013781, + -0.0000792889954, -0.0001280207709, +0.0000061913321, +0.0000487317755, + -0.0001218294388, -0.0003107649291, -0.0002254843219, -0.0000061913321, + +0.0001340123827, +0.0002254843219, +0.0002438585980, +0.0001583782704, + +0.0000121829439, -0.0000730976633, -0.0000305572199, -0.0000183742760, + -0.0001705612143, -0.0003169562612, -0.0003229478730, -0.0001829438786, + +0.0000000000000, +0.0000974635510, +0.0001158378270, +0.0000974635510, + -0.0000243658878, -0.0000549231076, +0.0000487317755, +0.0000121829439, + -0.0001280207709, -0.0001705612143, -0.0001096464949, +0.0000487317755, + +0.0002438585980, +0.0002620331536, +0.0001096464949, -0.0000061913321, + -0.0000609147194, -0.0000671060515, -0.0001340123827, -0.0003962452566, + -0.0006642700220, -0.0005851807470, -0.0002682244857, +0.0000671060515, + +0.0004022368684, +0.0005973636908, +0.0005424405832, +0.0004753345317, + +0.0004144198123, +0.0001340123827, -0.0002254843219, -0.0003656880367, + -0.0002863990413, -0.0000792889954, +0.0000609147194, -0.0000121829439, + -0.0000914719393, -0.0000914719393, -0.0002498502097, -0.0003047733174, + -0.0000792889954, +0.0001645696026, +0.0004084282005, +0.0005546235271, + +0.0003656880367, +0.0000061913321, -0.0002804074296, -0.0004266027561, + -0.0004449770322, -0.0004693429199, -0.0004206111444, -0.0000730976633, + +0.0004327940883, +0.0005911723587, +0.0002863990413, -0.0000427401638, + -0.0001951268224, -0.0002682244857, -0.0002438585980, -0.0000974635510, + +0.0000427401638, +0.0000609147194, -0.0000183742760, -0.0000427401638, + +0.0000183742760, -0.0000549231076, -0.0003351308169, -0.0004266027561, + -0.0000549231076, +0.0003351308169, +0.0003718793689, +0.0002194927102, + +0.0000609147194, -0.0000487317755, -0.0001036548832, -0.0001583782704, + -0.0001583782704, -0.0000121829439, +0.0001829438786, +0.0001402037148, + -0.0002133013781, -0.0005180746954, -0.0004937088077, -0.0001951268224, + +0.0002560415418, +0.0004997004194, +0.0003291392051, +0.0000305572199, + -0.0001402037148, -0.0001889354903, -0.0001218294388, -0.0000121829439, + +0.0001340123827, +0.0003656880367, +0.0004327940883, +0.0002073097663, + -0.0000183742760, -0.0001523866587, -0.0002925903735, -0.0003840623128, + -0.0002863990413, -0.0000243658878, +0.0001829438786, +0.0001461953265, + -0.0000609147194, -0.0001705612143, +0.0000487317755, +0.0002804074296, + +0.0001461953265, -0.0000852806071, -0.0001645696026, -0.0001645696026, + +0.0000183742760, +0.0003107649291, +0.0003107649291, -0.0000549231076, + -0.0004815258638, -0.0005973636908, -0.0004327940883, -0.0002254843219, + +0.0000549231076, +0.0004266027561, +0.0004266027561, -0.0000121829439, + -0.0002925903735, -0.0001280207709, +0.0000671060515, +0.0000792889954, + +0.0000549231076, +0.0002194927102, +0.0004387857000, +0.0002620331536, + -0.0003169562612, -0.0005058917515, +0.0000671060515, +0.0006399041342, + +0.0006217295786, +0.0003962452566, +0.0002863990413, +0.0001523866587, + -0.0000974635510, -0.0002682244857, -0.0001583782704, -0.0000549231076, + -0.0002620331536, -0.0005242660276, -0.0003718793689, +0.0002498502097, + +0.0007984821250, +0.0007741162373, +0.0004753345317, +0.0003778709806, + +0.0003291392051, -0.0000549231076, -0.0004937088077, -0.0004937088077, + -0.0002254843219, -0.0000121829439, +0.0002254843219, +0.0004815258638, + +0.0006399041342, +0.0006277211903, +0.0002985819852, -0.0001583782704, + -0.0003291392051, -0.0004266027561, -0.0007010185740, -0.0008106650689, + -0.0005302576393, -0.0001096464949, +0.0002073097663, +0.0004997004194, + +0.0008044737368, +0.0007557419613, +0.0002438585980, -0.0001829438786, + -0.0001829438786, -0.0000671060515, -0.0002194927102, -0.0004509686439, + -0.0001705612143, +0.0004753345317, +0.0007435590174, +0.0003962452566, + -0.0000121829439, -0.0001218294388, -0.0001158378270, -0.0001340123827, + -0.0000487317755, -0.0000427401638, -0.0002560415418, -0.0004144198123, + -0.0003229478730, -0.0000183742760, +0.0003475134811, +0.0004753345317, + +0.0002560415418, -0.0000792889954, -0.0004084282005, -0.0005486319153, + -0.0001402037148, +0.0006095466347, +0.0008350309567, +0.0003229478730, + -0.0001951268224, -0.0003107649291, -0.0004022368684, -0.0005789894148, + -0.0003656880367, +0.0004084282005, +0.0010423407230, +0.0008837627322, + +0.0002682244857, -0.0001036548832, -0.0002925903735, -0.0005058917515, + -0.0004937088077, +0.0000061913321, +0.0006033553026, +0.0007679249051, + +0.0004022368684, -0.0001158378270, -0.0003900539245, -0.0002498502097, + +0.0000243658878, +0.0001461953265, +0.0001645696026, +0.0002133013781, + +0.0000974635510, -0.0002804074296, -0.0004571599760, -0.0001036548832, + +0.0001705612143, -0.0000671060515, -0.0003291392051, -0.0001829438786, + +0.0000671060515, +0.0000305572199, -0.0002925903735, -0.0004022368684, + -0.0000792889954, +0.0001889354903, +0.0001461953265, -0.0000365488316, + -0.0001523866587, -0.0000914719393, -0.0000121829439, -0.0001461953265, + -0.0004084282005, -0.0004631515878, -0.0001767525464, +0.0000852806071, + +0.0001583782704, +0.0000974635510, -0.0000061913321, -0.0002254843219, + -0.0004815258638, -0.0002985819852, +0.0002316756541, +0.0005364489714, + +0.0005118833633, +0.0002682244857, -0.0000792889954, -0.0003778709806, + -0.0005118833633, -0.0002254843219, +0.0004266027561, +0.0007497503495, + +0.0003900539245, -0.0002985819852, -0.0009021370082, -0.0012067106052, + -0.0009568603954, -0.0002194927102, +0.0004753345317, +0.0007741162373, + +0.0006704613541, +0.0002804074296, -0.0002438585980, -0.0008593968444, + -0.0012067106052, -0.0008044737368, +0.0001523866587, +0.0010848811664, + +0.0016638705812, +0.0017371679648, +0.0012067106052, +0.0001645696026, + -0.0009386858398, -0.0015602156980, -0.0014933093669, -0.0008959456761, + -0.0002011184342, +0.0003596964250, +0.0007435590174, +0.0008106650689, + +0.0005302576393, +0.0001402037148, -0.0003351308169, -0.0009021370082, + -0.0011154383863, -0.0005242660276, +0.0004084282005, +0.0008350309567, + +0.0005911723587, +0.0001340123827, -0.0002742160975, -0.0003900539245, + +0.0000121829439, +0.0005424405832, +0.0005546235271, +0.0001461953265, + -0.0002073097663, -0.0002438585980, -0.0000914719393, +0.0000000000000, + +0.0000427401638, +0.0000730976633, +0.0000121829439, -0.0000792889954, + -0.0002073097663, -0.0003962452566, -0.0005729978031, -0.0005180746954, + -0.0001523866587, +0.0003718793689, +0.0006642700220, +0.0005424405832, + +0.0003047733174, +0.0001461953265, +0.0000121829439, -0.0000183742760, + -0.0000243658878, -0.0000121829439, +0.0001158378270, +0.0001218294388, + -0.0002376672658, -0.0006339125225, -0.0006339125225, -0.0002133013781, + +0.0002742160975, +0.0005118833633, +0.0004693429199, +0.0001829438786, + -0.0000549231076, +0.0000671060515, +0.0002863990413, +0.0002985819852, + +0.0002316756541, +0.0003107649291, +0.0004693429199, +0.0001829438786, + -0.0005546235271, -0.0009446774516, -0.0005973636908, +0.0000000000000, + +0.0004144198123, +0.0006095466347, +0.0006886359097, +0.0005851807470, + +0.0002376672658, -0.0001767525464, -0.0003229478730, -0.0001340123827, + +0.0000061913321, -0.0001402037148, -0.0003169562612, -0.0002804074296, + -0.0000183742760, +0.0002560415418, +0.0004022368684, +0.0003778709806, + +0.0003169562612, +0.0002194927102, +0.0001218294388, +0.0001829438786, + +0.0002560415418, +0.0000305572199, -0.0002804074296, -0.0003107649291, + -0.0001340123827, +0.0000183742760, +0.0000914719393, +0.0000671060515, + -0.0000243658878, -0.0000549231076, +0.0001402037148, +0.0003107649291, + +0.0001829438786, -0.0000365488316, -0.0001523866587, -0.0002316756541, + -0.0002682244857, -0.0002498502097, -0.0001889354903, -0.0000243658878, + +0.0001705612143, +0.0003535050929, +0.0005242660276, +0.0006339125225, + +0.0004206111444, -0.0000549231076, -0.0004266027561, -0.0004266027561, + -0.0001523866587, +0.0001096464949, +0.0001583782704, +0.0001280207709, + +0.0001767525464, +0.0002316756541, +0.0001705612143, +0.0001523866587, + +0.0000852806071, -0.0001036548832, -0.0002133013781, -0.0001036548832, + +0.0000427401638, +0.0001096464949, +0.0000243658878, -0.0002194927102, + -0.0004266027561, -0.0004144198123, -0.0003291392051, -0.0001951268224, + +0.0001096464949, +0.0004327940883, +0.0004937088077, +0.0002133013781, + -0.0001767525464, -0.0004144198123, -0.0004144198123, -0.0002560415418, + -0.0000243658878, +0.0001280207709, +0.0000974635510, -0.0000609147194, + -0.0001705612143, -0.0001461953265, -0.0000914719393, +0.0000549231076, + +0.0003778709806, +0.0005668064709, +0.0002254843219, -0.0004693429199, + -0.0007375674056, -0.0003047733174, +0.0002438585980, +0.0004571599760, + +0.0004206111444, +0.0002316756541, +0.0000000000000, -0.0002254843219, + -0.0003351308169, -0.0002682244857, -0.0001402037148, -0.0000914719393, + -0.0000609147194, -0.0000427401638, -0.0000305572199, -0.0000365488316, + -0.0000852806071, -0.0001340123827, -0.0000609147194, +0.0000549231076, + +0.0001889354903, +0.0002804074296, +0.0001645696026, -0.0000549231076, + -0.0002011184342, -0.0003413221490, -0.0004449770322, -0.0002925903735, + +0.0000305572199, +0.0003047733174, +0.0004022368684, +0.0003291392051, + +0.0000974635510, -0.0002742160975, -0.0006217295786, -0.0006642700220, + -0.0003778709806, -0.0000427401638, +0.0001402037148, +0.0002985819852, + +0.0004022368684, +0.0002804074296, -0.0000852806071, -0.0004631515878, + -0.0004449770322, +0.0000487317755, +0.0004571599760, +0.0004206111444, + +0.0001829438786, +0.0000549231076, -0.0000061913321, -0.0001645696026, + -0.0003229478730, -0.0002438585980, +0.0000549231076, +0.0003535050929, + +0.0003718793689, +0.0000671060515, -0.0003107649291, -0.0004753345317, + -0.0003169562612, -0.0000671060515, -0.0000121829439, -0.0001158378270, + -0.0000974635510, +0.0001218294388, +0.0003047733174, +0.0002011184342, + -0.0000183742760, -0.0000730976633, +0.0000671060515, +0.0002376672658, + +0.0002194927102, -0.0000427401638, -0.0003656880367, -0.0004571599760, + -0.0002194927102, +0.0000365488316, +0.0000549231076, -0.0000487317755, + +0.0000000000000, +0.0002133013781, +0.0003778709806, +0.0004022368684, + +0.0003596964250, +0.0002438585980, +0.0000549231076, -0.0001523866587, + -0.0002620331536, -0.0002438585980, -0.0001461953265, -0.0000549231076, + +0.0000365488316, +0.0001158378270, +0.0001829438786, +0.0002011184342, + +0.0001523866587, +0.0000609147194, -0.0000609147194, -0.0001402037148, + +0.0000061913321, +0.0002620331536, +0.0002682244857, -0.0000609147194, + -0.0003962452566, -0.0003962452566, -0.0001705612143, +0.0000549231076, + +0.0002254843219, +0.0003291392051, +0.0003351308169, +0.0001951268224, + -0.0000487317755, -0.0002133013781, -0.0002194927102, -0.0001645696026, + +0.0000121829439, +0.0003291392051, +0.0004144198123, +0.0002316756541, + +0.0000305572199, -0.0000487317755, -0.0000974635510, -0.0001218294388, + -0.0001767525464, -0.0001523866587, -0.0000061913321, +0.0000549231076, + -0.0001036548832, -0.0002742160975, -0.0001767525464, +0.0001583782704, + +0.0004266027561, +0.0004875174755, +0.0003047733174, -0.0001340123827, + -0.0006217295786, -0.0007801078490, -0.0005364489714, -0.0000852806071, + +0.0002863990413, +0.0004815258638, +0.0004327940883, +0.0002011184342, + -0.0000183742760, -0.0001461953265, -0.0001889354903, -0.0001523866587, + -0.0000183742760, +0.0001889354903, +0.0003778709806, +0.0002925903735, + -0.0000852806071, -0.0004631515878, -0.0005546235271, -0.0004022368684, + -0.0002194927102, -0.0000061913321, +0.0003229478730, +0.0005424405832, + +0.0004387857000, +0.0001340123827, -0.0001767525464, -0.0004206111444, + -0.0004753345317, -0.0003535050929, -0.0000914719393, +0.0002133013781, + +0.0003656880367, +0.0002316756541, +0.0001280207709, +0.0002011184342, + +0.0002133013781, +0.0000061913321, -0.0002498502097, -0.0003475134811, + -0.0002133013781, -0.0000061913321, +0.0001158378270, +0.0001218294388, + +0.0000000000000, -0.0003107649291, -0.0005424405832, -0.0003535050929, + +0.0001340123827, +0.0004022368684, +0.0003413221490, +0.0002498502097, + +0.0002254843219, +0.0000852806071, -0.0001951268224, -0.0003962452566, + -0.0002133013781, +0.0001340123827, +0.0002498502097, +0.0001829438786, + +0.0002133013781, +0.0003351308169, +0.0003656880367, +0.0001705612143, + -0.0000914719393, -0.0001889354903, -0.0002133013781, -0.0002560415418, + -0.0002254843219, -0.0000487317755, +0.0002254843219, +0.0004815258638, + +0.0004631515878, +0.0002073097663, -0.0000427401638, -0.0001705612143, + -0.0002011184342, -0.0001218294388, +0.0000609147194, +0.0002498502097, + +0.0002194927102, +0.0000243658878, -0.0000852806071, +0.0000183742760, + +0.0002073097663, +0.0001767525464, -0.0000974635510, -0.0002925903735, + -0.0002620331536, -0.0001583782704, -0.0001096464949, -0.0000427401638, + +0.0001280207709, +0.0002804074296, +0.0001951268224, +0.0000305572199, + +0.0000427401638, +0.0001829438786, +0.0002011184342, +0.0000671060515, + -0.0000121829439, +0.0000609147194, +0.0001889354903, +0.0001645696026, + -0.0000121829439, -0.0001829438786, -0.0002498502097, -0.0002073097663, + -0.0001340123827, -0.0001767525464, -0.0001829438786, -0.0000487317755, + +0.0001340123827, +0.0002316756541, +0.0002073097663, +0.0000609147194, + -0.0000365488316, -0.0000243658878, -0.0000183742760, -0.0000974635510, + -0.0000609147194, +0.0000852806071, +0.0002498502097, +0.0002376672658, + -0.0000183742760, -0.0002438585980, -0.0001461953265, +0.0000183742760, + +0.0000609147194, +0.0000427401638, -0.0000427401638, -0.0002073097663, + -0.0002133013781, +0.0000000000000, +0.0002742160975, +0.0003656880367, + +0.0001767525464, -0.0000852806071, -0.0001583782704, -0.0000305572199, + +0.0001340123827, +0.0002194927102, +0.0001280207709, -0.0000671060515, + -0.0002682244857, -0.0002985819852, -0.0000487317755, +0.0002254843219, + +0.0002376672658, +0.0001402037148, +0.0000792889954, -0.0000305572199, + -0.0002133013781, -0.0003169562612, -0.0002254843219, +0.0000243658878, + +0.0002682244857, +0.0003475134811, +0.0001280207709, -0.0002254843219, + -0.0004084282005, -0.0003229478730, -0.0001951268224, -0.0000974635510, + +0.0000000000000, +0.0000914719393, +0.0001096464949, +0.0000487317755, + -0.0000549231076, -0.0001402037148, -0.0001645696026, -0.0000061913321, + +0.0002254843219, +0.0002742160975, +0.0000792889954, -0.0001280207709, + -0.0002560415418, -0.0002682244857, -0.0001461953265, +0.0000243658878, + +0.0001340123827, +0.0001158378270, -0.0000305572199, -0.0001218294388, + +0.0000487317755, +0.0002438585980, +0.0001523866587, -0.0001280207709, + -0.0003351308169, -0.0004022368684, -0.0002985819852, -0.0000914719393, + +0.0001645696026, +0.0003656880367, +0.0003718793689, +0.0001461953265, + -0.0002194927102, -0.0004875174755, -0.0003840623128, -0.0000121829439, + +0.0003169562612, +0.0004144198123, +0.0002498502097, -0.0000061913321, + -0.0001096464949, -0.0000730976633, -0.0000671060515, -0.0001523866587, + -0.0002254843219, -0.0001705612143, -0.0000061913321, +0.0000914719393, + +0.0000974635510, +0.0000671060515, +0.0000305572199, +0.0000609147194, + +0.0001461953265, +0.0001705612143, +0.0000974635510, -0.0000427401638, + -0.0001583782704, -0.0001340123827, +0.0000121829439, +0.0001951268224, + +0.0002560415418, +0.0001767525464, +0.0000487317755, -0.0000305572199, + -0.0000730976633, -0.0000671060515, -0.0000792889954, -0.0001705612143, + -0.0003291392051, -0.0003778709806, -0.0002194927102, +0.0000305572199, + +0.0002682244857, +0.0004571599760, +0.0004327940883, +0.0001705612143, + -0.0000609147194, -0.0001280207709, -0.0001461953265, -0.0001096464949, + +0.0000061913321, +0.0001158378270, +0.0001889354903, +0.0002498502097, + +0.0002011184342, +0.0000427401638, -0.0001036548832, -0.0001829438786, + -0.0001829438786, -0.0001096464949, +0.0000183742760, +0.0000671060515, + -0.0000792889954, -0.0002742160975, -0.0002560415418, -0.0000427401638, + +0.0001583782704, +0.0002254843219, +0.0001829438786, +0.0000974635510, + +0.0000671060515, +0.0001218294388, +0.0001705612143, +0.0000974635510, + +0.0000000000000, -0.0001096464949, -0.0001951268224, -0.0001402037148, + +0.0000487317755, +0.0001645696026, +0.0001705612143, +0.0000671060515, + -0.0001583782704, -0.0003475134811, -0.0002498502097, +0.0000243658878, + +0.0001705612143, +0.0001583782704, +0.0001705612143, +0.0001951268224, + +0.0001583782704, +0.0000609147194, -0.0000305572199, -0.0001036548832, + -0.0001889354903, -0.0002560415418, -0.0002073097663, -0.0000609147194, + +0.0001158378270, +0.0003047733174, +0.0003169562612, +0.0000852806071, + -0.0001829438786, -0.0003229478730, -0.0002742160975, +0.0000183742760, + +0.0003229478730, +0.0003169562612, +0.0000914719393, +0.0000000000000, + +0.0000000000000, -0.0000852806071, -0.0002133013781, -0.0001705612143, + -0.0000487317755, -0.0000061913321, -0.0000183742760, +0.0000000000000, + +0.0000974635510, +0.0002376672658, +0.0002620331536, +0.0000914719393, + -0.0001340123827, -0.0002073097663, -0.0001096464949, +0.0000609147194, + +0.0001829438786, +0.0001280207709, -0.0000609147194, -0.0002804074296, + -0.0004449770322, -0.0004144198123, -0.0000914719393, +0.0003169562612, + +0.0005242660276, +0.0004509686439, +0.0002376672658, +0.0000121829439, + -0.0001767525464, -0.0002560415418, -0.0000671060515, +0.0001829438786, + +0.0001767525464, -0.0000365488316, -0.0001036548832, +0.0000121829439, + +0.0000609147194, -0.0000427401638, -0.0001158378270, -0.0000365488316, + +0.0001523866587, +0.0003047733174, +0.0002804074296, +0.0001280207709, + +0.0000243658878, +0.0000000000000, -0.0000549231076, -0.0001645696026, + -0.0001523866587, -0.0000183742760, +0.0000427401638, -0.0000549231076, + -0.0001705612143, -0.0001951268224, -0.0001280207709, +0.0000000000000, + +0.0001096464949, +0.0000792889954, +0.0000061913321, +0.0000183742760, + +0.0000549231076, +0.0000671060515, +0.0000852806071, +0.0000792889954, + +0.0000427401638, +0.0000974635510, +0.0001645696026, +0.0000730976633, + -0.0001889354903, -0.0003900539245, -0.0003169562612, -0.0000671060515, + +0.0001280207709, +0.0002742160975, +0.0002985819852, +0.0001218294388, + -0.0001583782704, -0.0002985819852, -0.0002073097663, +0.0000305572199, + +0.0002073097663, +0.0002316756541, +0.0001829438786, +0.0000974635510, + -0.0000914719393, -0.0002560415418, -0.0002011184342, -0.0000061913321, + +0.0001461953265, +0.0002133013781, +0.0002194927102, +0.0001218294388, + -0.0000974635510, -0.0002742160975, -0.0002438585980, -0.0000609147194, + +0.0000792889954, +0.0000852806071, +0.0000305572199, +0.0000000000000, + -0.0000427401638, -0.0001158378270, -0.0000792889954, +0.0000305572199, + +0.0001218294388, +0.0001583782704, +0.0001951268224, +0.0001583782704, + +0.0000000000000, -0.0001461953265, -0.0001829438786, -0.0002011184342, + -0.0002133013781, -0.0001280207709, +0.0000305572199, +0.0000974635510, + +0.0000121829439, -0.0000549231076, +0.0000183742760, +0.0001158378270, + +0.0000852806071, +0.0000000000000, +0.0000671060515, +0.0001583782704, + +0.0000183742760, -0.0002254843219, -0.0002863990413, -0.0001461953265, + +0.0000427401638, +0.0001767525464, +0.0002438585980, +0.0002682244857, + +0.0001705612143, -0.0000792889954, -0.0003351308169, -0.0004022368684, + -0.0002560415418, +0.0000000000000, +0.0002011184342, +0.0002133013781, + +0.0000427401638, -0.0001280207709, -0.0001829438786, -0.0000792889954, + +0.0000671060515, +0.0001340123827, +0.0000852806071, +0.0000243658878, + -0.0000305572199, -0.0000792889954, -0.0001036548832, -0.0000609147194, + +0.0000487317755, +0.0001461953265, +0.0001036548832, -0.0000243658878, + -0.0001461953265, -0.0001523866587, -0.0000730976633, +0.0000243658878, + +0.0001280207709, +0.0002133013781, +0.0002011184342, +0.0001158378270, + +0.0000427401638, -0.0000183742760, -0.0000852806071, -0.0000914719393, + -0.0000305572199, +0.0000852806071, +0.0002011184342, +0.0001340123827, + -0.0000549231076, -0.0001645696026, -0.0001461953265, -0.0002011184342, + -0.0002985819852, -0.0002316756541, +0.0000061913321, +0.0001461953265, + +0.0000792889954, -0.0000305572199, -0.0000609147194, -0.0000671060515, + -0.0000792889954, -0.0000305572199, +0.0000852806071, +0.0000730976633, + -0.0000671060515, -0.0001036548832, +0.0000609147194, +0.0001280207709, + -0.0000427401638, -0.0002254843219, -0.0002011184342, -0.0001036548832, + -0.0000427401638, -0.0000121829439, -0.0000365488316, -0.0000243658878, + +0.0000914719393, +0.0002073097663, +0.0002011184342, +0.0000487317755, + -0.0001523866587, -0.0002316756541, -0.0001951268224, -0.0000792889954, + +0.0001036548832, +0.0002682244857, +0.0002804074296, +0.0002011184342, + +0.0000427401638, -0.0001158378270, -0.0002073097663, -0.0001645696026, + -0.0000427401638, +0.0000792889954, +0.0002194927102, +0.0003107649291, + +0.0001402037148, -0.0002011184342, -0.0004206111444, -0.0003169562612, + -0.0000487317755, +0.0001461953265, +0.0002254843219, +0.0002498502097, + +0.0001767525464, +0.0000365488316, -0.0000487317755, +0.0000061913321, + +0.0001523866587, +0.0001583782704, -0.0000730976633, -0.0002438585980, + -0.0001096464949, +0.0000974635510, +0.0001402037148, +0.0001218294388, + +0.0001280207709, +0.0000549231076, -0.0001829438786, -0.0004084282005, + -0.0004144198123, -0.0002560415418, -0.0000243658878, +0.0001951268224, + +0.0003596964250, +0.0003840623128, +0.0002560415418, +0.0000671060515, + -0.0000427401638, -0.0001158378270, -0.0001158378270, -0.0000549231076, + +0.0000061913321, +0.0000549231076, +0.0001096464949, +0.0000549231076, + -0.0000609147194, -0.0001036548832, -0.0000852806071, -0.0000852806071, + -0.0000852806071, -0.0000549231076, +0.0000487317755, +0.0002254843219, + +0.0003047733174, +0.0001767525464, -0.0000487317755, -0.0002073097663, + -0.0002073097663, -0.0000852806071, +0.0000914719393, +0.0002804074296, + +0.0003656880367, +0.0002925903735, +0.0000609147194, -0.0002011184342, + -0.0003107649291, -0.0001829438786, +0.0000121829439, +0.0001705612143, + +0.0002620331536, +0.0002438585980, +0.0000549231076, -0.0001096464949, + -0.0001340123827, -0.0000974635510, -0.0000730976633, -0.0000121829439, + +0.0000183742760, -0.0000609147194, -0.0001402037148, -0.0000549231076, + +0.0000792889954, +0.0000730976633, -0.0000852806071, -0.0001829438786, + -0.0000730976633, +0.0001523866587, +0.0003169562612, +0.0003047733174, + +0.0001036548832, -0.0001523866587, -0.0002682244857, -0.0002073097663, + -0.0001158378270, -0.0001218294388, -0.0001402037148, -0.0000609147194, + +0.0000730976633, +0.0001158378270, +0.0000487317755, +0.0000243658878, + +0.0000671060515, +0.0000914719393, +0.0000914719393, +0.0000487317755, + +0.0000305572199, +0.0000609147194, +0.0000609147194, +0.0000121829439, + -0.0000061913321, -0.0000365488316, -0.0000974635510, -0.0001158378270, + -0.0000061913321, +0.0000914719393, -0.0000121829439, -0.0002011184342, + -0.0001461953265, +0.0000730976633, +0.0001889354903, +0.0001705612143, + +0.0001461953265, +0.0000671060515, -0.0001096464949, -0.0002133013781, + -0.0001218294388, +0.0000852806071, +0.0002316756541, +0.0002376672658, + +0.0002316756541, +0.0003107649291, +0.0002742160975, +0.0000487317755, + -0.0001951268224, -0.0002498502097, -0.0001523866587, -0.0001036548832, + -0.0001461953265, -0.0000671060515, +0.0001218294388, +0.0002376672658, + +0.0001280207709, -0.0000549231076, -0.0000914719393, +0.0000365488316, + +0.0001461953265, +0.0000609147194, -0.0001583782704, -0.0002985819852, + -0.0002254843219, -0.0000061913321, +0.0002011184342, +0.0002985819852, + +0.0001951268224, -0.0000061913321, -0.0001158378270, -0.0000609147194, + +0.0000487317755, +0.0001158378270, +0.0001096464949, +0.0000000000000, + -0.0001645696026, -0.0002925903735, -0.0002925903735, -0.0001583782704, + +0.0001402037148, +0.0004266027561, +0.0004509686439, +0.0001583782704, + -0.0002073097663, -0.0004509686439, -0.0004631515878, -0.0002498502097, + +0.0000914719393, +0.0004266027561, +0.0006277211903, +0.0004875174755, + +0.0000427401638, -0.0003900539245, -0.0005364489714, -0.0004084282005, + -0.0001218294388, +0.0001158378270, +0.0002376672658, +0.0002438585980, + +0.0001705612143, +0.0000305572199, -0.0000792889954, -0.0001096464949, + -0.0001461953265, -0.0002254843219, -0.0002620331536, -0.0001583782704, + +0.0000549231076, +0.0002133013781, +0.0001889354903, +0.0000974635510, + -0.0000061913321, -0.0001767525464, -0.0003107649291, -0.0002376672658, + -0.0000852806071, +0.0000000000000, +0.0000609147194, +0.0001767525464, + +0.0002073097663, +0.0001096464949, -0.0000427401638, -0.0001583782704, + -0.0001951268224, -0.0000914719393, +0.0000852806071, +0.0002316756541, + +0.0002316756541, +0.0001280207709, -0.0000121829439, -0.0001583782704, + -0.0002804074296, -0.0002620331536, -0.0000427401638, +0.0002560415418, + +0.0004266027561, +0.0003840623128, +0.0002438585980, +0.0000609147194, + -0.0001705612143, -0.0003291392051, -0.0002863990413, -0.0001402037148, + -0.0000243658878, +0.0000609147194, +0.0001767525464, +0.0002133013781, + +0.0001096464949, -0.0000427401638, -0.0001340123827, -0.0001340123827, + -0.0000852806071, -0.0000852806071, -0.0001158378270, -0.0000487317755, + +0.0000365488316, -0.0000121829439, -0.0001523866587, -0.0001889354903, + -0.0000487317755, +0.0001583782704, +0.0003107649291, +0.0003291392051, + +0.0002073097663, -0.0000121829439, -0.0002560415418, -0.0003475134811, + -0.0002073097663, +0.0000365488316, +0.0001829438786, +0.0001218294388, + -0.0000243658878, -0.0000487317755, -0.0000121829439, +0.0000061913321, + +0.0000121829439, +0.0000243658878, +0.0000000000000, -0.0000549231076, + -0.0000974635510, -0.0000671060515, -0.0000365488316, -0.0000061913321, + +0.0000914719393, +0.0001889354903, +0.0001340123827, +0.0000305572199, + +0.0000365488316, +0.0001340123827, +0.0001280207709, -0.0000365488316, + -0.0001951268224, -0.0001583782704, +0.0000243658878, +0.0002254843219, + +0.0002863990413, +0.0002073097663, +0.0000974635510, -0.0000792889954, + -0.0002682244857, -0.0002560415418, -0.0000305572199, +0.0001583782704, + +0.0002316756541, +0.0002133013781, +0.0001583782704, +0.0000487317755, + -0.0000730976633, -0.0001705612143, -0.0001096464949, +0.0000852806071, + +0.0002925903735, +0.0003413221490, +0.0002316756541, +0.0000671060515, + -0.0000671060515, -0.0001705612143, -0.0001705612143, -0.0001036548832, + -0.0000427401638, -0.0000183742760, -0.0000183742760, -0.0000487317755, + -0.0000427401638, +0.0000183742760, +0.0000792889954, +0.0000609147194, + -0.0000365488316, -0.0002133013781, -0.0003047733174, -0.0001767525464, + +0.0000305572199, +0.0002011184342, +0.0003229478730, +0.0003351308169, + +0.0001951268224, +0.0000061913321, -0.0001340123827, -0.0001829438786, + -0.0002073097663, -0.0002011184342, -0.0000974635510, +0.0000792889954, + +0.0001829438786, +0.0002073097663, +0.0001645696026, +0.0000243658878, + -0.0001889354903, -0.0003229478730, -0.0003291392051, -0.0002742160975, + -0.0001645696026, +0.0000305572199, +0.0002376672658, +0.0003475134811, + +0.0003596964250, +0.0002985819852, +0.0001583782704, -0.0000974635510, + -0.0003718793689, -0.0004206111444, -0.0002316756541, +0.0000243658878, + +0.0001951268224, +0.0002316756541, +0.0001889354903, +0.0001158378270, + +0.0000061913321, -0.0001036548832, -0.0001218294388, -0.0000792889954, + -0.0000852806071, -0.0000974635510, +0.0000243658878, +0.0001829438786, + +0.0001461953265, -0.0000730976633, -0.0002133013781, -0.0002254843219, + -0.0001645696026, -0.0000121829439, +0.0002011184342, +0.0003169562612, + +0.0002560415418, +0.0000609147194, -0.0001036548832, -0.0001645696026, + -0.0000974635510, +0.0000305572199, +0.0001096464949, +0.0000061913321, + -0.0001889354903, -0.0002742160975, -0.0001461953265, +0.0000974635510, + +0.0002985819852, +0.0003351308169, +0.0001767525464, -0.0000427401638, + -0.0002073097663, -0.0002254843219, -0.0001402037148, -0.0000487317755, + -0.0000365488316, -0.0000121829439, +0.0001036548832, +0.0002254843219, + +0.0002316756541, +0.0001523866587, +0.0000609147194, +0.0000121829439, + -0.0000852806071, -0.0002438585980, -0.0003535050929, -0.0002925903735, + -0.0001402037148, -0.0000121829439, +0.0000852806071, +0.0001951268224, + +0.0002985819852, +0.0002620331536, +0.0000792889954, -0.0000549231076, + -0.0000730976633, -0.0000549231076, -0.0000609147194, -0.0000792889954, + -0.0001096464949, -0.0001461953265, -0.0001523866587, -0.0000914719393, + +0.0000061913321, +0.0000914719393, +0.0001645696026, +0.0001767525464, + +0.0001340123827, +0.0000487317755, -0.0000487317755, -0.0000852806071, + +0.0000000000000, +0.0000974635510, +0.0001218294388, +0.0000609147194, + -0.0000365488316, -0.0001036548832, -0.0001036548832, -0.0001036548832, + -0.0001280207709, -0.0001402037148, -0.0001218294388, -0.0000365488316, + +0.0000914719393, +0.0001889354903, +0.0002376672658, +0.0002316756541, + +0.0001280207709, +0.0000000000000, -0.0000792889954, -0.0000974635510, + -0.0000914719393, -0.0000609147194, -0.0000061913321, +0.0000427401638, + +0.0001158378270, +0.0001280207709, -0.0000121829439, -0.0001218294388, + -0.0000671060515, +0.0000305572199, +0.0000730976633, +0.0000792889954, + +0.0000730976633, +0.0000243658878, -0.0001036548832, -0.0001889354903, + -0.0001461953265, -0.0000487317755, -0.0000121829439, -0.0000305572199, + -0.0000487317755, +0.0000121829439, +0.0001523866587, +0.0002133013781, + +0.0001218294388, +0.0000183742760, +0.0000000000000, -0.0000121829439, + -0.0000121829439, +0.0000061913321, +0.0000000000000, -0.0000792889954, + -0.0001951268224, -0.0002498502097, -0.0001402037148, +0.0000305572199, + +0.0001036548832, +0.0000487317755, +0.0000243658878, +0.0001218294388, + +0.0001889354903, +0.0000549231076, -0.0001340123827, -0.0001767525464, + -0.0001402037148, -0.0001280207709, -0.0000730976633, +0.0000305572199, + +0.0001218294388, +0.0001583782704, +0.0001645696026, +0.0001280207709, + -0.0000061913321, -0.0001767525464, -0.0002620331536, -0.0002316756541, + -0.0001645696026, -0.0000487317755, +0.0000974635510, +0.0002620331536, + +0.0003351308169, +0.0002498502097, +0.0000427401638, -0.0001280207709, + -0.0002133013781, -0.0002194927102, -0.0001523866587, +0.0000000000000, + +0.0001340123827, +0.0001645696026, +0.0001158378270, +0.0001036548832, + +0.0001218294388, +0.0001280207709, +0.0000792889954, -0.0000365488316, + -0.0001583782704, -0.0001829438786, -0.0001036548832, +0.0000183742760, + +0.0001218294388, +0.0001402037148, +0.0001096464949, +0.0000243658878, + -0.0001096464949, -0.0002011184342, -0.0001705612143, -0.0000183742760, + +0.0001645696026, +0.0002254843219, +0.0001340123827, -0.0000183742760, + -0.0001767525464, -0.0002376672658, -0.0001218294388, +0.0001096464949, + +0.0003535050929, +0.0004387857000, +0.0003047733174, +0.0000243658878, + -0.0002376672658, -0.0004509686439, -0.0005242660276, -0.0003840623128, + -0.0000914719393, +0.0001705612143, +0.0002742160975, +0.0001829438786, + +0.0000487317755, +0.0000061913321, +0.0000183742760, +0.0000000000000, + -0.0000061913321, +0.0000427401638, +0.0000852806071, +0.0000730976633, + +0.0000305572199, -0.0000121829439, -0.0000427401638, -0.0000427401638, + -0.0000487317755, -0.0000243658878, +0.0000487317755, +0.0001218294388, + +0.0000671060515, -0.0000305572199, -0.0000792889954, -0.0000183742760, + +0.0000365488316, +0.0000243658878, -0.0000305572199, -0.0000427401638, + -0.0000061913321, +0.0000427401638, +0.0000730976633, +0.0001158378270, + +0.0002073097663, +0.0002620331536, +0.0001889354903, +0.0000914719393, + +0.0000549231076, -0.0000183742760, -0.0001402037148, -0.0001705612143, + -0.0000730976633, +0.0000365488316, +0.0000914719393, +0.0001158378270, + +0.0001583782704, +0.0001402037148, +0.0000487317755, -0.0000609147194, + -0.0001218294388, -0.0001340123827, -0.0000852806071, -0.0000183742760, + +0.0000671060515, +0.0001645696026, +0.0002133013781, +0.0001402037148, + +0.0000243658878, -0.0000487317755, -0.0000609147194, -0.0000061913321, + +0.0000852806071, +0.0001402037148, +0.0001158378270, +0.0000000000000, + -0.0001340123827, -0.0001889354903, -0.0001280207709, -0.0000792889954, + -0.0000852806071, -0.0000549231076, +0.0000305572199, +0.0001096464949, + +0.0001218294388, +0.0000730976633, +0.0000061913321, -0.0000243658878, + -0.0000671060515, -0.0000671060515, +0.0000183742760, +0.0001402037148, + +0.0001523866587, +0.0000305572199, -0.0001158378270, -0.0001461953265, + -0.0000671060515, +0.0000671060515, +0.0001767525464, +0.0001583782704, + +0.0000183742760, -0.0001036548832, -0.0001829438786, -0.0002133013781, + -0.0001889354903, -0.0000852806071, +0.0000792889954, +0.0002438585980, + +0.0002985819852, +0.0001829438786, +0.0000121829439, -0.0000671060515, + -0.0000792889954, -0.0000792889954, -0.0000730976633, -0.0000305572199, + +0.0000487317755, +0.0000852806071, +0.0000487317755, +0.0000061913321, + -0.0000061913321, -0.0000852806071, -0.0002376672658, -0.0003169562612, + -0.0002498502097, -0.0001402037148, -0.0000609147194, +0.0000183742760, + +0.0000609147194, +0.0000121829439, -0.0000487317755, -0.0000183742760, + +0.0000852806071, +0.0001461953265, +0.0001036548832, +0.0000183742760, + -0.0000427401638, -0.0000792889954, -0.0001096464949, -0.0001402037148, + -0.0000914719393, +0.0000243658878, +0.0001218294388, +0.0000914719393, + -0.0000427401638, -0.0001645696026, -0.0001829438786, -0.0000914719393, + +0.0000609147194, +0.0001523866587, +0.0000974635510, +0.0000061913321, + -0.0000852806071, -0.0001889354903, -0.0002376672658, -0.0001583782704, + +0.0000000000000, +0.0001523866587, +0.0002073097663, +0.0001645696026, + +0.0000671060515, +0.0000000000000, +0.0000000000000, +0.0000061913321, + -0.0000305572199, -0.0000852806071, -0.0001158378270, -0.0001340123827, + -0.0001096464949, -0.0000549231076, -0.0000121829439, +0.0000000000000, + +0.0000243658878, +0.0000671060515, +0.0000852806071, +0.0000549231076, + +0.0000305572199, +0.0000427401638, +0.0000549231076, +0.0000061913321, + -0.0000792889954, -0.0001340123827, -0.0000974635510, +0.0000243658878, + +0.0001583782704, +0.0001705612143, +0.0000730976633, +0.0000000000000, + -0.0000183742760, -0.0000243658878, -0.0000305572199, -0.0000183742760, + +0.0000061913321, +0.0000305572199, +0.0000061913321, -0.0000305572199, + -0.0000609147194, -0.0000549231076, -0.0000243658878, +0.0000183742760, + +0.0000243658878, +0.0000121829439, +0.0000487317755, +0.0001402037148, + +0.0001218294388, -0.0000365488316, -0.0001767525464, -0.0001583782704, + -0.0000365488316, +0.0000671060515, +0.0001280207709, +0.0001402037148, + +0.0000671060515, -0.0000671060515, -0.0001645696026, -0.0001096464949, + +0.0000365488316, +0.0001280207709, +0.0000671060515, -0.0000427401638, + -0.0000792889954, -0.0000487317755, -0.0000061913321, +0.0000730976633, + +0.0001461953265, +0.0001402037148, +0.0000671060515, +0.0000000000000, + -0.0000427401638, -0.0000671060515, -0.0000730976633, -0.0000183742760, + +0.0001036548832, +0.0001767525464, +0.0000974635510, -0.0000549231076, + -0.0001523866587, -0.0001523866587, -0.0000792889954, +0.0000121829439, + +0.0001158378270, +0.0001889354903, +0.0001889354903, +0.0000730976633, + -0.0000609147194, -0.0001158378270, -0.0000609147194, +0.0000243658878, + +0.0001218294388, +0.0001889354903, +0.0001767525464, +0.0000852806071, + -0.0000365488316, -0.0001402037148, -0.0001523866587, -0.0000730976633, + +0.0000183742760, +0.0001096464949, +0.0001951268224, +0.0002316756541, + +0.0001645696026, +0.0000549231076, -0.0000305572199, -0.0000914719393, + -0.0001280207709, -0.0001096464949, -0.0000365488316, +0.0000549231076, + +0.0001158378270, +0.0001158378270, +0.0000609147194, +0.0000061913321, + -0.0000487317755, -0.0000914719393, -0.0000365488316, +0.0000852806071, + +0.0001523866587, +0.0000974635510, -0.0000243658878, -0.0001158378270, + -0.0001280207709, -0.0001036548832, -0.0000305572199, +0.0000183742760, + +0.0000000000000, -0.0000671060515, -0.0000792889954, -0.0000121829439, + +0.0000792889954, +0.0001583782704, +0.0001767525464, +0.0001036548832, + -0.0000061913321, -0.0000730976633, -0.0000487317755, +0.0000000000000, + +0.0000365488316, +0.0000183742760, -0.0000243658878, -0.0000730976633, + -0.0000792889954, -0.0000365488316, +0.0000243658878, +0.0000609147194, + +0.0000121829439, -0.0000549231076, -0.0000792889954, -0.0000974635510, + -0.0001218294388, -0.0000730976633, +0.0000183742760, +0.0000974635510, + +0.0001218294388, +0.0001096464949, +0.0000730976633, +0.0000305572199, + -0.0000243658878, -0.0000365488316, +0.0000061913321, +0.0000730976633, + +0.0000852806071, +0.0000243658878, -0.0000427401638, -0.0000974635510, + -0.0001280207709, -0.0000914719393, +0.0000000000000, +0.0000671060515, + +0.0000852806071, +0.0000852806071, +0.0000609147194, -0.0000243658878, + -0.0001036548832, -0.0000974635510, -0.0000243658878, +0.0000305572199, + +0.0000427401638, +0.0000121829439, -0.0000121829439, -0.0000183742760, + +0.0000549231076, +0.0001705612143, +0.0001889354903, +0.0000549231076, + -0.0000914719393, -0.0001158378270, -0.0000792889954, -0.0001036548832, + -0.0001218294388, -0.0000549231076, +0.0000183742760, +0.0000427401638, + +0.0000183742760, +0.0000000000000, +0.0000000000000, +0.0000000000000, + -0.0000487317755, -0.0000852806071, -0.0000852806071, -0.0000427401638, + +0.0000365488316, +0.0001340123827, +0.0002011184342, +0.0001829438786, + +0.0001158378270, +0.0000365488316, -0.0000730976633, -0.0002376672658, + -0.0003291392051, -0.0002194927102, +0.0000000000000, +0.0001583782704, + +0.0001951268224, +0.0001523866587, +0.0000609147194, -0.0000549231076, + -0.0001523866587, -0.0001645696026, -0.0001096464949, -0.0000121829439, + +0.0000792889954, +0.0001461953265, +0.0001523866587, +0.0000974635510, + -0.0000243658878, -0.0001583782704, -0.0002073097663, -0.0001036548832, + +0.0000671060515, +0.0001523866587, +0.0001461953265, +0.0001218294388, + +0.0000974635510, +0.0000487317755, -0.0000243658878, -0.0000974635510, + -0.0001158378270, -0.0000792889954, -0.0000305572199, +0.0000183742760, + +0.0000549231076, +0.0000671060515, +0.0001158378270, +0.0001829438786, + +0.0001767525464, +0.0000671060515, -0.0000792889954, -0.0001767525464, + -0.0002011184342, -0.0001705612143, -0.0000730976633, +0.0000974635510, + +0.0002376672658, +0.0002316756541, +0.0001523866587, +0.0000852806071, + +0.0000365488316, -0.0000243658878, -0.0001158378270, -0.0001705612143, + -0.0001340123827, -0.0000365488316, +0.0000061913321, +0.0000243658878, + +0.0000730976633, +0.0000914719393, +0.0000243658878, -0.0000549231076, + -0.0000914719393, -0.0000487317755, -0.0000061913321, -0.0000121829439, + -0.0000427401638, -0.0000365488316, +0.0000000000000, +0.0000121829439, + +0.0000000000000, -0.0000427401638, -0.0000792889954, -0.0000914719393, + -0.0000671060515, -0.0000061913321, +0.0000365488316, +0.0000549231076, + +0.0000427401638, +0.0000183742760, +0.0000000000000, -0.0000183742760, + -0.0000243658878, -0.0000487317755, -0.0000730976633, -0.0000792889954, + -0.0000427401638, +0.0000183742760, +0.0000427401638, +0.0000183742760, + +0.0000000000000, -0.0000061913321, +0.0000000000000, +0.0000121829439, + +0.0000000000000, -0.0000427401638, -0.0000243658878, +0.0000243658878, + +0.0000487317755, +0.0000549231076, +0.0000549231076, +0.0000061913321, + -0.0000549231076, -0.0000549231076, +0.0000365488316, +0.0001218294388, + +0.0000792889954, -0.0000305572199, -0.0000852806071, -0.0000487317755, + +0.0000061913321, +0.0000427401638, +0.0000671060515, +0.0001096464949, + +0.0001096464949, +0.0000243658878, -0.0000974635510, -0.0001340123827, + -0.0001036548832, -0.0000671060515, +0.0000000000000, +0.0001218294388, + +0.0002620331536, +0.0003047733174, +0.0002133013781, +0.0000487317755, + -0.0000974635510, -0.0002254843219, -0.0002863990413, -0.0002620331536, + -0.0001645696026, -0.0000487317755, +0.0000852806071, +0.0002011184342, + +0.0002376672658, +0.0001645696026, +0.0000549231076, +0.0000061913321, + +0.0000121829439, -0.0000243658878, -0.0001158378270, -0.0001523866587, + -0.0000609147194, +0.0000427401638, +0.0000852806071, +0.0000730976633, + +0.0000487317755, +0.0000121829439, -0.0000243658878, -0.0000730976633, + -0.0000974635510, -0.0000730976633, -0.0000243658878, +0.0000000000000, + +0.0000243658878, +0.0000487317755, +0.0000305572199, +0.0000000000000, + +0.0000121829439, +0.0000365488316, +0.0000183742760, +0.0000000000000, + -0.0000183742760, +0.0000000000000, +0.0000427401638, +0.0000852806071, + +0.0000974635510, +0.0000974635510, +0.0000609147194, -0.0000121829439, + -0.0001218294388, -0.0001829438786, -0.0001583782704, -0.0000365488316, + +0.0001218294388, +0.0002438585980, +0.0002194927102, +0.0000549231076, + -0.0001280207709, -0.0002133013781, -0.0001280207709, +0.0000427401638, + +0.0001829438786, +0.0002073097663, +0.0001705612143, +0.0001096464949, + +0.0000305572199, -0.0000427401638, -0.0000730976633, -0.0000914719393, + -0.0001036548832, -0.0000671060515, +0.0000305572199, +0.0001340123827, + +0.0001705612143, +0.0000730976633, -0.0000609147194, -0.0000914719393, + -0.0000061913321, +0.0000487317755, +0.0000243658878, -0.0000305572199, + -0.0000671060515, -0.0000671060515, -0.0000183742760, +0.0000549231076, + +0.0001096464949, +0.0001096464949, +0.0000549231076, -0.0000121829439, + -0.0000671060515, -0.0000609147194, -0.0000183742760, +0.0000549231076, + +0.0001096464949, +0.0001280207709, +0.0000609147194, -0.0000487317755, + -0.0002073097663, -0.0003107649291, -0.0002682244857, -0.0000730976633, + +0.0001158378270, +0.0002011184342, +0.0001767525464, +0.0001096464949, + +0.0000183742760, -0.0001036548832, -0.0002133013781, -0.0001951268224, + -0.0000549231076, +0.0000974635510, +0.0001829438786, +0.0001158378270, + -0.0000487317755, -0.0001829438786, -0.0002254843219, -0.0001705612143, + -0.0000183742760, +0.0001461953265, +0.0002254843219, +0.0001461953265, + +0.0000183742760, -0.0000487317755, -0.0000671060515, -0.0000914719393, + -0.0000852806071, -0.0000183742760, +0.0000487317755, +0.0000730976633, + +0.0000609147194, +0.0000609147194, +0.0000487317755, -0.0000061913321, + -0.0000730976633, -0.0000671060515, +0.0000183742760, +0.0000852806071, + +0.0000609147194, +0.0000000000000, -0.0000305572199, -0.0000061913321, + +0.0000183742760, +0.0000121829439, -0.0000121829439, +0.0000000000000, + +0.0000365488316, +0.0000427401638, +0.0000061913321, -0.0000183742760, + -0.0000305572199, -0.0000549231076, -0.0001036548832, -0.0001036548832, + -0.0000061913321, +0.0001218294388, +0.0002011184342, +0.0001951268224, + +0.0001280207709, +0.0000183742760, -0.0000914719393, -0.0001767525464, + -0.0002073097663, -0.0001583782704, -0.0000427401638, +0.0000427401638, + +0.0000487317755, +0.0000061913321, +0.0000183742760, +0.0000671060515, + +0.0000730976633, +0.0000061913321, -0.0000243658878, +0.0000000000000, + -0.0000061913321, -0.0000974635510, -0.0001705612143, -0.0001340123827, + +0.0000000000000, +0.0000730976633, +0.0000305572199, -0.0000365488316, + -0.0000671060515, -0.0000730976633, -0.0000730976633, -0.0000487317755, + +0.0000549231076, +0.0002073097663, +0.0002742160975, +0.0002011184342, + +0.0000061913321, -0.0001583782704, -0.0002073097663, -0.0001461953265, + -0.0000730976633, -0.0000061913321, +0.0000365488316, +0.0000365488316, + -0.0000121829439, -0.0000305572199, +0.0000365488316, +0.0001583782704, + +0.0001889354903, +0.0001036548832, -0.0000305572199, -0.0001402037148, + -0.0001829438786, -0.0001340123827, -0.0000061913321, +0.0001218294388, + +0.0001767525464, +0.0001340123827, +0.0000549231076, +0.0000121829439, + +0.0000061913321, -0.0000305572199, -0.0001096464949, -0.0001280207709, + -0.0000183742760, +0.0000730976633, +0.0000671060515, +0.0000365488316, + +0.0000914719393, +0.0001523866587, +0.0001096464949, -0.0000427401638, + -0.0001951268224, -0.0002560415418, -0.0001889354903, -0.0000305572199, + +0.0001583782704, +0.0002560415418, +0.0002133013781, +0.0001036548832, + +0.0000000000000, -0.0000974635510, -0.0001402037148, -0.0001096464949, + -0.0000243658878, +0.0000487317755, +0.0000852806071, +0.0000549231076, + -0.0000305572199, -0.0000792889954, -0.0000549231076, +0.0000061913321, + +0.0000671060515, +0.0000792889954, +0.0000000000000, -0.0000852806071, + -0.0000852806071, +0.0000061913321, +0.0001158378270, +0.0001767525464, + +0.0001645696026, +0.0000671060515, -0.0000914719393, -0.0001951268224, + -0.0001340123827, +0.0000121829439, +0.0000852806071, +0.0000365488316, + -0.0000365488316, -0.0000730976633, -0.0000427401638, +0.0000365488316, + +0.0001340123827, +0.0001645696026, +0.0000914719393, -0.0000243658878, + -0.0000852806071, -0.0000671060515, -0.0000183742760, +0.0000000000000, + -0.0000305572199, -0.0000609147194, +0.0000061913321, +0.0000792889954, + +0.0000671060515, -0.0000121829439, -0.0000305572199, +0.0000183742760, + +0.0000487317755, +0.0000183742760, +0.0000000000000, -0.0000061913321, + -0.0000365488316, -0.0000914719393, -0.0001340123827, -0.0001158378270, + -0.0000487317755, +0.0000061913321, +0.0000365488316, +0.0000609147194, + +0.0000852806071, +0.0001158378270, +0.0001158378270, +0.0000852806071, + +0.0000000000000, -0.0000974635510, -0.0001158378270, -0.0000183742760, + +0.0000609147194, +0.0000730976633, +0.0000609147194, +0.0000549231076, + +0.0000365488316, -0.0000305572199, -0.0000914719393, -0.0000671060515, + +0.0000121829439, +0.0000852806071, +0.0001461953265, +0.0001705612143, + +0.0001340123827, +0.0000549231076, -0.0000121829439, -0.0000609147194, + -0.0000792889954, -0.0000852806071, -0.0000730976633, -0.0000487317755, + +0.0000243658878, +0.0001036548832, +0.0001280207709, +0.0001036548832, + +0.0000487317755, -0.0000365488316, -0.0001218294388, -0.0001461953265, + -0.0000914719393, +0.0000000000000, +0.0000792889954, +0.0001340123827, + +0.0001036548832, +0.0000061913321, -0.0000427401638, -0.0000305572199, + -0.0000365488316, -0.0000792889954, -0.0000974635510, -0.0000365488316, + +0.0000305572199, +0.0000487317755, +0.0000121829439, +0.0000000000000, + +0.0000000000000, +0.0000121829439, +0.0000000000000, -0.0000183742760, + -0.0000427401638, -0.0000365488316, -0.0000243658878, -0.0000121829439, + -0.0000121829439, -0.0000305572199, -0.0000121829439, +0.0000365488316, + +0.0000730976633, +0.0000852806071, +0.0001096464949, +0.0001340123827, + +0.0001158378270, +0.0000061913321, -0.0001280207709, -0.0001951268224, + -0.0001280207709, -0.0000305572199, +0.0000365488316, +0.0000730976633, + +0.0000974635510, +0.0000671060515, +0.0000000000000, -0.0000549231076, + -0.0000427401638, +0.0000183742760, +0.0000852806071, +0.0000914719393, + +0.0000549231076, +0.0000121829439, -0.0000305572199, -0.0000730976633, + -0.0001036548832, -0.0000914719393, -0.0000365488316, +0.0000427401638, + +0.0001036548832, +0.0001096464949, +0.0000609147194, +0.0000061913321, + -0.0000183742760 +}; diff --git a/plugins/LadspaEffect/swh/impulses/05-fender-68-vibrolux-sm57-off.h b/plugins/LadspaEffect/swh/impulses/05-fender-68-vibrolux-sm57-off.h new file mode 100644 index 000000000..3c995b1a0 --- /dev/null +++ b/plugins/LadspaEffect/swh/impulses/05-fender-68-vibrolux-sm57-off.h @@ -0,0 +1,1300 @@ +float fender_68_vibrolux_sm57_off[] = { + +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, + +0.0000000000000, +0.0000058490566, +0.0000115094340, +0.0000115094340, + +0.0000058490566, +0.0000000000000, +0.0000000000000, -0.0000173584906, + -0.0000288679245, -0.0000173584906, -0.0000058490566, +0.0000000000000, + +0.0000058490566, +0.0000230188679, +0.0000288679245, +0.0000173584906, + +0.0000115094340, +0.0000115094340, +0.0000058490566, -0.0000115094340, + -0.0000345283019, -0.0000230188679, +0.0000000000000, +0.0000058490566, + +0.0000230188679, +0.0000518867925, +0.0000633962264, +0.0000288679245, + -0.0000058490566, -0.0000173584906, -0.0000230188679, -0.0000690566038, + -0.0001035849057, -0.0000749056604, -0.0000518867925, -0.0000288679245, + +0.0000173584906, +0.0000979245283, +0.0001439622642, +0.0001209433962, + +0.0000575471698, +0.0000288679245, +0.0000115094340, -0.0000518867925, + -0.0000864150943, -0.0000633962264, -0.0000690566038, -0.0000749056604, + -0.0000345283019, +0.0000460377358, +0.0001035849057, +0.0000749056604, + +0.0000173584906, +0.0000000000000, -0.0000518867925, -0.0001266037736, + -0.0001496226415, -0.0000864150943, -0.0000288679245, -0.0000058490566, + +0.0000403773585, +0.0001496226415, +0.0002188679245, +0.0002073584906, + +0.0001496226415, +0.0001094339623, -0.0000058490566, -0.0002073584906, + -0.0002935849057, -0.0002360377358, -0.0001843396226, -0.0001728301887, + -0.0000864150943, +0.0000518867925, +0.0001381132075, +0.0001324528302, + +0.0001324528302, +0.0001611320755, +0.0000920754717, -0.0000690566038, + -0.0001728301887, -0.0001324528302, -0.0000690566038, -0.0000345283019, + +0.0000460377358, +0.0001843396226, +0.0002360377358, +0.0001496226415, + +0.0000690566038, +0.0000518867925, -0.0000230188679, -0.0002188679245, + -0.0003109433962, -0.0002820754717, -0.0002590566038, -0.0002360377358, + -0.0000864150943, +0.0001669811321, +0.0003050943396, +0.0002705660377, + +0.0002533962264, +0.0002649056604, +0.0001496226415, -0.0000575471698, + -0.0001554716981, -0.0001094339623, -0.0001611320755, -0.0002764150943, + -0.0001784905660, +0.0000575471698, +0.0001784905660, +0.0001439622642, + +0.0001381132075, +0.0001324528302, -0.0000403773585, -0.0002764150943, + -0.0002705660377, -0.0001843396226, -0.0001728301887, -0.0001784905660, + +0.0000173584906, +0.0002590566038, +0.0003513207547, +0.0003684905660, + +0.0004664150943, +0.0004145283019, +0.0001381132075, -0.0001843396226, + -0.0003339622642, -0.0003800000000, -0.0003915094340, -0.0003743396226, + -0.0002360377358, -0.0000345283019, +0.0001209433962, +0.0001611320755, + +0.0003454716981, +0.0004088679245, +0.0002705660377, -0.0000173584906, + -0.0002015094340, -0.0002935849057, -0.0002705660377, -0.0001669811321, + +0.0000690566038, +0.0002245283019, +0.0003915094340, +0.0002994339623, + +0.0002360377358, +0.0003513207547, +0.0002590566038, -0.0002820754717, + -0.0005239622642, -0.0005930188679, -0.0006679245283, -0.0007083018868, + -0.0003109433962, +0.0002073584906, +0.0006390566038, +0.0005584905660, + +0.0005988679245, +0.0007139622642, +0.0007369811321, +0.0002820754717, + +0.0000805660377, -0.0001554716981, -0.0006218867925, -0.0005700000000, + -0.0014222641509, +0.0012494339623, -0.0011054716981, +0.0006505660377, + +0.0012839622642, +0.0004720754717, -0.0003339622642, -0.0003109433962, + -0.0004145283019, +0.0001209433962, -0.0005354716981, -0.0007945283019, + -0.0006390566038, -0.0001150943396, +0.0014509433962, +0.0018311320755, + +0.0025967924528, +0.0020843396226, +0.0011977358491, -0.0000058490566, + -0.0001496226415, -0.0004490566038, -0.0015662264151, -0.0021937735849, + -0.0020843396226, -0.0022167924528, -0.0020843396226, -0.0009788679245, + +0.0102262264151, +0.0023666037736, -0.0383369811321, -0.0203432075472, + +0.0619162264151, +0.1230203773585, +0.1472445283019, +0.0346230188679, + -0.1634301886792, -0.1886618867925, -0.1050035849057, -0.0972762264151, + -0.0602809433962, +0.0353083018868, +0.0883224528302, +0.1019000000000, + +0.0746586792453, -0.0028962264151, -0.0535266037736, -0.0531984905660, + -0.0456554716981, -0.0065986792453, +0.0382794339623, +0.0257441509434, + +0.0106811320755, +0.0023320754717, -0.0163298113208, -0.0001150943396, + +0.0238324528302, +0.0151435849057, +0.0106350943396, -0.0045200000000, + -0.0224850943396, -0.0252490566038, -0.0104220754717, +0.0157769811321, + +0.0307249056604, +0.0190418867925, -0.0186560377358, -0.0411700000000, + -0.0182530188679, +0.0223181132075, +0.0430183018868, +0.0362698113208, + +0.0010364150943, -0.0170898113208, -0.0084067924528, +0.0088039622642, + +0.0251281132075, +0.0365405660377, +0.0253871698113, -0.0071975471698, + -0.0337247169811, -0.0364311320755, -0.0246501886792, +0.0083318867925, + +0.0403466037736, +0.0369377358491, +0.0125179245283, -0.0131167924528, + -0.0334254716981, -0.0265156603774, -0.0011918867925, +0.0154603773585, + +0.0179707547170, +0.0134277358491, +0.0044913207547, +0.0026660377358, + +0.0049692452830, +0.0030516981132, +0.0074450943396, +0.0240858490566, + +0.0263315094340, +0.0106350943396, -0.0040939622642, -0.0194735849057, + -0.0261760377358, -0.0106811320755, +0.0057118867925, +0.0090862264151, + +0.0086658490566, +0.0080728301887, +0.0015833962264, -0.0133241509434, + -0.0236079245283, -0.0144469811321, +0.0055679245283, +0.0180226415094, + +0.0169458490566, +0.0124430188679, +0.0145447169811, +0.0171647169811, + +0.0096332075472, -0.0062013207547, -0.0143316981132, -0.0084124528302, + +0.0010883018868, +0.0097311320755, +0.0186675471698, +0.0175966037736, + +0.0010364150943, -0.0192260377358, -0.0258592452830, -0.0158805660377, + -0.0031439622642, +0.0029366037736, +0.0032130188679, +0.0014739622642, + +0.0000805660377, -0.0000864150943, +0.0035066037736, +0.0091841509434, + +0.0091092452830, +0.0035815094340, -0.0011862264151, -0.0036390566038, + -0.0035009433962, -0.0012264150943, +0.0026315094340, +0.0059422641509, + +0.0035469811321, -0.0040709433962, -0.0078884905660, -0.0055796226415, + -0.0055564150943, -0.0102090566038, -0.0132492452830, -0.0104796226415, + -0.0024298113208, +0.0062935849057, +0.0110900000000, +0.0114815094340, + +0.0079864150943, +0.0010133962264, -0.0070650943396, -0.0125639622642, + -0.0127483018868, -0.0057696226415, +0.0039384905660, +0.0075315094340, + +0.0040075471698, +0.0003166037736, -0.0011458490566, -0.0015258490566, + -0.0009558490566, -0.0019116981132, -0.0037139622642, -0.0043300000000, + -0.0059941509434, -0.0079230188679, -0.0079058490566, -0.0068692452830, + -0.0040824528302, -0.0007658490566, +0.0014913207547, +0.0017964150943, + -0.0001784905660, -0.0029481132075, -0.0048598113208, -0.0052224528302, + -0.0040133962264, -0.0023722641509, +0.0000749056604, +0.0019922641509, + +0.0024126415094, +0.0021822641509, +0.0009962264151, -0.0019577358491, + -0.0046639622642, -0.0052743396226, -0.0051418867925, -0.0055047169811, + -0.0046467924528, -0.0021650943396, +0.0000230188679, +0.0017447169811, + +0.0016411320755, -0.0012322641509, -0.0043013207547, -0.0043300000000, + -0.0013532075472, +0.0017447169811, +0.0026775471698, +0.0023952830189, + +0.0009558490566, -0.0016467924528, -0.0041113207547, -0.0052513207547, + -0.0047388679245, -0.0028445283019, -0.0008694339623, +0.0005873584906, + +0.0011747169811, +0.0006737735849, +0.0007139622642, +0.0005009433962, + -0.0008233962264, -0.0012667924528, -0.0005009433962, -0.0012552830189, + -0.0025967924528, -0.0023320754717, -0.0016813207547, -0.0017447169811, + -0.0010998113208, +0.0008003773585, +0.0025450943396, +0.0027120754717, + +0.0005413207547, -0.0021420754717, -0.0028100000000, -0.0017101886792, + -0.0013069811321, -0.0015373584906, -0.0011169811321, -0.0007830188679, + -0.0012092452830, -0.0005584905660, +0.0016352830189, +0.0032994339623, + +0.0032360377358, +0.0017273584906, -0.0003684905660, -0.0020211320755, + -0.0031611320755, -0.0029711320755, -0.0011632075472, +0.0007773584906, + +0.0015662264151, +0.0017907547170, +0.0018022641509, +0.0008637735849, + -0.0005873584906, -0.0004490566038, +0.0012437735849, +0.0016756603774, + +0.0007428301887, +0.0005009433962, +0.0011977358491, +0.0021650943396, + +0.0024816981132, +0.0021016981132, +0.0013877358491, +0.0004605660377, + -0.0004088679245, -0.0009098113208, -0.0008867924528, -0.0000749056604, + +0.0009903773585, +0.0008694339623, -0.0000633962264, -0.0004664150943, + +0.0006505660377, +0.0020728301887, +0.0021881132075, +0.0015662264151, + +0.0012552830189, +0.0019058490566, +0.0025852830189, +0.0018771698113, + +0.0006505660377, -0.0001324528302, -0.0009500000000, -0.0010249056604, + -0.0001554716981, +0.0003224528302, +0.0003109433962, +0.0006275471698, + +0.0009788679245, +0.0009328301887, +0.0016583018868, +0.0023262264151, + +0.0011918867925, -0.0000403773585, +0.0000749056604, +0.0006275471698, + +0.0013588679245, +0.0019692452830, +0.0014798113208, -0.0000518867925, + -0.0012033962264, -0.0012667924528, -0.0009903773585, -0.0006564150943, + +0.0001324528302, +0.0011977358491, +0.0018943396226, +0.0014913207547, + +0.0008233962264, +0.0010998113208, +0.0009788679245, +0.0004030188679, + -0.0004894339623, -0.0011284905660, -0.0004375471698, +0.0008292452830, + +0.0014222641509, +0.0009788679245, +0.0004605660377, +0.0007024528302, + +0.0002649056604, -0.0011054716981, -0.0011688679245, -0.0000864150943, + +0.0006622641509, +0.0002015094340, -0.0007024528302, -0.0000920754717, + +0.0007945283019, +0.0004835849057, +0.0001611320755, +0.0004779245283, + +0.0012783018868, +0.0013588679245, -0.0003628301887, -0.0012724528302, + -0.0003800000000, +0.0007773584906, +0.0012379245283, +0.0007139622642, + +0.0005067924528, +0.0011688679245, +0.0007715094340, -0.0006737735849, + -0.0008233962264, +0.0004779245283, +0.0007715094340, -0.0009328301887, + -0.0025105660377, -0.0030171698113, -0.0023320754717, -0.0009730188679, + -0.0000864150943, +0.0010479245283, +0.0016007547170, +0.0002533962264, + -0.0005930188679, -0.0007600000000, -0.0000403773585, +0.0014107547170, + +0.0013877358491, +0.0003743396226, +0.0005354716981, +0.0008349056604, + +0.0000000000000, -0.0007313207547, -0.0009673584906, -0.0018656603774, + -0.0028790566038, -0.0018311320755, +0.0001784905660, +0.0005988679245, + -0.0001324528302, -0.0004720754717, +0.0000173584906, +0.0005988679245, + +0.0007830188679, +0.0007945283019, +0.0007658490566, -0.0004433962264, + -0.0014913207547, -0.0004720754717, +0.0006218867925, +0.0006045283019, + +0.0005413207547, +0.0004318867925, -0.0004835849057, -0.0010998113208, + -0.0000633962264, +0.0007083018868, -0.0008579245283, -0.0019866037736, + -0.0010422641509, -0.0001728301887, +0.0004260377358, +0.0007888679245, + +0.0007543396226, +0.0002820754717, -0.0004835849057, -0.0004720754717, + +0.0000345283019, +0.0004260377358, +0.0008924528302, +0.0010939622642, + +0.0005758490566, -0.0006103773585, -0.0015662264151, -0.0007428301887, + +0.0004433962264, +0.0004490566038, +0.0005298113208, +0.0009500000000, + +0.0006045283019, +0.0003743396226, +0.0004433962264, +0.0003858490566, + +0.0005354716981, +0.0003283018868, -0.0005528301887, -0.0007313207547, + -0.0003628301887, -0.0005298113208, -0.0006852830189, -0.0001843396226, + +0.0006218867925, +0.0006737735849, +0.0002303773585, +0.0006333962264, + +0.0012494339623, +0.0005528301887, -0.0008175471698, -0.0015143396226, + -0.0007428301887, +0.0002015094340, +0.0002590566038, +0.0007254716981, + +0.0022686792453, +0.0026716981132, +0.0013069811321, +0.0004720754717, + +0.0008983018868, +0.0008118867925, -0.0002879245283, -0.0013358490566, + -0.0010998113208, -0.0001035849057, +0.0002188679245, +0.0003339622642, + +0.0011343396226, +0.0013933962264, +0.0008694339623, +0.0007945283019, + +0.0009039622642, +0.0005643396226, -0.0001035849057, -0.0004952830189, + -0.0001324528302, +0.0009500000000, +0.0015833962264, +0.0011458490566, + +0.0002245283019, -0.0002245283019, -0.0002533962264, +0.0001209433962, + +0.0011977358491, +0.0016583018868, +0.0009443396226, +0.0006103773585, + +0.0006103773585, +0.0001439622642, -0.0002418867925, -0.0001843396226, + +0.0000920754717, +0.0005643396226, +0.0013358490566, +0.0016641509434, + +0.0011169811321, +0.0003454716981, -0.0004664150943, -0.0009039622642, + -0.0004605660377, +0.0002935849057, +0.0010018867925, +0.0016467924528, + +0.0013588679245, +0.0007543396226, +0.0003915094340, -0.0004088679245, + -0.0012264150943, -0.0011400000000, -0.0005758490566, +0.0003858490566, + +0.0014567924528, +0.0018196226415, +0.0016698113208, +0.0009328301887, + -0.0003858490566, -0.0013762264151, -0.0015488679245, -0.0011228301887, + -0.0000288679245, +0.0015662264151, +0.0023837735849, +0.0014222641509, + +0.0004835849057, +0.0005815094340, +0.0004318867925, -0.0002418867925, + -0.0003224528302, +0.0004318867925, +0.0012092452830, +0.0013069811321, + +0.0010537735849, +0.0008522641509, +0.0003166037736, -0.0006967924528, + -0.0010709433962, -0.0004260377358, -0.0002764150943, -0.0008983018868, + -0.0009443396226, +0.0001209433962, +0.0009903773585, +0.0009154716981, + +0.0006564150943, +0.0006909433962, +0.0009788679245, +0.0011400000000, + +0.0009500000000, +0.0006794339623, -0.0000575471698, -0.0014222641509, + -0.0018311320755, -0.0007313207547, +0.0003800000000, +0.0005183018868, + +0.0004203773585, +0.0009384905660, +0.0012724528302, +0.0008522641509, + +0.0007024528302, +0.0007773584906, -0.0000115094340, -0.0012898113208, + -0.0014913207547, -0.0004549056604, +0.0004318867925, +0.0003858490566, + -0.0001381132075, -0.0003398113208, -0.0000575471698, +0.0002649056604, + +0.0006160377358, +0.0006794339623, +0.0001439622642, -0.0005067924528, + -0.0009788679245, -0.0012898113208, -0.0013069811321, -0.0009673584906, + -0.0001381132075, +0.0004835849057, +0.0001094339623, -0.0005354716981, + -0.0007600000000, -0.0003224528302, +0.0004720754717, +0.0008983018868, + +0.0010709433962, +0.0010594339623, -0.0000575471698, -0.0017503773585, + -0.0023205660377, -0.0018137735849, -0.0009213207547, +0.0000920754717, + +0.0008407547170, +0.0007945283019, +0.0000749056604, -0.0008407547170, + -0.0010018867925, -0.0004375471698, -0.0001209433962, -0.0000230188679, + +0.0000115094340, -0.0004894339623, -0.0009384905660, -0.0009788679245, + -0.0005815094340, +0.0001554716981, +0.0004549056604, +0.0000000000000, + -0.0005124528302, -0.0008233962264, -0.0011862264151, -0.0013703773585, + -0.0009154716981, -0.0001209433962, +0.0004145283019, +0.0000230188679, + -0.0012322641509, -0.0016179245283, -0.0010192452830, -0.0008292452830, + -0.0003858490566, +0.0007484905660, +0.0015028301887, +0.0012724528302, + +0.0000000000000, -0.0012839622642, -0.0016411320755, -0.0014971698113, + -0.0011169811321, -0.0007830188679, -0.0006045283019, -0.0002705660377, + +0.0000690566038, +0.0002303773585, +0.0001669811321, -0.0002360377358, + -0.0007484905660, -0.0007945283019, -0.0003166037736, -0.0001209433962, + -0.0005815094340, -0.0008694339623, -0.0006333962264, -0.0004088679245, + -0.0004720754717, -0.0004203773585, -0.0002879245283, -0.0002418867925, + -0.0000460377358, +0.0000288679245, -0.0002188679245, -0.0005988679245, + -0.0008579245283, -0.0008118867925, -0.0005584905660, -0.0002994339623, + -0.0001324528302, -0.0001784905660, -0.0003109433962, -0.0004894339623, + -0.0006909433962, -0.0007024528302, -0.0008522641509, -0.0010824528302, + -0.0007198113208, +0.0001324528302, +0.0009730188679, +0.0014164150943, + +0.0013128301887, +0.0008752830189, +0.0000058490566, -0.0009213207547, + -0.0012379245283, -0.0010939622642, -0.0009328301887, -0.0008809433962, + -0.0007369811321, -0.0002418867925, +0.0002475471698, +0.0002820754717, + +0.0002590566038, +0.0004952830189, +0.0004779245283, -0.0001843396226, + -0.0007484905660, -0.0005124528302, +0.0000115094340, -0.0001669811321, + -0.0006160377358, -0.0005067924528, +0.0000173584906, +0.0004664150943, + +0.0005009433962, +0.0003454716981, +0.0004145283019, +0.0002533962264, + -0.0005354716981, -0.0008924528302, -0.0003224528302, +0.0002879245283, + +0.0004894339623, +0.0006967924528, +0.0007484905660, +0.0002015094340, + -0.0005873584906, -0.0007198113208, -0.0002073584906, +0.0000000000000, + -0.0001669811321, +0.0000115094340, +0.0006160377358, +0.0008809433962, + +0.0006794339623, +0.0007543396226, +0.0008407547170, +0.0004433962264, + -0.0002533962264, -0.0006275471698, -0.0005009433962, -0.0001381132075, + -0.0001150943396, -0.0002073584906, -0.0001035849057, -0.0000749056604, + -0.0003628301887, -0.0003973584906, +0.0001784905660, +0.0007600000000, + +0.0010594339623, +0.0012149056604, +0.0011573584906, +0.0007254716981, + -0.0001035849057, -0.0008233962264, -0.0009098113208, -0.0004549056604, + -0.0001094339623, -0.0000173584906, +0.0001784905660, +0.0003684905660, + +0.0003050943396, +0.0002935849057, +0.0003684905660, +0.0002303773585, + -0.0002245283019, -0.0004835849057, -0.0002533962264, -0.0001094339623, + -0.0000460377358, +0.0001900000000, +0.0003569811321, +0.0002705660377, + +0.0001611320755, +0.0000173584906, -0.0002188679245, -0.0003743396226, + -0.0003743396226, -0.0002188679245, -0.0000173584906, -0.0000805660377, + -0.0003166037736, -0.0002649056604, +0.0001324528302, +0.0005930188679, + +0.0007313207547, +0.0004664150943, +0.0005528301887, +0.0009098113208, + +0.0006967924528, -0.0000058490566, -0.0007254716981, -0.0011400000000, + -0.0010018867925, -0.0006333962264, -0.0002935849057, +0.0000345283019, + +0.0002015094340, +0.0002994339623, +0.0006333962264, +0.0009962264151, + +0.0011054716981, +0.0012379245283, +0.0012552830189, +0.0003628301887, + -0.0006449056604, -0.0009039622642, -0.0009384905660, -0.0011054716981, + -0.0009673584906, -0.0001496226415, +0.0007830188679, +0.0011573584906, + +0.0011688679245, +0.0009098113208, +0.0002649056604, -0.0003858490566, + -0.0007139622642, -0.0005413207547, +0.0000115094340, +0.0004952830189, + +0.0004952830189, +0.0003109433962, +0.0003224528302, +0.0002245283019, + -0.0002188679245, -0.0005873584906, -0.0003454716981, +0.0003800000000, + +0.0007254716981, +0.0004952830189, +0.0002879245283, +0.0001843396226, + +0.0001554716981, +0.0001728301887, +0.0001094339623, -0.0001611320755, + -0.0003454716981, -0.0001784905660, +0.0000805660377, +0.0000920754717, + -0.0001209433962, -0.0003050943396, -0.0002188679245, -0.0002764150943, + -0.0004318867925, -0.0001554716981, +0.0003743396226, +0.0004952830189, + -0.0000460377358, -0.0007024528302, -0.0006564150943, -0.0001958490566, + +0.0000345283019, +0.0001958490566, +0.0005124528302, +0.0005584905660, + +0.0000288679245, -0.0006909433962, -0.0008637735849, -0.0004605660377, + +0.0000403773585, +0.0001843396226, +0.0001611320755, +0.0002705660377, + +0.0000749056604, -0.0006564150943, -0.0008637735849, -0.0000633962264, + +0.0005584905660, +0.0003109433962, -0.0001784905660, -0.0003858490566, + -0.0003743396226, -0.0004433962264, -0.0005758490566, -0.0003858490566, + +0.0001669811321, +0.0002533962264, +0.0000230188679, +0.0002130188679, + +0.0001496226415, -0.0002879245283, -0.0000805660377, +0.0004664150943, + +0.0004720754717, +0.0001324528302, -0.0002360377358, -0.0005239622642, + -0.0005988679245, -0.0003283018868, +0.0001150943396, +0.0003973584906, + +0.0004549056604, +0.0006045283019, +0.0007369811321, +0.0005469811321, + +0.0002820754717, -0.0000288679245, -0.0003224528302, -0.0002820754717, + +0.0000749056604, +0.0003224528302, +0.0004145283019, +0.0002820754717, + +0.0001150943396, +0.0000058490566, -0.0001784905660, -0.0003858490566, + -0.0002245283019, +0.0001324528302, +0.0003684905660, +0.0005413207547, + +0.0007024528302, +0.0004203773585, -0.0002360377358, -0.0005413207547, + -0.0002475471698, +0.0003050943396, +0.0006967924528, +0.0007313207547, + +0.0003973584906, -0.0001900000000, -0.0006218867925, -0.0006045283019, + -0.0002820754717, +0.0002590566038, +0.0005528301887, +0.0002879245283, + -0.0000058490566, -0.0000575471698, -0.0000864150943, +0.0000230188679, + +0.0002475471698, +0.0003283018868, +0.0002994339623, +0.0001324528302, + -0.0002015094340, -0.0003339622642, -0.0001611320755, -0.0000403773585, + +0.0000518867925, +0.0000690566038, -0.0001439622642, -0.0002418867925, + -0.0002245283019, -0.0002533962264, -0.0001094339623, +0.0001209433962, + +0.0004375471698, +0.0007139622642, +0.0003513207547, -0.0002533962264, + -0.0003628301887, -0.0001728301887, +0.0000000000000, +0.0003454716981, + +0.0004835849057, +0.0001958490566, -0.0001611320755, -0.0002245283019, + -0.0000633962264, -0.0000345283019, -0.0001496226415, +0.0000403773585, + +0.0003684905660, +0.0004433962264, +0.0003569811321, +0.0002649056604, + +0.0001324528302, -0.0000864150943, -0.0002418867925, -0.0002649056604, + -0.0002360377358, +0.0001266037736, +0.0005469811321, +0.0004260377358, + +0.0000000000000, -0.0005124528302, -0.0008983018868, -0.0005815094340, + +0.0000000000000, +0.0001843396226, +0.0001209433962, +0.0003224528302, + +0.0006160377358, +0.0004203773585, -0.0001266037736, -0.0002590566038, + -0.0002188679245, -0.0003915094340, -0.0003398113208, +0.0002705660377, + +0.0007830188679, +0.0005528301887, -0.0003283018868, -0.0008983018868, + -0.0007600000000, -0.0003050943396, +0.0000749056604, +0.0004720754717, + +0.0007369811321, +0.0005584905660, -0.0001554716981, -0.0005815094340, + -0.0002764150943, +0.0001439622642, +0.0002994339623, +0.0001958490566, + -0.0000920754717, -0.0003109433962, -0.0004952830189, -0.0006679245283, + -0.0002705660377, +0.0005700000000, +0.0012322641509, +0.0014624528302, + +0.0006679245283, -0.0007715094340, -0.0014164150943, -0.0010077358491, + -0.0003224528302, +0.0005584905660, +0.0013416981132, +0.0013358490566, + +0.0004894339623, -0.0004835849057, -0.0010594339623, -0.0010307547170, + -0.0004720754717, -0.0000575471698, +0.0000690566038, +0.0006333962264, + +0.0011862264151, +0.0009788679245, +0.0003973584906, -0.0000690566038, + -0.0004318867925, -0.0004664150943, -0.0003454716981, -0.0000115094340, + +0.0007139622642, +0.0010767924528, +0.0004145283019, -0.0005815094340, + -0.0011458490566, -0.0010594339623, -0.0007313207547, -0.0003628301887, + +0.0002303773585, +0.0007600000000, +0.0008694339623, +0.0005413207547, + +0.0001900000000, +0.0000230188679, -0.0002935849057, -0.0006045283019, + -0.0002130188679, +0.0004203773585, +0.0005009433962, +0.0000979245283, + -0.0000575471698, +0.0004203773585, +0.0006852830189, +0.0000288679245, + -0.0005067924528, -0.0002820754717, -0.0000230188679, +0.0000173584906, + +0.0000288679245, +0.0001496226415, +0.0001381132075, -0.0002590566038, + -0.0004894339623, -0.0001958490566, +0.0002418867925, +0.0004952830189, + +0.0003569811321, -0.0000575471698, -0.0001496226415, +0.0001266037736, + +0.0001958490566, -0.0000749056604, -0.0001843396226, +0.0000000000000, + +0.0001150943396, -0.0002705660377, -0.0005873584906, -0.0000345283019, + +0.0006679245283, +0.0003569811321, -0.0001728301887, -0.0001035849057, + +0.0002130188679, +0.0000518867925, -0.0002188679245, +0.0000575471698, + +0.0006333962264, +0.0005700000000, +0.0000058490566, -0.0003398113208, + -0.0003398113208, -0.0002418867925, -0.0002015094340, +0.0001209433962, + +0.0007888679245, +0.0011343396226, +0.0009039622642, +0.0004549056604, + -0.0004720754717, -0.0015028301887, -0.0014452830189, -0.0003398113208, + +0.0005183018868, +0.0004952830189, -0.0000979245283, -0.0005413207547, + -0.0000690566038, +0.0009328301887, +0.0011458490566, +0.0004088679245, + -0.0002360377358, -0.0008233962264, -0.0013703773585, -0.0013877358491, + -0.0011803773585, -0.0006794339623, +0.0003800000000, +0.0013933962264, + +0.0016698113208, +0.0012667924528, +0.0003800000000, -0.0006794339623, + -0.0012494339623, -0.0011632075472, -0.0010479245283, -0.0008118867925, + -0.0001728301887, +0.0003050943396, +0.0005584905660, +0.0007369811321, + +0.0005930188679, -0.0000920754717, -0.0009328301887, -0.0012207547170, + -0.0008060377358, -0.0000979245283, +0.0006218867925, +0.0012494339623, + +0.0013473584906, +0.0001784905660, -0.0015258490566, -0.0019866037736, + -0.0012322641509, -0.0005815094340, -0.0002360377358, +0.0001728301887, + +0.0007139622642, +0.0007658490566, +0.0003915094340, +0.0000805660377, + -0.0003569811321, -0.0010709433962, -0.0012839622642, -0.0004203773585, + +0.0008579245283, +0.0012092452830, +0.0006218867925, +0.0002130188679, + -0.0001784905660, -0.0008407547170, -0.0009269811321, -0.0003454716981, + -0.0000518867925, -0.0002188679245, -0.0002533962264, +0.0001669811321, + +0.0005700000000, +0.0002418867925, -0.0000920754717, +0.0002649056604, + +0.0005413207547, +0.0002360377358, +0.0000460377358, +0.0000288679245, + -0.0003973584906, -0.0011169811321, -0.0015603773585, -0.0009558490566, + +0.0002820754717, +0.0007773584906, +0.0003454716981, +0.0002820754717, + +0.0006449056604, +0.0003339622642, -0.0004779245283, -0.0007600000000, + -0.0007254716981, -0.0009098113208, -0.0006794339623, +0.0002303773585, + +0.0009384905660, +0.0011458490566, +0.0014452830189, +0.0013473584906, + +0.0005354716981, -0.0003743396226, -0.0015373584906, -0.0024298113208, + -0.0020383018868, -0.0008118867925, +0.0004835849057, +0.0015086792453, + +0.0018598113208, +0.0015086792453, +0.0006333962264, -0.0002418867925, + -0.0003628301887, +0.0001669811321, +0.0006564150943, +0.0008924528302, + +0.0009154716981, +0.0003915094340, -0.0005584905660, -0.0012149056604, + -0.0013069811321, -0.0011228301887, -0.0011228301887, -0.0009039622642, + +0.0001381132075, +0.0014337735849, +0.0017733962264, +0.0013473584906, + +0.0008003773585, +0.0001958490566, -0.0003513207547, -0.0000749056604, + +0.0007484905660, +0.0011169811321, +0.0008003773585, -0.0002015094340, + -0.0016986792453, -0.0027407547170, -0.0029654716981, -0.0021937735849, + -0.0006160377358, +0.0008637735849, +0.0014798113208, +0.0013762264151, + +0.0008867924528, +0.0004375471698, +0.0004145283019, +0.0007658490566, + +0.0010824528302, +0.0013473584906, +0.0012264150943, +0.0002649056604, + -0.0009847169811, -0.0017733962264, -0.0019577358491, -0.0016813207547, + -0.0008809433962, +0.0003109433962, +0.0009213207547, +0.0005298113208, + +0.0000288679245, +0.0000230188679, +0.0002188679245, +0.0002475471698, + +0.0001843396226, +0.0002015094340, +0.0003339622642, +0.0005298113208, + +0.0005815094340, +0.0006909433962, +0.0005758490566, -0.0004664150943, + -0.0016467924528, -0.0018137735849, -0.0012379245283, -0.0005183018868, + +0.0004260377358, +0.0014164150943, +0.0019001886792, +0.0014279245283, + +0.0002994339623, -0.0006737735849, -0.0008983018868, -0.0005067924528, + -0.0001150943396, -0.0000403773585, +0.0000000000000, +0.0000805660377, + +0.0000345283019, +0.0000805660377, +0.0001266037736, -0.0001324528302, + +0.0001439622642, +0.0008867924528, +0.0008118867925, +0.0002935849057, + +0.0006103773585, +0.0010133962264, +0.0005183018868, -0.0003858490566, + -0.0006622641509, -0.0002820754717, +0.0000575471698, +0.0001900000000, + +0.0004549056604, +0.0009098113208, +0.0011977358491, +0.0005873584906, + -0.0007888679245, -0.0014107547170, -0.0004720754717, +0.0006390566038, + +0.0009558490566, +0.0010537735849, +0.0012033962264, +0.0007198113208, + -0.0003050943396, -0.0010767924528, -0.0009962264151, -0.0002475471698, + +0.0005354716981, +0.0008924528302, +0.0006622641509, -0.0001324528302, + -0.0010998113208, -0.0015432075472, -0.0010767924528, -0.0000805660377, + +0.0008752830189, +0.0012033962264, +0.0006333962264, -0.0002073584906, + -0.0006103773585, -0.0005183018868, +0.0000920754717, +0.0008809433962, + +0.0011054716981, +0.0006449056604, -0.0001958490566, -0.0007198113208, + -0.0004952830189, -0.0000749056604, +0.0001669811321, +0.0003050943396, + +0.0004835849057, +0.0005873584906, +0.0001266037736, -0.0004145283019, + -0.0002705660377, -0.0002245283019, -0.0006390566038, -0.0003858490566, + +0.0004260377358, +0.0006737735849, +0.0004203773585, +0.0003050943396, + +0.0002475471698, +0.0000115094340, -0.0001150943396, -0.0000518867925, + -0.0001611320755, -0.0004549056604, -0.0005528301887, -0.0001611320755, + +0.0002935849057, +0.0006679245283, +0.0011113207547, +0.0011054716981, + +0.0002590566038, -0.0004088679245, -0.0003398113208, -0.0000920754717, + -0.0000518867925, -0.0002188679245, -0.0005700000000, -0.0007369811321, + -0.0004835849057, -0.0000288679245, +0.0003454716981, +0.0005873584906, + +0.0006045283019, +0.0003858490566, +0.0000230188679, -0.0001381132075, + -0.0001381132075, -0.0002245283019, -0.0003166037736, -0.0003628301887, + -0.0003569811321, -0.0001554716981, -0.0001784905660, -0.0002245283019, + +0.0001439622642, +0.0004433962264, +0.0002705660377, -0.0001900000000, + -0.0006333962264, -0.0005930188679, -0.0004779245283, -0.0004894339623, + -0.0000230188679, +0.0004664150943, +0.0000000000000, -0.0008579245283, + -0.0010077358491, -0.0004952830189, +0.0000690566038, +0.0004664150943, + +0.0005298113208, +0.0003166037736, +0.0000633962264, -0.0001035849057, + -0.0001094339623, +0.0000345283019, +0.0000173584906, -0.0003858490566, + -0.0007024528302, -0.0003166037736, +0.0001209433962, -0.0000058490566, + -0.0002764150943, -0.0005239622642, -0.0006737735849, -0.0005930188679, + -0.0002879245283, +0.0000345283019, +0.0003569811321, +0.0005643396226, + +0.0004145283019, -0.0000864150943, -0.0002649056604, -0.0000345283019, + -0.0000575471698, -0.0002303773585, -0.0000230188679, +0.0002820754717, + +0.0002015094340, +0.0000288679245, -0.0000403773585, -0.0001900000000, + -0.0005988679245, -0.0011054716981, -0.0009269811321, +0.0000805660377, + +0.0008118867925, +0.0007600000000, +0.0005930188679, +0.0005124528302, + +0.0002994339623, -0.0002130188679, -0.0005758490566, -0.0004549056604, + -0.0000633962264, +0.0002879245283, +0.0007428301887, +0.0008407547170, + +0.0003283018868, -0.0001958490566, -0.0004720754717, -0.0006160377358, + -0.0002994339623, +0.0003513207547, +0.0009098113208, +0.0011284905660, + +0.0006275471698, -0.0003915094340, -0.0010479245283, -0.0008694339623, + -0.0004088679245, +0.0000000000000, +0.0006103773585, +0.0009213207547, + +0.0006333962264, +0.0002360377358, -0.0001035849057, -0.0002879245283, + -0.0001094339623, +0.0000518867925, +0.0000633962264, +0.0001784905660, + +0.0002303773585, -0.0001266037736, -0.0005584905660, -0.0004260377358, + -0.0000288679245, +0.0000633962264, +0.0000000000000, +0.0000518867925, + +0.0002073584906, +0.0004145283019, +0.0005758490566, +0.0005930188679, + +0.0007083018868, +0.0009615094340, +0.0006679245283, -0.0001611320755, + -0.0006449056604, -0.0004490566038, -0.0001554716981, -0.0001439622642, + -0.0002935849057, -0.0001150943396, +0.0003915094340, +0.0007715094340, + +0.0007024528302, +0.0006333962264, +0.0005009433962, +0.0000000000000, + -0.0004720754717, -0.0006275471698, -0.0005700000000, -0.0002590566038, + +0.0000805660377, +0.0004260377358, +0.0003973584906, -0.0003684905660, + -0.0009730188679, -0.0007254716981, -0.0002475471698, +0.0001094339623, + +0.0004835849057, +0.0006679245283, +0.0003513207547, -0.0000749056604, + -0.0001958490566, -0.0001035849057, -0.0001611320755, -0.0001669811321, + +0.0000230188679, +0.0000115094340, -0.0003398113208, -0.0002303773585, + +0.0002935849057, +0.0004664150943, +0.0002418867925, -0.0000575471698, + -0.0002820754717, -0.0003513207547, -0.0003628301887, -0.0003398113208, + -0.0003513207547, -0.0002245283019, +0.0000920754717, +0.0003454716981, + +0.0004835849057, +0.0004720754717, +0.0000518867925, -0.0003743396226, + -0.0004894339623, -0.0004720754717, -0.0004490566038, -0.0002360377358, + +0.0001728301887, +0.0004952830189, +0.0002705660377, -0.0003973584906, + -0.0006852830189, -0.0002764150943, +0.0002188679245, +0.0003109433962, + -0.0001209433962, -0.0004952830189, -0.0003109433962, -0.0001150943396, + -0.0001035849057, +0.0000749056604, +0.0002360377358, +0.0003973584906, + +0.0006564150943, +0.0006852830189, +0.0004088679245, -0.0000920754717, + -0.0006737735849, -0.0009558490566, -0.0006622641509, -0.0000690566038, + +0.0003569811321, +0.0003339622642, -0.0000575471698, -0.0004260377358, + -0.0002879245283, +0.0001324528302, +0.0001900000000, -0.0000920754717, + -0.0001439622642, -0.0000173584906, -0.0000058490566, -0.0000403773585, + +0.0001496226415, +0.0003569811321, +0.0002188679245, -0.0000460377358, + -0.0002130188679, -0.0004145283019, -0.0004260377358, -0.0001843396226, + +0.0000460377358, +0.0001496226415, +0.0002994339623, +0.0004894339623, + +0.0004375471698, +0.0001958490566, +0.0003398113208, +0.0003800000000, + -0.0001381132075, -0.0003858490566, -0.0000230188679, +0.0002649056604, + +0.0002820754717, +0.0000690566038, +0.0000460377358, +0.0002764150943, + +0.0000345283019, -0.0003973584906, -0.0002705660377, -0.0000173584906, + -0.0000460377358, -0.0000288679245, +0.0001669811321, +0.0002820754717, + +0.0002533962264, +0.0000979245283, -0.0000058490566, -0.0000288679245, + -0.0000403773585, -0.0003800000000, -0.0009500000000, -0.0009730188679, + -0.0003398113208, +0.0001209433962, +0.0001728301887, +0.0002015094340, + +0.0003628301887, +0.0002705660377, -0.0002418867925, -0.0004605660377, + -0.0001496226415, +0.0000518867925, +0.0000173584906, +0.0004145283019, + +0.0009384905660, +0.0008349056604, +0.0001843396226, -0.0007313207547, + -0.0013818867925, -0.0010998113208, -0.0005643396226, -0.0002073584906, + +0.0004203773585, +0.0009903773585, +0.0006679245283, -0.0002935849057, + -0.0008867924528, -0.0006909433962, -0.0001554716981, +0.0003973584906, + +0.0007428301887, +0.0007658490566, +0.0004779245283, -0.0000460377358, + -0.0004203773585, -0.0003800000000, -0.0003166037736, -0.0001728301887, + +0.0000633962264, +0.0000979245283, +0.0000518867925, +0.0000288679245, + -0.0002764150943, -0.0003915094340, -0.0001150943396, +0.0001900000000, + +0.0004835849057, +0.0003800000000, -0.0002994339623, -0.0005067924528, + -0.0000749056604, +0.0001439622642, +0.0000979245283, +0.0001381132075, + -0.0000864150943, -0.0007083018868, -0.0009443396226, -0.0004779245283, + +0.0002073584906, +0.0006218867925, +0.0004779245283, +0.0001784905660, + +0.0001669811321, +0.0001958490566, +0.0000403773585, -0.0002015094340, + -0.0003628301887, -0.0000345283019, +0.0003166037736, +0.0001035849057, + -0.0002533962264, -0.0003109433962, -0.0003800000000, -0.0004375471698, + -0.0001958490566, +0.0003454716981, +0.0008060377358, +0.0007888679245, + +0.0003339622642, -0.0000979245283, -0.0002130188679, -0.0002303773585, + -0.0004664150943, -0.0006103773585, -0.0000920754717, +0.0004835849057, + +0.0003166037736, -0.0002360377358, -0.0001958490566, +0.0001900000000, + +0.0000979245283, -0.0002935849057, -0.0002649056604, -0.0001035849057, + -0.0001150943396, +0.0000000000000, +0.0003743396226, +0.0008175471698, + +0.0010824528302, +0.0008060377358, +0.0002649056604, -0.0001094339623, + -0.0004490566038, -0.0007600000000, -0.0004835849057, +0.0003050943396, + +0.0007830188679, +0.0004605660377, -0.0001554716981, -0.0006160377358, + -0.0007600000000, -0.0005298113208, -0.0000979245283, +0.0002879245283, + +0.0005239622642, +0.0005354716981, +0.0006737735849, +0.0008809433962, + +0.0007024528302, +0.0002188679245, -0.0001669811321, -0.0002303773585, + -0.0001728301887, -0.0003513207547, -0.0003684905660, +0.0001381132075, + +0.0006449056604, +0.0005298113208, +0.0000979245283, +0.0000345283019, + +0.0002994339623, +0.0002820754717, -0.0000518867925, -0.0000403773585, + +0.0004088679245, +0.0006218867925, +0.0004664150943, +0.0003858490566, + +0.0002649056604, -0.0000058490566, -0.0002245283019, -0.0002994339623, + -0.0003398113208, -0.0001784905660, +0.0002015094340, +0.0004490566038, + +0.0003684905660, +0.0001843396226, -0.0000805660377, -0.0002245283019, + -0.0000690566038, +0.0001439622642, +0.0002360377358, +0.0002935849057, + +0.0001266037736, -0.0001324528302, -0.0002994339623, -0.0004720754717, + -0.0006449056604, -0.0005124528302, -0.0002303773585, -0.0000345283019, + +0.0002073584906, +0.0004490566038, +0.0003050943396, +0.0001439622642, + +0.0000805660377, +0.0000345283019, +0.0000230188679, +0.0000058490566, + -0.0000230188679, -0.0000690566038, -0.0003283018868, -0.0006390566038, + -0.0005815094340, +0.0000173584906, +0.0005413207547, +0.0004490566038, + +0.0001094339623, -0.0001439622642, -0.0003973584906, -0.0004375471698, + -0.0002015094340, +0.0001669811321, +0.0005413207547, +0.0007083018868, + +0.0004260377358, -0.0001094339623, -0.0005067924528, -0.0005815094340, + -0.0004664150943, -0.0002705660377, -0.0000288679245, +0.0001728301887, + +0.0003283018868, +0.0003569811321, +0.0001900000000, -0.0001381132075, + -0.0003513207547, -0.0002764150943, -0.0001728301887, -0.0001958490566, + +0.0000288679245, +0.0004375471698, +0.0005298113208, +0.0002705660377, + +0.0000000000000, -0.0002820754717, -0.0004375471698, -0.0003109433962, + -0.0000979245283, +0.0000690566038, +0.0002475471698, +0.0001150943396, + -0.0001439622642, -0.0002475471698, -0.0002015094340, -0.0000920754717, + -0.0001094339623, -0.0002994339623, -0.0003050943396, -0.0002590566038, + -0.0004549056604, -0.0004605660377, +0.0000460377358, +0.0003800000000, + +0.0002360377358, +0.0001554716981, +0.0001611320755, -0.0001150943396, + -0.0004375471698, -0.0005183018868, -0.0001784905660, +0.0003454716981, + +0.0005413207547, +0.0002590566038, -0.0000230188679, -0.0002475471698, + -0.0004203773585, -0.0004260377358, -0.0004145283019, -0.0004549056604, + -0.0002303773585, +0.0002015094340, +0.0004549056604, +0.0003283018868, + +0.0000115094340, -0.0002188679245, -0.0003398113208, -0.0002879245283, + +0.0000288679245, +0.0001611320755, -0.0000920754717, -0.0002994339623, + -0.0003224528302, -0.0001266037736, +0.0002590566038, +0.0004088679245, + +0.0002360377358, +0.0000460377358, -0.0000230188679, +0.0000288679245, + -0.0000288679245, -0.0002820754717, -0.0002994339623, +0.0001900000000, + +0.0005298113208, +0.0003224528302, -0.0000518867925, -0.0000173584906, + +0.0001439622642, +0.0001150943396, -0.0000518867925, -0.0002245283019, + -0.0002764150943, -0.0001035849057, -0.0001035849057, -0.0002073584906, + +0.0001784905660, +0.0008060377358, +0.0008637735849, +0.0002188679245, + -0.0005643396226, -0.0008233962264, -0.0006103773585, -0.0001496226415, + +0.0003743396226, +0.0006852830189, +0.0005354716981, +0.0002705660377, + +0.0000173584906, -0.0004030188679, -0.0007139622642, -0.0004779245283, + +0.0000920754717, +0.0005298113208, +0.0006505660377, +0.0005183018868, + +0.0002188679245, -0.0001150943396, -0.0002245283019, -0.0001554716981, + -0.0002015094340, -0.0003166037736, -0.0002360377358, +0.0001266037736, + +0.0004664150943, +0.0005239622642, +0.0004779245283, +0.0003398113208, + -0.0000805660377, -0.0005413207547, -0.0006390566038, -0.0003513207547, + +0.0001266037736, +0.0004835849057, +0.0005930188679, +0.0006333962264, + +0.0005758490566, +0.0002360377358, -0.0001496226415, -0.0002245283019, + +0.0000173584906, +0.0002360377358, +0.0003224528302, +0.0003166037736, + +0.0002360377358, +0.0001094339623, +0.0001324528302, +0.0000864150943, + +0.0001209433962, +0.0003569811321, +0.0003454716981, -0.0000058490566, + -0.0000288679245, +0.0001209433962, +0.0001439622642, +0.0001611320755, + +0.0002590566038, +0.0001900000000, +0.0000115094340, -0.0001496226415, + -0.0001496226415, +0.0000288679245, +0.0002245283019, +0.0002015094340, + +0.0000920754717, +0.0001381132075, +0.0002073584906, +0.0000749056604, + -0.0000633962264, -0.0001094339623, -0.0000749056604, -0.0001324528302, + -0.0002705660377, -0.0002303773585, -0.0000575471698, -0.0000979245283, + -0.0000864150943, +0.0001266037736, +0.0002303773585, +0.0000518867925, + -0.0002590566038, -0.0003743396226, -0.0000749056604, +0.0002649056604, + +0.0002303773585, +0.0000864150943, +0.0000288679245, -0.0001784905660, + -0.0004145283019, -0.0003166037736, +0.0000690566038, +0.0005469811321, + +0.0007139622642, +0.0004490566038, -0.0000115094340, -0.0003050943396, + -0.0004088679245, -0.0004664150943, -0.0003339622642, +0.0000575471698, + +0.0001554716981, -0.0000345283019, -0.0000575471698, +0.0001094339623, + +0.0000633962264, +0.0000058490566, +0.0001209433962, +0.0000230188679, + -0.0003513207547, -0.0004203773585, -0.0002418867925, -0.0000518867925, + +0.0001381132075, +0.0002303773585, +0.0001439622642, +0.0001669811321, + +0.0001784905660, -0.0000115094340, -0.0002533962264, -0.0003339622642, + -0.0004088679245, -0.0003513207547, -0.0000864150943, +0.0000288679245, + -0.0001728301887, -0.0002705660377, -0.0001843396226, -0.0001554716981, + -0.0002533962264, -0.0002764150943, -0.0000979245283, +0.0001554716981, + +0.0003858490566, +0.0006045283019, +0.0004433962264, -0.0001439622642, + -0.0005239622642, -0.0004433962264, -0.0004605660377, -0.0006333962264, + -0.0004318867925, +0.0000288679245, +0.0002590566038, +0.0001381132075, + -0.0000403773585, -0.0001094339623, -0.0001324528302, -0.0001266037736, + -0.0000749056604, -0.0002590566038, -0.0004605660377, -0.0002994339623, + +0.0001496226415, +0.0004835849057, +0.0003513207547, -0.0002073584906, + -0.0005815094340, -0.0003858490566, +0.0001209433962, +0.0002994339623, + +0.0000920754717, -0.0001035849057, -0.0000345283019, +0.0000058490566, + -0.0000288679245, -0.0001669811321, -0.0003050943396, -0.0004260377358, + -0.0003743396226, -0.0001439622642, +0.0001094339623, +0.0001381132075, + +0.0000115094340, -0.0000864150943, -0.0000460377358, -0.0000173584906, + -0.0000749056604, -0.0000518867925, +0.0001439622642, +0.0001611320755, + -0.0001150943396, -0.0002994339623, -0.0001150943396, +0.0000805660377, + +0.0001324528302, +0.0001209433962, +0.0000805660377, +0.0001209433962, + +0.0001439622642, +0.0000000000000, -0.0002533962264, -0.0005183018868, + -0.0006564150943, -0.0003800000000, +0.0001784905660, +0.0006218867925, + +0.0007198113208, +0.0005354716981, +0.0000920754717, -0.0003858490566, + -0.0005643396226, -0.0004318867925, -0.0002649056604, -0.0000058490566, + +0.0002935849057, +0.0004260377358, +0.0001784905660, -0.0001900000000, + -0.0003684905660, -0.0003800000000, -0.0004490566038, -0.0003569811321, + -0.0001035849057, +0.0000805660377, +0.0002475471698, +0.0004605660377, + +0.0003915094340, +0.0000115094340, -0.0004894339623, -0.0007083018868, + -0.0004433962264, -0.0000173584906, +0.0003166037736, +0.0005873584906, + +0.0005643396226, +0.0002303773585, -0.0002073584906, -0.0005413207547, + -0.0005354716981, -0.0001958490566, -0.0000173584906, -0.0001496226415, + -0.0001439622642, +0.0000115094340, +0.0000518867925, +0.0002820754717, + +0.0005239622642, +0.0002590566038, -0.0002705660377, -0.0006737735849, + -0.0008579245283, -0.0006390566038, -0.0000403773585, +0.0005988679245, + +0.0009154716981, +0.0007313207547, +0.0002130188679, -0.0001958490566, + -0.0002130188679, -0.0000633962264, +0.0002015094340, +0.0006160377358, + +0.0008579245283, +0.0005815094340, +0.0000460377358, -0.0003569811321, + -0.0004490566038, -0.0003454716981, -0.0000460377358, +0.0003743396226, + +0.0005873584906, +0.0003398113208, +0.0000288679245, +0.0000805660377, + +0.0004088679245, +0.0006103773585, +0.0006103773585, +0.0002994339623, + -0.0002015094340, -0.0005700000000, -0.0005469811321, -0.0002073584906, + +0.0002649056604, +0.0006333962264, +0.0008407547170, +0.0007600000000, + +0.0002879245283, -0.0003339622642, -0.0006909433962, -0.0006045283019, + -0.0001209433962, +0.0004490566038, +0.0007313207547, +0.0004952830189, + -0.0000575471698, -0.0004145283019, -0.0002764150943, +0.0001611320755, + +0.0005469811321, +0.0007484905660, +0.0006622641509, +0.0001900000000, + -0.0003454716981, -0.0004952830189, -0.0001669811321, +0.0002820754717, + +0.0002820754717, -0.0001669811321, -0.0003973584906, -0.0001669811321, + -0.0000230188679, -0.0001094339623, +0.0000230188679, +0.0004779245283, + +0.0007254716981, +0.0006218867925, +0.0003224528302, +0.0000058490566, + -0.0002130188679, -0.0003050943396, -0.0003050943396, +0.0000000000000, + +0.0003743396226, +0.0004203773585, +0.0001094339623, -0.0001843396226, + -0.0003513207547, -0.0004260377358, -0.0004664150943, -0.0003283018868, + +0.0000518867925, +0.0005584905660, +0.0008292452830, +0.0006103773585, + +0.0001209433962, -0.0002649056604, -0.0006045283019, -0.0007600000000, + -0.0005067924528, +0.0000288679245, +0.0003973584906, +0.0003628301887, + +0.0001900000000, +0.0001843396226, +0.0003166037736, +0.0004894339623, + +0.0006505660377, +0.0006160377358, +0.0003569811321, +0.0001035849057, + +0.0000518867925, +0.0000173584906, -0.0003915094340, -0.0010652830189, + -0.0011054716981, -0.0002303773585, +0.0006679245283, +0.0007428301887, + +0.0003283018868, +0.0002533962264, +0.0005009433962, +0.0003858490566, + +0.0000633962264, +0.0000345283019, -0.0000230188679, -0.0006218867925, + -0.0011113207547, -0.0009443396226, -0.0004490566038, -0.0001209433962, + -0.0001324528302, -0.0004779245283, -0.0007600000000, -0.0006275471698, + -0.0000518867925, +0.0004894339623, +0.0006505660377, +0.0005009433962, + +0.0001784905660, -0.0003569811321, -0.0007254716981, -0.0005413207547, + +0.0001150943396, +0.0006045283019, +0.0005413207547, +0.0001496226415, + -0.0001611320755, -0.0002879245283, -0.0002245283019, -0.0001324528302, + -0.0001150943396, -0.0001554716981, -0.0002360377358, -0.0003513207547, + -0.0002590566038, +0.0001728301887, +0.0005413207547, +0.0005528301887, + +0.0001958490566, -0.0003339622642, -0.0007313207547, -0.0008175471698, + -0.0007543396226, -0.0006275471698, -0.0003283018868, +0.0003398113208, + +0.0008292452830, +0.0005528301887, -0.0001035849057, -0.0005758490566, + -0.0005584905660, -0.0000805660377, +0.0002820754717, +0.0003973584906, + +0.0003454716981, +0.0000403773585, -0.0004088679245, -0.0006564150943, + -0.0004835849057, +0.0001035849057, +0.0007715094340, +0.0010998113208, + +0.0008522641509, +0.0002590566038, -0.0003858490566, -0.0009213207547, + -0.0012149056604, -0.0011113207547, -0.0006852830189, -0.0000749056604, + +0.0005183018868, +0.0009903773585, +0.0010537735849, +0.0005815094340, + -0.0001611320755, -0.0006333962264, -0.0008003773585, -0.0007543396226, + -0.0004203773585, +0.0000345283019, +0.0003166037736, +0.0003339622642, + +0.0002475471698, +0.0001439622642, +0.0000518867925, -0.0000403773585, + -0.0001496226415, -0.0002245283019, -0.0000690566038, +0.0000633962264, + -0.0000173584906, +0.0000115094340, +0.0003050943396, +0.0003166037736, + +0.0001324528302, +0.0001843396226, +0.0003628301887, +0.0004433962264, + +0.0004490566038, +0.0001439622642, -0.0004318867925, -0.0010364150943, + -0.0012207547170, -0.0007024528302, +0.0001784905660, +0.0007945283019, + +0.0012149056604, +0.0014107547170, +0.0008983018868, -0.0002073584906, + -0.0010652830189, -0.0011977358491, -0.0008579245283, -0.0005239622642, + -0.0001900000000, +0.0003166037736, +0.0007830188679, +0.0008233962264, + +0.0004720754717, +0.0000000000000, -0.0002764150943, -0.0002590566038, + -0.0001266037736, -0.0000749056604, +0.0000575471698, +0.0003628301887, + +0.0005584905660, +0.0005584905660, +0.0003684905660, +0.0000115094340, + -0.0003569811321, -0.0005469811321, -0.0004664150943, -0.0000920754717, + +0.0003858490566, +0.0007484905660, +0.0007428301887, +0.0004779245283, + +0.0001496226415, -0.0002130188679, -0.0005183018868, -0.0004375471698, + +0.0000518867925, +0.0005239622642, +0.0005643396226, +0.0005067924528, + +0.0006160377358, +0.0005067924528, +0.0000000000000, -0.0003973584906, + -0.0005183018868, -0.0005815094340, -0.0005124528302, +0.0000288679245, + +0.0006218867925, +0.0007658490566, +0.0004433962264, +0.0000633962264, + -0.0001324528302, -0.0003050943396, -0.0005354716981, -0.0004318867925, + +0.0000173584906, +0.0004203773585, +0.0004952830189, +0.0003224528302, + +0.0002015094340, +0.0000633962264, -0.0001324528302, -0.0001094339623, + +0.0000058490566, -0.0000403773585, -0.0000403773585, +0.0001439622642, + +0.0003166037736, +0.0002764150943, +0.0002130188679, +0.0001784905660, + +0.0000920754717, -0.0000864150943, -0.0002879245283, -0.0004030188679, + -0.0002533962264, +0.0000000000000, +0.0004030188679, +0.0007830188679, + +0.0008060377358, +0.0004835849057, +0.0000633962264, -0.0003800000000, + -0.0007198113208, -0.0008407547170, -0.0007369811321, -0.0005354716981, + -0.0001094339623, +0.0003743396226, +0.0005469811321, +0.0004664150943, + +0.0004835849057, +0.0004145283019, +0.0000805660377, -0.0003915094340, + -0.0006275471698, -0.0005354716981, -0.0002015094340, +0.0001266037736, + +0.0001843396226, +0.0000173584906, -0.0001150943396, -0.0002705660377, + -0.0003398113208, -0.0000345283019, +0.0003628301887, +0.0003339622642, + -0.0000690566038, -0.0003339622642, -0.0002360377358, -0.0000230188679, + +0.0000633962264, +0.0000864150943, +0.0000690566038, +0.0001266037736, + +0.0003166037736, +0.0004203773585, +0.0001728301887, -0.0002475471698, + -0.0006160377358, -0.0006794339623, -0.0005298113208, -0.0002879245283, + -0.0000920754717, +0.0001150943396, +0.0003513207547, +0.0004894339623, + +0.0004030188679, +0.0003743396226, +0.0003628301887, +0.0000403773585, + -0.0004835849057, -0.0005528301887, -0.0001958490566, +0.0000345283019, + -0.0000633962264, -0.0001150943396, -0.0000403773585, -0.0000575471698, + -0.0001094339623, +0.0000460377358, +0.0002015094340, +0.0000575471698, + -0.0001266037736, -0.0000920754717, -0.0000345283019, -0.0000864150943, + -0.0002130188679, -0.0002935849057, -0.0002130188679, -0.0000518867925, + +0.0000920754717, +0.0002590566038, +0.0002705660377, -0.0001035849057, + -0.0005239622642, -0.0005067924528, -0.0001843396226, +0.0000690566038, + +0.0003109433962, +0.0004260377358, +0.0003109433962, -0.0000460377358, + -0.0003569811321, -0.0003973584906, -0.0002073584906, -0.0000518867925, + +0.0000403773585, +0.0000805660377, +0.0001035849057, -0.0000345283019, + -0.0002705660377, -0.0004720754717, -0.0005124528302, -0.0002994339623, + +0.0000920754717, +0.0001496226415, +0.0000000000000, +0.0000805660377, + +0.0002935849057, +0.0002188679245, +0.0001209433962, +0.0002130188679, + +0.0002705660377, +0.0000403773585, -0.0003569811321, -0.0005988679245, + -0.0002705660377, +0.0003628301887, +0.0006449056604, +0.0003224528302, + -0.0001900000000, -0.0004894339623, -0.0005413207547, -0.0003973584906, + +0.0000173584906, +0.0005469811321, +0.0006390566038, +0.0002303773585, + -0.0001381132075, -0.0001728301887, -0.0000575471698, +0.0000460377358, + +0.0000403773585, +0.0000000000000, +0.0000518867925, +0.0001035849057, + -0.0000173584906, -0.0000920754717, +0.0000288679245, +0.0002705660377, + +0.0004145283019, +0.0004664150943, +0.0003224528302, +0.0000460377358, + -0.0003283018868, -0.0005988679245, -0.0005873584906, -0.0003224528302, + +0.0000000000000, +0.0003684905660, +0.0005067924528, +0.0003050943396, + +0.0000403773585, -0.0000518867925, -0.0000575471698, -0.0000345283019, + -0.0001209433962, -0.0002245283019, -0.0001900000000, +0.0000173584906, + +0.0002475471698, +0.0003569811321, +0.0002994339623, +0.0000749056604, + -0.0001554716981, -0.0002533962264, -0.0002303773585, -0.0001150943396, + +0.0000058490566, -0.0000115094340, -0.0000230188679, +0.0000805660377, + +0.0001611320755, +0.0000749056604, -0.0001209433962, -0.0003166037736, + -0.0002130188679, +0.0000690566038, +0.0002073584906, +0.0002188679245, + +0.0002649056604, +0.0000460377358, -0.0002705660377, -0.0003915094340, + -0.0003050943396, -0.0002188679245, -0.0001035849057, -0.0000345283019, + -0.0000058490566, +0.0000230188679, +0.0001669811321, +0.0003109433962, + +0.0003398113208, +0.0002188679245, +0.0000805660377, -0.0000690566038, + -0.0003628301887, -0.0006218867925, -0.0005298113208, -0.0002073584906, + +0.0001496226415, +0.0004952830189, +0.0006333962264, +0.0004318867925, + -0.0000403773585, -0.0005528301887, -0.0007369811321, -0.0004260377358, + +0.0000345283019, +0.0002879245283, +0.0004030188679, +0.0005009433962, + +0.0003915094340, +0.0001209433962, -0.0001035849057, -0.0003224528302, + -0.0005873584906, -0.0005758490566, -0.0002705660377, +0.0001669811321, + +0.0005009433962, +0.0005584905660, +0.0003166037736, +0.0000805660377, + -0.0000749056604, -0.0002015094340, -0.0002935849057, -0.0001611320755, + +0.0001035849057, +0.0002533962264, +0.0001784905660, +0.0002188679245, + +0.0004318867925, +0.0005067924528, +0.0003109433962, +0.0000575471698, + -0.0002245283019, -0.0003973584906, -0.0002360377358, +0.0001381132075, + +0.0003513207547, +0.0002533962264, -0.0000230188679, -0.0002705660377, + -0.0003684905660, -0.0002475471698, +0.0000749056604, +0.0003283018868, + +0.0002764150943, +0.0000173584906, -0.0001554716981, -0.0000864150943, + +0.0001554716981, +0.0002764150943, +0.0002303773585, +0.0002073584906, + +0.0002245283019, +0.0000518867925, -0.0002245283019, -0.0002879245283, + +0.0000230188679, +0.0003398113208, +0.0003743396226, +0.0002073584906, + +0.0001035849057, +0.0000000000000, -0.0001209433962, -0.0001728301887, + +0.0000230188679, +0.0003166037736, +0.0004030188679, +0.0001439622642, + -0.0001900000000, -0.0003454716981, -0.0003283018868, -0.0002418867925, + -0.0001150943396, +0.0000690566038, +0.0002879245283, +0.0003858490566, + +0.0002879245283, +0.0000518867925, -0.0001266037736, -0.0001324528302, + -0.0000345283019, +0.0000864150943, +0.0001496226415, +0.0000115094340, + -0.0002705660377, -0.0004549056604, -0.0003973584906, -0.0001150943396, + +0.0001669811321, +0.0003224528302, +0.0003339622642, +0.0002015094340, + -0.0000230188679, -0.0000979245283, -0.0000460377358, +0.0000173584906, + +0.0000288679245, -0.0000403773585, -0.0001900000000, -0.0002303773585, + -0.0001094339623, +0.0001381132075, +0.0002705660377, +0.0001266037736, + -0.0001843396226, -0.0002015094340, +0.0000864150943, +0.0003800000000, + +0.0004894339623, +0.0003858490566, +0.0001094339623, -0.0000979245283, + -0.0001669811321, -0.0001554716981, -0.0001094339623, +0.0000115094340, + +0.0001496226415, +0.0001150943396, -0.0001150943396, -0.0002820754717, + -0.0002073584906, +0.0000058490566, +0.0001266037736, +0.0000230188679, + -0.0000805660377, +0.0000288679245, +0.0002418867925, +0.0001900000000, + -0.0000460377358, -0.0001958490566, -0.0001035849057, +0.0000058490566, + -0.0000690566038, -0.0002764150943, -0.0003224528302, -0.0002073584906, + -0.0000403773585, +0.0000000000000, -0.0000173584906, +0.0000575471698, + +0.0001728301887, +0.0000805660377, -0.0000575471698, -0.0000979245283, + -0.0001266037736, -0.0001958490566, -0.0001381132075, +0.0000000000000, + +0.0000460377358, -0.0000749056604, -0.0002245283019, -0.0002475471698, + -0.0001554716981, -0.0000749056604, -0.0000115094340, -0.0000230188679, + -0.0000575471698, -0.0000403773585, +0.0000345283019, +0.0002073584906, + +0.0003224528302, +0.0001209433962, -0.0001381132075, -0.0001035849057, + -0.0000460377358, -0.0000979245283, -0.0000690566038, -0.0000115094340, + -0.0000575471698, -0.0000749056604, -0.0001035849057, -0.0000979245283, + -0.0000058490566, +0.0002130188679, +0.0003628301887, +0.0002705660377, + +0.0000403773585, -0.0000173584906, -0.0000460377358, -0.0001554716981, + -0.0002073584906, -0.0000173584906, +0.0002245283019, +0.0002879245283, + +0.0000864150943, -0.0002015094340, -0.0004088679245, -0.0004318867925, + -0.0002418867925, +0.0001150943396, +0.0004088679245, +0.0004720754717, + +0.0002188679245, -0.0001843396226, -0.0004779245283, -0.0005239622642, + -0.0002418867925, +0.0001900000000, +0.0003684905660, +0.0001843396226, + -0.0001324528302, -0.0003454716981, -0.0002764150943, -0.0000749056604, + +0.0000805660377, +0.0000518867925, -0.0000920754717, -0.0002015094340, + -0.0000979245283, +0.0001611320755, +0.0004260377358, +0.0004088679245, + +0.0001324528302, -0.0001381132075, -0.0001611320755, -0.0000749056604, + +0.0000345283019, +0.0001150943396, +0.0001611320755, +0.0000230188679, + -0.0002360377358, -0.0003339622642, -0.0001669811321, -0.0000115094340, + +0.0000920754717, +0.0002418867925, +0.0003973584906, +0.0003398113208, + +0.0000979245283, -0.0000920754717, -0.0001554716981, -0.0000633962264, + +0.0001496226415, +0.0002245283019, +0.0000460377358, -0.0000805660377, + -0.0001266037736, -0.0002015094340, -0.0002130188679, +0.0000288679245, + +0.0003915094340, +0.0005930188679, +0.0003743396226, -0.0000633962264, + -0.0003973584906, -0.0004720754717, -0.0003743396226, -0.0001784905660, + -0.0000230188679, +0.0001843396226, +0.0003743396226, +0.0003569811321, + +0.0001094339623, -0.0000979245283, -0.0001669811321, -0.0001439622642, + -0.0001266037736, -0.0000690566038, -0.0000518867925, -0.0000173584906, + +0.0000920754717, +0.0001554716981, +0.0000690566038, -0.0000058490566, + -0.0000173584906, +0.0000230188679, +0.0000920754717, +0.0001669811321, + +0.0002015094340, +0.0000805660377, -0.0001843396226, -0.0002649056604, + -0.0000920754717, +0.0000173584906, +0.0001150943396, +0.0002360377358, + +0.0002130188679, +0.0000749056604, +0.0000000000000, -0.0001324528302, + -0.0002533962264, -0.0002015094340, +0.0000575471698, +0.0003050943396, + +0.0003569811321, +0.0000979245283, -0.0001554716981, -0.0001496226415, + +0.0000115094340, +0.0000749056604, +0.0001209433962, +0.0001843396226, + +0.0000920754717, -0.0001843396226, -0.0003166037736, -0.0002188679245, + -0.0000115094340, +0.0001209433962, +0.0002245283019, +0.0004088679245, + +0.0005124528302, +0.0002303773585, -0.0001958490566, -0.0003283018868, + -0.0002303773585, -0.0001728301887, -0.0000864150943, +0.0000749056604, + +0.0001094339623, -0.0000173584906, -0.0001900000000, -0.0001209433962, + +0.0001381132075, +0.0003283018868, +0.0003800000000, +0.0004549056604, + +0.0004030188679, +0.0002130188679, -0.0000230188679, -0.0002073584906, + -0.0003743396226, -0.0004145283019, -0.0002879245283, -0.0000115094340, + +0.0001843396226, +0.0002245283019, +0.0001843396226, +0.0001843396226, + +0.0001496226415, +0.0000979245283, -0.0000230188679, -0.0002130188679, + -0.0003398113208, -0.0002764150943, -0.0001611320755, +0.0000000000000, + +0.0001900000000, +0.0002649056604, +0.0000633962264, -0.0002475471698, + -0.0003915094340, -0.0002130188679, +0.0000690566038, +0.0001611320755, + +0.0001669811321, +0.0002303773585, +0.0001958490566, -0.0000518867925, + -0.0002820754717, -0.0002303773585, +0.0000460377358, +0.0001266037736, + -0.0000288679245, -0.0001439622642, -0.0000518867925, +0.0000575471698, + +0.0001324528302, +0.0001496226415, +0.0001381132075, +0.0000058490566, + -0.0001209433962, -0.0001150943396, +0.0000173584906, -0.0000058490566, + -0.0001209433962, -0.0000575471698, +0.0001439622642, +0.0001728301887, + +0.0000115094340, -0.0001496226415, -0.0001439622642, -0.0001381132075, + -0.0002245283019, -0.0001728301887, +0.0000920754717, +0.0003166037736, + +0.0003398113208, +0.0001958490566, -0.0000115094340, -0.0002245283019, + -0.0003166037736, -0.0001784905660, -0.0000115094340, +0.0000230188679, + +0.0000000000000, -0.0000058490566, -0.0000864150943, -0.0001843396226, + -0.0001669811321, -0.0000115094340, +0.0000575471698, +0.0000979245283, + +0.0000864150943, +0.0000000000000, -0.0001439622642, -0.0002188679245, + -0.0002994339623, -0.0002820754717, -0.0000864150943, +0.0001958490566, + +0.0002418867925, +0.0000920754717, +0.0000000000000, +0.0001094339623, + +0.0002303773585, +0.0001611320755, -0.0000920754717, -0.0002649056604, + -0.0002130188679, -0.0000690566038, -0.0000058490566, +0.0000345283019, + +0.0000403773585, -0.0001209433962, -0.0003166037736, -0.0002533962264, + +0.0000288679245, +0.0003109433962, +0.0004030188679, +0.0002303773585, + +0.0000230188679, -0.0001094339623, -0.0002360377358, -0.0003513207547, + -0.0002879245283, -0.0000749056604, +0.0002188679245, +0.0003684905660, + +0.0003743396226, +0.0002705660377, +0.0000403773585, -0.0002590566038, + -0.0002590566038, -0.0000864150943, -0.0000058490566, +0.0000230188679, + +0.0001554716981, +0.0001728301887, +0.0001381132075, +0.0001381132075, + +0.0000864150943, -0.0000633962264, -0.0001843396226, -0.0002188679245, + -0.0001554716981, -0.0000920754717, -0.0000345283019, +0.0000749056604, + +0.0002130188679, +0.0001784905660, +0.0000460377358, +0.0000000000000, + -0.0000345283019, -0.0000805660377, -0.0000690566038, -0.0000633962264, + -0.0001669811321, -0.0002705660377, -0.0003166037736, -0.0002360377358, + -0.0000690566038, +0.0000864150943, +0.0001728301887, +0.0002303773585, + +0.0001324528302, -0.0000460377358, -0.0001843396226, -0.0002015094340, + -0.0001958490566, -0.0001381132075, -0.0000460377358, +0.0001035849057, + +0.0001900000000, +0.0001669811321, +0.0000749056604, +0.0000633962264, + +0.0000633962264, -0.0000230188679, -0.0001728301887, -0.0001439622642, + -0.0000690566038, -0.0001439622642, -0.0002303773585, -0.0001324528302, + +0.0000345283019, +0.0000920754717, +0.0000403773585, +0.0000000000000, + +0.0000173584906, +0.0000345283019, +0.0000173584906, -0.0000173584906, + -0.0000058490566, +0.0000460377358, +0.0001094339623, +0.0000979245283, + +0.0000345283019, -0.0000460377358, -0.0000864150943, -0.0000403773585, + +0.0001094339623, +0.0001900000000, +0.0001381132075, +0.0000230188679, + -0.0000288679245, -0.0000575471698, -0.0000173584906, +0.0000518867925, + +0.0001094339623, +0.0001209433962, +0.0000575471698, -0.0000979245283, + -0.0001035849057, +0.0000690566038, +0.0001843396226, +0.0001554716981, + +0.0000864150943, +0.0000633962264, +0.0000749056604, -0.0000403773585, + -0.0002303773585, -0.0001784905660, +0.0000115094340, +0.0000864150943, + +0.0000805660377, +0.0000864150943, +0.0000864150943, +0.0000920754717, + +0.0000345283019, -0.0000173584906, +0.0000288679245, +0.0001209433962, + +0.0001209433962, +0.0000633962264, -0.0000864150943, -0.0001784905660, + -0.0000518867925, +0.0001669811321, +0.0002303773585, +0.0001728301887, + +0.0001266037736, +0.0001209433962, +0.0000460377358, -0.0001035849057, + -0.0002130188679, -0.0001611320755, -0.0000460377358, +0.0000749056604, + +0.0002705660377, +0.0004664150943, +0.0004375471698, +0.0001496226415, + -0.0001094339623, -0.0001784905660, -0.0001669811321, -0.0002073584906, + -0.0002130188679, -0.0000920754717, +0.0001094339623, +0.0002130188679, + +0.0002073584906, +0.0001554716981, +0.0000979245283, -0.0000173584906, + -0.0001439622642, -0.0002073584906, -0.0000979245283, +0.0001209433962, + +0.0003224528302, +0.0003684905660, +0.0002188679245, -0.0000690566038, + -0.0003224528302, -0.0003973584906, -0.0002533962264, -0.0000575471698, + +0.0000288679245, +0.0000115094340, +0.0000173584906, +0.0000345283019, + +0.0000230188679, -0.0000345283019, -0.0000749056604, -0.0000115094340, + +0.0000749056604, +0.0000575471698, -0.0000575471698, -0.0001784905660, + -0.0002418867925, -0.0002188679245, -0.0000749056604, +0.0001784905660, + +0.0003800000000, +0.0003743396226, +0.0001266037736, -0.0000864150943, + -0.0001266037736, -0.0000979245283, -0.0001439622642, -0.0001439622642, + -0.0001209433962, -0.0000979245283, -0.0000288679245, +0.0001784905660, + +0.0003166037736, +0.0002303773585, -0.0000115094340, -0.0001381132075, + -0.0000864150943, +0.0000000000000, -0.0000115094340, -0.0000173584906, + +0.0000288679245, +0.0001035849057, +0.0000979245283, +0.0000115094340, + -0.0000460377358, +0.0000230188679, +0.0001381132075, +0.0001150943396, + +0.0000000000000, -0.0000288679245, +0.0000230188679, +0.0000518867925, + +0.0000749056604, +0.0000230188679, -0.0000633962264, -0.0001669811321, + -0.0002705660377, -0.0003050943396, -0.0001784905660, -0.0000288679245, + +0.0000805660377, +0.0001900000000, +0.0003684905660, +0.0004433962264, + +0.0002820754717, +0.0000518867925, -0.0000749056604, -0.0002649056604, + -0.0004835849057, -0.0005183018868, -0.0002533962264, +0.0000575471698, + +0.0001728301887, +0.0001209433962, +0.0000633962264, +0.0000000000000, + -0.0000864150943, -0.0001150943396, -0.0000690566038, +0.0000403773585, + +0.0002073584906, +0.0002935849057, +0.0002015094340, +0.0000749056604, + +0.0000115094340, +0.0000058490566, -0.0000749056604, -0.0002475471698, + -0.0003454716981, -0.0002188679245, -0.0000575471698, +0.0000000000000, + +0.0000058490566, +0.0000920754717, +0.0001669811321, +0.0001209433962, + -0.0000403773585, -0.0001381132075, -0.0000690566038, +0.0000518867925, + +0.0000633962264, +0.0000115094340, -0.0000230188679, -0.0000288679245, + +0.0000518867925, +0.0001958490566, +0.0002188679245, +0.0000518867925, + -0.0001900000000, -0.0003050943396, -0.0002303773585, -0.0000633962264, + +0.0000460377358, +0.0000575471698, +0.0001035849057, +0.0002475471698, + +0.0002879245283, +0.0001094339623, -0.0000749056604, -0.0001784905660, + -0.0001843396226, -0.0001324528302, -0.0000575471698, +0.0000000000000, + +0.0001381132075, +0.0002015094340, +0.0000690566038, -0.0001094339623, + -0.0001554716981, -0.0000920754717, +0.0000920754717, +0.0003050943396, + +0.0004030188679, +0.0002705660377, -0.0000058490566, -0.0002590566038, + -0.0003569811321, -0.0004145283019, -0.0004203773585, -0.0002015094340, + +0.0002245283019, +0.0005239622642, +0.0005009433962, +0.0003454716981, + +0.0001611320755, -0.0000690566038, -0.0002245283019, -0.0001784905660, + -0.0001094339623, -0.0001035849057, -0.0001611320755, -0.0001381132075, + +0.0000345283019, +0.0001958490566, +0.0000575471698, -0.0001900000000, + -0.0002475471698, -0.0000518867925, +0.0000690566038, +0.0000403773585, + -0.0000058490566, +0.0000058490566, -0.0000288679245, -0.0000979245283, + -0.0001554716981, -0.0001324528302, +0.0000460377358, +0.0002879245283, + +0.0003339622642, +0.0002130188679, +0.0000690566038, -0.0001094339623, + -0.0002935849057, -0.0003454716981, -0.0002590566038, -0.0001496226415, + -0.0000633962264, +0.0000288679245, +0.0001266037736, +0.0001900000000, + +0.0002764150943, +0.0003166037736, +0.0002418867925, +0.0000000000000, + -0.0003166037736, -0.0005354716981, -0.0004490566038, -0.0001035849057, + +0.0003513207547, +0.0005700000000, +0.0004145283019, +0.0000633962264, + -0.0001209433962, -0.0001439622642, -0.0001209433962, -0.0001035849057, + +0.0000288679245, +0.0001728301887, +0.0002015094340, +0.0001554716981, + +0.0001784905660, +0.0001611320755, -0.0000230188679, -0.0002188679245, + -0.0002130188679, -0.0000920754717, +0.0000000000000, +0.0001266037736, + +0.0003224528302, +0.0004260377358, +0.0002935849057, +0.0001035849057, + -0.0000690566038, -0.0002015094340, -0.0002015094340, -0.0000345283019, + +0.0000920754717, +0.0001496226415, +0.0001035849057, +0.0000345283019, + -0.0000115094340, -0.0000058490566, -0.0000345283019, -0.0000288679245, + +0.0000000000000, +0.0000230188679, -0.0000690566038, -0.0002188679245, + -0.0002590566038, -0.0001150943396, +0.0000230188679, +0.0001439622642, + +0.0002705660377, +0.0003398113208, +0.0002879245283, +0.0001958490566, + +0.0000345283019, -0.0002130188679, -0.0004203773585, -0.0003628301887, + -0.0001150943396, +0.0000403773585, +0.0000288679245, -0.0000173584906, + -0.0000115094340, +0.0000749056604, +0.0002705660377, +0.0003743396226, + +0.0002994339623, +0.0000345283019, -0.0002820754717, -0.0004835849057, + -0.0003743396226, -0.0001094339623, +0.0001843396226, +0.0003454716981, + +0.0002820754717, +0.0000633962264, -0.0000058490566, +0.0000633962264, + +0.0000864150943, -0.0000345283019, -0.0000979245283, -0.0000864150943, + -0.0001439622642, -0.0003166037736, -0.0003973584906, -0.0002820754717, + -0.0000115094340, +0.0002073584906, +0.0002935849057, +0.0002935849057, + +0.0001958490566, -0.0000403773585, -0.0002820754717, -0.0002303773585, + +0.0000575471698, +0.0003109433962, +0.0003628301887, +0.0003283018868, + +0.0002130188679, -0.0000173584906, -0.0002935849057, -0.0004088679245, + -0.0003915094340, -0.0003454716981, -0.0002820754717, -0.0000920754717, + +0.0001150943396, +0.0002935849057, +0.0003109433962, +0.0001266037736, + -0.0000345283019, +0.0000230188679, +0.0000805660377, +0.0000575471698, + +0.0000345283019, +0.0000000000000, -0.0001266037736, -0.0003283018868, + -0.0003109433962, +0.0000979245283, +0.0005183018868, +0.0004952830189, + +0.0001496226415, -0.0001266037736, -0.0002015094340, -0.0001900000000, + -0.0001266037736, -0.0000518867925, -0.0000345283019, -0.0000633962264, + -0.0000345283019, +0.0000058490566, -0.0000173584906, -0.0001728301887, + -0.0002764150943, -0.0001728301887, +0.0000403773585, +0.0001784905660, + +0.0002418867925, +0.0002303773585, +0.0001843396226, +0.0001035849057, + +0.0000115094340, -0.0000749056604, -0.0001324528302, -0.0001669811321, + -0.0002188679245, -0.0002360377358, -0.0001150943396, +0.0000518867925, + +0.0001381132075, +0.0001266037736, +0.0000633962264, -0.0000403773585, + -0.0001843396226, -0.0002649056604, -0.0002245283019, -0.0000749056604, + +0.0000749056604, +0.0001728301887, +0.0001728301887, +0.0001324528302, + +0.0000979245283, +0.0001324528302, +0.0001381132075, +0.0000575471698, + -0.0000403773585, -0.0001035849057, -0.0001728301887, -0.0002073584906, + -0.0001843396226, -0.0000805660377, +0.0000575471698, +0.0001035849057, + +0.0000000000000, -0.0000864150943, -0.0000518867925, -0.0000633962264, + -0.0002015094340, -0.0002073584906, +0.0001094339623, +0.0005067924528, + +0.0006103773585, +0.0003513207547, -0.0000345283019, -0.0002994339623, + -0.0003569811321, -0.0002533962264, -0.0000633962264, +0.0001150943396, + +0.0002764150943, +0.0003513207547, +0.0002533962264, +0.0000230188679, + -0.0001439622642, -0.0002418867925, -0.0002820754717, -0.0002533962264, + -0.0000920754717, +0.0001209433962, +0.0002245283019, +0.0001209433962, + -0.0000230188679, -0.0000633962264, +0.0000000000000, +0.0000230188679, + -0.0000690566038, -0.0001728301887, -0.0001094339623, +0.0000345283019, + +0.0001496226415, +0.0002533962264, +0.0002935849057, +0.0001669811321, + -0.0001035849057, -0.0003398113208, -0.0003513207547, -0.0001784905660, + +0.0000173584906, +0.0001728301887, +0.0001554716981, +0.0000000000000, + -0.0001728301887, -0.0002073584906, -0.0001266037736, -0.0000058490566, + +0.0000749056604, +0.0001669811321, +0.0001958490566, +0.0001324528302, + +0.0000749056604, +0.0000864150943, +0.0000979245283, +0.0000000000000, + -0.0001784905660, -0.0002303773585, -0.0000805660377, +0.0000749056604, + +0.0001094339623, +0.0000920754717, +0.0001035849057, +0.0001035849057, + +0.0000288679245, -0.0001150943396, -0.0002475471698, -0.0002590566038, + -0.0000749056604, +0.0001554716981, +0.0002590566038, +0.0002418867925, + +0.0002418867925, +0.0001900000000, +0.0000518867925, -0.0001209433962, + -0.0001843396226, -0.0001035849057, -0.0000230188679, -0.0000115094340, + +0.0000403773585, +0.0000864150943, +0.0000115094340, -0.0000575471698, + +0.0000115094340, +0.0001784905660, +0.0002764150943, +0.0002188679245, + +0.0000288679245, -0.0001728301887, -0.0002764150943, -0.0002188679245, + -0.0000518867925, +0.0001209433962, +0.0002188679245, +0.0001843396226, + -0.0000058490566, -0.0001900000000, -0.0002188679245, -0.0001381132075, + -0.0000690566038, -0.0000115094340, +0.0000288679245, +0.0001150943396, + +0.0001900000000, +0.0001611320755, -0.0000173584906, -0.0001728301887, + -0.0001611320755, -0.0000575471698, -0.0000575471698, -0.0001381132075, + -0.0002130188679, -0.0002360377358, -0.0001843396226, -0.0000575471698, + +0.0000633962264, +0.0001784905660, +0.0002475471698, +0.0002764150943, + +0.0002188679245, +0.0000230188679, -0.0001784905660, -0.0002360377358, + -0.0000749056604, +0.0001094339623, +0.0001554716981, +0.0001381132075, + +0.0002188679245, +0.0002418867925, +0.0000805660377, -0.0001496226415, + -0.0002764150943, -0.0002820754717, -0.0001784905660, +0.0000000000000, + +0.0002360377358, +0.0003800000000, +0.0003743396226, +0.0002649056604, + +0.0001611320755, +0.0000460377358, -0.0001035849057, -0.0002130188679, + -0.0001669811321, -0.0000230188679, +0.0001381132075, +0.0002475471698, + +0.0002245283019, +0.0001035849057, -0.0000288679245, -0.0000633962264, + +0.0000000000000, +0.0000633962264, +0.0000403773585, +0.0000230188679, + +0.0000518867925, +0.0000920754717, +0.0000173584906, -0.0000864150943, + -0.0001209433962, -0.0000864150943, -0.0000920754717, -0.0000979245283, + -0.0000173584906, +0.0001496226415, +0.0002360377358, +0.0002073584906, + +0.0001266037736, +0.0000864150943, +0.0000460377358, -0.0000115094340, + -0.0000864150943, -0.0001266037736, -0.0001554716981, -0.0001381132075, + -0.0000633962264, -0.0000173584906, -0.0000115094340, +0.0000000000000, + +0.0000864150943, +0.0001324528302, +0.0000864150943, -0.0000288679245, + -0.0001266037736, -0.0001209433962, +0.0000000000000, +0.0001150943396, + +0.0001843396226, +0.0001266037736, -0.0000115094340, -0.0001728301887, + -0.0002705660377, -0.0002073584906, +0.0000288679245, +0.0002245283019, + +0.0002303773585, +0.0000749056604, -0.0000864150943, -0.0001784905660, + -0.0001784905660, -0.0001209433962, -0.0000230188679, +0.0000864150943, + +0.0001496226415, +0.0001209433962, +0.0000345283019, -0.0000345283019, + -0.0000403773585, +0.0000230188679, +0.0000460377358, +0.0000115094340, + +0.0000000000000, +0.0000173584906, +0.0000173584906, -0.0000230188679, + -0.0001035849057, -0.0001611320755, -0.0001958490566, -0.0002303773585, + -0.0002245283019, -0.0001035849057, -0.0000058490566, -0.0000115094340, + -0.0000288679245, +0.0000058490566, +0.0000230188679, +0.0000173584906, + -0.0000173584906, -0.0000864150943, -0.0001035849057, -0.0000403773585, + +0.0000230188679, +0.0000460377358, +0.0000288679245, -0.0000403773585, + -0.0001094339623, -0.0000345283019, +0.0001439622642, +0.0002188679245, + +0.0001035849057, -0.0001094339623, -0.0002418867925, -0.0002590566038, + -0.0001958490566, -0.0000518867925, +0.0001209433962, +0.0001900000000, + +0.0001669811321, +0.0001094339623, +0.0000058490566, -0.0001209433962, + -0.0001843396226, -0.0001611320755, -0.0000920754717, -0.0000173584906, + +0.0000920754717, +0.0001843396226, +0.0001554716981, +0.0000173584906, + -0.0000864150943, -0.0001611320755, -0.0001900000000, -0.0000805660377, + +0.0001150943396, +0.0002303773585, +0.0001439622642, -0.0000345283019, + -0.0001496226415, -0.0001209433962, -0.0000749056604, -0.0001094339623, + -0.0001094339623, +0.0000575471698, +0.0002015094340, +0.0001669811321, + +0.0000460377358, -0.0000058490566, -0.0000518867925, -0.0000460377358, + +0.0000518867925, +0.0002015094340, +0.0002188679245, +0.0000749056604, + -0.0000920754717, -0.0001728301887, -0.0001611320755, -0.0000749056604, + +0.0000518867925, +0.0002073584906, +0.0002820754717, +0.0001554716981, + -0.0001094339623, -0.0002590566038, -0.0001266037736, +0.0001035849057, + +0.0001843396226, +0.0000920754717, -0.0000288679245, -0.0001324528302, + -0.0001900000000, -0.0001324528302, +0.0000115094340, +0.0000864150943, + +0.0000460377358, -0.0000058490566, -0.0000230188679, -0.0000979245283, + -0.0001958490566, -0.0001900000000, -0.0000288679245, +0.0001669811321, + +0.0002590566038, +0.0001611320755, -0.0000173584906, -0.0001381132075, + -0.0001496226415, -0.0000749056604, +0.0000173584906, +0.0001094339623, + +0.0001150943396, +0.0000000000000, -0.0001266037736, -0.0001324528302, + -0.0000403773585, +0.0000230188679, +0.0000230188679, +0.0000864150943, + +0.0002130188679, +0.0002475471698, +0.0001094339623, -0.0000575471698, + -0.0001209433962, -0.0000805660377, -0.0000920754717, -0.0001324528302, + -0.0000690566038, +0.0001094339623, +0.0002073584906, +0.0001209433962, + +0.0000173584906, +0.0000460377358, +0.0001094339623, +0.0000864150943, + +0.0000288679245, +0.0000979245283, +0.0002360377358, +0.0002245283019, + +0.0000575471698, -0.0000690566038, -0.0000864150943, -0.0000749056604, + -0.0000518867925, -0.0000115094340, +0.0000345283019, +0.0000690566038, + +0.0000979245283, +0.0001266037736, +0.0001611320755, +0.0001496226415, + +0.0001209433962, +0.0000690566038, -0.0000403773585, -0.0001784905660, + -0.0002418867925, -0.0002188679245, -0.0000920754717, +0.0000690566038, + +0.0001324528302, +0.0000920754717, +0.0000920754717, +0.0001209433962, + +0.0000633962264, -0.0000230188679, -0.0000288679245, +0.0000403773585, + +0.0000575471698, -0.0000345283019, -0.0001611320755, -0.0002130188679, + -0.0001669811321, -0.0000633962264, +0.0000690566038, +0.0001784905660, + +0.0001439622642, +0.0000058490566, -0.0000749056604, -0.0000115094340, + +0.0001035849057, +0.0001496226415, +0.0001035849057, +0.0000115094340, + -0.0000864150943, -0.0001611320755, -0.0001496226415, -0.0000345283019, + +0.0000749056604, +0.0000979245283, +0.0000230188679, -0.0000518867925, + -0.0000633962264, -0.0000403773585, -0.0000115094340, +0.0000345283019, + +0.0001439622642, +0.0002188679245, +0.0001324528302, -0.0000633962264, + -0.0002015094340, -0.0002303773585, -0.0001669811321, +0.0000000000000, + +0.0002303773585, +0.0003628301887, +0.0002994339623, +0.0000749056604, + -0.0001266037736, -0.0001900000000, -0.0000864150943, +0.0000288679245, + +0.0000288679245, -0.0000345283019, -0.0000633962264, -0.0000575471698, + -0.0000345283019, +0.0000115094340, +0.0000920754717, +0.0001439622642, + +0.0000979245283, +0.0000000000000, -0.0000805660377, -0.0001209433962, + -0.0000979245283, +0.0000000000000, +0.0000690566038, +0.0000575471698, + +0.0000345283019, +0.0000460377358, +0.0000058490566, -0.0000864150943, + -0.0001900000000, -0.0002015094340, -0.0000920754717, +0.0000518867925, + +0.0000864150943, +0.0000058490566, -0.0001035849057, -0.0001381132075, + -0.0000345283019, +0.0001209433962, +0.0001439622642, -0.0000058490566, + -0.0001728301887, -0.0001958490566, -0.0001209433962, -0.0000403773585, + +0.0000230188679, +0.0001094339623, +0.0001554716981, +0.0001035849057, + -0.0000058490566, -0.0000518867925, -0.0000345283019, -0.0000460377358, + -0.0000864150943, -0.0001035849057, -0.0000518867925, +0.0000230188679, + +0.0000633962264, +0.0000690566038, +0.0000690566038, +0.0000690566038, + +0.0000403773585, -0.0000230188679, -0.0000749056604, -0.0000979245283, + -0.0001094339623, -0.0000805660377, -0.0000115094340, +0.0000518867925, + +0.0000979245283, +0.0001209433962, +0.0000979245283, +0.0000345283019, + -0.0000518867925, -0.0001266037736, -0.0001150943396, -0.0000173584906, + +0.0000690566038, +0.0000920754717, +0.0000575471698, +0.0000000000000, + -0.0000460377358, -0.0000690566038, -0.0000749056604, -0.0000230188679, + +0.0000749056604, +0.0001439622642, +0.0001094339623, -0.0000058490566, + -0.0001035849057, -0.0001094339623, -0.0000288679245, +0.0000633962264, + +0.0001324528302, +0.0001381132075, +0.0001035849057, +0.0000805660377, + +0.0000920754717, +0.0000575471698, -0.0000403773585, -0.0001611320755, + -0.0002073584906, -0.0001900000000, -0.0000979245283, +0.0000173584906, + +0.0001094339623, +0.0002130188679, +0.0003109433962, +0.0002475471698, + +0.0000115094340, -0.0002188679245, -0.0003166037736, -0.0002764150943, + -0.0001496226415, +0.0000000000000, +0.0001381132075, +0.0002533962264, + +0.0002533962264, +0.0001324528302, -0.0000058490566, -0.0000864150943, + -0.0001150943396, -0.0000979245283, -0.0000575471698, -0.0000288679245, + -0.0000345283019, -0.0000460377358, -0.0000345283019, +0.0000000000000, + +0.0000345283019, +0.0000403773585, +0.0000000000000, -0.0000345283019, + -0.0000633962264, -0.0000518867925, -0.0000115094340, +0.0000173584906, + +0.0000058490566, -0.0000115094340, -0.0000058490566, +0.0000403773585, + +0.0000518867925, +0.0000000000000, -0.0000805660377, -0.0001381132075, + -0.0000749056604, +0.0000749056604, +0.0001958490566, +0.0001784905660, + +0.0000864150943, -0.0000058490566, -0.0000864150943, -0.0001209433962, + -0.0000575471698, +0.0000058490566, +0.0000230188679, +0.0000288679245, + +0.0000805660377, +0.0001209433962, +0.0001035849057, +0.0000288679245, + -0.0000288679245, -0.0000345283019, -0.0000058490566, +0.0000000000000, + +0.0000345283019, +0.0001150943396, +0.0001439622642, +0.0000460377358, + -0.0000749056604, -0.0001439622642, -0.0001324528302, -0.0000979245283, + -0.0000460377358, +0.0000173584906, +0.0000805660377, +0.0001381132075, + +0.0001439622642, +0.0000864150943, +0.0000173584906, +0.0000058490566, + +0.0000000000000, -0.0000058490566, -0.0000058490566, +0.0000058490566, + -0.0000058490566, -0.0000403773585, -0.0000633962264, -0.0000288679245, + +0.0000690566038, +0.0001669811321, +0.0001266037736, -0.0000115094340, + -0.0001496226415, -0.0002130188679, -0.0002303773585, -0.0001266037736, + +0.0000690566038, +0.0002303773585, +0.0002188679245, +0.0000575471698, + -0.0000805660377, -0.0001266037736, -0.0001381132075, -0.0001266037736, + -0.0000403773585, +0.0000749056604, +0.0001554716981, +0.0001496226415, + +0.0001094339623, +0.0000690566038, +0.0000230188679, -0.0000575471698, + -0.0001439622642, -0.0001554716981, -0.0000805660377, -0.0000058490566, + +0.0000230188679, +0.0000633962264, +0.0001150943396, +0.0001209433962, + +0.0000920754717, +0.0000749056604, +0.0000864150943, +0.0000518867925, + +0.0000173584906, +0.0000288679245, +0.0000173584906, -0.0000403773585, + -0.0000575471698, -0.0000058490566, +0.0000690566038, +0.0001266037736, + +0.0001150943396, +0.0000575471698, +0.0000403773585, +0.0000575471698, + +0.0000403773585, +0.0000288679245, +0.0000749056604, +0.0001209433962, + +0.0000633962264, -0.0000749056604, -0.0001958490566, -0.0002130188679, + -0.0001611320755, -0.0000920754717, -0.0000230188679, +0.0000864150943, + +0.0001900000000, +0.0002303773585, +0.0001669811321, +0.0000518867925, + -0.0000518867925, -0.0001266037736, -0.0002015094340, -0.0002533962264, + -0.0002073584906, -0.0000805660377, +0.0000460377358, +0.0001496226415, + +0.0002130188679, +0.0001728301887, +0.0000633962264, +0.0000000000000, + -0.0000345283019, -0.0000920754717, -0.0001554716981, -0.0001784905660, + -0.0001554716981, -0.0000805660377, +0.0000230188679, +0.0001150943396, + +0.0001324528302, +0.0000749056604, +0.0000000000000, -0.0000749056604, + -0.0001381132075, -0.0001439622642, -0.0000749056604, +0.0000288679245, + +0.0000979245283, +0.0000575471698, +0.0000000000000, +0.0000000000000, + +0.0000000000000, -0.0000749056604, -0.0001784905660, -0.0002130188679, + -0.0001209433962, +0.0000230188679, +0.0001209433962, +0.0001094339623, + +0.0000575471698, +0.0000115094340, -0.0000460377358, -0.0001094339623, + -0.0001094339623, -0.0000058490566, +0.0001324528302, +0.0002188679245, + +0.0002245283019, +0.0001728301887, +0.0000979245283, +0.0000115094340, + -0.0000920754717, -0.0001843396226, -0.0001784905660, -0.0001266037736, + -0.0001150943396, -0.0000690566038, +0.0000690566038, +0.0002015094340, + +0.0001611320755, +0.0000173584906, -0.0000690566038, -0.0000690566038, + -0.0000518867925, -0.0000460377358, +0.0000000000000, +0.0000805660377, + +0.0001266037736, +0.0000805660377, +0.0000115094340, -0.0000288679245, + -0.0000633962264, -0.0001150943396, -0.0001439622642, -0.0001035849057, + +0.0000000000000, +0.0000920754717, +0.0001324528302, +0.0001035849057, + +0.0000288679245, -0.0000403773585, -0.0000690566038, -0.0000403773585, + +0.0000058490566, +0.0000058490566, -0.0000690566038, -0.0001324528302, + -0.0000864150943, -0.0000230188679, -0.0000115094340, +0.0000000000000, + +0.0000575471698, +0.0000920754717, +0.0000460377358, -0.0000058490566, + +0.0000058490566, +0.0000460377358, +0.0000230188679, -0.0000288679245, + -0.0000288679245, +0.0000345283019, +0.0000690566038, +0.0000403773585, + -0.0000403773585, -0.0001554716981, -0.0002130188679, -0.0001496226415, + +0.0000000000000, +0.0001324528302, +0.0001958490566, +0.0001669811321, + +0.0000979245283, +0.0000575471698, +0.0000460377358, +0.0000230188679, + +0.0000000000000, +0.0000000000000, +0.0000173584906, +0.0000288679245, + -0.0000173584906, -0.0000979245283, -0.0001209433962, -0.0000805660377, + -0.0000173584906, +0.0000633962264, +0.0001266037736, +0.0001496226415, + +0.0001266037736, +0.0000864150943, +0.0000575471698, +0.0000403773585, + +0.0000000000000, -0.0000575471698, -0.0000690566038, -0.0000115094340, + +0.0000115094340, -0.0000115094340, -0.0000173584906, +0.0000345283019, + +0.0000864150943, +0.0000805660377, +0.0000575471698, +0.0000575471698, + +0.0000288679245, -0.0000749056604, -0.0001669811321, -0.0001094339623, + +0.0000403773585, +0.0001209433962, +0.0000518867925, -0.0000575471698, + -0.0001094339623, -0.0000920754717, -0.0000633962264, -0.0000288679245, + +0.0000288679245, +0.0001150943396, +0.0001611320755, +0.0001150943396, + +0.0000000000000, -0.0001324528302, -0.0002073584906, -0.0001439622642, + +0.0000058490566, +0.0001266037736, +0.0001266037736, +0.0000518867925, + -0.0000058490566, -0.0000518867925, -0.0000690566038, -0.0000460377358, + +0.0000000000000, -0.0000173584906, -0.0000864150943, -0.0001150943396, + -0.0000230188679, +0.0001266037736, +0.0002073584906, +0.0001611320755, + +0.0000805660377, -0.0000173584906, -0.0001728301887, -0.0002879245283, + -0.0002418867925, -0.0000575471698, +0.0000979245283, +0.0001554716981, + +0.0001496226415, +0.0001266037736, +0.0000518867925, -0.0000518867925, + -0.0000979245283, -0.0000403773585, +0.0000690566038, +0.0001324528302, + +0.0001035849057, +0.0000288679245, -0.0000805660377, -0.0001958490566, + -0.0002073584906, -0.0000575471698, +0.0001035849057, +0.0001266037736, + +0.0000403773585, +0.0000115094340, +0.0000633962264, +0.0000690566038, + +0.0000000000000, -0.0000575471698, -0.0000518867925, -0.0000345283019, + -0.0000345283019, -0.0000345283019, -0.0000173584906, +0.0000000000000, + +0.0000173584906, +0.0000460377358, +0.0000920754717, +0.0001209433962, + +0.0000979245283, +0.0000345283019, -0.0000115094340, -0.0000173584906, + -0.0000345283019, -0.0000575471698, -0.0000288679245, +0.0000403773585, + +0.0000805660377, +0.0000518867925, -0.0000058490566, -0.0000460377358, + -0.0000518867925, -0.0000288679245, +0.0000230188679, +0.0000805660377, + +0.0000805660377, +0.0000173584906, -0.0000403773585, -0.0000518867925, + -0.0000575471698, -0.0000805660377, -0.0000518867925, +0.0000690566038, + +0.0001900000000, +0.0001728301887, +0.0000864150943, +0.0000345283019, + +0.0000115094340, -0.0000403773585, -0.0001209433962, -0.0001381132075, + -0.0000805660377, -0.0000115094340, +0.0000345283019, +0.0000749056604, + +0.0001209433962, +0.0001324528302, +0.0000633962264, -0.0000575471698, + -0.0001439622642, -0.0001209433962, -0.0000690566038, -0.0000345283019, + +0.0000000000000, +0.0000460377358, +0.0000690566038, +0.0000805660377, + +0.0000749056604, +0.0000518867925, +0.0000345283019, +0.0000000000000, + -0.0000230188679, -0.0000518867925, -0.0000920754717, -0.0001381132075, + -0.0001324528302, -0.0000518867925, +0.0000288679245, +0.0000749056604, + +0.0000460377358, -0.0000173584906, -0.0000460377358, -0.0000230188679, + +0.0000000000000, +0.0000000000000, -0.0000173584906, +0.0000000000000, + +0.0000518867925, +0.0000690566038, +0.0000460377358, +0.0000460377358, + +0.0000805660377, +0.0000979245283, +0.0000403773585, -0.0000633962264, + -0.0001209433962, -0.0000805660377, +0.0000115094340, +0.0000805660377, + +0.0000920754717, +0.0000749056604, +0.0000403773585, +0.0000058490566, + -0.0000345283019, -0.0000864150943, -0.0001209433962, -0.0000805660377, + +0.0000000000000, +0.0000518867925, +0.0000979245283, +0.0001266037736, + +0.0001381132075, +0.0000979245283, +0.0000173584906, -0.0000805660377, + -0.0001611320755, -0.0001669811321, -0.0000633962264, +0.0000518867925, + +0.0001094339623, +0.0001035849057, +0.0000920754717, +0.0000633962264, + -0.0000058490566, -0.0000920754717, -0.0001094339623, -0.0000403773585, + +0.0000575471698, +0.0001266037736, +0.0001266037736, +0.0000345283019, + -0.0000805660377, -0.0001381132075, -0.0000920754717, -0.0000058490566, + +0.0000749056604, +0.0001439622642, +0.0001439622642, +0.0000749056604, + +0.0000000000000, -0.0000115094340, +0.0000460377358, +0.0000979245283, + +0.0000230188679, -0.0000864150943, -0.0001035849057, -0.0000403773585, + +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, + +0.0000173584906, +0.0000575471698, +0.0000633962264, +0.0000000000000, + -0.0000979245283, -0.0001150943396, -0.0000345283019, +0.0000460377358, + +0.0000345283019, -0.0000230188679, -0.0000345283019, -0.0000345283019, + -0.0000690566038, -0.0001094339623, -0.0000979245283, -0.0000403773585, + +0.0000000000000, +0.0000173584906, +0.0000173584906, -0.0000173584906, + -0.0000690566038, -0.0000749056604, +0.0000000000000, +0.0001150943396, + +0.0001554716981, +0.0000460377358, -0.0000920754717, -0.0001496226415, + -0.0001324528302, -0.0000979245283, -0.0000690566038, -0.0000173584906, + +0.0000403773585, +0.0001094339623, +0.0001439622642, +0.0001035849057, + -0.0000173584906, -0.0001728301887, -0.0002418867925, -0.0001496226415, + +0.0000230188679, +0.0001669811321, +0.0001958490566, +0.0001094339623, + -0.0000460377358, -0.0002015094340, -0.0002764150943, -0.0001958490566, + +0.0000173584906, +0.0002245283019, +0.0002820754717, +0.0002015094340, + +0.0000690566038, -0.0000403773585, -0.0000979245283, -0.0001209433962, + -0.0001324528302, -0.0001209433962, -0.0000403773585, +0.0000749056604, + +0.0001728301887, +0.0001900000000, +0.0001209433962, +0.0000000000000, + -0.0001035849057, -0.0000979245283, +0.0000000000000, +0.0000920754717, + +0.0001324528302, +0.0001266037736, +0.0000864150943, +0.0000345283019, + -0.0000288679245, -0.0001150943396, -0.0001439622642, -0.0000805660377, + -0.0000173584906, -0.0000115094340, -0.0000115094340, +0.0000115094340, + +0.0000345283019, +0.0000288679245, +0.0000173584906, +0.0000345283019, + +0.0000288679245, -0.0000173584906, -0.0000690566038, -0.0000749056604, + -0.0000575471698, -0.0000230188679, +0.0000403773585, +0.0001094339623, + +0.0001094339623, +0.0000633962264, +0.0000230188679, +0.0000000000000, + -0.0000173584906, -0.0000288679245, -0.0000288679245, -0.0000230188679, + -0.0000058490566, +0.0000058490566, +0.0000000000000, -0.0000230188679, + -0.0000345283019, -0.0000345283019, -0.0000115094340, +0.0000230188679, + +0.0000633962264, +0.0000920754717, +0.0000920754717, +0.0000749056604, + +0.0000633962264, +0.0000230188679, -0.0000173584906, -0.0000518867925, + -0.0000690566038, -0.0000690566038, -0.0000749056604, -0.0000749056604, + -0.0000518867925, +0.0000115094340, +0.0001035849057, +0.0001843396226, + +0.0002073584906, +0.0001611320755, +0.0000690566038, -0.0000518867925, + -0.0001843396226, -0.0002590566038, -0.0002188679245, -0.0000518867925, + +0.0001150943396, +0.0001958490566, +0.0001843396226, +0.0001150943396, + +0.0000288679245, -0.0000230188679, -0.0000690566038, -0.0000864150943, + -0.0000288679245, +0.0000633962264, +0.0001209433962, +0.0001381132075, + +0.0001209433962, +0.0000403773585, -0.0000633962264, -0.0001035849057, + -0.0000575471698, -0.0000173584906, -0.0000345283019, -0.0000749056604, + -0.0000518867925, +0.0000115094340, +0.0000575471698, +0.0000805660377, + +0.0001035849057, +0.0000979245283, +0.0000575471698, +0.0000230188679, + +0.0000058490566, -0.0000115094340, -0.0000518867925, -0.0000864150943, + -0.0000979245283, -0.0000518867925, +0.0000058490566, +0.0000345283019, + +0.0000345283019, +0.0000518867925, +0.0000460377358, +0.0000403773585, + +0.0000460377358, +0.0000288679245, -0.0000230188679, -0.0000805660377, + -0.0001035849057, -0.0000749056604, -0.0000403773585, -0.0000230188679, + +0.0000115094340, +0.0000518867925, +0.0000403773585, +0.0000115094340, + +0.0000058490566, +0.0000288679245, +0.0000460377358, +0.0000345283019, + +0.0000058490566, -0.0000403773585, -0.0000920754717, -0.0001035849057, + -0.0000749056604, -0.0000518867925, +0.0000000000000, +0.0000633962264, + +0.0001150943396, +0.0000805660377, +0.0000000000000, -0.0000633962264, + -0.0000805660377, -0.0000864150943, -0.0000690566038, -0.0000403773585, + +0.0000000000000, +0.0000230188679, +0.0000288679245, +0.0000345283019, + +0.0000575471698, +0.0000690566038, +0.0000230188679, -0.0000403773585, + -0.0000979245283, -0.0001324528302, -0.0001381132075, -0.0000920754717, + -0.0000230188679, +0.0000460377358, +0.0001035849057, +0.0001266037736, + +0.0000864150943, +0.0000403773585, +0.0000000000000, -0.0000575471698, + -0.0001266037736, -0.0001324528302, -0.0000460377358, +0.0000749056604, + +0.0001728301887, +0.0001900000000, +0.0001381132075, +0.0000518867925, + -0.0000403773585, -0.0001266037736, -0.0001324528302, -0.0000575471698, + +0.0000288679245, +0.0000690566038, +0.0000749056604, +0.0000575471698, + +0.0000460377358, +0.0000173584906, -0.0000230188679, -0.0000805660377, + -0.0000979245283, -0.0000749056604, -0.0000058490566, +0.0000864150943, + +0.0001381132075, +0.0001035849057, +0.0000518867925, +0.0000000000000, + -0.0000518867925, -0.0001209433962, -0.0001496226415, -0.0000979245283, + +0.0000000000000, +0.0000864150943, +0.0001324528302, +0.0001554716981, + +0.0001439622642, +0.0000920754717, +0.0000000000000, -0.0000805660377, + -0.0000864150943, -0.0000518867925, -0.0000518867925, -0.0000518867925, + +0.0000000000000, +0.0000518867925, +0.0000288679245, -0.0000230188679, + -0.0000230188679, +0.0000115094340, +0.0000403773585, +0.0000403773585, + +0.0000345283019, +0.0000345283019, +0.0000403773585, +0.0000115094340, + -0.0000173584906, -0.0000633962264, -0.0001150943396, -0.0001439622642, + -0.0001035849057, -0.0000173584906, +0.0000690566038, +0.0001150943396, + +0.0000864150943, +0.0000058490566, -0.0000633962264, -0.0000920754717, + -0.0000690566038, -0.0000288679245, +0.0000173584906, +0.0000403773585, + +0.0000288679245, -0.0000058490566, -0.0000518867925, -0.0000633962264, + -0.0000115094340, +0.0000633962264, +0.0001381132075, +0.0001611320755, + +0.0001094339623, +0.0000000000000, -0.0001381132075, -0.0002130188679, + -0.0001496226415, +0.0000000000000, +0.0001381132075, +0.0001728301887, + +0.0001209433962, +0.0000518867925, +0.0000000000000, -0.0000633962264, + -0.0001324528302, -0.0001381132075, -0.0000749056604, +0.0000000000000, + +0.0000518867925, +0.0000749056604, +0.0000805660377, +0.0000575471698, + +0.0000000000000, -0.0000403773585, -0.0000460377358, -0.0000345283019, + -0.0000288679245, -0.0000173584906, +0.0000460377358, +0.0001266037736, + +0.0001324528302, +0.0000403773585, -0.0000288679245, -0.0000345283019, + +0.0000000000000, +0.0000058490566, +0.0000000000000, -0.0000058490566, + -0.0000230188679, -0.0000460377358, -0.0000403773585, +0.0000000000000, + +0.0000575471698, +0.0000805660377, +0.0000518867925, +0.0000230188679, + +0.0000115094340, +0.0000230188679, +0.0000173584906, +0.0000058490566, + +0.0000058490566, +0.0000173584906, +0.0000288679245, +0.0000460377358, + +0.0000288679245, -0.0000058490566, -0.0000403773585, -0.0000345283019, + -0.0000058490566, +0.0000058490566, +0.0000173584906, +0.0000230188679, + +0.0000115094340, +0.0000000000000, +0.0000000000000, +0.0000058490566, + +0.0000288679245, +0.0000345283019, +0.0000460377358, +0.0000403773585, + +0.0000173584906, +0.0000000000000, -0.0000058490566, -0.0000288679245, + -0.0000518867925, -0.0000403773585, +0.0000000000000, +0.0000173584906, + +0.0000288679245, +0.0000230188679, +0.0000288679245, +0.0000345283019, + +0.0000230188679, +0.0000058490566, +0.0000000000000, -0.0000115094340, + -0.0000345283019, -0.0000403773585, -0.0000288679245, +0.0000000000000, + +0.0000173584906, +0.0000403773585, +0.0000345283019, +0.0000345283019, + +0.0000173584906, +0.0000058490566, +0.0000000000000, +0.0000058490566, + +0.0000058490566, +0.0000000000000, -0.0000173584906, -0.0000230188679, + -0.0000115094340, +0.0000000000000, +0.0000115094340, +0.0000115094340, + +0.0000058490566, -0.0000058490566, -0.0000230188679, -0.0000230188679, + +0.0000000000000, +0.0000115094340, +0.0000230188679, +0.0000115094340, + +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, + +0.0000000000000, +0.0000000000000, +0.0000058490566, +0.0000058490566, + +0.0000058490566, +0.0000058490566, +0.0000000000000, -0.0000058490566, + -0.0000173584906, -0.0000173584906, -0.0000058490566, +0.0000000000000, + +0.0000058490566, +0.0000115094340, +0.0000058490566, +0.0000058490566, + +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, + -0.0000058490566, +0.0000000000000, +0.0000000000000, +0.0000000000000, + +0.0000058490566, +0.0000058490566, +0.0000000000000, +0.0000000000000, + +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, + +0.0000000000000, +0.0000000000000 +}; diff --git a/plugins/LadspaEffect/swh/impulses/06-fender-68-vibrolux-at4050.h b/plugins/LadspaEffect/swh/impulses/06-fender-68-vibrolux-at4050.h new file mode 100644 index 000000000..cb84ad009 --- /dev/null +++ b/plugins/LadspaEffect/swh/impulses/06-fender-68-vibrolux-at4050.h @@ -0,0 +1,1156 @@ +float fender_68_vibrolux_at4050[] = { + +0.0000000000000, -0.0000082228117, -0.0000244031830, +0.0000000000000, + +0.0000485411141, +0.0000485411141, +0.0000082228117, -0.0000082228117, + +0.0000000000000, +0.0000405835544, +0.0000405835544, +0.0000000000000, + -0.0000082228117, -0.0000567639257, -0.0001376657825, -0.0001294429708, + +0.0000000000000, +0.0001376657825, +0.0001779840849, +0.0000809018568, + -0.0000485411141, -0.0000729442971, -0.0000082228117, -0.0000809018568, + -0.0001376657825, +0.0000729442971, +0.0003641909814, +0.0003156498674, + -0.0000647214854, -0.0004450928382, -0.0003885941645, +0.0001132625995, + +0.0005100795756, +0.0002832891247, -0.0002832891247, -0.0005100795756, + -0.0002185676393, +0.0001132625995, +0.0003156498674, +0.0002591511936, + -0.0000567639257, -0.0003724137931, -0.0004615384615, -0.0002185676393, + +0.0004615384615, +0.0011413793103, +0.0008580901857, -0.0001456233422, + -0.0007042440318, -0.0005503978780, -0.0002265251989, -0.0001214854111, + -0.0002509283820, -0.0002994694960, +0.0001618037135, +0.0006312997347, + +0.0001456233422, -0.0005100795756, -0.0001941644562, +0.0004938992042, + +0.0006718832891, +0.0002103448276, -0.0005748010610, -0.0009228116711, + -0.0002509283820, +0.0007042440318, +0.0009389920424, +0.0004938992042, + +0.0000000000000, -0.0007366047745, -0.0012628647215, -0.0005989389920, + +0.0006151193634, +0.0011819628647, +0.0006474801061, -0.0005989389920, + -0.0014246684350, -0.0006798408488, +0.0008257294430, +0.0010119363395, + +0.0001132625995, -0.0002591511936, -0.0000809018568, +0.0002915119363, + +0.0006233421751, +0.0002429708223, -0.0003156498674, -0.0000970822281, + +0.0000891246684, -0.0007204244032, -0.0013599469496, -0.0007366047745, + +0.0002753315650, +0.0008904509284, +0.0012546419098, +0.0008742705570, + -0.0001779840849, -0.0008257294430, -0.0009472148541, -0.0006151193634, + +0.0006395225464, +0.0018700265252, +0.0009389920424, -0.0010360742706, + -0.0016594164456, -0.0004127320955, +0.0013355437666, +0.0019588859416, + +0.0002103448276, -0.0021856763926, -0.0021936339523, -0.0002103448276, + +0.0008660477454, +0.0007610079576, +0.0007527851459, +0.0002509283820, + -0.0005503978780, -0.0005100795756, -0.0003885941645, +0.0001132625995, + +0.0015785145889, +0.0020236074271, +0.0004856763926, -0.0007851458886, + -0.0005748010610, -0.0009957559682, -0.0018294429708, -0.0011169761273, + +0.0001862068966, +0.0011737400531, +0.0011251989390, -0.0010604774536, + -0.0025419098143, +0.0003318302387, +0.0043549071618, +0.0036750663130, + -0.0003965517241, -0.0037156498674, -0.0040960212202, -0.0007610079576, + +0.0039665782493, +0.0045087533156, +0.0013437665782, -0.0011413793103, + -0.0022259946950, -0.0030679045093, -0.0015299734748, +0.0016026525199, + +0.0022259946950, -0.0002753315650, -0.0022907161804, -0.0034482758621, + -0.0005827586207, +0.0042336870027, +0.0048326259947, +0.0003318302387, + -0.0006557029178, +0.0017000000000, +0.0019265251989, -0.0013437665782, + -0.0021936339523, +0.0003156498674, +0.0074795755968, +0.0089042440318, + -0.0048649867374, -0.0242846153846, -0.0174928381963, -0.0015541114058, + +0.0344920424403, +0.0311408488064, -0.0519283819629, -0.0749501326260, + +0.0397538461538, +0.2236769230769, +0.2119068965517, -0.1057673740053, + -0.2652275862069, -0.1026750663130, -0.0213702917772, -0.0821870026525, + -0.0352450928382, +0.0840488063660, +0.0248026525199, -0.0184482758621, + +0.0613265251989, +0.0332132625995, -0.0287771883289, -0.0204474801061, + -0.0253368700265, +0.0206013262599, +0.0287042440318, -0.0096084880637, + -0.0008904509284, -0.0020318302387, -0.0093251989390, -0.0075525198939, + -0.0052453580902, +0.0042901856764, +0.0016514588859, +0.0039259946950, + +0.0060710875332, +0.0001053050398, +0.0083135278515, +0.0241469496021, + +0.0221718832891, +0.0038450928382, -0.0323389920424, -0.0445864721485, + +0.0038127320955, +0.0431697612732, +0.0243896551724, +0.0110819628647, + +0.0172257294430, -0.0093172413793, -0.0178005305040, +0.0070021220159, + +0.0309546419098, +0.0365644562334, +0.0222283819629, +0.0112275862069, + -0.0119721485411, -0.0250374005305, -0.0311246684350, -0.0166511936340, + +0.0101185676393, +0.0108145888594, -0.0145222811671, +0.0043145888594, + +0.0244708222812, -0.0067753315650, -0.0299509283820, -0.0077466843501, + +0.0253854111406, +0.0201562334218, +0.0094466843501, +0.0008498673740, + -0.0031732095491, -0.0022745358090, +0.0009795755968, +0.0141175066313, + +0.0250291777188, +0.0096005305040, -0.0124419098143, -0.0226413793103, + -0.0237180371353, -0.0110575596817, +0.0044925729443, +0.0035456233422, + -0.0108310344828, -0.0059334217507, +0.0018132625995, -0.0014408488064, + +0.0024689655172, +0.0080543766578, +0.0093496021220, +0.0146193633952, + +0.0227546419098, +0.0212732095491, +0.0039015915119, -0.0078114058355, + -0.0043954907162, -0.0066782493369, -0.0080949602122, +0.0017403183024, + +0.0110819628647, +0.0095923076923, -0.0003238726790, -0.0059984084881, + -0.0082000000000, -0.0066376657825, +0.0003238726790, +0.0009633952255, + -0.0013031830239, +0.0018374005305, +0.0011493368700, -0.0033917771883, + -0.0011413793103, +0.0040798408488, +0.0046787798408, +0.0003076923077, + -0.0032217506631, -0.0038206896552, +0.0030517241379, +0.0060307692308, + +0.0033594164456, -0.0014246684350, -0.0057554376658, -0.0049379310345, + -0.0082729442971, -0.0140363395225, -0.0044198938992, +0.0077628647215, + +0.0059740053050, +0.0027278514589, -0.0024042440318, -0.0039583554377, + +0.0032299734748, +0.0044763925729, -0.0022259946950, -0.0051644562334, + -0.0028007957560, +0.0018862068966, +0.0011493368700, -0.0052374005305, + -0.0065405835544, -0.0034647214854, -0.0013761273210, -0.0014005305040, + +0.0002994694960, +0.0020641909814, +0.0012222811671, +0.0011169761273, + -0.0008013262599, -0.0070183023873, -0.0067188328912, -0.0004127320955, + +0.0019265251989, +0.0015055702918, +0.0025419098143, -0.0008095490716, + -0.0046708222812, +0.0006474801061, +0.0067026525199, +0.0019103448276, + -0.0037480106101, -0.0038774535809, -0.0031488063660, -0.0042740053050, + -0.0030761273210, +0.0000000000000, -0.0021533156499, -0.0054559681698, + -0.0030114058355, +0.0023395225464, +0.0005180371353, -0.0035294429708, + +0.0003400530504, +0.0037559681698, +0.0007689655172, -0.0014976127321, + -0.0019750663130, -0.0044602122016, -0.0028816976127, -0.0004856763926, + -0.0062331564987, -0.0080625994695, -0.0011090185676, +0.0018050397878, + +0.0000891246684, +0.0024122015915, +0.0022259946950, -0.0026307692308, + -0.0017970822281, +0.0027846153846, -0.0007448275862, -0.0051482758621, + -0.0030761273210, +0.0001941644562, -0.0018941644562, -0.0075363395225, + -0.0048732095491, +0.0050997347480, +0.0066944297082, +0.0006636604775, + +0.0001214854111, +0.0016190981432, +0.0003965517241, +0.0025742705570, + +0.0043631299735, -0.0014328912467, -0.0041769230769, -0.0008660477454, + -0.0012546419098, -0.0031488063660, +0.0003238726790, +0.0029708222812, + +0.0005909814324, +0.0014732095491, +0.0032461538462, +0.0007851458886, + -0.0000970822281, +0.0015055702918, +0.0013679045093, +0.0009228116711, + +0.0007042440318, +0.0015217506631, +0.0013517241379, +0.0016432360743, + +0.0036265251989, +0.0025742705570, -0.0024607427056, -0.0065729442971, + -0.0049297082228, -0.0021533156499, -0.0015864721485, -0.0014084880637, + +0.0014570291777, +0.0043793103448, +0.0032702917772, +0.0032135278515, + +0.0039665782493, +0.0012222811671, -0.0011090185676, -0.0005424403183, + -0.0000729442971, -0.0002023872679, +0.0000244031830, -0.0009633952255, + -0.0029302387268, -0.0007448275862, +0.0018700265252, +0.0003400530504, + +0.0002994694960, +0.0000244031830, -0.0008904509284, +0.0007448275862, + +0.0021612732095, +0.0017241379310, -0.0000161803714, +0.0011493368700, + +0.0039259946950, -0.0008822281167, -0.0050188328912, -0.0011657824934, + +0.0010846153846, -0.0015541114058, -0.0002915119363, +0.0007366047745, + -0.0002753315650, +0.0028978779841, +0.0050755968170, +0.0030517241379, + +0.0003724137931, -0.0009472148541, -0.0002023872679, -0.0016270557029, + -0.0040312997347, -0.0017000000000, -0.0013923076923, -0.0017888594164, + +0.0012546419098, +0.0040877984085, +0.0058848806366, +0.0032785145889, + -0.0024042440318, -0.0028251989390, +0.0005180371353, +0.0028655172414, + +0.0010037135279, -0.0031084880637, -0.0018456233422, +0.0006474801061, + +0.0014893899204, +0.0000082228117, -0.0050267904509, -0.0041039787798, + +0.0022421750663, +0.0028816976127, +0.0011169761273, +0.0004533156499, + +0.0020803713528, +0.0024851458886, -0.0005503978780, -0.0016026525199, + -0.0012546419098, -0.0028899204244, -0.0001294429708, +0.0046222811671, + +0.0021209549072, -0.0027522546419, -0.0032623342175, -0.0007689655172, + +0.0020480106101, +0.0039421750663, +0.0005586206897, -0.0021533156499, + +0.0022098143236, +0.0046708222812, -0.0005989389920, -0.0052129973475, + -0.0032623342175, +0.0005909814324, +0.0013923076923, -0.0014167108753, + -0.0027684350133, -0.0008822281167, -0.0009551724138, +0.0001376657825, + +0.0048973474801, +0.0040312997347, -0.0013599469496, -0.0027360742706, + +0.0007933687003, +0.0028413793103, -0.0002753315650, -0.0022180371353, + -0.0014246684350, -0.0011657824934, -0.0014490716180, -0.0005748010610, + +0.0009795755968, +0.0004289124668, -0.0008580901857, +0.0006636604775, + +0.0002915119363, -0.0024607427056, -0.0005503978780, -0.0002347480106, + -0.0021371352785, -0.0012061007958, -0.0014570291777, +0.0008742705570, + +0.0038854111406, +0.0013193633952, +0.0000405835544, +0.0024527851459, + +0.0008580901857, -0.0025742705570, -0.0035859416446, -0.0020641909814, + -0.0006636604775, -0.0005586206897, +0.0005180371353, +0.0010928381963, + +0.0002832891247, +0.0002185676393, +0.0004856763926, +0.0011169761273, + +0.0027602122016, +0.0012061007958, -0.0003965517241, -0.0004533156499, + -0.0004450928382, +0.0001214854111, -0.0013599469496, -0.0032299734748, + -0.0008822281167, +0.0016917771883, +0.0013679045093, +0.0009875331565, + +0.0008095490716, +0.0005018567639, -0.0012061007958, -0.0015379310345, + +0.0004209549072, -0.0009551724138, -0.0030761273210, -0.0009145888594, + +0.0027360742706, +0.0032623342175, +0.0005503978780, -0.0006151193634, + -0.0002185676393, -0.0003156498674, -0.0005018567639, -0.0009228116711, + -0.0005342175066, +0.0007204244032, +0.0013517241379, -0.0007204244032, + -0.0016676392573, +0.0012952254642, +0.0015055702918, -0.0013114058355, + -0.0011331564987, -0.0006233421751, -0.0019185676393, -0.0008419098143, + +0.0014814323607, +0.0016026525199, +0.0006312997347, +0.0005586206897, + -0.0009066312997, -0.0012222811671, -0.0005262599469, -0.0012384615385, + +0.0003076923077, +0.0004209549072, -0.0014084880637, +0.0006233421751, + +0.0021047745358, +0.0012952254642, +0.0004289124668, -0.0015785145889, + -0.0008095490716, +0.0021371352785, +0.0021856763926, -0.0008984084881, + -0.0018538461538, +0.0000405835544, +0.0000485411141, +0.0004938992042, + +0.0007527851459, -0.0005748010610, -0.0001132625995, +0.0010442970822, + +0.0003400530504, -0.0020803713528, -0.0024366047745, -0.0008498673740, + -0.0008336870027, +0.0006312997347, +0.0014167108753, +0.0009551724138, + +0.0030437665782, +0.0035456233422, +0.0019912466844, +0.0014328912467, + -0.0002671087533, -0.0026307692308, -0.0031811671088, -0.0006962864721, + +0.0011331564987, -0.0008175066313, -0.0017241379310, -0.0000891246684, + +0.0013517241379, +0.0008984084881, +0.0000082228117, -0.0002671087533, + -0.0017161803714, -0.0018212201592, +0.0004127320955, +0.0009310344828, + +0.0018294429708, +0.0035374005305, +0.0016026525199, -0.0008822281167, + +0.0005180371353, +0.0019103448276, +0.0010198938992, -0.0013275862069, + -0.0033997347480, -0.0021774535809, -0.0008580901857, -0.0010766578249, + +0.0018456233422, +0.0039907161804, +0.0012790450928, +0.0002023872679, + +0.0014893899204, -0.0000891246684, -0.0008580901857, +0.0015623342175, + +0.0007933687003, -0.0013517241379, -0.0010684350133, -0.0000891246684, + +0.0003076923077, +0.0001456233422, -0.0005018567639, -0.0003156498674, + +0.0018538461538, +0.0034564986737, +0.0026469496021, +0.0010442970822, + +0.0006395225464, +0.0005827586207, +0.0007286472149, -0.0003076923077, + -0.0012952254642, +0.0003562334218, +0.0011331564987, -0.0009228116711, + -0.0011169761273, -0.0000567639257, -0.0004209549072, -0.0000485411141, + +0.0001456233422, -0.0000809018568, +0.0000082228117, +0.0016026525199, + +0.0032379310345, +0.0018456233422, -0.0005100795756, +0.0004209549072, + +0.0013923076923, +0.0003238726790, -0.0006474801061, +0.0001053050398, + +0.0003480106101, -0.0008984084881, -0.0001376657825, +0.0002347480106, + -0.0014408488064, -0.0006312997347, +0.0011331564987, +0.0015217506631, + +0.0027522546419, +0.0021936339523, -0.0000244031830, -0.0013437665782, + -0.0013355437666, +0.0001214854111, +0.0003238726790, -0.0002753315650, + -0.0004450928382, -0.0020480106101, -0.0031732095491, -0.0019832891247, + +0.0010119363395, +0.0033188328912, +0.0030923076923, +0.0014084880637, + +0.0006880636605, +0.0011737400531, +0.0005827586207, -0.0021127320955, + -0.0025175066313, -0.0003480106101, +0.0003885941645, -0.0016917771883, + -0.0020397877984, +0.0005180371353, -0.0003724137931, -0.0011169761273, + +0.0014893899204, +0.0025498673740, +0.0009472148541, +0.0009310344828, + +0.0014976127321, +0.0000970822281, -0.0019588859416, -0.0011981432361, + +0.0001456233422, -0.0008095490716, -0.0019347480106, -0.0014814323607, + -0.0004533156499, -0.0012628647215, -0.0013923076923, +0.0009875331565, + +0.0022827586207, +0.0009713527851, -0.0000323607427, -0.0001214854111, + -0.0003641909814, -0.0008336870027, -0.0016755968170, -0.0018132625995, + -0.0001376657825, +0.0006312997347, -0.0018374005305, -0.0035212201592, + -0.0021774535809, -0.0004450928382, -0.0006474801061, -0.0009957559682, + +0.0008660477454, +0.0035212201592, +0.0031246684350, +0.0000161803714, + -0.0029061007958, -0.0029384615385, +0.0003156498674, +0.0025984084881, + +0.0007933687003, -0.0015702917772, -0.0020885941645, -0.0014814323607, + -0.0015217506631, -0.0020559681698, -0.0012790450928, +0.0000970822281, + +0.0012305039788, +0.0010198938992, +0.0001700265252, +0.0008175066313, + +0.0010766578249, -0.0004371352785, -0.0011819628647, -0.0012061007958, + -0.0013193633952, -0.0004615384615, +0.0012061007958, +0.0011657824934, + +0.0005262599469, -0.0006233421751, -0.0021127320955, -0.0014328912467, + -0.0005180371353, -0.0001053050398, +0.0009795755968, +0.0023880636605, + +0.0027440318302, +0.0010281167109, -0.0004615384615, +0.0002429708223, + -0.0002994694960, -0.0023636604775, -0.0025580901857, -0.0007933687003, + +0.0011090185676, +0.0016026525199, +0.0003156498674, -0.0006798408488, + -0.0000970822281, -0.0000647214854, +0.0005827586207, +0.0020318302387, + +0.0017241379310, +0.0008498673740, -0.0004856763926, -0.0025984084881, + -0.0023071618037, +0.0006557029178, +0.0005827586207, -0.0013031830239, + -0.0000891246684, +0.0014167108753, -0.0004938992042, -0.0015217506631, + +0.0005342175066, +0.0012222811671, -0.0000647214854, -0.0004938992042, + -0.0006474801061, +0.0005989389920, +0.0031732095491, +0.0029787798408, + +0.0005989389920, -0.0013031830239, -0.0005586206897, +0.0006798408488, + -0.0006071618037, -0.0024931034483, -0.0013599469496, +0.0013843501326, + +0.0019750663130, -0.0008904509284, -0.0021612732095, -0.0002347480106, + +0.0013114058355, +0.0008336870027, +0.0001456233422, +0.0016352785146, + +0.0019832891247, +0.0000567639257, -0.0004127320955, -0.0000161803714, + -0.0011007957560, -0.0018538461538, -0.0010198938992, +0.0001376657825, + +0.0008175066313, +0.0009875331565, +0.0013843501326, +0.0023960212202, + +0.0027198938992, +0.0012870026525, -0.0003318302387, -0.0012061007958, + -0.0015541114058, -0.0014246684350, -0.0015217506631, -0.0013275862069, + -0.0002994694960, +0.0007124668435, +0.0007448275862, -0.0004938992042, + -0.0010281167109, +0.0005827586207, +0.0013355437666, +0.0011737400531, + +0.0011819628647, +0.0011251989390, +0.0019023872679, +0.0017323607427, + +0.0000970822281, -0.0007042440318, -0.0009957559682, -0.0008904509284, + -0.0003885941645, -0.0003803713528, -0.0002671087533, -0.0003400530504, + +0.0004615384615, +0.0015623342175, +0.0014328912467, +0.0005262599469, + +0.0001862068966, +0.0002671087533, -0.0001294429708, -0.0000161803714, + +0.0008742705570, +0.0012790450928, +0.0007851458886, -0.0005018567639, + -0.0010846153846, -0.0001053050398, +0.0008257294430, -0.0003318302387, + -0.0022342175066, -0.0019671087533, +0.0000000000000, +0.0015702917772, + +0.0014976127321, -0.0001941644562, -0.0013599469496, -0.0000970822281, + +0.0011657824934, +0.0005424403183, -0.0008742705570, -0.0016755968170, + -0.0005586206897, +0.0005503978780, -0.0001053050398, +0.0000485411141, + +0.0004856763926, -0.0005989389920, -0.0003480106101, +0.0002994694960, + -0.0004450928382, -0.0011413793103, -0.0012143236074, -0.0001294429708, + +0.0010604774536, +0.0013275862069, +0.0005748010610, -0.0007851458886, + -0.0014976127321, -0.0011737400531, +0.0000000000000, +0.0009472148541, + -0.0001618037135, -0.0018212201592, -0.0016190981432, +0.0000647214854, + +0.0017888594164, +0.0013193633952, -0.0003156498674, -0.0008175066313, + +0.0003318302387, +0.0022098143236, +0.0030840848806, +0.0015137931034, + -0.0008742705570, -0.0017485411141, -0.0013843501326, -0.0011169761273, + -0.0012628647215, -0.0007610079576, +0.0002753315650, +0.0000809018568, + -0.0013275862069, -0.0015217506631, -0.0000485411141, +0.0025904509284, + +0.0029302387268, -0.0007448275862, -0.0032623342175, -0.0014732095491, + +0.0006151193634, +0.0000161803714, -0.0018862068966, -0.0013599469496, + +0.0013031830239, +0.0026389920424, +0.0018941644562, +0.0004127320955, + -0.0010928381963, -0.0015864721485, -0.0004856763926, +0.0005180371353, + -0.0001779840849, -0.0015055702918, -0.0011251989390, +0.0006798408488, + +0.0020641909814, +0.0017241379310, +0.0000647214854, -0.0001779840849, + +0.0007527851459, +0.0000809018568, -0.0014814323607, -0.0014976127321, + -0.0007933687003, -0.0003885941645, +0.0007689655172, +0.0016270557029, + +0.0009551724138, +0.0002832891247, -0.0000809018568, -0.0006233421751, + -0.0006312997347, +0.0002753315650, +0.0005018567639, -0.0004371352785, + -0.0005827586207, +0.0000244031830, +0.0002671087533, +0.0011331564987, + +0.0010037135279, +0.0000244031830, -0.0008419098143, -0.0011007957560, + -0.0000405835544, +0.0006557029178, -0.0007366047745, -0.0013517241379, + +0.0003238726790, +0.0018779840849, +0.0013517241379, -0.0001214854111, + -0.0005424403183, -0.0001700265252, -0.0000082228117, -0.0003965517241, + -0.0008419098143, -0.0000970822281, +0.0006880636605, -0.0003400530504, + -0.0011575596817, -0.0006636604775, -0.0006962864721, -0.0004777188329, + +0.0006071618037, +0.0014814323607, +0.0008822281167, -0.0001941644562, + -0.0000485411141, +0.0002347480106, -0.0001862068966, -0.0005989389920, + +0.0002429708223, +0.0013031830239, +0.0006798408488, +0.0004127320955, + +0.0009795755968, +0.0003724137931, -0.0007689655172, -0.0012143236074, + -0.0007689655172, +0.0001779840849, +0.0007204244032, +0.0008984084881, + +0.0000405835544, -0.0014005305040, -0.0017888594164, -0.0011575596817, + -0.0003156498674, +0.0003885941645, +0.0006395225464, +0.0001941644562, + -0.0001538461538, +0.0007610079576, +0.0017000000000, +0.0009795755968, + -0.0000809018568, -0.0002915119363, -0.0006151193634, -0.0008580901857, + -0.0001214854111, +0.0007124668435, +0.0001862068966, -0.0008498673740, + -0.0008175066313, -0.0002753315650, +0.0000082228117, -0.0004694960212, + -0.0013031830239, -0.0003641909814, +0.0010198938992, +0.0006474801061, + -0.0001214854111, -0.0002429708223, +0.0001618037135, +0.0003156498674, + -0.0008419098143, -0.0009472148541, +0.0004450928382, +0.0006312997347, + +0.0003238726790, +0.0007610079576, +0.0008175066313, -0.0000809018568, + -0.0006962864721, -0.0007286472149, -0.0007851458886, -0.0002753315650, + +0.0004127320955, +0.0004450928382, +0.0006071618037, +0.0003724137931, + -0.0006312997347, -0.0009310344828, +0.0001294429708, +0.0013843501326, + +0.0012546419098, -0.0003885941645, -0.0010928381963, +0.0000567639257, + +0.0010037135279, +0.0003641909814, -0.0002429708223, -0.0002832891247, + -0.0004289124668, -0.0002671087533, +0.0006636604775, +0.0009145888594, + -0.0002347480106, -0.0010522546419, -0.0002671087533, +0.0007448275862, + +0.0001456233422, -0.0008904509284, -0.0009145888594, -0.0013114058355, + -0.0014976127321, +0.0001214854111, +0.0018294429708, +0.0019671087533, + +0.0008660477454, -0.0001779840849, +0.0000405835544, -0.0005180371353, + -0.0020236074271, -0.0015864721485, -0.0002023872679, +0.0005586206897, + +0.0017485411141, +0.0016432360743, +0.0001618037135, +0.0002265251989, + +0.0009389920424, -0.0002753315650, -0.0020721485411, -0.0023557029178, + -0.0009875331565, +0.0009633952255, +0.0011899204244, -0.0002671087533, + -0.0005909814324, +0.0008742705570, +0.0015864721485, +0.0006395225464, + +0.0002591511936, +0.0000161803714, -0.0001376657825, +0.0002347480106, + +0.0005180371353, -0.0004450928382, -0.0009957559682, -0.0001941644562, + -0.0002994694960, -0.0011899204244, -0.0000567639257, +0.0015946949602, + +0.0018132625995, +0.0008336870027, -0.0002185676393, +0.0002103448276, + -0.0003965517241, -0.0017485411141, -0.0003885941645, +0.0005018567639, + -0.0003724137931, +0.0000082228117, +0.0013275862069, +0.0016594164456, + +0.0004533156499, -0.0013843501326, -0.0026954907162, -0.0022018567639, + +0.0002265251989, +0.0014893899204, +0.0011251989390, +0.0016026525199, + +0.0020397877984, +0.0008580901857, -0.0005748010610, -0.0004047745358, + +0.0002671087533, -0.0005909814324, -0.0012546419098, -0.0007204244032, + -0.0006312997347, -0.0005586206897, +0.0009389920424, +0.0021127320955, + +0.0006395225464, -0.0009875331565, -0.0009389920424, -0.0004127320955, + +0.0002915119363, +0.0001618037135, -0.0001538461538, +0.0006718832891, + +0.0005827586207, -0.0000161803714, -0.0003156498674, -0.0007042440318, + -0.0000567639257, +0.0006718832891, +0.0001700265252, -0.0001376657825, + +0.0006557029178, +0.0010198938992, +0.0003318302387, -0.0007851458886, + -0.0016352785146, -0.0015946949602, -0.0007286472149, +0.0003480106101, + +0.0003480106101, +0.0000323607427, +0.0008336870027, +0.0006880636605, + -0.0000161803714, +0.0001941644562, +0.0002347480106, +0.0002915119363, + -0.0006798408488, -0.0028655172414, -0.0028169761273, -0.0008580901857, + +0.0004533156499, +0.0025984084881, +0.0053588859416, +0.0054559681698, + +0.0013517241379, -0.0029952254642, -0.0041931034483, -0.0034970822281, + -0.0035941644562, -0.0026145888594, -0.0001053050398, +0.0005180371353, + +0.0011657824934, +0.0029302387268, +0.0029061007958, +0.0013355437666, + -0.0002915119363, -0.0011819628647, -0.0008984084881, -0.0008257294430, + -0.0008660477454, -0.0008498673740, +0.0000485411141, +0.0021371352785, + +0.0022098143236, +0.0007124668435, -0.0010846153846, -0.0023395225464, + -0.0013679045093, +0.0000647214854, +0.0003400530504, -0.0001456233422, + -0.0014167108753, -0.0000161803714, +0.0023798408488, +0.0021694960212, + +0.0008257294430, -0.0008336870027, -0.0017564986737, -0.0013923076923, + -0.0018618037135, -0.0012222811671, +0.0007610079576, +0.0018862068966, + +0.0025580901857, +0.0018294429708, +0.0002509283820, -0.0008175066313, + -0.0011090185676, -0.0003724137931, -0.0005909814324, -0.0023395225464, + -0.0020641909814, +0.0008336870027, +0.0018538461538, -0.0004856763926, + -0.0014246684350, +0.0021289124668, +0.0035535809019, +0.0003238726790, + -0.0014893899204, -0.0005827586207, -0.0001618037135, -0.0005342175066, + -0.0018456233422, -0.0021450928382, -0.0009389920424, +0.0001779840849, + +0.0017485411141, +0.0035535809019, +0.0037641909814, +0.0016432360743, + -0.0009551724138, -0.0025419098143, -0.0026145888594, -0.0017970822281, + -0.0012466843501, -0.0004450928382, +0.0011413793103, +0.0023071618037, + +0.0028493368700, +0.0023474801061, +0.0006557029178, -0.0010604774536, + -0.0023718832891, -0.0016676392573, +0.0000567639257, +0.0005018567639, + +0.0000161803714, -0.0010846153846, -0.0012628647215, +0.0003238726790, + +0.0013437665782, +0.0009310344828, +0.0005180371353, -0.0000567639257, + -0.0009389920424, -0.0013679045093, -0.0006636604775, +0.0000567639257, + -0.0002265251989, -0.0004533156499, -0.0001376657825, +0.0002429708223, + +0.0000323607427, -0.0004694960212, -0.0001214854111, +0.0005342175066, + +0.0011331564987, +0.0015541114058, +0.0013355437666, +0.0011090185676, + +0.0010604774536, -0.0001294429708, -0.0009066312997, +0.0005665782493, + +0.0012870026525, -0.0004856763926, -0.0009875331565, -0.0005665782493, + -0.0022421750663, -0.0036750663130, -0.0033835543767, -0.0021047745358, + +0.0000323607427, +0.0020559681698, +0.0035132625995, +0.0045169761273, + +0.0036265251989, +0.0009228116711, -0.0003803713528, -0.0000082228117, + -0.0006880636605, -0.0024527851459, -0.0023312997347, -0.0003238726790, + +0.0008498673740, -0.0003562334218, -0.0010928381963, +0.0000567639257, + +0.0000244031830, -0.0017323607427, -0.0014976127321, -0.0001538461538, + +0.0005262599469, +0.0012143236074, +0.0011169761273, +0.0002671087533, + +0.0005665782493, +0.0014084880637, +0.0013599469496, +0.0006962864721, + +0.0000000000000, -0.0008580901857, -0.0012952254642, -0.0007933687003, + -0.0016190981432, -0.0022907161804, -0.0000729442971, +0.0018700265252, + +0.0012870026525, +0.0010846153846, +0.0020885941645, +0.0025175066313, + +0.0011007957560, -0.0013355437666, -0.0022583554377, -0.0010037135279, + -0.0004127320955, -0.0018618037135, -0.0021289124668, +0.0004127320955, + +0.0025742705570, +0.0022018567639, -0.0015217506631, -0.0055045092838, + -0.0016190981432, +0.0062331564987, +0.0057148541114, -0.0002429708223, + -0.0020965517241, +0.0006962864721, +0.0024689655172, +0.0002265251989, + -0.0018941644562, -0.0013517241379, -0.0010442970822, -0.0017000000000, + -0.0007771883289, -0.0003803713528, -0.0031246684350, -0.0039421750663, + -0.0010846153846, +0.0027684350133, +0.0067106100796, +0.0069615384615, + +0.0039827586207, +0.0021936339523, +0.0004694960212, -0.0012870026525, + -0.0019103448276, -0.0021612732095, -0.0013599469496, -0.0008904509284, + -0.0018212201592, -0.0023151193634, -0.0014490716180, +0.0005342175066, + +0.0012952254642, +0.0007366047745, +0.0005018567639, +0.0000082228117, + +0.0006395225464, +0.0022989389920, +0.0020318302387, -0.0003885941645, + -0.0035132625995, -0.0034482758621, -0.0009066312997, +0.0001456233422, + +0.0009310344828, +0.0014570291777, +0.0008580901857, +0.0005100795756, + +0.0004371352785, +0.0006151193634, +0.0001862068966, -0.0009228116711, + -0.0012708222812, -0.0012466843501, +0.0002915119363, +0.0028090185676, + +0.0021127320955, -0.0017079575597, -0.0033432360743, -0.0017241379310, + -0.0004533156499, +0.0005586206897, +0.0022665782493, +0.0021694960212, + +0.0011090185676, +0.0008660477454, -0.0005586206897, -0.0008904509284, + +0.0005909814324, +0.0002023872679, -0.0025660477454, -0.0025336870027, + +0.0014570291777, +0.0039098143236, +0.0017809018568, -0.0013923076923, + -0.0023636604775, -0.0006636604775, +0.0007448275862, -0.0001941644562, + -0.0015055702918, -0.0019185676393, -0.0010037135279, +0.0013517241379, + +0.0033270557029, +0.0021209549072, -0.0007689655172, -0.0016026525199, + -0.0001053050398, +0.0010928381963, +0.0004127320955, -0.0015541114058, + -0.0015299734748, +0.0003562334218, +0.0010119363395, -0.0000485411141, + -0.0011251989390, -0.0011899204244, -0.0002915119363, +0.0001862068966, + -0.0004777188329, -0.0006798408488, -0.0000485411141, +0.0004289124668, + -0.0000323607427, -0.0015785145889, -0.0016676392573, +0.0000970822281, + +0.0011575596817, +0.0017970822281, +0.0032299734748, +0.0029787798408, + -0.0002023872679, -0.0029302387268, -0.0018538461538, -0.0000244031830, + +0.0001700265252, -0.0007204244032, -0.0016352785146, -0.0012870026525, + -0.0003724137931, -0.0000647214854, -0.0004533156499, -0.0012708222812, + -0.0010846153846, +0.0001456233422, +0.0011251989390, +0.0019265251989, + +0.0015541114058, +0.0009389920424, +0.0016594164456, +0.0017564986737, + -0.0001618037135, -0.0024769230769, -0.0036103448276, -0.0028737400531, + -0.0005424403183, +0.0012305039788, +0.0014490716180, +0.0013114058355, + +0.0004450928382, -0.0003965517241, +0.0004047745358, -0.0002265251989, + -0.0025580901857, -0.0026389920424, -0.0008660477454, +0.0000082228117, + +0.0010360742706, +0.0020156498674, +0.0009551724138, +0.0001456233422, + +0.0010928381963, +0.0013843501326, +0.0008257294430, -0.0001941644562, + -0.0010766578249, -0.0002671087533, +0.0009145888594, +0.0008013262599, + -0.0001618037135, +0.0000647214854, +0.0014976127321, +0.0007851458886, + -0.0012708222812, -0.0013275862069, -0.0008984084881, -0.0012628647215, + -0.0008336870027, +0.0013679045093, +0.0035779840849, +0.0026631299735, + +0.0002103448276, +0.0001456233422, +0.0005018567639, -0.0009713527851, + -0.0022180371353, -0.0015055702918, +0.0006151193634, +0.0027116710875, + +0.0031649867374, +0.0014167108753, -0.0009066312997, -0.0013923076923, + -0.0005018567639, +0.0000647214854, -0.0000161803714, -0.0004694960212, + -0.0003724137931, +0.0004127320955, +0.0008095490716, -0.0007610079576, + -0.0030840848806, -0.0028251989390, -0.0007204244032, +0.0013275862069, + +0.0026066312997, +0.0020803713528, +0.0010846153846, +0.0014893899204, + +0.0007042440318, -0.0007610079576, +0.0000647214854, +0.0010604774536, + -0.0007689655172, -0.0025013262599, -0.0016352785146, -0.0007771883289, + -0.0001779840849, +0.0011981432361, +0.0017079575597, +0.0005989389920, + -0.0013193633952, -0.0022342175066, -0.0008660477454, +0.0007527851459, + +0.0011169761273, +0.0005586206897, -0.0002915119363, +0.0000729442971, + +0.0010198938992, +0.0008336870027, -0.0006151193634, -0.0013517241379, + -0.0002347480106, +0.0003965517241, -0.0006718832891, -0.0014814323607, + -0.0007933687003, +0.0009957559682, +0.0015217506631, +0.0002753315650, + +0.0000891246684, +0.0006312997347, +0.0007851458886, +0.0007610079576, + -0.0012708222812, -0.0036103448276, -0.0026389920424, +0.0001214854111, + +0.0015299734748, +0.0009472148541, +0.0000891246684, -0.0003724137931, + -0.0008742705570, -0.0005909814324, +0.0002429708223, +0.0007527851459, + +0.0007366047745, -0.0000485411141, +0.0002994694960, +0.0012790450928, + +0.0003724137931, -0.0008175066313, -0.0013437665782, -0.0015946949602, + -0.0007124668435, -0.0001376657825, -0.0001941644562, +0.0008175066313, + +0.0016917771883, +0.0011331564987, -0.0001862068966, -0.0000891246684, + +0.0011090185676, +0.0005342175066, -0.0008498673740, -0.0004938992042, + +0.0002915119363, +0.0005586206897, +0.0008498673740, +0.0008013262599, + +0.0001618037135, -0.0009389920424, -0.0017647214854, -0.0019427055703, + -0.0014976127321, -0.0002994694960, +0.0005909814324, +0.0003724137931, + +0.0008660477454, +0.0012466843501, -0.0000567639257, -0.0014814323607, + -0.0010928381963, -0.0002753315650, -0.0008175066313, -0.0009310344828, + +0.0009875331565, +0.0019750663130, +0.0005665782493, -0.0003400530504, + -0.0002023872679, -0.0001294429708, -0.0004047745358, -0.0003641909814, + -0.0002265251989, -0.0005180371353, -0.0000809018568, +0.0009633952255, + +0.0008742705570, -0.0002591511936, -0.0005665782493, +0.0003238726790, + +0.0014167108753, +0.0012870026525, +0.0003641909814, -0.0008336870027, + -0.0012708222812, -0.0005503978780, -0.0005909814324, -0.0008580901857, + +0.0003400530504, +0.0013679045093, +0.0005018567639, -0.0005018567639, + -0.0004289124668, +0.0006798408488, +0.0010119363395, +0.0001456233422, + -0.0006312997347, -0.0004615384615, +0.0000405835544, +0.0004209549072, + +0.0010846153846, +0.0015541114058, +0.0003156498674, -0.0010928381963, + -0.0004694960212, +0.0006880636605, +0.0003480106101, -0.0006557029178, + -0.0005342175066, -0.0001132625995, +0.0001700265252, +0.0006880636605, + +0.0004289124668, -0.0002591511936, -0.0001862068966, -0.0001294429708, + -0.0003803713528, -0.0000244031830, +0.0005424403183, +0.0007851458886, + +0.0007933687003, -0.0001376657825, -0.0010766578249, +0.0001941644562, + +0.0012870026525, +0.0000809018568, -0.0011899204244, -0.0014652519894, + -0.0011169761273, -0.0004371352785, +0.0002509283820, +0.0009145888594, + +0.0007448275862, +0.0003724137931, +0.0001456233422, -0.0001700265252, + +0.0001214854111, -0.0001456233422, -0.0010119363395, -0.0006233421751, + -0.0003238726790, -0.0008013262599, -0.0012222811671, -0.0003885941645, + +0.0012061007958, +0.0008419098143, -0.0007366047745, -0.0005503978780, + +0.0006395225464, +0.0007933687003, -0.0002591511936, -0.0007933687003, + +0.0000323607427, +0.0013517241379, +0.0016755968170, +0.0007366047745, + -0.0003318302387, -0.0011007957560, -0.0011657824934, -0.0002832891247, + +0.0001700265252, -0.0003400530504, -0.0006798408488, +0.0000000000000, + +0.0008257294430, +0.0008013262599, +0.0007366047745, +0.0010846153846, + +0.0003724137931, -0.0010522546419, -0.0008257294430, +0.0001862068966, + +0.0000000000000, -0.0009795755968, -0.0008419098143, +0.0004209549072, + +0.0015055702918, +0.0012305039788, +0.0002915119363, -0.0004615384615, + -0.0007366047745, -0.0009145888594, -0.0009389920424, -0.0001618037135, + +0.0009472148541, +0.0009551724138, +0.0002509283820, +0.0002832891247, + +0.0001214854111, -0.0010684350133, -0.0007527851459, +0.0007771883289, + +0.0003885941645, -0.0005180371353, -0.0002429708223, +0.0000161803714, + -0.0004047745358, -0.0013355437666, -0.0014490716180, +0.0003318302387, + +0.0024445623342, +0.0024769230769, +0.0012143236074, +0.0013114058355, + +0.0017079575597, -0.0000244031830, -0.0018212201592, -0.0016755968170, + -0.0009472148541, -0.0010604774536, -0.0013355437666, -0.0002671087533, + +0.0009145888594, +0.0008419098143, +0.0009633952255, +0.0013843501326, + +0.0008175066313, -0.0001376657825, -0.0005342175066, -0.0000405835544, + +0.0008419098143, +0.0013275862069, +0.0010604774536, +0.0003238726790, + -0.0002753315650, +0.0001538461538, +0.0007933687003, +0.0001700265252, + -0.0011169761273, -0.0012790450928, -0.0003641909814, +0.0005827586207, + +0.0005748010610, +0.0002347480106, +0.0004209549072, +0.0000809018568, + -0.0006395225464, -0.0006395225464, -0.0002994694960, -0.0003480106101, + -0.0007448275862, -0.0004777188329, +0.0007610079576, +0.0015137931034, + +0.0009228116711, +0.0000485411141, -0.0002509283820, +0.0001053050398, + +0.0005424403183, -0.0001618037135, -0.0013923076923, -0.0011007957560, + -0.0008822281167, -0.0011413793103, -0.0001618037135, +0.0004938992042, + +0.0005424403183, +0.0009875331565, +0.0012466843501, +0.0014005305040, + +0.0005748010610, -0.0009389920424, -0.0011899204244, -0.0004450928382, + -0.0002185676393, -0.0003724137931, -0.0000244031830, +0.0008013262599, + +0.0008742705570, +0.0004289124668, +0.0003965517241, -0.0000161803714, + -0.0005503978780, -0.0003076923077, +0.0002832891247, +0.0005665782493, + -0.0001618037135, -0.0015299734748, -0.0015785145889, -0.0002832891247, + +0.0007610079576, +0.0009633952255, +0.0005989389920, +0.0002347480106, + +0.0004209549072, +0.0007851458886, +0.0004450928382, -0.0003318302387, + -0.0010442970822, -0.0014084880637, -0.0010198938992, -0.0003641909814, + -0.0001132625995, -0.0004533156499, -0.0007933687003, -0.0009472148541, + -0.0006071618037, +0.0007610079576, +0.0017726790451, +0.0007366047745, + -0.0001132625995, -0.0002509283820, -0.0007689655172, -0.0006071618037, + +0.0004615384615, +0.0009310344828, +0.0002994694960, -0.0010522546419, + -0.0016514588859, -0.0007771883289, -0.0000567639257, +0.0002509283820, + +0.0007204244032, +0.0007527851459, +0.0006557029178, +0.0004450928382, + -0.0004777188329, -0.0013437665782, -0.0009713527851, -0.0001214854111, + +0.0007204244032, +0.0011657824934, +0.0004371352785, -0.0004533156499, + -0.0001941644562, +0.0003238726790, +0.0004047745358, -0.0000729442971, + -0.0004289124668, +0.0000485411141, +0.0002994694960, +0.0003400530504, + +0.0003724137931, -0.0003641909814, -0.0008095490716, -0.0000161803714, + +0.0006071618037, -0.0000161803714, -0.0012546419098, -0.0010360742706, + +0.0004533156499, +0.0012628647215, +0.0011169761273, +0.0000567639257, + -0.0007042440318, +0.0000567639257, +0.0007933687003, -0.0000161803714, + -0.0012870026525, -0.0015055702918, -0.0005909814324, +0.0003641909814, + +0.0003400530504, -0.0000405835544, +0.0004533156499, +0.0012384615385, + +0.0008013262599, -0.0002347480106, -0.0010442970822, -0.0007366047745, + -0.0001132625995, -0.0001538461538, -0.0003562334218, -0.0002103448276, + -0.0002429708223, -0.0004533156499, -0.0003562334218, -0.0000567639257, + -0.0001132625995, +0.0002265251989, +0.0008742705570, +0.0002265251989, + -0.0006151193634, -0.0002429708223, +0.0005665782493, +0.0007286472149, + +0.0001053050398, -0.0003238726790, -0.0003318302387, -0.0002915119363, + -0.0000729442971, +0.0003400530504, +0.0004777188329, -0.0000244031830, + -0.0005827586207, +0.0000244031830, +0.0007366047745, +0.0003400530504, + -0.0006395225464, -0.0012870026525, -0.0006233421751, +0.0007042440318, + +0.0013517241379, +0.0014408488064, +0.0011413793103, +0.0009713527851, + +0.0008336870027, -0.0003641909814, -0.0018538461538, -0.0018700265252, + -0.0005342175066, +0.0003076923077, +0.0002429708223, +0.0007286472149, + +0.0015137931034, +0.0013517241379, +0.0007286472149, +0.0003400530504, + +0.0004615384615, +0.0000647214854, -0.0009875331565, -0.0009472148541, + +0.0001132625995, +0.0006880636605, +0.0001941644562, -0.0005424403183, + -0.0005018567639, -0.0002103448276, +0.0000082228117, +0.0000567639257, + +0.0000323607427, +0.0003965517241, +0.0006962864721, +0.0011575596817, + +0.0016594164456, +0.0005989389920, -0.0008175066313, -0.0009633952255, + -0.0004856763926, +0.0000323607427, -0.0000809018568, -0.0009713527851, + -0.0010522546419, -0.0005180371353, -0.0000647214854, +0.0005424403183, + +0.0007448275862, +0.0005342175066, +0.0007771883289, +0.0007042440318, + -0.0003156498674, -0.0012466843501, -0.0009551724138, +0.0002023872679, + +0.0003803713528, -0.0003480106101, -0.0002023872679, +0.0001294429708, + -0.0002915119363, -0.0005262599469, -0.0004047745358, -0.0002994694960, + -0.0000970822281, +0.0002915119363, +0.0005748010610, +0.0002265251989, + +0.0000000000000, +0.0001214854111, -0.0001779840849, -0.0005503978780, + -0.0001294429708, +0.0003724137931, +0.0005665782493, +0.0008498673740, + +0.0007610079576, -0.0004127320955, -0.0014005305040, -0.0008257294430, + -0.0000405835544, +0.0003156498674, +0.0004209549072, +0.0000809018568, + -0.0002023872679, +0.0002429708223, +0.0009551724138, +0.0010037135279, + +0.0000000000000, -0.0006233421751, -0.0004450928382, -0.0002023872679, + -0.0003480106101, -0.0010442970822, -0.0007610079576, +0.0006636604775, + +0.0010198938992, +0.0005424403183, +0.0003641909814, +0.0000891246684, + -0.0004371352785, -0.0005989389920, -0.0004533156499, -0.0003641909814, + -0.0003965517241, +0.0001053050398, +0.0010442970822, +0.0007933687003, + -0.0003076923077, -0.0003238726790, +0.0002103448276, +0.0000244031830, + -0.0004777188329, -0.0005586206897, -0.0005100795756, -0.0002509283820, + +0.0004450928382, +0.0005503978780, -0.0001862068966, -0.0007933687003, + -0.0007448275862, +0.0004209549072, +0.0017079575597, +0.0012546419098, + -0.0004694960212, -0.0019347480106, -0.0018618037135, -0.0002832891247, + +0.0010198938992, +0.0007933687003, -0.0000647214854, -0.0003480106101, + +0.0003480106101, +0.0014005305040, +0.0014893899204, +0.0003076923077, + -0.0010766578249, -0.0011090185676, +0.0000970822281, +0.0002591511936, + -0.0007042440318, -0.0013355437666, -0.0011981432361, -0.0004371352785, + +0.0003724137931, +0.0010928381963, +0.0017161803714, +0.0014490716180, + +0.0005342175066, -0.0002591511936, -0.0004047745358, -0.0000809018568, + +0.0000323607427, +0.0000809018568, -0.0004209549072, -0.0014490716180, + -0.0009472148541, +0.0008742705570, +0.0015379310345, +0.0007124668435, + +0.0000567639257, +0.0001862068966, +0.0004289124668, +0.0002509283820, + -0.0003480106101, -0.0007610079576, -0.0005018567639, -0.0001456233422, + -0.0002915119363, -0.0005748010610, -0.0001376657825, +0.0007204244032, + +0.0008660477454, +0.0003400530504, -0.0005342175066, -0.0011657824934, + -0.0004615384615, +0.0005586206897, +0.0003562334218, -0.0005424403183, + -0.0003965517241, +0.0013599469496, +0.0018779840849, -0.0002023872679, + -0.0017161803714, -0.0010604774536, -0.0000323607427, +0.0003318302387, + +0.0000485411141, -0.0004615384615, -0.0005665782493, -0.0002429708223, + -0.0001618037135, -0.0006557029178, -0.0008257294430, -0.0001779840849, + +0.0006880636605, +0.0009389920424, +0.0002103448276, -0.0003480106101, + +0.0002347480106, +0.0009957559682, +0.0004533156499, -0.0010846153846, + -0.0019103448276, -0.0006880636605, +0.0010928381963, +0.0012061007958, + +0.0001294429708, -0.0000082228117, +0.0003803713528, +0.0000082228117, + -0.0004938992042, -0.0007689655172, -0.0009875331565, -0.0004450928382, + +0.0007933687003, +0.0011090185676, +0.0002509283820, -0.0002429708223, + -0.0000405835544, +0.0000405835544, +0.0001538461538, +0.0000323607427, + -0.0002265251989, +0.0000970822281, +0.0004450928382, +0.0005262599469, + +0.0004371352785, -0.0001700265252, -0.0005748010610, -0.0000082228117, + +0.0003480106101, -0.0004777188329, -0.0011981432361, -0.0005909814324, + +0.0003400530504, +0.0007610079576, +0.0007851458886, +0.0000000000000, + -0.0010119363395, -0.0011737400531, +0.0000000000000, +0.0010604774536, + +0.0006395225464, -0.0003076923077, -0.0005342175066, +0.0001214854111, + +0.0005586206897, -0.0003885941645, -0.0011331564987, -0.0001700265252, + +0.0007771883289, -0.0001618037135, -0.0016917771883, -0.0011981432361, + +0.0008013262599, +0.0015217506631, +0.0008904509284, +0.0006636604775, + +0.0006636604775, -0.0000323607427, -0.0007448275862, -0.0009633952255, + -0.0013679045093, -0.0017564986737, -0.0006395225464, +0.0013843501326, + +0.0021936339523, +0.0017970822281, +0.0010522546419, +0.0000567639257, + -0.0004938992042, -0.0005342175066, -0.0005180371353, +0.0000405835544, + +0.0006395225464, +0.0006880636605, +0.0002994694960, -0.0002591511936, + -0.0004289124668, -0.0002591511936, -0.0002023872679, -0.0001779840849, + -0.0001132625995, +0.0000000000000, +0.0003885941645, +0.0009713527851, + +0.0008984084881, +0.0001779840849, +0.0000567639257, +0.0005586206897, + +0.0006557029178, +0.0000000000000, -0.0007610079576, -0.0004938992042, + +0.0002832891247, +0.0004450928382, +0.0001618037135, +0.0000244031830, + -0.0003318302387, -0.0009145888594, -0.0009145888594, +0.0000891246684, + +0.0009389920424, +0.0008257294430, +0.0005100795756, +0.0003480106101, + +0.0004450928382, +0.0005180371353, -0.0001779840849, -0.0008013262599, + -0.0007527851459, -0.0007124668435, -0.0005262599469, -0.0000647214854, + +0.0000000000000, -0.0005503978780, -0.0011657824934, -0.0009713527851, + +0.0000647214854, +0.0006962864721, +0.0006718832891, +0.0006962864721, + +0.0010360742706, +0.0008984084881, +0.0002265251989, -0.0002347480106, + -0.0001294429708, +0.0006151193634, +0.0006395225464, -0.0011575596817, + -0.0019994694960, -0.0000647214854, +0.0022503978780, +0.0015946949602, + -0.0013923076923, -0.0021612732095, +0.0006880636605, +0.0020721485411, + +0.0000244031830, -0.0012305039788, +0.0001214854111, +0.0007204244032, + -0.0000891246684, -0.0006395225464, -0.0006233421751, +0.0005827586207, + +0.0011819628647, +0.0001456233422, -0.0002753315650, +0.0011169761273, + +0.0010846153846, -0.0005586206897, -0.0009795755968, -0.0001294429708, + +0.0005909814324, +0.0009633952255, +0.0005503978780, +0.0002832891247, + +0.0010037135279, +0.0005342175066, -0.0010119363395, -0.0018862068966, + -0.0019347480106, -0.0009875331565, +0.0006718832891, +0.0007851458886, + +0.0001053050398, +0.0007689655172, +0.0010522546419, -0.0002185676393, + -0.0011493368700, -0.0007610079576, -0.0001053050398, +0.0002671087533, + +0.0002265251989, +0.0003400530504, +0.0003238726790, -0.0007042440318, + -0.0018456233422, -0.0014652519894, +0.0002347480106, +0.0014570291777, + +0.0012870026525, +0.0003803713528, -0.0006395225464, -0.0014490716180, + -0.0014246684350, +0.0000970822281, +0.0011575596817, -0.0003724137931, + -0.0019832891247, -0.0005180371353, +0.0010928381963, +0.0006474801061, + -0.0003803713528, -0.0007527851459, -0.0004209549072, +0.0002103448276, + +0.0009472148541, +0.0009145888594, +0.0001779840849, -0.0000891246684, + -0.0010766578249, -0.0024931034483, -0.0016108753316, +0.0004371352785, + +0.0007689655172, -0.0001214854111, -0.0000647214854, +0.0009145888594, + +0.0008660477454, +0.0003885941645, +0.0008336870027, +0.0010442970822, + -0.0002915119363, -0.0012790450928, -0.0002265251989, +0.0010522546419, + +0.0011657824934, +0.0003641909814, -0.0002429708223, -0.0002509283820, + -0.0000405835544, +0.0001053050398, -0.0004127320955, -0.0012628647215, + -0.0010037135279, -0.0000485411141, +0.0009228116711, +0.0011575596817, + +0.0002185676393, -0.0008336870027, -0.0013761273210, -0.0008984084881, + +0.0002915119363, +0.0009310344828, +0.0010846153846, +0.0006962864721, + -0.0003641909814, -0.0011493368700, -0.0014005305040, -0.0014005305040, + -0.0013275862069, -0.0011575596817, +0.0000323607427, +0.0019185676393, + +0.0021289124668, +0.0005665782493, -0.0003156498674, +0.0000970822281, + +0.0006474801061, +0.0004938992042, -0.0002023872679, -0.0006880636605, + -0.0008175066313, -0.0009066312997, -0.0007286472149, -0.0004127320955, + +0.0000809018568, +0.0005503978780, +0.0010037135279, +0.0015217506631, + +0.0012870026525, +0.0005342175066, +0.0003965517241, +0.0006312997347, + +0.0002265251989, -0.0008013262599, -0.0015299734748, -0.0008419098143, + +0.0003318302387, +0.0006151193634, -0.0000567639257, -0.0008175066313, + -0.0005018567639, +0.0004047745358, +0.0005018567639, +0.0000891246684, + +0.0000405835544, +0.0003724137931, +0.0011899204244, +0.0022342175066, + +0.0019750663130, -0.0005424403183, -0.0025175066313, -0.0014408488064, + -0.0004938992042, -0.0009875331565, -0.0008660477454, +0.0003076923077, + +0.0012790450928, +0.0009795755968, +0.0002429708223, +0.0003238726790, + +0.0003965517241, +0.0000567639257, +0.0000244031830, +0.0007042440318, + +0.0010604774536, +0.0004209549072, +0.0000000000000, -0.0000485411141, + -0.0005262599469, -0.0009389920424, -0.0008984084881, -0.0007448275862, + -0.0006474801061, -0.0002994694960, +0.0003238726790, +0.0009875331565, + +0.0018132625995, +0.0020480106101, +0.0008095490716, -0.0009310344828, + -0.0015623342175, -0.0015055702918, -0.0013517241379, -0.0007771883289, + +0.0000729442971, +0.0007448275862, +0.0013355437666, +0.0011981432361, + +0.0007851458886, +0.0007124668435, +0.0000244031830, -0.0009551724138, + -0.0011737400531, -0.0010360742706, -0.0006557029178, +0.0005100795756, + +0.0020156498674, +0.0022342175066, +0.0003400530504, -0.0018862068966, + -0.0019994694960, -0.0004371352785, +0.0006151193634, +0.0004289124668, + -0.0000567639257, -0.0002265251989, +0.0005262599469, +0.0015623342175, + +0.0011981432361, -0.0001618037135, -0.0008904509284, -0.0006395225464, + +0.0001132625995, +0.0002347480106, -0.0001700265252, +0.0002265251989, + +0.0009145888594, +0.0006962864721, -0.0003641909814, -0.0012384615385, + -0.0009875331565, -0.0000405835544, +0.0003641909814, -0.0000970822281, + -0.0009875331565, -0.0013843501326, -0.0002265251989, +0.0015217506631, + +0.0012708222812, -0.0002671087533, -0.0007042440318, -0.0004615384615, + -0.0000485411141, +0.0006636604775, +0.0008175066313, +0.0007610079576, + +0.0006071618037, +0.0000082228117, -0.0005018567639, -0.0006557029178, + -0.0006233421751, -0.0006798408488, -0.0008742705570, -0.0003803713528, + +0.0005909814324, +0.0012305039788, +0.0010766578249, +0.0001294429708, + -0.0008257294430, -0.0011413793103, -0.0008498673740, -0.0004777188329, + -0.0004209549072, -0.0001618037135, +0.0004533156499, +0.0009145888594, + +0.0009228116711, +0.0006474801061, +0.0001456233422, -0.0005342175066, + -0.0011493368700, -0.0013517241379, -0.0005989389920, +0.0005018567639, + +0.0008822281167, +0.0005342175066, -0.0000244031830, -0.0004371352785, + -0.0003641909814, -0.0001538461538, -0.0001132625995, -0.0001538461538, + +0.0001618037135, +0.0005424403183, +0.0003400530504, +0.0000244031830, + +0.0004533156499, +0.0008257294430, +0.0002671087533, -0.0003562334218, + -0.0000405835544, +0.0003562334218, -0.0005262599469, -0.0016676392573, + -0.0011657824934, +0.0001700265252, +0.0010198938992, +0.0009472148541, + +0.0004371352785, +0.0003076923077, +0.0002832891247, -0.0000485411141, + -0.0000970822281, +0.0000000000000, -0.0001862068966, -0.0002994694960, + -0.0002591511936, -0.0004777188329, -0.0006962864721, -0.0003156498674, + +0.0003156498674, +0.0007124668435, +0.0007124668435, +0.0002023872679, + -0.0001214854111, +0.0001376657825, +0.0000082228117, -0.0005748010610, + -0.0004777188329, +0.0000405835544, +0.0002832891247, +0.0004371352785, + +0.0004777188329, +0.0002671087533, -0.0004450928382, -0.0010766578249, + -0.0009066312997, -0.0003400530504, +0.0002103448276, +0.0008984084881, + +0.0009472148541, -0.0000891246684, -0.0009228116711, +0.0000000000000, + +0.0011169761273, +0.0004777188329, -0.0006233421751, -0.0003562334218, + +0.0005665782493, +0.0008175066313, +0.0001779840849, -0.0006071618037, + -0.0007527851459, -0.0000970822281, +0.0003318302387, +0.0000000000000, + -0.0002753315650, +0.0002915119363, +0.0008660477454, +0.0005018567639, + -0.0004127320955, -0.0009472148541, -0.0009066312997, -0.0005748010610, + -0.0002509283820, -0.0004209549072, -0.0005827586207, -0.0000567639257, + +0.0006962864721, +0.0011007957560, +0.0010684350133, +0.0006557029178, + +0.0004371352785, +0.0001456233422, -0.0003641909814, -0.0008013262599, + -0.0012628647215, -0.0015055702918, -0.0007204244032, +0.0006880636605, + +0.0016676392573, +0.0015946949602, +0.0007366047745, +0.0000000000000, + -0.0002671087533, -0.0003885941645, -0.0002994694960, -0.0001618037135, + -0.0000485411141, +0.0003400530504, +0.0005989389920, -0.0000161803714, + -0.0006636604775, -0.0003724137931, +0.0000970822281, -0.0002832891247, + -0.0007689655172, -0.0006880636605, -0.0006474801061, -0.0004450928382, + +0.0003238726790, +0.0008984084881, +0.0007610079576, +0.0003724137931, + +0.0003076923077, +0.0004615384615, +0.0000161803714, -0.0010360742706, + -0.0014652519894, -0.0008013262599, +0.0000244031830, +0.0004209549072, + +0.0004047745358, +0.0000970822281, -0.0001456233422, -0.0000891246684, + +0.0003641909814, +0.0004856763926, -0.0004694960212, -0.0012305039788, + -0.0005748010610, +0.0007366047745, +0.0013517241379, +0.0008822281167, + +0.0000244031830, -0.0004450928382, -0.0004371352785, +0.0001294429708, + +0.0004450928382, -0.0002994694960, -0.0014005305040, -0.0013114058355, + +0.0000485411141, +0.0011899204244, +0.0011981432361, +0.0005018567639, + -0.0002185676393, -0.0003965517241, -0.0002265251989, -0.0001941644562, + -0.0002103448276, -0.0003400530504, -0.0000729442971, +0.0004127320955, + +0.0004694960212, +0.0003641909814, +0.0001294429708, -0.0002023872679, + -0.0004127320955, -0.0004777188329, -0.0002347480106, +0.0001538461538, + +0.0004777188329, +0.0006395225464, +0.0001214854111, -0.0005665782493, + -0.0006312997347, -0.0003724137931, -0.0002832891247, -0.0003400530504, + +0.0001214854111, +0.0009633952255, +0.0014570291777, +0.0009551724138, + -0.0002509283820, -0.0008660477454, -0.0005586206897, -0.0000891246684, + +0.0002832891247, +0.0000891246684, -0.0003400530504, -0.0002429708223, + +0.0003562334218, +0.0007771883289, +0.0003238726790, -0.0004856763926, + -0.0005748010610, -0.0000082228117, +0.0006557029178, +0.0009875331565, + +0.0007042440318, +0.0001700265252, -0.0001294429708, -0.0002185676393, + -0.0004533156499, -0.0007771883289, -0.0007286472149, -0.0002429708223, + +0.0005748010610, +0.0010442970822, +0.0006474801061, +0.0003965517241, + +0.0005342175066, +0.0002671087533, -0.0004615384615, -0.0008822281167, + -0.0005909814324, -0.0001132625995, +0.0000567639257, +0.0002671087533, + +0.0005180371353, +0.0005909814324, +0.0005100795756, +0.0003724137931, + -0.0000485411141, -0.0007448275862, -0.0012466843501, -0.0010198938992, + +0.0000809018568, +0.0012466843501, +0.0014490716180, +0.0007933687003, + -0.0000891246684, -0.0002753315650, +0.0000567639257, +0.0000809018568, + -0.0001132625995, -0.0005180371353, -0.0007286472149, -0.0002023872679, + +0.0002671087533, +0.0004289124668, +0.0004127320955, +0.0000323607427, + -0.0000244031830, +0.0003724137931, +0.0003400530504, -0.0003238726790, + -0.0007527851459, -0.0005424403183, -0.0001214854111, +0.0003076923077, + +0.0004450928382, -0.0002509283820, -0.0006798408488, +0.0002347480106, + +0.0009472148541, +0.0002429708223, -0.0006474801061, -0.0007042440318, + -0.0001053050398, +0.0003641909814, +0.0002671087533, +0.0002023872679, + +0.0005018567639, +0.0002429708223, -0.0002832891247, -0.0004615384615, + -0.0005180371353, -0.0003641909814, +0.0002429708223, +0.0008095490716, + +0.0007689655172, -0.0001132625995, -0.0007366047745, -0.0003076923077, + +0.0000729442971, -0.0002832891247, -0.0007527851459, -0.0003803713528, + +0.0006557029178, +0.0007286472149, -0.0001053050398, -0.0000567639257, + +0.0005424403183, +0.0005180371353, +0.0000161803714, -0.0003400530504, + -0.0003480106101, -0.0002185676393, -0.0001779840849, +0.0000244031830, + +0.0003238726790, +0.0000647214854, -0.0006395225464, -0.0007366047745, + -0.0002994694960, -0.0001456233422, -0.0002023872679, +0.0000082228117, + +0.0002832891247, +0.0002671087533, +0.0000891246684, +0.0000000000000, + -0.0000244031830, -0.0000485411141, -0.0002591511936, -0.0001538461538, + +0.0003803713528, +0.0004938992042, +0.0000323607427, -0.0001862068966, + +0.0001294429708, +0.0004777188329, +0.0004856763926, +0.0003803713528, + -0.0001779840849, -0.0010360742706, -0.0010928381963, -0.0003803713528, + +0.0001053050398, +0.0001214854111, +0.0000647214854, +0.0001618037135, + +0.0002509283820, +0.0000485411141, -0.0002753315650, -0.0001779840849, + +0.0002509283820, +0.0005018567639, +0.0004615384615, +0.0003318302387, + +0.0001941644562, -0.0001862068966, -0.0005586206897, -0.0003724137931, + +0.0000809018568, +0.0002265251989, +0.0003238726790, +0.0004047745358, + +0.0003641909814, +0.0001376657825, -0.0002994694960, -0.0004533156499, + +0.0000647214854, +0.0004127320955, +0.0000891246684, -0.0005503978780, + -0.0009551724138, -0.0005018567639, +0.0003641909814, +0.0004938992042, + +0.0000891246684, -0.0000244031830, +0.0002103448276, +0.0002185676393, + -0.0003156498674, -0.0005503978780, -0.0000161803714, +0.0003803713528, + +0.0002347480106, -0.0001214854111, -0.0002591511936, -0.0002185676393, + -0.0003480106101, -0.0004127320955, -0.0002671087533, -0.0002103448276, + -0.0002832891247, +0.0000244031830, +0.0006636604775, +0.0008580901857, + +0.0003562334218, +0.0000405835544, +0.0002753315650, +0.0002753315650, + -0.0003076923077, -0.0005989389920, -0.0003965517241, +0.0001376657825, + +0.0008257294430, +0.0008498673740, +0.0002509283820, -0.0002023872679, + -0.0004047745358, -0.0005503978780, -0.0005503978780, -0.0001053050398, + +0.0003480106101, +0.0003076923077, +0.0000082228117, -0.0000567639257, + +0.0003076923077, +0.0003803713528, -0.0003480106101, -0.0006233421751, + +0.0001294429708, +0.0006071618037, +0.0001700265252, -0.0002591511936, + +0.0001214854111, +0.0008336870027, +0.0007610079576, +0.0000000000000, + -0.0004533156499, -0.0004209549072, -0.0003724137931, -0.0003562334218, + -0.0002103448276, -0.0000809018568, +0.0000647214854, +0.0002671087533, + +0.0002671087533, +0.0000485411141, +0.0000323607427, -0.0000647214854, + -0.0005586206897, -0.0007124668435, -0.0000647214854, +0.0005665782493, + +0.0007124668435, +0.0006880636605, +0.0004450928382, -0.0001376657825, + -0.0003480106101, -0.0002103448276, -0.0003400530504, -0.0006151193634, + -0.0003803713528, +0.0002832891247, +0.0005665782493, +0.0004289124668, + +0.0003965517241, +0.0004209549072, +0.0002185676393, +0.0001376657825, + +0.0001862068966, +0.0001053050398, -0.0001053050398, -0.0002185676393, + -0.0003076923077, -0.0005424403183, -0.0008095490716, -0.0005586206897, + +0.0002265251989, +0.0007933687003, +0.0005342175066, -0.0001941644562, + -0.0005424403183, -0.0002429708223, +0.0000082228117, +0.0001376657825, + +0.0003965517241, +0.0004450928382, -0.0001538461538, -0.0004938992042, + +0.0000647214854, +0.0005018567639, -0.0001053050398, -0.0007851458886, + -0.0005262599469, +0.0000729442971, +0.0002671087533, +0.0001538461538, + +0.0000082228117, +0.0004047745358, +0.0008660477454, +0.0002429708223, + -0.0005909814324, -0.0005586206897, -0.0000244031830, +0.0002915119363, + +0.0000567639257, -0.0003400530504, -0.0002832891247, +0.0001053050398, + +0.0004371352785, +0.0003400530504, -0.0000891246684, -0.0003724137931, + -0.0001941644562, +0.0002023872679, +0.0003724137931, +0.0002671087533, + +0.0003562334218, +0.0001618037135, -0.0003562334218, -0.0002185676393, + +0.0004533156499, +0.0003562334218, -0.0004856763926, -0.0011493368700, + -0.0007527851459, +0.0004209549072, +0.0010846153846, +0.0005342175066, + -0.0002347480106, -0.0000891246684, +0.0005748010610, +0.0005665782493, + -0.0001376657825, -0.0003724137931, +0.0002103448276, +0.0004694960212, + -0.0000809018568, -0.0005018567639, -0.0003885941645, -0.0001294429708, + +0.0001456233422, +0.0000891246684, -0.0004289124668, -0.0008984084881, + -0.0006880636605, +0.0003480106101, +0.0012790450928, +0.0013679045093, + +0.0006798408488, -0.0001214854111, -0.0003562334218, -0.0002994694960, + -0.0006798408488, -0.0011169761273, -0.0010684350133, -0.0001214854111, + +0.0010604774536, +0.0013923076923, +0.0008822281167, -0.0000244031830, + -0.0007933687003, -0.0005989389920, +0.0000323607427, +0.0001779840849, + -0.0001132625995, -0.0001941644562, +0.0002265251989, +0.0005989389920, + +0.0004209549072, +0.0000244031830, -0.0003156498674, -0.0002994694960, + -0.0002185676393, -0.0004371352785, -0.0005100795756, -0.0001862068966, + +0.0001941644562, +0.0002994694960, +0.0002103448276, +0.0003238726790, + +0.0004777188329, +0.0005586206897, +0.0006474801061, +0.0003076923077, + -0.0000891246684, -0.0003641909814, -0.0004938992042, -0.0004694960212, + -0.0003641909814, -0.0001618037135, -0.0001941644562, -0.0004777188329, + -0.0001862068966, +0.0002347480106, +0.0003238726790, +0.0003076923077, + +0.0002265251989, +0.0002023872679, +0.0002832891247, +0.0002023872679, + -0.0000082228117, -0.0002671087533, -0.0003400530504, -0.0003562334218, + -0.0004938992042, -0.0006474801061, -0.0005748010610, -0.0002671087533, + +0.0000809018568, +0.0003238726790, +0.0004127320955, +0.0005180371353, + +0.0006798408488, +0.0004694960212, -0.0000405835544, -0.0002429708223, + -0.0000891246684, +0.0001700265252, -0.0001132625995, -0.0008498673740, + -0.0008904509284, -0.0001700265252, +0.0003400530504, +0.0003562334218, + +0.0000970822281, +0.0000323607427, +0.0001294429708, +0.0001214854111, + -0.0001294429708, -0.0001294429708, +0.0003885941645, +0.0005909814324, + +0.0001376657825, -0.0000161803714, +0.0000891246684, -0.0000405835544, + -0.0003156498674, -0.0006962864721, -0.0010846153846, -0.0009145888594, + -0.0001538461538, +0.0005827586207, +0.0006962864721, +0.0002591511936, + +0.0000000000000, +0.0001862068966, +0.0004533156499, +0.0003076923077, + -0.0001779840849, -0.0004856763926, -0.0003480106101, +0.0001294429708, + +0.0004615384615, +0.0002429708223, +0.0000485411141, -0.0000323607427, + -0.0004450928382, -0.0008822281167, -0.0007286472149, -0.0000405835544, + +0.0005989389920, +0.0005989389920, -0.0000082228117, -0.0003641909814, + +0.0000809018568, +0.0003400530504, -0.0000729442971, -0.0004615384615, + -0.0003562334218, +0.0001862068966, +0.0007689655172, +0.0008013262599, + +0.0003076923077, -0.0003480106101, -0.0009713527851, -0.0013031830239, + -0.0009551724138, -0.0001214854111, +0.0003238726790, +0.0005827586207, + +0.0009795755968, +0.0010198938992, +0.0007042440318, +0.0004533156499, + +0.0002509283820, -0.0001214854111, -0.0005827586207, -0.0005424403183, + -0.0002103448276, -0.0002103448276, -0.0003803713528, -0.0004371352785, + -0.0002832891247, +0.0000082228117, +0.0002994694960, +0.0007042440318, + +0.0007366047745, +0.0002265251989, -0.0000647214854, +0.0001132625995, + +0.0001053050398, -0.0004371352785, -0.0008498673740, -0.0005342175066, + +0.0000323607427, +0.0001294429708, -0.0001132625995, -0.0000405835544, + +0.0002429708223, +0.0001618037135, -0.0000485411141, +0.0000000000000, + +0.0002103448276, +0.0002429708223, -0.0001618037135, -0.0006798408488, + -0.0005100795756, +0.0001941644562, +0.0008095490716, +0.0008336870027, + +0.0001700265252, -0.0005424403183, -0.0004694960212, +0.0000323607427, + +0.0000809018568, -0.0003641909814, -0.0007851458886, -0.0005909814324, + +0.0004209549072, +0.0012061007958, +0.0008742705570, +0.0001618037135, + -0.0000244031830, +0.0002265251989, +0.0003076923077, -0.0001376657825, + -0.0005424403183, -0.0005100795756, -0.0002023872679, +0.0000000000000, + +0.0000729442971, +0.0002671087533, +0.0006233421751, +0.0007366047745, + +0.0002591511936, -0.0002753315650, -0.0002753315650, -0.0001294429708, + -0.0002347480106, -0.0003400530504, -0.0002591511936, -0.0000891246684, + -0.0000809018568, +0.0001376657825, +0.0004777188329, +0.0003400530504, + +0.0000000000000, +0.0000000000000, +0.0001538461538, +0.0001456233422, + -0.0002103448276, -0.0003480106101, -0.0001294429708, -0.0001376657825, + -0.0004289124668, -0.0005989389920, -0.0003480106101, +0.0000647214854, + +0.0003238726790, +0.0004047745358, +0.0002429708223, +0.0000891246684, + +0.0001214854111, +0.0002915119363, +0.0003641909814, +0.0000082228117, + -0.0002103448276, +0.0001132625995, +0.0001132625995, -0.0002429708223, + -0.0002915119363, -0.0002832891247, -0.0003641909814, -0.0002347480106, + +0.0001456233422, +0.0004777188329, +0.0004127320955, +0.0000809018568, + +0.0002023872679, +0.0005586206897, +0.0002429708223, -0.0004615384615, + -0.0005262599469, -0.0001862068966, +0.0000000000000, +0.0000161803714, + +0.0000000000000, +0.0001214854111, +0.0006474801061, +0.0007851458886, + +0.0001214854111, -0.0004856763926, -0.0004127320955, -0.0001538461538, + -0.0001862068966, -0.0002509283820, +0.0000405835544, +0.0005100795756, + +0.0007366047745, +0.0005503978780, +0.0003156498674, +0.0003076923077, + -0.0001618037135, -0.0010766578249, -0.0013517241379, -0.0006395225464, + +0.0001941644562, +0.0003562334218, +0.0001053050398, +0.0001700265252, + +0.0002429708223, +0.0002832891247, +0.0004371352785, +0.0004371352785, + -0.0000729442971, -0.0006636604775, -0.0004856763926, +0.0001456233422, + +0.0001053050398, -0.0001779840849, +0.0000323607427, +0.0004047745358, + +0.0001700265252, -0.0005586206897, -0.0006395225464, +0.0000809018568, + +0.0002832891247, -0.0001538461538, -0.0001376657825, +0.0004047745358, + +0.0005827586207, +0.0001779840849, -0.0002265251989, -0.0003400530504, + -0.0003885941645, -0.0005018567639, -0.0004615384615, -0.0001618037135, + +0.0000244031830, +0.0001941644562, +0.0005748010610, +0.0005748010610, + +0.0000891246684, -0.0003480106101, -0.0002915119363, +0.0000970822281, + +0.0002103448276, -0.0000891246684, -0.0003641909814, -0.0005018567639, + -0.0003318302387, +0.0001456233422, +0.0004694960212, +0.0002265251989, + -0.0000809018568, +0.0000323607427, +0.0003238726790, +0.0003076923077, + +0.0000485411141, -0.0001214854111, -0.0000970822281, -0.0003238726790, + -0.0004289124668, +0.0000647214854, +0.0005180371353, +0.0002753315650, + -0.0002429708223, -0.0003562334218, -0.0001779840849, -0.0002671087533, + -0.0003885941645, -0.0000161803714, +0.0006071618037, +0.0009066312997, + +0.0006071618037, +0.0001294429708, -0.0003238726790, -0.0004371352785, + -0.0002023872679, -0.0001376657825, -0.0003400530504, -0.0002509283820, + +0.0000323607427, +0.0002509283820, +0.0005100795756, +0.0007124668435, + +0.0005100795756, +0.0001618037135, -0.0000809018568, -0.0003724137931, + -0.0006474801061, -0.0004047745358, +0.0002753315650, +0.0005503978780, + +0.0001132625995, -0.0002591511936, -0.0002671087533, -0.0001456233422, + -0.0001862068966, -0.0003965517241, -0.0005342175066, -0.0004371352785, + -0.0000082228117, +0.0004533156499, +0.0006233421751, +0.0004127320955, + +0.0000244031830, -0.0003480106101, -0.0005424403183, -0.0004450928382, + -0.0004047745358, -0.0006151193634, -0.0003400530504, +0.0003885941645, + +0.0007933687003, +0.0007933687003, +0.0005909814324, +0.0001941644562, + +0.0000161803714, +0.0001294429708, +0.0000729442971, -0.0004209549072, + -0.0008904509284, -0.0005909814324, +0.0002832891247, +0.0007366047745, + +0.0003318302387, -0.0003885941645, -0.0005989389920, -0.0003318302387, + -0.0001376657825, +0.0000729442971, +0.0004127320955, +0.0007204244032, + +0.0007851458886, +0.0002591511936, -0.0003641909814, -0.0000567639257, + +0.0005665782493, +0.0006071618037, +0.0003318302387, +0.0000485411141, + -0.0004047745358, -0.0006557029178, -0.0006798408488, -0.0002832891247, + +0.0005909814324, +0.0011007957560, +0.0007851458886, +0.0003400530504, + +0.0001132625995, -0.0001618037135, -0.0006071618037, -0.0007851458886, + -0.0003803713528, +0.0001862068966, +0.0003318302387, +0.0000729442971, + -0.0003318302387, -0.0006557029178, -0.0004533156499, +0.0004694960212, + +0.0014084880637, +0.0014490716180, +0.0006880636605, +0.0000244031830, + -0.0001700265252, -0.0005424403183, -0.0010604774536, -0.0010037135279, + -0.0002832891247, +0.0001538461538, +0.0000970822281, +0.0001618037135, + +0.0003965517241, +0.0002591511936, -0.0000244031830, -0.0003076923077, + -0.0006395225464, -0.0007286472149, -0.0004289124668, +0.0001862068966, + +0.0009145888594, +0.0009795755968, +0.0004533156499, +0.0001941644562, + +0.0002023872679, -0.0001214854111, -0.0006557029178, -0.0008498673740, + -0.0004777188329, -0.0001294429708, -0.0001214854111, -0.0000891246684, + +0.0000970822281, +0.0003885941645, +0.0004289124668, +0.0002023872679, + +0.0000161803714, -0.0001779840849, -0.0004047745358, -0.0002103448276, + +0.0001538461538, +0.0002753315650, +0.0002023872679, +0.0003156498674, + +0.0005989389920, +0.0006071618037, +0.0001053050398, -0.0002994694960, + -0.0002509283820, -0.0001214854111, -0.0003480106101, -0.0007204244032, + -0.0007286472149, -0.0001053050398, +0.0004371352785, +0.0003562334218, + +0.0000970822281, +0.0001053050398, +0.0003400530504, +0.0003724137931, + -0.0000809018568, -0.0004694960212, -0.0003238726790, -0.0002023872679, + -0.0002023872679, +0.0001538461538, +0.0004127320955, +0.0000000000000, + -0.0004371352785, -0.0002753315650, +0.0002023872679, +0.0004209549072, + +0.0002023872679, -0.0001779840849, -0.0001941644562, +0.0001214854111, + +0.0003885941645, +0.0003803713528, +0.0002753315650, +0.0003156498674, + +0.0002753315650, -0.0002509283820, -0.0006151193634, -0.0003724137931, + +0.0000323607427, +0.0001941644562, +0.0000891246684, -0.0000323607427, + -0.0000567639257, -0.0000485411141, +0.0001132625995, +0.0003238726790, + +0.0003724137931, +0.0003562334218, +0.0001132625995, -0.0002103448276, + -0.0001862068966, +0.0000729442971, -0.0001132625995, -0.0006395225464, + -0.0006962864721, -0.0002509283820, +0.0000970822281, +0.0002429708223, + +0.0003318302387, +0.0004047745358, +0.0002347480106, +0.0000647214854, + -0.0000082228117, -0.0002994694960, -0.0004533156499, -0.0000970822281, + +0.0002509283820, +0.0002429708223, -0.0000970822281, -0.0003803713528, + -0.0002429708223, -0.0000323607427, -0.0001618037135, -0.0002591511936, + +0.0001294429708, +0.0005748010610, +0.0004856763926, +0.0001618037135, + -0.0001053050398, -0.0003318302387, -0.0003238726790, -0.0001941644562, + -0.0001132625995, +0.0000000000000, +0.0001053050398, +0.0000485411141, + -0.0000244031830, +0.0000891246684, +0.0003076923077, +0.0001941644562, + -0.0001941644562, -0.0004856763926, -0.0003238726790, +0.0000647214854, + +0.0002347480106, +0.0000891246684, -0.0001294429708, -0.0002023872679, + +0.0000405835544, +0.0003965517241, +0.0006798408488, +0.0006233421751, + +0.0000647214854, -0.0003885941645, -0.0003156498674, -0.0001618037135, + -0.0003076923077, -0.0004694960212, -0.0003238726790, +0.0000082228117, + +0.0003480106101, +0.0007042440318, +0.0007124668435, +0.0001941644562, + -0.0003724137931, -0.0004450928382, -0.0001053050398, +0.0001294429708, + -0.0002023872679, -0.0007527851459, -0.0006557029178, +0.0001700265252, + +0.0008336870027, +0.0006718832891, +0.0000244031830, -0.0002915119363, + -0.0000647214854, +0.0002915119363, +0.0001779840849, -0.0003238726790, + -0.0004371352785, -0.0000567639257, +0.0000809018568, -0.0002103448276, + -0.0004856763926, -0.0003562334218, -0.0000809018568, -0.0001294429708, + -0.0002023872679, +0.0000567639257, +0.0003641909814, +0.0003803713528, + +0.0003238726790, +0.0002429708223, -0.0000485411141, -0.0004047745358, + -0.0003238726790, -0.0000485411141, +0.0000729442971, -0.0000082228117, + -0.0002103448276, -0.0002671087533, -0.0000970822281, +0.0000323607427, + +0.0001132625995, +0.0002185676393, +0.0003400530504, +0.0003318302387, + +0.0003562334218, +0.0003562334218, -0.0000729442971, -0.0007042440318, + -0.0007851458886, -0.0001538461538, +0.0004450928382, +0.0003238726790, + -0.0000405835544, +0.0001538461538, +0.0005586206897, +0.0004209549072, + -0.0001700265252, -0.0005748010610, -0.0005262599469, -0.0003562334218, + -0.0001862068966, +0.0002429708223, +0.0007366047745, +0.0007610079576, + +0.0001618037135, -0.0003238726790, -0.0002753315650, -0.0000323607427, + +0.0000082228117, +0.0000405835544, +0.0000244031830, -0.0001294429708, + -0.0001538461538, +0.0001132625995, +0.0001053050398, -0.0003156498674, + -0.0004615384615, -0.0000647214854, +0.0002671087533, +0.0000970822281, + -0.0001132625995, +0.0000809018568, +0.0003562334218, +0.0004047745358, + +0.0003562334218, +0.0002347480106, +0.0000485411141, -0.0002671087533, + -0.0004615384615, -0.0004047745358, -0.0003641909814, -0.0003724137931, + -0.0000647214854, +0.0003318302387, +0.0004615384615, +0.0003480106101, + +0.0004371352785, +0.0005989389920, +0.0004615384615, -0.0000647214854, + -0.0006395225464, -0.0007204244032, -0.0004209549072, -0.0001941644562, + +0.0000405835544, +0.0002429708223, +0.0003076923077, +0.0003965517241, + +0.0003480106101, +0.0000729442971, -0.0001456233422, -0.0000891246684, + +0.0001376657825, +0.0004371352785, +0.0005180371353, +0.0001618037135, + -0.0002023872679, -0.0001779840849, -0.0002347480106, -0.0004289124668, + -0.0004047745358, -0.0001941644562, -0.0000244031830, +0.0003156498674, + +0.0007689655172, +0.0008257294430, +0.0003803713528, +0.0000729442971, + +0.0000405835544, +0.0000485411141, -0.0000970822281, -0.0003724137931, + -0.0004777188329, -0.0002591511936, +0.0000485411141, +0.0002265251989, + +0.0001538461538, -0.0000891246684, -0.0002347480106, -0.0000567639257, + +0.0002753315650, +0.0003641909814, +0.0003156498674, +0.0003724137931, + +0.0003885941645, -0.0000082228117, -0.0005180371353, -0.0004938992042, + -0.0000323607427, -0.0000405835544, -0.0004938992042, -0.0004856763926, + +0.0001294429708, +0.0005586206897, +0.0005827586207, +0.0004615384615, + +0.0001941644562, -0.0002023872679, -0.0003724137931, -0.0000970822281, + +0.0003885941645, +0.0005342175066, +0.0000729442971, -0.0005748010610, + -0.0007689655172, -0.0003965517241, -0.0000323607427, -0.0001376657825, + -0.0004371352785, -0.0004209549072, -0.0000082228117, +0.0005100795756, + +0.0007042440318, +0.0004127320955, +0.0000161803714, -0.0000567639257, + -0.0002103448276, -0.0005262599469, -0.0005909814324, -0.0003400530504, + -0.0001618037135, +0.0000000000000, +0.0003400530504, +0.0007527851459, + +0.0007689655172, +0.0004615384615, -0.0000244031830, -0.0005665782493, + -0.0007204244032, -0.0003965517241, -0.0000323607427, +0.0000485411141, + +0.0000647214854, +0.0003400530504, +0.0005100795756, +0.0002832891247, + +0.0000485411141, -0.0001941644562, -0.0004777188329, -0.0004371352785, + -0.0000244031830, +0.0003724137931, +0.0005424403183, +0.0003076923077, + -0.0001214854111, -0.0005262599469, -0.0006557029178, -0.0004450928382, + -0.0000567639257, +0.0002023872679, +0.0002509283820, +0.0000647214854, + -0.0001456233422, -0.0001618037135, +0.0000647214854, +0.0002185676393, + +0.0000891246684, -0.0001376657825, -0.0002994694960, -0.0003318302387, + -0.0000405835544, +0.0002347480106, +0.0000405835544, -0.0002429708223, + -0.0001779840849, +0.0000485411141, +0.0001214854111, +0.0000567639257, + -0.0000485411141, -0.0000647214854, +0.0000000000000, +0.0000000000000, + -0.0001294429708, -0.0001618037135, -0.0000647214854, +0.0000970822281, + +0.0002591511936, +0.0002671087533, +0.0000082228117, -0.0000891246684, + -0.0000082228117, -0.0001132625995, -0.0002429708223, -0.0000323607427, + +0.0002185676393, +0.0001132625995, -0.0001214854111, -0.0000809018568, + -0.0000729442971, -0.0002915119363, -0.0001700265252, +0.0003156498674, + +0.0004938992042, +0.0000970822281, -0.0002185676393, -0.0000405835544, + +0.0001700265252, -0.0000567639257, -0.0002509283820, -0.0000970822281, + -0.0000647214854, -0.0004371352785, -0.0005827586207, -0.0001294429708, + +0.0005262599469, +0.0006557029178, +0.0003965517241, +0.0002591511936, + +0.0002509283820, +0.0000000000000, -0.0004127320955, -0.0005262599469, + -0.0002671087533, -0.0001779840849, -0.0001294429708, +0.0002185676393, + +0.0004856763926, +0.0002429708223, -0.0002185676393, -0.0003238726790, + -0.0000647214854, +0.0000970822281, -0.0000647214854, -0.0002185676393, + +0.0000244031830, +0.0005665782493, +0.0006880636605, +0.0002591511936, + -0.0001941644562, -0.0002185676393, +0.0000000000000, +0.0000567639257, + +0.0000000000000, +0.0000729442971, +0.0001294429708, +0.0001376657825, + +0.0002103448276, +0.0002265251989, -0.0000161803714, -0.0004127320955, + -0.0006233421751, -0.0003885941645, +0.0000161803714, +0.0001941644562, + +0.0002671087533, +0.0004289124668, +0.0004450928382, +0.0002591511936, + -0.0000161803714, -0.0002509283820, -0.0002265251989, -0.0001538461538, + -0.0001132625995, -0.0000161803714, +0.0000244031830, -0.0000485411141, + -0.0000405835544, +0.0001214854111, +0.0002753315650, +0.0000729442971, + -0.0002103448276, -0.0001618037135, +0.0001456233422, +0.0002103448276, + +0.0000082228117, -0.0000970822281, +0.0000970822281, +0.0002429708223, + +0.0000970822281, -0.0000809018568, +0.0000000000000, +0.0000567639257, + -0.0000647214854, -0.0001538461538, +0.0000000000000, +0.0002591511936, + +0.0003724137931, +0.0003318302387, +0.0001779840849, +0.0000000000000, + -0.0001376657825, -0.0001376657825, -0.0000405835544, +0.0000000000000, + -0.0002265251989, -0.0004694960212, -0.0003400530504, +0.0000567639257, + +0.0002509283820, +0.0001456233422, +0.0000323607427, +0.0001618037135, + +0.0002185676393, +0.0000809018568, -0.0000244031830, +0.0000161803714, + +0.0000161803714, -0.0000485411141, -0.0000647214854, -0.0000647214854, + -0.0001456233422, -0.0001132625995, +0.0000161803714, +0.0000000000000, + -0.0000485411141, +0.0000082228117, +0.0001618037135, +0.0001862068966, + +0.0000161803714, -0.0002753315650, -0.0003803713528, -0.0001376657825, + +0.0002023872679, +0.0001700265252, -0.0001214854111, -0.0002185676393, + -0.0000729442971, +0.0000405835544, +0.0001376657825, +0.0001132625995, + +0.0000323607427, +0.0000729442971, +0.0000809018568, -0.0000891246684, + -0.0002591511936, -0.0002023872679, +0.0000405835544, +0.0002185676393, + +0.0001214854111, +0.0000000000000, +0.0000567639257, +0.0000970822281, + +0.0000161803714, +0.0000244031830, +0.0000970822281, +0.0001456233422, + +0.0000323607427, -0.0001779840849, -0.0002994694960, -0.0000891246684, + +0.0000000000000, -0.0002591511936, -0.0003562334218, +0.0000485411141, + +0.0003885941645, +0.0002915119363, +0.0000647214854, +0.0002103448276, + +0.0006395225464, +0.0007124668435, +0.0000970822281, -0.0005342175066, + -0.0004938992042, -0.0000891246684, -0.0001132625995, -0.0004371352785, + -0.0002591511936, +0.0002994694960, +0.0004777188329, +0.0002185676393, + +0.0000244031830, -0.0000485411141, -0.0000405835544, +0.0000323607427, + +0.0001700265252, +0.0001700265252, +0.0000405835544, -0.0001700265252, + -0.0004127320955, -0.0005100795756, -0.0002671087533, -0.0000082228117, + +0.0000485411141, +0.0000323607427, +0.0000891246684, +0.0001214854111, + +0.0001214854111, +0.0001456233422, +0.0001538461538, +0.0000567639257, + -0.0000891246684, -0.0002429708223, -0.0003076923077, -0.0001376657825, + +0.0001214854111, +0.0002103448276, +0.0000891246684, +0.0000323607427, + -0.0000082228117, -0.0000161803714, +0.0000567639257, +0.0000405835544, + +0.0000000000000, +0.0000891246684, +0.0000405835544, -0.0001132625995, + -0.0001456233422, +0.0000000000000, +0.0000647214854, -0.0001456233422, + -0.0004533156499, -0.0004209549072, +0.0000323607427, +0.0005586206897, + +0.0006880636605, +0.0003965517241, +0.0000405835544, -0.0001618037135, + -0.0001700265252, -0.0000970822281, -0.0000809018568, -0.0000891246684, + -0.0000809018568, -0.0001294429708, -0.0001538461538, -0.0001053050398, + +0.0001214854111, +0.0003965517241, +0.0004856763926, +0.0004047745358, + +0.0002185676393, -0.0001538461538, -0.0003965517241, -0.0002915119363, + -0.0000161803714, +0.0000567639257, -0.0000485411141, -0.0000161803714, + +0.0001862068966, +0.0001779840849, -0.0000891246684, -0.0001779840849, + +0.0000244031830, +0.0001941644562, +0.0001294429708, +0.0000161803714, + -0.0000244031830, +0.0000647214854, +0.0002429708223, +0.0002591511936, + -0.0000567639257, -0.0002265251989, -0.0000485411141, +0.0001132625995, + -0.0000244031830, -0.0002429708223, -0.0002429708223, -0.0000161803714, + +0.0000809018568, -0.0000244031830, -0.0002509283820, -0.0003238726790, + -0.0001700265252, -0.0000244031830, -0.0000405835544, +0.0000405835544, + +0.0002509283820, +0.0002753315650, +0.0000323607427, -0.0000485411141, + +0.0001294429708, +0.0001538461538, +0.0000082228117, -0.0001294429708, + -0.0002103448276, -0.0002103448276, -0.0001700265252, -0.0001456233422, + -0.0000244031830, -0.0000082228117, +0.0000000000000, +0.0001376657825, + +0.0002347480106, +0.0000809018568, +0.0000161803714, +0.0000729442971, + +0.0000323607427, -0.0000405835544, +0.0000244031830, +0.0000000000000, + -0.0001376657825, -0.0000891246684, +0.0000729442971, +0.0000000000000, + -0.0002832891247, -0.0002753315650, +0.0000567639257, +0.0002915119363, + +0.0001862068966, +0.0000244031830, -0.0000323607427, -0.0000405835544, + -0.0000485411141, +0.0000000000000, +0.0000000000000, +0.0000244031830, + +0.0001376657825, +0.0002994694960, +0.0003318302387, +0.0002509283820, + +0.0000405835544, -0.0002185676393, -0.0002994694960, -0.0000082228117, + +0.0002023872679, +0.0001053050398, -0.0001053050398, -0.0001700265252, + -0.0000485411141, +0.0000567639257, -0.0000323607427, -0.0002347480106, + -0.0001862068966, +0.0001456233422, +0.0004209549072, +0.0002671087533, + -0.0000323607427, -0.0001132625995, +0.0000323607427, +0.0000405835544, + -0.0001053050398, -0.0002023872679, -0.0001294429708, -0.0000809018568, + -0.0000323607427, +0.0000323607427, +0.0000891246684, +0.0000729442971, + +0.0001214854111, +0.0002103448276, +0.0002671087533, +0.0001618037135, + -0.0000244031830, -0.0002509283820, -0.0003965517241, -0.0003480106101, + -0.0000891246684, +0.0001862068966, +0.0003400530504, +0.0003885941645, + +0.0003562334218, +0.0001700265252, -0.0001538461538, -0.0003400530504, + -0.0002994694960, -0.0001538461538, -0.0000161803714, +0.0001700265252, + +0.0002994694960, +0.0002994694960, +0.0000405835544, -0.0002671087533, + -0.0003156498674, -0.0000567639257, +0.0001700265252, +0.0002103448276, + +0.0000647214854, -0.0000485411141, -0.0000891246684, -0.0000082228117, + +0.0001294429708, +0.0001941644562, +0.0002265251989, +0.0002994694960, + +0.0002023872679, -0.0000082228117, -0.0001132625995, -0.0001132625995, + -0.0000729442971, -0.0000970822281, -0.0000405835544, +0.0000891246684, + +0.0001053050398, -0.0000485411141, -0.0001294429708, -0.0000405835544, + +0.0000729442971, +0.0000809018568, +0.0001538461538, +0.0001456233422, + +0.0000082228117, -0.0000082228117, +0.0001294429708, +0.0000647214854, + -0.0001700265252, -0.0001456233422, +0.0001700265252, +0.0002429708223, + -0.0000729442971, -0.0003238726790, -0.0002023872679, +0.0000082228117, + +0.0000000000000, -0.0001376657825, -0.0002265251989, -0.0001862068966, + -0.0000244031830, +0.0002185676393, +0.0002915119363, +0.0001053050398, + -0.0000970822281, -0.0000405835544, +0.0001618037135, +0.0001538461538, + -0.0001376657825, -0.0002832891247, -0.0000405835544, +0.0002429708223, + +0.0001700265252, -0.0001376657825, -0.0003156498674, -0.0002429708223, + -0.0001132625995, -0.0000405835544, -0.0000323607427, +0.0000567639257, + +0.0002347480106, +0.0001618037135, -0.0001941644562, -0.0005665782493, + -0.0004856763926, +0.0000082228117, +0.0003724137931, +0.0002915119363, + +0.0001294429708, +0.0001053050398, +0.0001214854111, +0.0000485411141, + +0.0000000000000, -0.0000729442971, -0.0002265251989, -0.0002753315650, + -0.0000323607427, +0.0002265251989, +0.0002915119363, +0.0001862068966, + +0.0000647214854, +0.0000485411141, +0.0000485411141, -0.0000161803714, + -0.0001132625995, -0.0001700265252, -0.0001779840849, -0.0000405835544, + +0.0001538461538, +0.0001941644562, +0.0001294429708, +0.0001941644562, + +0.0001618037135, -0.0000970822281, -0.0002753315650, -0.0001779840849, + -0.0000405835544, +0.0000405835544, -0.0000082228117, -0.0000405835544, + +0.0000891246684, +0.0002429708223, +0.0002265251989, +0.0001456233422, + -0.0000323607427, -0.0002832891247, -0.0002832891247, +0.0000000000000, + +0.0003156498674, +0.0003238726790, +0.0000082228117, -0.0002509283820, + -0.0002753315650, -0.0002753315650, -0.0002591511936, -0.0002023872679, + -0.0000323607427, +0.0002023872679, +0.0004289124668, +0.0003400530504, + -0.0000161803714, -0.0001941644562, +0.0000000000000, +0.0000809018568, + -0.0000729442971, -0.0002509283820, -0.0002347480106, -0.0001294429708, + -0.0000082228117, +0.0000000000000, +0.0000000000000, +0.0000000000000, + +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, + +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, + +0.0000000000000, +0.0000082228117, +0.0000082228117, +0.0000082228117, + +0.0000000000000, +0.0000000000000, -0.0000244031830, -0.0000323607427, + -0.0000082228117, +0.0000161803714, +0.0000244031830, +0.0000082228117, + +0.0000244031830, +0.0000485411141, +0.0000244031830, -0.0000161803714, + -0.0000405835544, +0.0000000000000, +0.0000323607427, +0.0000244031830, + -0.0000082228117, -0.0000244031830, +0.0000000000000, +0.0000082228117, + +0.0000244031830, +0.0000000000000, +0.0000000000000, +0.0000161803714, + +0.0000405835544, +0.0000000000000, -0.0000729442971, -0.0000323607427, + +0.0000970822281, +0.0001862068966, +0.0001132625995, +0.0000000000000, + -0.0000405835544, -0.0000323607427, +0.0000000000000, +0.0000082228117, + -0.0000323607427, -0.0000809018568, -0.0000405835544, +0.0000082228117, + +0.0000405835544, +0.0000405835544, +0.0000323607427, +0.0000082228117, + -0.0000082228117, -0.0000244031830, -0.0000082228117, +0.0000161803714, + +0.0000485411141, +0.0000567639257, +0.0000323607427, +0.0000000000000, + +0.0000082228117, +0.0000485411141, +0.0000244031830, -0.0000082228117, + +0.0000000000000, -0.0000161803714, -0.0001294429708, -0.0001294429708, + +0.0000000000000, +0.0000970822281, +0.0000729442971, +0.0000000000000, + -0.0000485411141, -0.0000567639257, -0.0000729442971, -0.0001294429708, + -0.0000970822281, +0.0000082228117, +0.0001294429708, +0.0001618037135, + +0.0000891246684, -0.0000567639257, -0.0001456233422, -0.0001132625995, + -0.0000323607427, -0.0000161803714, -0.0000244031830, +0.0000000000000, + +0.0000970822281, +0.0001941644562, +0.0001376657825, -0.0000082228117, + -0.0001214854111, -0.0001538461538, -0.0000970822281, +0.0000244031830, + +0.0000729442971, +0.0000244031830, +0.0000000000000, +0.0000729442971, + +0.0001294429708, +0.0000082228117, -0.0001456233422, -0.0001214854111, + +0.0000161803714, +0.0001132625995, +0.0000000000000, -0.0001294429708, + -0.0000891246684, +0.0000485411141, +0.0001456233422, +0.0001941644562, + +0.0001779840849, +0.0000729442971, -0.0000405835544, -0.0000567639257, + -0.0000161803714, -0.0000405835544, -0.0000809018568, +0.0000000000000, + +0.0001456233422, +0.0000970822281, -0.0000647214854, -0.0001053050398, + +0.0000485411141, +0.0001862068966, +0.0001376657825, -0.0000244031830, + -0.0001214854111, -0.0001538461538, -0.0001376657825, -0.0001053050398, + -0.0000082228117, +0.0000485411141, +0.0001376657825, +0.0002347480106, + +0.0001779840849, -0.0000323607427, -0.0001214854111, -0.0000970822281, + -0.0001700265252, -0.0001779840849, +0.0000000000000, +0.0001538461538, + +0.0002185676393, +0.0002185676393, +0.0001294429708, -0.0000244031830, + -0.0002509283820, -0.0004371352785, -0.0003803713528, -0.0001053050398, + +0.0000809018568, +0.0001862068966, +0.0002023872679, +0.0001941644562, + +0.0001132625995, -0.0000485411141, -0.0001862068966, -0.0001294429708, + +0.0000000000000, +0.0001538461538, +0.0002347480106 +}; diff --git a/plugins/LadspaEffect/swh/impulses/07-fender-68-vibrolux-ui87.h b/plugins/LadspaEffect/swh/impulses/07-fender-68-vibrolux-ui87.h new file mode 100644 index 000000000..db4b417a5 --- /dev/null +++ b/plugins/LadspaEffect/swh/impulses/07-fender-68-vibrolux-ui87.h @@ -0,0 +1,1226 @@ +float fender_68_vibrolux_ui87[] = { + +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, + +0.0000000000000, +0.0000000000000, +0.0000065400844, +0.0000194092827, + +0.0000128691983, +0.0000000000000, -0.0000194092827, +0.0000000000000, + +0.0000128691983, +0.0000000000000, -0.0000128691983, -0.0000065400844, + +0.0000000000000, +0.0000000000000, -0.0000128691983, +0.0000322784810, + +0.0000708860759, +0.0000514767932, +0.0000000000000, -0.0000257383966, + -0.0000065400844, +0.0000065400844, -0.0000065400844, -0.0000322784810, + -0.0000257383966, -0.0000065400844, -0.0000322784810, -0.0000322784810, + +0.0000194092827, +0.0000900843882, +0.0000837552743, +0.0000194092827, + -0.0000257383966, +0.0000000000000, +0.0000128691983, -0.0000065400844, + -0.0000708860759, -0.0000386075949, +0.0000322784810, +0.0000000000000, + -0.0000643459916, +0.0000000000000, +0.0001094936709, +0.0001223628692, + +0.0000000000000, -0.0000322784810, +0.0000194092827, +0.0000000000000, + -0.0001158227848, -0.0001672995781, -0.0000580168776, +0.0000900843882, + +0.0000257383966, -0.0000514767932, +0.0000194092827, +0.0001481012658, + +0.0001223628692, +0.0000451476793, +0.0000451476793, +0.0000837552743, + +0.0000000000000, -0.0002124472574, -0.0002962025316, -0.0001094936709, + +0.0000837552743, +0.0000900843882, -0.0000386075949, -0.0000386075949, + +0.0000966244726, +0.0001029535865, +0.0000257383966, +0.0001223628692, + +0.0001932489451, +0.0000514767932, -0.0002704641350, -0.0004120253165, + -0.0001672995781, +0.0001867088608, +0.0002253164557, +0.0000386075949, + -0.0000322784810, +0.0000580168776, +0.0000837552743, -0.0000322784810, + +0.0000451476793, +0.0002767932489, +0.0001094936709, -0.0004185654008, + -0.0006888185654, -0.0002833333333, +0.0002189873418, +0.0003282700422, + +0.0001029535865, +0.0000643459916, +0.0002124472574, +0.0001415611814, + -0.0000643459916, +0.0001801687764, +0.0004700421941, +0.0001738396624, + -0.0005343881857, -0.0007210970464, -0.0003991561181, +0.0000257383966, + +0.0002381856540, +0.0001094936709, +0.0000708860759, +0.0002061181435, + +0.0000643459916, -0.0000322784810, +0.0000772151899, +0.0004185654008, + +0.0003348101266, -0.0003219409283, -0.0007597046414, -0.0003154008439, + +0.0001738396624, +0.0003025316456, +0.0000643459916, +0.0001801687764, + +0.0003670886076, +0.0001481012658, -0.0002253164557, -0.0002124472574, + +0.0004185654008, +0.0003219409283, -0.0005795358650, -0.0007725738397, + -0.0002896624473, +0.0001158227848, +0.0000708860759, +0.0000000000000, + +0.0004314345992, +0.0007597046414, +0.0004892405063, +0.0001158227848, + -0.0001544303797, +0.0002124472574, +0.0001995780591, -0.0004892405063, + -0.0008434599156, -0.0004120253165, +0.0000451476793, -0.0002767932489, + -0.0005215189873, +0.0001544303797, +0.0009400843882, +0.0009141350211, + +0.0001995780591, -0.0004377637131, +0.0001352320675, +0.0002962025316, + -0.0004506329114, -0.0005729957806, +0.0003605485232, +0.0005086497890, + -0.0004700421941, -0.0009721518987, +0.0002575949367, +0.0014164556962, + +0.0014873417722, +0.0000643459916, -0.0004314345992, -0.0004056962025, + -0.0004506329114, -0.0011717299578, -0.0006630801688, +0.0005278481013, + +0.0012360759494, -0.0012297468354, -0.0018027426160, +0.0000900843882, + +0.0035860759494, +0.0036504219409, +0.0017770042194, -0.0007274261603, + -0.0002704641350, -0.0008177215190, -0.0009978902954, -0.0018478902954, + +0.0014356540084, +0.0023951476793, -0.0014485232068, -0.0087947257384, + -0.0035088607595, +0.0029938818565, +0.0382048523207, -0.0170358649789, + -0.0791267932489, -0.0187677215190, +0.1161018987342, +0.2109575949367, + +0.0768926160338, -0.1636681434599, -0.1423253164557, -0.0362476793249, + -0.1131016877637, -0.1276717299578, +0.0162373417722, +0.1233514767932, + +0.0506244725738, +0.0418103375527, +0.0046871308017, +0.0040818565401, + -0.0304725738397, -0.0581829113924, -0.0086531645570, +0.0347540084388, + -0.0397565400844, -0.0239827004219, +0.0140419831224, -0.0147565400844, + +0.0023500000000, +0.0165978902954, +0.0268476793249, +0.0005601265823, + +0.0065219409283, -0.0127027426160, -0.0094386075949, -0.0036375527426, + +0.0008755274262, +0.0146987341772, +0.0315542194093, +0.0068696202532, + -0.0237573839662, -0.0308265822785, +0.0000708860759, +0.0435808016878, + +0.0116597046414, -0.0014227848101, +0.0102175105485, +0.0030582278481, + +0.0103850210970, +0.0295839662447, +0.0237122362869, +0.0107198312236, + +0.0059232067511, +0.0065542194093, +0.0049639240506, -0.0121105485232, + -0.0175894514768, -0.0126512658228, +0.0062774261603, +0.0028907172996, + -0.0068504219409, +0.0145955696203, +0.0169327004219, -0.0029293248945, + -0.0143510548523, -0.0012554852321, +0.0147694092827, +0.0110223628692, + +0.0034959915612, +0.0069468354430, -0.0007405063291, -0.0051892405063, + +0.0082088607595, +0.0120782700422, +0.0077774261603, -0.0025044303797, + -0.0091037974684, -0.0043265822785, +0.0036183544304, -0.0032641350211, + -0.0069856540084, -0.0007983122363, -0.0050605485232, -0.0077774261603, + -0.0017704641350, +0.0045453586498, +0.0033864978903, +0.0017255274262, + +0.0028972573840, +0.0074362869198, +0.0102820675105, +0.0064833333333, + +0.0083054852321, +0.0126578059072, +0.0042814345992, -0.0046162447257, + -0.0026075949367, +0.0031419831224, +0.0079770042194, +0.0061421940928, + +0.0000065400844, -0.0034831223629, -0.0041398734177, -0.0053630801688, + -0.0066508438819, -0.0029873417722, -0.0009850210970, +0.0007016877637, + +0.0061356540084, +0.0073719409283, +0.0060841772152, +0.0016031645570, + -0.0032449367089, -0.0050476793249, -0.0027105485232, -0.0027877637131, + +0.0014164556962, +0.0061936708861, +0.0087753164557, +0.0023628691983, + -0.0053373417722, -0.0070242616034, -0.0061421940928, -0.0072367088608, + -0.0083504219409, -0.0071335443038, -0.0057430379747, -0.0002575949367, + +0.0027040084388, +0.0021181434599, -0.0009272151899, +0.0005537974684, + +0.0001801687764, +0.0009529535865, +0.0005601265823, -0.0015708860759, + -0.0028135021097, -0.0067537974684, -0.0057301687764, -0.0010816455696, + +0.0020280590717, +0.0009012658228, -0.0007082278481, +0.0006244725738, + -0.0025172995781, -0.0088398734177, -0.0076358649789, -0.0044166666667, + -0.0046677215190, -0.0033158227848, -0.0016094936709, -0.0012489451477, + -0.0001867088608, +0.0020280590717, +0.0022276371308, +0.0016160337553, + -0.0012554852321, -0.0034831223629, -0.0026782700422, +0.0005858649789, + +0.0036054852321, -0.0007854430380, -0.0062065400844, -0.0047514767932, + -0.0028715189873, -0.0028135021097, -0.0045196202532, -0.0019765822785, + +0.0034508438819, +0.0025947257384, -0.0027943037975, -0.0043008438819, + -0.0039660337553, -0.0067343881857, -0.0037407172996, +0.0013907172996, + -0.0009335443038, -0.0010945147679, +0.0026976793249, +0.0003991561181, + -0.0037407172996, -0.0050605485232, -0.0034508438819, -0.0031677215190, + -0.0037470464135, -0.0020409282700, -0.0012554852321, +0.0009850210970, + +0.0008626582278, -0.0014613924051, -0.0040689873418, -0.0055369198312, + -0.0011139240506, +0.0024786919831, -0.0008305907173, -0.0010430379747, + +0.0000900843882, -0.0011073839662, -0.0012426160338, -0.0000451476793, + +0.0016869198312, +0.0000257383966, +0.0003734177215, +0.0018670886076, + +0.0000000000000, -0.0007274261603, +0.0007854430380, +0.0004120253165, + -0.0018864978903, -0.0012877637131, +0.0007016877637, +0.0026719409283, + +0.0042299578059, +0.0026010548523, -0.0001544303797, +0.0007016877637, + +0.0010236286920, +0.0013392405063, +0.0005215189873, +0.0007919831224, + +0.0043137130802, +0.0029293248945, -0.0006567510549, +0.0001223628692, + +0.0004185654008, -0.0010172995781, -0.0001995780591, -0.0007983122363, + -0.0012489451477, +0.0026139240506, +0.0035926160338, +0.0009400843882, + +0.0002061181435, -0.0005086497890, -0.0000772151899, +0.0006116033755, + -0.0010493670886, -0.0010172995781, +0.0009529535865, +0.0015774261603, + -0.0002124472574, -0.0004957805907, +0.0008883966245, +0.0023757383966, + +0.0036246835443, +0.0017512658228, +0.0021118143460, +0.0031097046414, + -0.0013006329114, -0.0032449367089, -0.0011845991561, -0.0003928270042, + +0.0007533755274, +0.0008883966245, +0.0000708860759, +0.0000000000000, + -0.0002061181435, -0.0010107594937, +0.0005407172996, +0.0021632911392, + +0.0031548523207, +0.0039145569620, +0.0008434599156, -0.0010879746835, + +0.0003282700422, +0.0009141350211, +0.0003090717300, +0.0001223628692, + +0.0001158227848, +0.0006696202532, -0.0001415611814, -0.0000386075949, + -0.0003670886076, -0.0005666666667, +0.0009592827004, +0.0007533755274, + +0.0013841772152, +0.0025495780591, +0.0011717299578, +0.0003991561181, + -0.0000257383966, -0.0010172995781, -0.0015902953586, -0.0015130801688, + +0.0019637130802, +0.0021118143460, -0.0004829113924, +0.0009658227848, + +0.0001801687764, -0.0009978902954, -0.0012940928270, -0.0029744725738, + -0.0007082278481, +0.0030067510549, +0.0033930379747, +0.0022791139241, + +0.0000194092827, -0.0016417721519, -0.0011459915612, -0.0005215189873, + -0.0007405063291, -0.0014613924051, -0.0007274261603, +0.0005795358650, + +0.0016740506329, +0.0017061181435, +0.0000322784810, -0.0008305907173, + +0.0015516877637, +0.0017318565401, -0.0003411392405, +0.0009850210970, + +0.0014164556962, +0.0000000000000, +0.0002447257384, -0.0011654008439, + -0.0014356540084, -0.0004443037975, -0.0020086497890, -0.0016546413502, + -0.0003862869198, -0.0006502109705, -0.0005215189873, -0.0004635021097, + +0.0012489451477, +0.0023434599156, -0.0008949367089, -0.0004892405063, + +0.0015966244726, +0.0008563291139, -0.0023305907173, -0.0039466244726, + -0.0010687763713, +0.0013069620253, +0.0004892405063, -0.0006567510549, + +0.0005086497890, +0.0010751054852, +0.0011588607595, -0.0001672995781, + -0.0009400843882, -0.0012489451477, -0.0011073839662, +0.0003799578059, + -0.0008755274262, -0.0024014767932, -0.0005987341772, +0.0006373417722, + -0.0002575949367, +0.0000837552743, +0.0003476793249, +0.0004829113924, + -0.0004314345992, -0.0006438818565, +0.0007274261603, -0.0004957805907, + -0.0023628691983, -0.0027685654008, -0.0023242616034, +0.0006630801688, + +0.0025624472574, +0.0014421940928, +0.0018928270042, +0.0024915611814, + +0.0022662447257, +0.0011331223629, -0.0011267932489, -0.0016932489451, + -0.0007016877637, -0.0012683544304, -0.0006696202532, -0.0000643459916, + -0.0004377637131, +0.0000580168776, -0.0002704641350, -0.0005086497890, + +0.0009206751055, +0.0010816455696, +0.0003670886076, -0.0001415611814, + -0.0005149789030, -0.0003734177215, -0.0009915611814, +0.0005407172996, + +0.0010687763713, -0.0013455696203, -0.0014099156118, +0.0000322784810, + +0.0001995780591, -0.0002575949367, -0.0011010548523, -0.0010044303797, + +0.0007082278481, +0.0008820675105, +0.0000128691983, -0.0000514767932, + +0.0004892405063, +0.0011974683544, +0.0013135021097, +0.0002896624473, + -0.0003991561181, +0.0001223628692, -0.0004635021097, -0.0018090717300, + -0.0020474683544, -0.0019894514768, -0.0006630801688, +0.0015130801688, + +0.0018219409283, +0.0005407172996, -0.0005795358650, -0.0002833333333, + +0.0001867088608, -0.0003476793249, +0.0002962025316, +0.0007016877637, + +0.0000900843882, -0.0006888185654, -0.0018478902954, -0.0013006329114, + +0.0000580168776, +0.0014164556962, +0.0035540084388, +0.0032835443038, + +0.0010751054852, -0.0009012658228, -0.0028586497890, -0.0024658227848, + -0.0007919831224, -0.0002767932489, +0.0005537974684, +0.0010172995781, + +0.0006824894515, -0.0005343881857, -0.0009206751055, +0.0008305907173, + +0.0012940928270, +0.0004443037975, +0.0007082278481, +0.0002575949367, + +0.0000772151899, +0.0002575949367, +0.0000643459916, +0.0008949367089, + +0.0023563291139, +0.0011010548523, -0.0005729957806, +0.0008949367089, + +0.0011073839662, -0.0011396624473, -0.0018219409283, -0.0020023206751, + -0.0023242616034, -0.0004443037975, -0.0001223628692, -0.0000322784810, + +0.0019122362869, +0.0023113924051, +0.0002639240506, -0.0006373417722, + -0.0003734177215, -0.0009012658228, -0.0006888185654, +0.0006888185654, + +0.0011396624473, +0.0002061181435, -0.0000128691983, +0.0005343881857, + +0.0015516877637, +0.0027168776371, +0.0022018987342, -0.0000257383966, + +0.0001158227848, +0.0000580168776, -0.0023886075949, -0.0024466244726, + -0.0006759493671, +0.0001481012658, +0.0000128691983, +0.0003799578059, + +0.0014679324895, +0.0018799578059, +0.0010430379747, +0.0007854430380, + +0.0009658227848, +0.0005795358650, +0.0004763713080, +0.0005795358650, + +0.0010622362869, +0.0021890295359, +0.0012618143460, +0.0003282700422, + +0.0013778481013, +0.0009721518987, -0.0002381856540, +0.0002767932489, + +0.0000580168776, -0.0011010548523, -0.0001672995781, +0.0012489451477, + +0.0007468354430, +0.0000000000000, -0.0003476793249, -0.0000772151899, + +0.0009915611814, +0.0008755274262, +0.0008305907173, +0.0016997890295, + +0.0007082278481, -0.0004571729958, -0.0000128691983, +0.0011073839662, + +0.0017447257384, +0.0004571729958, +0.0002318565401, +0.0007082278481, + -0.0000128691983, +0.0006502109705, +0.0008111814346, -0.0003670886076, + -0.0004056962025, +0.0002962025316, -0.0003025316456, -0.0007662447257, + -0.0005215189873, -0.0007854430380, -0.0006244725738, +0.0004377637131, + +0.0005086497890, +0.0008369198312, +0.0017447257384, +0.0007597046414, + -0.0009915611814, -0.0018993670886, -0.0019829113924, -0.0006824894515, + +0.0005729957806, +0.0010430379747, +0.0008434599156, +0.0012103375527, + +0.0006824894515, -0.0008048523207, -0.0011202531646, -0.0014613924051, + -0.0019251054852, -0.0010622362869, -0.0000514767932, +0.0008691983122, + +0.0021696202532, +0.0014936708861, +0.0006888185654, -0.0002833333333, + -0.0006759493671, -0.0009012658228, -0.0006244725738, +0.0001158227848, + +0.0002575949367, -0.0004506329114, -0.0005021097046, +0.0001995780591, + +0.0003734177215, +0.0000386075949, -0.0011267932489, -0.0016675105485, + -0.0014744725738, -0.0008305907173, -0.0010044303797, -0.0001094936709, + +0.0007082278481, -0.0009786919831, -0.0017447257384, -0.0001801687764, + +0.0000837552743, -0.0012683544304, -0.0016289029536, -0.0009400843882, + +0.0002447257384, +0.0001094936709, -0.0005343881857, -0.0006630801688, + -0.0007725738397, -0.0013327004219, -0.0009206751055, +0.0003540084388, + +0.0004314345992, -0.0004506329114, -0.0007854430380, -0.0011588607595, + -0.0018993670886, -0.0014164556962, -0.0005215189873, +0.0000451476793, + +0.0002639240506, +0.0000837552743, +0.0001352320675, -0.0006116033755, + -0.0021567510549, -0.0021118143460, -0.0010559071730, -0.0000257383966, + +0.0003282700422, +0.0003991561181, +0.0012103375527, +0.0007145569620, + -0.0001286919831, +0.0004443037975, +0.0000643459916, -0.0011073839662, + -0.0019508438819, -0.0021052742616, -0.0014485232068, -0.0002962025316, + +0.0004571729958, -0.0000451476793, -0.0012812236287, -0.0012103375527, + -0.0000194092827, +0.0012618143460, +0.0019056962025, +0.0019185654008, + +0.0021504219409, +0.0014613924051, -0.0002189873418, -0.0011845991561, + -0.0003605485232, +0.0002318565401, +0.0004892405063, +0.0005987341772, + +0.0000451476793, -0.0010816455696, -0.0009272151899, -0.0004314345992, + -0.0003670886076, +0.0000837552743, +0.0010751054852, +0.0009400843882, + +0.0001223628692, +0.0001223628692, +0.0003862869198, +0.0009721518987, + +0.0014808016878, +0.0009141350211, +0.0000643459916, -0.0009206751055, + -0.0013327004219, -0.0007210970464, -0.0006630801688, -0.0003219409283, + +0.0002833333333, +0.0001672995781, +0.0000194092827, -0.0006310126582, + -0.0006567510549, +0.0011974683544, +0.0030902953586, +0.0025238396624, + +0.0006888185654, -0.0005666666667, -0.0011396624473, -0.0014164556962, + -0.0008048523207, -0.0001352320675, +0.0005795358650, +0.0013327004219, + +0.0007145569620, -0.0004314345992, -0.0000900843882, +0.0015388185654, + +0.0017383966245, +0.0007145569620, +0.0003862869198, -0.0001029535865, + -0.0001481012658, +0.0000580168776, -0.0002962025316, +0.0000900843882, + +0.0006567510549, -0.0001415611814, -0.0000580168776, +0.0003348101266, + +0.0001932489451, +0.0006824894515, +0.0010559071730, +0.0004120253165, + +0.0002767932489, +0.0000322784810, -0.0005666666667, -0.0009400843882, + -0.0009335443038, +0.0000837552743, +0.0008626582278, +0.0003411392405, + +0.0001672995781, +0.0011459915612, +0.0017189873418, +0.0012040084388, + +0.0007210970464, -0.0002704641350, -0.0011267932489, -0.0011073839662, + -0.0012297468354, -0.0009915611814, +0.0007597046414, +0.0021310126582, + +0.0015322784810, +0.0007854430380, +0.0002189873418, -0.0003991561181, + -0.0010172995781, -0.0010493670886, -0.0003799578059, +0.0007210970464, + +0.0009335443038, +0.0004635021097, +0.0002253164557, +0.0001801687764, + -0.0002189873418, -0.0003799578059, +0.0003476793249, +0.0007405063291, + +0.0006759493671, +0.0008111814346, +0.0010687763713, +0.0001029535865, + -0.0010493670886, -0.0006630801688, -0.0004314345992, -0.0007145569620, + -0.0000966244726, +0.0004377637131, -0.0003219409283, +0.0000451476793, + +0.0004763713080, -0.0006373417722, -0.0011588607595, -0.0003799578059, + +0.0001672995781, +0.0001286919831, -0.0001481012658, +0.0000772151899, + +0.0005021097046, +0.0000451476793, -0.0002253164557, +0.0001481012658, + +0.0002381856540, +0.0001932489451, +0.0003348101266, -0.0003090717300, + -0.0012812236287, -0.0011845991561, -0.0002704641350, -0.0003605485232, + -0.0003991561181, +0.0000580168776, -0.0003282700422, -0.0007854430380, + -0.0000643459916, +0.0004957805907, -0.0001029535865, -0.0007016877637, + -0.0002447257384, -0.0002318565401, -0.0010430379747, -0.0002704641350, + +0.0011845991561, +0.0016675105485, +0.0013907172996, +0.0005987341772, + +0.0002575949367, +0.0003219409283, -0.0005666666667, -0.0007725738397, + -0.0002575949367, -0.0005924050633, -0.0012232067511, -0.0012554852321, + -0.0010816455696, +0.0001158227848, +0.0012232067511, +0.0009078059072, + -0.0001481012658, -0.0001609704641, +0.0003928270042, +0.0000708860759, + -0.0008305907173, -0.0009786919831, -0.0007533755274, -0.0007854430380, + -0.0003862869198, +0.0000837552743, -0.0003154008439, -0.0005343881857, + +0.0001932489451, +0.0008048523207, +0.0003605485232, -0.0001481012658, + -0.0006502109705, -0.0007533755274, -0.0006953586498, -0.0002447257384, + +0.0001672995781, +0.0003799578059, +0.0005729957806, +0.0004185654008, + -0.0001801687764, +0.0000966244726, +0.0008305907173, +0.0006373417722, + -0.0000322784810, +0.0000837552743, +0.0001867088608, -0.0005149789030, + -0.0007405063291, -0.0004248945148, -0.0006310126582, -0.0000322784810, + +0.0006244725738, +0.0003991561181, +0.0003991561181, +0.0010044303797, + +0.0011073839662, +0.0008111814346, +0.0000900843882, -0.0005407172996, + -0.0008111814346, -0.0005537974684, -0.0004377637131, -0.0003219409283, + +0.0004443037975, +0.0009978902954, +0.0000514767932, -0.0007468354430, + +0.0002510548523, +0.0013392405063, +0.0009978902954, +0.0004957805907, + +0.0000966244726, +0.0001801687764, +0.0002639240506, -0.0000128691983, + +0.0002124472574, +0.0007339662447, +0.0002061181435, -0.0000580168776, + -0.0005858649789, -0.0016160337553, -0.0017383966245, -0.0003219409283, + +0.0005021097046, +0.0002447257384, +0.0000514767932, -0.0003734177215, + -0.0002767932489, +0.0002189873418, +0.0002189873418, -0.0000194092827, + +0.0000386075949, +0.0003605485232, +0.0005666666667, +0.0006438818565, + +0.0006116033755, +0.0005343881857, +0.0004377637131, +0.0006888185654, + +0.0001801687764, -0.0004571729958, -0.0004506329114, -0.0000322784810, + +0.0001094936709, -0.0001158227848, -0.0003540084388, -0.0003219409283, + +0.0000708860759, +0.0000708860759, -0.0004248945148, -0.0002189873418, + +0.0004443037975, -0.0001801687764, -0.0009786919831, -0.0004892405063, + +0.0003862869198, +0.0001223628692, -0.0003219409283, +0.0001738396624, + +0.0005795358650, +0.0004056962025, -0.0000194092827, -0.0004185654008, + -0.0005472573840, -0.0002767932489, -0.0001672995781, -0.0004957805907, + +0.0000065400844, +0.0004056962025, +0.0000128691983, -0.0005858649789, + -0.0010751054852, -0.0012360759494, -0.0001867088608, +0.0005343881857, + +0.0004763713080, +0.0003154008439, -0.0000257383966, -0.0004635021097, + -0.0008434599156, -0.0003540084388, +0.0008111814346, +0.0009078059072, + +0.0001544303797, -0.0004185654008, -0.0000966244726, +0.0001609704641, + -0.0003025316456, -0.0005278481013, -0.0003219409283, -0.0007597046414, + -0.0002447257384, +0.0000900843882, +0.0000386075949, +0.0005021097046, + +0.0006310126582, +0.0001481012658, +0.0001932489451, +0.0004506329114, + +0.0005278481013, +0.0003219409283, +0.0001415611814, -0.0002639240506, + -0.0003090717300, -0.0001029535865, -0.0001672995781, -0.0003282700422, + +0.0001738396624, +0.0000065400844, +0.0003025316456, +0.0006696202532, + +0.0004120253165, +0.0003154008439, +0.0002253164557, -0.0002124472574, + -0.0004829113924, -0.0006244725738, -0.0010687763713, -0.0015580168776, + -0.0006310126582, +0.0008691983122, +0.0018928270042, +0.0014679324895, + +0.0000772151899, -0.0001738396624, +0.0001932489451, -0.0011974683544, + -0.0019637130802, -0.0011525316456, +0.0002381856540, +0.0005924050633, + +0.0003605485232, +0.0002767932489, +0.0007533755274, +0.0011782700422, + +0.0011845991561, +0.0000900843882, -0.0016417721519, -0.0021890295359, + -0.0006759493671, +0.0000580168776, -0.0003411392405, -0.0003476793249, + +0.0002124472574, +0.0008497890295, +0.0007662447257, +0.0006244725738, + +0.0001158227848, -0.0002253164557, +0.0002833333333, -0.0004829113924, + -0.0012618143460, -0.0003862869198, +0.0005086497890, +0.0011459915612, + +0.0011139240506, -0.0003605485232, -0.0007210970464, -0.0003991561181, + -0.0001801687764, +0.0002124472574, +0.0003928270042, -0.0004571729958, + -0.0009850210970, +0.0002189873418, +0.0012103375527, +0.0007725738397, + -0.0000772151899, -0.0004571729958, +0.0004571729958, +0.0008949367089, + -0.0003991561181, -0.0011459915612, -0.0005472573840, -0.0002318565401, + +0.0001672995781, +0.0009978902954, +0.0010879746835, +0.0007919831224, + +0.0006630801688, +0.0003411392405, +0.0002061181435, +0.0005666666667, + -0.0000514767932, -0.0013327004219, -0.0009721518987, +0.0001867088608, + +0.0003154008439, -0.0000900843882, -0.0000900843882, +0.0005343881857, + +0.0003219409283, -0.0005987341772, -0.0006116033755, +0.0008434599156, + +0.0011073839662, +0.0002318565401, -0.0004056962025, -0.0005666666667, + -0.0005729957806, -0.0003090717300, -0.0001995780591, +0.0000708860759, + +0.0009658227848, +0.0014679324895, +0.0007662447257, +0.0000708860759, + +0.0005278481013, +0.0000900843882, -0.0013392405063, -0.0009206751055, + -0.0003928270042, -0.0008177215190, -0.0006824894515, +0.0003605485232, + +0.0000837552743, +0.0000065400844, -0.0001481012658, +0.0003991561181, + +0.0011267932489, +0.0011654008439, +0.0004571729958, -0.0007597046414, + -0.0026204641350, -0.0024080168776, -0.0005987341772, +0.0008048523207, + +0.0016094936709, +0.0017447257384, +0.0017575949367, +0.0012040084388, + +0.0005729957806, -0.0012618143460, -0.0027491561181, -0.0021118143460, + -0.0005924050633, -0.0001223628692, -0.0002767932489, -0.0000514767932, + +0.0002767932489, +0.0001738396624, -0.0004635021097, +0.0005086497890, + +0.0011073839662, +0.0009400843882, -0.0001094936709, -0.0006310126582, + -0.0011073839662, -0.0014679324895, -0.0000322784810, +0.0011396624473, + +0.0011459915612, +0.0006630801688, -0.0000322784810, +0.0001995780591, + +0.0001801687764, -0.0001094936709, -0.0003282700422, -0.0006567510549, + -0.0006116033755, +0.0000000000000, -0.0008177215190, -0.0013970464135, + -0.0014164556962, -0.0003670886076, +0.0007791139241, +0.0011202531646, + +0.0015130801688, +0.0011331223629, +0.0002253164557, -0.0002253164557, + +0.0002896624473, +0.0008820675105, +0.0005021097046, -0.0004829113924, + -0.0011525316456, -0.0015388185654, -0.0016352320675, -0.0008626582278, + +0.0003219409283, +0.0008111814346, +0.0000065400844, -0.0004443037975, + -0.0000966244726, +0.0008434599156, +0.0016031645570, +0.0008177215190, + +0.0000900843882, -0.0000772151899, -0.0005537974684, -0.0007405063291, + -0.0002510548523, -0.0005278481013, -0.0012554852321, -0.0007983122363, + +0.0004120253165, +0.0011588607595, +0.0015388185654, +0.0008434599156, + -0.0005537974684, -0.0009012658228, -0.0007725738397, +0.0001995780591, + +0.0015322784810, +0.0005858649789, -0.0004185654008, +0.0004185654008, + +0.0010301687764, +0.0006310126582, -0.0003219409283, -0.0008497890295, + -0.0004443037975, +0.0000514767932, -0.0000451476793, -0.0002833333333, + -0.0000772151899, +0.0002704641350, +0.0001609704641, -0.0005537974684, + +0.0002318565401, +0.0018670886076, +0.0020345991561, -0.0004314345992, + -0.0025559071730, -0.0023951476793, -0.0005215189873, +0.0003282700422, + +0.0000000000000, -0.0007791139241, -0.0007919831224, -0.0001481012658, + +0.0002704641350, +0.0006181434599, +0.0009978902954, +0.0007854430380, + +0.0012877637131, +0.0020345991561, +0.0014164556962, +0.0002896624473, + +0.0001481012658, +0.0005987341772, +0.0007082278481, -0.0004443037975, + -0.0019571729958, -0.0021890295359, -0.0017641350211, -0.0024466244726, + -0.0021438818565, -0.0007791139241, +0.0003605485232, +0.0010430379747, + +0.0015902953586, +0.0021953586498, +0.0028907172996, +0.0027297468354, + +0.0019122362869, +0.0008048523207, +0.0000386075949, -0.0012812236287, + -0.0031097046414, -0.0034251054852, -0.0014293248945, +0.0003090717300, + +0.0009464135021, +0.0000837552743, -0.0008177215190, -0.0011782700422, + -0.0012940928270, -0.0007016877637, +0.0008305907173, +0.0018864978903, + +0.0014485232068, +0.0001544303797, -0.0002962025316, +0.0001738396624, + +0.0003862869198, +0.0006696202532, +0.0009335443038, +0.0007791139241, + -0.0003154008439, -0.0015645569620, -0.0013198312236, -0.0011654008439, + -0.0013263713080, -0.0002318565401, +0.0012168776371, +0.0018993670886, + +0.0020151898734, +0.0011331223629, +0.0002061181435, -0.0002447257384, + +0.0001223628692, +0.0009978902954, +0.0006824894515, -0.0008305907173, + -0.0024143459916, -0.0026654008439, -0.0019508438819, -0.0004957805907, + +0.0011654008439, +0.0017318565401, +0.0000194092827, -0.0015774261603, + +0.0001932489451, +0.0039531645570, +0.0044938818565, +0.0007725738397, + -0.0017962025316, -0.0022213080169, -0.0021181434599, -0.0005987341772, + +0.0005215189873, +0.0001352320675, -0.0006116033755, -0.0016094936709, + -0.0019251054852, -0.0003476793249, +0.0006373417722, +0.0007145569620, + +0.0013649789030, +0.0031677215190, +0.0032320675105, +0.0024658227848, + +0.0017704641350, +0.0001481012658, -0.0010044303797, -0.0008626582278, + -0.0008691983122, -0.0003282700422, -0.0002253164557, -0.0015774261603, + -0.0008305907173, +0.0007919831224, +0.0004635021097, +0.0001738396624, + +0.0010301687764, +0.0012103375527, +0.0004829113924, +0.0000514767932, + +0.0001672995781, +0.0005666666667, -0.0004377637131, -0.0018090717300, + -0.0017833333333, -0.0011331223629, -0.0014808016878, -0.0007791139241, + +0.0009272151899, +0.0026782700422, +0.0020474683544, -0.0002639240506, + -0.0009850210970, -0.0005021097046, -0.0004506329114, -0.0004185654008, + +0.0001286919831, +0.0015259493671, +0.0018864978903, +0.0008691983122, + -0.0005537974684, -0.0020924050633, -0.0022147679325, -0.0012618143460, + -0.0004185654008, +0.0010816455696, +0.0021310126582, +0.0005858649789, + -0.0008434599156, -0.0001738396624, +0.0003282700422, +0.0000966244726, + +0.0005149789030, +0.0012168776371, +0.0009658227848, +0.0000514767932, + -0.0006696202532, -0.0008691983122, -0.0006373417722, -0.0002510548523, + +0.0000194092827, +0.0000837552743, -0.0008883966245, -0.0017383966245, + -0.0009012658228, -0.0000451476793, +0.0005278481013, +0.0018350210970, + +0.0026525316456, +0.0015130801688, +0.0003282700422, -0.0004443037975, + -0.0009915611814, -0.0016094936709, -0.0015451476793, -0.0001738396624, + +0.0008434599156, +0.0003411392405, -0.0000900843882, -0.0004829113924, + -0.0009141350211, -0.0007082278481, -0.0007919831224, -0.0010816455696, + -0.0005278481013, +0.0007662447257, +0.0008563291139, -0.0003411392405, + -0.0004248945148, -0.0003025316456, -0.0009850210970, -0.0007016877637, + +0.0008369198312, +0.0013069620253, +0.0010301687764, +0.0010107594937, + +0.0009400843882, -0.0006373417722, -0.0022276371308, -0.0018928270042, + -0.0006502109705, +0.0000643459916, -0.0005278481013, -0.0011654008439, + +0.0000194092827, +0.0011396624473, +0.0007791139241, -0.0003605485232, + -0.0008949367089, -0.0006310126582, -0.0002575949367, +0.0004957805907, + +0.0018542194093, +0.0021696202532, +0.0006630801688, -0.0022213080169, + -0.0027748945148, -0.0005987341772, +0.0007983122363, +0.0007791139241, + +0.0000000000000, -0.0003154008439, +0.0002381856540, +0.0001995780591, + -0.0003734177215, -0.0008883966245, -0.0015388185654, -0.0013135021097, + +0.0003734177215, +0.0011396624473, +0.0000772151899, -0.0007016877637, + -0.0008369198312, -0.0009206751055, -0.0007468354430, -0.0001609704641, + +0.0013392405063, +0.0024981012658, +0.0019765822785, +0.0008755274262, + -0.0003282700422, -0.0010107594937, -0.0003670886076, +0.0006759493671, + +0.0003670886076, -0.0000322784810, +0.0002767932489, +0.0001738396624, + +0.0000386075949, +0.0000772151899, -0.0000128691983, -0.0000322784810, + +0.0001094936709, +0.0003670886076, +0.0004635021097, +0.0006824894515, + +0.0009529535865, +0.0004829113924, -0.0003025316456, -0.0006759493671, + -0.0005086497890, -0.0000580168776, +0.0003734177215, +0.0014936708861, + +0.0016031645570, +0.0007662447257, +0.0004443037975, +0.0004056962025, + +0.0003670886076, +0.0004892405063, +0.0005021097046, -0.0000772151899, + -0.0012360759494, -0.0009400843882, +0.0001672995781, -0.0002253164557, + -0.0006244725738, +0.0001481012658, +0.0005215189873, +0.0003411392405, + +0.0003991561181, +0.0002704641350, -0.0000514767932, +0.0003411392405, + +0.0010044303797, +0.0010236286920, +0.0001352320675, -0.0004957805907, + -0.0000514767932, +0.0005795358650, +0.0002253164557, -0.0003734177215, + -0.0003605485232, +0.0001932489451, +0.0004763713080, +0.0003670886076, + -0.0003605485232, -0.0011525316456, -0.0009464135021, +0.0000000000000, + +0.0003605485232, -0.0001029535865, -0.0001609704641, +0.0000000000000, + -0.0000322784810, +0.0000386075949, -0.0001672995781, -0.0009915611814, + -0.0011654008439, -0.0010622362869, -0.0007405063291, -0.0004120253165, + +0.0002381856540, +0.0010172995781, +0.0010044303797, -0.0000065400844, + -0.0007725738397, -0.0005215189873, -0.0003154008439, -0.0003025316456, + +0.0005278481013, +0.0007210970464, -0.0003476793249, -0.0009978902954, + -0.0014550632911, -0.0016611814346, -0.0010364978903, -0.0004185654008, + +0.0001415611814, +0.0003476793249, +0.0004957805907, +0.0008177215190, + +0.0000257383966, -0.0010172995781, -0.0002833333333, +0.0003928270042, + +0.0004120253165, +0.0005666666667, +0.0004377637131, +0.0000128691983, + +0.0000514767932, +0.0004185654008, +0.0005601265823, -0.0001801687764, + -0.0005924050633, +0.0000837552743, +0.0004763713080, +0.0000514767932, + -0.0001867088608, -0.0003862869198, +0.0000194092827, +0.0006502109705, + +0.0002447257384, +0.0004377637131, +0.0013327004219, +0.0010107594937, + -0.0001223628692, -0.0012103375527, -0.0013521097046, -0.0011525316456, + -0.0011588607595, -0.0002318565401, +0.0007533755274, +0.0006310126582, + +0.0001995780591, +0.0000900843882, -0.0001738396624, -0.0006116033755, + -0.0005537974684, -0.0001223628692, +0.0001867088608, +0.0004120253165, + -0.0000514767932, -0.0007597046414, -0.0009592827004, -0.0009141350211, + -0.0002962025316, +0.0003219409283, +0.0003090717300, +0.0003991561181, + +0.0003476793249, -0.0002833333333, -0.0002575949367, +0.0005407172996, + +0.0008626582278, +0.0007145569620, +0.0003411392405, -0.0001609704641, + -0.0006438818565, -0.0001415611814, +0.0001801687764, -0.0002124472574, + -0.0002767932489, -0.0000065400844, +0.0000708860759, +0.0007210970464, + +0.0008497890295, +0.0004377637131, +0.0002639240506, +0.0001029535865, + -0.0002962025316, -0.0007274261603, -0.0004314345992, +0.0006567510549, + +0.0008434599156, +0.0000966244726, -0.0002318565401, -0.0000966244726, + -0.0003154008439, -0.0000194092827, +0.0004763713080, +0.0003090717300, + +0.0002896624473, +0.0006438818565, +0.0004120253165, +0.0000643459916, + +0.0000451476793, +0.0000580168776, -0.0004248945148, -0.0004957805907, + +0.0005666666667, +0.0008883966245, -0.0002639240506, -0.0003282700422, + +0.0001158227848, +0.0001609704641, -0.0000451476793, +0.0000837552743, + +0.0004571729958, +0.0001995780591, -0.0004957805907, -0.0003928270042, + +0.0000000000000, +0.0001158227848, -0.0001867088608, -0.0004443037975, + -0.0003282700422, -0.0003799578059, -0.0000966244726, +0.0003219409283, + +0.0003348101266, +0.0000194092827, -0.0003282700422, -0.0003670886076, + -0.0001223628692, +0.0000708860759, +0.0007210970464, +0.0008111814346, + -0.0005343881857, -0.0015966244726, -0.0013263713080, -0.0008755274262, + -0.0005858649789, -0.0000257383966, +0.0006630801688, +0.0007854430380, + +0.0006502109705, +0.0005149789030, +0.0005149789030, +0.0001158227848, + -0.0005086497890, -0.0006888185654, -0.0003862869198, -0.0004185654008, + -0.0004443037975, -0.0002124472574, +0.0005086497890, +0.0006373417722, + -0.0003540084388, -0.0002639240506, +0.0013778481013, +0.0015194092827, + +0.0001609704641, -0.0004120253165, -0.0000128691983, -0.0002639240506, + -0.0006888185654, -0.0006696202532, -0.0006244725738, -0.0010107594937, + -0.0007405063291, +0.0003540084388, +0.0012940928270, +0.0010301687764, + +0.0005021097046, -0.0000257383966, -0.0003991561181, -0.0002318565401, + +0.0004892405063, +0.0007533755274, +0.0003411392405, -0.0004314345992, + -0.0007339662447, +0.0001738396624, +0.0009978902954, +0.0008434599156, + +0.0001029535865, -0.0009012658228, -0.0012746835443, -0.0010559071730, + -0.0005666666667, +0.0003348101266, +0.0003670886076, -0.0001801687764, + -0.0001158227848, +0.0001481012658, +0.0006310126582, +0.0008369198312, + +0.0006759493671, +0.0009141350211, +0.0011588607595, +0.0008305907173, + +0.0000000000000, -0.0003862869198, -0.0002318565401, -0.0002896624473, + -0.0007210970464, -0.0006953586498, -0.0002833333333, +0.0003476793249, + +0.0004571729958, +0.0000322784810, -0.0003282700422, -0.0001415611814, + +0.0004957805907, +0.0011911392405, +0.0009915611814, +0.0004443037975, + -0.0001544303797, -0.0000514767932, +0.0004377637131, +0.0001158227848, + -0.0004248945148, +0.0003282700422, +0.0007016877637, +0.0001352320675, + -0.0002253164557, +0.0003862869198, +0.0012877637131, +0.0011396624473, + +0.0003282700422, +0.0000900843882, -0.0003411392405, -0.0006438818565, + -0.0007533755274, -0.0009786919831, -0.0005924050633, +0.0002575949367, + +0.0004700421941, +0.0003282700422, +0.0004314345992, +0.0005795358650, + -0.0001223628692, -0.0009978902954, -0.0010044303797, -0.0002767932489, + +0.0008369198312, +0.0011845991561, +0.0007016877637, +0.0001867088608, + -0.0002896624473, -0.0001029535865, +0.0003154008439, -0.0001223628692, + -0.0004829113924, -0.0003734177215, -0.0006116033755, -0.0007339662447, + -0.0002189873418, -0.0000772151899, -0.0005407172996, -0.0001995780591, + +0.0002124472574, +0.0000000000000, +0.0005278481013, +0.0013455696203, + +0.0012168776371, +0.0003670886076, +0.0001029535865, +0.0003154008439, + +0.0000322784810, -0.0005021097046, -0.0004892405063, -0.0004377637131, + -0.0003348101266, -0.0004829113924, -0.0005407172996, -0.0004957805907, + -0.0006567510549, -0.0005537974684, -0.0001352320675, +0.0005215189873, + +0.0014485232068, +0.0007145569620, -0.0005666666667, -0.0007016877637, + -0.0003605485232, -0.0002447257384, +0.0000386075949, -0.0000708860759, + -0.0005407172996, -0.0006824894515, -0.0003025316456, -0.0004248945148, + -0.0004443037975, -0.0002061181435, -0.0000837552743, -0.0002189873418, + -0.0003025316456, -0.0000643459916, +0.0002189873418, +0.0001995780591, + +0.0002510548523, +0.0002061181435, -0.0003411392405, -0.0012554852321, + -0.0011717299578, -0.0005537974684, +0.0000322784810, +0.0009206751055, + +0.0012554852321, +0.0007983122363, +0.0002061181435, -0.0003991561181, + -0.0007597046414, -0.0006630801688, -0.0002833333333, +0.0000128691983, + +0.0004700421941, +0.0005537974684, +0.0000772151899, -0.0001801687764, + -0.0003154008439, -0.0004571729958, -0.0001544303797, +0.0000386075949, + +0.0001223628692, +0.0005278481013, +0.0005472573840, +0.0003282700422, + +0.0001738396624, +0.0000772151899, -0.0000128691983, +0.0002575949367, + +0.0002318565401, -0.0000900843882, -0.0004957805907, -0.0005472573840, + -0.0004248945148, -0.0001738396624, +0.0003282700422, +0.0006438818565, + +0.0000000000000, -0.0002189873418, -0.0001932489451, -0.0005666666667, + -0.0005343881857, +0.0001094936709, +0.0003928270042, +0.0001286919831, + +0.0000322784810, +0.0004377637131, -0.0001094936709, -0.0005729957806, + +0.0000386075949, +0.0005795358650, +0.0000643459916, -0.0003862869198, + -0.0004635021097, -0.0005343881857, -0.0008820675105, -0.0009400843882, + -0.0003991561181, +0.0000322784810, -0.0001801687764, -0.0001995780591, + +0.0006116033755, +0.0012683544304, +0.0007725738397, -0.0001544303797, + -0.0003862869198, -0.0000966244726, -0.0005278481013, -0.0008755274262, + -0.0004571729958, +0.0000900843882, +0.0003928270042, +0.0002962025316, + -0.0000772151899, +0.0001029535865, +0.0007405063291, +0.0007210970464, + +0.0002381856540, -0.0005858649789, -0.0008820675105, -0.0004056962025, + +0.0001158227848, +0.0004763713080, +0.0004571729958, -0.0002189873418, + -0.0004185654008, +0.0000451476793, +0.0004377637131, +0.0004829113924, + +0.0006116033755, +0.0008691983122, +0.0007339662447, -0.0000837552743, + -0.0005666666667, -0.0004763713080, +0.0000772151899, +0.0006181434599, + +0.0009721518987, +0.0006759493671, -0.0000322784810, -0.0002447257384, + +0.0005343881857, +0.0007274261603, +0.0002639240506, -0.0000386075949, + +0.0001094936709, +0.0001738396624, +0.0000257383966, -0.0000643459916, + +0.0000643459916, -0.0000772151899, -0.0001352320675, -0.0001738396624, + +0.0000128691983, +0.0002639240506, -0.0000643459916, -0.0007533755274, + -0.0006116033755, +0.0004377637131, +0.0009915611814, +0.0006824894515, + +0.0006373417722, +0.0006824894515, +0.0004957805907, +0.0001544303797, + -0.0005021097046, -0.0008755274262, -0.0006181434599, -0.0005086497890, + -0.0003670886076, +0.0000772151899, +0.0007405063291, +0.0011717299578, + +0.0009141350211, +0.0002704641350, -0.0004185654008, -0.0009012658228, + -0.0012040084388, -0.0010687763713, -0.0005086497890, +0.0001158227848, + +0.0002124472574, +0.0001352320675, -0.0001995780591, -0.0002061181435, + -0.0000257383966, -0.0000065400844, +0.0003025316456, +0.0008434599156, + +0.0005086497890, +0.0001932489451, -0.0000772151899, -0.0004763713080, + -0.0005858649789, -0.0006116033755, -0.0008177215190, -0.0002061181435, + +0.0006373417722, +0.0009978902954, +0.0007210970464, +0.0003540084388, + -0.0001672995781, -0.0004056962025, -0.0003025316456, +0.0000065400844, + +0.0002381856540, +0.0001801687764, -0.0003219409283, -0.0002833333333, + +0.0003540084388, +0.0003862869198, -0.0003928270042, -0.0008369198312, + -0.0004763713080, -0.0000451476793, +0.0003282700422, +0.0009272151899, + +0.0011459915612, +0.0009786919831, +0.0004892405063, -0.0005407172996, + -0.0013455696203, -0.0013778481013, -0.0008434599156, -0.0000643459916, + +0.0004700421941, +0.0008111814346, +0.0009592827004, +0.0008563291139, + +0.0004185654008, -0.0003411392405, -0.0008626582278, -0.0009272151899, + -0.0007210970464, -0.0005666666667, -0.0002896624473, +0.0000257383966, + +0.0002510548523, +0.0003154008439, +0.0004443037975, +0.0003862869198, + +0.0004829113924, +0.0003348101266, -0.0000708860759, -0.0004700421941, + -0.0003348101266, -0.0000966244726, -0.0002189873418, -0.0006244725738, + -0.0007983122363, -0.0007919831224, -0.0000065400844, +0.0008048523207, + +0.0009721518987, +0.0005729957806, +0.0002704641350, +0.0002124472574, + +0.0001867088608, -0.0002833333333, -0.0003282700422, +0.0000000000000, + -0.0001223628692, -0.0006116033755, -0.0007725738397, -0.0005343881857, + +0.0000837552743, +0.0004829113924, +0.0008820675105, +0.0008949367089, + +0.0003090717300, +0.0000580168776, +0.0002447257384, +0.0001481012658, + +0.0002189873418, +0.0001867088608, -0.0001995780591, -0.0005343881857, + -0.0008949367089, -0.0010751054852, -0.0005278481013, +0.0002896624473, + +0.0004892405063, +0.0005987341772, +0.0008240506329, +0.0006696202532, + +0.0001544303797, -0.0001223628692, -0.0000837552743, +0.0003540084388, + +0.0004957805907, -0.0000837552743, -0.0005666666667, -0.0001867088608, + -0.0003799578059, -0.0005924050633, -0.0000322784810, -0.0001481012658, + -0.0008177215190, -0.0003540084388, +0.0004763713080, +0.0008691983122, + +0.0003862869198, -0.0003090717300, -0.0006438818565, -0.0005278481013, + -0.0002575949367, +0.0001158227848, +0.0001672995781, +0.0001352320675, + +0.0002124472574, +0.0001544303797, -0.0002510548523, -0.0004314345992, + -0.0003090717300, -0.0000065400844, -0.0001672995781, -0.0003348101266, + -0.0000514767932, +0.0002381856540, +0.0002061181435, +0.0001029535865, + -0.0001867088608, -0.0006373417722, -0.0008883966245, -0.0003154008439, + +0.0001995780591, +0.0002896624473, +0.0005343881857, +0.0004120253165, + -0.0000386075949, -0.0001609704641, -0.0001223628692, -0.0001223628692, + -0.0000580168776, +0.0000451476793, +0.0004248945148, +0.0004635021097, + +0.0001672995781, -0.0002833333333, -0.0006181434599, -0.0007662447257, + -0.0007983122363, -0.0004571729958, +0.0004314345992, +0.0009915611814, + +0.0008949367089, +0.0005086497890, -0.0001352320675, -0.0008883966245, + -0.0007468354430, -0.0001544303797, +0.0005343881857, +0.0007016877637, + +0.0003476793249, +0.0000322784810, -0.0001223628692, -0.0006244725738, + -0.0008177215190, -0.0006502109705, -0.0002447257384, +0.0001352320675, + +0.0006116033755, +0.0007405063291, +0.0005472573840, -0.0000065400844, + -0.0008369198312, -0.0015002109705, -0.0011782700422, -0.0002381856540, + +0.0003670886076, +0.0002767932489, +0.0003862869198, +0.0005472573840, + +0.0001352320675, -0.0004571729958, -0.0005858649789, -0.0001223628692, + -0.0001801687764, -0.0006567510549, -0.0004120253165, +0.0002639240506, + +0.0004829113924, +0.0002253164557, +0.0000837552743, +0.0001995780591, + -0.0002124472574, -0.0008111814346, -0.0005149789030, +0.0006310126582, + +0.0014808016878, +0.0013907172996, +0.0008369198312, +0.0002767932489, + -0.0003219409283, -0.0003670886076, -0.0002061181435, -0.0003090717300, + -0.0003154008439, +0.0001738396624, +0.0004892405063, +0.0004763713080, + +0.0003025316456, -0.0000194092827, -0.0004120253165, -0.0000708860759, + +0.0002896624473, +0.0005086497890, +0.0007854430380, +0.0009592827004, + +0.0007983122363, +0.0007210970464, +0.0003154008439, -0.0000900843882, + -0.0001801687764, -0.0000643459916, -0.0002124472574, -0.0001995780591, + +0.0000837552743, +0.0004185654008, +0.0005924050633, +0.0003090717300, + -0.0002639240506, -0.0004185654008, -0.0003928270042, -0.0003991561181, + +0.0001286919831, +0.0009786919831, +0.0011331223629, +0.0008305907173, + +0.0004635021097, -0.0001286919831, -0.0008369198312, -0.0011331223629, + -0.0008883966245, -0.0003282700422, +0.0001481012658, +0.0000900843882, + +0.0000194092827, +0.0002575949367, +0.0001094936709, -0.0002124472574, + -0.0002189873418, -0.0005472573840, -0.0005021097046, +0.0003090717300, + +0.0014035864979, +0.0016740506329, +0.0005795358650, -0.0005729957806, + -0.0001932489451, +0.0000708860759, -0.0004829113924, -0.0009400843882, + -0.0004700421941, +0.0006116033755, +0.0013907172996, +0.0007468354430, + -0.0003862869198, -0.0009721518987, -0.0007662447257, -0.0000451476793, + +0.0007339662447, +0.0007791139241, +0.0003090717300, -0.0001932489451, + -0.0001544303797, -0.0004377637131, -0.0006181434599, +0.0005729957806, + +0.0017833333333, +0.0013327004219, +0.0003928270042, +0.0002510548523, + +0.0003154008439, +0.0000514767932, -0.0004892405063, -0.0004829113924, + -0.0001609704641, -0.0005021097046, -0.0009141350211, -0.0000386075949, + +0.0013135021097, +0.0011267932489, -0.0001481012658, -0.0006888185654, + -0.0009078059072, -0.0007597046414, +0.0000194092827, +0.0002575949367, + +0.0002189873418, +0.0006696202532, +0.0006953586498, -0.0000194092827, + -0.0013135021097, -0.0018219409283, -0.0004506329114, +0.0009464135021, + +0.0000194092827, -0.0012554852321, -0.0009464135021, +0.0000000000000, + +0.0002189873418, +0.0000128691983, -0.0003219409283, -0.0003540084388, + -0.0004763713080, -0.0003799578059, -0.0001801687764, -0.0000580168776, + -0.0001223628692, +0.0000000000000, -0.0001158227848, -0.0002061181435, + -0.0004957805907, -0.0004377637131, -0.0000966244726, +0.0003605485232, + +0.0003348101266, -0.0007983122363, -0.0016223628692, -0.0008048523207, + -0.0000128691983, +0.0001481012658, +0.0004571729958, +0.0000000000000, + -0.0008755274262, -0.0009335443038, -0.0005987341772, -0.0008626582278, + -0.0008177215190, +0.0000772151899, +0.0014873417722, +0.0019443037975, + +0.0010236286920, -0.0003025316456, -0.0004763713080, -0.0000322784810, + +0.0004248945148, +0.0008755274262, +0.0009335443038, +0.0005215189873, + -0.0000257383966, -0.0007854430380, -0.0011010548523, -0.0005537974684, + +0.0002510548523, +0.0003734177215, -0.0000386075949, -0.0002575949367, + -0.0001995780591, +0.0000000000000, +0.0007339662447, +0.0010622362869, + +0.0008177215190, +0.0001544303797, -0.0006567510549, -0.0010107594937, + -0.0004829113924, +0.0000772151899, +0.0001609704641, -0.0000128691983, + -0.0000580168776, -0.0002447257384, -0.0006310126582, -0.0008497890295, + -0.0008177215190, -0.0003991561181, +0.0003540084388, +0.0005472573840, + +0.0001801687764, +0.0002318565401, +0.0006696202532, +0.0005343881857, + -0.0001544303797, -0.0006052742616, -0.0005729957806, -0.0004120253165, + -0.0004120253165, -0.0003799578059, -0.0002510548523, +0.0002767932489, + +0.0007145569620, +0.0010364978903, +0.0010816455696, +0.0006502109705, + +0.0002061181435, +0.0000900843882, -0.0002510548523, -0.0001995780591, + +0.0000257383966, -0.0001352320675, -0.0001286919831, +0.0002639240506, + +0.0002447257384, -0.0000322784810, +0.0001286919831, +0.0002962025316, + -0.0001609704641, +0.0000386075949, +0.0005278481013, +0.0004377637131, + +0.0002381856540, +0.0002896624473, +0.0003799578059, +0.0008434599156, + +0.0005086497890, -0.0004185654008, -0.0005086497890, +0.0000643459916, + +0.0000000000000, -0.0004248945148, -0.0003991561181, -0.0002833333333, + -0.0003799578059, -0.0003154008439, +0.0000128691983, +0.0003348101266, + +0.0006888185654, +0.0009721518987, +0.0010751054852, +0.0009978902954, + +0.0005537974684, -0.0000900843882, +0.0000065400844, +0.0001867088608, + -0.0004185654008, -0.0008240506329, -0.0001867088608, +0.0002896624473, + +0.0001158227848, -0.0004700421941, -0.0007725738397, -0.0004314345992, + +0.0001223628692, +0.0000128691983, -0.0000580168776, +0.0003219409283, + +0.0005795358650, +0.0001352320675, -0.0002447257384, -0.0003670886076, + -0.0001094936709, +0.0002447257384, +0.0000514767932, -0.0000257383966, + +0.0007016877637, +0.0008563291139, +0.0003411392405, +0.0001286919831, + +0.0002510548523, +0.0002124472574, -0.0002704641350, -0.0012360759494, + -0.0013198312236, -0.0001801687764, +0.0009335443038, +0.0010493670886, + +0.0005149789030, -0.0000194092827, -0.0001738396624, -0.0003282700422, + -0.0003605485232, +0.0004248945148, +0.0011267932489, +0.0010364978903, + +0.0005987341772, +0.0002510548523, -0.0002575949367, -0.0004571729958, + -0.0002447257384, -0.0001352320675, -0.0005472573840, -0.0006310126582, + -0.0002447257384, +0.0000580168776, -0.0001481012658, -0.0001672995781, + -0.0000386075949, -0.0001352320675, -0.0006373417722, -0.0007597046414, + -0.0004443037975, -0.0000580168776, +0.0000386075949, +0.0002061181435, + +0.0003282700422, +0.0006310126582, +0.0007662447257, +0.0002704641350, + -0.0004443037975, -0.0005407172996, -0.0006696202532, -0.0008883966245, + -0.0006567510549, +0.0000000000000, +0.0007016877637, +0.0010107594937, + +0.0005472573840, -0.0002253164557, -0.0009658227848, -0.0013263713080, + -0.0008949367089, +0.0001286919831, +0.0008755274262, +0.0010816455696, + +0.0008883966245, +0.0001223628692, -0.0004377637131, -0.0003154008439, + -0.0001415611814, -0.0003991561181, -0.0004571729958, -0.0004248945148, + -0.0004314345992, -0.0003025316456, +0.0002510548523, +0.0005472573840, + +0.0006502109705, +0.0002962025316, -0.0003670886076, -0.0005987341772, + -0.0001223628692, +0.0001544303797, +0.0000386075949, -0.0004957805907, + -0.0006824894515, -0.0004443037975, +0.0000322784810, +0.0003799578059, + +0.0005472573840, +0.0004571729958, +0.0005407172996, +0.0003991561181, + +0.0003282700422, +0.0001672995781, -0.0002510548523, -0.0005729957806, + -0.0004506329114, -0.0001995780591, +0.0000386075949, +0.0000708860759, + +0.0000386075949, -0.0000386075949, +0.0000580168776, +0.0000708860759, + +0.0000900843882, +0.0006438818565, +0.0010430379747, +0.0006438818565, + -0.0000580168776, -0.0004829113924, -0.0004635021097, -0.0002639240506, + -0.0001867088608, -0.0001352320675, -0.0003411392405, -0.0004443037975, + -0.0007082278481, -0.0005472573840, +0.0003411392405, +0.0010301687764, + +0.0009012658228, +0.0003862869198, -0.0002318565401, -0.0002767932489, + -0.0000643459916, +0.0001932489451, +0.0001932489451, -0.0001094936709, + -0.0004506329114, -0.0003025316456, -0.0000065400844, +0.0002124472574, + -0.0000708860759, -0.0001932489451, -0.0000451476793, +0.0003928270042, + +0.0005666666667, +0.0001544303797, -0.0001801687764, +0.0003154008439, + +0.0003799578059, -0.0002381856540, -0.0005795358650, -0.0004120253165, + -0.0002704641350, -0.0000257383966, +0.0004314345992, +0.0006502109705, + +0.0005021097046, +0.0002124472574, -0.0001995780591, -0.0005149789030, + -0.0001481012658, +0.0003540084388, +0.0002896624473, -0.0001352320675, + -0.0002896624473, -0.0003219409283, -0.0005987341772, -0.0008949367089, + -0.0005924050633, -0.0000772151899, +0.0002447257384, +0.0004314345992, + +0.0006310126582, +0.0003219409283, -0.0001544303797, -0.0003411392405, + +0.0001932489451, +0.0004248945148, +0.0002767932489, -0.0000194092827, + -0.0001352320675, -0.0004443037975, -0.0006630801688, -0.0004377637131, + +0.0000708860759, +0.0002510548523, +0.0003411392405, +0.0001223628692, + -0.0000322784810, +0.0001415611814, +0.0003799578059, +0.0004571729958, + +0.0004185654008, +0.0000580168776, -0.0002639240506, -0.0004185654008, + -0.0002061181435, -0.0001223628692, -0.0002189873418, +0.0000000000000, + +0.0001801687764, +0.0002124472574, +0.0001672995781, +0.0000065400844, + -0.0001158227848, -0.0001609704641, -0.0003670886076, -0.0001672995781, + +0.0000643459916, -0.0001609704641, -0.0004248945148, -0.0001352320675, + +0.0001158227848, +0.0001286919831, -0.0000643459916, -0.0000580168776, + +0.0000772151899, -0.0000257383966, -0.0004443037975, -0.0003799578059, + -0.0002318565401, +0.0001094936709, +0.0002962025316, +0.0000580168776, + -0.0000900843882, +0.0001867088608, +0.0000580168776, -0.0002124472574, + -0.0002189873418, +0.0000643459916, +0.0001481012658, +0.0002447257384, + +0.0003090717300, +0.0000708860759, -0.0002124472574, -0.0003862869198, + -0.0007210970464, -0.0006438818565, -0.0001094936709, -0.0000194092827, + -0.0003605485232, -0.0003476793249, +0.0002767932489, +0.0007210970464, + +0.0006052742616, +0.0002575949367, -0.0000065400844, -0.0003282700422, + -0.0004957805907, -0.0003540084388, +0.0001544303797, +0.0005601265823, + +0.0007210970464, +0.0004763713080, +0.0000966244726, -0.0001672995781, + -0.0000386075949, -0.0000772151899, -0.0004056962025, -0.0007533755274, + -0.0004377637131, +0.0001609704641, +0.0005472573840, +0.0004506329114, + +0.0002575949367, -0.0000322784810, -0.0000580168776, +0.0002189873418, + +0.0003476793249, -0.0001481012658, -0.0004377637131, -0.0003282700422, + -0.0001029535865, +0.0000386075949, +0.0002833333333, +0.0005472573840, + +0.0006438818565, +0.0005601265823, +0.0002896624473, -0.0001094936709, + -0.0005021097046, -0.0003928270042, +0.0003605485232, +0.0007597046414, + +0.0003411392405, +0.0000322784810, -0.0003411392405, -0.0007791139241, + -0.0007082278481, -0.0001352320675, +0.0003928270042, +0.0008626582278, + +0.0008691983122, +0.0007016877637, +0.0003991561181, +0.0000643459916, + -0.0003540084388, -0.0003862869198, -0.0001867088608, +0.0001672995781, + +0.0003219409283, +0.0001352320675, -0.0001029535865, -0.0001094936709, + -0.0001544303797, -0.0000580168776, -0.0002575949367, -0.0003799578059, + +0.0001672995781, +0.0007274261603, +0.0005924050633, +0.0004571729958, + +0.0003540084388, -0.0000643459916, -0.0003670886076, -0.0000514767932, + +0.0001286919831, +0.0000194092827, +0.0002639240506, +0.0004056962025, + +0.0000580168776, -0.0001867088608, +0.0000000000000, +0.0002704641350, + +0.0003090717300, +0.0000837552743, +0.0000514767932, -0.0000837552743, + -0.0002510548523, -0.0003282700422, -0.0002704641350, -0.0003476793249, + -0.0002381856540, -0.0000900843882, -0.0000257383966, -0.0001801687764, + -0.0000065400844, +0.0003025316456, +0.0001738396624, -0.0003090717300, + -0.0003862869198, -0.0003411392405, -0.0001672995781, +0.0002833333333, + +0.0005149789030, +0.0003928270042, +0.0005601265823, +0.0005149789030, + +0.0002639240506, -0.0001738396624, -0.0004892405063, -0.0004120253165, + -0.0002767932489, -0.0005729957806, -0.0006373417722, -0.0003670886076, + +0.0000065400844, +0.0002318565401, +0.0000966244726, +0.0000065400844, + +0.0002447257384, +0.0004506329114, +0.0000772151899, -0.0001801687764, + -0.0001029535865, +0.0000643459916, +0.0001544303797, +0.0001995780591, + -0.0000451476793, -0.0001415611814, -0.0001672995781, -0.0001094936709, + -0.0000708860759, -0.0000194092827, -0.0000772151899, +0.0000451476793, + +0.0002704641350, +0.0003734177215, -0.0000900843882, -0.0003928270042, + -0.0002447257384, +0.0000128691983, -0.0000772151899, -0.0003219409283, + -0.0004635021097, -0.0002253164557, -0.0002061181435, -0.0001223628692, + +0.0001672995781, +0.0002962025316, +0.0003154008439, +0.0004443037975, + +0.0003348101266, +0.0002061181435, +0.0000966244726, -0.0001738396624, + -0.0003154008439, -0.0000580168776, +0.0002510548523, +0.0001995780591, + -0.0000322784810, -0.0001672995781, -0.0000514767932, -0.0001029535865, + -0.0003862869198, -0.0004314345992, +0.0000257383966, +0.0001932489451, + +0.0001481012658, +0.0000000000000, -0.0001544303797, -0.0002767932489, + -0.0001609704641, -0.0000837552743, +0.0002381856540, +0.0004763713080, + +0.0005795358650, +0.0004443037975, +0.0002189873418, -0.0000900843882, + -0.0001738396624, -0.0002189873418, -0.0002381856540, -0.0002767932489, + -0.0001609704641, -0.0001609704641, -0.0001029535865, -0.0001481012658, + -0.0002896624473, -0.0001609704641, +0.0002767932489, +0.0003799578059, + +0.0002253164557, -0.0000451476793, -0.0004248945148, -0.0003734177215, + -0.0000386075949, +0.0000386075949, +0.0000194092827, +0.0000772151899, + -0.0001738396624, -0.0004700421941, -0.0005407172996, -0.0002510548523, + +0.0000772151899, +0.0001415611814, -0.0002253164557, -0.0002833333333, + -0.0001029535865, +0.0000194092827, +0.0000514767932, +0.0004506329114, + +0.0006244725738, +0.0004635021097, +0.0001352320675, -0.0001995780591, + -0.0007274261603, -0.0008434599156, -0.0003991561181, +0.0002575949367, + +0.0006373417722, +0.0007725738397, +0.0006052742616, +0.0002704641350, + -0.0002061181435, -0.0002962025316, +0.0001672995781, +0.0006373417722, + +0.0005537974684, +0.0001609704641, -0.0001609704641, -0.0002124472574, + -0.0001995780591, -0.0004506329114, -0.0005278481013, -0.0003862869198, + -0.0001481012658, +0.0002962025316, +0.0008497890295, +0.0007597046414, + +0.0000643459916, -0.0004763713080, -0.0002704641350, +0.0000900843882, + +0.0003282700422, +0.0003476793249, +0.0003348101266, +0.0002061181435, + -0.0000451476793, -0.0003928270042, -0.0001672995781, +0.0001158227848, + +0.0001481012658, -0.0000194092827, -0.0001544303797, -0.0003282700422, + -0.0001481012658, +0.0001094936709, +0.0002767932489, +0.0001286919831, + -0.0002896624473, -0.0003219409283, +0.0003025316456, +0.0003799578059, + -0.0000386075949, -0.0002189873418, -0.0001415611814, +0.0001932489451, + +0.0003090717300, +0.0000451476793, +0.0000900843882, +0.0001932489451, + -0.0001352320675, -0.0002639240506, -0.0001415611814, +0.0001415611814, + +0.0001801687764, +0.0000065400844, +0.0000451476793, +0.0004957805907, + +0.0006052742616, +0.0003862869198, +0.0000643459916, -0.0001223628692, + -0.0005278481013, -0.0006052742616, -0.0003025316456, -0.0000128691983, + -0.0001223628692, -0.0001286919831, +0.0000000000000, +0.0001738396624, + +0.0000580168776, +0.0000900843882, +0.0002189873418, +0.0001094936709, + -0.0001738396624, -0.0000257383966, +0.0002447257384, +0.0001094936709, + -0.0003605485232, -0.0004443037975, -0.0001029535865, +0.0001995780591, + +0.0002061181435, +0.0000065400844, -0.0000966244726, -0.0001223628692, + -0.0001738396624, -0.0001867088608, +0.0000065400844, +0.0000580168776, + +0.0002124472574, +0.0004185654008, +0.0005537974684, +0.0003090717300, + +0.0001352320675, +0.0000000000000, -0.0003025316456, -0.0007854430380, + -0.0005215189873, -0.0000257383966, +0.0002124472574, +0.0001544303797, + +0.0001094936709, +0.0000128691983, +0.0001672995781, +0.0001415611814, + -0.0000194092827, -0.0002253164557, +0.0000128691983, +0.0003605485232, + +0.0003090717300, -0.0001544303797, -0.0003476793249, -0.0003734177215, + -0.0003348101266, -0.0001415611814, +0.0002189873418, +0.0005086497890, + +0.0004120253165, +0.0002575949367, +0.0003154008439, +0.0002767932489, + +0.0000194092827, +0.0000194092827, -0.0000386075949, -0.0001932489451, + -0.0001672995781, +0.0001415611814, +0.0001415611814, +0.0000000000000, + -0.0001094936709, +0.0001867088608, +0.0003025316456, +0.0001481012658, + -0.0001867088608, -0.0001223628692, -0.0000194092827, -0.0000708860759, + -0.0003348101266, -0.0001544303797, +0.0000000000000, -0.0000451476793, + -0.0001995780591, -0.0000772151899, +0.0001738396624, +0.0004635021097, + +0.0005601265823, +0.0006052742616, +0.0002124472574, -0.0003476793249, + -0.0005666666667, -0.0003025316456, +0.0001223628692, +0.0003219409283, + +0.0001158227848, -0.0000772151899, -0.0001481012658, -0.0001738396624, + -0.0000966244726, -0.0000386075949, +0.0001738396624, +0.0002381856540, + +0.0001094936709, -0.0002061181435, -0.0002510548523, -0.0002124472574, + -0.0002767932489, -0.0002318565401, +0.0004314345992, +0.0006630801688, + +0.0003090717300, -0.0001672995781, -0.0001415611814, -0.0000580168776, + -0.0000065400844, -0.0001223628692, -0.0001094936709, -0.0001223628692, + +0.0000643459916, +0.0000837552743, -0.0001029535865, -0.0003476793249, + -0.0000708860759, +0.0002189873418, +0.0001932489451, +0.0000128691983, + +0.0000065400844, +0.0000128691983, -0.0000065400844, -0.0000966244726, + -0.0000772151899, -0.0000386075949, -0.0000708860759, -0.0001223628692, + -0.0002381856540, -0.0001223628692, -0.0001223628692, -0.0004248945148, + -0.0006116033755, -0.0000514767932, +0.0005924050633, +0.0008755274262, + +0.0006116033755, +0.0001932489451, -0.0004120253165, -0.0006824894515, + -0.0006759493671, -0.0003605485232, +0.0000322784810, +0.0003605485232, + +0.0000386075949, -0.0002896624473, -0.0002318565401, +0.0000837552743, + +0.0000708860759, +0.0000065400844, -0.0001415611814, -0.0000580168776, + +0.0000708860759, +0.0001544303797, +0.0001158227848, +0.0001544303797, + +0.0000708860759, -0.0000966244726, -0.0000708860759, +0.0000772151899, + +0.0000000000000, -0.0000580168776, +0.0000386075949, -0.0000837552743, + -0.0002253164557, -0.0002639240506, -0.0000772151899, +0.0000322784810, + +0.0000837552743, -0.0000514767932, -0.0000772151899, -0.0000772151899, + -0.0001158227848, -0.0002575949367, -0.0001867088608, -0.0001932489451, + +0.0001158227848, +0.0004443037975, +0.0005215189873, +0.0003799578059, + +0.0002510548523, -0.0001286919831, -0.0004248945148, -0.0005215189873, + -0.0002318565401, -0.0000514767932, +0.0000257383966, -0.0000386075949, + -0.0001029535865, -0.0000643459916, +0.0001609704641, +0.0002510548523, + +0.0000900843882, -0.0001932489451, -0.0001867088608, +0.0000451476793, + +0.0000000000000, -0.0001609704641, -0.0002639240506, -0.0002381856540, + -0.0001544303797, +0.0000322784810, +0.0001158227848, +0.0000708860759, + -0.0001544303797, -0.0001094936709, +0.0000451476793, +0.0002704641350, + +0.0002253164557, +0.0001672995781, +0.0001672995781, +0.0002575949367, + +0.0001481012658, +0.0000065400844, -0.0001352320675, -0.0000514767932, + -0.0000065400844, +0.0000322784810, -0.0002189873418, -0.0004506329114, + -0.0003282700422, -0.0000837552743, -0.0001415611814, -0.0001801687764, + -0.0001544303797, -0.0000966244726, -0.0000257383966, +0.0000451476793, + +0.0001672995781, +0.0002639240506, +0.0003154008439, +0.0002124472574, + +0.0000128691983, -0.0001286919831, +0.0000194092827, +0.0001158227848, + +0.0000451476793, -0.0000708860759, +0.0001094936709, +0.0002189873418, + +0.0001738396624, +0.0000386075949, +0.0000257383966, -0.0001544303797, + -0.0001609704641, -0.0000708860759, +0.0001932489451, +0.0002124472574, + +0.0001286919831, +0.0000966244726, +0.0000772151899, -0.0001995780591, + -0.0001801687764, +0.0000900843882, +0.0002447257384, +0.0001352320675, + +0.0001867088608, +0.0003476793249, +0.0003670886076, +0.0003540084388, + +0.0003090717300, +0.0001415611814, -0.0000386075949, -0.0001995780591, + -0.0003540084388, -0.0002704641350, +0.0000257383966, +0.0003734177215, + +0.0004185654008, +0.0003090717300, +0.0000128691983, -0.0003734177215, + -0.0007983122363, -0.0006310126582, -0.0000451476793, +0.0004635021097, + +0.0004056962025, +0.0002962025316, +0.0002318565401, +0.0002510548523, + +0.0000386075949, -0.0001609704641, -0.0002253164557, +0.0000386075949, + +0.0000900843882, -0.0000514767932, -0.0001995780591, -0.0002833333333, + -0.0004829113924, -0.0004248945148, -0.0002381856540, -0.0000643459916, + +0.0001352320675, +0.0003476793249, +0.0002962025316, +0.0000386075949, + -0.0000128691983, +0.0001801687764, +0.0003605485232, +0.0003991561181, + +0.0003799578059, +0.0000194092827, -0.0002833333333, -0.0005149789030, + -0.0005021097046, -0.0002962025316, +0.0001352320675, +0.0002704641350, + +0.0002896624473, +0.0001158227848, +0.0000194092827, -0.0001094936709, + +0.0000514767932, +0.0003411392405, +0.0004571729958, +0.0001029535865, + -0.0001995780591, -0.0003154008439, -0.0001738396624, -0.0000257383966, + -0.0000128691983, -0.0000837552743, +0.0000386075949, +0.0000386075949, + +0.0000194092827, +0.0000194092827, +0.0000451476793, +0.0001932489451, + +0.0001995780591, +0.0000065400844, +0.0000386075949, +0.0002447257384, + +0.0001995780591, +0.0000451476793, -0.0002189873418, -0.0003411392405, + -0.0004185654008, -0.0002061181435, -0.0000065400844, +0.0000451476793, + -0.0000643459916, -0.0000580168776, -0.0001995780591, +0.0000065400844, + +0.0002253164557, +0.0001609704641, -0.0000386075949, +0.0000708860759, + +0.0000514767932, -0.0000065400844, -0.0000772151899, +0.0000708860759, + -0.0000257383966, -0.0003282700422, -0.0004185654008, -0.0001544303797, + +0.0002189873418, +0.0005343881857, +0.0004892405063, +0.0002061181435, + -0.0000065400844, -0.0001867088608, -0.0003928270042, -0.0004248945148, + +0.0000065400844, +0.0002639240506, +0.0000966244726, -0.0000966244726, + +0.0001544303797, +0.0003734177215, +0.0002962025316, -0.0000257383966, + -0.0003605485232, -0.0007597046414, -0.0006244725738, -0.0000194092827, + +0.0005666666667, +0.0003862869198, +0.0000386075949, -0.0002896624473, + -0.0003540084388, -0.0001801687764, +0.0001352320675, +0.0001932489451, + +0.0001867088608, +0.0000451476793, -0.0001158227848, -0.0003348101266, + -0.0002575949367, -0.0000194092827, -0.0000643459916, -0.0000900843882, + +0.0001544303797, +0.0002253164557, +0.0000000000000, -0.0000451476793, + +0.0000000000000, -0.0000386075949, -0.0003154008439, -0.0004571729958, + -0.0002189873418, +0.0002704641350, +0.0003670886076, +0.0001932489451, + +0.0000194092827, +0.0001609704641, +0.0000837552743, -0.0001672995781, + -0.0004443037975, -0.0003799578059, -0.0001672995781, +0.0001609704641, + +0.0003348101266, +0.0004763713080, +0.0002896624473, +0.0001223628692, + -0.0000194092827, -0.0001094936709, -0.0000065400844, +0.0003411392405, + +0.0003025316456, -0.0001094936709, -0.0004957805907, -0.0004571729958, + -0.0000837552743, +0.0002124472574, +0.0003540084388, +0.0003282700422, + +0.0002253164557, +0.0000708860759, +0.0000257383966, -0.0001481012658, + -0.0001415611814, -0.0000772151899, -0.0000643459916, -0.0002767932489, + -0.0001544303797, -0.0000322784810, +0.0000580168776, +0.0000322784810, + +0.0000128691983, -0.0002575949367, -0.0004056962025, -0.0004700421941, + -0.0004377637131, -0.0004120253165, +0.0000451476793, +0.0005795358650, + +0.0007016877637, +0.0002639240506, -0.0001352320675, -0.0003154008439, + -0.0002381856540, -0.0002833333333, -0.0003348101266, -0.0000580168776, + +0.0002962025316, +0.0003991561181, +0.0003605485232, +0.0002896624473, + +0.0000194092827, -0.0001094936709, -0.0002639240506, -0.0004056962025, + -0.0005729957806, -0.0003348101266, +0.0001286919831, +0.0006888185654, + +0.0007339662447, +0.0004571729958, +0.0000643459916, +0.0001352320675, + +0.0002510548523, +0.0003670886076, +0.0002962025316, +0.0003540084388, + +0.0002061181435, -0.0002061181435, -0.0005987341772, -0.0002510548523, + +0.0003411392405, +0.0007339662447, +0.0006953586498, +0.0005537974684, + +0.0003670886076, +0.0000000000000, -0.0003670886076, -0.0002833333333, + +0.0000000000000, -0.0000194092827, -0.0001867088608, -0.0000772151899, + +0.0003476793249, +0.0006116033755, +0.0006052742616, +0.0001995780591, + -0.0001158227848, -0.0004248945148, -0.0004957805907, -0.0003734177215, + +0.0000966244726, +0.0002447257384, +0.0002253164557, +0.0000900843882, + +0.0000708860759, -0.0001158227848, -0.0000837552743, -0.0001801687764, + -0.0001544303797, -0.0000900843882, -0.0001286919831, -0.0003540084388, + -0.0004056962025, -0.0003799578059, -0.0000643459916, +0.0003411392405, + +0.0004571729958, +0.0003025316456, +0.0003540084388, +0.0003154008439, + -0.0001352320675, -0.0004120253165, -0.0003090717300, -0.0001094936709, + -0.0000128691983, -0.0002124472574, -0.0006696202532, -0.0006116033755, + -0.0002704641350, +0.0003090717300, +0.0007082278481, +0.0006502109705, + +0.0000708860759, -0.0002253164557, -0.0002767932489, -0.0001029535865, + -0.0001544303797, -0.0000386075949, +0.0000966244726, +0.0003090717300, + +0.0002896624473, +0.0002833333333, +0.0001801687764, +0.0000837552743, + -0.0000900843882, +0.0000000000000, +0.0000322784810, -0.0000514767932, + -0.0001609704641, -0.0002962025316, -0.0004185654008, -0.0002318565401, + +0.0001158227848, +0.0002381856540, +0.0002639240506, +0.0001544303797, + -0.0000451476793, -0.0001995780591, -0.0000837552743, -0.0001672995781, + -0.0002124472574, -0.0003090717300, -0.0001286919831, +0.0001995780591, + +0.0003991561181, +0.0001415611814, +0.0001609704641, +0.0001223628692, + -0.0000322784810, -0.0001867088608, -0.0000065400844, +0.0000065400844, + +0.0000386075949, +0.0000000000000, -0.0000837552743, -0.0001738396624, + -0.0000451476793, +0.0000000000000, +0.0001352320675, +0.0002896624473, + +0.0003025316456, +0.0001029535865, -0.0002381856540, -0.0004377637131, + -0.0002447257384, +0.0001286919831, +0.0001932489451, +0.0001481012658, + +0.0001672995781, +0.0003348101266, +0.0002124472574, -0.0000514767932, + -0.0002962025316, -0.0001544303797, -0.0001286919831, -0.0002253164557, + -0.0002767932489, +0.0000451476793, +0.0001801687764, +0.0001544303797, + +0.0000000000000, +0.0000128691983, -0.0000386075949, -0.0001029535865, + -0.0001481012658, +0.0000580168776, +0.0001352320675, +0.0001609704641, + +0.0002124472574, +0.0002318565401, +0.0000194092827, -0.0001672995781, + -0.0002061181435, -0.0001481012658, -0.0001481012658, -0.0002833333333, + -0.0003025316456, -0.0001738396624, +0.0000837552743, +0.0001867088608, + +0.0003476793249, +0.0004635021097, +0.0004443037975, +0.0000514767932, + -0.0002896624473, -0.0004763713080, -0.0002767932489, -0.0001029535865, + +0.0000000000000, -0.0000322784810, +0.0000837552743, +0.0001029535865, + +0.0001223628692, +0.0000451476793, +0.0000451476793, +0.0000643459916, + +0.0002639240506, +0.0002189873418, +0.0000322784810, -0.0000643459916, + -0.0000772151899, -0.0001672995781, -0.0002767932489, -0.0001672995781, + +0.0000772151899, +0.0001481012658, -0.0000194092827, -0.0000514767932, + -0.0000708860759, -0.0000322784810, -0.0000322784810, +0.0001029535865, + +0.0001609704641, +0.0002061181435, +0.0001094936709, +0.0000900843882, + -0.0000580168776, -0.0001609704641, -0.0003154008439, -0.0003540084388, + -0.0003090717300, +0.0000000000000, +0.0001609704641, +0.0002318565401, + +0.0001672995781, +0.0001672995781, +0.0001738396624, +0.0001415611814, + -0.0000580168776, -0.0002447257384, -0.0003540084388, -0.0003862869198, + -0.0002833333333, -0.0000194092827, +0.0002767932489, +0.0003282700422, + +0.0002381856540, +0.0000194092827, -0.0000514767932, -0.0001223628692, + -0.0001609704641, -0.0002381856540, -0.0000257383966, +0.0002061181435, + +0.0003219409283, +0.0000580168776, -0.0001544303797, -0.0003348101266, + -0.0002767932489, -0.0003090717300, -0.0003476793249, -0.0003605485232, + -0.0000900843882, +0.0001995780591, +0.0003411392405, +0.0001738396624, + +0.0000000000000, -0.0001415611814, -0.0000643459916, +0.0001158227848, + +0.0001995780591, +0.0001286919831, -0.0000708860759, -0.0001801687764, + -0.0000128691983, +0.0001995780591, +0.0001094936709, +0.0000772151899, + +0.0000451476793, +0.0000580168776, -0.0000322784810, -0.0000966244726, + -0.0002896624473, -0.0002962025316, -0.0002962025316, -0.0000580168776, + +0.0001352320675, +0.0003219409283, +0.0002767932489, +0.0002510548523, + +0.0001932489451, +0.0001094936709, -0.0001867088608, -0.0002381856540, + -0.0000643459916, +0.0002318565401, +0.0004056962025, +0.0003348101266, + +0.0000643459916, -0.0001029535865, -0.0001995780591, -0.0003154008439, + -0.0003540084388, -0.0002639240506, -0.0000257383966, +0.0000386075949, + +0.0001094936709, +0.0001995780591, +0.0003154008439, +0.0000128691983, + -0.0002510548523, -0.0002704641350, +0.0000000000000, +0.0000900843882, + +0.0001801687764, +0.0000580168776, -0.0000065400844, -0.0001481012658, + -0.0001738396624, -0.0000900843882, +0.0001094936709, +0.0001094936709, + +0.0002962025316, +0.0004829113924, +0.0004829113924, +0.0002639240506, + +0.0000000000000, -0.0002704641350, -0.0003605485232, -0.0003540084388, + -0.0002575949367, +0.0000580168776, +0.0002124472574, +0.0001481012658, + +0.0000257383966, +0.0001094936709, +0.0001995780591, +0.0003476793249, + +0.0003090717300, +0.0002447257384, -0.0001029535865, -0.0002962025316, + -0.0002833333333, +0.0000900843882, +0.0003154008439, +0.0003605485232, + +0.0001544303797, +0.0000128691983, -0.0001609704641, -0.0000900843882, + +0.0000257383966, +0.0002704641350, +0.0003348101266, +0.0002510548523, + +0.0002447257384, +0.0003476793249, +0.0002447257384, -0.0000065400844, + -0.0001672995781, -0.0001609704641, -0.0000580168776, -0.0000257383966, + +0.0000708860759, +0.0001352320675, +0.0002189873418, +0.0002189873418, + +0.0002510548523, +0.0000772151899, -0.0000065400844, -0.0000900843882, + +0.0000257383966, -0.0000194092827, +0.0000900843882, +0.0002318565401, + +0.0003411392405, +0.0000065400844, -0.0003025316456, -0.0004700421941, + -0.0003025316456, -0.0001223628692, +0.0001672995781, +0.0002833333333, + +0.0002318565401, +0.0001544303797, +0.0000772151899, -0.0002189873418, + -0.0003862869198, -0.0001932489451, +0.0000322784810, +0.0000966244726, + +0.0001352320675, +0.0003154008439, +0.0002704641350, -0.0000322784810, + -0.0004506329114, -0.0004700421941, -0.0003219409283, -0.0000772151899, + -0.0001094936709, -0.0001352320675, -0.0001995780591, -0.0001286919831, + -0.0002510548523, -0.0002704641350, -0.0003411392405, -0.0002253164557, + -0.0000837552743, +0.0001544303797, +0.0002767932489, +0.0004571729958, + +0.0003670886076, +0.0001223628692, -0.0001094936709, -0.0001932489451, + -0.0003348101266, -0.0003928270042, -0.0001932489451, +0.0000000000000, + +0.0000772151899, +0.0001415611814, +0.0002510548523, +0.0001158227848, + -0.0000837552743, -0.0003411392405, -0.0002833333333, -0.0000837552743, + +0.0001158227848, -0.0000128691983, -0.0000451476793, -0.0000386075949, + +0.0000837552743, +0.0000065400844, -0.0000065400844, -0.0001286919831, + -0.0001286919831, -0.0001352320675, +0.0000128691983, +0.0000966244726, + +0.0001801687764, +0.0001158227848, +0.0000065400844, -0.0002381856540, + -0.0004056962025, -0.0003605485232, -0.0001481012658, +0.0000643459916, + +0.0001286919831, +0.0001223628692, -0.0000386075949, -0.0002253164557, + -0.0002896624473, +0.0000386075949, +0.0003411392405, +0.0005343881857, + +0.0003862869198, +0.0001481012658, -0.0002575949367, -0.0004185654008, + -0.0004248945148, -0.0002447257384, -0.0002189873418, +0.0000451476793, + +0.0002704641350, +0.0003862869198, +0.0002124472574, +0.0000000000000, + -0.0002253164557, -0.0001995780591, -0.0000966244726, +0.0000643459916, + +0.0000900843882, -0.0000128691983, -0.0001738396624, -0.0001801687764, + +0.0000322784810, +0.0001932489451, +0.0002381856540, +0.0001738396624, + +0.0000580168776, -0.0002253164557, -0.0003025316456, -0.0002318565401, + -0.0000580168776, -0.0000643459916, -0.0000837552743, -0.0002639240506, + -0.0001867088608, -0.0001932489451, -0.0001415611814, +0.0000128691983, + +0.0003090717300, +0.0004120253165, +0.0004377637131, +0.0001609704641, + +0.0000000000000, -0.0001286919831, -0.0001995780591, -0.0001415611814, + +0.0000257383966, +0.0000966244726, +0.0000451476793, +0.0000257383966, + +0.0001352320675, +0.0001932489451, +0.0000580168776, -0.0000128691983, + -0.0001481012658, -0.0001029535865, +0.0000065400844, +0.0000643459916, + -0.0001352320675, -0.0001995780591, -0.0001867088608, +0.0001672995781, + +0.0005021097046, +0.0006567510549, +0.0004700421941, +0.0003090717300, + +0.0000708860759, -0.0000322784810, -0.0001738396624, -0.0000966244726, + +0.0000451476793, +0.0001286919831, +0.0000322784810, -0.0000065400844, + +0.0000257383966, +0.0000194092827, -0.0000580168776, -0.0000643459916, + +0.0000837552743, +0.0002124472574, +0.0002253164557, +0.0000000000000, + -0.0001158227848, -0.0002253164557, -0.0001415611814, -0.0000065400844, + +0.0002510548523, +0.0002639240506, +0.0001415611814, -0.0001094936709, + -0.0001672995781, -0.0002381856540, -0.0001286919831, -0.0000451476793, + +0.0001286919831, +0.0001801687764, +0.0001672995781, -0.0000128691983, + -0.0001352320675, -0.0002061181435, -0.0000966244726, +0.0000580168776, + +0.0001415611814, +0.0000772151899, +0.0000065400844, +0.0000643459916, + +0.0001158227848, +0.0001995780591, +0.0001352320675, +0.0000257383966, + -0.0000708860759, +0.0000000000000, -0.0000257383966, +0.0000386075949, + +0.0000451476793, +0.0000643459916, -0.0001158227848, -0.0000900843882, + +0.0000194092827, +0.0001158227848, -0.0000837552743, -0.0001672995781, + -0.0001544303797, +0.0000580168776, +0.0001672995781, +0.0001481012658, + +0.0000000000000, -0.0000257383966, +0.0000128691983, +0.0001995780591, + +0.0003090717300, +0.0001609704641, -0.0000708860759, -0.0002833333333, + -0.0003282700422, -0.0001481012658, +0.0001352320675, +0.0001029535865, + +0.0000643459916, -0.0000643459916, -0.0001867088608, -0.0003154008439, + -0.0001352320675, +0.0000065400844, +0.0001801687764, +0.0001094936709, + +0.0000386075949, -0.0001544303797, -0.0002833333333, -0.0002962025316, + -0.0000837552743, -0.0000194092827, +0.0000966244726, +0.0002253164557, + +0.0002639240506, +0.0001094936709, -0.0000772151899, -0.0002510548523, + -0.0003154008439, -0.0002061181435, -0.0000708860759, +0.0000643459916, + +0.0001223628692, +0.0001223628692, -0.0000194092827, -0.0000451476793, + -0.0001094936709, -0.0000128691983, +0.0000322784810, +0.0001672995781, + +0.0000900843882, -0.0000257383966, -0.0001995780591, -0.0000900843882, + -0.0000128691983, +0.0000065400844, -0.0000837552743, +0.0000000000000, + +0.0001481012658, +0.0003670886076, +0.0004443037975, +0.0003540084388, + +0.0002061181435, +0.0001801687764, +0.0001867088608, +0.0000322784810, + -0.0002833333333, -0.0005149789030, -0.0003734177215, -0.0001481012658, + +0.0001158227848, +0.0001867088608, +0.0001223628692, +0.0000065400844, + +0.0001932489451, +0.0002639240506, +0.0002510548523, +0.0001094936709, + +0.0001609704641, +0.0001029535865, -0.0000580168776, -0.0003605485232, + -0.0003476793249, -0.0002124472574, -0.0000194092827, +0.0000643459916, + +0.0000451476793, -0.0001609704641, -0.0002447257384, -0.0002189873418, + -0.0002253164557, -0.0001158227848, +0.0000966244726, +0.0003090717300, + +0.0003928270042, +0.0004443037975, +0.0002639240506, -0.0000194092827, + -0.0003154008439, -0.0002896624473, -0.0001544303797, +0.0000708860759, + +0.0000000000000, -0.0001094936709, -0.0002510548523, -0.0001352320675, + +0.0000322784810, +0.0002189873418, +0.0001223628692, +0.0000128691983, + -0.0001158227848, -0.0001029535865, -0.0000772151899, -0.0000322784810, + -0.0000194092827, +0.0000194092827, +0.0001094936709, +0.0001415611814, + +0.0000257383966, -0.0001029535865, +0.0000065400844, +0.0000322784810, + -0.0000065400844, -0.0000837552743, +0.0000322784810, +0.0001094936709, + +0.0002447257384, +0.0001352320675, +0.0000643459916, -0.0000580168776, + -0.0000966244726, -0.0001544303797, -0.0000386075949, -0.0000900843882, + -0.0001352320675, -0.0001738396624, -0.0000194092827, +0.0001223628692, + +0.0002447257384, +0.0001995780591, +0.0001094936709, +0.0000322784810, + +0.0000194092827, +0.0000451476793, +0.0000708860759, +0.0000966244726, + -0.0000322784810, -0.0001415611814, -0.0003605485232, -0.0003219409283, + -0.0001415611814, +0.0000900843882, +0.0001609704641, +0.0003605485232, + +0.0003154008439, +0.0002447257384, -0.0000065400844, -0.0002061181435, + -0.0004443037975, -0.0003090717300, -0.0000257383966, +0.0002704641350, + +0.0002061181435, +0.0000322784810, -0.0002124472574, -0.0003348101266, + -0.0003476793249, -0.0001738396624, +0.0000386075949, +0.0001223628692, + +0.0000900843882, +0.0000065400844, +0.0000194092827, +0.0000451476793, + +0.0001481012658, +0.0000386075949, +0.0000128691983, -0.0000194092827, + +0.0000000000000, -0.0001029535865, +0.0000128691983, +0.0000451476793, + +0.0001544303797, +0.0001158227848, +0.0001609704641, +0.0000966244726, + +0.0001029535865, -0.0000772151899, -0.0001544303797, -0.0002767932489, + -0.0002061181435, -0.0000065400844, +0.0002381856540, +0.0002510548523, + +0.0000772151899, -0.0001223628692, -0.0002253164557, -0.0001481012658, + +0.0000128691983, +0.0001932489451, +0.0001352320675, +0.0000772151899, + +0.0000386075949, +0.0001415611814, +0.0000194092827, -0.0000257383966, + -0.0001158227848, -0.0001029535865, -0.0002381856540, -0.0000643459916, + +0.0001223628692, +0.0003090717300, +0.0001932489451, +0.0001029535865, + -0.0001094936709, -0.0000900843882, -0.0000514767932, +0.0000065400844, + +0.0000000000000, +0.0000837552743, +0.0000451476793, -0.0001029535865, + -0.0001932489451, -0.0001286919831, +0.0000065400844, +0.0000708860759, + +0.0001415611814, +0.0001223628692, +0.0001415611814, -0.0000128691983, + -0.0000451476793, -0.0000900843882, -0.0000257383966, -0.0001029535865, + +0.0000128691983, +0.0000386075949, +0.0001544303797, +0.0001029535865, + +0.0000966244726, -0.0000194092827, +0.0000194092827, -0.0000451476793, + -0.0000643459916, -0.0000772151899, +0.0000900843882, +0.0002124472574, + +0.0002510548523, +0.0001738396624, +0.0000386075949, -0.0001094936709, + -0.0001738396624, -0.0000514767932, -0.0000065400844, +0.0000257383966, + +0.0000708860759, +0.0001481012658, +0.0000194092827, +0.0001029535865, + +0.0001158227848, +0.0001415611814, +0.0000900843882, +0.0001223628692, + -0.0000643459916, -0.0001738396624, -0.0002061181435, +0.0000966244726, + +0.0002447257384, +0.0001672995781, -0.0001223628692, -0.0001932489451, + -0.0000643459916, +0.0001158227848, +0.0000966244726, +0.0000257383966, + -0.0000643459916, -0.0000900843882, -0.0000194092827, +0.0000128691983, + +0.0001094936709, +0.0001481012658, +0.0001672995781, +0.0000837552743, + +0.0001286919831, +0.0000772151899, +0.0000643459916, +0.0000000000000, + +0.0000580168776, -0.0001158227848, -0.0002510548523, -0.0002962025316, + -0.0001415611814, -0.0000837552743, +0.0000580168776, +0.0000966244726, + +0.0001352320675, +0.0001352320675, +0.0002253164557, +0.0001995780591, + -0.0000322784810, -0.0002704641350, -0.0002575949367, -0.0000386075949, + +0.0000900843882, +0.0001094936709, -0.0000451476793, -0.0001286919831, + -0.0001609704641, -0.0001029535865, -0.0001158227848, +0.0000900843882, + +0.0002318565401, +0.0002318565401, -0.0000194092827, -0.0001223628692, + -0.0001094936709, +0.0000128691983, -0.0000900843882, -0.0001932489451, + -0.0002767932489, -0.0001609704641, +0.0000000000000, +0.0001609704641, + +0.0001029535865, -0.0000708860759, -0.0001801687764, -0.0001481012658, + +0.0000000000000, +0.0000580168776, +0.0000772151899, +0.0000708860759, + +0.0001223628692, -0.0000194092827, -0.0001672995781, -0.0003799578059, + -0.0003670886076, -0.0002575949367, -0.0000194092827, +0.0000643459916, + +0.0001867088608, +0.0001158227848, +0.0000514767932, -0.0000128691983, + +0.0000000000000, -0.0000257383966, +0.0000772151899, +0.0000966244726, + +0.0000322784810, +0.0000194092827, +0.0000386075949, +0.0000194092827, + -0.0000194092827, -0.0000257383966, -0.0000386075949, +0.0000708860759, + +0.0001223628692, +0.0002124472574, +0.0001544303797, +0.0001094936709, + +0.0000000000000, +0.0000194092827, -0.0000708860759, -0.0000966244726, + -0.0001286919831, +0.0000322784810, +0.0000966244726, +0.0001029535865, + -0.0000580168776, -0.0000772151899, -0.0000643459916, -0.0000065400844, + +0.0000322784810, +0.0001223628692, +0.0002124472574, +0.0002318565401, + +0.0001094936709, -0.0001094936709, -0.0001609704641, -0.0001158227848, + +0.0000386075949, +0.0001029535865, +0.0001286919831, +0.0000128691983, + +0.0000000000000, -0.0000772151899, -0.0000257383966, -0.0000580168776, + -0.0000514767932, -0.0001481012658, -0.0001158227848, -0.0001995780591, + -0.0001609704641, -0.0001223628692, +0.0000514767932, +0.0001415611814, + +0.0002189873418, +0.0001932489451, +0.0001158227848, -0.0000194092827, + -0.0001415611814, -0.0002253164557, -0.0003025316456, -0.0002189873418, + -0.0001029535865, +0.0000194092827, -0.0000322784810, -0.0000580168776, + -0.0001481012658, -0.0000194092827, +0.0000966244726, +0.0002767932489, + +0.0001352320675, +0.0000514767932, -0.0000708860759, -0.0001094936709, + -0.0001995780591, -0.0000580168776, +0.0000322784810, +0.0001094936709, + +0.0000708860759, +0.0000900843882, +0.0000257383966, +0.0000065400844, + +0.0000643459916, +0.0000643459916, +0.0000257383966, +0.0000322784810, + +0.0001223628692, +0.0001158227848, +0.0001801687764, +0.0001415611814, + +0.0000580168776, -0.0002318565401, -0.0003025316456, -0.0002639240506, + +0.0000386075949, +0.0001609704641, +0.0001738396624, +0.0000000000000, + +0.0000451476793, +0.0001094936709, +0.0002189873418, +0.0000772151899, + -0.0000580168776, -0.0001672995781, -0.0001544303797, -0.0000708860759, + +0.0001415611814, +0.0003928270042, +0.0004829113924, +0.0003219409283, + -0.0000257383966, -0.0002833333333, -0.0003605485232, -0.0001544303797, + -0.0000514767932, +0.0000000000000, -0.0000643459916, -0.0000194092827, + -0.0001029535865, -0.0000257383966, +0.0000065400844, +0.0001544303797, + +0.0001352320675, +0.0001738396624, +0.0001029535865, +0.0002124472574, + +0.0002833333333, +0.0002639240506, +0.0000837552743, -0.0000128691983, + -0.0001223628692, -0.0001932489451, -0.0002253164557, -0.0002381856540, + -0.0001672995781, -0.0001867088608, -0.0001544303797, -0.0000580168776, + +0.0002061181435, +0.0002896624473, +0.0002704641350, +0.0000128691983, + -0.0000966244726, -0.0002447257384, -0.0001995780591, -0.0002253164557, + -0.0000837552743, -0.0000451476793, +0.0000257383966, -0.0000194092827, + +0.0000708860759, +0.0001029535865, +0.0000451476793, -0.0001932489451, + -0.0002318565401, -0.0000514767932, +0.0000900843882, +0.0001223628692, + +0.0000451476793, -0.0000451476793, -0.0001609704641, -0.0001481012658, + -0.0001481012658, -0.0000065400844, +0.0000065400844, +0.0001158227848, + +0.0001609704641, +0.0002896624473, +0.0001867088608, +0.0001029535865, + -0.0001158227848, -0.0002318565401, -0.0003670886076, -0.0001672995781, + +0.0000772151899, +0.0003734177215, +0.0003799578059, +0.0001932489451, + -0.0000257383966, -0.0000772151899, -0.0000580168776, +0.0000000000000, + +0.0000000000000, +0.0000000000000, +0.0001094936709, +0.0000643459916, + +0.0000000000000, -0.0000257383966, +0.0000772151899, +0.0000000000000, + +0.0000386075949, +0.0000322784810, +0.0001481012658, +0.0000966244726, + +0.0000772151899, -0.0000708860759, -0.0000900843882, -0.0001801687764, + -0.0000772151899, +0.0000000000000, +0.0000900843882, +0.0000322784810, + +0.0000386075949, +0.0000128691983, -0.0000580168776, -0.0001029535865, + -0.0000708860759, +0.0000194092827, +0.0000322784810, +0.0000322784810, + -0.0000386075949, +0.0000065400844, +0.0000065400844, +0.0000772151899, + -0.0000322784810, -0.0000386075949, -0.0000386075949, +0.0001094936709, + +0.0000000000000, -0.0000643459916, -0.0001672995781, -0.0000580168776, + -0.0000708860759, -0.0000514767932, -0.0000322784810, +0.0000966244726, + +0.0000708860759, +0.0000194092827, +0.0000580168776, +0.0001223628692, + +0.0000900843882, -0.0000128691983, -0.0000194092827, -0.0000837552743, + -0.0001223628692, -0.0001672995781, -0.0000772151899, -0.0000451476793, + +0.0001223628692, +0.0001544303797, +0.0002253164557, +0.0000837552743, + -0.0000900843882, -0.0004185654008, -0.0004056962025, -0.0001738396624, + +0.0002575949367, +0.0004314345992, +0.0004571729958, +0.0003025316456, + +0.0001544303797, -0.0000386075949, -0.0001672995781, -0.0001223628692, + +0.0000580168776, +0.0002061181435, +0.0000966244726, -0.0000128691983, + -0.0001029535865, -0.0000772151899, -0.0001352320675, -0.0000708860759, + -0.0000194092827, +0.0001544303797, +0.0001223628692, +0.0000772151899, + -0.0001094936709, -0.0001415611814, -0.0001672995781, -0.0000643459916, + -0.0000065400844, +0.0001352320675, +0.0001352320675, +0.0001223628692, + +0.0000580168776, -0.0000065400844, -0.0000966244726, -0.0001029535865, + +0.0000000000000, +0.0000772151899, +0.0000772151899, -0.0001029535865, + -0.0001415611814, -0.0000772151899, +0.0000966244726, +0.0001094936709, + +0.0001481012658, -0.0000065400844, -0.0001158227848, -0.0002447257384, + -0.0001738396624, -0.0000900843882, +0.0001158227848, +0.0001481012658, + +0.0001094936709, -0.0000194092827, -0.0000322784810, +0.0000000000000, + +0.0000580168776, +0.0000966244726, +0.0001352320675, +0.0001609704641, + +0.0000772151899, +0.0000000000000, -0.0000708860759, -0.0000257383966, + -0.0000451476793, +0.0000000000000, -0.0000386075949, +0.0000065400844, + -0.0000194092827, +0.0000708860759, +0.0001223628692, +0.0002124472574, + +0.0000900843882, +0.0000000000000, -0.0001094936709, -0.0001352320675, + -0.0001995780591, -0.0001801687764, -0.0001094936709, +0.0000128691983, + +0.0000580168776, +0.0000322784810, +0.0000580168776, +0.0000580168776, + +0.0000000000000, -0.0000900843882, -0.0000065400844, +0.0000000000000, + +0.0000580168776, +0.0000580168776, +0.0000772151899, -0.0001094936709, + -0.0001801687764, -0.0001801687764, -0.0000451476793, -0.0000065400844, + +0.0000643459916, -0.0000257383966, -0.0001094936709, -0.0000966244726, + +0.0000451476793, +0.0001094936709, +0.0000643459916, -0.0000451476793, + -0.0001029535865, -0.0000580168776, -0.0000065400844, +0.0000966244726, + +0.0000708860759, +0.0000000000000, -0.0001094936709, -0.0000643459916, + -0.0000257383966, +0.0001029535865, +0.0000900843882, +0.0000580168776, + -0.0000514767932, -0.0000451476793, -0.0000580168776, -0.0000128691983, + -0.0000708860759, -0.0000514767932, +0.0000000000000, +0.0000900843882, + +0.0000900843882, +0.0000514767932, +0.0000194092827, +0.0000257383966, + +0.0000580168776, +0.0000257383966, +0.0000257383966, +0.0000322784810, + +0.0000900843882, +0.0000065400844, -0.0000194092827, -0.0000708860759, + +0.0000194092827, +0.0000257383966, +0.0000451476793, +0.0000065400844, + +0.0000514767932, +0.0000257383966, +0.0000580168776, +0.0000257383966, + +0.0000128691983, -0.0000257383966, -0.0000514767932, -0.0000643459916, + -0.0000451476793, -0.0000451476793, -0.0000514767932, -0.0000128691983, + +0.0000000000000, +0.0000257383966, +0.0000322784810, +0.0000900843882, + +0.0000708860759, +0.0000643459916, -0.0000128691983, -0.0000065400844, + -0.0000065400844, +0.0000128691983, -0.0000708860759, -0.0000772151899, + -0.0000643459916, +0.0000000000000, +0.0000000000000, +0.0000194092827, + +0.0000257383966, +0.0000580168776, +0.0000580168776, +0.0000514767932, + +0.0000128691983, +0.0000000000000, +0.0000514767932, +0.0000514767932, + +0.0000322784810, -0.0000128691983, -0.0000257383966, -0.0000386075949, + -0.0000065400844, -0.0000065400844, +0.0000128691983, -0.0000128691983, + -0.0000194092827, -0.0000451476793, +0.0000000000000, +0.0000386075949, + +0.0000900843882, +0.0000514767932, +0.0000194092827, -0.0000128691983, + -0.0000257383966, -0.0000322784810, -0.0000065400844, +0.0000065400844, + +0.0000194092827, +0.0000322784810, +0.0000128691983, +0.0000000000000, + -0.0000128691983, -0.0000194092827, -0.0000386075949, -0.0000128691983, + -0.0000065400844, +0.0000128691983, +0.0000194092827, +0.0000386075949, + +0.0000065400844, +0.0000000000000, -0.0000257383966, -0.0000257383966, + -0.0000322784810, -0.0000065400844, +0.0000000000000, +0.0000000000000, + -0.0000065400844, -0.0000065400844, +0.0000000000000, +0.0000065400844, + +0.0000065400844, +0.0000000000000, +0.0000000000000, +0.0000000000000, + +0.0000065400844, +0.0000000000000, +0.0000065400844, +0.0000000000000, + +0.0000000000000, -0.0000065400844, +0.0000000000000, +0.0000000000000, + +0.0000000000000, +0.0000000000000, +0.0000065400844, +0.0000000000000, + +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, + +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000 +}; diff --git a/plugins/LadspaEffect/swh/impulses/08-fender-bassman-sm57.h b/plugins/LadspaEffect/swh/impulses/08-fender-bassman-sm57.h new file mode 100644 index 000000000..98eea65da --- /dev/null +++ b/plugins/LadspaEffect/swh/impulses/08-fender-bassman-sm57.h @@ -0,0 +1,681 @@ +float fender_bassman_sm57[] = { + +0.0000000000000, +0.0000449579832, +0.0000128151261, -0.0001153361345, + -0.0002693277311, -0.0003590336134, -0.0003655462185, -0.0002884453782, + -0.0001602941176, +0.0000000000000, +0.0001153361345, +0.0001859243697, + +0.0001924369748, +0.0001409663866, +0.0000640756303, -0.0000128151261, + -0.0001153361345, -0.0001859243697, -0.0002308823529, -0.0002565126050, + -0.0002500000000, -0.0002565126050, -0.0002756302521, -0.0002821428571, + -0.0002756302521, -0.0002308823529, -0.0001281512605, +0.0000256302521, + +0.0001924369748, +0.0003462184874, +0.0003334033613, +0.0002180672269, + -0.0000449579832, -0.0003012605042, -0.0005256302521, -0.0006859243697, + -0.0005962184874, -0.0003077731092, -0.0000256302521, +0.0001281512605, + +0.0001537815126, +0.0000321428571, -0.0001665966387, -0.0004359243697, + -0.0006987394958, -0.0009489495798, -0.0011348739496, -0.0012245798319, + -0.0011861344538, -0.0010705882353, -0.0009745798319, -0.0008974789916, + -0.0008974789916, -0.0009936974790, -0.0012630252101, -0.0016220588235, + -0.0021157563025, -0.0025581932773, -0.0030710084034, -0.0041800420168, + -0.0044046218487, -0.0047764705882, -0.0060266806723, -0.0043403361345, + -0.0068535714286, -0.0092002100840, +0.0065073529412, +0.0229844537815, + +0.0012758403361, -0.0708571428571, -0.1080808823529, -0.0428848739496, + +0.0436991596639, +0.1150949579832, +0.1932865546218, +0.2100712184874, + +0.1543701680672, +0.0668308823529, -0.0485075630252, -0.1251220588235, + -0.1295138655462, -0.1012529411765, -0.0552651260504, -0.0291905462185, + -0.0313831932773, -0.0201953781513, +0.0107388655462, +0.0452827731092, + +0.0654846638655, +0.0629586134454, +0.0473151260504, +0.0160987394958, + -0.0137264705882, -0.0213943277311, -0.0224073529412, -0.0183426470588, + -0.0132905462185, -0.0229201680672, -0.0319537815126, -0.0224523109244, + -0.0011605042017, +0.0215739495798, +0.0296264705882, +0.0185861344538, + +0.0064497899160, -0.0021029411765, -0.0081678571429, -0.0119953781513, + -0.0151369747899, -0.0166693277311, -0.0204006302521, -0.0228304621849, + -0.0166052521008, -0.0114632352941, -0.0075012605042, +0.0034107142857, + +0.0076165966387, +0.0018529411765, -0.0051289915966, -0.0087384453782, + -0.0112453781513, -0.0142073529412, -0.0075460084034, +0.0063214285714, + +0.0117647058824, +0.0099951680672, +0.0041800420168, -0.0043852941176, + -0.0070266806723, -0.0033338235294, +0.0031863445378, +0.0085974789916, + +0.0045840336134, -0.0054945378151, -0.0126686974790, -0.0120596638655, + -0.0082512605042, -0.0073600840336, -0.0069241596639, -0.0072831932773, + -0.0107004201681, -0.0084949579832, -0.0000897058824, +0.0078344537815, + +0.0141048319328, +0.0115081932773, +0.0023207983193, -0.0059176470588, + -0.0143163865546, -0.0163934873950, -0.0099630252101, -0.0062957983193, + -0.0034044117647, +0.0000321428571, +0.0009233193277, +0.0023336134454, + +0.0011092436975, -0.0018976890756, -0.0029619747899, -0.0069369747899, + -0.0117006302521, -0.0120081932773, -0.0109441176471, -0.0083474789916, + -0.0024042016807, +0.0054558823529, +0.0126237394958, +0.0138161764706, + +0.0075397058824, -0.0015964285714, -0.0086871848739, -0.0100207983193, + -0.0038147058824, +0.0052764705882, +0.0093861344538, +0.0071357142857, + +0.0020323529412, -0.0052186974790, -0.0128352941176, -0.0163743697479, + -0.0148676470588, -0.0108478991597, -0.0060586134454, -0.0013464285714, + +0.0022632352941, +0.0046546218487, +0.0060523109244, +0.0058726890756, + +0.0037890756303, +0.0010705882353, +0.0007886554622, +0.0030516806723, + +0.0051995798319, +0.0066804621849, +0.0071035714286, +0.0062254201681, + +0.0048724789916, +0.0021413865546, -0.0017502100840, -0.0046930672269, + -0.0066548319328, -0.0078922268908, -0.0077897058824, -0.0068472689076, + -0.0060073529412, -0.0053918067227, -0.0034684873950, +0.0000449579832, + +0.0027504201681, +0.0043340336134, +0.0054174369748, +0.0042571428571, + +0.0017117647059, +0.0009680672269, +0.0026542016807, +0.0052764705882, + +0.0065779411765, +0.0069819327731, +0.0074434873950, +0.0061739495798, + +0.0045006302521, +0.0039750000000, +0.0021348739496, -0.0001924369748, + -0.0018273109244, -0.0021029411765, +0.0002180672269, +0.0023850840336, + +0.0033338235294, +0.0053470588235, +0.0071997899160, +0.0073600840336, + +0.0065201680672, +0.0050455882353, +0.0049109243697, +0.0052636554622, + +0.0036672268908, +0.0017630252101, +0.0008655462185, +0.0005128151261, + +0.0003268907563, -0.0004102941176, +0.0003525210084, +0.0031800420168, + +0.0049046218487, +0.0054558823529, +0.0052252100840, +0.0039044117647, + +0.0031415966387, +0.0030453781513, +0.0031672268908, +0.0038081932773, + +0.0036159663866, +0.0025581932773, +0.0014361344538, -0.0002756302521, + -0.0008718487395, +0.0008334033613, +0.0035262605042, +0.0061739495798, + +0.0074884453782, +0.0069563025210, +0.0061292016807, +0.0055586134454, + +0.0046546218487, +0.0036159663866, +0.0030388655462, +0.0029170168067, + +0.0013142857143, -0.0019489495798, -0.0030260504202, -0.0006602941176, + +0.0014745798319, +0.0015002100840, +0.0010321428571, +0.0010577731092, + +0.0006539915966, +0.0003655462185, +0.0021861344538, +0.0053214285714, + +0.0066420168067, +0.0049815126050, +0.0021157563025, +0.0001346638655, + -0.0004680672269, -0.0006027310924, -0.0007052521008, -0.0001537815126, + +0.0012758403361, +0.0029363445378, +0.0039556722689, +0.0034878151261, + +0.0020836134454, +0.0002949579832, -0.0019617647059, -0.0032569327731, + -0.0021092436975, +0.0010964285714, +0.0043531512605, +0.0055201680672, + +0.0039878151261, +0.0008142857143, -0.0026478991597, -0.0042827731092, + -0.0029491596639, +0.0000193277311, +0.0021991596639, +0.0025195378151, + +0.0020516806723, +0.0016798319328, +0.0010577731092, +0.0000449579832, + -0.0005642857143, -0.0009552521008, -0.0013079831933, -0.0008655462185, + +0.0006411764706, +0.0025516806723, +0.0036800420168, +0.0029491596639, + +0.0009361344538, -0.0011861344538, -0.0027310924370, -0.0031031512605, + -0.0025451680672, -0.0024682773109, -0.0032184873950, -0.0037121848739, + -0.0030838235294, -0.0018273109244, -0.0005449579832, +0.0006155462185, + +0.0016411764706, +0.0014361344538, -0.0004487394958, -0.0026670168067, + -0.0038787815126, -0.0032441176471, -0.0010705882353, +0.0009680672269, + +0.0017502100840, +0.0010514705882, -0.0006283613445, -0.0018014705882, + -0.0017758403361, -0.0006218487395, +0.0008334033613, +0.0014424369748, + +0.0005705882353, -0.0013783613445, -0.0036672268908, -0.0051995798319, + -0.0057189075630, -0.0058663865546, -0.0049880252101, -0.0023978991597, + +0.0005834033613, +0.0025516806723, +0.0030773109244, +0.0025966386555, + +0.0018657563025, +0.0001924369748, -0.0019233193277, -0.0025838235294, + -0.0024876050420, -0.0024810924370, -0.0022054621849, -0.0018079831933, + -0.0007180672269, +0.0004102941176, -0.0000897058824, -0.0013464285714, + -0.0021991596639, -0.0027569327731, -0.0025838235294, -0.0025581932773, + -0.0025132352941, -0.0021092436975, -0.0026478991597, -0.0036350840336, + -0.0031544117647, -0.0016476890756, +0.0000000000000, +0.0012693277311, + +0.0013592436975, +0.0007630252101, +0.0000193277311, -0.0007949579832, + -0.0012823529412, -0.0012951680672, -0.0007949579832, +0.0001281512605, + +0.0004231092437, +0.0001602941176, -0.0001474789916, -0.0009552521008, + -0.0018014705882, -0.0023144957983, -0.0029235294118, -0.0032890756303, + -0.0026542016807, -0.0015514705882, -0.0007693277311, -0.0003077731092, + -0.0003205882353, -0.0006859243697, -0.0004424369748, +0.0007758403361, + +0.0020579831933, +0.0022695378151, +0.0017823529412, +0.0018336134454, + +0.0018014705882, +0.0010065126050, +0.0001537815126, -0.0004808823529, + -0.0005705882353, +0.0003140756303, +0.0012117647059, +0.0016283613445, + +0.0015323529412, +0.0005642857143, -0.0007693277311, -0.0021413865546, + -0.0031544117647, -0.0030516806723, -0.0022760504202, -0.0009745798319, + +0.0005834033613, +0.0009361344538, +0.0002308823529, -0.0003140756303, + -0.0004168067227, +0.0002565126050, +0.0013848739496, +0.0022567226891, + +0.0024235294118, +0.0015579831933, -0.0000962184874, -0.0015579831933, + -0.0020773109244, -0.0013783613445, +0.0000962184874, +0.0016283613445, + +0.0026926470588, +0.0030197478992, +0.0021285714286, +0.0002500000000, + -0.0012630252101, -0.0014617647059, -0.0004231092437, +0.0008590336134, + +0.0015707983193, +0.0013592436975, +0.0005449579832, -0.0003012605042, + -0.0010130252101, -0.0013720588235, -0.0010386554622, -0.0000897058824, + +0.0007565126050, +0.0010514705882, +0.0012245798319, +0.0014361344538, + +0.0010899159664, +0.0005000000000, +0.0003911764706, +0.0006924369748, + +0.0011668067227, +0.0014168067227, +0.0011989495798, +0.0005000000000, + -0.0002949579832, -0.0005577731092, -0.0000449579832, +0.0008655462185, + +0.0017567226891, +0.0020516806723, +0.0014552521008, -0.0000193277311, + -0.0018014705882, -0.0025451680672, -0.0019361344538, -0.0006090336134, + +0.0011155462185, +0.0023464285714, +0.0023722689076, +0.0015195378151, + +0.0001474789916, -0.0011092436975, -0.0016989495798, -0.0015771008403, + -0.0008527310924, +0.0000193277311, +0.0008077731092, +0.0016220588235, + +0.0019105042017, +0.0015964285714, +0.0010642857143, +0.0006346638655, + +0.0003397058824, -0.0002371848739, -0.0012245798319, -0.0020260504202, + -0.0022888655462, -0.0017886554622, -0.0005834033613, +0.0008911764706, + +0.0020388655462, +0.0023850840336, +0.0021029411765, +0.0015130252101, + +0.0009424369748, +0.0005384453782, -0.0000193277311, -0.0008783613445, + -0.0016411764706, -0.0016926470588, -0.0006411764706, +0.0005962184874, + +0.0013911764706, +0.0018464285714, +0.0017886554622, +0.0011283613445, + +0.0000897058824, -0.0009361344538, -0.0013464285714, -0.0010642857143, + -0.0003268907563, +0.0005962184874, +0.0010386554622, +0.0006987394958, + -0.0000512605042, -0.0008271008403, -0.0013976890756, -0.0016283613445, + -0.0015386554622, -0.0012245798319, -0.0009680672269, -0.0008911764706, + -0.0007821428571, -0.0006602941176, -0.0005065126050, -0.0000962184874, + +0.0002180672269, +0.0003077731092, +0.0003462184874, +0.0003205882353, + +0.0002565126050, +0.0000000000000, -0.0005128151261, -0.0009489495798, + -0.0014873949580, -0.0019170168067, -0.0017502100840, -0.0012565126050, + -0.0006731092437, -0.0002628151261, -0.0003525210084, -0.0008142857143, + -0.0011733193277, -0.0010834033613, -0.0008142857143, -0.0006924369748, + -0.0009233193277, -0.0016411764706, -0.0021798319328, -0.0020132352941, + -0.0012502100840, +0.0000577731092, +0.0011924369748, +0.0014873949580, + +0.0010386554622, +0.0001346638655, -0.0004871848739, -0.0007693277311, + -0.0011411764706, -0.0014168067227, -0.0014939075630, -0.0013911764706, + -0.0009617647059, -0.0008142857143, -0.0010321428571, -0.0010705882353, + -0.0012630252101, -0.0017373949580, -0.0020516806723, -0.0021285714286, + -0.0020323529412, -0.0018014705882, -0.0013464285714, -0.0005256302521, + +0.0001537815126, +0.0003974789916, +0.0004359243697, +0.0001859243697, + -0.0001346638655, -0.0001346638655, -0.0000065126050, +0.0000000000000, + -0.0001281512605, -0.0003718487395, -0.0006218487395, -0.0007436974790, + -0.0006796218487, -0.0003911764706, +0.0001409663866, +0.0007115546218, + +0.0009102941176, +0.0005514705882, -0.0003397058824, -0.0010577731092, + -0.0010642857143, -0.0009039915966, -0.0008399159664, -0.0006987394958, + -0.0005193277311, -0.0004296218487, -0.0005642857143, -0.0006796218487, + -0.0007052521008, -0.0007949579832, -0.0007308823529, -0.0005705882353, + -0.0006283613445, -0.0006539915966, -0.0005193277311, -0.0004039915966, + -0.0003140756303, -0.0001794117647, -0.0000768907563, +0.0000834033613, + +0.0005128151261, +0.0007502100840, +0.0003462184874, -0.0003077731092, + -0.0005514705882, -0.0003205882353, -0.0002884453782, -0.0005128151261, + -0.0004039915966, -0.0001987394958, -0.0002565126050, -0.0005193277311, + -0.0008846638655, -0.0009873949580, -0.0007436974790, -0.0005321428571, + -0.0004424369748, -0.0005321428571, -0.0008077731092, -0.0010002100840, + -0.0009680672269, -0.0006668067227, -0.0000640756303, +0.0005065126050, + +0.0007436974790, +0.0006090336134, +0.0001731092437, -0.0001859243697, + -0.0002371848739, -0.0000640756303, +0.0000962184874, +0.0001346638655, + -0.0000449579832, -0.0002052521008, -0.0003783613445, -0.0006796218487, + -0.0006987394958, -0.0002693277311, +0.0002821428571, +0.0006859243697, + +0.0007308823529, +0.0005256302521, +0.0003012605042, -0.0001859243697, + -0.0007502100840, -0.0007821428571, -0.0002180672269, +0.0003783613445, + +0.0003911764706, +0.0000000000000, -0.0001153361345, +0.0000705882353, + +0.0003140756303, +0.0004296218487, +0.0001924369748, -0.0000065126050, + +0.0000962184874, +0.0002052521008, +0.0001602941176, -0.0000449579832, + -0.0001474789916, +0.0001409663866, +0.0003655462185, +0.0003077731092, + +0.0002500000000, +0.0001859243697, +0.0000000000000, -0.0002371848739, + -0.0002693277311, +0.0000193277311, +0.0004168067227, +0.0007243697479, + +0.0008271008403, +0.0006027310924, +0.0003974789916, +0.0003334033613, + +0.0001474789916, +0.0001025210084, +0.0003655462185, +0.0006218487395, + +0.0004936974790, -0.0000128151261, -0.0004871848739, -0.0005256302521, + -0.0002565126050, +0.0001346638655, +0.0005193277311, +0.0008014705882, + +0.0008974789916, +0.0007758403361, +0.0005065126050, +0.0003397058824, + +0.0004296218487, +0.0007115546218, +0.0010449579832, +0.0011605042017, + +0.0008462184874, +0.0002693277311, -0.0001474789916, -0.0000705882353, + +0.0001859243697, +0.0002115546218, +0.0003525210084, +0.0007565126050, + +0.0010514705882, +0.0010193277311, +0.0006796218487, +0.0004424369748, + +0.0004552521008, +0.0004296218487, +0.0003268907563, +0.0001794117647, + +0.0000065126050, +0.0000128151261, +0.0001794117647, +0.0005128151261, + +0.0009680672269, +0.0012373949580, +0.0012502100840, +0.0010130252101, + +0.0006283613445, +0.0003846638655, +0.0003397058824, +0.0003783613445, + +0.0006796218487, +0.0011733193277, +0.0015964285714, +0.0016989495798, + +0.0014939075630, +0.0012052521008, +0.0008846638655, +0.0006218487395, + +0.0004296218487, +0.0001218487395, -0.0001731092437, -0.0002436974790, + -0.0001346638655, +0.0001537815126, +0.0003974789916, +0.0003846638655, + +0.0003846638655, +0.0004808823529, +0.0004487394958, +0.0002756302521, + +0.0001537815126, +0.0002756302521, +0.0004487394958, +0.0004168067227, + +0.0004168067227, +0.0004743697479, +0.0003655462185, +0.0001924369748, + +0.0001409663866, +0.0003077731092, +0.0006346638655, +0.0010002100840, + +0.0013079831933, +0.0012565126050, +0.0008399159664, +0.0003140756303, + -0.0001474789916, -0.0003012605042, -0.0000834033613, +0.0003140756303, + +0.0008205882353, +0.0010771008403, +0.0009361344538, +0.0006474789916, + +0.0003012605042, -0.0001409663866, -0.0004359243697, -0.0002884453782, + +0.0001665966387, +0.0005065126050, +0.0005834033613, +0.0002884453782, + -0.0002565126050, -0.0007308823529, -0.0008911764706, -0.0005899159664, + -0.0000449579832, +0.0003397058824, +0.0005962184874, +0.0008205882353, + +0.0008718487395, +0.0006796218487, +0.0003655462185, +0.0002243697479, + +0.0003268907563, +0.0004615546218, +0.0004743697479, +0.0003462184874, + -0.0000256302521, -0.0004359243697, -0.0007180672269, -0.0008974789916, + -0.0008205882353, -0.0004936974790, -0.0001025210084, +0.0002693277311, + +0.0003718487395, +0.0001090336134, -0.0003268907563, -0.0006859243697, + -0.0007052521008, -0.0004102941176, -0.0000512605042, +0.0002243697479, + +0.0001987394958, -0.0002180672269, -0.0006027310924, -0.0005705882353, + -0.0000577731092, +0.0005577731092, +0.0008590336134, +0.0006155462185, + -0.0000834033613, -0.0006796218487, -0.0005384453782, +0.0002115546218, + +0.0011027310924, +0.0015195378151, +0.0010642857143, +0.0000640756303, + -0.0009424369748, -0.0016605042017, -0.0016542016807, -0.0009489495798, + -0.0000256302521, +0.0006924369748, +0.0009424369748, +0.0007502100840, + +0.0003140756303, -0.0003140756303, -0.0008974789916, -0.0010705882353, + -0.0007243697479, -0.0002308823529, -0.0001409663866, -0.0001602941176, + +0.0000705882353, +0.0001602941176, +0.0000834033613, +0.0001474789916, + +0.0002884453782, +0.0002821428571, -0.0000897058824, -0.0006283613445, + -0.0007373949580, -0.0002308823529, +0.0004680672269, +0.0007886554622, + +0.0005771008403, +0.0000962184874, -0.0003718487395, -0.0005771008403, + -0.0004039915966, -0.0000449579832, +0.0001281512605, -0.0000512605042, + -0.0005065126050, -0.0009361344538, -0.0011027310924, -0.0008974789916, + -0.0005128151261, -0.0002565126050, -0.0001474789916, -0.0000128151261, + +0.0000962184874, +0.0000065126050, -0.0001409663866, -0.0000449579832, + +0.0004487394958, +0.0010065126050, +0.0010386554622, +0.0005193277311, + +0.0000256302521, +0.0000705882353, +0.0003718487395, +0.0004039915966, + +0.0000834033613, -0.0002308823529, -0.0004296218487, -0.0005962184874, + -0.0006155462185, -0.0001987394958, +0.0006218487395, +0.0014105042017, + +0.0016605042017, +0.0013014705882, +0.0006924369748, +0.0001090336134, + -0.0002243697479, -0.0001218487395, +0.0003525210084, +0.0007630252101, + +0.0006796218487, +0.0001025210084, -0.0005065126050, -0.0006859243697, + -0.0003974789916, -0.0000065126050, +0.0001987394958, +0.0003718487395, + +0.0007693277311, +0.0012758403361, +0.0015386554622, +0.0014361344538, + +0.0010321428571, +0.0003783613445, -0.0003205882353, -0.0007436974790, + -0.0006859243697, -0.0002115546218, +0.0003590336134, +0.0006987394958, + +0.0007052521008, +0.0005577731092, +0.0005128151261, +0.0006155462185, + +0.0005834033613, +0.0002884453782, -0.0000128151261, -0.0000577731092, + +0.0001987394958, +0.0004871848739, +0.0006155462185, +0.0006796218487, + +0.0005834033613, +0.0002821428571, +0.0000193277311, -0.0001859243697, + -0.0003974789916, -0.0004102941176, -0.0000768907563, +0.0004743697479, + +0.0009361344538, +0.0011027310924, +0.0009680672269, +0.0006668067227, + +0.0003205882353, +0.0000193277311, -0.0000640756303, +0.0000321428571, + +0.0000962184874, +0.0002052521008, +0.0004424369748, +0.0006283613445, + +0.0005962184874, +0.0005321428571, +0.0006411764706, +0.0007693277311, + +0.0007565126050, +0.0006027310924, +0.0003397058824, +0.0000256302521, + -0.0002628151261, -0.0003397058824, -0.0001409663866, +0.0000577731092, + +0.0001346638655, +0.0000449579832, -0.0000768907563, -0.0000768907563, + -0.0001153361345, -0.0000640756303, +0.0002628151261, +0.0006218487395, + +0.0007693277311, +0.0006411764706, +0.0003846638655, +0.0001474789916, + -0.0001090336134, -0.0002565126050, -0.0001409663866, +0.0001025210084, + +0.0002436974790, +0.0002115546218, +0.0001346638655, +0.0000384453782, + -0.0001409663866, -0.0003397058824, -0.0003974789916, -0.0003077731092, + -0.0002371848739, -0.0001924369748, -0.0001731092437, -0.0001731092437, + -0.0000705882353, +0.0000384453782, +0.0000193277311, -0.0000256302521, + -0.0001409663866, -0.0003334033613, -0.0004552521008, -0.0004296218487, + -0.0002436974790, -0.0000256302521, +0.0001474789916, +0.0002436974790, + +0.0001346638655, -0.0000512605042, -0.0001987394958, -0.0003205882353, + -0.0003205882353, -0.0002243697479, -0.0001474789916, -0.0000640756303, + -0.0000640756303, -0.0002052521008, -0.0004102941176, -0.0005321428571, + -0.0004424369748, -0.0002243697479, +0.0000449579832, +0.0002628151261, + +0.0002371848739, +0.0000000000000, -0.0001987394958, -0.0002693277311, + -0.0003012605042, -0.0003077731092, -0.0001859243697, -0.0000834033613, + -0.0000962184874, -0.0000962184874, -0.0000193277311, +0.0000577731092, + +0.0000321428571, -0.0000768907563, -0.0001794117647, -0.0002821428571, + -0.0004102941176, -0.0004743697479, -0.0003846638655, -0.0001987394958, + -0.0000256302521, +0.0000384453782, -0.0000705882353, -0.0003525210084, + -0.0006027310924, -0.0006346638655, -0.0004102941176, -0.0000577731092, + +0.0002693277311, +0.0004424369748, +0.0004168067227, +0.0002884453782, + +0.0001025210084, -0.0001090336134, -0.0002756302521, -0.0004552521008, + -0.0007180672269, -0.0008399159664, -0.0006731092437, -0.0002693277311, + +0.0002243697479, +0.0005256302521, +0.0005321428571, +0.0002371848739, + -0.0003268907563, -0.0008142857143, -0.0009233193277, -0.0006346638655, + -0.0000897058824, +0.0003590336134, +0.0004168067227, +0.0001987394958, + -0.0000577731092, -0.0001731092437, -0.0001409663866, -0.0001090336134, + -0.0001153361345, -0.0002693277311, -0.0006924369748, -0.0009745798319, + -0.0008205882353, -0.0004359243697, +0.0000000000000, +0.0002884453782, + +0.0002180672269, -0.0000640756303, -0.0004231092437, -0.0007052521008, + -0.0006731092437, -0.0005065126050, -0.0003077731092, -0.0001346638655, + -0.0001409663866, -0.0001281512605, -0.0000128151261, +0.0000128151261, + -0.0001090336134, -0.0004231092437, -0.0006731092437, -0.0006859243697, + -0.0006474789916, -0.0005384453782, -0.0003397058824, -0.0001346638655, + +0.0000321428571, +0.0001218487395, +0.0001859243697, +0.0002500000000, + +0.0000640756303, -0.0003655462185, -0.0007565126050, -0.0008271008403, + -0.0006346638655, -0.0003590336134, -0.0000962184874, +0.0000256302521, + -0.0000128151261, -0.0001794117647, -0.0004424369748, -0.0006218487395, + -0.0005321428571, -0.0002371848739, +0.0000705882353, +0.0001665966387, + -0.0000321428571, -0.0003655462185, -0.0006090336134, -0.0006411764706, + -0.0005065126050, -0.0003012605042, -0.0001346638655, -0.0001537815126, + -0.0003525210084, -0.0006090336134, -0.0007180672269, -0.0005384453782, + -0.0001409663866, +0.0002052521008, +0.0002821428571, +0.0001346638655, + -0.0000768907563, -0.0003140756303, -0.0003974789916, -0.0002565126050, + -0.0000768907563, +0.0000000000000, -0.0000962184874, -0.0002756302521, + -0.0003974789916, -0.0004102941176, -0.0003846638655, -0.0004296218487, + -0.0005000000000, -0.0005384453782, -0.0004936974790, -0.0002500000000, + +0.0000768907563, +0.0002052521008, +0.0001602941176, +0.0000384453782, + -0.0001602941176, -0.0004552521008, -0.0006859243697, -0.0006731092437, + -0.0003462184874, +0.0000193277311, +0.0001346638655, +0.0000000000000, + -0.0002436974790, -0.0005065126050, -0.0006090336134, -0.0005384453782, + -0.0002821428571, +0.0000577731092, +0.0002500000000, +0.0002628151261, + +0.0001859243697, +0.0000640756303, -0.0000577731092, -0.0002052521008, + -0.0003783613445, -0.0004552521008, -0.0003655462185, -0.0001602941176, + +0.0000256302521, +0.0001153361345, +0.0000705882353, -0.0000897058824, + -0.0002565126050, -0.0003012605042, -0.0002436974790, -0.0000962184874, + +0.0000512605042, +0.0001731092437, +0.0002115546218, +0.0000384453782, + -0.0002243697479, -0.0004168067227, -0.0005193277311, -0.0004359243697, + -0.0001602941176, +0.0001090336134, +0.0001859243697, +0.0000065126050, + -0.0002693277311, -0.0004743697479, -0.0005065126050, -0.0002500000000, + +0.0001537815126, +0.0003911764706, +0.0003590336134, +0.0001474789916, + -0.0001474789916, -0.0003655462185, -0.0003077731092, -0.0000128151261, + +0.0002500000000, +0.0003012605042, +0.0001346638655, -0.0000897058824, + -0.0002308823529, -0.0002628151261, -0.0001731092437, -0.0000577731092, + +0.0000000000000, -0.0000128151261, -0.0000962184874, -0.0001537815126, + -0.0001090336134, -0.0000321428571, +0.0000321428571, +0.0000449579832, + -0.0000897058824, -0.0002821428571, -0.0003462184874, -0.0002949579832, + -0.0001794117647, +0.0000065126050, +0.0002500000000, +0.0004487394958, + +0.0004936974790, +0.0004039915966, +0.0003462184874, +0.0003655462185, + +0.0003655462185, +0.0003397058824, +0.0002243697479, +0.0000000000000, + -0.0002436974790, -0.0003846638655, -0.0003718487395, -0.0002693277311, + -0.0002052521008, -0.0001474789916, -0.0000449579832, -0.0000128151261, + -0.0000834033613, -0.0001602941176, -0.0001859243697, -0.0001924369748, + -0.0001924369748, -0.0001602941176, -0.0000705882353, +0.0000128151261, + +0.0000128151261, -0.0000128151261, -0.0000449579832, -0.0000897058824, + -0.0000834033613, -0.0000065126050, +0.0000449579832, +0.0000449579832, + -0.0000321428571, -0.0001537815126, -0.0001859243697, -0.0000897058824, + +0.0000705882353, +0.0001924369748, +0.0002308823529, +0.0001665966387, + -0.0000256302521, -0.0002308823529, -0.0002308823529, -0.0000897058824, + +0.0000256302521, +0.0000640756303, -0.0000065126050, -0.0001346638655, + -0.0002052521008, -0.0002052521008, -0.0000321428571, +0.0002756302521, + +0.0005000000000, +0.0004936974790, +0.0003077731092, +0.0000962184874, + -0.0000449579832, -0.0001602941176, -0.0001924369748, -0.0000577731092, + +0.0000577731092, +0.0001090336134, +0.0001859243697, +0.0002756302521, + +0.0002756302521, +0.0002180672269, +0.0001987394958, +0.0002052521008, + +0.0001153361345, +0.0000128151261, -0.0000193277311, -0.0000449579832, + -0.0000256302521, +0.0000128151261, +0.0000384453782, +0.0000449579832, + +0.0000705882353, +0.0001794117647, +0.0002565126050, +0.0002308823529, + +0.0002180672269, +0.0002052521008, +0.0001537815126, +0.0001090336134, + +0.0000768907563, +0.0001025210084, +0.0001602941176, +0.0001409663866, + +0.0001346638655, +0.0001794117647, +0.0002308823529, +0.0002884453782, + +0.0003397058824, +0.0003525210084, +0.0002949579832, +0.0001794117647, + +0.0001346638655, +0.0001731092437, +0.0002052521008, +0.0002628151261, + +0.0003268907563, +0.0002565126050, +0.0000577731092, -0.0000384453782, + +0.0000000000000, +0.0001025210084, +0.0001665966387, +0.0001731092437, + +0.0001090336134, +0.0000256302521, -0.0000065126050, +0.0000705882353, + +0.0002052521008, +0.0002884453782, +0.0003334033613, +0.0002500000000, + +0.0000449579832, -0.0000768907563, -0.0001090336134, -0.0001025210084, + -0.0000128151261, +0.0001218487395, +0.0002115546218, +0.0002756302521, + +0.0003590336134, +0.0004168067227, +0.0003590336134, +0.0002115546218, + +0.0000834033613, +0.0000000000000, -0.0000321428571, +0.0000321428571, + +0.0001474789916, +0.0001859243697, +0.0001218487395, -0.0000768907563, + -0.0003077731092, -0.0003525210084, -0.0001924369748, +0.0000256302521, + +0.0002628151261, +0.0004424369748, +0.0005256302521, +0.0005705882353, + +0.0005514705882, +0.0004168067227, +0.0002180672269, -0.0000321428571, + -0.0003077731092, -0.0004296218487, -0.0003525210084, -0.0001474789916, + +0.0000705882353, +0.0002436974790, +0.0004039915966, +0.0005128151261, + +0.0005577731092, +0.0005771008403, +0.0005128151261, +0.0003590336134, + +0.0001474789916, -0.0000834033613, -0.0002693277311, -0.0003268907563, + -0.0002756302521, -0.0001025210084, +0.0001025210084, +0.0002628151261, + +0.0003911764706, +0.0004231092437, +0.0003077731092, +0.0002115546218, + +0.0002436974790, +0.0003140756303, +0.0003846638655, +0.0003846638655, + +0.0002565126050, +0.0000384453782, -0.0001153361345, -0.0001346638655, + -0.0000384453782, +0.0001090336134, +0.0002436974790, +0.0002436974790, + +0.0001731092437, +0.0001409663866, +0.0001409663866, +0.0001153361345, + +0.0000577731092, +0.0000193277311, +0.0000000000000, -0.0000768907563, + -0.0001218487395, -0.0000962184874, -0.0000256302521, +0.0000705882353, + +0.0000577731092, -0.0000897058824, -0.0002628151261, -0.0003590336134, + -0.0002628151261, +0.0000256302521, +0.0003590336134, +0.0006474789916, + +0.0008077731092, +0.0006796218487, +0.0002371848739, -0.0003205882353, + -0.0007052521008, -0.0007052521008, -0.0003846638655, +0.0000321428571, + +0.0003655462185, +0.0005449579832, +0.0005193277311, +0.0003012605042, + +0.0000897058824, +0.0000512605042, +0.0000897058824, +0.0000384453782, + +0.0000000000000, +0.0000384453782, +0.0001281512605, +0.0002500000000, + +0.0003525210084, +0.0003590336134, +0.0003462184874, +0.0002949579832, + +0.0001218487395, -0.0000577731092, -0.0001409663866, -0.0000640756303, + +0.0001218487395, +0.0002500000000, +0.0002308823529, +0.0001218487395, + +0.0000577731092, +0.0000768907563, +0.0000834033613, +0.0000512605042, + +0.0000512605042, +0.0001665966387, +0.0003012605042, +0.0003655462185, + +0.0004039915966, +0.0004168067227, +0.0003974789916, +0.0003655462185, + +0.0002693277311, +0.0001281512605, -0.0000065126050, -0.0001602941176, + -0.0002436974790, -0.0002115546218, -0.0000256302521, +0.0002756302521, + +0.0005193277311, +0.0005962184874, +0.0005449579832, +0.0003655462185, + +0.0001409663866, -0.0000577731092, -0.0002180672269, -0.0002884453782, + -0.0002436974790, -0.0001218487395, +0.0000640756303, +0.0003077731092, + +0.0004871848739, +0.0004936974790, +0.0003462184874, +0.0001153361345, + -0.0001409663866, -0.0003846638655, -0.0004871848739, -0.0003911764706, + -0.0001665966387, +0.0000834033613, +0.0003077731092, +0.0004231092437, + +0.0003590336134, +0.0001665966387, +0.0000193277311, -0.0000384453782, + -0.0000768907563, -0.0001090336134, -0.0001281512605, -0.0000577731092, + +0.0001218487395, +0.0002756302521, +0.0002693277311, +0.0001602941176, + +0.0000128151261, -0.0001474789916, -0.0002693277311, -0.0002180672269, + -0.0000384453782, +0.0001281512605, +0.0002756302521, +0.0003590336134, + +0.0002565126050, +0.0000384453782, -0.0000768907563, +0.0000000000000, + +0.0001537815126, +0.0001859243697, +0.0000768907563, -0.0000768907563, + -0.0002052521008, -0.0001859243697, -0.0000256302521, +0.0001409663866, + +0.0002243697479, +0.0001859243697, +0.0000768907563, +0.0000000000000, + -0.0000128151261, +0.0000065126050, +0.0000640756303, +0.0000897058824, + +0.0000705882353, +0.0000705882353, +0.0001281512605, +0.0001474789916, + +0.0000768907563, -0.0000512605042, -0.0001409663866, -0.0001602941176, + -0.0001346638655, -0.0000834033613, +0.0000000000000, +0.0000705882353, + +0.0001346638655, +0.0002180672269, +0.0003077731092, +0.0003268907563, + +0.0002371848739, +0.0000962184874, -0.0000065126050, -0.0000834033613, + -0.0001537815126, -0.0001794117647, -0.0001153361345, +0.0000065126050, + +0.0001665966387, +0.0002949579832, +0.0003718487395, +0.0003655462185, + +0.0002756302521, +0.0001153361345, -0.0001218487395, -0.0003462184874, + -0.0004231092437, -0.0003655462185, -0.0002115546218, -0.0000449579832, + +0.0000384453782, +0.0000640756303, +0.0000193277311, -0.0000768907563, + -0.0001731092437, -0.0001731092437, -0.0000768907563, +0.0000640756303, + +0.0001537815126, +0.0002052521008, +0.0002115546218, +0.0000962184874, + -0.0000897058824, -0.0002565126050, -0.0003268907563, -0.0002693277311, + -0.0001794117647, -0.0001218487395, -0.0000384453782, +0.0000321428571, + +0.0000897058824, +0.0001346638655, +0.0001025210084, -0.0000128151261, + -0.0001731092437, -0.0003334033613, -0.0004424369748, -0.0004359243697, + -0.0003012605042, -0.0000577731092, +0.0001665966387, +0.0002565126050, + +0.0002628151261, +0.0002052521008, +0.0000321428571, -0.0001987394958, + -0.0003974789916, -0.0004936974790, -0.0004359243697, -0.0002565126050, + -0.0000321428571, +0.0001025210084, +0.0000640756303, -0.0000512605042, + -0.0001924369748, -0.0003012605042, -0.0002884453782, -0.0001665966387, + -0.0000256302521, +0.0000640756303, +0.0000640756303, +0.0000128151261, + +0.0000000000000, +0.0000000000000, +0.0000000000000, -0.0000834033613, + -0.0002371848739, -0.0003590336134, -0.0003911764706, -0.0003012605042, + -0.0000834033613, +0.0001602941176, +0.0003012605042, +0.0002436974790, + -0.0000193277311, -0.0003140756303, -0.0004102941176, -0.0002949579832, + -0.0001090336134, +0.0000000000000, +0.0000000000000, -0.0000449579832, + -0.0000768907563, -0.0001281512605, -0.0001859243697, -0.0001859243697, + -0.0001474789916, -0.0001731092437, -0.0002436974790, -0.0002500000000, + -0.0001537815126, -0.0000384453782, +0.0000384453782, +0.0000962184874, + +0.0000834033613, -0.0000384453782, -0.0001794117647, -0.0002436974790, + -0.0002436974790, -0.0002500000000, -0.0002180672269, -0.0001281512605, + -0.0000449579832, -0.0000577731092, -0.0001153361345, -0.0001474789916, + -0.0001474789916, -0.0001090336134, -0.0000384453782, +0.0000193277311, + +0.0000512605042, +0.0000640756303, +0.0000384453782, -0.0000640756303, + -0.0001859243697, -0.0002821428571, -0.0003397058824, -0.0003012605042, + -0.0001602941176, +0.0000000000000, +0.0000897058824, +0.0000577731092, + -0.0000256302521, -0.0001153361345, -0.0001474789916, -0.0001537815126, + -0.0001474789916, -0.0001281512605, -0.0000640756303, -0.0000128151261, + -0.0000384453782, -0.0001218487395, -0.0001665966387, -0.0001218487395, + -0.0000512605042, -0.0000193277311, -0.0000128151261, +0.0000128151261, + +0.0000512605042, +0.0000577731092, +0.0000577731092, +0.0000512605042, + +0.0000384453782, +0.0000065126050, -0.0000768907563, -0.0002115546218, + -0.0003268907563, -0.0003846638655, -0.0003268907563, -0.0001602941176, + +0.0000256302521, +0.0001794117647, +0.0002500000000, +0.0001602941176, + -0.0000321428571, -0.0001859243697, -0.0002243697479, -0.0001794117647, + -0.0001409663866, -0.0001153361345, -0.0001218487395, -0.0001731092437, + -0.0002115546218, -0.0001987394958, -0.0001731092437, -0.0001346638655, + -0.0000640756303, +0.0000128151261, +0.0000384453782, +0.0000512605042, + +0.0000768907563, +0.0000962184874, +0.0000449579832, -0.0000962184874, + -0.0002821428571, -0.0004231092437, -0.0004871848739, -0.0004552521008, + -0.0003268907563, -0.0002115546218, -0.0001281512605, -0.0000193277311, + +0.0000640756303, +0.0000834033613, +0.0000321428571, -0.0000256302521, + +0.0000065126050, +0.0000640756303, +0.0000705882353, +0.0000193277311, + -0.0000321428571, -0.0000321428571, -0.0000065126050, -0.0000193277311, + -0.0000384453782, -0.0000384453782, -0.0000321428571, -0.0000449579832, + -0.0001218487395, -0.0002180672269, -0.0002821428571, -0.0002436974790, + -0.0001281512605, -0.0000705882353, -0.0001090336134, -0.0001665966387, + -0.0001602941176, -0.0000897058824, +0.0000000000000, +0.0001281512605, + +0.0003140756303, +0.0003718487395, +0.0002371848739, +0.0000577731092, + -0.0000962184874, -0.0001794117647, -0.0001537815126, -0.0000768907563, + -0.0000193277311, -0.0000256302521, -0.0000512605042, -0.0000384453782, + -0.0000256302521, -0.0000384453782, -0.0000512605042, -0.0000640756303, + -0.0001218487395, -0.0001665966387, -0.0001537815126, -0.0001281512605, + -0.0000834033613, +0.0000000000000, +0.0000705882353, +0.0001153361345, + +0.0001537815126, +0.0001665966387, +0.0001731092437, +0.0001474789916, + +0.0000834033613, +0.0000256302521, +0.0000000000000, +0.0000000000000, + +0.0000000000000, -0.0000512605042, -0.0001218487395, -0.0001218487395, + -0.0000834033613, -0.0000384453782, +0.0000000000000, +0.0000256302521, + +0.0000577731092, +0.0000705882353, +0.0000449579832, -0.0000065126050, + -0.0000834033613, -0.0001602941176, -0.0001602941176, -0.0001025210084, + -0.0000449579832, +0.0000065126050, +0.0000193277311, +0.0000000000000, + -0.0000065126050, -0.0000065126050, +0.0000000000000, +0.0000065126050, + -0.0000321428571, -0.0001090336134, -0.0001537815126, -0.0001346638655, + -0.0000384453782, +0.0000768907563, +0.0001346638655, +0.0001346638655, + +0.0000962184874, +0.0000512605042, +0.0000577731092, +0.0000640756303, + +0.0000512605042, +0.0000449579832, +0.0000193277311, +0.0000000000000, + +0.0000128151261, +0.0000384453782, +0.0000897058824, +0.0001281512605, + +0.0000705882353, -0.0000321428571, -0.0001090336134, -0.0001346638655, + -0.0000897058824, +0.0000000000000, +0.0001090336134, +0.0001409663866, + +0.0000705882353, -0.0000065126050, +0.0000000000000, +0.0001025210084, + +0.0001987394958, +0.0002756302521, +0.0002884453782, +0.0001924369748, + +0.0000256302521, -0.0000897058824, -0.0001665966387, -0.0002436974790, + -0.0002500000000, -0.0001537815126, -0.0000193277311, +0.0000705882353, + +0.0001090336134, +0.0001090336134, +0.0000897058824, +0.0000768907563, + +0.0000834033613, +0.0000897058824, +0.0000962184874, +0.0001153361345, + +0.0000897058824, +0.0000256302521, +0.0000000000000, -0.0000193277311, + -0.0000897058824, -0.0001537815126, -0.0001346638655, -0.0000705882353, + +0.0000065126050, +0.0000705882353, +0.0000768907563, +0.0000705882353, + +0.0000640756303, +0.0000512605042, +0.0000768907563, +0.0001090336134, + +0.0001090336134, +0.0000897058824, +0.0000834033613, +0.0000834033613, + +0.0000256302521, -0.0000834033613, -0.0001409663866, -0.0001346638655, + -0.0000897058824, -0.0000065126050, +0.0000897058824, +0.0001731092437, + +0.0002115546218, +0.0001731092437, +0.0000897058824, +0.0000640756303, + +0.0001025210084, +0.0001218487395, +0.0001090336134, +0.0001025210084, + +0.0001090336134, +0.0000768907563, +0.0000449579832, +0.0000768907563, + +0.0001474789916, +0.0001987394958, +0.0002115546218, +0.0001474789916, + +0.0000449579832, +0.0000321428571, +0.0001025210084, +0.0001409663866, + +0.0000705882353, -0.0000962184874, -0.0002243697479, -0.0002115546218, + -0.0000834033613, +0.0001218487395, +0.0002693277311, +0.0002436974790, + +0.0000962184874, -0.0000193277311, -0.0000449579832, -0.0000193277311, + +0.0000065126050, +0.0000256302521, +0.0000193277311, -0.0000321428571, + -0.0001090336134, -0.0001346638655, -0.0000897058824, -0.0000065126050, + +0.0000449579832, +0.0000577731092, +0.0000449579832, +0.0000449579832, + +0.0000577731092, +0.0000962184874, +0.0001537815126, +0.0001602941176, + +0.0001409663866, +0.0001474789916, +0.0001924369748, +0.0002115546218, + +0.0001794117647, +0.0001153361345, +0.0000193277311, -0.0000897058824, + -0.0001537815126, -0.0001153361345, -0.0000128151261, +0.0000640756303, + +0.0000640756303, +0.0000256302521, +0.0000065126050, +0.0000000000000, + -0.0000321428571, -0.0001218487395, -0.0002243697479, -0.0002628151261, + -0.0001859243697, +0.0000000000000, +0.0001924369748, +0.0002884453782, + +0.0002693277311, +0.0001731092437, +0.0000256302521, -0.0000897058824, + -0.0001537815126, -0.0001153361345, +0.0000065126050, +0.0001346638655, + +0.0002180672269, +0.0002243697479, +0.0001859243697, +0.0001281512605, + +0.0000640756303, -0.0000065126050, -0.0000962184874, -0.0001602941176, + -0.0001602941176, -0.0000897058824, +0.0000256302521, +0.0001474789916, + +0.0002308823529, +0.0002565126050, +0.0001924369748, +0.0000705882353, + +0.0000000000000, +0.0000065126050, +0.0000577731092, +0.0001025210084, + +0.0001218487395, +0.0001025210084, +0.0000512605042, -0.0000065126050, + -0.0000128151261, +0.0000193277311, +0.0000128151261, -0.0000193277311, + -0.0000256302521, +0.0000193277311, +0.0001346638655, +0.0002756302521, + +0.0003462184874, +0.0003268907563, +0.0002308823529, +0.0000640756303, + -0.0001090336134, -0.0001924369748, -0.0001153361345, +0.0000512605042, + +0.0001924369748, +0.0002180672269, +0.0001537815126, +0.0000512605042, + -0.0000065126050, +0.0000000000000, +0.0000834033613, +0.0002052521008, + +0.0002821428571, +0.0002565126050, +0.0001602941176, +0.0000000000000, + -0.0001218487395, -0.0001025210084, +0.0000256302521, +0.0001924369748, + +0.0003012605042, +0.0003205882353, +0.0002884453782, +0.0002308823529, + +0.0001731092437, +0.0001474789916, +0.0001474789916, +0.0001346638655, + +0.0000768907563, -0.0000065126050, -0.0000768907563, -0.0000834033613, + -0.0000449579832, +0.0000193277311, +0.0001025210084, +0.0001602941176, + +0.0001474789916, +0.0000193277311, -0.0001474789916, -0.0002371848739, + -0.0001924369748, -0.0000065126050, +0.0002180672269, +0.0003783613445, + +0.0003783613445, +0.0002180672269, +0.0000321428571, -0.0000768907563, + -0.0000834033613, -0.0000449579832, -0.0000321428571, -0.0000128151261, + +0.0000193277311, +0.0000834033613, +0.0001731092437, +0.0002565126050, + +0.0002756302521, +0.0001987394958, +0.0000577731092, -0.0000640756303, + -0.0000962184874, -0.0000449579832, +0.0000512605042, +0.0001090336134, + +0.0000768907563, +0.0000000000000, -0.0000577731092, -0.0000384453782, + +0.0000256302521, +0.0000768907563, +0.0000834033613, +0.0000193277311, + -0.0000834033613, -0.0001474789916, -0.0001153361345, +0.0000000000000, + +0.0001025210084, +0.0001281512605, +0.0000834033613, +0.0000193277311, + -0.0000128151261, +0.0000000000000, +0.0000193277311, +0.0000128151261, + -0.0000321428571, -0.0001090336134, -0.0001474789916, -0.0001281512605, + -0.0000768907563, -0.0000065126050, +0.0000768907563, +0.0001218487395, + +0.0000705882353, -0.0000065126050, -0.0000834033613, -0.0001346638655, + -0.0001665966387, -0.0001859243697, -0.0001987394958, -0.0001794117647, + -0.0001153361345, -0.0000128151261, +0.0000321428571, +0.0000449579832, + +0.0000321428571, +0.0000000000000, -0.0000065126050, -0.0000065126050, + +0.0000000000000, +0.0000065126050, -0.0000193277311, -0.0001090336134, + -0.0001859243697, -0.0002180672269, -0.0001665966387, -0.0000577731092, + +0.0000256302521, +0.0000577731092, +0.0000384453782, -0.0000065126050, + -0.0000577731092, -0.0000640756303, -0.0000321428571, +0.0000000000000, + +0.0000193277311, +0.0000000000000, -0.0000577731092, -0.0001218487395, + -0.0001218487395, -0.0000705882353, -0.0000128151261, +0.0000065126050, + -0.0000256302521, -0.0000834033613, -0.0001409663866, -0.0001859243697, + -0.0001987394958, -0.0001731092437, -0.0001281512605, -0.0000640756303, + -0.0000065126050, +0.0000193277311, +0.0000065126050, -0.0000065126050, + +0.0000000000000, +0.0000065126050, -0.0000193277311, -0.0000834033613, + -0.0001474789916, -0.0001409663866, -0.0000449579832, +0.0000577731092, + +0.0001153361345, +0.0001218487395, +0.0000768907563, +0.0000000000000, + -0.0000834033613, -0.0000962184874, +0.0000000000000, +0.0000962184874, + +0.0000834033613, +0.0000000000000, -0.0001025210084, -0.0001731092437, + -0.0001409663866, -0.0000256302521, +0.0001025210084, +0.0002180672269, + +0.0002693277311, +0.0002052521008, +0.0000705882353, -0.0000065126050, + -0.0000128151261, -0.0000128151261, -0.0000128151261, +0.0000065126050, + +0.0000256302521, +0.0000128151261, +0.0000193277311, +0.0000577731092, + +0.0000705882353, +0.0000512605042, +0.0000256302521, +0.0000065126050, + +0.0000193277311, +0.0000640756303, +0.0001537815126, +0.0002115546218, + +0.0001602941176, +0.0000449579832, -0.0000640756303, -0.0001346638655, + -0.0000962184874, +0.0000000000000, +0.0000193277311, -0.0000384453782, + -0.0001474789916, -0.0001924369748, -0.0001090336134, +0.0000384453782, + +0.0001859243697, +0.0002756302521, +0.0002628151261, +0.0001346638655, + -0.0000128151261, -0.0001025210084, -0.0000768907563, -0.0000065126050, + +0.0000321428571, +0.0000000000000, -0.0000512605042, -0.0000834033613, + -0.0000640756303, -0.0000128151261, +0.0000449579832, +0.0000962184874, + +0.0001090336134, +0.0000577731092, -0.0000128151261, -0.0000512605042, + -0.0000256302521, +0.0000193277311, +0.0000512605042, +0.0000834033613, + +0.0000962184874, +0.0000512605042, -0.0000512605042, -0.0001665966387, + -0.0002052521008, -0.0001281512605, +0.0000321428571, +0.0002052521008, + +0.0002500000000, +0.0001537815126, +0.0000000000000, -0.0001474789916, + -0.0002371848739, -0.0001987394958, -0.0001025210084, -0.0000065126050, + +0.0000321428571, +0.0000193277311, -0.0000193277311, -0.0000640756303, + -0.0000768907563, -0.0000768907563, -0.0000640756303, -0.0000384453782, + -0.0000128151261, -0.0000193277311, -0.0000193277311, -0.0000065126050, + +0.0000000000000, -0.0000193277311, -0.0000128151261, +0.0000065126050, + +0.0000193277311, +0.0000256302521, +0.0000256302521, +0.0000000000000, + -0.0000512605042, -0.0001153361345, -0.0001602941176, -0.0001474789916, + -0.0000897058824, +0.0000000000000, +0.0000962184874, +0.0001346638655, + +0.0000834033613, -0.0000128151261, -0.0000897058824, -0.0000834033613, + -0.0000193277311, +0.0000128151261, +0.0000321428571, +0.0000384453782, + +0.0000000000000, -0.0000640756303, -0.0001025210084, -0.0000897058824, + -0.0000640756303, -0.0000512605042, -0.0000512605042, -0.0000577731092, + -0.0000768907563, -0.0000705882353, -0.0000256302521, +0.0000128151261, + +0.0000256302521, +0.0000000000000, -0.0000321428571, -0.0000640756303, + -0.0000897058824, -0.0001153361345, -0.0001346638655, -0.0001281512605, + -0.0000640756303, +0.0000065126050, +0.0000384453782, +0.0000193277311, + -0.0000256302521, -0.0001025210084, -0.0001409663866, -0.0001153361345, + -0.0000640756303, -0.0000193277311, +0.0000128151261, +0.0000384453782, + +0.0000193277311, -0.0000193277311, -0.0000640756303, -0.0000834033613, + -0.0000834033613, -0.0000577731092, +0.0000065126050, +0.0001025210084, + +0.0001537815126, +0.0001346638655, +0.0000640756303, -0.0000321428571, + -0.0000897058824, -0.0000834033613, -0.0000512605042, -0.0000640756303, + -0.0000962184874, -0.0001218487395, -0.0001153361345, -0.0000768907563, + -0.0000193277311, +0.0000256302521, +0.0000193277311, -0.0000512605042, + -0.0001218487395, -0.0001474789916, -0.0001090336134, -0.0000321428571, + +0.0000256302521, +0.0000512605042, +0.0000384453782, +0.0000000000000, + -0.0000449579832, -0.0000705882353, -0.0000768907563, -0.0000768907563, + -0.0000897058824, -0.0000962184874, -0.0000640756303, +0.0000065126050, + +0.0001153361345, +0.0001731092437, +0.0001409663866, +0.0000705882353, + -0.0000193277311, -0.0001090336134, -0.0001474789916, -0.0001218487395, + -0.0000449579832, +0.0000193277311, +0.0000321428571, +0.0000000000000, + -0.0000321428571, -0.0000384453782, -0.0000128151261, +0.0000321428571, + +0.0000577731092, +0.0000577731092, +0.0000000000000, -0.0000962184874, + -0.0001731092437, -0.0001924369748, -0.0001346638655, -0.0000193277311, + +0.0000834033613, +0.0001218487395, +0.0000577731092, -0.0000321428571, + -0.0001153361345, -0.0001537815126, -0.0001218487395, -0.0000321428571, + +0.0000640756303, +0.0001090336134, +0.0000577731092, -0.0000321428571, + -0.0001090336134, -0.0001218487395, -0.0000897058824, -0.0000384453782, + +0.0000321428571, +0.0000768907563, +0.0000449579832, +0.0000065126050, + +0.0000000000000, -0.0000065126050, -0.0000128151261, -0.0000256302521, + -0.0000577731092, -0.0001090336134, -0.0001602941176, -0.0001537815126, + -0.0000834033613, +0.0000000000000, +0.0000705882353, +0.0001090336134, + +0.0001218487395, +0.0001025210084, +0.0000384453782, -0.0000449579832, + -0.0001474789916, -0.0002180672269, -0.0002436974790, -0.0001987394958, + -0.0000897058824, +0.0000384453782, +0.0001346638655, +0.0001346638655, + +0.0000449579832, -0.0000449579832, -0.0000449579832, +0.0000128151261, + +0.0001025210084, +0.0001537815126, +0.0001281512605, +0.0000193277311, + -0.0000962184874, -0.0001665966387, -0.0001537815126, -0.0000577731092, + +0.0000640756303, +0.0001665966387, +0.0001987394958, +0.0001665966387, + +0.0001090336134, +0.0000577731092, +0.0000128151261, -0.0000193277311, + -0.0000321428571, -0.0000256302521, -0.0000321428571, -0.0000384453782, + -0.0000128151261, +0.0000705882353, +0.0001665966387, +0.0001987394958, + +0.0001025210084, -0.0000640756303, -0.0002115546218, -0.0002371848739, + -0.0001474789916, +0.0000000000000, +0.0001090336134, +0.0001537815126, + +0.0001281512605, +0.0000834033613, +0.0000577731092, +0.0000768907563, + +0.0001025210084, +0.0000834033613, +0.0000321428571, -0.0000193277311, + -0.0000256302521, -0.0000065126050, +0.0000193277311, +0.0000449579832, + +0.0000384453782, +0.0000065126050, +0.0000000000000, +0.0000193277311, + +0.0000384453782, +0.0000321428571, +0.0000000000000, -0.0000384453782, + -0.0000449579832, -0.0000384453782, -0.0000065126050, +0.0000065126050, + +0.0000065126050, -0.0000065126050, -0.0000256302521, -0.0000128151261, + +0.0000065126050, +0.0000193277311, +0.0000193277311, +0.0000128151261, + -0.0000065126050, -0.0000321428571, -0.0000640756303, -0.0000640756303, + +0.0000000000000, +0.0001025210084, +0.0001794117647, +0.0001731092437, + +0.0000897058824, -0.0000193277311, -0.0000962184874, -0.0001346638655, + -0.0000768907563, +0.0000384453782, +0.0001537815126, +0.0001794117647, + +0.0001346638655, +0.0000640756303, +0.0000321428571, +0.0000128151261, + +0.0000000000000, -0.0000384453782, -0.0001025210084, -0.0001602941176, + -0.0001602941176, -0.0001153361345, -0.0000256302521, +0.0000640756303, + +0.0001281512605, +0.0001346638655, +0.0001090336134, +0.0000834033613, + +0.0000768907563, +0.0000834033613, +0.0000577731092, +0.0000193277311, + -0.0000256302521, -0.0000897058824, -0.0001090336134, -0.0000768907563, + +0.0000065126050, +0.0001025210084, +0.0001474789916, +0.0001409663866, + +0.0000897058824, -0.0000193277311, -0.0001153361345, -0.0001346638655, + -0.0001090336134, -0.0000640756303, -0.0000065126050, +0.0000577731092, + +0.0001281512605, +0.0001409663866, +0.0001218487395, +0.0001153361345, + +0.0001281512605, +0.0001281512605, +0.0000962184874, +0.0000384453782, + +0.0000000000000, -0.0000128151261, -0.0000065126050, +0.0000128151261, + +0.0000512605042, +0.0000577731092, +0.0000449579832, +0.0000193277311, + +0.0000128151261, +0.0000256302521, +0.0000512605042, +0.0000705882353, + +0.0000640756303, +0.0000128151261, -0.0000256302521, -0.0000193277311, + +0.0000065126050, +0.0000321428571, +0.0000512605042, +0.0000321428571, + -0.0000384453782, -0.0001474789916, -0.0002371848739, -0.0002371848739, + -0.0001409663866, +0.0000256302521, +0.0002115546218, +0.0003205882353, + +0.0003077731092, +0.0002308823529, +0.0001025210084, -0.0000321428571, + -0.0001346638655, -0.0001537815126, -0.0001025210084, -0.0000256302521, + +0.0000512605042, +0.0001025210084, +0.0001090336134, +0.0000768907563, + +0.0000193277311, -0.0000384453782, -0.0000640756303, -0.0000512605042, + -0.0000065126050, +0.0000705882353, +0.0001602941176, +0.0002052521008, + +0.0001474789916, +0.0000577731092, -0.0000128151261, -0.0000640756303, + -0.0000834033613, -0.0000512605042, +0.0000000000000, +0.0000834033613, + +0.0001090336134, +0.0000897058824, +0.0000321428571, -0.0000256302521, + -0.0000768907563, -0.0000640756303, +0.0000000000000, +0.0000512605042, + +0.0000834033613, +0.0000834033613, +0.0000512605042, +0.0000000000000, + -0.0000193277311, -0.0000256302521, +0.0000000000000, +0.0000384453782, + +0.0000768907563, +0.0000768907563, +0.0000384453782, +0.0000000000000, + -0.0000321428571, -0.0000384453782, -0.0000256302521, -0.0000065126050, + -0.0000065126050, -0.0000128151261, -0.0000321428571, -0.0000321428571, + -0.0000193277311, +0.0000000000000, +0.0000193277311, +0.0000193277311, + +0.0000128151261, +0.0000065126050, +0.0000000000000, +0.0000000000000, + +0.0000000000000, +0.0000000000000 +}; diff --git a/plugins/LadspaEffect/swh/impulses/09-fender-bassman-sm57-off.h b/plugins/LadspaEffect/swh/impulses/09-fender-bassman-sm57-off.h new file mode 100644 index 000000000..6ee1384d0 --- /dev/null +++ b/plugins/LadspaEffect/swh/impulses/09-fender-bassman-sm57-off.h @@ -0,0 +1,636 @@ +float fender_bassman_sm57_off[] = { + +0.0000000000000, -0.0000430082256, -0.0000933019976, -0.0001003525264, + -0.0000072855464, +0.0001433607521, +0.0002726204465, +0.0003370152761, + +0.0002940070505, +0.0001576968273, -0.0000359576968, -0.0002366627497, + -0.0003656874266, -0.0003586368978, -0.0002079905993, +0.0000359576968, + +0.0003012925969, +0.0004806110458, +0.0004949471210, +0.0003299647474, + +0.0000216216216, -0.0003156286722, -0.0005666274971, -0.0006383078731, + -0.0005019976498, -0.0001863689777, +0.0001863689777, +0.0005092831962, + +0.0006669800235, +0.0006169212691, +0.0003656874266, +0.0000000000000, + -0.0003873090482, -0.0006742655699, -0.0007673325499, -0.0006526439483, + -0.0003513513514, +0.0000143360752, +0.0003513513514, +0.0005306698002, + +0.0005163337250, +0.0003156286722, +0.0000143360752, -0.0002726204465, + -0.0004662749706, -0.0005092831962, -0.0003943595770, -0.0001936545241, + +0.0000216216216, +0.0001793184489, +0.0002296122209, +0.0001649823737, + +0.0000072855464, -0.0001720329025, -0.0003226792009, -0.0003943595770, + -0.0003586368978, -0.0002079905993, +0.0000072855464, +0.0002509988249, + +0.0004232667450, +0.0004589894242, +0.0003370152761, +0.0000573443008, + -0.0002726204465, -0.0005736780259, -0.0007459459459, -0.0007459459459, + -0.0005666274971, -0.0002940070505, -0.0000072855464, +0.0002007050529, + +0.0003299647474, +0.0003513513514, +0.0003156286722, +0.0002152761457, + +0.0000933019976, -0.0000789659224, -0.0002726204465, -0.0005019976498, + -0.0006742655699, -0.0007673325499, -0.0007099882491, -0.0004232667450, + -0.0003083431257, +0.0002869565217, +0.0004589894242, +0.0002296122209, + +0.0002152761457, +0.0001863689777, -0.0001363102233, -0.0006239717979, + -0.0010615746181, -0.0012766157462, -0.0012622796710, -0.0011189189189, + -0.0008893066980, -0.0008749706228, -0.0009969447709, -0.0014345475911, + -0.0019292596945, -0.0024385428907, -0.0026968272620, -0.0026752056404, + -0.0023595769683, -0.0020296122209, -0.0019652173913, -0.0024242068155, + -0.0032991774383, -0.0051066980024, -0.0045257344301, -0.0081546415981, + -0.0166465334900, -0.0039661574618, +0.0215666274971, +0.0261856639248, + -0.0202399529965, -0.1034658049354, -0.1210662749706, -0.0300441833137, + +0.0768928319624, +0.1659710928320, +0.2350032902468, +0.2266836662750, + +0.1336893066980, +0.0007243243243, -0.1124740305523, -0.1539793184489, + -0.1287259694477, -0.0698928319624, -0.0160871915394, +0.0026681551116, + +0.0083052878966, +0.0236035252644, +0.0398843713278, +0.0491292596945, + +0.0443454759107, +0.0173278495887, -0.0154272620447, -0.0377471210341, + -0.0380627497062, -0.0175287896592, +0.0042601645123, +0.0149396004700, + +0.0137276145711, -0.0024528789659, -0.0160011750881, -0.0101055229142, + -0.0045901292597, -0.0075236192714, -0.0086855464160, -0.0066126909518, + -0.0025819036428, +0.0086065804935, +0.0185760282021, +0.0136556991774, + -0.0019149236193, -0.0162878965922, -0.0242634547591, -0.0263146886016, + -0.0233381903643, -0.0158792009401, -0.0041097532315, +0.0044467685076, + +0.0059386603995, +0.0008032902468, -0.0064907168038, -0.0114037602820, + -0.0178371327850, -0.0234028202115, -0.0192070505288, -0.0031915393655, + +0.0126157461810, +0.0178014101058, +0.0142152761457, +0.0099334900118, + +0.0054794359577, +0.0025388954172, +0.0040235017626, +0.0065913043478, + +0.0047264394830, -0.0047981198590, -0.0182387779083, -0.0285882491187, + -0.0299941245593, -0.0223125734430, -0.0112460634548, -0.0021515863690, + +0.0062110458284, +0.0113964747356, +0.0107654524089, +0.0061896592244, + -0.0007386603995, -0.0063546415981, -0.0092235017626, -0.0102491186839, + -0.0102274970623, -0.0104211515864, -0.0081762632197, -0.0005236192714, + +0.0060030552291, +0.0073945945946, +0.0050420681551, -0.0012049353702, + -0.0071146886016, -0.0116333725029, -0.0146455934195, -0.0123003525264, + -0.0065840188014, -0.0004446533490, +0.0060603995300, +0.0090512338425, + +0.0065913043478, +0.0006599294947, -0.0062183313749, -0.0120277320799, + -0.0167757931845, -0.0191856639248, -0.0157215041128, -0.0060820211516, + +0.0057950646298, +0.0149325499412, +0.0182747356052, +0.0156495887192, + +0.0074519388954, -0.0037654524089, -0.0128526439483, -0.0182387779083, + -0.0192430082256, -0.0148462984724, -0.0067419506463, +0.0027971797885, + +0.0110881316099, +0.0155205640423, +0.0145452408931, +0.0082839012926, + +0.0005736780259, -0.0043534665100, -0.0052500587544, -0.0025245593420, + +0.0032777908343, +0.0096178613396, +0.0129743830787, +0.0115327849589, + +0.0072509988249, +0.0012766157462, -0.0044970622797, -0.0076096357227, + -0.0088719153937, -0.0090942420682, -0.0079539365452, -0.0058667450059, + -0.0030481786134, -0.0009396004700, +0.0000502937720, +0.0013412455934, + +0.0020009400705, +0.0013913043478, -0.0002223266745, -0.0020942420682, + -0.0025318448884, -0.0022376028202, -0.0021945945946, -0.0002940070505, + +0.0020585193890, +0.0029764982374, +0.0032777908343, +0.0029478260870, + +0.0017499412456, +0.0006383078731, +0.0004232667450, +0.0022018801410, + +0.0053433607521, +0.0077459459459, +0.0082982373678, +0.0079466509988, + +0.0075666274971, +0.0064907168038, +0.0036721504113, -0.0004733254994, + -0.0045327849589, -0.0069786133960, -0.0068780258519, -0.0039374853114, + -0.0003156286722, +0.0025819036428, +0.0060603995300, +0.0090585193890, + +0.0100481786134, +0.0104284371328, +0.0109374853114, +0.0110737955347, + +0.0100768507638, +0.0071363102233, +0.0036291421857, +0.0005880141011, + -0.0005952996475, +0.0014559341951, +0.0050061104583, +0.0073873090482, + +0.0075163337250, +0.0053504112808, +0.0033278495887, +0.0024745005875, + +0.0017499412456, +0.0019365452409, +0.0024958871915, +0.0020871915394, + +0.0017212690952, +0.0013196239718, +0.0007529964747, +0.0008606345476, + +0.0008535840188, +0.0006669800235, +0.0009753231492, +0.0012265569918, + +0.0015849588719, +0.0022376028202, +0.0025748531140, +0.0025962397180, + +0.0031628672150, +0.0051424206816, +0.0069856639248, +0.0067130434783, + +0.0047767332550, +0.0030195064630, +0.0018002350176, +0.0003299647474, + -0.0019435957697, -0.0035287896592, -0.0030481786134, -0.0006239717979, + +0.0029334900118, +0.0069139835488, +0.0096752056404, +0.0094745005875, + +0.0055584018801, -0.0003156286722, -0.0046404230317, -0.0056230317274, + -0.0028258519389, +0.0024455934195, +0.0070286721504, +0.0089292596945, + +0.0074376028202, +0.0031271445358, -0.0009252643948, -0.0036578143361, + -0.0055010575793, -0.0053074030552, -0.0032058754407, -0.0003943595770, + +0.0023595769683, +0.0046474735605, +0.0064907168038, +0.0070286721504, + +0.0054364277321, +0.0032202115159, +0.0012192714454, -0.0005019976498, + -0.0010902467685, -0.0005236192714, -0.0002079905993, -0.0009179788484, + -0.0022808460635, -0.0033924794360, -0.0033135135135, -0.0019938895417, + -0.0003513513514, +0.0007316098707, +0.0009252643948, +0.0006383078731, + +0.0009396004700, +0.0012192714454, +0.0010686251469, +0.0003226792009, + -0.0010759106933, -0.0019722679201, -0.0023165687427, -0.0025675675676, + -0.0024601645123, -0.0023381903643, -0.0019222091657, -0.0010542890717, + -0.0002152761457, +0.0005880141011, +0.0007889541716, +0.0005306698002, + +0.0003083431257, +0.0000430082256, -0.0001863689777, -0.0006096357227, + -0.0013052878966, -0.0018359576968, -0.0022162162162, -0.0021588719154, + -0.0013125734430, -0.0000072855464, +0.0009753231492, +0.0011116333725, + +0.0004446533490, -0.0002796709753, -0.0009179788484, -0.0015992949471, + -0.0020728554642, -0.0024815511163, -0.0026968272620, -0.0020441833137, + -0.0009252643948, +0.0001506462985, +0.0009036427732, +0.0007172737955, + +0.0000860164512, +0.0000072855464, +0.0003656874266, +0.0006383078731, + -0.0000072855464, -0.0013913043478, -0.0026608695652, -0.0033995299647, + -0.0029908343126, -0.0016925969448, -0.0003800235018, +0.0005880141011, + +0.0011259694477, +0.0013913043478, +0.0008319623972, -0.0012839012926, + -0.0038371327850, -0.0058166862515, -0.0068709753231, -0.0066773207991, + -0.0048554641598, -0.0015349001175, +0.0019508813161, +0.0039518213866, + +0.0039374853114, +0.0024888366627, +0.0004806110458, -0.0015922444183, + -0.0030051703878, -0.0035717978848, -0.0033708578143, -0.0024745005875, + -0.0016425381904, -0.0009969447709, -0.0004159811986, -0.0006886016451, + -0.0016136310223, -0.0023668625147, -0.0027111633373, -0.0022735605170, + -0.0010542890717, +0.0003586368978, +0.0014632197415, +0.0018145710928, + +0.0014702702703, +0.0009539365452, +0.0003873090482, -0.0002007050529, + -0.0004016451234, -0.0001793184489, +0.0001363102233, +0.0002653349001, + -0.0000860164512, -0.0006669800235, -0.0006742655699, -0.0000789659224, + +0.0007816686251, +0.0018289071680, +0.0023882491187, +0.0020009400705, + +0.0011332549941, +0.0002366627497, -0.0003083431257, -0.0005092831962, + -0.0009682726204, -0.0016925969448, -0.0024169212691, -0.0029118683901, + -0.0027541715629, -0.0021085781434, -0.0014488836663, -0.0006169212691, + +0.0005236192714, +0.0020225616921, +0.0030051703878, +0.0030408930670, + +0.0024601645123, +0.0012839012926, -0.0000860164512, -0.0007172737955, + -0.0004876615746, +0.0003729729730, +0.0013913043478, +0.0018216216216, + +0.0016136310223, +0.0008176263220, -0.0003083431257, -0.0011905992949, + -0.0011976498237, -0.0004089306698, +0.0002869565217, +0.0004806110458, + +0.0005880141011, +0.0006455934195, +0.0004446533490, +0.0001649823737, + +0.0000430082256, +0.0003873090482, +0.0010399529965, +0.0014488836663, + +0.0014775558167, +0.0009252643948, -0.0003873090482, -0.0016712103408, + -0.0022232667450, -0.0019508813161, -0.0006383078731, +0.0012552291422, + +0.0029908343126, +0.0042314923619, +0.0041741480611, +0.0028329024677, + +0.0010615746181, -0.0008679200940, -0.0021515863690, -0.0020942420682, + -0.0011619271445, +0.0000573443008, +0.0009179788484, +0.0011546415981, + +0.0009539365452, +0.0000573443008, -0.0012909518214, -0.0020728554642, + -0.0020082256169, -0.0013052878966, -0.0001936545241, +0.0009323149236, + +0.0014989424207, +0.0012408930670, +0.0006526439483, +0.0002079905993, + -0.0000502937720, -0.0000716803760, +0.0000000000000, -0.0000789659224, + -0.0005809635723, -0.0012909518214, -0.0014488836663, -0.0009609870740, + -0.0001363102233, +0.0007316098707, +0.0013339600470, +0.0017285546416, + +0.0018648648649, +0.0014702702703, +0.0006813160987, -0.0001003525264, + -0.0004733254994, -0.0003943595770, -0.0001793184489, -0.0000933019976, + -0.0001290246769, -0.0000860164512, -0.0000072855464, +0.0000000000000, + +0.0001363102233, +0.0005593419506, +0.0009609870740, +0.0008535840188, + +0.0001076380729, -0.0007459459459, -0.0013482961222, -0.0016136310223, + -0.0011762632197, -0.0002079905993, +0.0006383078731, +0.0011259694477, + +0.0012049353702, +0.0004876615746, -0.0007243243243, -0.0016352526439, + -0.0018935370153, -0.0016279670975, -0.0011332549941, -0.0007243243243, + -0.0003656874266, -0.0000143360752, +0.0001433607521, +0.0002439482961, + +0.0003299647474, +0.0000286721504, -0.0006813160987, -0.0015992949471, + -0.0023882491187, -0.0025175088132, -0.0021301997650, -0.0015349001175, + -0.0006383078731, -0.0000216216216, +0.0001506462985, +0.0001793184489, + -0.0001219741481, -0.0004733254994, -0.0006312573443, -0.0010112808461, + -0.0016425381904, -0.0022665099882, -0.0024958871915, -0.0020512338425, + -0.0012192714454, -0.0003156286722, +0.0003800235018, +0.0006383078731, + +0.0004876615746, +0.0000000000000, -0.0005809635723, -0.0009396004700, + -0.0009969447709, -0.0008462984724, -0.0006312573443, -0.0004733254994, + -0.0004806110458, -0.0006383078731, -0.0007889541716, -0.0008893066980, + -0.0009826086957, -0.0012336075206, -0.0016712103408, -0.0018792009401, + -0.0018432432432, -0.0017212690952, -0.0013412455934, -0.0008606345476, + -0.0007029377203, -0.0008319623972, -0.0009109283196, -0.0008606345476, + -0.0011116333725, -0.0015349001175, -0.0016998824912, -0.0017642773208, + -0.0017499412456, -0.0015562867215, -0.0010686251469, -0.0004662749706, + -0.0001290246769, +0.0001506462985, +0.0004806110458, +0.0006813160987, + +0.0008893066980, +0.0007529964747, +0.0002582843713, -0.0002796709753, + -0.0009396004700, -0.0013482961222, -0.0012622796710, -0.0011116333725, + -0.0008965922444, -0.0007243243243, -0.0008893066980, -0.0011475910693, + -0.0013842538190, -0.0015492361927, -0.0013626321974, -0.0010183313749, + -0.0007099882491, -0.0002223266745, +0.0002223266745, +0.0005809635723, + +0.0007172737955, +0.0002582843713, -0.0007099882491, -0.0014632197415, + -0.0016568742656, -0.0015562867215, -0.0013913043478, -0.0009826086957, + -0.0003729729730, -0.0000430082256, +0.0000430082256, +0.0001290246769, + +0.0001720329025, +0.0003729729730, +0.0007673325499, +0.0006526439483, + +0.0000502937720, -0.0005809635723, -0.0010256169213, -0.0011259694477, + -0.0012336075206, -0.0014056404230, -0.0015062279671, -0.0016209165687, + -0.0015706227967, -0.0013052878966, -0.0011762632197, -0.0010615746181, + -0.0009753231492, -0.0009682726204, -0.0007889541716, -0.0003299647474, + +0.0001219741481, +0.0003656874266, +0.0005092831962, +0.0006383078731, + +0.0004089306698, -0.0001363102233, -0.0005379553467, -0.0005736780259, + -0.0004876615746, -0.0004949471210, -0.0004519388954, -0.0002509988249, + +0.0000716803760, +0.0003729729730, +0.0004806110458, +0.0004303172738, + +0.0002726204465, +0.0000646298472, -0.0001649823737, -0.0003083431257, + -0.0002439482961, -0.0001219741481, -0.0000933019976, -0.0001793184489, + -0.0003156286722, -0.0003586368978, -0.0003012925969, +0.0000359576968, + +0.0008176263220, +0.0014775558167, +0.0015706227967, +0.0010472385429, + +0.0002940070505, -0.0002439482961, -0.0005163337250, -0.0005736780259, + -0.0001863689777, +0.0004519388954, +0.0010399529965, +0.0014559341951, + +0.0015849588719, +0.0011762632197, +0.0003226792009, -0.0004519388954, + -0.0008176263220, -0.0007029377203, -0.0002582843713, +0.0002582843713, + +0.0006526439483, +0.0006383078731, +0.0003370152761, +0.0003156286722, + +0.0004446533490, +0.0003083431257, -0.0000072855464, -0.0003083431257, + -0.0004733254994, -0.0005092831962, -0.0002726204465, +0.0002796709753, + +0.0007602820212, +0.0009753231492, +0.0010686251469, +0.0009826086957, + +0.0009396004700, +0.0011833137485, +0.0012552291422, +0.0009179788484, + +0.0003943595770, -0.0001793184489, -0.0005952996475, -0.0006669800235, + -0.0003943595770, +0.0002152761457, +0.0009682726204, +0.0014918918919, + +0.0017642773208, +0.0018289071680, +0.0016209165687, +0.0012622796710, + +0.0009969447709, +0.0008606345476, +0.0007529964747, +0.0005880141011, + +0.0004232667450, +0.0003443008226, +0.0002726204465, +0.0002509988249, + +0.0003729729730, +0.0005092831962, +0.0006886016451, +0.0009896592244, + +0.0011546415981, +0.0010183313749, +0.0007029377203, +0.0003800235018, + +0.0003083431257, +0.0006455934195, +0.0011905992949, +0.0016568742656, + +0.0016712103408, +0.0012622796710, +0.0008319623972, +0.0006023501763, + +0.0005163337250, +0.0005092831962, +0.0005163337250, +0.0005809635723, + +0.0006239717979, +0.0006813160987, +0.0007172737955, +0.0005736780259, + +0.0004662749706, +0.0005952996475, +0.0007673325499, +0.0008392479436, + +0.0008679200940, +0.0008606345476, +0.0007816686251, +0.0005163337250, + +0.0001576968273, -0.0001720329025, -0.0003586368978, -0.0002366627497, + +0.0000860164512, +0.0004016451234, +0.0006669800235, +0.0008822561692, + +0.0009252643948, +0.0007960047004, +0.0007172737955, +0.0007386603995, + +0.0008535840188, +0.0011045828437, +0.0012479435958, +0.0011403055229, + +0.0009179788484, +0.0005593419506, +0.0002869565217, +0.0002152761457, + +0.0001720329025, +0.0002582843713, +0.0004089306698, +0.0003943595770, + +0.0002796709753, +0.0002582843713, +0.0003299647474, +0.0003299647474, + +0.0003083431257, +0.0003513513514, +0.0003800235018, +0.0003729729730, + +0.0003943595770, +0.0003729729730, +0.0003943595770, +0.0004806110458, + +0.0005522914219, +0.0003586368978, -0.0001146886016, -0.0004806110458, + -0.0004949471210, -0.0002509988249, +0.0001793184489, +0.0007029377203, + +0.0010829612221, +0.0012049353702, +0.0009826086957, +0.0005666274971, + +0.0002439482961, +0.0000286721504, -0.0000502937720, +0.0000072855464, + +0.0000430082256, -0.0000646298472, -0.0002796709753, -0.0005163337250, + -0.0006526439483, -0.0006669800235, -0.0005163337250, -0.0001793184489, + +0.0001576968273, +0.0003873090482, +0.0004662749706, +0.0002869565217, + -0.0000359576968, -0.0002439482961, -0.0003083431257, -0.0004446533490, + -0.0006383078731, -0.0007889541716, -0.0007529964747, -0.0002653349001, + +0.0005880141011, +0.0015205640423, +0.0021445358402, +0.0018862514689, + +0.0006526439483, -0.0009396004700, -0.0020942420682, -0.0022735605170, + -0.0015492361927, -0.0004016451234, +0.0006886016451, +0.0013626321974, + +0.0013842538190, +0.0008822561692, +0.0001146886016, -0.0006742655699, + -0.0011332549941, -0.0011546415981, -0.0009466509988, -0.0005163337250, + +0.0000072855464, +0.0004303172738, +0.0007029377203, +0.0006886016451, + +0.0003656874266, -0.0000430082256, -0.0004662749706, -0.0007243243243, + -0.0007602820212, -0.0006599294947, -0.0003873090482, -0.0002007050529, + -0.0002439482961, -0.0002079905993, -0.0001219741481, -0.0001290246769, + +0.0000000000000, +0.0001363102233, +0.0001506462985, +0.0001720329025, + +0.0000860164512, +0.0000646298472, +0.0002582843713, +0.0002007050529, + -0.0001649823737, -0.0006312573443, -0.0010183313749, -0.0008965922444, + -0.0005809635723, -0.0004303172738, -0.0001363102233, +0.0002582843713, + +0.0005092831962, +0.0005379553467, +0.0003370152761, +0.0003083431257, + +0.0003943595770, +0.0001003525264, -0.0002296122209, -0.0001290246769, + +0.0002223266745, +0.0005163337250, +0.0006599294947, +0.0006312573443, + +0.0004303172738, +0.0001146886016, -0.0003226792009, -0.0006239717979, + -0.0002726204465, +0.0004376028202, +0.0008032902468, +0.0008965922444, + +0.0009109283196, +0.0008319623972, +0.0006455934195, +0.0003083431257, + -0.0001576968273, -0.0006239717979, -0.0007816686251, -0.0005236192714, + -0.0000359576968, +0.0003083431257, +0.0004159811986, +0.0003729729730, + +0.0003156286722, +0.0003083431257, +0.0003586368978, +0.0004016451234, + +0.0004589894242, +0.0005809635723, +0.0007673325499, +0.0008535840188, + +0.0006813160987, +0.0004089306698, +0.0001076380729, -0.0001219741481, + -0.0000716803760, +0.0002509988249, +0.0006455934195, +0.0008535840188, + +0.0009179788484, +0.0009396004700, +0.0006813160987, +0.0002509988249, + +0.0000933019976, +0.0001863689777, +0.0003729729730, +0.0004806110458, + +0.0003943595770, +0.0004232667450, +0.0005163337250, +0.0004589894242, + +0.0003800235018, +0.0003226792009, +0.0001863689777, +0.0000430082256, + -0.0000286721504, +0.0000573443008, +0.0002653349001, +0.0004376028202, + +0.0007029377203, +0.0009609870740, +0.0010542890717, +0.0010615746181, + +0.0009109283196, +0.0006239717979, +0.0002796709753, -0.0000933019976, + -0.0002366627497, -0.0000789659224, +0.0001649823737, +0.0003943595770, + +0.0003943595770, +0.0002653349001, +0.0001936545241, +0.0001793184489, + +0.0002726204465, +0.0006169212691, +0.0009896592244, +0.0011332549941, + +0.0009252643948, +0.0005019976498, +0.0002152761457, +0.0001576968273, + +0.0001649823737, +0.0001219741481, +0.0000216216216, -0.0000646298472, + -0.0000789659224, -0.0000072855464, +0.0001720329025, +0.0002940070505, + +0.0002796709753, +0.0003083431257, +0.0004446533490, +0.0005666274971, + +0.0005952996475, +0.0004519388954, +0.0001793184489, -0.0001433607521, + -0.0004016451234, -0.0003443008226, -0.0000286721504, +0.0002509988249, + +0.0003800235018, +0.0002869565217, +0.0000573443008, -0.0001720329025, + -0.0003443008226, -0.0002940070505, -0.0000430082256, +0.0002439482961, + +0.0005236192714, +0.0006813160987, +0.0006239717979, +0.0004232667450, + +0.0001219741481, -0.0002869565217, -0.0006455934195, -0.0008032902468, + -0.0007243243243, -0.0004662749706, -0.0001793184489, +0.0000000000000, + +0.0000000000000, -0.0000860164512, -0.0001290246769, -0.0000716803760, + +0.0000789659224, +0.0002296122209, +0.0001863689777, -0.0000716803760, + -0.0004303172738, -0.0006096357227, -0.0005522914219, -0.0003656874266, + -0.0001290246769, -0.0000216216216, -0.0001433607521, -0.0003156286722, + -0.0003729729730, -0.0003226792009, -0.0003586368978, -0.0004589894242, + -0.0004232667450, -0.0003012925969, -0.0001936545241, -0.0000933019976, + -0.0001076380729, -0.0001863689777, -0.0002582843713, -0.0003443008226, + -0.0003656874266, -0.0002869565217, -0.0002079905993, -0.0002296122209, + -0.0003513513514, -0.0005163337250, -0.0005809635723, -0.0005019976498, + -0.0002940070505, +0.0000216216216, +0.0002726204465, +0.0003083431257, + +0.0002152761457, -0.0000216216216, -0.0003729729730, -0.0005809635723, + -0.0006096357227, -0.0005092831962, -0.0003443008226, -0.0002653349001, + -0.0002223266745, -0.0001649823737, -0.0001363102233, -0.0000789659224, + -0.0000430082256, -0.0001146886016, -0.0001863689777, -0.0002439482961, + -0.0002940070505, -0.0003513513514, -0.0004376028202, -0.0003656874266, + -0.0001290246769, +0.0000072855464, +0.0000286721504, +0.0001076380729, + +0.0001793184489, +0.0001506462985, -0.0000216216216, -0.0003586368978, + -0.0006886016451, -0.0009539365452, -0.0009969447709, -0.0007099882491, + -0.0003083431257, -0.0001146886016, -0.0002079905993, -0.0005306698002, + -0.0007316098707, -0.0006599294947, -0.0005019976498, -0.0003370152761, + -0.0002509988249, -0.0002940070505, -0.0003800235018, -0.0004662749706, + -0.0004016451234, -0.0000860164512, +0.0002152761457, +0.0001649823737, + -0.0002869565217, -0.0007386603995, -0.0008176263220, -0.0006383078731, + -0.0003513513514, -0.0000573443008, +0.0000286721504, -0.0001936545241, + -0.0005952996475, -0.0008103407756, -0.0007029377203, -0.0004376028202, + -0.0001793184489, -0.0001433607521, -0.0003299647474, -0.0005092831962, + -0.0005379553467, -0.0004016451234, -0.0002007050529, -0.0000573443008, + +0.0000716803760, +0.0001219741481, -0.0000216216216, -0.0002653349001, + -0.0004806110458, -0.0006742655699, -0.0008319623972, -0.0008103407756, + -0.0005809635723, -0.0003586368978, -0.0001793184489, -0.0000143360752, + +0.0000359576968, -0.0000286721504, -0.0002366627497, -0.0004589894242, + -0.0005593419506, -0.0005880141011, -0.0005306698002, -0.0004733254994, + -0.0005236192714, -0.0005019976498, -0.0003012925969, -0.0000143360752, + +0.0002079905993, +0.0002079905993, -0.0000216216216, -0.0003513513514, + -0.0006742655699, -0.0007960047004, -0.0006813160987, -0.0004159811986, + -0.0000430082256, +0.0001649823737, +0.0001433607521, +0.0000143360752, + -0.0003156286722, -0.0007673325499, -0.0009682726204, -0.0008749706228, + -0.0006239717979, -0.0002940070505, +0.0000716803760, +0.0003513513514, + +0.0003800235018, +0.0001793184489, -0.0001003525264, -0.0003370152761, + -0.0004589894242, -0.0005736780259, -0.0006599294947, -0.0006023501763, + -0.0005092831962, -0.0004949471210, -0.0005163337250, -0.0004876615746, + -0.0003443008226, -0.0001506462985, +0.0000143360752, +0.0001649823737, + +0.0002726204465, +0.0002509988249, +0.0000216216216, -0.0002366627497, + -0.0003443008226, -0.0003586368978, -0.0003226792009, -0.0002079905993, + -0.0001003525264, +0.0000000000000, +0.0000573443008, +0.0000000000000, + -0.0000716803760, -0.0001003525264, -0.0001219741481, -0.0001363102233, + -0.0001146886016, -0.0000573443008, -0.0000072855464, -0.0000216216216, + -0.0000860164512, -0.0001863689777, -0.0002726204465, -0.0002152761457, + -0.0001146886016, -0.0001363102233, -0.0002582843713, -0.0003226792009, + -0.0002726204465, -0.0002079905993, -0.0002509988249, -0.0002869565217, + -0.0002007050529, -0.0000716803760, +0.0001076380729, +0.0002869565217, + +0.0003370152761, +0.0002296122209, -0.0000286721504, -0.0003012925969, + -0.0003586368978, -0.0002796709753, -0.0001290246769, +0.0000359576968, + +0.0000502937720, -0.0001146886016, -0.0003443008226, -0.0004806110458, + -0.0004089306698, -0.0002152761457, -0.0000072855464, +0.0001076380729, + +0.0000072855464, -0.0001936545241, -0.0003729729730, -0.0004446533490, + -0.0003443008226, -0.0001433607521, +0.0000072855464, +0.0001003525264, + +0.0001506462985, +0.0001649823737, +0.0001146886016, +0.0000646298472, + +0.0000646298472, +0.0000860164512, +0.0001433607521, +0.0002509988249, + +0.0003873090482, +0.0004876615746, +0.0004876615746, +0.0003443008226, + +0.0000860164512, -0.0001720329025, -0.0003586368978, -0.0004733254994, + -0.0004876615746, -0.0003226792009, -0.0000646298472, +0.0000573443008, + +0.0000573443008, +0.0000430082256, +0.0000286721504, +0.0000502937720, + +0.0001219741481, +0.0001649823737, +0.0001576968273, +0.0000789659224, + -0.0000860164512, -0.0003012925969, -0.0004519388954, -0.0004159811986, + -0.0002152761457, -0.0000216216216, +0.0000430082256, +0.0000359576968, + -0.0000286721504, -0.0001433607521, -0.0002079905993, -0.0001649823737, + -0.0000646298472, +0.0000216216216, +0.0000072855464, -0.0001003525264, + -0.0002007050529, -0.0001720329025, -0.0000789659224, -0.0000143360752, + +0.0000072855464, -0.0000072855464, -0.0000573443008, -0.0000359576968, + +0.0000716803760, +0.0001649823737, +0.0001576968273, +0.0000286721504, + -0.0001290246769, -0.0002726204465, -0.0003586368978, -0.0002653349001, + -0.0000216216216, +0.0002007050529, +0.0003370152761, +0.0003299647474, + +0.0001793184489, +0.0000000000000, -0.0001146886016, -0.0000860164512, + +0.0000286721504, +0.0002079905993, +0.0003586368978, +0.0003656874266, + +0.0002509988249, +0.0000933019976, +0.0000143360752, +0.0000646298472, + +0.0001290246769, +0.0001720329025, +0.0001506462985, +0.0000143360752, + -0.0000860164512, -0.0001290246769, -0.0001506462985, -0.0000860164512, + +0.0000216216216, +0.0001433607521, +0.0002223266745, +0.0002079905993, + +0.0002079905993, +0.0002366627497, +0.0001793184489, +0.0000933019976, + +0.0000000000000, -0.0001146886016, -0.0001720329025, -0.0001363102233, + +0.0000359576968, +0.0002940070505, +0.0004519388954, +0.0005163337250, + +0.0005593419506, +0.0005593419506, +0.0005522914219, +0.0005092831962, + +0.0003586368978, +0.0001863689777, +0.0000286721504, -0.0001219741481, + -0.0002653349001, -0.0003370152761, -0.0002940070505, -0.0001793184489, + -0.0000716803760, +0.0000716803760, +0.0002296122209, +0.0003299647474, + +0.0003943595770, +0.0004232667450, +0.0004016451234, +0.0002869565217, + +0.0001076380729, +0.0000143360752, +0.0000716803760, +0.0001649823737, + +0.0002079905993, +0.0002152761457, +0.0002152761457, +0.0002653349001, + +0.0003083431257, +0.0001936545241, -0.0000286721504, -0.0002296122209, + -0.0003513513514, -0.0003656874266, -0.0002582843713, -0.0000502937720, + +0.0001720329025, +0.0003226792009, +0.0003800235018, +0.0003513513514, + +0.0002366627497, +0.0001076380729, -0.0000430082256, -0.0001720329025, + -0.0000789659224, +0.0002152761457, +0.0005019976498, +0.0006455934195, + +0.0005593419506, +0.0002869565217, -0.0000286721504, -0.0003226792009, + -0.0003943595770, -0.0001363102233, +0.0002366627497, +0.0005522914219, + +0.0006599294947, +0.0004662749706, +0.0000933019976, -0.0002366627497, + -0.0003800235018, -0.0002366627497, +0.0000000000000, +0.0001506462985, + +0.0002296122209, +0.0003226792009, +0.0004806110458, +0.0006383078731, + +0.0006383078731, +0.0005019976498, +0.0002869565217, +0.0000789659224, + +0.0000502937720, +0.0002366627497, +0.0005019976498, +0.0005809635723, + +0.0003800235018, +0.0001433607521, +0.0000286721504, -0.0000430082256, + -0.0000573443008, +0.0000716803760, +0.0002079905993, +0.0002439482961, + +0.0001936545241, +0.0000573443008, -0.0001003525264, -0.0001576968273, + -0.0000072855464, +0.0003370152761, +0.0007029377203, +0.0008392479436, + +0.0007243243243, +0.0004519388954, +0.0000860164512, -0.0001936545241, + -0.0003156286722, -0.0003299647474, -0.0002940070505, -0.0002007050529, + -0.0000789659224, +0.0000573443008, +0.0001433607521, +0.0001506462985, + +0.0001506462985, +0.0001649823737, +0.0001720329025, +0.0001076380729, + +0.0000000000000, -0.0001363102233, -0.0002079905993, -0.0001506462985, + +0.0000216216216, +0.0002007050529, +0.0002869565217, +0.0003226792009, + +0.0003586368978, +0.0003370152761, +0.0002079905993, +0.0000646298472, + +0.0000072855464, -0.0000143360752, -0.0001003525264, -0.0001506462985, + -0.0000502937720, +0.0001219741481, +0.0002796709753, +0.0004232667450, + +0.0005163337250, +0.0005163337250, +0.0004159811986, +0.0002366627497, + +0.0001219741481, +0.0001146886016, +0.0001363102233, +0.0001649823737, + +0.0002007050529, +0.0002079905993, +0.0001936545241, +0.0001863689777, + +0.0001576968273, +0.0001146886016, +0.0000860164512, +0.0000789659224, + +0.0001146886016, +0.0001793184489, +0.0002007050529, +0.0002726204465, + +0.0004446533490, +0.0006096357227, +0.0006669800235, +0.0005092831962, + +0.0001649823737, -0.0001720329025, -0.0003370152761, -0.0002223266745, + +0.0001363102233, +0.0005306698002, +0.0007602820212, +0.0007243243243, + +0.0004949471210, +0.0002439482961, +0.0000502937720, -0.0000789659224, + -0.0001219741481, -0.0000573443008, +0.0000216216216, +0.0000860164512, + +0.0001363102233, +0.0001936545241, +0.0002223266745, +0.0001936545241, + +0.0001863689777, +0.0002366627497, +0.0002509988249, +0.0001793184489, + +0.0000933019976, +0.0000286721504, +0.0000143360752, +0.0000502937720, + +0.0001290246769, +0.0002509988249, +0.0003226792009, +0.0003083431257, + +0.0002509988249, +0.0001649823737, +0.0001076380729, +0.0001076380729, + +0.0001290246769, +0.0001506462985, +0.0002223266745, +0.0002796709753, + +0.0002940070505, +0.0002439482961, +0.0001576968273, +0.0000502937720, + -0.0000216216216, -0.0000573443008, -0.0000286721504, +0.0000860164512, + +0.0002582843713, +0.0002869565217, +0.0001649823737, +0.0000716803760, + +0.0000430082256, +0.0000646298472, +0.0000933019976, +0.0001363102233, + +0.0002152761457, +0.0003083431257, +0.0003656874266, +0.0003299647474, + +0.0001936545241, +0.0000573443008, -0.0000716803760, -0.0001649823737, + -0.0001649823737, -0.0001363102233, -0.0001003525264, -0.0000216216216, + +0.0000000000000, -0.0000502937720, -0.0001649823737, -0.0002726204465, + -0.0002509988249, -0.0000933019976, +0.0000716803760, +0.0001720329025, + +0.0002152761457, +0.0002007050529, +0.0001506462985, +0.0001219741481, + +0.0001506462985, +0.0001506462985, +0.0001076380729, +0.0000359576968, + -0.0000359576968, -0.0000573443008, -0.0000072855464, +0.0000359576968, + +0.0000646298472, +0.0000359576968, -0.0000072855464, +0.0000143360752, + +0.0000789659224, +0.0000860164512, +0.0000430082256, +0.0000716803760, + +0.0001720329025, +0.0002726204465, +0.0002653349001, +0.0001363102233, + -0.0000430082256, -0.0002007050529, -0.0002296122209, -0.0001003525264, + +0.0000860164512, +0.0002439482961, +0.0002796709753, +0.0002079905993, + +0.0001290246769, +0.0000716803760, +0.0000573443008, +0.0000286721504, + -0.0000789659224, -0.0002007050529, -0.0002653349001, -0.0002366627497, + -0.0000789659224, +0.0000573443008, +0.0000789659224, +0.0000143360752, + -0.0001219741481, -0.0002223266745, -0.0001720329025, -0.0000286721504, + +0.0001076380729, +0.0001576968273, +0.0000646298472, -0.0000933019976, + -0.0002582843713, -0.0003586368978, -0.0003012925969, -0.0001433607521, + +0.0000143360752, +0.0000430082256, -0.0000716803760, -0.0001793184489, + -0.0002366627497, -0.0002439482961, -0.0001720329025, -0.0001290246769, + -0.0001003525264, -0.0000286721504, -0.0000072855464, -0.0000286721504, + -0.0000646298472, -0.0001506462985, -0.0002366627497, -0.0003012925969, + -0.0003370152761, -0.0003513513514, -0.0003156286722, -0.0002007050529, + -0.0000860164512, +0.0000143360752, +0.0001076380729, +0.0001003525264, + -0.0000072855464, -0.0001506462985, -0.0002439482961, -0.0002152761457, + -0.0001003525264, +0.0000286721504, +0.0001076380729, +0.0001290246769, + +0.0000716803760, -0.0000716803760, -0.0002296122209, -0.0002940070505, + -0.0003012925969, -0.0002223266745, -0.0000789659224, +0.0000143360752, + +0.0000646298472, +0.0001076380729, +0.0001290246769, +0.0000789659224, + -0.0000286721504, -0.0001506462985, -0.0002223266745, -0.0003012925969, + -0.0003443008226, -0.0002869565217, -0.0002296122209, -0.0002152761457, + -0.0002366627497, -0.0002796709753, -0.0002653349001, -0.0001863689777, + -0.0001003525264, -0.0000216216216, +0.0000000000000, -0.0000072855464, + -0.0000216216216, -0.0000933019976, -0.0001506462985, -0.0001863689777, + -0.0002007050529, -0.0001936545241, -0.0001863689777, -0.0001936545241, + -0.0001793184489, -0.0001076380729, +0.0000000000000, +0.0000789659224, + +0.0000933019976, +0.0000502937720, -0.0000502937720, -0.0001720329025, + -0.0002439482961, -0.0002940070505, -0.0002869565217, -0.0002007050529, + -0.0001146886016, -0.0000646298472, -0.0000502937720, -0.0000072855464, + +0.0001219741481, +0.0002152761457, +0.0001433607521, -0.0000286721504, + -0.0002509988249, -0.0004016451234, -0.0004446533490, -0.0004232667450, + -0.0003083431257, -0.0001576968273, -0.0000933019976, -0.0000646298472, + -0.0000359576968, +0.0000072855464, +0.0000646298472, +0.0000000000000, + -0.0001649823737, -0.0003083431257, -0.0003729729730, -0.0002940070505, + -0.0001219741481, +0.0000216216216, +0.0001146886016, +0.0001076380729, + -0.0000072855464, -0.0002079905993, -0.0004016451234, -0.0004446533490, + -0.0003012925969, -0.0000716803760, +0.0000716803760, +0.0000789659224, + +0.0000072855464, -0.0000646298472, -0.0001003525264, -0.0001433607521, + -0.0001649823737, -0.0001433607521, -0.0001363102233, -0.0001720329025, + -0.0002582843713, -0.0003083431257, -0.0002439482961, -0.0000933019976, + +0.0000430082256, +0.0001433607521, +0.0001793184489, +0.0001290246769, + +0.0000359576968, -0.0000286721504, -0.0000502937720, -0.0000860164512, + -0.0001506462985, -0.0002296122209, -0.0002940070505, -0.0003226792009, + -0.0003443008226, -0.0003156286722, -0.0002366627497, -0.0001433607521, + -0.0000359576968, +0.0001076380729, +0.0002869565217, +0.0004159811986, + +0.0003873090482, +0.0001936545241, -0.0000430082256, -0.0002296122209, + -0.0002653349001, -0.0001863689777, -0.0000646298472, +0.0000573443008, + +0.0000646298472, -0.0000860164512, -0.0002653349001, -0.0003299647474, + -0.0002582843713, -0.0001290246769, -0.0000430082256, -0.0000359576968, + -0.0001363102233, -0.0002940070505, -0.0003656874266, -0.0002796709753, + -0.0001076380729, -0.0000143360752, -0.0000573443008, -0.0001649823737, + -0.0002653349001, -0.0002582843713, -0.0001003525264, +0.0001076380729, + +0.0002726204465, +0.0003226792009, +0.0002366627497, +0.0001219741481, + +0.0000000000000, -0.0000860164512, -0.0001506462985, -0.0002582843713, + -0.0003729729730, -0.0004376028202, -0.0004446533490, -0.0003513513514, + -0.0002079905993, -0.0000573443008, +0.0001146886016, +0.0001793184489, + +0.0000789659224, -0.0000502937720, -0.0001290246769, -0.0001363102233, + -0.0000716803760, +0.0000000000000, +0.0000789659224, +0.0001506462985, + +0.0001576968273, +0.0000646298472, -0.0000646298472, -0.0001363102233, + -0.0001003525264, -0.0000216216216, +0.0000573443008, +0.0001219741481, + +0.0001363102233, +0.0000860164512, -0.0000286721504, -0.0001576968273, + -0.0002079905993, -0.0002296122209, -0.0002796709753, -0.0003226792009, + -0.0002796709753, -0.0001863689777, -0.0000573443008, +0.0000716803760, + +0.0001863689777, +0.0002439482961, +0.0002509988249, +0.0001793184489, + +0.0000860164512, +0.0000143360752, -0.0000716803760, -0.0001793184489, + -0.0001720329025, -0.0000646298472, +0.0000072855464, +0.0000072855464, + -0.0000216216216, -0.0000789659224, -0.0001649823737, -0.0002296122209, + -0.0002152761457, -0.0001003525264, +0.0001146886016, +0.0003513513514, + +0.0004376028202, +0.0003513513514, +0.0001290246769, -0.0001576968273, + -0.0003800235018, -0.0003943595770, -0.0002296122209, -0.0000072855464, + +0.0001146886016, +0.0000573443008, -0.0001219741481, -0.0002940070505, + -0.0003156286722, -0.0001720329025, +0.0000860164512, +0.0003299647474, + +0.0004159811986, +0.0003370152761, +0.0002007050529, +0.0000933019976, + +0.0000072855464, -0.0000716803760, -0.0001720329025, -0.0002653349001, + -0.0002869565217, -0.0002296122209, -0.0001219741481, +0.0000072855464, + +0.0001219741481, +0.0001936545241, +0.0001936545241, +0.0001076380729, + +0.0000573443008, +0.0000716803760, +0.0001219741481, +0.0001793184489, + +0.0001793184489, +0.0000933019976, -0.0000143360752, -0.0001219741481, + -0.0001720329025, -0.0001076380729, -0.0000216216216, +0.0000000000000, + +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000286721504, + +0.0000286721504, +0.0000216216216, +0.0000072855464, -0.0000430082256, + -0.0000646298472, +0.0000000000000, +0.0000933019976, +0.0001720329025, + +0.0001863689777, +0.0001219741481, +0.0000000000000, -0.0001720329025, + -0.0002869565217, -0.0002653349001, -0.0001076380729, +0.0001219741481, + +0.0003443008226, +0.0004446533490, +0.0004016451234, +0.0002439482961, + +0.0000286721504, -0.0001363102233, -0.0002439482961, -0.0002582843713, + -0.0001720329025, -0.0000286721504, +0.0001219741481, +0.0002296122209, + +0.0002439482961, +0.0001649823737, +0.0000359576968, -0.0000933019976, + -0.0001793184489, -0.0001576968273, -0.0000716803760, +0.0000143360752, + +0.0001003525264, +0.0001863689777, +0.0002439482961, +0.0003012925969, + +0.0003370152761, +0.0003083431257, +0.0002079905993, +0.0000000000000, + -0.0002007050529, -0.0003370152761, -0.0003873090482, -0.0003012925969, + -0.0001219741481, +0.0000286721504, +0.0001146886016, +0.0001219741481, + +0.0000573443008, +0.0000000000000, -0.0000359576968, +0.0000000000000, + +0.0000716803760, +0.0001219741481, +0.0001720329025, +0.0001506462985, + +0.0000573443008, -0.0000216216216, -0.0000860164512, -0.0001363102233, + -0.0001433607521, -0.0001146886016, -0.0000430082256, +0.0000573443008, + +0.0001649823737, +0.0002439482961, +0.0002296122209, +0.0001793184489, + +0.0001649823737, +0.0001433607521, +0.0001146886016, +0.0000716803760, + +0.0000143360752, +0.0000000000000, +0.0000430082256, +0.0001363102233, + +0.0002582843713, +0.0003370152761, +0.0003299647474, +0.0002366627497, + +0.0001146886016, -0.0000286721504, -0.0001506462985, -0.0001649823737, + -0.0000573443008, +0.0000143360752, +0.0000143360752, -0.0000216216216, + -0.0000359576968, +0.0000072855464, +0.0000933019976, +0.0001793184489, + +0.0002509988249, +0.0002366627497, +0.0001363102233, +0.0000216216216, + -0.0000573443008, -0.0001003525264, -0.0001076380729, -0.0000646298472, + +0.0000000000000, +0.0000646298472, +0.0001146886016, +0.0001290246769, + +0.0001146886016, +0.0000933019976, +0.0000716803760, +0.0000933019976, + +0.0001506462985, +0.0001863689777, +0.0002152761457, +0.0002007050529, + +0.0001433607521, +0.0000860164512, +0.0000000000000, -0.0000502937720, + -0.0000359576968, -0.0000216216216, -0.0000359576968, -0.0000573443008, + -0.0000933019976, -0.0000716803760, -0.0000502937720, -0.0000646298472, + -0.0000646298472, -0.0000072855464, +0.0000933019976, +0.0002007050529, + +0.0002582843713, +0.0002366627497, +0.0001863689777, +0.0001649823737, + +0.0002079905993, +0.0002940070505, +0.0003943595770, +0.0004519388954, + +0.0004159811986, +0.0002439482961, +0.0000072855464, -0.0001433607521, + -0.0001290246769, +0.0000359576968, +0.0002223266745, +0.0002869565217, + +0.0001936545241, +0.0000716803760, +0.0000143360752, +0.0000359576968, + +0.0001003525264, +0.0001936545241, +0.0002726204465, +0.0002582843713, + +0.0001793184489, +0.0001219741481, +0.0001290246769, +0.0001433607521, + +0.0001649823737, +0.0001793184489, +0.0001433607521, +0.0001363102233, + +0.0001936545241, +0.0002509988249, +0.0002796709753, +0.0002869565217, + +0.0002940070505, +0.0002726204465, +0.0002152761457, +0.0001576968273, + +0.0001363102233, +0.0001576968273, +0.0002223266745, +0.0002439482961, + +0.0001793184489, +0.0000573443008, -0.0000716803760, -0.0001863689777, + -0.0002079905993, -0.0001290246769, +0.0000000000000, +0.0001433607521, + +0.0002509988249, +0.0002509988249, +0.0001363102233, +0.0000143360752, + -0.0000143360752, +0.0000502937720, +0.0001506462985, +0.0002296122209, + +0.0002079905993, +0.0000716803760, -0.0000646298472, -0.0000933019976, + +0.0000000000000, +0.0001863689777, +0.0003226792009, +0.0003012925969, + +0.0001793184489, +0.0000573443008, +0.0000000000000, -0.0000143360752, + -0.0000286721504, -0.0000430082256, -0.0000646298472, -0.0000716803760, + -0.0000646298472, -0.0000430082256, -0.0000359576968, -0.0000430082256, + -0.0000716803760, -0.0001003525264, -0.0001003525264, -0.0000573443008, + +0.0000286721504, +0.0001146886016, +0.0001003525264, -0.0000072855464, + -0.0001146886016, -0.0001433607521, -0.0000573443008, +0.0001076380729, + +0.0002653349001, +0.0003226792009, +0.0002439482961, +0.0000430082256, + -0.0001146886016, -0.0001649823737, -0.0001506462985, -0.0001219741481, + -0.0001290246769, -0.0001793184489, -0.0001793184489, -0.0000860164512, + +0.0000143360752, +0.0000573443008, +0.0000143360752, -0.0000646298472, + -0.0001219741481, -0.0001146886016, -0.0000430082256, +0.0000359576968, + +0.0000716803760, +0.0000430082256, -0.0000286721504, -0.0001290246769, + -0.0001863689777, -0.0001649823737, -0.0000789659224, +0.0000286721504, + +0.0001219741481, +0.0001720329025, +0.0001793184489, +0.0001433607521, + +0.0000789659224, +0.0000000000000, -0.0000573443008, -0.0000502937720, + +0.0000000000000, +0.0000216216216, -0.0000143360752, -0.0001003525264, + -0.0002007050529, -0.0002726204465, -0.0003083431257, -0.0003083431257, + -0.0002223266745, -0.0000646298472, +0.0000646298472, +0.0001290246769, + +0.0001003525264, +0.0000000000000, -0.0001219741481, -0.0002079905993, + -0.0002007050529, -0.0001649823737, -0.0001506462985, -0.0001290246769, + -0.0000789659224, -0.0000216216216, +0.0000000000000, +0.0000143360752, + +0.0000286721504, +0.0000430082256, +0.0000573443008, +0.0000286721504, + -0.0000286721504, -0.0000716803760, -0.0000789659224, -0.0000716803760, + -0.0000860164512, -0.0001146886016, -0.0001076380729, -0.0000789659224, + -0.0000860164512, -0.0001146886016, -0.0001219741481, -0.0000933019976, + -0.0000072855464, +0.0001003525264, +0.0001576968273, +0.0001433607521, + +0.0000716803760, -0.0000143360752, -0.0000646298472, -0.0000716803760, + -0.0000789659224, -0.0000430082256, -0.0000143360752, +0.0000000000000, + +0.0000430082256, +0.0001076380729, +0.0001936545241, +0.0002869565217, + +0.0003370152761, +0.0003226792009, +0.0002223266745, +0.0000573443008, + -0.0001003525264, -0.0002223266745, -0.0002366627497, -0.0001003525264, + +0.0000860164512, +0.0002007050529, +0.0001936545241, +0.0001076380729, + +0.0000573443008, +0.0000789659224, +0.0001290246769, +0.0001936545241, + +0.0002079905993, +0.0001649823737, +0.0000860164512, -0.0000216216216, + -0.0001219741481, -0.0001433607521, -0.0001146886016, -0.0000502937720, + +0.0000286721504, +0.0001076380729, +0.0001506462985, +0.0001433607521, + +0.0001076380729, +0.0000502937720, -0.0000216216216, -0.0000573443008, + -0.0000573443008, -0.0000216216216, +0.0000216216216, +0.0000573443008, + +0.0000502937720, +0.0000216216216, -0.0000359576968, -0.0000860164512, + -0.0000933019976, -0.0000716803760, -0.0000072855464, +0.0000216216216, + +0.0000143360752, -0.0000143360752, -0.0000573443008, -0.0000646298472, + +0.0000072855464, +0.0000933019976, +0.0001003525264, +0.0000502937720, + +0.0000000000000, -0.0000430082256, -0.0000933019976, -0.0001576968273, + -0.0001793184489, -0.0001506462985, -0.0000716803760, +0.0000143360752, + +0.0000860164512, +0.0001290246769, +0.0001146886016, +0.0000286721504, + -0.0000573443008, -0.0001363102233, -0.0001720329025, -0.0001506462985, + -0.0000860164512, -0.0000286721504, +0.0000000000000, -0.0000286721504, + -0.0000933019976, -0.0001146886016, -0.0000646298472, +0.0000000000000, + +0.0000430082256, +0.0000286721504, +0.0000000000000, -0.0000143360752, + -0.0000286721504, -0.0000286721504, -0.0000286721504, -0.0000359576968, + -0.0000216216216, +0.0000143360752, +0.0000430082256, +0.0000286721504, + -0.0000072855464, -0.0000430082256, -0.0000716803760, -0.0000716803760, + -0.0000502937720, -0.0000430082256, -0.0000860164512, -0.0001720329025, + -0.0002152761457, -0.0001793184489, -0.0000716803760, +0.0000430082256, + +0.0001219741481, +0.0001363102233, +0.0000716803760, -0.0000359576968, + -0.0001290246769, -0.0001793184489, -0.0001936545241, -0.0001649823737, + -0.0001219741481, -0.0000933019976, -0.0000716803760, -0.0000143360752, + +0.0000502937720, +0.0001003525264, +0.0000933019976, +0.0000216216216, + -0.0000716803760, -0.0001290246769, -0.0001290246769, -0.0000716803760, + -0.0000359576968, -0.0000789659224, -0.0001793184489, -0.0002653349001, + -0.0002796709753, -0.0002079905993, -0.0000789659224, +0.0000573443008, + +0.0001506462985, +0.0001720329025, +0.0001576968273, +0.0001363102233, + +0.0001003525264, +0.0000502937720, -0.0000286721504, -0.0001219741481, + -0.0001649823737, -0.0001433607521, -0.0000860164512, -0.0000072855464, + +0.0000430082256, +0.0000430082256, -0.0000143360752, -0.0000860164512, + -0.0001290246769, -0.0001290246769, -0.0000789659224, -0.0000286721504, + +0.0000000000000, -0.0000216216216, -0.0000860164512, -0.0001433607521, + -0.0001793184489, -0.0001649823737, -0.0000933019976, -0.0000072855464, + +0.0000573443008, +0.0001003525264, +0.0001003525264, +0.0000430082256, + -0.0000430082256, -0.0001576968273, -0.0002366627497, -0.0002653349001, + -0.0002079905993, -0.0000789659224, +0.0000789659224, +0.0002079905993, + +0.0002366627497, +0.0001720329025, +0.0000430082256, -0.0001003525264, + -0.0002223266745, -0.0002940070505, -0.0003012925969, -0.0002366627497, + -0.0001076380729, +0.0000072855464, +0.0000933019976, +0.0001219741481, + +0.0001076380729, +0.0000502937720, -0.0000430082256, -0.0001433607521, + -0.0001649823737, -0.0001003525264, +0.0000000000000, +0.0000646298472, + +0.0000789659224, +0.0000716803760, +0.0000573443008, +0.0000000000000, + -0.0000646298472, -0.0001219741481, -0.0001506462985, -0.0001649823737, + -0.0001576968273, -0.0001290246769, -0.0000789659224, -0.0000216216216, + +0.0000216216216, +0.0000216216216, -0.0000072855464, -0.0000502937720, + -0.0000646298472, -0.0000143360752, +0.0000286721504, +0.0000359576968, + +0.0000000000000, -0.0000216216216, -0.0000502937720, -0.0000789659224, + -0.0000789659224, -0.0000716803760, -0.0000286721504, +0.0000143360752, + +0.0000716803760, +0.0000933019976, +0.0000789659224, +0.0000430082256, + +0.0000000000000, -0.0000143360752, -0.0000286721504, -0.0000286721504, + -0.0000216216216, -0.0000286721504, -0.0000286721504, -0.0000216216216, + -0.0000072855464, +0.0000000000000, +0.0000000000000, +0.0000000000000, + -0.0000143360752, -0.0000143360752, +0.0000000000000, +0.0000000000000, + +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000 +}; diff --git a/plugins/LadspaEffect/swh/impulses/10-fender-bassman-at4050.h b/plugins/LadspaEffect/swh/impulses/10-fender-bassman-at4050.h new file mode 100644 index 000000000..912ff80ee --- /dev/null +++ b/plugins/LadspaEffect/swh/impulses/10-fender-bassman-at4050.h @@ -0,0 +1,797 @@ +float fender_bassman_at4050[] = { + +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, + +0.0000000000000, +0.0000075609756, +0.0000075609756, +0.0000075609756, + +0.0000000000000, +0.0000000000000, -0.0000148780488, -0.0000297560976, + -0.0000297560976, -0.0000224390244, +0.0000000000000, +0.0000224390244, + +0.0000595121951, +0.0000743902439, +0.0000670731707, +0.0000373170732, + +0.0000000000000, -0.0000373170732, -0.0000743902439, -0.0000819512195, + -0.0000521951220, -0.0000075609756, +0.0000297560976, +0.0000743902439, + +0.0000968292683, +0.0000819512195, +0.0000521951220, +0.0000000000000, + -0.0000224390244, -0.0000446341463, -0.0000373170732, -0.0000075609756, + +0.0000224390244, +0.0000670731707, +0.0001117073171, +0.0001339024390, + +0.0001414634146, +0.0001339024390, +0.0001265853659, +0.0001041463415, + +0.0000743902439, +0.0000521951220, +0.0000224390244, +0.0000075609756, + +0.0000000000000, +0.0000075609756, +0.0000297560976, +0.0000595121951, + +0.0000968292683, +0.0001265853659, +0.0001414634146, +0.0001414634146, + +0.0001190243902, +0.0000968292683, +0.0000743902439, +0.0000670731707, + +0.0000670731707, +0.0000892682927, +0.0001117073171, +0.0001339024390, + +0.0001339024390, +0.0001265853659, +0.0000968292683, +0.0000521951220, + +0.0000000000000, -0.0000148780488, -0.0000148780488, +0.0000000000000, + +0.0000297560976, +0.0000743902439, +0.0001117073171, +0.0001041463415, + +0.0000670731707, -0.0000148780488, -0.0001339024390, -0.0002456097561, + -0.0003200000000, -0.0003275609756, -0.0002456097561, -0.0000968292683, + +0.0000819512195, +0.0002680487805, +0.0003943902439, +0.0004317073171, + +0.0003573170732, +0.0002009756098, +0.0000075609756, -0.0001636585366, + -0.0002680487805, -0.0002829268293, -0.0002158536585, -0.0001041463415, + +0.0000000000000, +0.0000521951220, +0.0000446341463, -0.0000224390244, + -0.0001190243902, -0.0001860975610, -0.0001860975610, -0.0000892682927, + +0.0000743902439, +0.0002753658537, +0.0004392682927, +0.0005136585366, + +0.0004690243902, +0.0003051219512, +0.0000670731707, -0.0001785365854, + -0.0003573170732, -0.0004243902439, -0.0003573170732, -0.0001785365854, + +0.0000521951220, +0.0002829268293, +0.0004392682927, +0.0004912195122, + +0.0004317073171, +0.0003126829268, +0.0001712195122, +0.0000595121951, + +0.0000000000000, -0.0000075609756, +0.0000075609756, +0.0000373170732, + +0.0000521951220, +0.0000446341463, +0.0000224390244, +0.0000224390244, + +0.0000595121951, +0.0001487804878, +0.0002829268293, +0.0004243902439, + +0.0005285365854, +0.0005507317073, +0.0004614634146, +0.0002902439024, + +0.0000670731707, -0.0001265853659, -0.0002531707317, -0.0002531707317, + -0.0001414634146, +0.0000521951220, +0.0002680487805, +0.0004317073171, + +0.0005060975610, +0.0004690243902, +0.0003497560976, +0.0001860975610, + +0.0000297560976, -0.0000670731707, -0.0001117073171, -0.0001041463415, + -0.0000743902439, -0.0000446341463, -0.0000297560976, -0.0000373170732, + -0.0000521951220, -0.0000521951220, -0.0000297560976, +0.0000224390244, + +0.0000892682927, +0.0001487804878, +0.0001934146341, +0.0002082926829, + +0.0001785365854, +0.0001190243902, +0.0000148780488, -0.0001041463415, + -0.0002604878049, -0.0004092682927, -0.0005285365854, -0.0005731707317, + -0.0005434146341, -0.0004243902439, -0.0002382926829, -0.0000224390244, + +0.0001487804878, +0.0002680487805, +0.0002902439024, +0.0002234146341, + +0.0001117073171, +0.0000075609756, -0.0000373170732, -0.0000075609756, + +0.0000819512195, +0.0001860975610, +0.0002307317073, +0.0001712195122, + -0.0000148780488, -0.0003051219512, -0.0006102439024, -0.0008336585366, + -0.0009007317073, -0.0007814634146, -0.0004987804878, -0.0001339024390, + +0.0002158536585, +0.0004987804878, +0.0006848780488, +0.0007665853659, + +0.0007814634146, +0.0007741463415, +0.0007295121951, +0.0006402439024, + +0.0004763414634, +0.0002158536585, -0.0001117073171, -0.0004541463415, + -0.0007219512195, -0.0008409756098, -0.0007517073171, -0.0004763414634, + -0.0001041463415, +0.0002531707317, +0.0005060975610, +0.0005880487805, + +0.0004987804878, +0.0003126829268, +0.0001117073171, +0.0000000000000, + +0.0000297560976, +0.0001785365854, +0.0003870731707, +0.0005656097561, + +0.0006402439024, +0.0005731707317, +0.0004019512195, +0.0001860975610, + +0.0000000000000, -0.0001339024390, -0.0001860975610, -0.0001860975610, + -0.0001712195122, -0.0001487804878, -0.0001487804878, -0.0001414634146, + -0.0001041463415, -0.0000595121951, -0.0000297560976, -0.0000670731707, + -0.0002082926829, -0.0004690243902, -0.0007814634146, -0.0010346341463, + -0.0011017073171, -0.0008858536585, -0.0003721951220, +0.0003200000000, + +0.0010121951220, +0.0015036585366, +0.0015929268293, +0.0012653658537, + +0.0005656097561, -0.0003200000000, -0.0012058536585, -0.0018607317073, + -0.0022553658537, -0.0023000000000, -0.0020765853659, -0.0017863414634, + -0.0011834146341, -0.0007665853659, -0.0003573170732, +0.0001041463415, + +0.0005060975610, +0.0006402439024, +0.0005804878049, +0.0002604878049, + -0.0001563414634, -0.0006700000000, -0.0010197560976, -0.0011909756098, + -0.0011017073171, -0.0008187804878, -0.0004541463415, -0.0002082926829, + -0.0001860975610, -0.0005136585366, -0.0009526829268, -0.0014587804878, + -0.0017343902439, -0.0017046341463, -0.0012429268293, -0.0006921951220, + -0.0002456097561, -0.0001414634146, -0.0004690243902, -0.0011760975610, + -0.0021734146341, -0.0030070731707, -0.0038109756098, -0.0043914634146, + -0.0046446341463, -0.0060141463415, -0.0069968292683, -0.0061109756098, + -0.0112765853659, -0.0028880487805, -0.0133160975610, -0.0158468292683, + +0.0111129268293, +0.0523563414634, +0.0271829268293, -0.0940314634146, + -0.1121929268293, -0.0270787804878, -0.0056346341463, +0.0788768292683, + +0.2205675609756, +0.2438875609756, +0.2013341463415, +0.0987726829268, + -0.0169558536585, -0.0634765853659, -0.1072729268293, -0.1181478048780, + -0.0854714634146, -0.0759143902439, -0.0531675609756, -0.0438039024390, + -0.0118051219512, +0.0427692682927, +0.0578568292683, +0.0620697560976, + +0.0631565853659, +0.0263492682927, +0.0067734146341, +0.0035726829268, + -0.0035280487805, +0.0041309756098, -0.0034239024390, -0.0248382926829, + -0.0334651219512, -0.0292895121951, -0.0248382926829, -0.0094009756098, + +0.0009526829268, +0.0068702439024, +0.0107182926829, +0.0067360975610, + +0.0072795121951, +0.0015853658537, -0.0085970731707, -0.0055304878049, + -0.0116785365854, -0.0262004878049, -0.0176853658537, -0.0189507317073, + -0.0246968292683, -0.0144697560976, -0.0078900000000, -0.0042873170732, + -0.0071158536585, -0.0094231707317, -0.0066841463415, -0.0096539024390, + -0.0071678048780, +0.0035356097561, +0.0047041463415, +0.0074358536585, + +0.0050241463415, +0.0031187804878, +0.0093934146341, +0.0041160975610, + +0.0022851219512, +0.0048009756098, -0.0053741463415, -0.0188985365854, + -0.0271607317073, -0.0242131707317, -0.0158914634146, -0.0160329268293, + -0.0143953658537, -0.0037663414634, +0.0031409756098, +0.0113734146341, + +0.0114775609756, +0.0096168292683, +0.0090882926829, -0.0007592682927, + -0.0072573170732, -0.0109268292683, -0.0189953658537, -0.0182658536585, + -0.0130407317073, -0.0115148780488, -0.0068329268293, -0.0076814634146, + -0.0087534146341, -0.0070117073171, -0.0061853658537, -0.0031782926829, + +0.0008485365854, -0.0012653658537, -0.0034314634146, -0.0052773170732, + -0.0105768292683, -0.0125419512195, -0.0067809756098, +0.0012504878049, + +0.0084629268293, +0.0103982926829, +0.0069073170732, +0.0015407317073, + -0.0062821951220, -0.0092668292683, -0.0043170731707, +0.0008112195122, + +0.0006251219512, -0.0027317073171, -0.0044512195122, -0.0069668292683, + -0.0116860975610, -0.0127578048780, -0.0122963414634, -0.0119912195122, + -0.0087012195122, -0.0048829268293, -0.0025680487805, -0.0023892682927, + -0.0017641463415, +0.0001934146341, +0.0027019512195, +0.0068775609756, + +0.0097358536585, +0.0112617073171, +0.0144548780488, +0.0131673170732, + +0.0073019512195, +0.0018904878049, -0.0044809756098, -0.0090585365854, + -0.0136882926829, -0.0167921951220, -0.0142241463415, -0.0103536585366, + -0.0067063414634, -0.0028136585366, -0.0022329268293, -0.0010270731707, + +0.0002531707317, +0.0000743902439, +0.0016673170732, +0.0036770731707, + +0.0049348780488, +0.0060960975610, +0.0060663414634, +0.0067436585366, + +0.0074582926829, +0.0059770731707, +0.0046968292683, +0.0042278048780, + +0.0033792682927, +0.0030295121951, +0.0032378048780, +0.0029624390244, + +0.0029848780488, +0.0042724390244, +0.0060812195122, +0.0066246341463, + +0.0060068292683, +0.0058653658537, +0.0064458536585, +0.0062524390244, + +0.0051434146341, +0.0028804878049, +0.0017195121951, +0.0030814634146, + +0.0039375609756, +0.0037141463415, +0.0037960975610, +0.0044360975610, + +0.0045626829268, +0.0029400000000, +0.0006251219512, -0.0016151219512, + -0.0015929268293, +0.0024041463415, +0.0082621951220, +0.0125865853659, + +0.0135914634146, +0.0116041463415, +0.0093041463415, +0.0064160975610, + +0.0024563414634, -0.0001712195122, -0.0003795121951, -0.0000148780488, + +0.0014736585366, +0.0040417073171, +0.0056346341463, +0.0076814634146, + +0.0094380487805, +0.0103239024390, +0.0094456097561, +0.0069743902439, + +0.0068107317073, +0.0081429268293, +0.0061258536585, +0.0040565853659, + +0.0041682926829, +0.0057239024390, +0.0076143902439, +0.0057165853659, + +0.0016895121951, -0.0002829268293, -0.0009007317073, +0.0006029268293, + +0.0035951219512, +0.0057685365854, +0.0080612195122, +0.0092446341463, + +0.0073985365854, +0.0045775609756, +0.0025158536585, +0.0005285365854, + -0.0008187804878, -0.0009080487805, -0.0001934146341, +0.0021139024390, + +0.0047934146341, +0.0066990243902, +0.0076814634146, +0.0064309756098, + +0.0041012195122, +0.0027839024390, +0.0033717073171, +0.0041385365854, + +0.0036026829268, +0.0042278048780, +0.0050092682927, +0.0030368292683, + +0.0007295121951, -0.0008039024390, -0.0019873170732, -0.0030295121951, + -0.0038631707317, -0.0035356097561, -0.0015556097561, +0.0016895121951, + +0.0046743902439, +0.0056792682927, +0.0060217073171, +0.0066021951220, + +0.0069221951220, +0.0057165853659, +0.0025231707317, -0.0009304878049, + -0.0036100000000, -0.0051582926829, -0.0047041463415, -0.0021287804878, + +0.0001712195122, +0.0007517073171, +0.0013621951220, +0.0018682926829, + +0.0012131707317, +0.0010270731707, +0.0008336585366, -0.0002902439024, + -0.0005804878049, -0.0003051219512, -0.0000075609756, +0.0004839024390, + -0.0000373170732, -0.0007592682927, -0.0011239024390, -0.0013621951220, + -0.0019575609756, -0.0033270731707, -0.0036992682927, -0.0025158536585, + -0.0015853658537, -0.0010792682927, +0.0002680487805, +0.0010568292683, + +0.0005209756098, +0.0000670731707, -0.0013324390244, -0.0026721951220, + -0.0031409756098, -0.0039673170732, -0.0042053658537, -0.0045329268293, + -0.0057165853659, -0.0054634146341, -0.0046446341463, -0.0027690243902, + +0.0000968292683, +0.0020990243902, +0.0043692682927, +0.0052251219512, + +0.0027763414634, -0.0006326829268, -0.0040268292683, -0.0065426829268, + -0.0069446341463, -0.0065278048780, -0.0046743902439, -0.0016002439024, + +0.0013546341463, +0.0024636585366, +0.0011612195122, -0.0008709756098, + -0.0023670731707, -0.0038853658537, -0.0040641463415, -0.0028358536585, + -0.0028285365854, -0.0025531707317, -0.0014812195122, -0.0007814634146, + +0.0001712195122, +0.0005507317073, +0.0006178048780, -0.0002753658537, + -0.0027912195122, -0.0035802439024, -0.0030665853659, -0.0034982926829, + -0.0031858536585, -0.0026497560976, -0.0011760975610, +0.0012280487805, + +0.0015929268293, +0.0013919512195, -0.0002531707317, -0.0025456097561, + -0.0024934146341, -0.0028731707317, -0.0038780487805, -0.0035207317073, + -0.0037217073171, -0.0029029268293, -0.0014514634146, -0.0019651219512, + -0.0017195121951, -0.0009007317073, -0.0008187804878, -0.0000148780488, + +0.0002009756098, -0.0005582926829, -0.0002158536585, -0.0000373170732, + -0.0000521951220, +0.0005656097561, +0.0009900000000, +0.0013770731707, + +0.0009824390244, +0.0008782926829, +0.0017863414634, +0.0013992682927, + +0.0004912195122, -0.0002604878049, -0.0012802439024, -0.0018607317073, + -0.0023819512195, -0.0020914634146, -0.0017119512195, -0.0021512195122, + -0.0011017073171, +0.0007368292683, +0.0017268292683, +0.0022851219512, + +0.0015482926829, +0.0003573170732, -0.0003943902439, -0.0010419512195, + -0.0009229268293, -0.0008336585366, -0.0012653658537, -0.0012653658537, + -0.0012802439024, -0.0011909756098, -0.0003721951220, +0.0005731707317, + +0.0012429268293, +0.0016375609756, +0.0017268292683, +0.0018012195122, + +0.0015036585366, +0.0008782926829, +0.0008260975610, +0.0006402439024, + +0.0005285365854, +0.0012356097561, +0.0015185365854, +0.0010419512195, + +0.0002753658537, -0.0007443902439, -0.0011017073171, -0.0009602439024, + -0.0013770731707, -0.0018756097561, -0.0018012195122, -0.0013992682927, + -0.0006997560976, -0.0000373170732, +0.0005953658537, +0.0013026829268, + +0.0013175609756, +0.0012504878049, +0.0013843902439, +0.0007517073171, + +0.0001041463415, -0.0004690243902, -0.0005880487805, +0.0007592682927, + +0.0018607317073, +0.0023670731707, +0.0026424390244, +0.0021436585366, + +0.0020319512195, +0.0016300000000, +0.0005656097561, -0.0000968292683, + -0.0010868292683, -0.0013992682927, -0.0006402439024, +0.0003870731707, + +0.0012504878049, +0.0011536585366, +0.0010719512195, +0.0007443902439, + -0.0009229268293, -0.0014439024390, -0.0012356097561, -0.0019651219512, + -0.0022478048780, -0.0017417073171, -0.0010197560976, -0.0005136585366, + -0.0003275609756, +0.0001265853659, +0.0009602439024, +0.0014290243902, + +0.0022256097561, +0.0031039024390, +0.0027465853659, +0.0021660975610, + +0.0012951219512, -0.0002604878049, -0.0010792682927, -0.0013324390244, + -0.0013397560976, -0.0008336585366, -0.0007517073171, -0.0007665853659, + -0.0006624390244, -0.0009751219512, -0.0004541463415, +0.0003348780488, + +0.0006029268293, +0.0010419512195, +0.0013621951220, +0.0011387804878, + +0.0001117073171, -0.0012280487805, -0.0020914634146, -0.0022775609756, + -0.0020617073171, -0.0015258536585, -0.0006251219512, +0.0001190243902, + +0.0004317073171, +0.0004392682927, +0.0002009756098, -0.0003126829268, + -0.0007295121951, -0.0007665853659, -0.0005953658537, -0.0002082926829, + -0.0001712195122, -0.0004763414634, -0.0003275609756, -0.0004614634146, + -0.0007592682927, -0.0006773170732, -0.0011834146341, -0.0018458536585, + -0.0021660975610, -0.0021882926829, -0.0012729268293, -0.0007295121951, + -0.0010495121951, -0.0010568292683, -0.0012878048780, -0.0013546341463, + -0.0011314634146, -0.0013324390244, -0.0012802439024, -0.0012356097561, + -0.0017939024390, -0.0021734146341, -0.0024414634146, -0.0023297560976, + -0.0015334146341, -0.0006326829268, +0.0003721951220, +0.0010868292683, + +0.0008931707317, +0.0008039024390, +0.0009973170732, +0.0004839024390, + -0.0006848780488, -0.0017343902439, -0.0022180487805, -0.0027614634146, + -0.0032378048780, -0.0031558536585, -0.0031707317073, -0.0027241463415, + -0.0015258536585, -0.0007963414634, -0.0005434146341, -0.0010346341463, + -0.0016524390244, -0.0015929268293, -0.0016821951220, -0.0018236585366, + -0.0016448780488, -0.0019129268293, -0.0018534146341, -0.0014365853659, + -0.0012951219512, -0.0009080487805, -0.0005507317073, -0.0004690243902, + -0.0002680487805, -0.0002234146341, +0.0000743902439, +0.0005731707317, + +0.0003573170732, -0.0001041463415, -0.0007368292683, -0.0011387804878, + -0.0006178048780, -0.0002604878049, -0.0004392682927, -0.0005953658537, + -0.0011612195122, -0.0014217073171, -0.0012131707317, -0.0015185365854, + -0.0012356097561, -0.0005434146341, -0.0004392682927, -0.0002753658537, + -0.0002009756098, -0.0002307317073, -0.0003870731707, -0.0007517073171, + -0.0008634146341, -0.0011612195122, -0.0014887804878, -0.0006178048780, + +0.0003573170732, +0.0004019512195, +0.0003497560976, -0.0000148780488, + -0.0006773170732, -0.0007592682927, -0.0006326829268, -0.0007295121951, + -0.0007741463415, -0.0006551219512, -0.0005209756098, -0.0004465853659, + -0.0005285365854, -0.0003051219512, +0.0002009756098, +0.0001265853659, + -0.0001712195122, -0.0006102439024, -0.0012207317073, -0.0013100000000, + -0.0008485365854, -0.0004168292683, -0.0002234146341, -0.0006402439024, + -0.0011090243902, -0.0016226829268, -0.0021363414634, -0.0019948780488, + -0.0017790243902, -0.0015185365854, -0.0006624390244, +0.0000373170732, + -0.0000075609756, -0.0002531707317, -0.0003573170732, -0.0003646341463, + -0.0001563414634, +0.0002531707317, +0.0006848780488, +0.0010719512195, + +0.0012504878049, +0.0010197560976, +0.0000670731707, -0.0010048780488, + -0.0012729268293, -0.0010121951220, -0.0007517073171, -0.0004763414634, + -0.0006848780488, -0.0009675609756, -0.0007814634146, -0.0004614634146, + -0.0000148780488, +0.0000297560976, -0.0002680487805, -0.0003721951220, + -0.0004541463415, -0.0007295121951, -0.0008409756098, -0.0004019512195, + +0.0003348780488, +0.0003573170732, +0.0002829268293, +0.0006997560976, + +0.0005656097561, +0.0000595121951, -0.0007517073171, -0.0015853658537, + -0.0016970731707, -0.0010719512195, +0.0001487804878, +0.0010346341463, + +0.0013992682927, +0.0018904878049, +0.0015036585366, +0.0004019512195, + -0.0005434146341, -0.0010495121951, -0.0005656097561, -0.0000819512195, + +0.0002604878049, +0.0008709756098, +0.0005060975610, -0.0001563414634, + -0.0001041463415, -0.0000670731707, -0.0000743902439, +0.0002307317073, + +0.0006624390244, +0.0008260975610, +0.0002307317073, -0.0001712195122, + +0.0000075609756, -0.0000373170732, +0.0001117073171, +0.0007890243902, + +0.0009973170732, +0.0008782926829, +0.0010121951220, +0.0011314634146, + +0.0012653658537, +0.0016821951220, +0.0020468292683, +0.0018309756098, + +0.0009602439024, +0.0000373170732, -0.0004092682927, -0.0004987804878, + -0.0002531707317, -0.0001934146341, -0.0004763414634, -0.0002902439024, + +0.0004243902439, +0.0009751219512, +0.0011909756098, +0.0010719512195, + +0.0009751219512, +0.0009378048780, +0.0007963414634, +0.0005804878049, + +0.0003275609756, +0.0006102439024, +0.0010941463415, +0.0011909756098, + +0.0012878048780, +0.0012653658537, +0.0010719512195, +0.0012578048780, + +0.0014217073171, +0.0014439024390, +0.0013026829268, +0.0010048780488, + +0.0009304878049, +0.0010121951220, +0.0010792682927, +0.0013695121951, + +0.0018980487805, +0.0024860975610, +0.0025231707317, +0.0015704878049, + +0.0003573170732, -0.0002978048780, -0.0005434146341, -0.0007219512195, + -0.0003275609756, +0.0001712195122, +0.0004614634146, +0.0008485365854, + +0.0010792682927, +0.0012131707317, +0.0012578048780, +0.0010495121951, + +0.0010568292683, +0.0010568292683, +0.0009751219512, +0.0009824390244, + +0.0011165853659, +0.0015853658537, +0.0017939024390, +0.0016597560976, + +0.0014587804878, +0.0009751219512, +0.0006624390244, +0.0007368292683, + +0.0010643902439, +0.0016746341463, +0.0018087804878, +0.0016151219512, + +0.0015185365854, +0.0009973170732, +0.0005136585366, +0.0005507317073, + +0.0006251219512, +0.0007963414634, +0.0009824390244, +0.0006700000000, + +0.0001190243902, -0.0004317073171, -0.0006326829268, -0.0002307317073, + +0.0004019512195, +0.0010868292683, +0.0014736585366, +0.0013397560976, + +0.0012429268293, +0.0011239024390, +0.0006624390244, +0.0002902439024, + +0.0002680487805, +0.0006102439024, +0.0009675609756, +0.0011612195122, + +0.0012729268293, +0.0014587804878, +0.0015109756098, +0.0010197560976, + +0.0003200000000, +0.0000000000000, -0.0000743902439, +0.0001041463415, + +0.0003870731707, +0.0002680487805, +0.0001636585366, +0.0002680487805, + +0.0004690243902, +0.0008336585366, +0.0007814634146, +0.0003795121951, + +0.0002829268293, +0.0003497560976, +0.0001636585366, -0.0001563414634, + -0.0001712195122, +0.0000000000000, -0.0000670731707, -0.0003348780488, + -0.0005358536585, -0.0002082926829, +0.0004614634146, +0.0007592682927, + +0.0005582926829, +0.0002753658537, +0.0002307317073, +0.0001860975610, + -0.0001860975610, -0.0005731707317, -0.0008112195122, -0.0005582926829, + +0.0004912195122, +0.0013546341463, +0.0015407317073, +0.0010121951220, + -0.0000670731707, -0.0010346341463, -0.0014663414634, -0.0015185365854, + -0.0011536585366, -0.0004839024390, +0.0002531707317, +0.0007219512195, + +0.0006624390244, +0.0006251219512, +0.0007592682927, +0.0006029268293, + +0.0000968292683, -0.0005507317073, -0.0009602439024, -0.0006997560976, + -0.0001265853659, +0.0002158536585, +0.0003573170732, +0.0004763414634, + +0.0004839024390, +0.0002829268293, +0.0002382926829, +0.0001636585366, + -0.0001414634146, -0.0000148780488, +0.0001860975610, -0.0003573170732, + -0.0004763414634, -0.0003943902439, -0.0009080487805, -0.0008409756098, + -0.0007219512195, -0.0003795121951, +0.0000148780488, -0.0002009756098, + +0.0002234146341, +0.0001117073171, -0.0007517073171, -0.0004690243902, + -0.0003721951220, -0.0009304878049, -0.0005804878049, -0.0004168292683, + -0.0002829268293, +0.0001712195122, +0.0003348780488, +0.0004168292683, + +0.0002978048780, +0.0007368292683, +0.0010419512195, +0.0004763414634, + +0.0002009756098, +0.0001190243902, -0.0002829268293, +0.0000743902439, + +0.0004392682927, +0.0001636585366, -0.0003200000000, -0.0007890243902, + -0.0007146341463, -0.0001636585366, +0.0005285365854, +0.0012280487805, + +0.0016821951220, +0.0014439024390, +0.0008039024390, +0.0001712195122, + -0.0000819512195, -0.0002158536585, -0.0000148780488, +0.0006102439024, + +0.0007368292683, +0.0006251219512, +0.0004690243902, -0.0000521951220, + -0.0003051219512, -0.0001265853659, -0.0000670731707, +0.0003126829268, + +0.0011463414634, +0.0016078048780, +0.0015334146341, +0.0011536585366, + +0.0006551219512, +0.0002978048780, +0.0000595121951, -0.0000521951220, + +0.0001785365854, +0.0004168292683, +0.0006102439024, +0.0008634146341, + +0.0008709756098, +0.0010197560976, +0.0011982926829, +0.0008709756098, + +0.0006402439024, +0.0005136585366, +0.0000670731707, -0.0001934146341, + +0.0000000000000, +0.0003275609756, +0.0006102439024, +0.0007146341463, + +0.0008634146341, +0.0010419512195, +0.0011387804878, +0.0010346341463, + +0.0007741463415, +0.0004541463415, +0.0001041463415, -0.0001117073171, + -0.0001860975610, -0.0001487804878, +0.0000000000000, +0.0002456097561, + +0.0008409756098, +0.0013473170732, +0.0014290243902, +0.0014439024390, + +0.0013324390244, +0.0010197560976, +0.0005434146341, +0.0002382926829, + +0.0005582926829, +0.0010121951220, +0.0011165853659, +0.0011165853659, + +0.0008560975610, +0.0005285365854, +0.0003721951220, +0.0003497560976, + +0.0002978048780, +0.0002009756098, +0.0001563414634, +0.0002680487805, + +0.0006251219512, +0.0008112195122, +0.0006773170732, +0.0005656097561, + +0.0005136585366, +0.0003646341463, +0.0003348780488, +0.0003573170732, + +0.0007741463415, +0.0012729268293, +0.0013175609756, +0.0011834146341, + +0.0007741463415, +0.0002307317073, -0.0000224390244, -0.0002382926829, + -0.0003721951220, -0.0001636585366, +0.0000000000000, -0.0000148780488, + -0.0000892682927, -0.0002531707317, -0.0002753658537, -0.0001265853659, + +0.0000000000000, +0.0001117073171, +0.0000000000000, -0.0002978048780, + -0.0003573170732, -0.0003721951220, -0.0004541463415, -0.0002158536585, + +0.0000595121951, +0.0002382926829, +0.0002082926829, +0.0000000000000, + -0.0001414634146, -0.0001339024390, +0.0000521951220, +0.0001785365854, + +0.0000373170732, -0.0001339024390, -0.0002753658537, -0.0004987804878, + -0.0005209756098, -0.0004168292683, -0.0004317073171, -0.0004690243902, + -0.0003424390244, -0.0001934146341, -0.0001339024390, -0.0000670731707, + -0.0002158536585, -0.0005285365854, -0.0007665853659, -0.0006921951220, + -0.0003348780488, +0.0000446341463, +0.0002680487805, +0.0003126829268, + +0.0001636585366, -0.0002307317073, -0.0005358536585, -0.0005434146341, + -0.0004019512195, -0.0003126829268, -0.0002978048780, -0.0005209756098, + -0.0008782926829, -0.0009973170732, -0.0008560975610, -0.0006029268293, + -0.0004392682927, -0.0002978048780, -0.0001339024390, -0.0000224390244, + +0.0001041463415, +0.0001190243902, -0.0002978048780, -0.0006251219512, + -0.0005358536585, -0.0001934146341, +0.0000743902439, +0.0001785365854, + +0.0001860975610, +0.0000670731707, -0.0000968292683, -0.0002382926829, + -0.0004019512195, -0.0004614634146, -0.0002009756098, +0.0001934146341, + +0.0002902439024, +0.0000075609756, -0.0002158536585, -0.0004987804878, + -0.0008112195122, -0.0008039024390, -0.0006624390244, -0.0004912195122, + -0.0004243902439, -0.0006997560976, -0.0008187804878, -0.0006251219512, + -0.0003646341463, -0.0000892682927, +0.0000224390244, +0.0000297560976, + +0.0000595121951, -0.0000892682927, -0.0002829268293, -0.0004763414634, + -0.0006029268293, -0.0003646341463, -0.0002531707317, -0.0003424390244, + -0.0001636585366, -0.0001339024390, -0.0002082926829, -0.0002456097561, + -0.0005656097561, -0.0007741463415, -0.0008409756098, -0.0008560975610, + -0.0006773170732, -0.0007443902439, -0.0009007317073, -0.0005731707317, + -0.0004168292683, -0.0004987804878, -0.0005358536585, -0.0006624390244, + -0.0006326829268, -0.0005880487805, -0.0005731707317, -0.0004392682927, + -0.0004987804878, -0.0006029268293, -0.0005656097561, -0.0006178048780, + -0.0006624390244, -0.0005953658537, -0.0004614634146, -0.0002382926829, + -0.0001487804878, -0.0002382926829, -0.0004465853659, -0.0006997560976, + -0.0006551219512, -0.0004614634146, -0.0004690243902, -0.0005060975610, + -0.0005434146341, -0.0006997560976, -0.0007741463415, -0.0006029268293, + -0.0004465853659, -0.0005507317073, -0.0005582926829, -0.0005434146341, + -0.0006102439024, -0.0005582926829, -0.0005582926829, -0.0007219512195, + -0.0008112195122, -0.0008260975610, -0.0006326829268, -0.0003200000000, + -0.0001117073171, -0.0000148780488, -0.0001487804878, -0.0002234146341, + -0.0001487804878, -0.0002978048780, -0.0005285365854, -0.0007368292683, + -0.0009304878049, -0.0009900000000, -0.0011165853659, -0.0010792682927, + -0.0007146341463, -0.0005136585366, -0.0004839024390, -0.0004614634146, + -0.0006997560976, -0.0008336585366, -0.0008112195122, -0.0006102439024, + -0.0001414634146, +0.0000521951220, -0.0001117073171, -0.0002382926829, + -0.0004317073171, -0.0007517073171, -0.0008336585366, -0.0007368292683, + -0.0005434146341, -0.0004168292683, -0.0004092682927, -0.0004317073171, + -0.0005880487805, -0.0007368292683, -0.0008260975610, -0.0009304878049, + -0.0007665853659, -0.0004392682927, -0.0003870731707, -0.0004168292683, + -0.0003870731707, -0.0004987804878, -0.0005804878049, -0.0005731707317, + -0.0004839024390, -0.0003870731707, -0.0003870731707, -0.0004243902439, + -0.0004912195122, -0.0006475609756, -0.0006624390244, -0.0006402439024, + -0.0007295121951, -0.0006921951220, -0.0005582926829, -0.0003348780488, + -0.0001265853659, -0.0000446341463, +0.0000595121951, +0.0001265853659, + -0.0000670731707, -0.0003348780488, -0.0006178048780, -0.0007295121951, + -0.0005953658537, -0.0005582926829, -0.0007368292683, -0.0009751219512, + -0.0010419512195, -0.0008187804878, -0.0005880487805, -0.0004614634146, + -0.0003646341463, -0.0004465853659, -0.0005582926829, -0.0005507317073, + -0.0004092682927, -0.0001117073171, +0.0000224390244, -0.0001487804878, + -0.0003870731707, -0.0006700000000, -0.0006773170732, -0.0003497560976, + -0.0001339024390, -0.0000224390244, -0.0001636585366, -0.0004168292683, + -0.0004317073171, -0.0003573170732, -0.0002829268293, -0.0000819512195, + +0.0000373170732, -0.0000075609756, -0.0002234146341, -0.0004839024390, + -0.0006251219512, -0.0008260975610, -0.0008336585366, -0.0006029268293, + -0.0004019512195, -0.0002753658537, -0.0001712195122, -0.0001487804878, + -0.0001636585366, -0.0001636585366, -0.0000743902439, +0.0000224390244, + +0.0000892682927, +0.0002531707317, +0.0003275609756, +0.0002829268293, + +0.0002158536585, +0.0000892682927, -0.0001190243902, -0.0004690243902, + -0.0008409756098, -0.0010495121951, -0.0009751219512, -0.0006475609756, + -0.0002082926829, +0.0002680487805, +0.0006178048780, +0.0005434146341, + +0.0002604878049, -0.0000892682927, -0.0005060975610, -0.0007592682927, + -0.0007963414634, -0.0006773170732, -0.0005358536585, -0.0004317073171, + -0.0002307317073, -0.0000224390244, +0.0000521951220, +0.0002009756098, + +0.0002753658537, +0.0001785365854, +0.0001860975610, +0.0001414634146, + -0.0001563414634, -0.0003573170732, -0.0003721951220, -0.0004614634146, + -0.0004317073171, -0.0001563414634, +0.0001487804878, +0.0004317073171, + +0.0004839024390, +0.0003200000000, +0.0000595121951, -0.0003200000000, + -0.0004912195122, -0.0003870731707, -0.0002604878049, -0.0000743902439, + +0.0000595121951, +0.0000743902439, +0.0001563414634, +0.0002604878049, + +0.0003573170732, +0.0003497560976, +0.0002158536585, +0.0001860975610, + +0.0001265853659, +0.0000670731707, +0.0002604878049, +0.0005136585366, + +0.0006326829268, +0.0005582926829, +0.0004168292683, +0.0003348780488, + +0.0002456097561, +0.0002604878049, +0.0003573170732, +0.0003424390244, + +0.0002082926829, +0.0000521951220, -0.0000595121951, -0.0000968292683, + -0.0000595121951, +0.0000595121951, +0.0002531707317, +0.0003943902439, + +0.0004019512195, +0.0003721951220, +0.0004168292683, +0.0003870731707, + +0.0003348780488, +0.0003348780488, +0.0002531707317, +0.0002234146341, + +0.0003870731707, +0.0005953658537, +0.0006997560976, +0.0006326829268, + +0.0003943902439, +0.0001487804878, +0.0000521951220, +0.0001117073171, + +0.0002009756098, +0.0002680487805, +0.0003275609756, +0.0004392682927, + +0.0005731707317, +0.0006997560976, +0.0006251219512, +0.0003348780488, + +0.0001265853659, +0.0001190243902, +0.0001487804878, +0.0001785365854, + +0.0002082926829, +0.0002604878049, +0.0003943902439, +0.0005209756098, + +0.0006029268293, +0.0005434146341, +0.0003721951220, +0.0002978048780, + +0.0002604878049, +0.0002009756098, +0.0001636585366, +0.0001563414634, + +0.0000819512195, +0.0000000000000, +0.0000595121951, +0.0001487804878, + +0.0001041463415, +0.0000521951220, +0.0001487804878, +0.0003646341463, + +0.0005582926829, +0.0005434146341, +0.0002829268293, -0.0000819512195, + -0.0002753658537, -0.0001339024390, +0.0001414634146, +0.0003126829268, + +0.0003870731707, +0.0004168292683, +0.0004019512195, +0.0003870731707, + +0.0003573170732, +0.0003573170732, +0.0004392682927, +0.0004465853659, + +0.0002456097561, +0.0000595121951, +0.0000075609756, -0.0000373170732, + +0.0001414634146, +0.0004465853659, +0.0005582926829, +0.0005582926829, + +0.0003721951220, +0.0001563414634, +0.0001563414634, +0.0002604878049, + +0.0003573170732, +0.0004392682927, +0.0003721951220, +0.0003424390244, + +0.0004839024390, +0.0005136585366, +0.0003424390244, +0.0001563414634, + +0.0001265853659, +0.0002531707317, +0.0005731707317, +0.0008409756098, + +0.0007890243902, +0.0005507317073, +0.0003573170732, +0.0001563414634, + +0.0000075609756, -0.0000075609756, +0.0000819512195, +0.0003051219512, + +0.0004465853659, +0.0004168292683, +0.0004839024390, +0.0006402439024, + +0.0006402439024, +0.0004987804878, +0.0002978048780, +0.0000968292683, + +0.0000595121951, +0.0001563414634, +0.0002531707317, +0.0002902439024, + +0.0003424390244, +0.0003573170732, +0.0003126829268, +0.0002753658537, + +0.0002009756098, +0.0002158536585, +0.0002456097561, +0.0001190243902, + -0.0000148780488, -0.0001117073171, -0.0000892682927, +0.0001636585366, + +0.0004019512195, +0.0005880487805, +0.0006700000000, +0.0004019512195, + +0.0001712195122, +0.0001563414634, +0.0000595121951, -0.0000595121951, + +0.0000000000000, +0.0001785365854, +0.0002978048780, +0.0002082926829, + -0.0000148780488, -0.0001934146341, -0.0001636585366, +0.0001563414634, + +0.0006475609756, +0.0010346341463, +0.0011239024390, +0.0010643902439, + +0.0008858536585, +0.0005953658537, +0.0002902439024, +0.0000373170732, + +0.0000595121951, +0.0002234146341, +0.0002753658537, +0.0003424390244, + +0.0003795121951, +0.0002978048780, +0.0002158536585, +0.0001190243902, + +0.0000819512195, +0.0001041463415, +0.0000224390244, +0.0000892682927, + +0.0004168292683, +0.0006848780488, +0.0007295121951, +0.0004912195122, + +0.0002082926829, +0.0002009756098, +0.0003646341463, +0.0005804878049, + +0.0007741463415, +0.0006551219512, +0.0003424390244, +0.0002158536585, + +0.0002456097561, +0.0003424390244, +0.0004690243902, +0.0005804878049, + +0.0007368292683, +0.0008187804878, +0.0007295121951, +0.0005507317073, + +0.0004168292683, +0.0003424390244, +0.0001636585366, +0.0000148780488, + +0.0001414634146, +0.0003200000000, +0.0004243902439, +0.0006251219512, + +0.0008336585366, +0.0007741463415, +0.0005060975610, +0.0003051219512, + +0.0001712195122, +0.0000968292683, +0.0000373170732, +0.0000446341463, + +0.0002158536585, +0.0003424390244, +0.0002382926829, +0.0000297560976, + -0.0002082926829, -0.0002978048780, -0.0001785365854, -0.0000224390244, + +0.0002009756098, +0.0003424390244, +0.0004168292683, +0.0006624390244, + +0.0007741463415, +0.0005507317073, +0.0002829268293, +0.0000819512195, + -0.0000373170732, -0.0001117073171, -0.0001339024390, -0.0000521951220, + -0.0000224390244, -0.0000743902439, -0.0001190243902, -0.0000968292683, + +0.0000670731707, +0.0003200000000, +0.0004019512195, +0.0003497560976, + +0.0002604878049, +0.0001636585366, +0.0001041463415, +0.0000373170732, + +0.0000075609756, +0.0000373170732, +0.0001339024390, +0.0003497560976, + +0.0005804878049, +0.0006251219512, +0.0004317073171, +0.0001636585366, + +0.0000297560976, -0.0000743902439, -0.0001487804878, -0.0000595121951, + +0.0000892682927, +0.0002829268293, +0.0003424390244, +0.0002158536585, + +0.0000968292683, -0.0000148780488, -0.0001339024390, -0.0000819512195, + -0.0000224390244, -0.0000224390244, +0.0000968292683, +0.0002009756098, + +0.0002307317073, +0.0003051219512, +0.0003943902439, +0.0004392682927, + +0.0004317073171, +0.0003424390244, +0.0002829268293, +0.0000892682927, + -0.0001041463415, -0.0000521951220, +0.0000000000000, +0.0000373170732, + +0.0001636585366, +0.0002753658537, +0.0003943902439, +0.0004839024390, + +0.0004392682927, +0.0002753658537, +0.0000968292683, +0.0001487804878, + +0.0002753658537, +0.0001785365854, +0.0000148780488, -0.0001563414634, + -0.0002456097561, -0.0002234146341, -0.0002753658537, -0.0002978048780, + -0.0000892682927, +0.0001785365854, +0.0003126829268, +0.0003200000000, + +0.0002456097561, +0.0001636585366, +0.0000595121951, +0.0000224390244, + +0.0001265853659, +0.0001265853659, +0.0000373170732, +0.0000000000000, + -0.0001041463415, -0.0002456097561, -0.0002753658537, -0.0003051219512, + -0.0003051219512, -0.0001414634146, +0.0000743902439, +0.0002531707317, + +0.0003573170732, +0.0002456097561, +0.0000075609756, -0.0001636585366, + -0.0003943902439, -0.0005953658537, -0.0005507317073, -0.0002902439024, + -0.0000148780488, +0.0001117073171, +0.0001785365854, +0.0002234146341, + +0.0001339024390, -0.0000075609756, -0.0000446341463, -0.0000446341463, + -0.0000670731707, -0.0001117073171, -0.0001563414634, -0.0002829268293, + -0.0004019512195, -0.0003200000000, -0.0001860975610, -0.0001785365854, + -0.0002604878049, -0.0002978048780, -0.0002978048780, -0.0003348780488, + -0.0002753658537, -0.0000968292683, +0.0000000000000, +0.0000968292683, + +0.0002531707317, +0.0002680487805, +0.0001117073171, -0.0001190243902, + -0.0003275609756, -0.0004317073171, -0.0004392682927, -0.0003424390244, + -0.0003200000000, -0.0003646341463, -0.0002978048780, -0.0002158536585, + -0.0001636585366, -0.0001041463415, -0.0001414634146, -0.0002307317073, + -0.0002382926829, -0.0003051219512, -0.0003721951220, -0.0003051219512, + -0.0002382926829, -0.0001785365854, -0.0001117073171, -0.0000892682927, + -0.0000968292683, -0.0001265853659, -0.0000819512195, -0.0000373170732, + -0.0000670731707, -0.0000297560976, -0.0000819512195, -0.0003795121951, + -0.0007070731707, -0.0009007317073, -0.0008858536585, -0.0006475609756, + -0.0004690243902, -0.0002902439024, -0.0001414634146, -0.0001117073171, + -0.0000075609756, +0.0000670731707, -0.0000148780488, -0.0001339024390, + -0.0001860975610, -0.0001636585366, -0.0001785365854, -0.0002902439024, + -0.0003051219512, -0.0002604878049, -0.0002829268293, -0.0002234146341, + -0.0001041463415, -0.0001190243902, -0.0001041463415, -0.0000892682927, + -0.0003126829268, -0.0005358536585, -0.0006326829268, -0.0006700000000, + -0.0006326829268, -0.0005507317073, -0.0004541463415, -0.0004168292683, + -0.0004392682927, -0.0003870731707, -0.0002456097561, -0.0000595121951, + +0.0000892682927, +0.0000892682927, -0.0001041463415, -0.0004243902439, + -0.0006178048780, -0.0006102439024, -0.0005136585366, -0.0003200000000, + -0.0001339024390, -0.0001339024390, -0.0002307317073, -0.0002680487805, + -0.0002829268293, -0.0003126829268, -0.0003646341463, -0.0004243902439, + -0.0004987804878, -0.0005209756098, -0.0004243902439, -0.0003497560976, + -0.0002680487805, -0.0000595121951, +0.0000743902439, +0.0000000000000, + -0.0001265853659, -0.0002456097561, -0.0003348780488, -0.0004614634146, + -0.0005804878049, -0.0005731707317, -0.0004392682927, -0.0003200000000, + -0.0002978048780, -0.0002753658537, -0.0002234146341, -0.0001636585366, + -0.0001785365854, -0.0002307317073, -0.0001636585366, -0.0000595121951, + -0.0000595121951, -0.0000819512195, -0.0001190243902, -0.0002082926829, + -0.0003200000000, -0.0005060975610, -0.0006251219512, -0.0005953658537, + -0.0005953658537, -0.0005953658537, -0.0005434146341, -0.0004317073171, + -0.0002456097561, -0.0001265853659, -0.0001414634146, -0.0002082926829, + -0.0002978048780, -0.0003348780488, -0.0003051219512, -0.0001860975610, + -0.0000743902439, -0.0000521951220, -0.0000670731707, -0.0000968292683, + -0.0001712195122, -0.0002456097561, -0.0002902439024, -0.0003200000000, + -0.0003348780488, -0.0002829268293, -0.0001860975610, -0.0001414634146, + -0.0001563414634, -0.0002158536585, -0.0002978048780, -0.0003275609756, + -0.0003795121951, -0.0004168292683, -0.0004092682927, -0.0003200000000, + -0.0002009756098, -0.0001934146341, -0.0002382926829, -0.0002158536585, + -0.0000595121951, +0.0000892682927, +0.0000595121951, +0.0000075609756, + +0.0000373170732, +0.0000000000000, +0.0000000000000, +0.0000521951220, + +0.0000670731707, +0.0000819512195, +0.0000000000000, +0.0000075609756, + +0.0000670731707, -0.0000446341463, -0.0002382926829, -0.0004541463415, + -0.0006102439024, -0.0005209756098, -0.0003051219512, -0.0001041463415, + +0.0000892682927, +0.0002382926829, +0.0003200000000, +0.0002902439024, + +0.0002082926829, +0.0000743902439, -0.0000968292683, -0.0002009756098, + -0.0002307317073, -0.0002456097561, -0.0002307317073, -0.0001117073171, + +0.0001117073171, +0.0002531707317, +0.0002382926829, +0.0001785365854, + +0.0001265853659, +0.0000297560976, -0.0001414634146, -0.0002978048780, + -0.0003497560976, -0.0002753658537, -0.0001785365854, -0.0001414634146, + -0.0000670731707, +0.0000224390244, +0.0000521951220, +0.0001487804878, + +0.0001487804878, +0.0000075609756, -0.0000595121951, -0.0001712195122, + -0.0002158536585, -0.0001265853659, +0.0000000000000, +0.0002009756098, + +0.0002902439024, +0.0001785365854, +0.0000595121951, -0.0000446341463, + -0.0000892682927, -0.0001265853659, -0.0001487804878, +0.0000446341463, + +0.0002753658537, +0.0003348780488, +0.0003051219512, +0.0001563414634, + +0.0000224390244, -0.0000743902439, -0.0001487804878, -0.0000968292683, + -0.0000373170732, +0.0000000000000, +0.0000373170732, -0.0000148780488, + -0.0000743902439, -0.0000297560976, +0.0000743902439, +0.0001190243902, + +0.0000297560976, -0.0000521951220, -0.0000446341463, -0.0000595121951, + +0.0000075609756, +0.0001785365854, +0.0002604878049, +0.0002456097561, + +0.0002829268293, +0.0003200000000, +0.0002082926829, +0.0000595121951, + +0.0000148780488, +0.0000148780488, +0.0000000000000, +0.0000000000000, + +0.0000148780488, +0.0000446341463, +0.0000148780488, +0.0000892682927, + +0.0002307317073, +0.0002234146341, +0.0001414634146, +0.0000595121951, + -0.0000446341463, -0.0001265853659, -0.0002456097561, -0.0003348780488, + -0.0003275609756, -0.0002234146341, -0.0000446341463, +0.0001785365854, + +0.0003424390244, +0.0003943902439, +0.0003795121951, +0.0003497560976, + +0.0003348780488, +0.0002829268293, +0.0001265853659, +0.0000075609756, + -0.0000670731707, -0.0002753658537, -0.0004614634146, -0.0005060975610, + -0.0004541463415, -0.0002829268293, -0.0000446341463, +0.0001785365854, + +0.0003795121951, +0.0004987804878, +0.0005060975610, +0.0003424390244, + +0.0001487804878, +0.0000521951220, -0.0000297560976, -0.0000968292683, + -0.0001041463415, -0.0001339024390, -0.0001487804878, -0.0001190243902, + +0.0000000000000, +0.0002158536585, +0.0003721951220, +0.0004392682927, + +0.0004465853659, +0.0003795121951, +0.0002382926829, +0.0001041463415, + +0.0000743902439, +0.0000968292683, +0.0000521951220, -0.0000224390244, + -0.0000521951220, +0.0000000000000, +0.0000819512195, +0.0001117073171, + +0.0001117073171, +0.0000297560976, -0.0001041463415, -0.0001636585366, + -0.0001265853659, -0.0000075609756, +0.0001712195122, +0.0002829268293, + +0.0003275609756, +0.0003943902439, +0.0003348780488, +0.0002456097561, + +0.0001785365854, +0.0000000000000, -0.0000968292683, -0.0000743902439, + -0.0000224390244, +0.0000224390244, -0.0000373170732, -0.0001339024390, + -0.0001339024390, -0.0000968292683, -0.0000819512195, -0.0000075609756, + +0.0001190243902, +0.0002531707317, +0.0003275609756, +0.0002978048780, + +0.0001860975610, +0.0001339024390, +0.0001265853659, +0.0001265853659, + +0.0001117073171, +0.0000148780488, -0.0000075609756, +0.0000373170732, + +0.0000075609756, +0.0000075609756, -0.0000148780488, -0.0001636585366, + -0.0002604878049, -0.0002753658537, -0.0001041463415, +0.0001190243902, + +0.0002382926829, +0.0002680487805, +0.0001934146341, +0.0001117073171, + +0.0001414634146, +0.0001265853659, +0.0000521951220, +0.0000148780488, + -0.0000521951220, -0.0000148780488, +0.0001265853659, +0.0002158536585, + +0.0002680487805, +0.0003200000000, +0.0002829268293, +0.0001934146341, + +0.0000297560976, -0.0001265853659, -0.0001117073171, +0.0000224390244, + +0.0001860975610, +0.0002604878049, +0.0001860975610, +0.0001190243902, + +0.0000892682927, +0.0000892682927, +0.0001190243902, +0.0001563414634, + +0.0002680487805, +0.0003573170732, +0.0002604878049, +0.0001487804878, + +0.0001636585366, +0.0002604878049, +0.0003721951220, +0.0004019512195, + +0.0003646341463, +0.0002753658537, +0.0001563414634, +0.0000000000000, + -0.0001339024390, -0.0001934146341, -0.0001487804878, +0.0000446341463, + +0.0002753658537, +0.0003870731707, +0.0003943902439, +0.0003275609756, + +0.0002456097561, +0.0002456097561, +0.0002009756098, +0.0000670731707, + +0.0000075609756, +0.0000819512195, +0.0001934146341, +0.0003348780488, + +0.0004317073171, +0.0004541463415, +0.0003870731707, +0.0002753658537, + +0.0001860975610, +0.0001414634146, +0.0001712195122, +0.0002753658537, + +0.0003943902439, +0.0005358536585, +0.0005804878049, +0.0004092682927, + +0.0002158536585, +0.0000670731707, +0.0000373170732, +0.0001860975610, + +0.0003573170732, +0.0005507317073, +0.0006773170732, +0.0006402439024, + +0.0005804878049, +0.0005285365854, +0.0004317073171, +0.0002753658537, + +0.0000743902439, -0.0001117073171, -0.0002009756098, -0.0001636585366, + -0.0000373170732, +0.0000446341463, +0.0000670731707, +0.0001339024390, + +0.0002307317073, +0.0002456097561, +0.0002234146341, +0.0002456097561, + +0.0002753658537, +0.0003646341463, +0.0004092682927, +0.0003275609756, + +0.0002531707317, +0.0001636585366, +0.0000743902439, +0.0000297560976, + +0.0000075609756, +0.0000297560976, +0.0001117073171, +0.0001785365854, + +0.0001636585366, +0.0000297560976, -0.0000892682927, -0.0000968292683, + +0.0000000000000, +0.0001414634146, +0.0002456097561, +0.0003126829268, + +0.0003424390244, +0.0003126829268, +0.0002307317073, +0.0001636585366, + +0.0001712195122, +0.0001563414634, +0.0000075609756, -0.0001041463415, + -0.0001190243902, -0.0000892682927, +0.0000148780488, +0.0001636585366, + +0.0002680487805, +0.0003126829268, +0.0002978048780, +0.0002753658537, + +0.0002009756098, +0.0000521951220, -0.0001041463415, -0.0002234146341, + -0.0002680487805, -0.0002456097561, -0.0001563414634, -0.0000521951220, + -0.0000224390244, -0.0000373170732, -0.0000373170732, -0.0000670731707, + -0.0000819512195, -0.0000148780488, +0.0000446341463, +0.0000075609756, + -0.0000743902439, -0.0001190243902, -0.0001563414634, -0.0002082926829, + -0.0001785365854, -0.0000446341463, +0.0000595121951, +0.0000595121951, + -0.0000373170732, -0.0001712195122, -0.0001934146341, -0.0001265853659, + -0.0000743902439, -0.0000521951220, -0.0000670731707, -0.0000968292683, + -0.0001414634146, -0.0001860975610, -0.0001339024390, -0.0000373170732, + -0.0000446341463, -0.0001041463415, -0.0001414634146, -0.0001860975610, + -0.0001785365854, -0.0001117073171, -0.0000521951220, -0.0000148780488, + +0.0000000000000, -0.0000446341463, -0.0000521951220, -0.0000075609756, + +0.0000373170732, +0.0000521951220, -0.0000224390244, -0.0001487804878, + -0.0002680487805, -0.0003497560976, -0.0003424390244, -0.0002382926829, + -0.0000670731707, +0.0000521951220, +0.0000743902439, +0.0000743902439, + +0.0000297560976, -0.0000373170732, -0.0000670731707, -0.0000892682927, + -0.0001041463415, -0.0000892682927, -0.0000446341463, +0.0000000000000, + -0.0000670731707, -0.0002680487805, -0.0003943902439, -0.0004763414634, + -0.0005285365854, -0.0003870731707, -0.0000892682927, +0.0001563414634, + +0.0003275609756, +0.0004092682927, +0.0003795121951, +0.0002680487805, + +0.0001117073171, -0.0000297560976, -0.0000968292683, -0.0000595121951, + -0.0000670731707, -0.0001712195122, -0.0002456097561, -0.0002604878049, + -0.0002082926829, -0.0000595121951, +0.0001190243902, +0.0002531707317, + +0.0002531707317, +0.0000892682927, -0.0000595121951, -0.0001117073171, + -0.0001117073171, +0.0000075609756, +0.0002009756098, +0.0002680487805, + +0.0001563414634, +0.0000148780488, +0.0000000000000, +0.0000224390244, + -0.0000446341463, -0.0000968292683, -0.0000819512195, -0.0000670731707, + +0.0000446341463, +0.0001860975610, +0.0002158536585, +0.0002082926829, + +0.0001563414634, +0.0000892682927, +0.0000670731707, +0.0000148780488, + -0.0000373170732, -0.0000373170732, +0.0000224390244, +0.0001190243902, + +0.0001339024390, +0.0001190243902, +0.0001636585366, +0.0001339024390, + +0.0000373170732, -0.0000224390244, +0.0000000000000, +0.0000373170732, + +0.0000000000000, -0.0000521951220, -0.0000297560976, -0.0000075609756, + -0.0000373170732, -0.0000521951220, -0.0000373170732, -0.0000595121951, + -0.0000819512195, -0.0000224390244, +0.0000224390244, +0.0000446341463, + +0.0001265853659, +0.0002307317073, +0.0002604878049, +0.0002158536585, + +0.0000968292683, -0.0000297560976, -0.0000968292683, -0.0001339024390, + -0.0002009756098, -0.0002456097561, -0.0002082926829, -0.0000743902439, + +0.0000446341463, +0.0000968292683, +0.0001339024390, +0.0001414634146, + +0.0000892682927, +0.0000000000000, -0.0001339024390, -0.0002382926829, + -0.0002382926829, -0.0002082926829, -0.0000819512195, +0.0000148780488, + +0.0000000000000, +0.0000075609756, -0.0000075609756, -0.0000670731707, + -0.0001190243902, -0.0002082926829, -0.0002158536585, -0.0001414634146, + -0.0001041463415, -0.0000743902439, +0.0000148780488, +0.0000892682927, + +0.0001190243902, +0.0001117073171, +0.0000373170732, -0.0001041463415, + -0.0002382926829, -0.0002604878049, -0.0002680487805, -0.0002829268293, + -0.0002456097561, -0.0001041463415, +0.0000521951220, +0.0002009756098, + +0.0002680487805, +0.0002158536585, +0.0001041463415, -0.0000446341463, + -0.0002307317073, -0.0003424390244, -0.0003943902439, -0.0003721951220, + -0.0002680487805, -0.0001785365854, -0.0001414634146, -0.0001190243902, + -0.0000446341463, +0.0000297560976, -0.0000075609756, -0.0001117073171, + -0.0001860975610, -0.0002307317073, -0.0002531707317, -0.0002382926829, + -0.0002382926829, -0.0002456097561, -0.0002009756098, -0.0001117073171, + -0.0000521951220, -0.0000743902439, -0.0000892682927, -0.0000595121951, + -0.0000595121951, -0.0001041463415, -0.0001117073171, -0.0001041463415, + -0.0001339024390, -0.0001563414634, -0.0001487804878, -0.0001636585366, + -0.0002456097561, -0.0003348780488, -0.0003348780488, -0.0002829268293, + -0.0002234146341, -0.0001860975610, -0.0000819512195, +0.0001117073171, + +0.0002604878049, +0.0002604878049, +0.0001563414634, +0.0000224390244, + -0.0000148780488, +0.0000075609756, -0.0000297560976, -0.0001041463415, + -0.0001563414634, -0.0001339024390, -0.0000595121951, -0.0000224390244, + -0.0000446341463, -0.0000892682927, -0.0001339024390, -0.0001712195122, + -0.0002307317073, -0.0002978048780, -0.0002456097561, -0.0001265853659, + +0.0000000000000, +0.0000743902439, +0.0000819512195, +0.0000595121951, + +0.0000000000000, -0.0000297560976, -0.0000224390244, -0.0000075609756, + +0.0000000000000, -0.0000148780488, +0.0000000000000, +0.0000297560976, + -0.0000075609756, -0.0000446341463, -0.0000373170732, -0.0000297560976, + -0.0000373170732, -0.0001117073171, -0.0002307317073, -0.0002456097561, + -0.0001785365854, -0.0000892682927, -0.0000224390244, +0.0000075609756, + +0.0000595121951, +0.0000743902439, +0.0000297560976, -0.0000075609756, + -0.0000446341463, -0.0000670731707, -0.0000670731707, -0.0000892682927, + -0.0001190243902, -0.0001563414634, -0.0001487804878, -0.0000670731707, + -0.0000446341463, -0.0000743902439, -0.0001041463415, -0.0001117073171, + -0.0001117073171, -0.0001190243902, -0.0001265853659, -0.0001563414634, + -0.0001860975610, -0.0001785365854, -0.0001785365854, -0.0001563414634, + -0.0000595121951, +0.0000075609756, +0.0000000000000, -0.0000224390244, + -0.0000148780488, +0.0000000000000, -0.0000297560976, -0.0000595121951, + -0.0001117073171, -0.0001785365854, -0.0001712195122, -0.0001339024390, + -0.0001041463415, -0.0000595121951, -0.0000075609756, +0.0000297560976, + +0.0000297560976, -0.0000148780488, -0.0000373170732, +0.0000000000000, + +0.0000446341463, +0.0000670731707, +0.0000373170732, +0.0000148780488, + -0.0000521951220, -0.0001785365854, -0.0002382926829, -0.0002604878049, + -0.0001860975610, -0.0000297560976, +0.0000968292683, +0.0001860975610, + +0.0001860975610, +0.0000743902439, -0.0000148780488, -0.0000743902439, + -0.0001414634146, -0.0001265853659, -0.0000743902439, -0.0000297560976, + +0.0000075609756, +0.0000148780488, +0.0000075609756, +0.0000446341463, + +0.0000968292683, +0.0001117073171, +0.0001041463415, +0.0000968292683, + +0.0001265853659, +0.0001339024390, +0.0000743902439, +0.0000297560976, + -0.0000224390244, -0.0000670731707, -0.0000373170732, +0.0000224390244, + +0.0000446341463, +0.0000670731707, +0.0000670731707, +0.0000075609756, + -0.0000892682927, -0.0001487804878, -0.0001041463415, +0.0000148780488, + +0.0001190243902, +0.0001487804878, +0.0000968292683, +0.0000148780488, + -0.0000148780488, -0.0000373170732, -0.0000446341463, -0.0000446341463, + -0.0000743902439, -0.0000670731707, +0.0000000000000, +0.0000743902439, + +0.0001190243902, +0.0001041463415, +0.0000446341463, +0.0000075609756, + -0.0000148780488, -0.0000595121951, -0.0000819512195, -0.0000819512195, + -0.0000892682927, -0.0000446341463, +0.0000224390244, +0.0000224390244, + -0.0000297560976, -0.0000446341463, +0.0000148780488, +0.0001339024390, + +0.0001636585366, +0.0001265853659, +0.0000521951220, -0.0000297560976, + -0.0000819512195, -0.0001041463415, -0.0000892682927, -0.0000670731707, + -0.0000819512195, -0.0001041463415, -0.0000595121951, -0.0000148780488, + +0.0000446341463, +0.0001339024390, +0.0001414634146, +0.0000892682927, + +0.0000446341463, -0.0000148780488, -0.0000595121951, -0.0000670731707, + -0.0000224390244, +0.0000595121951, +0.0001117073171, +0.0000968292683, + +0.0000743902439, +0.0000297560976, -0.0000148780488, +0.0000075609756, + +0.0001041463415, +0.0001414634146, +0.0000819512195, +0.0000148780488, + -0.0000075609756, -0.0000446341463, -0.0000595121951, -0.0000968292683, + -0.0000819512195, -0.0000075609756, +0.0000373170732, +0.0000595121951, + +0.0000892682927, +0.0001265853659, +0.0001487804878, +0.0001414634146, + +0.0001414634146, +0.0001636585366, +0.0000819512195, -0.0000670731707, + -0.0001636585366, -0.0001636585366, -0.0001339024390, -0.0000968292683, + -0.0000148780488, +0.0000743902439, +0.0001414634146, +0.0001934146341, + +0.0001636585366, +0.0000521951220, +0.0000000000000, -0.0000075609756, + -0.0000075609756, +0.0000148780488, +0.0000892682927, +0.0001934146341, + +0.0002382926829, +0.0001785365854, +0.0000670731707, +0.0000000000000, + -0.0000595121951, -0.0000819512195, -0.0000075609756, +0.0001190243902, + +0.0002531707317, +0.0003348780488, +0.0002829268293, +0.0002009756098, + +0.0001339024390, +0.0000892682927, +0.0001041463415, +0.0000968292683, + +0.0000446341463, +0.0000075609756, +0.0000000000000, -0.0000148780488, + -0.0000297560976, -0.0000595121951, -0.0000670731707, -0.0000224390244, + +0.0000743902439, +0.0001414634146, +0.0001563414634, +0.0001487804878, + +0.0001041463415, +0.0000521951220, +0.0000000000000, -0.0000446341463, + -0.0000892682927, -0.0001190243902, -0.0000968292683, -0.0000297560976, + +0.0000373170732, +0.0001339024390, +0.0002082926829, +0.0001712195122, + +0.0000968292683, +0.0000148780488, -0.0000521951220, -0.0000373170732, + +0.0000297560976, +0.0000446341463, +0.0000521951220, +0.0000670731707, + +0.0000743902439, +0.0000743902439, +0.0001041463415, +0.0001414634146, + +0.0001712195122, +0.0001712195122, +0.0001487804878, +0.0001190243902, + +0.0000446341463, -0.0000075609756, -0.0000075609756, -0.0000075609756, + -0.0000075609756, +0.0000000000000, +0.0000075609756, +0.0000224390244, + +0.0000224390244, +0.0000075609756, +0.0000373170732, +0.0001414634146, + +0.0002753658537, +0.0003573170732, +0.0003051219512, +0.0001487804878, + +0.0000000000000, -0.0000968292683, -0.0001117073171, -0.0000595121951, + -0.0000148780488, +0.0000148780488, +0.0000595121951, +0.0000892682927, + +0.0001041463415, +0.0001414634146, +0.0001860975610, +0.0001712195122, + +0.0001117073171, +0.0000224390244, -0.0000373170732, -0.0000446341463, + -0.0000297560976, -0.0000148780488, -0.0000075609756, -0.0000373170732, + -0.0001117073171, -0.0001487804878, -0.0001117073171, -0.0000075609756, + +0.0001190243902, +0.0002307317073, +0.0002829268293, +0.0002382926829, + +0.0001414634146, +0.0000224390244, -0.0000373170732, -0.0000224390244, + +0.0000521951220, +0.0000892682927, +0.0000670731707, +0.0000297560976, + +0.0000148780488, +0.0000000000000, +0.0000075609756, +0.0000595121951, + +0.0000743902439, +0.0000819512195, +0.0000968292683, +0.0000446341463, + -0.0000224390244, -0.0000297560976, +0.0000670731707, +0.0001860975610, + +0.0002158536585, +0.0001117073171, -0.0000297560976, -0.0001265853659, + -0.0001487804878, -0.0001190243902, -0.0000446341463, +0.0000373170732, + +0.0001190243902, +0.0001712195122, +0.0001712195122, +0.0001339024390, + +0.0000373170732, -0.0000670731707, -0.0001339024390, -0.0001636585366, + -0.0001563414634, -0.0000743902439, +0.0000297560976, +0.0001414634146, + +0.0001860975610, +0.0001563414634, +0.0000968292683, +0.0000446341463, + +0.0000148780488, +0.0000148780488, +0.0000224390244, +0.0000224390244, + -0.0000075609756, -0.0000373170732, -0.0000521951220, -0.0000521951220, + -0.0000148780488, +0.0000000000000, -0.0000373170732, -0.0001117073171, + -0.0001414634146, -0.0000521951220, +0.0001265853659, +0.0002753658537, + +0.0003051219512, +0.0002382926829, +0.0001117073171, -0.0000297560976, + -0.0001117073171, -0.0000743902439, +0.0000148780488, +0.0001265853659, + +0.0001712195122, +0.0001636585366, +0.0001563414634, +0.0000968292683, + +0.0000373170732, +0.0000000000000, -0.0000595121951, -0.0001487804878, + -0.0002082926829, -0.0002009756098, -0.0001414634146, -0.0000224390244, + +0.0001190243902, +0.0001860975610, +0.0001636585366, +0.0001117073171, + +0.0000521951220, +0.0000224390244, +0.0000075609756, +0.0000000000000, + +0.0000000000000, -0.0000224390244, -0.0000670731707, -0.0000968292683, + -0.0000670731707, +0.0000224390244, +0.0000892682927, +0.0000521951220, + +0.0000075609756, +0.0000000000000, +0.0000075609756, +0.0000521951220, + +0.0000595121951, +0.0000446341463, +0.0000075609756, -0.0000595121951, + -0.0001265853659, -0.0001636585366, -0.0001636585366, -0.0001414634146, + -0.0001041463415, -0.0000521951220, +0.0000148780488, +0.0000595121951, + +0.0000670731707, +0.0000595121951, +0.0000670731707, +0.0001190243902, + +0.0001712195122, +0.0001636585366, +0.0000595121951, -0.0000521951220, + -0.0001265853659, -0.0001339024390, -0.0001414634146, -0.0001117073171, + -0.0000446341463, +0.0000297560976, +0.0000743902439, +0.0000968292683, + +0.0001041463415, +0.0001041463415, +0.0000670731707, +0.0000000000000, + -0.0000743902439, -0.0001487804878, -0.0001563414634, -0.0001265853659, + -0.0000595121951, +0.0000373170732, +0.0001339024390, +0.0001934146341, + +0.0002082926829, +0.0001934146341, +0.0001712195122, +0.0001339024390, + +0.0000743902439, +0.0000000000000, -0.0000968292683, -0.0001563414634, + -0.0001487804878, -0.0001117073171, -0.0000521951220, +0.0000000000000, + +0.0000521951220, +0.0000819512195, +0.0000968292683, +0.0001041463415, + +0.0000819512195, +0.0000373170732, +0.0000075609756, +0.0000000000000, + -0.0000224390244, -0.0000148780488, +0.0000000000000, +0.0000373170732, + +0.0000743902439, +0.0001041463415, +0.0000892682927, +0.0000743902439, + +0.0000521951220, +0.0000075609756, -0.0000148780488, -0.0000670731707, + -0.0000743902439, -0.0000521951220, -0.0000224390244, +0.0000000000000, + +0.0000224390244, +0.0000373170732, +0.0000446341463, +0.0000297560976, + +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000075609756, + +0.0000297560976, +0.0000297560976, +0.0000224390244, +0.0000148780488, + +0.0000148780488, +0.0000224390244, +0.0000148780488, +0.0000075609756, + +0.0000000000000, +0.0000075609756, +0.0000148780488, +0.0000148780488, + +0.0000075609756, +0.0000075609756, +0.0000000000000, -0.0000224390244, + -0.0000297560976, -0.0000297560976, -0.0000148780488, +0.0000000000000, + +0.0000000000000, +0.0000000000000, +0.0000000000000, -0.0000075609756, + -0.0000075609756, +0.0000000000000, +0.0000000000000, +0.0000000000000, + +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, + +0.0000000000000, +0.0000075609756, +0.0000148780488, +0.0000148780488, + +0.0000075609756, +0.0000000000000, +0.0000000000000, +0.0000000000000, + +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, + +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, + +0.0000000000000, +0.0000000000000, +0.0000000000000 +}; diff --git a/plugins/LadspaEffect/swh/impulses/11-fender-bassman-ui87.h b/plugins/LadspaEffect/swh/impulses/11-fender-bassman-ui87.h new file mode 100644 index 000000000..704559646 --- /dev/null +++ b/plugins/LadspaEffect/swh/impulses/11-fender-bassman-ui87.h @@ -0,0 +1,822 @@ +float fender_bassman_ui87[] = { + +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000062374245, + +0.0000122736419, +0.0000122736419, +0.0000122736419, +0.0000062374245, + +0.0000062374245, +0.0000062374245, +0.0000122736419, +0.0000122736419, + +0.0000122736419, +0.0000000000000, -0.0000185110664, -0.0000307847082, + -0.0000368209256, -0.0000185110664, +0.0000062374245, +0.0000430583501, + +0.0000859154930, +0.0001044265594, +0.0000981891348, +0.0000798792757, + +0.0000490945674, +0.0000185110664, +0.0000000000000, +0.0000000000000, + -0.0000062374245, -0.0000245472837, -0.0000430583501, -0.0000613682093, + -0.0000736418511, -0.0000553319920, -0.0000062374245, +0.0000676056338, + +0.0001535211268, +0.0002211267606, +0.0002394366197, +0.0002088531187, + +0.0001227364185, +0.0000000000000, -0.0001167002012, -0.0002026156942, + -0.0002211267606, -0.0001657947686, -0.0000368209256, +0.0001289738431, + +0.0002885311871, +0.0004052313883, +0.0004297786720, +0.0003561368209, + +0.0002026156942, +0.0000122736419, -0.0001535211268, -0.0002517102616, + -0.0002517102616, -0.0001535211268, +0.0000000000000, +0.0001535211268, + +0.0002579476861, +0.0002762575453, +0.0002088531187, +0.0001044265594, + +0.0000062374245, -0.0000307847082, -0.0000062374245, +0.0000736418511, + +0.0001718309859, +0.0002394366197, +0.0002334004024, +0.0001657947686, + +0.0000490945674, -0.0000613682093, -0.0001412474849, -0.0001657947686, + -0.0001167002012, -0.0000307847082, +0.0000613682093, +0.0001472837022, + +0.0001965794769, +0.0002088531187, +0.0001903420523, +0.0001472837022, + +0.0000921529175, +0.0000368209256, +0.0000000000000, -0.0000245472837, + -0.0000185110664, +0.0000122736419, +0.0000798792757, +0.0001595573441, + +0.0002271629779, +0.0002639839034, +0.0002579476861, +0.0001965794769, + +0.0001044265594, +0.0000000000000, -0.0000798792757, -0.0001289738431, + -0.0001350100604, -0.0000981891348, -0.0000245472837, +0.0000553319920, + +0.0001350100604, +0.0002026156942, +0.0002456740443, +0.0002702213280, + +0.0002762575453, +0.0002762575453, +0.0002762575453, +0.0002639839034, + +0.0002517102616, +0.0002026156942, +0.0001227364185, +0.0000062374245, + -0.0001167002012, -0.0002334004024, -0.0003008048290, -0.0002947686117, + -0.0002088531187, -0.0000676056338, +0.0000859154930, +0.0002088531187, + +0.0002824949698, +0.0002947686117, +0.0002702213280, +0.0002334004024, + +0.0002271629779, +0.0002517102616, +0.0002885311871, +0.0002947686117, + +0.0002456740443, +0.0001167002012, -0.0000553319920, -0.0002517102616, + -0.0003929577465, -0.0004482897384, -0.0003929577465, -0.0002517102616, + -0.0000676056338, +0.0001044265594, +0.0002334004024, +0.0003008048290, + +0.0003253521127, +0.0003315895372, +0.0003376257545, +0.0003623742455, + +0.0003991951710, +0.0004114688129, +0.0003746478873, +0.0002639839034, + +0.0000736418511, -0.0001780684105, -0.0004420523139, -0.0006569416499, + -0.0007553319920, -0.0006937625755, -0.0004605633803, -0.0001104627767, + +0.0002702213280, +0.0005832997988, +0.0007430583501, +0.0007185110664, + +0.0005404426559, +0.0002885311871, +0.0000613682093, -0.0000676056338, + -0.0000921529175, -0.0000613682093, -0.0000368209256, -0.0000676056338, + -0.0001535211268, -0.0002639839034, -0.0003193158954, -0.0002824949698, + -0.0001657947686, -0.0000185110664, +0.0000798792757, +0.0000859154930, + +0.0000122736419, -0.0000676056338, -0.0000798792757, +0.0000307847082, + +0.0002334004024, +0.0004114688129, +0.0004605633803, +0.0002947686117, + -0.0000613682093, -0.0004788732394, -0.0007798792757, -0.0008104627767, + -0.0005342052314, -0.0000430583501, +0.0004543259557, +0.0007859154930, + +0.0007981891348, +0.0005404426559, +0.0001044265594, -0.0002947686117, + -0.0006140845070, -0.0008044265594, -0.0007859154930, -0.0008595573441, + -0.0009148893360, -0.0008472837022, -0.0006323943662, -0.0002456740443, + +0.0002824949698, +0.0008350100604, +0.0012342052314, +0.0012955734406, + +0.0009639839034, +0.0004114688129, -0.0002026156942, -0.0006509054326, + -0.0008965794769, -0.0009026156942, -0.0008780684105, -0.0009026156942, + -0.0010623742455, -0.0012096579477, -0.0012895372233, -0.0011175050302, + -0.0007859154930, -0.0003008048290, +0.0000613682093, +0.0001657947686, + +0.0000122736419, -0.0002579476861, -0.0005342052314, -0.0007062374245, + -0.0005587525151, -0.0005404426559, -0.0005464788732, -0.0012404426559, + -0.0020323943662, -0.0035307847082, -0.0047955734406, -0.0061158953722, + -0.0070676056338, -0.0091921529175, -0.0070798792757, -0.0133553319920, + -0.0027569416499, -0.0126613682093, -0.0237386317907, +0.0033772635815, + +0.0536728370221, +0.0315122736419, -0.0922344064386, -0.1213824949698, + -0.0277605633803, +0.0047034205231, +0.0728983903421, +0.1977993963783, + +0.2011949698189, +0.1692529175050, +0.0937263581489, -0.0018665995976, + -0.0412631790744, -0.0820597585513, -0.1030229376258, -0.0709150905433, + -0.0684464788732, -0.0469000000000, -0.0155289738431, +0.0112859154930, + +0.0516587525151, +0.0585728370221, +0.0543668008048, +0.0577255533199, + +0.0324088531187, +0.0172543259557, +0.0068649899396, -0.0127780684105, + -0.0118816901408, -0.0237446680080, -0.0326605633803, -0.0255869215292, + -0.0184885311871, -0.0068034205231, -0.0002702213280, -0.0085044265594, + -0.0060360160966, +0.0026955734406, +0.0037394366197, +0.0108561368209, + +0.0087193158954, -0.0036167002012, -0.0076692152918, -0.0095237424547, + -0.0186482897384, -0.0095543259557, -0.0116543259557, -0.0237877263581, + -0.0116973843058, -0.0127167002012, -0.0158052313883, -0.0088114688129, + -0.0080746478873, -0.0066253521127, -0.0051026156942, -0.0084430583501, + +0.0024501006036, +0.0069018108652, +0.0081973843058, +0.0107639839034, + +0.0045376257545, +0.0050720321932, +0.0026832997988, +0.0038991951710, + +0.0074482897384, -0.0005464788732, -0.0069201207243, -0.0096404426559, + -0.0163271629779, -0.0202323943662, -0.0166772635815, -0.0099657947686, + -0.0006692152918, +0.0026772635815, +0.0057350100604, +0.0049122736419, + +0.0019649899396, +0.0010315895372, +0.0005342052314, -0.0041877263581, + -0.0106780684105, -0.0095665995976, -0.0106167002012, -0.0108684104628, + -0.0095973843058, -0.0097509054326, -0.0118877263581, -0.0138649899396, + -0.0116360160966, -0.0020877263581, +0.0010501006036, -0.0030702213280, + -0.0049798792757, -0.0084981891348, -0.0078472837022, -0.0058211267606, + -0.0040096579477, -0.0003684104628, +0.0004788732394, +0.0035368209256, + +0.0064289738431, -0.0011665995976, -0.0066929577465, -0.0074665995976, + -0.0091307847082, -0.0045130784708, -0.0005527162978, -0.0009824949698, + -0.0028490945674, -0.0072026156942, -0.0101561368209, -0.0114026156942, + -0.0127720321932, -0.0124281690141, -0.0128885311871, -0.0111386317907, + -0.0069877263581, -0.0066253521127, -0.0049185110664, -0.0006263581489, + +0.0023885311871, +0.0036289738431, +0.0033955734406, +0.0043780684105, + +0.0052376257545, +0.0032911468813, +0.0036657947686, +0.0046851106640, + +0.0035553319920, +0.0015903420523, -0.0024806841046, -0.0073193158954, + -0.0122193158954, -0.0149517102616, -0.0131895372233, -0.0104446680080, + -0.0078843058350, -0.0047955734406, -0.0020509054326, -0.0000307847082, + -0.0006140845070, -0.0014490945674, +0.0001044265594, +0.0020631790744, + +0.0039851106640, +0.0055201207243, +0.0051026156942, +0.0041263581489, + +0.0020692152918, -0.0005955734406, -0.0006692152918, -0.0000122736419, + +0.0001412474849, +0.0012895372233, +0.0025665995976, +0.0030762575453, + +0.0025728370221, +0.0020323943662, +0.0030211267606, +0.0039851106640, + +0.0052929577465, +0.0079211267606, +0.0073315895372, +0.0046788732394, + +0.0027446680080, +0.0014798792757, +0.0016579476861, +0.0008044265594, + -0.0001657947686, -0.0002211267606, -0.0013631790744, -0.0011114688129, + -0.0005527162978, -0.0002271629779, +0.0025175050302, +0.0051517102616, + +0.0066253521127, +0.0073561368209, +0.0066869215292, +0.0059684104628, + +0.0059869215292, +0.0059746478873, +0.0047832997988, +0.0030271629779, + +0.0005587525151, -0.0006509054326, +0.0007185110664, +0.0013814889336, + +0.0034446680080, +0.0066623742455, +0.0072088531187, +0.0077245472837, + +0.0084122736419, +0.0069323943662, +0.0049490945674, +0.0029535211268, + +0.0023334004024, +0.0027201207243, +0.0037947686117, +0.0061342052314, + +0.0077307847082, +0.0083569416499, +0.0071472837022, +0.0042553319920, + +0.0030639839034, +0.0009517102616, -0.0014736418511, +0.0005772635815, + +0.0030026156942, +0.0045684104628, +0.0062078470825, +0.0054342052314, + +0.0036720321932, +0.0021921529175, +0.0009334004024, +0.0012955734406, + +0.0015657947686, +0.0015350100604, +0.0019464788732, +0.0019527162978, + +0.0030517102616, +0.0063307847082, +0.0081788732394, +0.0074665995976, + +0.0066315895372, +0.0048692152918, +0.0015227364185, -0.0014676056338, + -0.0026281690141, -0.0018851106640, -0.0005832997988, -0.0000490945674, + -0.0005587525151, -0.0016334004024, -0.0020018108652, -0.0002148893360, + +0.0017438631791, +0.0023271629779, +0.0031623742455, +0.0037394366197, + +0.0021859154930, +0.0010869215292, +0.0014430583501, +0.0014490945674, + +0.0016394366197, +0.0018665995976, +0.0019342052314, +0.0028062374245, + +0.0042859154930, +0.0048569416499, +0.0037334004024, +0.0014185110664, + -0.0001472837022, -0.0005464788732, -0.0001472837022, +0.0011237424547, + +0.0017869215292, +0.0003991951710, -0.0015289738431, -0.0028490945674, + -0.0028736418511, -0.0017070422535, +0.0000000000000, +0.0014859154930, + +0.0020201207243, +0.0022350100604, +0.0027692152918, +0.0022657947686, + +0.0002824949698, -0.0016579476861, -0.0028000000000, -0.0032297786720, + -0.0022843058350, +0.0002702213280, +0.0010070422535, -0.0001412474849, + -0.0006754527163, -0.0014553319920, -0.0036720321932, -0.0038991951710, + -0.0029720321932, -0.0022843058350, -0.0009271629779, -0.0005832997988, + -0.0004973843058, -0.0006140845070, -0.0014981891348, -0.0016885311871, + -0.0011728370221, -0.0006386317907, +0.0007122736419, +0.0007185110664, + -0.0000736418511, -0.0011114688129, -0.0025543259557, -0.0032543259557, + -0.0035000000000, -0.0024253521127, -0.0001350100604, +0.0010561368209, + +0.0016148893360, +0.0013263581489, -0.0004543259557, -0.0007859154930, + -0.0009394366197, -0.0018175050302, -0.0017130784708, -0.0010070422535, + -0.0000981891348, +0.0009088531187, +0.0012772635815, +0.0012219315895, + +0.0004175050302, +0.0006018108652, +0.0008780684105, -0.0005034205231, + -0.0011114688129, -0.0010684104628, -0.0014185110664, -0.0019404426559, + -0.0031070422535, -0.0031376257545, -0.0022903420523, -0.0016271629779, + +0.0001167002012, +0.0011851106640, -0.0000122736419, -0.0012710261569, + -0.0020509054326, -0.0026649899396, -0.0027692152918, -0.0026342052314, + -0.0021859154930, -0.0011728370221, -0.0000245472837, +0.0007676056338, + +0.0011237424547, +0.0009088531187, +0.0009456740443, +0.0008535211268, + -0.0006078470825, -0.0017315895372, -0.0017929577465, -0.0023885311871, + -0.0025420523139, -0.0017070422535, -0.0001227364185, +0.0012404426559, + +0.0015044265594, +0.0025605633803, +0.0035613682093, +0.0033156941650, + +0.0027509054326, +0.0015289738431, +0.0003623742455, -0.0005342052314, + -0.0012955734406, -0.0007921529175, -0.0001843058350, +0.0002271629779, + +0.0008718309859, +0.0018175050302, +0.0029289738431, +0.0029412474849, + +0.0022720321932, +0.0009394366197, -0.0008289738431, -0.0008104627767, + -0.0005464788732, -0.0003315895372, +0.0005649899396, +0.0005219315895, + -0.0000368209256, -0.0004237424547, -0.0005464788732, -0.0001289738431, + -0.0003315895372, -0.0004297786720, +0.0007553319920, +0.0015044265594, + +0.0023211267606, +0.0032114688129, +0.0035307847082, +0.0033772635815, + +0.0020386317907, +0.0003929577465, -0.0003746478873, -0.0005895372233, + -0.0003806841046, -0.0002026156942, -0.0002702213280, +0.0001780684105, + +0.0004482897384, -0.0002639839034, -0.0009824949698, -0.0013446680080, + -0.0014921529175, -0.0011114688129, -0.0004052313883, +0.0001412474849, + +0.0004788732394, +0.0004605633803, +0.0008472837022, +0.0015903420523, + +0.0019587525151, +0.0022472837022, +0.0030026156942, +0.0033281690141, + +0.0028798792757, +0.0024253521127, +0.0014000000000, +0.0004851106640, + +0.0005895372233, +0.0008044265594, +0.0012464788732, +0.0017070422535, + +0.0019464788732, +0.0023702213280, +0.0017684104628, +0.0006631790744, + +0.0002088531187, -0.0005464788732, -0.0005527162978, -0.0001595573441, + -0.0003746478873, -0.0000613682093, -0.0004911468813, -0.0009026156942, + -0.0002579476861, -0.0002271629779, +0.0000245472837, +0.0005527162978, + +0.0007122736419, +0.0009088531187, +0.0007490945674, +0.0014613682093, + +0.0026772635815, +0.0029044265594, +0.0026464788732, +0.0014798792757, + +0.0000613682093, -0.0004237424547, -0.0004543259557, +0.0000000000000, + +0.0004911468813, +0.0004851106640, +0.0005156941650, +0.0007981891348, + +0.0010438631791, +0.0008227364185, +0.0008657947686, +0.0010193158954, + +0.0007736418511, +0.0004788732394, -0.0001044265594, -0.0004665995976, + -0.0009947686117, -0.0017684104628, -0.0022044265594, -0.0026096579477, + -0.0020323943662, -0.0005034205231, +0.0007798792757, +0.0022720321932, + +0.0033281690141, +0.0037211267606, +0.0033832997988, +0.0021307847082, + +0.0012832997988, +0.0005281690141, -0.0002148893360, -0.0005772635815, + -0.0009088531187, -0.0009211267606, -0.0008965794769, -0.0011237424547, + -0.0007798792757, -0.0003070422535, -0.0000981891348, -0.0001780684105, + +0.0001350100604, +0.0004360160966, -0.0005404426559, -0.0013569416499, + -0.0016394366197, -0.0014553319920, -0.0008657947686, -0.0007859154930, + -0.0009517102616, -0.0013018108652, -0.0023148893360, -0.0028490945674, + -0.0027140845070, -0.0019281690141, -0.0002639839034, +0.0013877263581, + +0.0024806841046, +0.0026587525151, +0.0019096579477, +0.0006263581489, + -0.0006877263581, -0.0015843058350, -0.0021981891348, -0.0025788732394, + -0.0026464788732, -0.0023088531187, -0.0014981891348, -0.0010130784708, + -0.0003561368209, +0.0002947686117, +0.0000553319920, -0.0000430583501, + -0.0002148893360, -0.0007307847082, -0.0009456740443, -0.0010315895372, + -0.0011420523139, -0.0013569416499, -0.0019955734406, -0.0021921529175, + -0.0018728370221, -0.0015412474849, -0.0005649899396, +0.0002334004024, + +0.0001044265594, -0.0001104627767, -0.0000245472837, +0.0002026156942, + +0.0009762575453, +0.0013877263581, +0.0014000000000, +0.0012710261569, + +0.0004297786720, -0.0002088531187, -0.0003991951710, -0.0007185110664, + -0.0005404426559, -0.0007798792757, -0.0013937625755, -0.0012772635815, + -0.0014245472837, -0.0014245472837, -0.0008104627767, -0.0007245472837, + -0.0005219315895, -0.0002211267606, +0.0001780684105, +0.0006754527163, + +0.0000859154930, -0.0005587525151, -0.0009762575453, -0.0018728370221, + -0.0021430583501, -0.0011360160966, -0.0002456740443, -0.0000613682093, + +0.0000921529175, +0.0003561368209, +0.0000798792757, -0.0003070422535, + -0.0008350100604, -0.0015412474849, -0.0016394366197, -0.0009947686117, + -0.0004114688129, -0.0003869215292, -0.0009639839034, -0.0014307847082, + -0.0014553319920, -0.0014368209256, -0.0009334004024, -0.0003008048290, + -0.0004360160966, -0.0007122736419, -0.0009517102616, -0.0014921529175, + -0.0017561368209, -0.0017070422535, -0.0014981891348, -0.0008780684105, + -0.0006263581489, -0.0009762575453, -0.0012281690141, -0.0014430583501, + -0.0016271629779, -0.0016271629779, -0.0016148893360, -0.0015657947686, + -0.0014000000000, -0.0011973843058, -0.0008843058350, -0.0004360160966, + -0.0001657947686, -0.0000245472837, +0.0001104627767, +0.0000000000000, + -0.0002211267606, -0.0003561368209, -0.0002394366197, -0.0002026156942, + -0.0004973843058, -0.0008412474849, -0.0011482897384, -0.0013263581489, + -0.0013323943662, -0.0011175050302, -0.0005034205231, -0.0003070422535, + -0.0006078470825, -0.0009639839034, -0.0013140845070, -0.0011360160966, + -0.0009579476861, -0.0004114688129, +0.0003991951710, -0.0001227364185, + -0.0010253521127, -0.0013018108652, -0.0014122736419, -0.0013569416499, + -0.0013814889336, -0.0012034205231, -0.0009148893360, -0.0010869215292, + -0.0010746478873, -0.0005587525151, -0.0003869215292, -0.0003253521127, + -0.0000430583501, -0.0000798792757, -0.0003623742455, -0.0006078470825, + -0.0008657947686, -0.0006018108652, -0.0002639839034, -0.0003315895372, + -0.0003315895372, -0.0007062374245, -0.0009334004024, -0.0006201207243, + -0.0007122736419, -0.0009762575453, -0.0010623742455, -0.0013754527163, + -0.0015535211268, -0.0013569416499, -0.0006877263581, +0.0000676056338, + +0.0001903420523, +0.0000122736419, -0.0001965794769, -0.0004114688129, + -0.0005772635815, -0.0005649899396, -0.0004420523139, -0.0002026156942, + +0.0001104627767, +0.0002211267606, +0.0001044265594, +0.0001289738431, + +0.0002271629779, +0.0002762575453, +0.0000798792757, -0.0001965794769, + -0.0004911468813, -0.0009517102616, -0.0009639839034, -0.0004665995976, + +0.0001903420523, +0.0005219315895, +0.0002579476861, -0.0001535211268, + -0.0001289738431, +0.0000553319920, +0.0000490945674, +0.0000430583501, + -0.0000981891348, -0.0003070422535, -0.0002148893360, +0.0000245472837, + +0.0004911468813, +0.0009394366197, +0.0008227364185, +0.0005955734406, + +0.0004237424547, +0.0003561368209, +0.0004788732394, +0.0004482897384, + +0.0002702213280, +0.0001903420523, +0.0000676056338, +0.0000553319920, + +0.0000430583501, -0.0002148893360, -0.0005034205231, -0.0008657947686, + -0.0010253521127, -0.0008167002012, -0.0004237424547, +0.0000368209256, + +0.0004605633803, +0.0007185110664, +0.0006754527163, +0.0004728370221, + +0.0005527162978, +0.0008472837022, +0.0008780684105, +0.0005527162978, + +0.0000676056338, -0.0001657947686, +0.0000122736419, +0.0003991951710, + +0.0007368209256, +0.0010130784708, +0.0011052313883, +0.0008843058350, + +0.0007245472837, +0.0007368209256, +0.0009824949698, +0.0009579476861, + +0.0006201207243, +0.0001412474849, -0.0004237424547, -0.0007185110664, + -0.0003991951710, +0.0004543259557, +0.0012281690141, +0.0012219315895, + +0.0007430583501, +0.0002456740443, -0.0003376257545, -0.0004973843058, + -0.0001903420523, +0.0000430583501, +0.0001718309859, +0.0000245472837, + -0.0003253521127, -0.0004911468813, -0.0003501006036, -0.0000981891348, + +0.0000798792757, -0.0000185110664, -0.0003253521127, -0.0004543259557, + -0.0004482897384, -0.0001843058350, +0.0004297786720, +0.0008657947686, + +0.0008412474849, +0.0006509054326, +0.0003438631791, +0.0001595573441, + -0.0000490945674, -0.0003130784708, -0.0002702213280, -0.0001718309859, + -0.0005832997988, -0.0009885311871, -0.0009639839034, -0.0007798792757, + -0.0002639839034, +0.0002947686117, +0.0003684104628, +0.0003193158954, + +0.0000859154930, -0.0003929577465, -0.0005342052314, -0.0003561368209, + -0.0002702213280, -0.0001843058350, -0.0002702213280, -0.0005527162978, + -0.0005096579477, -0.0002579476861, -0.0000245472837, +0.0002517102616, + +0.0001780684105, -0.0001044265594, -0.0001412474849, -0.0004237424547, + -0.0005219315895, -0.0003070422535, -0.0003561368209, -0.0002211267606, + +0.0000981891348, +0.0002088531187, +0.0002334004024, -0.0000921529175, + -0.0004851106640, -0.0008104627767, -0.0013631790744, -0.0011851106640, + -0.0006877263581, -0.0004420523139, +0.0000368209256, +0.0001289738431, + -0.0001044265594, -0.0001535211268, -0.0003376257545, -0.0003008048290, + -0.0002026156942, -0.0003130784708, -0.0002702213280, -0.0005034205231, + -0.0007613682093, -0.0008595573441, -0.0011728370221, -0.0011360160966, + -0.0006386317907, -0.0000185110664, +0.0005772635815, +0.0008227364185, + +0.0009088531187, +0.0004973843058, -0.0000736418511, -0.0004420523139, + -0.0010991951710, -0.0011360160966, -0.0004973843058, +0.0001104627767, + +0.0002639839034, +0.0001903420523, +0.0004297786720, -0.0001718309859, + -0.0006386317907, -0.0003315895372, -0.0002639839034, +0.0004175050302, + +0.0008167002012, +0.0006018108652, +0.0006323943662, -0.0003130784708, + -0.0012156941650, -0.0012710261569, -0.0018605633803, -0.0011851106640, + -0.0002394366197, +0.0000122736419, +0.0008718309859, +0.0008167002012, + -0.0003746478873, -0.0008104627767, -0.0008227364185, -0.0005219315895, + +0.0000921529175, +0.0004175050302, +0.0007490945674, +0.0009271629779, + +0.0009271629779, +0.0009885311871, +0.0008535211268, +0.0004420523139, + +0.0001535211268, -0.0002702213280, -0.0003684104628, -0.0001289738431, + -0.0001718309859, +0.0000613682093, +0.0003991951710, +0.0006201207243, + +0.0008227364185, +0.0009088531187, +0.0008780684105, +0.0009947686117, + +0.0008965794769, +0.0006814889336, +0.0007062374245, +0.0006386317907, + +0.0008044265594, +0.0008903420523, +0.0008167002012, +0.0006877263581, + +0.0006386317907, +0.0006814889336, +0.0007185110664, +0.0006446680080, + +0.0006692152918, +0.0010070422535, +0.0013692152918, +0.0015472837022, + +0.0014000000000, +0.0010561368209, +0.0007921529175, +0.0006386317907, + +0.0003253521127, -0.0000613682093, -0.0002824949698, -0.0003376257545, + +0.0000000000000, +0.0005404426559, +0.0007676056338, +0.0008903420523, + +0.0012281690141, +0.0014122736419, +0.0012464788732, +0.0010193158954, + +0.0007490945674, +0.0002702213280, +0.0000062374245, -0.0001167002012, + +0.0000122736419, +0.0005772635815, +0.0010070422535, +0.0014553319920, + +0.0015412474849, +0.0012096579477, +0.0010070422535, +0.0007921529175, + +0.0008104627767, +0.0012772635815, +0.0016211267606, +0.0017929577465, + +0.0015903420523, +0.0010684104628, +0.0007676056338, +0.0004911468813, + +0.0003869215292, +0.0006446680080, +0.0007981891348, +0.0009088531187, + +0.0011114688129, +0.0010929577465, +0.0007307847082, +0.0004605633803, + +0.0003869215292, +0.0003623742455, +0.0006018108652, +0.0008780684105, + +0.0010746478873, +0.0012404426559, +0.0013078470825, +0.0012895372233, + +0.0010315895372, +0.0006201207243, +0.0001780684105, -0.0002517102616, + -0.0003376257545, -0.0001167002012, +0.0001965794769, +0.0005649899396, + +0.0006754527163, +0.0006692152918, +0.0005955734406, +0.0003869215292, + +0.0002947686117, +0.0002762575453, +0.0004973843058, +0.0007430583501, + +0.0007430583501, +0.0006569416499, +0.0002334004024, -0.0001595573441, + -0.0001227364185, -0.0001227364185, -0.0000981891348, +0.0000000000000, + +0.0000921529175, +0.0002639839034, +0.0004052313883, +0.0006140845070, + +0.0007676056338, +0.0007490945674, +0.0008718309859, +0.0010253521127, + +0.0009824949698, +0.0007185110664, +0.0003684104628, +0.0001227364185, + -0.0000736418511, -0.0001780684105, -0.0001227364185, -0.0000798792757, + +0.0000798792757, +0.0003623742455, +0.0004420523139, +0.0003193158954, + +0.0004973843058, +0.0006263581489, +0.0005281690141, +0.0007122736419, + +0.0007736418511, +0.0007368209256, +0.0008843058350, +0.0008167002012, + +0.0005219315895, +0.0001412474849, -0.0002947686117, -0.0003746478873, + -0.0004788732394, -0.0003991951710, +0.0000921529175, +0.0002824949698, + +0.0003929577465, +0.0005832997988, +0.0005527162978, +0.0006631790744, + +0.0007859154930, +0.0006631790744, +0.0006814889336, +0.0006386317907, + +0.0004605633803, +0.0003008048290, +0.0001780684105, +0.0002088531187, + +0.0003193158954, +0.0003929577465, +0.0004052313883, +0.0002762575453, + +0.0001843058350, +0.0001167002012, +0.0001965794769, +0.0005772635815, + +0.0009026156942, +0.0012034205231, +0.0012404426559, +0.0007368209256, + +0.0001289738431, -0.0004665995976, -0.0006754527163, -0.0004052313883, + -0.0000736418511, +0.0001595573441, +0.0001780684105, +0.0001289738431, + +0.0002088531187, +0.0003561368209, +0.0005587525151, +0.0007490945674, + +0.0009394366197, +0.0011911468813, +0.0011851106640, +0.0012464788732, + +0.0012281690141, +0.0008104627767, +0.0003130784708, -0.0002394366197, + -0.0007185110664, -0.0007553319920, -0.0006140845070, -0.0004665995976, + -0.0001718309859, +0.0000613682093, +0.0002394366197, +0.0004728370221, + +0.0006018108652, +0.0006263581489, +0.0006140845070, +0.0002394366197, + -0.0000307847082, -0.0000798792757, -0.0003130784708, -0.0002271629779, + +0.0000613682093, +0.0000981891348, +0.0000368209256, -0.0001965794769, + -0.0004052313883, -0.0003070422535, -0.0000430583501, +0.0004543259557, + +0.0008903420523, +0.0009639839034, +0.0010561368209, +0.0008718309859, + +0.0003746478873, -0.0001289738431, -0.0006323943662, -0.0009088531187, + -0.0010501006036, -0.0010991951710, -0.0007676056338, -0.0002271629779, + +0.0001903420523, +0.0004175050302, +0.0004360160966, +0.0003438631791, + +0.0002026156942, +0.0001167002012, +0.0000613682093, -0.0000062374245, + -0.0000981891348, -0.0002271629779, -0.0003438631791, -0.0003130784708, + -0.0003561368209, -0.0005219315895, -0.0003684104628, -0.0001412474849, + -0.0001227364185, -0.0001227364185, -0.0001903420523, +0.0000000000000, + +0.0003991951710, +0.0003991951710, +0.0003806841046, +0.0003315895372, + -0.0000185110664, -0.0001903420523, -0.0002148893360, -0.0002088531187, + -0.0000676056338, -0.0000307847082, -0.0001412474849, -0.0003070422535, + -0.0004605633803, -0.0003253521127, +0.0000000000000, +0.0002148893360, + +0.0003623742455, +0.0004665995976, +0.0003438631791, +0.0001289738431, + -0.0000798792757, -0.0002762575453, -0.0003376257545, -0.0003070422535, + -0.0002885311871, -0.0003806841046, -0.0007000000000, -0.0009148893360, + -0.0008412474849, -0.0007185110664, -0.0004665995976, -0.0002211267606, + -0.0001843058350, -0.0002148893360, -0.0001412474849, -0.0001350100604, + -0.0002517102616, -0.0003991951710, -0.0005527162978, -0.0005955734406, + -0.0006263581489, -0.0006692152918, -0.0006323943662, -0.0004973843058, + -0.0002579476861, -0.0000307847082, +0.0000490945674, +0.0001595573441, + +0.0003315895372, +0.0002947686117, +0.0001289738431, -0.0000122736419, + -0.0002517102616, -0.0004297786720, -0.0004482897384, -0.0004175050302, + -0.0002702213280, -0.0002211267606, -0.0003253521127, -0.0004114688129, + -0.0004665995976, -0.0005527162978, -0.0005219315895, -0.0004851106640, + -0.0005281690141, -0.0003746478873, -0.0000859154930, -0.0000676056338, + -0.0002148893360, -0.0002148893360, -0.0002762575453, -0.0004052313883, + -0.0002947686117, -0.0001718309859, -0.0002334004024, -0.0003193158954, + -0.0004052313883, -0.0006386317907, -0.0007185110664, -0.0004482897384, + -0.0002639839034, -0.0001535211268, -0.0000553319920, -0.0002026156942, + -0.0004665995976, -0.0007062374245, -0.0008167002012, -0.0007613682093, + -0.0009026156942, -0.0011973843058, -0.0012649899396, -0.0011360160966, + -0.0007981891348, -0.0003623742455, -0.0001227364185, -0.0000921529175, + -0.0002026156942, -0.0004297786720, -0.0005772635815, -0.0005034205231, + -0.0003438631791, -0.0001472837022, +0.0000000000000, -0.0000430583501, + -0.0001780684105, -0.0003684104628, -0.0005281690141, -0.0004728370221, + -0.0004420523139, -0.0005649899396, -0.0006140845070, -0.0006446680080, + -0.0006386317907, -0.0004851106640, -0.0003315895372, -0.0002517102616, + -0.0002639839034, -0.0003991951710, -0.0005034205231, -0.0005342052314, + -0.0004973843058, -0.0004175050302, -0.0003070422535, -0.0000736418511, + +0.0000307847082, -0.0001412474849, -0.0003008048290, -0.0004114688129, + -0.0004605633803, -0.0002885311871, -0.0001227364185, -0.0000676056338, + -0.0001412474849, -0.0004543259557, -0.0006754527163, -0.0007307847082, + -0.0008227364185, -0.0007859154930, -0.0006754527163, -0.0005156941650, + -0.0003193158954, -0.0002456740443, -0.0002456740443, -0.0003070422535, + -0.0004788732394, -0.0005955734406, -0.0005464788732, -0.0004665995976, + -0.0003253521127, -0.0001843058350, -0.0002271629779, -0.0003315895372, + -0.0004788732394, -0.0006754527163, -0.0007122736419, -0.0004973843058, + -0.0003193158954, -0.0003130784708, -0.0003684104628, -0.0003991951710, + -0.0002148893360, +0.0000676056338, +0.0002579476861, +0.0003623742455, + +0.0002456740443, -0.0000430583501, -0.0002824949698, -0.0005281690141, + -0.0007613682093, -0.0008350100604, -0.0007185110664, -0.0003561368209, + +0.0000736418511, +0.0002334004024, +0.0001044265594, -0.0001350100604, + -0.0003193158954, -0.0003193158954, -0.0002394366197, -0.0001289738431, + -0.0000307847082, +0.0000000000000, +0.0000430583501, +0.0000798792757, + -0.0000307847082, -0.0001472837022, -0.0001535211268, -0.0000859154930, + -0.0000185110664, -0.0000062374245, +0.0000000000000, -0.0000245472837, + -0.0000185110664, +0.0000553319920, +0.0001044265594, +0.0001350100604, + +0.0001843058350, +0.0000368209256, -0.0003806841046, -0.0007921529175, + -0.0009334004024, -0.0009211267606, -0.0007062374245, -0.0002148893360, + +0.0002026156942, +0.0002517102616, +0.0000981891348, +0.0000062374245, + -0.0000553319920, +0.0000122736419, +0.0003008048290, +0.0005342052314, + +0.0005342052314, +0.0003130784708, -0.0000122736419, -0.0003561368209, + -0.0006754527163, -0.0007798792757, -0.0006078470825, -0.0003130784708, + -0.0000921529175, -0.0000676056338, -0.0001104627767, -0.0001535211268, + -0.0001535211268, -0.0000185110664, +0.0000490945674, -0.0000307847082, + -0.0001044265594, -0.0001535211268, -0.0001965794769, -0.0002271629779, + -0.0002148893360, -0.0001843058350, -0.0002026156942, -0.0003008048290, + -0.0004360160966, -0.0005219315895, -0.0004911468813, -0.0003684104628, + -0.0002334004024, -0.0001350100604, -0.0001167002012, -0.0001843058350, + -0.0001780684105, -0.0000553319920, -0.0000062374245, -0.0001227364185, + -0.0003008048290, -0.0003008048290, -0.0001412474849, -0.0000185110664, + +0.0000859154930, +0.0001044265594, -0.0000245472837, -0.0001535211268, + -0.0003008048290, -0.0003746478873, -0.0002824949698, -0.0002026156942, + -0.0001657947686, -0.0001535211268, -0.0001227364185, +0.0000307847082, + +0.0001227364185, +0.0001227364185, +0.0001350100604, +0.0001044265594, + +0.0000185110664, -0.0000676056338, -0.0000368209256, +0.0000921529175, + +0.0000553319920, -0.0000676056338, -0.0001412474849, -0.0001227364185, + +0.0000430583501, +0.0001350100604, +0.0001289738431, +0.0001104627767, + -0.0000736418511, -0.0003315895372, -0.0003929577465, -0.0003746478873, + -0.0002148893360, +0.0000676056338, +0.0002271629779, +0.0004052313883, + +0.0004911468813, +0.0002762575453, -0.0000185110664, -0.0002824949698, + -0.0004237424547, -0.0002947686117, -0.0003070422535, -0.0003253521127, + -0.0001412474849, -0.0001412474849, -0.0002088531187, -0.0002211267606, + -0.0001535211268, -0.0000307847082, -0.0001104627767, -0.0002947686117, + -0.0003501006036, -0.0004052313883, -0.0001535211268, +0.0002639839034, + +0.0004728370221, +0.0005096579477, +0.0002824949698, +0.0000185110664, + +0.0000307847082, +0.0000798792757, +0.0002148893360, +0.0003929577465, + +0.0001843058350, +0.0000062374245, +0.0001104627767, +0.0001289738431, + +0.0001289738431, +0.0002271629779, +0.0001657947686, -0.0000553319920, + -0.0002885311871, -0.0003684104628, -0.0003501006036, -0.0002148893360, + +0.0001167002012, +0.0002517102616, +0.0000676056338, -0.0001472837022, + -0.0001965794769, -0.0000736418511, +0.0001412474849, +0.0002579476861, + +0.0002824949698, +0.0003070422535, +0.0002026156942, +0.0002334004024, + +0.0004360160966, +0.0005281690141, +0.0005034205231, +0.0004114688129, + +0.0001718309859, +0.0000736418511, -0.0000921529175, -0.0001595573441, + +0.0000122736419, +0.0000553319920, +0.0001843058350, +0.0005219315895, + +0.0007245472837, +0.0008412474849, +0.0008718309859, +0.0007307847082, + +0.0005895372233, +0.0002885311871, -0.0000430583501, -0.0001718309859, + -0.0001535211268, -0.0000490945674, +0.0001104627767, +0.0003315895372, + +0.0004420523139, +0.0004360160966, +0.0005404426559, +0.0005710261569, + +0.0004420523139, +0.0004482897384, +0.0004911468813, +0.0003929577465, + +0.0003193158954, +0.0003008048290, +0.0002211267606, +0.0000490945674, + -0.0000736418511, -0.0000122736419, +0.0000122736419, -0.0000062374245, + +0.0000798792757, +0.0001289738431, +0.0000798792757, +0.0000676056338, + +0.0000490945674, +0.0000245472837, +0.0000307847082, +0.0000122736419, + +0.0001044265594, +0.0001718309859, +0.0001350100604, +0.0001350100604, + +0.0001167002012, +0.0000981891348, +0.0001289738431, +0.0001167002012, + +0.0001472837022, +0.0001843058350, +0.0000981891348, +0.0001535211268, + +0.0003193158954, +0.0004482897384, +0.0006569416499, +0.0008903420523, + +0.0008412474849, +0.0005034205231, +0.0001104627767, -0.0002088531187, + -0.0003193158954, -0.0002148893360, -0.0000307847082, +0.0000981891348, + +0.0001780684105, +0.0002334004024, +0.0003438631791, +0.0004482897384, + +0.0005527162978, +0.0006446680080, +0.0006201207243, +0.0004360160966, + +0.0001903420523, +0.0001227364185, +0.0001843058350, +0.0002456740443, + +0.0003623742455, +0.0003991951710, +0.0003561368209, +0.0004114688129, + +0.0004851106640, +0.0004543259557, +0.0003193158954, +0.0002885311871, + +0.0003130784708, +0.0002211267606, +0.0002271629779, +0.0004052313883, + +0.0005649899396, +0.0006078470825, +0.0005034205231, +0.0003253521127, + +0.0001350100604, -0.0000430583501, -0.0000613682093, +0.0000185110664, + +0.0000307847082, +0.0000798792757, +0.0002026156942, +0.0003315895372, + +0.0004360160966, +0.0005342052314, +0.0004788732394, +0.0004052313883, + +0.0002885311871, +0.0000613682093, +0.0000245472837, +0.0001044265594, + +0.0001044265594, +0.0002026156942, +0.0002456740443, +0.0002762575453, + +0.0005156941650, +0.0005832997988, +0.0005281690141, +0.0004728370221, + +0.0003684104628, +0.0003008048290, +0.0002885311871, +0.0002885311871, + +0.0003501006036, +0.0003376257545, +0.0001044265594, -0.0001167002012, + -0.0001903420523, -0.0001595573441, -0.0000307847082, +0.0002517102616, + +0.0004420523139, +0.0004543259557, +0.0003501006036, +0.0001104627767, + -0.0000553319920, -0.0001780684105, -0.0001350100604, +0.0000859154930, + +0.0002762575453, +0.0003193158954, +0.0002824949698, +0.0001535211268, + +0.0000676056338, -0.0000122736419, -0.0000981891348, -0.0000430583501, + +0.0000368209256, +0.0001104627767, +0.0001350100604, +0.0001044265594, + -0.0000553319920, -0.0002211267606, -0.0002026156942, -0.0001167002012, + -0.0000062374245, +0.0000921529175, +0.0001595573441, +0.0002334004024, + +0.0003008048290, +0.0003315895372, +0.0003008048290, +0.0001595573441, + +0.0000613682093, -0.0000122736419, -0.0001167002012, -0.0000798792757, + -0.0000307847082, +0.0000062374245, +0.0000921529175, +0.0000859154930, + +0.0000921529175, +0.0001965794769, +0.0003008048290, +0.0005034205231, + +0.0006631790744, +0.0006018108652, +0.0004297786720, +0.0002271629779, + +0.0001412474849, +0.0001718309859, +0.0001350100604, +0.0001104627767, + +0.0001903420523, +0.0001472837022, +0.0000490945674, -0.0000122736419, + +0.0000000000000, +0.0000062374245, -0.0000553319920, -0.0000736418511, + -0.0000676056338, -0.0000613682093, -0.0000613682093, -0.0001227364185, + -0.0001044265594, +0.0000122736419, +0.0002088531187, +0.0003623742455, + +0.0003623742455, +0.0003623742455, +0.0003438631791, +0.0001595573441, + +0.0000490945674, +0.0001044265594, +0.0002271629779, +0.0003376257545, + +0.0003253521127, +0.0002579476861, +0.0001104627767, -0.0000613682093, + -0.0001104627767, -0.0001167002012, -0.0001595573441, -0.0002517102616, + -0.0004052313883, -0.0004420523139, -0.0003684104628, -0.0002702213280, + -0.0000245472837, +0.0001595573441, +0.0001718309859, +0.0002271629779, + +0.0002947686117, +0.0002885311871, +0.0002271629779, +0.0001595573441, + +0.0001289738431, +0.0000000000000, -0.0001350100604, -0.0001412474849, + -0.0001472837022, -0.0001044265594, +0.0000000000000, +0.0000490945674, + +0.0000553319920, +0.0001350100604, +0.0002211267606, +0.0002334004024, + +0.0001350100604, -0.0000798792757, -0.0003746478873, -0.0006754527163, + -0.0008289738431, -0.0006323943662, -0.0002148893360, +0.0001289738431, + +0.0003253521127, +0.0003376257545, +0.0002334004024, +0.0000981891348, + -0.0000307847082, -0.0000553319920, -0.0000736418511, -0.0001227364185, + -0.0000430583501, +0.0000430583501, +0.0000430583501, +0.0000122736419, + -0.0001167002012, -0.0002824949698, -0.0003929577465, -0.0003806841046, + -0.0001843058350, +0.0000185110664, +0.0001535211268, +0.0001289738431, + -0.0001104627767, -0.0003438631791, -0.0003869215292, -0.0003193158954, + -0.0001104627767, +0.0000122736419, -0.0000859154930, -0.0002762575453, + -0.0004297786720, -0.0004728370221, -0.0005096579477, -0.0004728370221, + -0.0002639839034, -0.0000859154930, -0.0000122736419, +0.0000676056338, + +0.0000368209256, -0.0000981891348, -0.0001843058350, -0.0002579476861, + -0.0003501006036, -0.0004175050302, -0.0003869215292, -0.0002885311871, + -0.0002088531187, -0.0001657947686, -0.0001718309859, -0.0002517102616, + -0.0003070422535, -0.0002639839034, -0.0001595573441, -0.0001044265594, + -0.0000921529175, -0.0001780684105, -0.0003929577465, -0.0004911468813, + -0.0004175050302, -0.0003315895372, -0.0001965794769, -0.0000921529175, + -0.0000613682093, -0.0000490945674, -0.0001227364185, -0.0001350100604, + -0.0001104627767, -0.0001289738431, +0.0000307847082, +0.0002088531187, + +0.0002148893360, +0.0001965794769, +0.0001104627767, -0.0000062374245, + -0.0001350100604, -0.0003684104628, -0.0005156941650, -0.0006078470825, + -0.0006937625755, -0.0005587525151, -0.0003193158954, -0.0001472837022, + +0.0000613682093, +0.0002088531187, +0.0002394366197, +0.0003130784708, + +0.0002947686117, +0.0001780684105, +0.0000921529175, -0.0000553319920, + -0.0002702213280, -0.0004237424547, -0.0004973843058, -0.0004237424547, + -0.0002639839034, -0.0001412474849, +0.0000245472837, +0.0001718309859, + +0.0002088531187, +0.0002271629779, +0.0002334004024, +0.0001965794769, + +0.0000981891348, -0.0000368209256, -0.0001595573441, -0.0002885311871, + -0.0003623742455, -0.0002579476861, -0.0001350100604, -0.0000736418511, + -0.0000430583501, -0.0000859154930, -0.0001289738431, -0.0001167002012, + -0.0000921529175, -0.0000798792757, -0.0000921529175, -0.0000736418511, + -0.0000736418511, +0.0000000000000, +0.0001289738431, +0.0001595573441, + +0.0001780684105, +0.0001535211268, +0.0000490945674, +0.0000490945674, + +0.0001167002012, +0.0001167002012, -0.0000062374245, -0.0001412474849, + -0.0001780684105, -0.0001718309859, -0.0000736418511, +0.0000000000000, + -0.0000245472837, -0.0000185110664, -0.0001657947686, -0.0003806841046, + -0.0004297786720, -0.0002947686117, -0.0000368209256, +0.0001718309859, + +0.0002088531187, +0.0001595573441, +0.0000368209256, -0.0000185110664, + -0.0000490945674, -0.0001780684105, -0.0001843058350, -0.0000859154930, + -0.0001227364185, -0.0000676056338, +0.0001472837022, +0.0002947686117, + +0.0003315895372, +0.0002456740443, +0.0000981891348, -0.0000921529175, + -0.0003253521127, -0.0003869215292, -0.0003315895372, -0.0002456740443, + -0.0000736418511, -0.0000122736419, +0.0000185110664, +0.0001044265594, + +0.0000859154930, +0.0000981891348, +0.0000921529175, -0.0000613682093, + -0.0002088531187, -0.0002824949698, -0.0003130784708, -0.0002702213280, + -0.0002148893360, -0.0002148893360, -0.0002088531187, -0.0001903420523, + -0.0001167002012, -0.0000062374245, -0.0000062374245, -0.0000490945674, + -0.0000307847082, +0.0000000000000, +0.0000981891348, +0.0001718309859, + +0.0001104627767, +0.0000430583501, -0.0000613682093, -0.0002211267606, + -0.0003070422535, -0.0003315895372, -0.0002824949698, -0.0001227364185, + -0.0000185110664, -0.0000062374245, -0.0000921529175, -0.0002148893360, + -0.0002762575453, -0.0003376257545, -0.0003253521127, -0.0001843058350, + -0.0000859154930, -0.0000245472837, +0.0000307847082, +0.0000245472837, + +0.0000307847082, -0.0000122736419, -0.0000430583501, +0.0000185110664, + +0.0000368209256, +0.0000921529175, +0.0001535211268, +0.0000981891348, + +0.0000553319920, +0.0000245472837, -0.0000307847082, -0.0000185110664, + -0.0000430583501, -0.0001167002012, -0.0001350100604, -0.0001595573441, + -0.0002088531187, -0.0002211267606, -0.0002211267606, -0.0001780684105, + -0.0001535211268, -0.0001412474849, -0.0001289738431, -0.0001227364185, + -0.0001167002012, +0.0000062374245, +0.0002088531187, +0.0002579476861, + +0.0001965794769, +0.0000062374245, -0.0002394366197, -0.0003929577465, + -0.0004728370221, -0.0003869215292, -0.0001535211268, +0.0000430583501, + +0.0002026156942, +0.0001903420523, -0.0000062374245, -0.0001227364185, + -0.0002885311871, -0.0004605633803, -0.0004665995976, -0.0004360160966, + -0.0003623742455, -0.0002211267606, -0.0001167002012, -0.0000245472837, + +0.0000245472837, +0.0000368209256, +0.0000553319920, +0.0000430583501, + +0.0000368209256, +0.0000859154930, +0.0001535211268, +0.0001472837022, + +0.0000245472837, -0.0001104627767, -0.0002334004024, -0.0003376257545, + -0.0003929577465, -0.0004360160966, -0.0004728370221, -0.0003929577465, + -0.0001965794769, -0.0000245472837, +0.0000921529175, +0.0002026156942, + +0.0002456740443, +0.0001657947686, +0.0000859154930, -0.0000490945674, + -0.0001350100604, -0.0000798792757, +0.0000000000000, +0.0000368209256, + -0.0000062374245, -0.0000921529175, -0.0001227364185, -0.0001167002012, + -0.0000490945674, +0.0000368209256, +0.0000859154930, +0.0000859154930, + +0.0000122736419, -0.0001350100604, -0.0002334004024, -0.0001657947686, + +0.0000000000000, +0.0000736418511, +0.0001350100604, +0.0001535211268, + +0.0000798792757, +0.0000736418511, +0.0001595573441, +0.0002211267606, + +0.0001843058350, +0.0000430583501, -0.0000553319920, -0.0001044265594, + -0.0000859154930, +0.0000368209256, +0.0001657947686, +0.0002517102616, + +0.0002579476861, +0.0001535211268, +0.0000307847082, -0.0000798792757, + -0.0001289738431, -0.0000736418511, -0.0000185110664, +0.0000122736419, + +0.0000859154930, +0.0001167002012, +0.0001167002012, +0.0001965794769, + +0.0003130784708, +0.0004665995976, +0.0005096579477, +0.0003991951710, + +0.0002456740443, +0.0000859154930, +0.0000122736419, +0.0000553319920, + +0.0000676056338, +0.0001167002012, +0.0002088531187, +0.0002517102616, + +0.0002211267606, +0.0001350100604, +0.0001289738431, +0.0002271629779, + +0.0003623742455, +0.0004420523139, +0.0003438631791, +0.0002088531187, + +0.0001843058350, +0.0001965794769, +0.0002211267606, +0.0002026156942, + +0.0000981891348, +0.0000613682093, +0.0000736418511, +0.0000307847082, + -0.0000368209256, -0.0000613682093, +0.0000736418511, +0.0002947686117, + +0.0003376257545, +0.0002148893360, +0.0000553319920, -0.0000613682093, + -0.0001104627767, -0.0001780684105, -0.0002394366197, -0.0001595573441, + -0.0000245472837, +0.0001104627767, +0.0002271629779, +0.0002271629779, + +0.0002271629779, +0.0002456740443, +0.0001718309859, +0.0000490945674, + -0.0000185110664, -0.0000307847082, +0.0000000000000, +0.0000921529175, + +0.0002271629779, +0.0003561368209, +0.0004788732394, +0.0004851106640, + +0.0002579476861, -0.0000981891348, -0.0003561368209, -0.0003806841046, + -0.0002456740443, -0.0000245472837, +0.0002148893360, +0.0003253521127, + +0.0002947686117, +0.0002334004024, +0.0002026156942, +0.0001718309859, + +0.0001227364185, +0.0000553319920, -0.0000430583501, -0.0001412474849, + -0.0001595573441, -0.0001227364185, -0.0000185110664, +0.0001167002012, + +0.0002211267606, +0.0002271629779, +0.0001044265594, -0.0000368209256, + -0.0001535211268, -0.0002639839034, -0.0002824949698, -0.0001780684105, + -0.0000676056338, -0.0000430583501, -0.0001044265594, -0.0001044265594, + -0.0000185110664, +0.0000736418511, +0.0001412474849, +0.0001780684105, + +0.0001227364185, -0.0000185110664, -0.0001843058350, -0.0003253521127, + -0.0004297786720, -0.0003684104628, -0.0002026156942, -0.0000921529175, + -0.0000245472837, -0.0000245472837, -0.0001044265594, -0.0001595573441, + -0.0001289738431, -0.0000490945674, +0.0000307847082, +0.0000921529175, + +0.0001289738431, +0.0001167002012, +0.0000062374245, -0.0000553319920, + -0.0000185110664, +0.0000122736419, +0.0000307847082, +0.0001044265594, + +0.0000981891348, +0.0000430583501, +0.0000430583501, +0.0000185110664, + +0.0000430583501, +0.0001289738431, +0.0000736418511, -0.0000859154930, + -0.0002026156942, -0.0002579476861, -0.0002088531187, -0.0000553319920, + +0.0000307847082, +0.0000490945674, -0.0000062374245, -0.0001472837022, + -0.0001965794769, -0.0001289738431, -0.0000613682093, +0.0000490945674, + +0.0001227364185, +0.0000921529175, +0.0001167002012, +0.0001289738431, + +0.0000676056338, +0.0000553319920, +0.0000553319920, +0.0000307847082, + +0.0000000000000, +0.0000062374245, +0.0000676056338, +0.0001167002012, + +0.0001167002012, +0.0001289738431, +0.0001657947686, +0.0002088531187, + +0.0001718309859, +0.0000798792757, +0.0000613682093, +0.0000307847082, + +0.0000062374245, +0.0000613682093, +0.0001535211268, +0.0002211267606, + +0.0002271629779, +0.0002026156942, +0.0001657947686, +0.0001227364185, + +0.0001104627767, +0.0000859154930, +0.0000676056338, +0.0000613682093, + +0.0000368209256, +0.0001227364185, +0.0002334004024, +0.0002702213280, + +0.0003130784708, +0.0002702213280, +0.0002088531187, +0.0002026156942, + +0.0001780684105, +0.0002271629779, +0.0003315895372, +0.0003376257545, + +0.0003193158954, +0.0002456740443, +0.0001535211268, +0.0001289738431, + +0.0000921529175, +0.0000245472837, +0.0000062374245, +0.0000430583501, + +0.0000981891348, +0.0001535211268, +0.0001843058350, +0.0002148893360, + +0.0002211267606, +0.0001535211268, +0.0000736418511, +0.0000490945674, + +0.0000185110664, +0.0000185110664, +0.0000430583501, +0.0000430583501, + +0.0000307847082, +0.0000245472837, +0.0000368209256, +0.0001104627767, + +0.0002517102616, +0.0004114688129, +0.0005342052314, +0.0005649899396, + +0.0005096579477, +0.0003315895372, +0.0001167002012, -0.0000122736419, + -0.0000736418511, -0.0001167002012, -0.0001227364185, -0.0000859154930, + -0.0000921529175, -0.0001044265594, -0.0000553319920, +0.0000185110664, + +0.0001044265594, +0.0001903420523, +0.0002148893360, +0.0001780684105, + +0.0001104627767, +0.0000430583501, +0.0000062374245, -0.0000062374245, + +0.0000000000000, +0.0000245472837, -0.0000368209256, -0.0000676056338, + -0.0000122736419, -0.0000245472837, -0.0000368209256, -0.0000062374245, + -0.0000062374245, +0.0000245472837, +0.0000981891348, +0.0001595573441, + +0.0001843058350, +0.0001289738431, +0.0000676056338, +0.0000000000000, + -0.0001104627767, -0.0001595573441, -0.0001472837022, -0.0001167002012, + -0.0000122736419, +0.0000553319920, +0.0000430583501, -0.0000122736419, + -0.0000368209256, +0.0000000000000, +0.0000122736419, +0.0000000000000, + +0.0000245472837, +0.0000490945674, +0.0001044265594, +0.0001595573441, + +0.0001350100604, +0.0000307847082, -0.0000736418511, -0.0000859154930, + -0.0000921529175, -0.0001044265594, -0.0000490945674, -0.0000368209256, + -0.0000245472837, +0.0000000000000, -0.0000185110664, -0.0000859154930, + -0.0001472837022, -0.0001780684105, -0.0001227364185, -0.0000185110664, + +0.0000676056338, +0.0000798792757, -0.0000245472837, -0.0001780684105, + -0.0002824949698, -0.0003193158954, -0.0002947686117, -0.0002517102616, + -0.0002148893360, -0.0001657947686, -0.0001104627767, -0.0000245472837, + +0.0000613682093, +0.0001472837022, +0.0001843058350, +0.0001535211268, + +0.0000981891348, +0.0000307847082, -0.0000062374245, +0.0000062374245, + +0.0000000000000, -0.0000062374245, +0.0000000000000, -0.0000798792757, + -0.0001350100604, -0.0001227364185, -0.0001412474849, -0.0001657947686, + -0.0001657947686, -0.0001227364185, -0.0000307847082, +0.0000490945674, + +0.0000368209256, -0.0000122736419, -0.0000490945674, -0.0000307847082, + +0.0000430583501, +0.0000921529175, +0.0000613682093, +0.0000245472837, + +0.0000000000000, -0.0000122736419, -0.0000307847082, -0.0000676056338, + -0.0000553319920, +0.0000000000000, +0.0000185110664, +0.0000245472837, + -0.0000430583501, -0.0001412474849, -0.0001412474849, -0.0001044265594, + -0.0000368209256, +0.0000613682093, +0.0001227364185, +0.0001227364185, + +0.0000613682093, -0.0000307847082, -0.0001044265594, -0.0001535211268, + -0.0001289738431, -0.0000553319920, +0.0000000000000, +0.0000859154930, + +0.0002026156942, +0.0002702213280, +0.0002762575453, +0.0001595573441, + -0.0000245472837, -0.0001412474849, -0.0001780684105, -0.0002026156942, + -0.0001965794769, -0.0001412474849, -0.0000613682093, +0.0000490945674, + +0.0001412474849, +0.0001535211268, +0.0001472837022, +0.0001167002012, + +0.0000000000000, -0.0001044265594, -0.0001472837022, -0.0001535211268, + -0.0000798792757, -0.0000062374245, +0.0000062374245, +0.0000185110664, + +0.0000185110664, -0.0000368209256, -0.0000981891348, -0.0001289738431, + -0.0001843058350, -0.0001780684105, -0.0001044265594, -0.0000430583501, + +0.0000000000000, +0.0000122736419, -0.0000307847082, -0.0001104627767, + -0.0001227364185, -0.0001104627767, -0.0000859154930, -0.0000245472837, + -0.0000062374245, -0.0000185110664, -0.0000368209256, -0.0000245472837, + +0.0000430583501, +0.0001657947686, +0.0002148893360, +0.0002334004024, + +0.0001780684105, +0.0000553319920, -0.0000676056338, -0.0001843058350, + -0.0003130784708, -0.0003869215292, -0.0003008048290, -0.0001227364185, + +0.0000613682093, +0.0002088531187, +0.0002088531187, +0.0001289738431, + +0.0000245472837, -0.0000859154930, -0.0001843058350, -0.0001843058350, + -0.0001227364185, -0.0000676056338, -0.0000490945674, -0.0000245472837, + +0.0000062374245, +0.0000062374245, +0.0000245472837, +0.0001289738431, + +0.0002394366197, +0.0003130784708, +0.0003253521127, +0.0002702213280, + +0.0001843058350, +0.0000490945674, -0.0000921529175, -0.0001965794769, + -0.0002639839034, -0.0002211267606, -0.0000921529175, -0.0000185110664, + +0.0000368209256, +0.0000859154930, +0.0000981891348, +0.0001104627767, + +0.0001412474849, +0.0001595573441, +0.0001350100604, +0.0000245472837, + -0.0000490945674, -0.0001104627767, -0.0001535211268, -0.0000981891348, + -0.0000430583501, -0.0000613682093, -0.0000736418511, -0.0001289738431, + -0.0001965794769, -0.0001965794769, -0.0000981891348, +0.0000122736419, + +0.0000736418511, +0.0000981891348, +0.0001044265594, +0.0000798792757, + +0.0000553319920, +0.0000430583501, +0.0000490945674, +0.0000245472837, + -0.0000307847082, -0.0001227364185, -0.0002639839034, -0.0003253521127, + -0.0002456740443, -0.0001903420523, -0.0001167002012, +0.0000062374245, + +0.0001167002012, +0.0002026156942, +0.0002456740443, +0.0002394366197, + +0.0002271629779, +0.0001535211268, +0.0000307847082, -0.0000676056338, + -0.0001289738431, -0.0001412474849, -0.0001412474849, -0.0001780684105, + -0.0002639839034, -0.0003070422535, -0.0002639839034, -0.0001903420523, + -0.0000676056338, +0.0000798792757, +0.0001412474849, +0.0001412474849, + +0.0000921529175, +0.0000122736419, -0.0000307847082, -0.0000368209256, + -0.0000122736419, +0.0000368209256, -0.0000245472837, -0.0001843058350, + -0.0002824949698, -0.0003008048290, -0.0002211267606, -0.0000613682093, + +0.0000798792757, +0.0001843058350, +0.0001843058350, +0.0000921529175, + -0.0000245472837, -0.0001535211268, -0.0002579476861, -0.0002456740443, + -0.0001965794769, -0.0001472837022, -0.0001044265594, -0.0000798792757, + -0.0000676056338, -0.0000307847082, +0.0000430583501, +0.0001104627767, + +0.0001289738431, +0.0001167002012, +0.0000859154930, +0.0000490945674, + +0.0000307847082, -0.0000490945674, -0.0001965794769, -0.0002762575453, + -0.0002639839034, -0.0002026156942, -0.0000859154930, +0.0000245472837, + +0.0000553319920, +0.0000122736419, +0.0000000000000, +0.0000000000000, + -0.0000185110664, +0.0000000000000, +0.0000553319920, +0.0001104627767, + +0.0001227364185, +0.0000798792757, +0.0000185110664, -0.0000736418511, + -0.0001167002012, -0.0000553319920, -0.0000245472837, -0.0000613682093, + -0.0000981891348, -0.0001412474849, -0.0001472837022, -0.0001044265594, + -0.0000062374245, +0.0000921529175, +0.0001227364185, +0.0001472837022, + +0.0001412474849, +0.0000307847082, -0.0000613682093, -0.0000921529175, + -0.0000736418511, +0.0000000000000, +0.0000368209256, +0.0000490945674, + +0.0000613682093, +0.0000490945674, +0.0000245472837, -0.0000368209256, + -0.0001167002012, -0.0001104627767, -0.0000921529175, -0.0000613682093, + -0.0000307847082, -0.0000430583501, -0.0000245472837, +0.0000185110664, + +0.0000000000000, +0.0000062374245, +0.0000122736419, -0.0000185110664, + -0.0000676056338, -0.0001227364185, -0.0001350100604, -0.0000736418511, + +0.0000245472837, +0.0001535211268, +0.0001780684105, +0.0001044265594, + +0.0000430583501, +0.0000122736419, +0.0000185110664, +0.0000490945674, + +0.0000307847082, +0.0000000000000, -0.0000368209256, -0.0000798792757, + -0.0000798792757, -0.0000676056338, -0.0000430583501, -0.0000122736419, + +0.0000000000000, +0.0000307847082, +0.0000798792757, +0.0001104627767, + +0.0001412474849, +0.0001472837022, +0.0001412474849, +0.0001595573441, + +0.0001657947686, +0.0001044265594, +0.0000245472837, -0.0000245472837, + -0.0000490945674, -0.0000613682093, -0.0000430583501, -0.0000122736419, + +0.0000000000000, +0.0000122736419, +0.0000307847082, +0.0000368209256, + +0.0000430583501, +0.0000553319920, +0.0000859154930, +0.0000736418511, + +0.0000368209256, +0.0000307847082, +0.0000245472837, -0.0000122736419, + -0.0000553319920, -0.0000921529175, -0.0001227364185, -0.0001595573441, + -0.0001657947686, -0.0001227364185, -0.0000676056338, -0.0000368209256, + +0.0000062374245, +0.0000490945674, +0.0000307847082, +0.0000245472837, + +0.0000307847082, +0.0000062374245, +0.0000307847082, +0.0000676056338, + +0.0000981891348, +0.0001227364185, +0.0001104627767, +0.0000676056338, + +0.0000553319920, +0.0000798792757, +0.0001104627767, +0.0001472837022, + +0.0001657947686, +0.0001044265594, -0.0000062374245, -0.0000430583501, + -0.0000736418511, -0.0001350100604, -0.0001535211268, -0.0001227364185, + -0.0000430583501, +0.0000000000000, +0.0000000000000, -0.0000062374245, + -0.0000490945674, -0.0000859154930, -0.0000307847082, +0.0000490945674, + +0.0001104627767, +0.0001412474849, +0.0001104627767, +0.0000553319920, + +0.0000185110664, -0.0000062374245, -0.0000368209256, -0.0000185110664, + +0.0000307847082, +0.0000490945674, -0.0000122736419, -0.0001104627767, + -0.0002088531187, -0.0002456740443, -0.0001780684105, -0.0001044265594, + -0.0000553319920, -0.0000245472837, -0.0000122736419, -0.0000062374245, + -0.0000245472837, -0.0000676056338, -0.0000490945674, +0.0000062374245, + +0.0000430583501, +0.0000368209256, +0.0000368209256, +0.0000676056338, + +0.0000981891348, +0.0001289738431, +0.0001472837022, +0.0001044265594, + +0.0000185110664, -0.0000736418511, -0.0001350100604, -0.0001535211268, + -0.0001472837022, -0.0000921529175, +0.0000245472837, +0.0001227364185, + +0.0001595573441, +0.0001289738431, +0.0000553319920, +0.0000000000000, + -0.0000062374245, +0.0000185110664, +0.0000798792757, +0.0000736418511, + +0.0000000000000, -0.0000859154930, -0.0001718309859, -0.0002211267606, + -0.0002026156942, -0.0001167002012, -0.0000368209256, +0.0000000000000, + +0.0000185110664, +0.0000185110664, +0.0000122736419, +0.0000490945674, + +0.0000859154930, +0.0001044265594, +0.0001350100604, +0.0001167002012, + +0.0000490945674, -0.0000062374245, -0.0000490945674, -0.0000736418511, + -0.0001289738431, -0.0002148893360, -0.0002394366197, -0.0001903420523, + -0.0001167002012, +0.0000000000000, +0.0001104627767, +0.0001535211268, + +0.0001289738431, +0.0000921529175, +0.0000553319920, -0.0000062374245, + -0.0000736418511, -0.0001104627767, -0.0001104627767, -0.0000981891348, + -0.0000676056338, -0.0000430583501, -0.0000368209256, -0.0000430583501, + -0.0000490945674, -0.0000676056338, -0.0000859154930, -0.0000859154930, + -0.0000553319920, +0.0000062374245, +0.0001044265594, +0.0001903420523, + +0.0001965794769, +0.0001535211268, +0.0000798792757, -0.0000062374245, + -0.0000430583501, -0.0000245472837, +0.0000307847082, +0.0001104627767, + +0.0001350100604, +0.0000736418511, +0.0000185110664, +0.0000000000000, + +0.0000430583501, +0.0000921529175, +0.0001167002012, +0.0001167002012, + +0.0000676056338, +0.0000062374245, -0.0000307847082, -0.0000798792757, + -0.0000981891348, -0.0000613682093, +0.0000122736419, +0.0000798792757, + +0.0000859154930, +0.0000676056338, +0.0000553319920, +0.0000368209256, + +0.0000245472837, +0.0000185110664, +0.0000307847082, +0.0000245472837, + -0.0000062374245, -0.0000307847082, +0.0000000000000, +0.0000736418511, + +0.0001595573441, +0.0002026156942, +0.0001718309859, +0.0000553319920, + -0.0000859154930, -0.0001412474849, -0.0001104627767, -0.0000368209256, + +0.0000307847082, +0.0000859154930, +0.0001227364185, +0.0001535211268, + +0.0001657947686, +0.0001535211268, +0.0001289738431, +0.0001044265594, + +0.0000736418511, +0.0000430583501, +0.0000000000000, -0.0000185110664, + +0.0000368209256, +0.0001350100604, +0.0001780684105, +0.0001535211268, + +0.0000859154930, +0.0000553319920, +0.0001044265594, +0.0001535211268, + +0.0001718309859, +0.0001535211268, +0.0001104627767, +0.0000490945674, + -0.0000062374245, -0.0000245472837, -0.0000185110664, -0.0000122736419, + -0.0000245472837, -0.0000490945674, -0.0000553319920, -0.0000307847082, + +0.0000122736419, +0.0000798792757, +0.0001350100604, +0.0001289738431, + +0.0001044265594, +0.0000736418511, +0.0000185110664, -0.0000307847082, + -0.0000676056338, -0.0000736418511, +0.0000062374245, +0.0001104627767, + +0.0001289738431, +0.0000921529175, +0.0000062374245, -0.0000676056338, + -0.0001104627767, -0.0001350100604, -0.0001044265594, -0.0000307847082, + +0.0000185110664, +0.0000490945674, +0.0000490945674, +0.0000245472837, + +0.0000307847082, +0.0000676056338, +0.0000981891348, +0.0001167002012, + +0.0001167002012, +0.0000981891348, +0.0000676056338, +0.0000490945674, + +0.0000553319920, +0.0000676056338, +0.0000859154930, +0.0000981891348, + +0.0000245472837, -0.0000430583501, -0.0000613682093, -0.0000490945674, + -0.0000368209256, +0.0000000000000, +0.0000613682093, +0.0001167002012, + +0.0001167002012, +0.0000921529175, +0.0000368209256, -0.0000307847082, + -0.0000613682093, -0.0000307847082, +0.0000307847082, +0.0001227364185, + +0.0002026156942, +0.0002517102616, +0.0002334004024, +0.0001595573441, + +0.0000981891348, +0.0000490945674, +0.0000245472837, +0.0000185110664, + -0.0000185110664, -0.0000921529175, -0.0001718309859, -0.0002394366197, + -0.0002271629779, -0.0001535211268, -0.0000981891348, -0.0000245472837, + +0.0000613682093, +0.0000981891348, +0.0001044265594, +0.0000921529175, + +0.0000613682093, +0.0000307847082, +0.0000062374245, -0.0000185110664, + -0.0000368209256, -0.0000368209256, -0.0000490945674, -0.0000981891348, + -0.0001289738431, -0.0001350100604, -0.0000676056338, +0.0000122736419, + +0.0000490945674, +0.0000613682093, +0.0000430583501, -0.0000430583501, + -0.0001227364185, -0.0002026156942, -0.0002639839034, -0.0002334004024, + -0.0001657947686, -0.0000921529175, -0.0000430583501, -0.0000490945674, + -0.0000859154930, -0.0001167002012, -0.0001167002012, -0.0000613682093, + -0.0000122736419, +0.0000122736419, +0.0000368209256, +0.0000430583501, + +0.0000430583501, +0.0000185110664, -0.0000613682093, -0.0001412474849, + -0.0001780684105, -0.0001595573441, -0.0000921529175, -0.0000245472837, + +0.0000185110664, +0.0000553319920, +0.0000185110664, -0.0000553319920, + -0.0001167002012, -0.0001780684105, -0.0001843058350, -0.0001167002012, + -0.0000490945674, +0.0000000000000, +0.0000245472837, +0.0000307847082, + +0.0000000000000, -0.0000859154930, -0.0001780684105, -0.0001965794769, + -0.0001718309859, -0.0001227364185, -0.0000553319920, +0.0000062374245, + +0.0000490945674, +0.0000676056338, +0.0000676056338, +0.0000307847082, + +0.0000000000000, +0.0000245472837, +0.0000676056338, +0.0000676056338, + +0.0000368209256, -0.0000307847082, -0.0000981891348, -0.0001657947686, + -0.0002088531187, -0.0001718309859, -0.0001104627767, -0.0000798792757, + -0.0000307847082, -0.0000307847082, -0.0000676056338, -0.0000736418511, + -0.0000676056338, -0.0000430583501, +0.0000000000000, +0.0000368209256, + +0.0000368209256, +0.0000000000000, -0.0000368209256, -0.0000368209256, + -0.0000185110664, +0.0000122736419, +0.0000430583501, +0.0000185110664, + +0.0000000000000, -0.0000185110664, -0.0000185110664, +0.0000000000000, + +0.0000245472837, +0.0000430583501, +0.0000553319920, +0.0000368209256, + +0.0000245472837, +0.0000185110664, +0.0000000000000, -0.0000122736419, + -0.0000368209256, -0.0000553319920, -0.0000490945674, -0.0000245472837, + +0.0000000000000, +0.0000245472837, +0.0000490945674, +0.0000490945674, + +0.0000185110664, +0.0000000000000, -0.0000062374245, -0.0000122736419, + -0.0000122736419, -0.0000062374245, -0.0000062374245, +0.0000000000000, + +0.0000000000000, +0.0000062374245, +0.0000122736419, +0.0000122736419, + +0.0000062374245, +0.0000062374245, +0.0000000000000, +0.0000000000000 +}; diff --git a/plugins/LadspaEffect/swh/impulses/12-fender-superchamp-sm57.h b/plugins/LadspaEffect/swh/impulses/12-fender-superchamp-sm57.h new file mode 100644 index 000000000..f7fbb74b6 --- /dev/null +++ b/plugins/LadspaEffect/swh/impulses/12-fender-superchamp-sm57.h @@ -0,0 +1,679 @@ +float fender_superchamp_sm57[] = { + +0.0000000000000, -0.0000200000000, -0.0000530434783, -0.0000397826087, + +0.0000265217391, +0.0000928260870, +0.0001658695652, +0.0001458695652, + -0.0000067391304, -0.0001458695652, -0.0002786956522, -0.0004047826087, + -0.0003647826087, -0.0002786956522, -0.0001856521739, +0.0000067391304, + +0.0001128260870, +0.0001393478261, +0.0001856521739, +0.0001128260870, + +0.0000265217391, +0.0000000000000, -0.0001326086957, -0.0002056521739, + -0.0002056521739, -0.0002852173913, -0.0002654347826, -0.0002521739130, + -0.0003317391304, -0.0003117391304, -0.0002919565217, -0.0002984782609, + -0.0001458695652, +0.0000200000000, +0.0001458695652, +0.0003715217391, + +0.0003250000000, +0.0001658695652, -0.0000465217391, -0.0003515217391, + -0.0005904347826, -0.0006700000000, -0.0006236956522, -0.0003184782609, + +0.0000200000000, +0.0000863043478, +0.0001060869565, +0.0000000000000, + -0.0002919565217, -0.0004976086957, -0.0007297826087, -0.0010615217391, + -0.0011610869565, -0.0012671739130, -0.0013269565217, -0.0011145652174, + -0.0010747826087, -0.0010880434783, -0.0009752173913, -0.0011808695652, + -0.0015058695652, -0.0017382608696, -0.0023950000000, -0.0028593478261, + -0.0032308695652, -0.0046373913043, -0.0047965217391, -0.0050752173913, + -0.0067404347826, -0.0047169565217, -0.0074436956522, -0.0103428260870, + +0.0068532608696, +0.0241619565217, +0.0008426086957, -0.0764132608696, + -0.1174660869565, -0.0463336956522, +0.0499626086957, +0.1274373913043, + +0.2072806521739, +0.2173780434783, +0.1524086956522, +0.0598676086957, + -0.0573863043478, -0.1283728260870, -0.1224352173913, -0.0873797826087, + -0.0395069565217, -0.0204402173913, -0.0344052173913, -0.0300000000000, + +0.0007495652174, +0.0409532608696, +0.0674969565217, +0.0662097826087, + +0.0491002173913, +0.0154643478261, -0.0154313043478, -0.0201350000000, + -0.0179323913043, -0.0123000000000, -0.0078747826087, -0.0214352173913, + -0.0342726086957, -0.0254821739130, -0.0027134782609, +0.0226360869565, + +0.0315126086957, +0.0181778260870, +0.0039473913043, -0.0051217391304, + -0.0098850000000, -0.0113710869565, -0.0134476086957, -0.0153650000000, + -0.0203339130435, -0.0242482608696, -0.0183239130435, -0.0129036956522, + -0.0087771739130, +0.0026736956522, +0.0066541304348, +0.0001193478261, + -0.0074967391304, -0.0111521739130, -0.0129500000000, -0.0151858695652, + -0.0076558695652, +0.0070058695652, +0.0121739130435, +0.0095002173913, + +0.0024280434783, -0.0069991304348, -0.0090026086957, -0.0039673913043, + +0.0039141304348, +0.0099447826087, +0.0047767391304, -0.0068930434783, + -0.0150397826087, -0.0140978260870, -0.0088500000000, -0.0071450000000, + -0.0069526086957, -0.0080341304348, -0.0125586956522, -0.0104556521739, + -0.0010680434783, +0.0076956521739, +0.0145886956522, +0.0114839130435, + +0.0010017391304, -0.0077886956522, -0.0161410869565, -0.0173752173913, + -0.0094869565217, -0.0054997826087, -0.0030782608696, -0.0004578260870, + -0.0005571739130, +0.0007363043478, -0.0002454347826, -0.0030650000000, + -0.0037019565217, -0.0076956521739, -0.0126847826087, -0.0129102173913, + -0.0117956521739, -0.0090358695652, -0.0028128260870, +0.0051880434783, + +0.0124591304348, +0.0133945652174, +0.0064286956522, -0.0032641304348, + -0.0103163043478, -0.0108469565217, -0.0032971739130, +0.0067867391304, + +0.0107341304348, +0.0073043478261, +0.0008558695652, -0.0071915217391, + -0.0147147826087, -0.0174745652174, -0.0150795652174, -0.0105352173913, + -0.0058247826087, -0.0016386956522, +0.0013865217391, +0.0034697826087, + +0.0049293478261, +0.0050486956522, +0.0032441304348, +0.0007032608696, + +0.0007032608696, +0.0033569565217, +0.0057917391304, +0.0073506521739, + +0.0075565217391, +0.0063489130435, +0.0048495652174, +0.0020367391304, + -0.0018641304348, -0.0047302173913, -0.0066741304348, -0.0078947826087, + -0.0078019565217, -0.0069991304348, -0.0063158695652, -0.0058913043478, + -0.0040734782609, -0.0003715217391, +0.0025078260870, +0.0041730434783, + +0.0053339130435, +0.0040534782609, +0.0014130434783, +0.0008558695652, + +0.0028926086957, +0.0059641304348, +0.0074569565217, +0.0076493478261, + +0.0079013043478, +0.0064019565217, +0.0046506521739, +0.0043521739130, + +0.0026139130435, +0.0002719565217, -0.0013932608696, -0.0017580434783, + +0.0007165217391, +0.0030319565217, +0.0038943478261, +0.0058713043478, + +0.0076758695652, +0.0077886956522, +0.0070256521739, +0.0055793478261, + +0.0056058695652, +0.0062295652174, +0.0046639130435, +0.0026669565217, + +0.0016519565217, +0.0012073913043, +0.0010547826087, +0.0002719565217, + +0.0010017391304, +0.0039473913043, +0.0056989130435, +0.0061897826087, + +0.0058380434783, +0.0043386956522, +0.0036091304348, +0.0037019565217, + +0.0040204347826, +0.0048363043478, +0.0046041304348, +0.0033436956522, + +0.0020432608696, +0.0001658695652, -0.0003980434783, +0.0015326086957, + +0.0044450000000, +0.0072313043478, +0.0084386956522, +0.0076160869565, + +0.0066143478261, +0.0060704347826, +0.0053604347826, +0.0045510869565, + +0.0040800000000, +0.0039739130435, +0.0022091304348, -0.0013865217391, + -0.0026006521739, -0.0000597826087, +0.0022889130435, +0.0023219565217, + +0.0015856521739, +0.0013202173913, +0.0008093478261, +0.0005971739130, + +0.0027134782609, +0.0061897826087, +0.0075963043478, +0.0056856521739, + +0.0024347826087, +0.0002586956522, -0.0001791304348, +0.0000000000000, + +0.0000663043478, +0.0005904347826, +0.0018908695652, +0.0034100000000, + +0.0043719565217, +0.0037947826087, +0.0022756521739, +0.0004378260870, + -0.0018576086957, -0.0030782608696, -0.0016982608696, +0.0017647826087, + +0.0051680434783, +0.0061897826087, +0.0042260869565, +0.0006302173913, + -0.0030184782609, -0.0044647826087, -0.0026271739130, +0.0007960869565, + +0.0030517391304, +0.0030517391304, +0.0020965217391, +0.0014463043478, + +0.0008756521739, +0.0000597826087, -0.0003450000000, -0.0006369565217, + -0.0010482608696, -0.0006502173913, +0.0008756521739, +0.0028328260870, + +0.0039871739130, +0.0031247826087, +0.0008823913043, -0.0013732608696, + -0.0028793478261, -0.0030717391304, -0.0022954347826, -0.0022026086957, + -0.0031645652174, -0.0039141304348, -0.0034100000000, -0.0020965217391, + -0.0006634782609, +0.0005706521739, +0.0015921739130, +0.0012936956522, + -0.0007763043478, -0.0031047826087, -0.0042658695652, -0.0034167391304, + -0.0009354347826, +0.0012406521739, +0.0018773913043, +0.0008623913043, + -0.0011410869565, -0.0023950000000, -0.0021495652174, -0.0006700000000, + +0.0010217391304, +0.0016254347826, +0.0004908695652, -0.0017780434783, + -0.0042591304348, -0.0057717391304, -0.0061034782609, -0.0060902173913, + -0.0051747826087, -0.0025541304348, +0.0004113043478, +0.0023021739130, + +0.0027200000000, +0.0021097826087, +0.0013732608696, -0.0001991304348, + -0.0022356521739, -0.0027267391304, -0.0025010869565, -0.0024813043478, + -0.0022621739130, -0.0020034782609, -0.0010017391304, +0.0001393478261, + -0.0004313043478, -0.0017913043478, -0.0026802173913, -0.0032176086957, + -0.0028991304348, -0.0027797826087, -0.0027332608696, -0.0023817391304, + -0.0030517391304, -0.0041795652174, -0.0036819565217, -0.0020367391304, + -0.0002123913043, +0.0011345652174, +0.0011145652174, +0.0003715217391, + -0.0004510869565, -0.0012406521739, -0.0015789130435, -0.0014463043478, + -0.0008558695652, +0.0000995652174, +0.0003250000000, -0.0000597826087, + -0.0004578260870, -0.0013269565217, -0.0021560869565, -0.0026071739130, + -0.0031910869565, -0.0035558695652, -0.0028991304348, -0.0017713043478, + -0.0009884782609, -0.0005771739130, -0.0006634782609, -0.0010945652174, + -0.0007960869565, +0.0005839130435, +0.0020500000000, +0.0023086956522, + +0.0017382608696, +0.0017250000000, +0.0017050000000, +0.0009486956522, + +0.0001458695652, -0.0004843478261, -0.0005506521739, +0.0004180434783, + +0.0013600000000, +0.0017580434783, +0.0015789130435, +0.0004578260870, + -0.0009619565217, -0.0023419565217, -0.0033171739130, -0.0030850000000, + -0.0022091304348, -0.0008691304348, +0.0006832608696, +0.0008889130435, + +0.0000132608696, -0.0006104347826, -0.0006700000000, +0.0002123913043, + +0.0015591304348, +0.0025143478261, +0.0026336956522, +0.0015921739130, + -0.0002454347826, -0.0017580434783, -0.0021826086957, -0.0012869565217, + +0.0003715217391, +0.0019371739130, +0.0029058695652, +0.0030650000000, + +0.0019969565217, +0.0000132608696, -0.0014595652174, -0.0014860869565, + -0.0001856521739, +0.0012604347826, +0.0019306521739, +0.0015193478261, + +0.0004710869565, -0.0004976086957, -0.0011543478261, -0.0013800000000, + -0.0009089130435, +0.0001326086957, +0.0009686956522, +0.0011676086957, + +0.0012471739130, +0.0014130434783, +0.0010747826087, +0.0005241304348, + +0.0004776086957, +0.0008558695652, +0.0013997826087, +0.0016519565217, + +0.0013732608696, +0.0005771739130, -0.0002984782609, -0.0005373913043, + +0.0000663043478, +0.0010945652174, +0.0020500000000, +0.0022954347826, + +0.0015458695652, -0.0000795652174, -0.0019636956522, -0.0026536956522, + -0.0018443478261, -0.0003382608696, +0.0014793478261, +0.0026471739130, + +0.0024547826087, +0.0014130434783, -0.0000597826087, -0.0012804347826, + -0.0017050000000, -0.0014130434783, -0.0005904347826, +0.0002786956522, + +0.0009619565217, +0.0016850000000, +0.0019041304348, +0.0015523913043, + +0.0010350000000, +0.0006567391304, +0.0004245652174, -0.0001128260870, + -0.0011410869565, -0.0020167391304, -0.0023154347826, -0.0017913043478, + -0.0005108695652, +0.0010282608696, +0.0021628260870, +0.0024147826087, + +0.0020432608696, +0.0014065217391, +0.0008823913043, +0.0006036956522, + +0.0001193478261, -0.0007297826087, -0.0015523913043, -0.0016519565217, + -0.0005639130435, +0.0007430434783, +0.0015458695652, +0.0019371739130, + +0.0017780434783, +0.0010415217391, -0.0000067391304, -0.0010084782609, + -0.0013202173913, -0.0009286956522, -0.0001260869565, +0.0008093478261, + +0.0011808695652, +0.0006965217391, -0.0001723913043, -0.0009884782609, + -0.0015193478261, -0.0016584782609, -0.0014926086957, -0.0011676086957, + -0.0009554347826, -0.0009619565217, -0.0009154347826, -0.0008226086957, + -0.0006502173913, -0.0001856521739, +0.0001723913043, +0.0002719565217, + +0.0002919565217, +0.0002521739130, +0.0001923913043, -0.0000530434783, + -0.0005839130435, -0.0010282608696, -0.0015921739130, -0.0020500000000, + -0.0018641304348, -0.0013467391304, -0.0007430434783, -0.0003582608696, + -0.0005173913043, -0.0010547826087, -0.0014595652174, -0.0013134782609, + -0.0009554347826, -0.0007828260870, -0.0010282608696, -0.0018443478261, + -0.0024745652174, -0.0022889130435, -0.0014330434783, +0.0000000000000, + +0.0011941304348, +0.0014197826087, +0.0008426086957, -0.0001591304348, + -0.0007828260870, -0.0009554347826, -0.0012141304348, -0.0014463043478, + -0.0015458695652, -0.0015126086957, -0.0011210869565, -0.0010017391304, + -0.0012604347826, -0.0013134782609, -0.0015193478261, -0.0020167391304, + -0.0023219565217, -0.0023882608696, -0.0022689130435, -0.0020234782609, + -0.0015656521739, -0.0007230434783, -0.0000265217391, +0.0001856521739, + +0.0002056521739, -0.0000597826087, -0.0003782608696, -0.0003117391304, + -0.0001128260870, -0.0000597826087, -0.0002056521739, -0.0004976086957, + -0.0007895652174, -0.0009221739130, -0.0008358695652, -0.0005041304348, + +0.0000730434783, +0.0006634782609, +0.0008426086957, +0.0004313043478, + -0.0005306521739, -0.0012671739130, -0.0012073913043, -0.0009554347826, + -0.0008358695652, -0.0007097826087, -0.0005971739130, -0.0005639130435, + -0.0007297826087, -0.0008491304348, -0.0008491304348, -0.0009221739130, + -0.0008358695652, -0.0006634782609, -0.0007363043478, -0.0007763043478, + -0.0006434782609, -0.0005241304348, -0.0004245652174, -0.0002786956522, + -0.0001723913043, +0.0000000000000, +0.0004510869565, +0.0007032608696, + +0.0002852173913, -0.0004245652174, -0.0006767391304, -0.0003915217391, + -0.0003117391304, -0.0005306521739, -0.0004378260870, -0.0002654347826, + -0.0003515217391, -0.0006369565217, -0.0010217391304, -0.0011210869565, + -0.0008426086957, -0.0005971739130, -0.0004976086957, -0.0006236956522, + -0.0009486956522, -0.0011676086957, -0.0011278260870, -0.0007695652174, + -0.0001060869565, +0.0004908695652, +0.0007097826087, +0.0005241304348, + +0.0000332608696, -0.0003382608696, -0.0003317391304, -0.0000795652174, + +0.0001326086957, +0.0001658695652, -0.0000730434783, -0.0002852173913, + -0.0004843478261, -0.0007895652174, -0.0007763043478, -0.0002984782609, + +0.0002984782609, +0.0007097826087, +0.0007230434783, +0.0004578260870, + +0.0002189130435, -0.0002786956522, -0.0008226086957, -0.0008028260870, + -0.0001723913043, +0.0004710869565, +0.0004578260870, -0.0000332608696, + -0.0002123913043, -0.0000067391304, +0.0002919565217, +0.0004776086957, + +0.0002321739130, -0.0000067391304, +0.0000795652174, +0.0002056521739, + +0.0001791304348, -0.0000265217391, -0.0001458695652, +0.0001526086957, + +0.0004047826087, +0.0003382608696, +0.0002719565217, +0.0001856521739, + -0.0000132608696, -0.0002454347826, -0.0002654347826, +0.0000597826087, + +0.0004908695652, +0.0008028260870, +0.0008889130435, +0.0006236956522, + +0.0003847826087, +0.0003382608696, +0.0001791304348, +0.0001723913043, + +0.0004643478261, +0.0007363043478, +0.0005771739130, +0.0000067391304, + -0.0005108695652, -0.0005506521739, -0.0002189130435, +0.0002321739130, + +0.0006369565217, +0.0008956521739, +0.0009419565217, +0.0007828260870, + +0.0005041304348, +0.0003647826087, +0.0005108695652, +0.0008491304348, + +0.0012206521739, +0.0013269565217, +0.0009554347826, +0.0003052173913, + -0.0001326086957, -0.0000132608696, +0.0003117391304, +0.0003715217391, + +0.0004976086957, +0.0008756521739, +0.0011478260870, +0.0011078260870, + +0.0007430434783, +0.0004976086957, +0.0005506521739, +0.0005506521739, + +0.0004710869565, +0.0003184782609, +0.0001060869565, +0.0000995652174, + +0.0002719565217, +0.0006302173913, +0.0011145652174, +0.0013865217391, + +0.0013800000000, +0.0011013043478, +0.0006900000000, +0.0004643478261, + +0.0004643478261, +0.0005439130435, +0.0008889130435, +0.0013865217391, + +0.0018045652174, +0.0018841304348, +0.0016386956522, +0.0013202173913, + +0.0010150000000, +0.0007828260870, +0.0006236956522, +0.0003250000000, + +0.0000000000000, -0.0000928260870, +0.0000000000000, +0.0003052173913, + +0.0005506521739, +0.0005108695652, +0.0004776086957, +0.0005639130435, + +0.0005439130435, +0.0003715217391, +0.0002586956522, +0.0004047826087, + +0.0005904347826, +0.0005571739130, +0.0005439130435, +0.0005771739130, + +0.0004578260870, +0.0002786956522, +0.0002256521739, +0.0004180434783, + +0.0007695652174, +0.0011543478261, +0.0014660869565, +0.0013865217391, + +0.0009221739130, +0.0003647826087, -0.0001060869565, -0.0002123913043, + +0.0000597826087, +0.0005041304348, +0.0010150000000, +0.0012339130435, + +0.0010217391304, +0.0006832608696, +0.0003250000000, -0.0000995652174, + -0.0003647826087, -0.0001658695652, +0.0003317391304, +0.0006767391304, + +0.0007097826087, +0.0003382608696, -0.0002786956522, -0.0007763043478, + -0.0009021739130, -0.0005241304348, +0.0000730434783, +0.0004710869565, + +0.0006832608696, +0.0008491304348, +0.0008691304348, +0.0006832608696, + +0.0003782608696, +0.0002719565217, +0.0004245652174, +0.0005839130435, + +0.0005971739130, +0.0004378260870, +0.0000000000000, -0.0004445652174, + -0.0007363043478, -0.0009021739130, -0.0007960869565, -0.0004445652174, + -0.0000597826087, +0.0003052173913, +0.0003647826087, +0.0000530434783, + -0.0004113043478, -0.0007695652174, -0.0007495652174, -0.0003847826087, + +0.0000067391304, +0.0002852173913, +0.0002056521739, -0.0002919565217, + -0.0007165217391, -0.0006634782609, -0.0000730434783, +0.0006302173913, + +0.0009486956522, +0.0006302173913, -0.0001658695652, -0.0008226086957, + -0.0006302173913, +0.0002586956522, +0.0012671739130, +0.0016850000000, + +0.0011210869565, -0.0000265217391, -0.0011278260870, -0.0018178260870, + -0.0016917391304, -0.0008491304348, +0.0001260869565, +0.0008160869565, + +0.0009486956522, +0.0006369565217, +0.0001458695652, -0.0004643478261, + -0.0009884782609, -0.0010813043478, -0.0006634782609, -0.0001393478261, + -0.0000928260870, -0.0001923913043, +0.0000000000000, +0.0000730434783, + +0.0000200000000, +0.0001193478261, +0.0002852173913, +0.0002919565217, + -0.0001128260870, -0.0006900000000, -0.0008028260870, -0.0002454347826, + +0.0005306521739, +0.0008756521739, +0.0005971739130, +0.0000265217391, + -0.0004976086957, -0.0006832608696, -0.0004180434783, +0.0000132608696, + +0.0002056521739, -0.0000332608696, -0.0005839130435, -0.0010747826087, + -0.0012273913043, -0.0009619565217, -0.0005108695652, -0.0002389130435, + -0.0001723913043, -0.0000928260870, +0.0000000000000, -0.0000863043478, + -0.0002256521739, -0.0000863043478, +0.0004578260870, +0.0010680434783, + +0.0010945652174, +0.0005041304348, -0.0000332608696, +0.0000132608696, + +0.0003980434783, +0.0004843478261, +0.0001526086957, -0.0002189130435, + -0.0004776086957, -0.0006567391304, -0.0006502173913, -0.0001791304348, + +0.0006965217391, +0.0015126086957, +0.0017382608696, +0.0013134782609, + +0.0006369565217, +0.0000530434783, -0.0002256521739, -0.0000200000000, + +0.0005439130435, +0.0009619565217, +0.0008160869565, +0.0001193478261, + -0.0005771739130, -0.0007495652174, -0.0003715217391, +0.0000928260870, + +0.0003317391304, +0.0004643478261, +0.0008093478261, +0.0013202173913, + +0.0016121739130, +0.0015258695652, +0.0011145652174, +0.0004313043478, + -0.0002852173913, -0.0006900000000, -0.0005839130435, -0.0000530434783, + +0.0005373913043, +0.0008358695652, +0.0007630434783, +0.0005506521739, + +0.0004908695652, +0.0006502173913, +0.0006767391304, +0.0003980434783, + +0.0000663043478, +0.0000132608696, +0.0002919565217, +0.0006036956522, + +0.0007363043478, +0.0007828260870, +0.0006567391304, +0.0003184782609, + +0.0000530434783, -0.0001393478261, -0.0003382608696, -0.0003382608696, + +0.0000132608696, +0.0005904347826, +0.0010547826087, +0.0011941304348, + +0.0010150000000, +0.0006832608696, +0.0003382608696, +0.0000663043478, + +0.0000200000000, +0.0001591304348, +0.0002321739130, +0.0003184782609, + +0.0005306521739, +0.0006965217391, +0.0006567391304, +0.0005839130435, + +0.0007097826087, +0.0008623913043, +0.0008623913043, +0.0007097826087, + +0.0004245652174, +0.0000928260870, -0.0002056521739, -0.0002719565217, + -0.0000465217391, +0.0001658695652, +0.0002321739130, +0.0000928260870, + -0.0000663043478, -0.0000730434783, -0.0000995652174, -0.0000200000000, + +0.0003382608696, +0.0007165217391, +0.0008558695652, +0.0006965217391, + +0.0004047826087, +0.0001591304348, -0.0000863043478, -0.0002123913043, + -0.0000597826087, +0.0001991304348, +0.0003317391304, +0.0002654347826, + +0.0001393478261, +0.0000332608696, -0.0001526086957, -0.0003450000000, + -0.0003847826087, -0.0002786956522, -0.0002056521739, -0.0001658695652, + -0.0001723913043, -0.0001923913043, -0.0000863043478, +0.0000332608696, + +0.0000132608696, -0.0000265217391, -0.0001526086957, -0.0003647826087, + -0.0004843478261, -0.0004510869565, -0.0002454347826, -0.0000132608696, + +0.0001526086957, +0.0002321739130, +0.0000995652174, -0.0001128260870, + -0.0002521739130, -0.0003582608696, -0.0003382608696, -0.0002189130435, + -0.0001393478261, -0.0000730434783, -0.0000928260870, -0.0002586956522, + -0.0004843478261, -0.0005971739130, -0.0004908695652, -0.0002454347826, + +0.0000465217391, +0.0002654347826, +0.0002123913043, -0.0000597826087, + -0.0002852173913, -0.0003382608696, -0.0003382608696, -0.0003117391304, + -0.0001791304348, -0.0000863043478, -0.0001260869565, -0.0001393478261, + -0.0000663043478, +0.0000200000000, +0.0000067391304, -0.0001060869565, + -0.0002189130435, -0.0003250000000, -0.0004578260870, -0.0005173913043, + -0.0004180434783, -0.0002189130435, -0.0000465217391, +0.0000132608696, + -0.0001260869565, -0.0004313043478, -0.0006965217391, -0.0007097826087, + -0.0004445652174, -0.0000465217391, +0.0002852173913, +0.0004378260870, + +0.0003782608696, +0.0002189130435, +0.0000397826087, -0.0001591304348, + -0.0002984782609, -0.0004643478261, -0.0007430434783, -0.0008823913043, + -0.0007165217391, -0.0002984782609, +0.0002189130435, +0.0005241304348, + +0.0004976086957, +0.0001591304348, -0.0004445652174, -0.0009286956522, + -0.0009952173913, -0.0006302173913, -0.0000332608696, +0.0004180434783, + +0.0004245652174, +0.0001193478261, -0.0001791304348, -0.0002786956522, + -0.0001856521739, -0.0000995652174, -0.0000928260870, -0.0002786956522, + -0.0007563043478, -0.0010747826087, -0.0009021739130, -0.0004710869565, + +0.0000000000000, +0.0002984782609, +0.0001723913043, -0.0001658695652, + -0.0005639130435, -0.0008293478261, -0.0007430434783, -0.0005241304348, + -0.0002984782609, -0.0001458695652, -0.0001991304348, -0.0002189130435, + -0.0001060869565, -0.0000530434783, -0.0001658695652, -0.0004908695652, + -0.0007563043478, -0.0007695652174, -0.0007165217391, -0.0005904347826, + -0.0003847826087, -0.0001856521739, -0.0000265217391, +0.0000465217391, + +0.0001060869565, +0.0001856521739, +0.0000067391304, -0.0004445652174, + -0.0008491304348, -0.0009089130435, -0.0006767391304, -0.0003715217391, + -0.0001060869565, -0.0000067391304, -0.0000928260870, -0.0002984782609, + -0.0005706521739, -0.0007297826087, -0.0006036956522, -0.0002654347826, + +0.0000730434783, +0.0001526086957, -0.0000995652174, -0.0004776086957, + -0.0007363043478, -0.0007363043478, -0.0005506521739, -0.0003184782609, + -0.0001526086957, -0.0002123913043, -0.0004578260870, -0.0007430434783, + -0.0008491304348, -0.0006236956522, -0.0001658695652, +0.0001991304348, + +0.0002586956522, +0.0000597826087, -0.0001856521739, -0.0004378260870, + -0.0004843478261, -0.0002919565217, -0.0000730434783, +0.0000000000000, + -0.0001326086957, -0.0003515217391, -0.0004976086957, -0.0004976086957, + -0.0004378260870, -0.0004710869565, -0.0005571739130, -0.0006104347826, + -0.0005771739130, -0.0003184782609, +0.0000332608696, +0.0001723913043, + +0.0001060869565, -0.0000200000000, -0.0002521739130, -0.0005439130435, + -0.0007563043478, -0.0007230434783, -0.0003647826087, +0.0000265217391, + +0.0001193478261, -0.0000530434783, -0.0003515217391, -0.0006302173913, + -0.0007165217391, -0.0005971739130, -0.0002984782609, +0.0000597826087, + +0.0002389130435, +0.0002123913043, +0.0001060869565, -0.0000132608696, + -0.0001260869565, -0.0002454347826, -0.0004113043478, -0.0004776086957, + -0.0003915217391, -0.0001791304348, +0.0000067391304, +0.0000928260870, + +0.0000265217391, -0.0001591304348, -0.0003317391304, -0.0003647826087, + -0.0002786956522, -0.0000995652174, +0.0000597826087, +0.0001658695652, + +0.0001856521739, -0.0000067391304, -0.0002919565217, -0.0004776086957, + -0.0005706521739, -0.0004510869565, -0.0001526086957, +0.0001193478261, + +0.0001791304348, -0.0000397826087, -0.0003515217391, -0.0005639130435, + -0.0005706521739, -0.0002586956522, +0.0001856521739, +0.0004245652174, + +0.0003515217391, +0.0000928260870, -0.0002321739130, -0.0004445652174, + -0.0003382608696, +0.0000000000000, +0.0002984782609, +0.0003382608696, + +0.0001128260870, -0.0001526086957, -0.0003052173913, -0.0003052173913, + -0.0001723913043, -0.0000332608696, +0.0000132608696, -0.0000200000000, + -0.0001393478261, -0.0002056521739, -0.0001458695652, -0.0000465217391, + +0.0000332608696, +0.0000465217391, -0.0001060869565, -0.0003250000000, + -0.0003915217391, -0.0003250000000, -0.0001856521739, +0.0000132608696, + +0.0002654347826, +0.0004578260870, +0.0004908695652, +0.0003782608696, + +0.0003317391304, +0.0003647826087, +0.0003915217391, +0.0003847826087, + +0.0002654347826, +0.0000132608696, -0.0002389130435, -0.0003980434783, + -0.0003715217391, -0.0002521739130, -0.0001856521739, -0.0001393478261, + -0.0000530434783, -0.0000397826087, -0.0001193478261, -0.0001923913043, + -0.0002123913043, -0.0002056521739, -0.0001923913043, -0.0001658695652, + -0.0000730434783, +0.0000132608696, +0.0000067391304, -0.0000332608696, + -0.0000663043478, -0.0001128260870, -0.0000928260870, -0.0000132608696, + +0.0000397826087, +0.0000465217391, -0.0000465217391, -0.0001856521739, + -0.0002123913043, -0.0001060869565, +0.0000730434783, +0.0002123913043, + +0.0002389130435, +0.0001526086957, -0.0000530434783, -0.0002719565217, + -0.0002586956522, -0.0000863043478, +0.0000465217391, +0.0000928260870, + -0.0000132608696, -0.0001658695652, -0.0002454347826, -0.0002321739130, + -0.0000332608696, +0.0003052173913, +0.0005373913043, +0.0005173913043, + +0.0002984782609, +0.0000597826087, -0.0000730434783, -0.0001658695652, + -0.0001723913043, -0.0000200000000, +0.0000995652174, +0.0001326086957, + +0.0001923913043, +0.0002719565217, +0.0002719565217, +0.0002189130435, + +0.0002123913043, +0.0002256521739, +0.0001393478261, +0.0000332608696, + +0.0000000000000, -0.0000265217391, -0.0000067391304, +0.0000332608696, + +0.0000597826087, +0.0000597826087, +0.0000795652174, +0.0001923913043, + +0.0002786956522, +0.0002521739130, +0.0002454347826, +0.0002256521739, + +0.0001723913043, +0.0001326086957, +0.0001060869565, +0.0001393478261, + +0.0001991304348, +0.0001723913043, +0.0001658695652, +0.0002123913043, + +0.0002586956522, +0.0003250000000, +0.0003847826087, +0.0003915217391, + +0.0003382608696, +0.0002123913043, +0.0001591304348, +0.0002189130435, + +0.0002586956522, +0.0003184782609, +0.0003915217391, +0.0003052173913, + +0.0000863043478, -0.0000200000000, +0.0000265217391, +0.0001526086957, + +0.0002321739130, +0.0002256521739, +0.0001393478261, +0.0000397826087, + +0.0000000000000, +0.0000995652174, +0.0002521739130, +0.0003450000000, + +0.0003847826087, +0.0002852173913, +0.0000597826087, -0.0000663043478, + -0.0000863043478, -0.0000730434783, +0.0000332608696, +0.0001723913043, + +0.0002586956522, +0.0003052173913, +0.0003847826087, +0.0004378260870, + +0.0003847826087, +0.0002389130435, +0.0001128260870, +0.0000265217391, + +0.0000000000000, +0.0000863043478, +0.0001991304348, +0.0002321739130, + +0.0001458695652, -0.0000730434783, -0.0003250000000, -0.0003582608696, + -0.0001723913043, +0.0000663043478, +0.0003184782609, +0.0004908695652, + +0.0005506521739, +0.0005839130435, +0.0005639130435, +0.0004445652174, + +0.0002521739130, +0.0000000000000, -0.0002786956522, -0.0003980434783, + -0.0003184782609, -0.0000995652174, +0.0001193478261, +0.0002786956522, + +0.0004180434783, +0.0005241304348, +0.0005706521739, +0.0005971739130, + +0.0005506521739, +0.0003980434783, +0.0001923913043, -0.0000465217391, + -0.0002389130435, -0.0002919565217, -0.0002321739130, -0.0000530434783, + +0.0001526086957, +0.0002984782609, +0.0004113043478, +0.0004378260870, + +0.0003052173913, +0.0002189130435, +0.0002719565217, +0.0003647826087, + +0.0004578260870, +0.0004578260870, +0.0003052173913, +0.0000663043478, + -0.0001060869565, -0.0001128260870, +0.0000000000000, +0.0001723913043, + +0.0003052173913, +0.0002852173913, +0.0001856521739, +0.0001393478261, + +0.0001526086957, +0.0001458695652, +0.0000928260870, +0.0000597826087, + +0.0000265217391, -0.0000530434783, -0.0001060869565, -0.0000795652174, + +0.0000000000000, +0.0000995652174, +0.0000795652174, -0.0000863043478, + -0.0002786956522, -0.0003782608696, -0.0002654347826, +0.0000530434783, + +0.0004047826087, +0.0007032608696, +0.0008491304348, +0.0006900000000, + +0.0002123913043, -0.0003715217391, -0.0007430434783, -0.0006965217391, + -0.0003184782609, +0.0001260869565, +0.0004445652174, +0.0005706521739, + +0.0004908695652, +0.0002521739130, +0.0000397826087, +0.0000465217391, + +0.0001326086957, +0.0000995652174, +0.0000397826087, +0.0000730434783, + +0.0001458695652, +0.0002786956522, +0.0003847826087, +0.0003847826087, + +0.0003715217391, +0.0003184782609, +0.0001393478261, -0.0000397826087, + -0.0001193478261, -0.0000265217391, +0.0001723913043, +0.0003052173913, + +0.0002719565217, +0.0001326086957, +0.0000530434783, +0.0000795652174, + +0.0001128260870, +0.0000863043478, +0.0000928260870, +0.0002056521739, + +0.0003382608696, +0.0004047826087, +0.0004445652174, +0.0004510869565, + +0.0004313043478, +0.0004047826087, +0.0003117391304, +0.0001723913043, + +0.0000265217391, -0.0001326086957, -0.0002123913043, -0.0001723913043, + +0.0000132608696, +0.0003317391304, +0.0005771739130, +0.0006434782609, + +0.0005706521739, +0.0003715217391, +0.0001458695652, -0.0000332608696, + -0.0001856521739, -0.0002389130435, -0.0001856521739, -0.0000730434783, + +0.0001060869565, +0.0003515217391, +0.0005173913043, +0.0005173913043, + +0.0003515217391, +0.0001128260870, -0.0001458695652, -0.0003782608696, + -0.0004710869565, -0.0003515217391, -0.0001193478261, +0.0001326086957, + +0.0003382608696, +0.0004313043478, +0.0003450000000, +0.0001458695652, + +0.0000000000000, -0.0000332608696, -0.0000530434783, -0.0000730434783, + -0.0000928260870, -0.0000332608696, +0.0001458695652, +0.0002984782609, + +0.0002852173913, +0.0001591304348, +0.0000000000000, -0.0001658695652, + -0.0002786956522, -0.0002123913043, +0.0000000000000, +0.0001658695652, + +0.0003117391304, +0.0003782608696, +0.0002521739130, +0.0000132608696, + -0.0000995652174, +0.0000067391304, +0.0001923913043, +0.0002389130435, + +0.0001060869565, -0.0000795652174, -0.0002256521739, -0.0002056521739, + -0.0000132608696, +0.0001791304348, +0.0002586956522, +0.0001991304348, + +0.0000663043478, -0.0000132608696, -0.0000200000000, +0.0000200000000, + +0.0000928260870, +0.0001260869565, +0.0000863043478, +0.0000795652174, + +0.0001326086957, +0.0001591304348, +0.0000863043478, -0.0000465217391, + -0.0001458695652, -0.0001591304348, -0.0001260869565, -0.0000663043478, + +0.0000132608696, +0.0000795652174, +0.0001393478261, +0.0002256521739, + +0.0003184782609, +0.0003382608696, +0.0002521739130, +0.0001060869565, + +0.0000000000000, -0.0000730434783, -0.0001393478261, -0.0001591304348, + -0.0000928260870, +0.0000265217391, +0.0001856521739, +0.0003184782609, + +0.0003847826087, +0.0003782608696, +0.0002786956522, +0.0001193478261, + -0.0001260869565, -0.0003515217391, -0.0004180434783, -0.0003450000000, + -0.0001856521739, -0.0000132608696, +0.0000465217391, +0.0000465217391, + +0.0000000000000, -0.0001128260870, -0.0001991304348, -0.0001856521739, + -0.0000663043478, +0.0000863043478, +0.0001723913043, +0.0002189130435, + +0.0002123913043, +0.0000863043478, -0.0001128260870, -0.0002852173913, + -0.0003450000000, -0.0002654347826, -0.0001723913043, -0.0001128260870, + -0.0000465217391, +0.0000132608696, +0.0000663043478, +0.0001128260870, + +0.0000863043478, -0.0000332608696, -0.0001923913043, -0.0003647826087, + -0.0004710869565, -0.0004510869565, -0.0003052173913, -0.0000530434783, + +0.0001723913043, +0.0002454347826, +0.0002389130435, +0.0001658695652, + -0.0000067391304, -0.0002389130435, -0.0004245652174, -0.0005108695652, + -0.0004445652174, -0.0002521739130, -0.0000265217391, +0.0000995652174, + +0.0000332608696, -0.0001128260870, -0.0002586956522, -0.0003582608696, + -0.0003184782609, -0.0001723913043, -0.0000200000000, +0.0000663043478, + +0.0000397826087, -0.0000200000000, -0.0000397826087, -0.0000332608696, + -0.0000200000000, -0.0000928260870, -0.0002586956522, -0.0003915217391, + -0.0004245652174, -0.0003317391304, -0.0000928260870, +0.0001658695652, + +0.0002984782609, +0.0002189130435, -0.0000730434783, -0.0003847826087, + -0.0004643478261, -0.0003117391304, -0.0000928260870, +0.0000200000000, + +0.0000000000000, -0.0000795652174, -0.0001326086957, -0.0001856521739, + -0.0002256521739, -0.0002056521739, -0.0001591304348, -0.0001923913043, + -0.0002786956522, -0.0002919565217, -0.0001923913043, -0.0000597826087, + +0.0000200000000, +0.0000795652174, +0.0000597826087, -0.0000730434783, + -0.0002256521739, -0.0002786956522, -0.0002719565217, -0.0002654347826, + -0.0002321739130, -0.0001458695652, -0.0000730434783, -0.0000863043478, + -0.0001591304348, -0.0001923913043, -0.0001856521739, -0.0001326086957, + -0.0000530434783, +0.0000067391304, +0.0000397826087, +0.0000465217391, + +0.0000132608696, -0.0000928260870, -0.0002189130435, -0.0003184782609, + -0.0003715217391, -0.0003184782609, -0.0001723913043, +0.0000000000000, + +0.0000795652174, +0.0000332608696, -0.0000730434783, -0.0001658695652, + -0.0001923913043, -0.0001723913043, -0.0001591304348, -0.0001393478261, + -0.0000730434783, -0.0000265217391, -0.0000663043478, -0.0001591304348, + -0.0002056521739, -0.0001526086957, -0.0000663043478, -0.0000332608696, + -0.0000265217391, +0.0000000000000, +0.0000265217391, +0.0000397826087, + +0.0000465217391, +0.0000397826087, +0.0000332608696, +0.0000000000000, + -0.0000928260870, -0.0002321739130, -0.0003582608696, -0.0004180434783, + -0.0003515217391, -0.0001658695652, +0.0000265217391, +0.0001791304348, + +0.0002389130435, +0.0001326086957, -0.0000730434783, -0.0002321739130, + -0.0002454347826, -0.0001791304348, -0.0001260869565, -0.0001060869565, + -0.0001326086957, -0.0002056521739, -0.0002521739130, -0.0002389130435, + -0.0002056521739, -0.0001526086957, -0.0000795652174, +0.0000000000000, + +0.0000200000000, +0.0000265217391, +0.0000530434783, +0.0000795652174, + +0.0000265217391, -0.0001193478261, -0.0003117391304, -0.0004578260870, + -0.0005241304348, -0.0004776086957, -0.0003450000000, -0.0002321739130, + -0.0001526086957, -0.0000597826087, +0.0000200000000, +0.0000397826087, + -0.0000067391304, -0.0000597826087, -0.0000132608696, +0.0000597826087, + +0.0000663043478, +0.0000132608696, -0.0000530434783, -0.0000530434783, + -0.0000200000000, -0.0000332608696, -0.0000465217391, -0.0000530434783, + -0.0000530434783, -0.0000597826087, -0.0001393478261, -0.0002454347826, + -0.0003117391304, -0.0002719565217, -0.0001393478261, -0.0000795652174, + -0.0001326086957, -0.0001991304348, -0.0002056521739, -0.0001193478261, + -0.0000132608696, +0.0001260869565, +0.0003250000000, +0.0003715217391, + +0.0002321739130, +0.0000265217391, -0.0001260869565, -0.0001923913043, + -0.0001458695652, -0.0000530434783, +0.0000000000000, -0.0000265217391, + -0.0000730434783, -0.0000663043478, -0.0000530434783, -0.0000530434783, + -0.0000597826087, -0.0000730434783, -0.0001326086957, -0.0001856521739, + -0.0001723913043, -0.0001393478261, -0.0000928260870, +0.0000000000000, + +0.0000663043478, +0.0001060869565, +0.0001458695652, +0.0001591304348, + +0.0001723913043, +0.0001526086957, +0.0000863043478, +0.0000265217391, + +0.0000000000000, +0.0000067391304, +0.0000067391304, -0.0000465217391, + -0.0001260869565, -0.0001326086957, -0.0000928260870, -0.0000397826087, + +0.0000000000000, +0.0000265217391, +0.0000530434783, +0.0000663043478, + +0.0000397826087, -0.0000132608696, -0.0000928260870, -0.0001658695652, + -0.0001658695652, -0.0000995652174, -0.0000332608696, +0.0000132608696, + +0.0000200000000, -0.0000067391304, -0.0000200000000, -0.0000200000000, + +0.0000000000000, +0.0000067391304, -0.0000332608696, -0.0001128260870, + -0.0001723913043, -0.0001458695652, -0.0000397826087, +0.0000795652174, + +0.0001393478261, +0.0001326086957, +0.0000795652174, +0.0000397826087, + +0.0000530434783, +0.0000663043478, +0.0000597826087, +0.0000530434783, + +0.0000200000000, +0.0000000000000, +0.0000132608696, +0.0000397826087, + +0.0000995652174, +0.0001393478261, +0.0000795652174, -0.0000332608696, + -0.0001260869565, -0.0001458695652, -0.0000863043478, +0.0000200000000, + +0.0001260869565, +0.0001591304348, +0.0000663043478, -0.0000265217391, + +0.0000000000000, +0.0001060869565, +0.0002256521739, +0.0003117391304, + +0.0003184782609, +0.0001991304348, +0.0000265217391, -0.0000995652174, + -0.0001658695652, -0.0002321739130, -0.0002321739130, -0.0001393478261, + +0.0000000000000, +0.0000795652174, +0.0001060869565, +0.0000995652174, + +0.0000730434783, +0.0000730434783, +0.0000863043478, +0.0001060869565, + +0.0001193478261, +0.0001326086957, +0.0001060869565, +0.0000332608696, + +0.0000000000000, -0.0000132608696, -0.0000795652174, -0.0001526086957, + -0.0001326086957, -0.0000597826087, +0.0000132608696, +0.0000795652174, + +0.0000795652174, +0.0000663043478, +0.0000530434783, +0.0000530434783, + +0.0000863043478, +0.0001260869565, +0.0001260869565, +0.0000995652174, + +0.0000928260870, +0.0000928260870, +0.0000332608696, -0.0000795652174, + -0.0001393478261, -0.0001326086957, -0.0000863043478, +0.0000000000000, + +0.0001060869565, +0.0001856521739, +0.0002189130435, +0.0001723913043, + +0.0000863043478, +0.0000597826087, +0.0001193478261, +0.0001458695652, + +0.0001326086957, +0.0001260869565, +0.0001260869565, +0.0000863043478, + +0.0000597826087, +0.0000928260870, +0.0001723913043, +0.0002256521739, + +0.0002321739130, +0.0001591304348, +0.0000530434783, +0.0000397826087, + +0.0001260869565, +0.0001791304348, +0.0000995652174, -0.0000795652174, + -0.0002256521739, -0.0002189130435, -0.0000663043478, +0.0001591304348, + +0.0003117391304, +0.0002654347826, +0.0000863043478, -0.0000397826087, + -0.0000597826087, +0.0000000000000, +0.0000397826087, +0.0000597826087, + +0.0000397826087, -0.0000265217391, -0.0001128260870, -0.0001458695652, + -0.0000928260870, +0.0000000000000, +0.0000597826087, +0.0000663043478, + +0.0000465217391, +0.0000397826087, +0.0000530434783, +0.0001060869565, + +0.0001658695652, +0.0001791304348, +0.0001526086957, +0.0001591304348, + +0.0002056521739, +0.0002321739130, +0.0001991304348, +0.0001326086957, + +0.0000265217391, -0.0000863043478, -0.0001526086957, -0.0000995652174, + +0.0000000000000, +0.0000863043478, +0.0000795652174, +0.0000200000000, + +0.0000000000000, +0.0000000000000, -0.0000332608696, -0.0001193478261, + -0.0002256521739, -0.0002719565217, -0.0001856521739, +0.0000000000000, + +0.0002123913043, +0.0003117391304, +0.0002719565217, +0.0001591304348, + +0.0000067391304, -0.0001128260870, -0.0001526086957, -0.0000928260870, + +0.0000332608696, +0.0001723913043, +0.0002389130435, +0.0002321739130, + +0.0001791304348, +0.0001193478261, +0.0000597826087, +0.0000000000000, + -0.0000863043478, -0.0001526086957, -0.0001526086957, -0.0000795652174, + +0.0000397826087, +0.0001658695652, +0.0002454347826, +0.0002586956522, + +0.0001923913043, +0.0000663043478, +0.0000000000000, +0.0000132608696, + +0.0000863043478, +0.0001393478261, +0.0001526086957, +0.0001193478261, + +0.0000530434783, -0.0000132608696, -0.0000067391304, +0.0000332608696, + +0.0000332608696, -0.0000067391304, -0.0000132608696, +0.0000265217391, + +0.0001526086957, +0.0002984782609, +0.0003782608696, +0.0003515217391, + +0.0002454347826, +0.0000663043478, -0.0001128260870, -0.0001856521739, + -0.0000928260870, +0.0000928260870, +0.0002389130435, +0.0002521739130, + +0.0001591304348, +0.0000397826087, -0.0000200000000, +0.0000000000000, + +0.0001128260870, +0.0002454347826, +0.0003250000000, +0.0002919565217, + +0.0001723913043, +0.0000000000000, -0.0001260869565, -0.0000863043478, + +0.0000597826087, +0.0002389130435, +0.0003515217391, +0.0003515217391, + +0.0003052173913, +0.0002389130435, +0.0001791304348, +0.0001723913043, + +0.0001856521739, +0.0001791304348, +0.0001193478261, +0.0000132608696, + -0.0000597826087, -0.0000730434783, -0.0000265217391, +0.0000530434783, + +0.0001326086957, +0.0001923913043, +0.0001658695652, +0.0000200000000, + -0.0001591304348, -0.0002454347826, -0.0001856521739, +0.0000200000000, + +0.0002654347826, +0.0004245652174, +0.0003980434783, +0.0002189130435, + +0.0000067391304, -0.0000928260870, -0.0000730434783, -0.0000067391304, + +0.0000067391304, +0.0000067391304, +0.0000332608696, +0.0000863043478, + +0.0001791304348, +0.0002719565217, +0.0002984782609, +0.0002123913043, + +0.0000597826087, -0.0000597826087, -0.0000928260870, -0.0000200000000, + +0.0000863043478, +0.0001458695652, +0.0000928260870, +0.0000000000000, + -0.0000663043478, -0.0000397826087, +0.0000397826087, +0.0001060869565, + +0.0001060869565, +0.0000332608696, -0.0000863043478, -0.0001591304348, + -0.0001193478261, +0.0000067391304, +0.0001326086957, +0.0001526086957, + +0.0000928260870, +0.0000132608696, -0.0000265217391, -0.0000067391304, + +0.0000332608696, +0.0000332608696, -0.0000265217391, -0.0001128260870, + -0.0001591304348, -0.0001326086957, -0.0000730434783, +0.0000000000000, + +0.0000863043478, +0.0001260869565, +0.0000597826087, -0.0000265217391, + -0.0000995652174, -0.0001458695652, -0.0001658695652, -0.0001856521739, + -0.0001991304348, -0.0001856521739, -0.0001260869565, -0.0000265217391, + +0.0000265217391, +0.0000265217391, +0.0000132608696, -0.0000067391304, + -0.0000200000000, -0.0000132608696, +0.0000000000000, +0.0000067391304, + -0.0000200000000, -0.0001193478261, -0.0002056521739, -0.0002389130435, + -0.0001856521739, -0.0000597826087, +0.0000265217391, +0.0000530434783, + +0.0000200000000, -0.0000332608696, -0.0000863043478, -0.0000863043478, + -0.0000397826087, +0.0000067391304, +0.0000200000000, +0.0000000000000, + -0.0000730434783, -0.0001458695652, -0.0001393478261, -0.0000795652174, + -0.0000132608696, +0.0000067391304, -0.0000332608696, -0.0001060869565, + -0.0001723913043, -0.0002123913043, -0.0002123913043, -0.0001856521739, + -0.0001393478261, -0.0000730434783, -0.0000200000000, +0.0000000000000, + -0.0000132608696, -0.0000332608696, -0.0000200000000, +0.0000000000000, + -0.0000265217391, -0.0000995652174, -0.0001658695652, -0.0001591304348, + -0.0000597826087, +0.0000597826087, +0.0001193478261, +0.0001128260870, + +0.0000597826087, -0.0000200000000, -0.0001060869565, -0.0001060869565, + +0.0000067391304, +0.0001060869565, +0.0000928260870, +0.0000000000000, + -0.0001326086957, -0.0001991304348, -0.0001591304348, -0.0000200000000, + +0.0001193478261, +0.0002389130435, +0.0002786956522, +0.0001991304348, + +0.0000465217391, -0.0000200000000, -0.0000132608696, +0.0000000000000, + +0.0000067391304, +0.0000265217391, +0.0000332608696, +0.0000132608696, + +0.0000200000000, +0.0000530434783, +0.0000730434783, +0.0000597826087, + +0.0000332608696, +0.0000067391304, +0.0000200000000, +0.0000730434783, + +0.0001658695652, +0.0002321739130, +0.0001723913043, +0.0000465217391, + -0.0000730434783, -0.0001393478261, -0.0000863043478, +0.0000200000000, + +0.0000465217391, -0.0000265217391, -0.0001591304348, -0.0002189130435, + -0.0001193478261, +0.0000465217391, +0.0002056521739, +0.0003052173913, + +0.0002719565217, +0.0001260869565, -0.0000332608696, -0.0001193478261, + -0.0000730434783, +0.0000200000000, +0.0000597826087, +0.0000200000000, + -0.0000530434783, -0.0000995652174, -0.0000730434783, -0.0000132608696, + +0.0000530434783, +0.0001128260870, +0.0001128260870, +0.0000530434783, + -0.0000200000000, -0.0000597826087, -0.0000265217391, +0.0000332608696, + +0.0000730434783, +0.0000995652174, +0.0001060869565, +0.0000465217391, + -0.0000597826087, -0.0001791304348, -0.0002189130435, -0.0001260869565, + +0.0000530434783, +0.0002321739130, +0.0002654347826, +0.0001458695652, + -0.0000200000000, -0.0001791304348, -0.0002586956522, -0.0001991304348, + -0.0000795652174, +0.0000132608696, +0.0000397826087, +0.0000067391304, + -0.0000465217391, -0.0000863043478, -0.0000995652174, -0.0000863043478, + -0.0000597826087, -0.0000332608696, -0.0000132608696, -0.0000265217391, + -0.0000332608696, -0.0000132608696, -0.0000067391304, -0.0000265217391, + -0.0000200000000, +0.0000067391304, +0.0000200000000, +0.0000265217391, + +0.0000200000000, +0.0000000000000, -0.0000597826087, -0.0001326086957, + -0.0001723913043, -0.0001591304348, -0.0000928260870, +0.0000000000000, + +0.0000995652174, +0.0001326086957, +0.0000730434783, -0.0000332608696, + -0.0001128260870, -0.0000928260870, -0.0000132608696, +0.0000265217391, + +0.0000465217391, +0.0000332608696, -0.0000132608696, -0.0000863043478, + -0.0001193478261, -0.0000995652174, -0.0000663043478, -0.0000530434783, + -0.0000530434783, -0.0000663043478, -0.0000928260870, -0.0000863043478, + -0.0000332608696, +0.0000132608696, +0.0000200000000, +0.0000000000000, + -0.0000465217391, -0.0000795652174, -0.0001060869565, -0.0001193478261, + -0.0001393478261, -0.0001393478261, -0.0000730434783, +0.0000000000000, + +0.0000265217391, +0.0000067391304, -0.0000465217391, -0.0001260869565, + -0.0001591304348, -0.0001260869565, -0.0000663043478, -0.0000200000000, + +0.0000067391304, +0.0000265217391, +0.0000067391304, -0.0000397826087, + -0.0000795652174, -0.0000995652174, -0.0000928260870, -0.0000663043478, + +0.0000067391304, +0.0001060869565, +0.0001526086957, +0.0001326086957, + +0.0000465217391, -0.0000465217391, -0.0001060869565, -0.0000863043478, + -0.0000465217391, -0.0000530434783, -0.0000995652174, -0.0001393478261, + -0.0001393478261, -0.0000928260870, -0.0000265217391, +0.0000265217391, + +0.0000067391304, -0.0000663043478, -0.0001458695652, -0.0001658695652, + -0.0001193478261, -0.0000332608696, +0.0000332608696, +0.0000530434783, + +0.0000265217391, -0.0000200000000, -0.0000663043478, -0.0000863043478, + -0.0000863043478, -0.0000795652174, -0.0000928260870, -0.0000995652174, + -0.0000795652174, +0.0000000000000, +0.0001128260870, +0.0001723913043, + +0.0001393478261, +0.0000597826087, -0.0000332608696, -0.0001260869565, + -0.0001591304348, -0.0001193478261, -0.0000332608696, +0.0000332608696, + +0.0000265217391, -0.0000132608696, -0.0000530434783, -0.0000597826087, + -0.0000200000000, +0.0000332608696, +0.0000663043478, +0.0000597826087, + -0.0000067391304, -0.0001128260870, -0.0001923913043, -0.0002056521739, + -0.0001393478261, -0.0000132608696, +0.0000928260870, +0.0001193478261, + +0.0000465217391, -0.0000597826087, -0.0001458695652, -0.0001723913043, + -0.0001260869565, -0.0000200000000, +0.0000795652174, +0.0001128260870, + +0.0000465217391, -0.0000597826087, -0.0001393478261, -0.0001393478261, + -0.0000863043478, -0.0000265217391, +0.0000397826087, +0.0000795652174, + +0.0000332608696, +0.0000000000000, -0.0000132608696, -0.0000200000000, + -0.0000132608696, -0.0000265217391, -0.0000597826087, -0.0001128260870, + -0.0001723913043, -0.0001658695652, -0.0000928260870, +0.0000000000000, + +0.0000730434783, +0.0001060869565, +0.0001128260870, +0.0000863043478, + +0.0000265217391, -0.0000597826087, -0.0001526086957, -0.0002256521739, + -0.0002454347826, -0.0001991304348, -0.0000863043478, +0.0000397826087, + +0.0001326086957, +0.0001260869565, +0.0000200000000, -0.0000730434783, + -0.0000663043478, +0.0000132608696, +0.0001193478261, +0.0001791304348, + +0.0001326086957, +0.0000132608696, -0.0001128260870, -0.0001856521739, + -0.0001591304348, -0.0000465217391, +0.0000795652174, +0.0001856521739, + +0.0002056521739, +0.0001591304348, +0.0000928260870, +0.0000397826087, + +0.0000067391304, -0.0000132608696, -0.0000132608696, -0.0000067391304, + -0.0000200000000, -0.0000397826087, -0.0000067391304, +0.0000795652174, + +0.0001791304348, +0.0002123913043, +0.0001060869565, -0.0000795652174, + -0.0002256521739, -0.0002454347826, -0.0001393478261, +0.0000200000000, + +0.0001393478261, +0.0001658695652, +0.0001260869565, +0.0000597826087, + +0.0000397826087, +0.0000795652174, +0.0001128260870, +0.0001060869565, + +0.0000465217391, -0.0000132608696, -0.0000265217391, +0.0000000000000, + +0.0000332608696, +0.0000597826087, +0.0000465217391, +0.0000067391304, + +0.0000000000000, +0.0000200000000, +0.0000397826087, +0.0000397826087, + +0.0000000000000, -0.0000397826087, -0.0000465217391, -0.0000332608696, + -0.0000067391304, +0.0000200000000, +0.0000067391304, -0.0000132608696, + -0.0000332608696, -0.0000200000000, +0.0000067391304, +0.0000265217391, + +0.0000200000000, +0.0000132608696, -0.0000067391304, -0.0000397826087, + -0.0000663043478, -0.0000663043478, +0.0000000000000, +0.0001128260870, + +0.0001923913043, +0.0001856521739, +0.0000863043478, -0.0000332608696, + -0.0001128260870, -0.0001393478261, -0.0000663043478, +0.0000663043478, + +0.0001723913043, +0.0001923913043, +0.0001260869565, +0.0000530434783, + +0.0000200000000, +0.0000132608696, +0.0000132608696, -0.0000200000000, + -0.0000995652174, -0.0001591304348, -0.0001658695652, -0.0001193478261, + -0.0000265217391, +0.0000730434783, +0.0001326086957, +0.0001393478261, + +0.0000995652174, +0.0000730434783, +0.0000795652174, +0.0000928260870, + +0.0000730434783, +0.0000332608696, -0.0000200000000, -0.0000863043478, + -0.0001060869565, -0.0000730434783, +0.0000132608696, +0.0001193478261, + +0.0001591304348, +0.0001458695652, +0.0000795652174, -0.0000332608696, + -0.0001260869565, -0.0001393478261, -0.0001060869565, -0.0000530434783, + +0.0000000000000, +0.0000663043478, +0.0001326086957, +0.0001393478261, + +0.0001128260870, +0.0001128260870, +0.0001326086957, +0.0001393478261, + +0.0001128260870, +0.0000530434783, +0.0000000000000, -0.0000067391304, + +0.0000000000000, +0.0000265217391, +0.0000663043478, +0.0000663043478, + +0.0000465217391, +0.0000200000000, +0.0000132608696, +0.0000332608696, + +0.0000597826087, +0.0000863043478, +0.0000795652174, +0.0000200000000, + -0.0000265217391, -0.0000132608696, +0.0000200000000, +0.0000465217391, + +0.0000663043478, +0.0000397826087, -0.0000397826087, -0.0001591304348, + -0.0002521739130, -0.0002521739130, -0.0001393478261, +0.0000397826087, + +0.0002321739130, +0.0003317391304, +0.0003117391304, +0.0002189130435, + +0.0000863043478, -0.0000397826087, -0.0001326086957, -0.0001326086957, + -0.0000795652174, +0.0000000000000, +0.0000663043478, +0.0001060869565, + +0.0001060869565, +0.0000730434783, +0.0000067391304, -0.0000465217391, + -0.0000597826087, -0.0000465217391, +0.0000000000000, +0.0000863043478, + +0.0001723913043, +0.0002123913043, +0.0001526086957, +0.0000530434783, + -0.0000200000000, -0.0000730434783, -0.0000795652174, -0.0000397826087, + +0.0000200000000, +0.0000995652174, +0.0001260869565, +0.0000863043478, + +0.0000265217391, -0.0000332608696, -0.0000730434783, -0.0000530434783, + +0.0000000000000, +0.0000597826087, +0.0000795652174, +0.0000663043478, + +0.0000332608696, +0.0000000000000, -0.0000132608696, -0.0000067391304, + +0.0000000000000, +0.0000265217391, +0.0000397826087, +0.0000332608696, + +0.0000132608696, +0.0000000000000, +0.0000000000000, +0.0000000000000, + +0.0000000000000 +}; diff --git a/plugins/LadspaEffect/swh/impulses/13-fender-superchamp-sm57-off.h b/plugins/LadspaEffect/swh/impulses/13-fender-superchamp-sm57-off.h new file mode 100644 index 000000000..96539f941 --- /dev/null +++ b/plugins/LadspaEffect/swh/impulses/13-fender-superchamp-sm57-off.h @@ -0,0 +1,676 @@ +float fender_superchamp_sm57_off[] = { + +0.0000000000000, +0.0000657422902, +0.0001240736314, +0.0000874970117, + -0.0000437485059, -0.0002041596940, -0.0002918957686, -0.0002699019842, + -0.0001458283529, +0.0000291656706, +0.0002115706431, +0.0003136504901, + +0.0003136504901, +0.0001895768587, +0.0000000000000, -0.0001824049725, + -0.0003064786039, -0.0003136504901, -0.0001969878078, -0.0000074109491, + +0.0001969878078, +0.0003428161607, +0.0003719818312, +0.0002773129333, + +0.0000874970117, -0.0001166626823, -0.0002918957686, -0.0003573989959, + -0.0002918957686, -0.0001094907961, +0.0001094907961, +0.0003136504901, + +0.0004305522352, +0.0004085584509, +0.0002773129333, +0.0000657422902, + -0.0001458283529, -0.0003064786039, -0.0003573989959, -0.0002844848195, + -0.0001240736314, +0.0000729141764, +0.0002553191489, +0.0003502271097, + +0.0003428161607, +0.0002335644274, +0.0000729141764, -0.0000874970117, + -0.0002041596940, -0.0002407363137, -0.0001824049725, -0.0000657422902, + +0.0000657422902, +0.0001824049725, +0.0002335644274, +0.0002189815922, + +0.0001532393019, +0.0000657422902, -0.0000145828353, -0.0000583313411, + -0.0000583313411, -0.0000291656706, +0.0000074109491, +0.0000511594549, + +0.0000803251255, +0.0000874970117, +0.0000874970117, +0.0000874970117, + +0.0000949079608, +0.0001020798470, +0.0001020798470, +0.0000874970117, + +0.0000437485059, -0.0000074109491, -0.0000583313411, -0.0000729141764, + -0.0000365766197, +0.0000437485059, +0.0001678221372, +0.0002844848195, + +0.0003428161607, +0.0003064786039, +0.0001749940234, -0.0000074109491, + -0.0001895768587, -0.0002990676548, -0.0002918957686, -0.0001386564667, + +0.0000874970117, +0.0003356442744, +0.0005034664117, +0.0005180492470, + +0.0003573989959, +0.0000657422902, -0.0002407363137, -0.0004743007411, + -0.0005326320822, -0.0003719818312, -0.0000437485059, +0.0003356442744, + +0.0006492947645, +0.0007587855606, +0.0006201290940, +0.0002627300980, + -0.0001895768587, -0.0005909634234, -0.0007879512312, -0.0007004542195, + -0.0003428161607, +0.0001678221372, +0.0006638775998, +0.0009703562037, + +0.0009849390390, +0.0006858713842, +0.0001678221372, -0.0003865646665, + -0.0008097059527, -0.0009483624193, -0.0007513746115, -0.0002844848195, + +0.0002918957686, +0.0008097059527, +0.0010798469998, +0.0010141047095, + +0.0006421228783, +0.0000803251255, -0.0004668897920, -0.0008391106861, + -0.0009046139135, -0.0006492947645, -0.0001604111881, +0.0003939756156, + +0.0008242887880, +0.0009995218743, +0.0008536935214, +0.0004523069567, + -0.0000657422902, -0.0005398039684, -0.0007951231174, -0.0007659574468, + -0.0004597179058, +0.0000000000000, +0.0004743007411, +0.0007951231174, + +0.0008608654076, +0.0006567057136, +0.0002553191489, -0.0002041596940, + -0.0005835524743, -0.0007587855606, -0.0006784604351, -0.0003719818312, + +0.0000511594549, +0.0004597179058, +0.0007296198900, +0.0007879512312, + +0.0006275400430, +0.0003064786039, -0.0000657422902, -0.0003939756156, + -0.0005835524743, -0.0005835524743, -0.0004159694000, -0.0001166626823, + +0.0002115706431, +0.0004960554626, +0.0006638775998, +0.0006712885489, + +0.0005180492470, +0.0002407363137, -0.0000803251255, -0.0003719818312, + -0.0005617977528, -0.0005763805881, -0.0004159694000, -0.0001094907961, + +0.0002627300980, +0.0006127181449, +0.0008242887880, +0.0008242887880, + +0.0006055462587, +0.0002115706431, -0.0002481472627, -0.0006421228783, + -0.0008391106861, -0.0007733683959, -0.0004305522352, +0.0000874970117, + +0.0006421228783, +0.0010358594310, +0.0011307673918, +0.0008682763567, + +0.0002918957686, -0.0004085584509, -0.0010212765957, -0.0013205833134, + -0.0011745158977, -0.0005981353096, +0.0002189815922, +0.0010358594310, + +0.0015467367918, +0.0015830743486, +0.0010798469998, +0.0001969878078, + -0.0007733683959, -0.0015321539565, -0.0017946449916, -0.0014444178819, + -0.0005689696390, +0.0005398039684, +0.0015393258427, +0.0020719579249, + +0.0019187186230, +0.0011161845565, -0.0000949079608, -0.0013131723643, + -0.0021157064308, -0.0022032034425, -0.0015175711212, -0.0002699019842, + +0.0011090126703, +0.0021522830504, +0.0024731054267, +0.0019478842936, + +0.0007222089410, -0.0007733683959, -0.0020353813053, -0.0026337556777, + -0.0023346880230, -0.0012548410232, +0.0002553191489, +0.0016853932584, + +0.0025608415013, +0.0025825962228, +0.0017437245996, +0.0003210614392, + -0.0012110925173, -0.0023564427444, -0.0027504183600, -0.0022615347836, + -0.0010578532154, +0.0004305522352, +0.0017291417643, +0.0024001912503, + +0.0022397800622, +0.0013277551996, +0.0000000000000, -0.0012914176428, + -0.0021231173799, -0.0022469519484, -0.0016633994741, -0.0005909634234, + +0.0005835524743, +0.0014809945016, +0.0018238106622, +0.0015321539565, + +0.0007222089410, -0.0003064786039, -0.0012328472388, -0.0017583074349, + -0.0017437245996, -0.0011890987330, -0.0002918957686, +0.0006638775998, + +0.0014006693760, +0.0016708104231, +0.0014006693760, +0.0006858713842, + -0.0002481472627, -0.0011235955056, -0.0016925651446, -0.0018020559407, + -0.0014518288310, -0.0007805402821, +0.0000145828353, +0.0007222089410, + +0.0011890987330, +0.0013205833134, +0.0011307673918, +0.0006492947645, + +0.0000074109491, -0.0006858713842, -0.0012694238585, -0.0016342338035, + -0.0016196509682, -0.0012402581879, -0.0005252211332, +0.0003865646665, + +0.0009337795840, +0.0015976571838, +0.0014080803251, +0.0004743007411, + -0.0003719818312, -0.0011161845565, -0.0017874731054, -0.0021157064308, + -0.0019333014583, -0.0011965096820, -0.0002041596940, +0.0006201290940, + +0.0009629452546, +0.0004451350705, -0.0007076261057, -0.0023638536935, + -0.0038448481951, -0.0047786277791, -0.0047274683242, -0.0037499402343, + -0.0021377002152, -0.0005981353096, +0.0001458283529, -0.0004085584509, + -0.0021522830504, -0.0053695912025, -0.0061647143199, -0.0108995935931, + -0.0199244561320, -0.0062450394454, +0.0215075304805, +0.0279567296199, + -0.0194135787712, -0.1062459956969, -0.1249813530959, -0.0293210614392, + +0.0840016734401, +0.1751386564667, +0.2390482907005, +0.2214219459718, + +0.1214501553909, -0.0119136983027, -0.1176930432704, -0.1462553191489, + -0.1090621563471, -0.0459113076739, +0.0017071479799, +0.0067922543629, + -0.0007805402821, +0.0085868993545, +0.0275847477887, +0.0442699019842, + +0.0460133875209, +0.0215804446569, -0.0114979679656, -0.0345957446809, + -0.0343841740378, -0.0125484102319, +0.0092216112838, +0.0175094429835, + +0.0124754960555, -0.0068651685393, -0.0206538369591, -0.0117750418360, + -0.0023638536935, -0.0031006454698, -0.0048735357399, -0.0052309347358, + -0.0034872101363, +0.0066827635668, +0.0165902462348, +0.0116729619890, + -0.0040781735596, -0.0182756394932, -0.0250313172364, -0.0251479799187, + -0.0206758307435, -0.0131247908200, -0.0026191728425, +0.0038811857519, + +0.0033193879990, -0.0031955534306, -0.0107317714559, -0.0146569447765, + -0.0195158976811, -0.0236158259622, -0.0183923021755, -0.0017508964858, + +0.0140368156825, +0.0181879034186, +0.0127673918240, +0.0069234998805, + +0.0020719579249, +0.0000291656706, +0.0030203203443, +0.0068360028688, + +0.0054790819986, -0.0043409036577, -0.0183777193402, -0.0289782452785, + -0.0299923499880, -0.0216899354530, -0.0105933540521, -0.0025388477169, + +0.0041876643557, +0.0079813530959, +0.0069600765001, +0.0031152283050, + -0.0023638536935, -0.0062961989003, -0.0077989481234, -0.0082295003586, + -0.0085943103036, -0.0100241453502, -0.0092799426249, -0.0027066698542, + +0.0033779584031, +0.0048589529046, +0.0029548171169, -0.0025608415013, + -0.0073832177863, -0.0107901027970, -0.0131322017691, -0.0108778388716, + -0.0060846282572, -0.0013860865408, +0.0037133636146, +0.0057999043749, + +0.0032684676070, -0.0018166387760, -0.0072079847000, -0.0113227348793, + -0.0148611044705, -0.0170425531915, -0.0143287114511, -0.0060554625867, + +0.0043263208224, +0.0121910112360, +0.0147736074588, +0.0122201769065, + +0.0050267750418, -0.0044867320105, -0.0116875448243, -0.0157219698781, + -0.0164370069328, -0.0129278030122, -0.0065369352140, +0.0011307673918, + +0.0080396844370, +0.0120086062634, +0.0115562993067, +0.0065661008845, + +0.0005180492470, -0.0028087497012, -0.0026555103992, +0.0001749940234, + +0.0050922782692, +0.0098491513268, +0.0115562993067, +0.0089954578054, + +0.0046108056419, -0.0004085584509, -0.0045378914655, -0.0059313889553, + -0.0061063829787, -0.0062742051159, -0.0060626344729, -0.0054644991633, + -0.0040927563949, -0.0029693999522, -0.0022689457327, -0.0005543868037, + +0.0010212765957, +0.0015175711212, +0.0007951231174, -0.0006347119292, + -0.0011090126703, -0.0012768348076, -0.0019916327994, -0.0008828591920, + +0.0008900310782, +0.0015759024623, +0.0020719579249, +0.0022543628974, + +0.0017437245996, +0.0013060004781, +0.0015393258427, +0.0034508725795, + +0.0063908677982, +0.0082732488645, +0.0081274205116, +0.0071788190294, + +0.0065878556060, +0.0057635668181, +0.0035092039206, -0.0000511594549, + -0.0036332775520, -0.0057489839828, -0.0054716710495, -0.0025608415013, + +0.0007076261057, +0.0029619890031, +0.0057344011475, +0.0082220894095, + +0.0090903657662, +0.0097616543151, +0.0108778388716, +0.0117824527851, + +0.0114688022950, +0.0089005498446, +0.0054133397083, +0.0021231173799, + +0.0005763805881, +0.0022981114033, +0.0055300023906, +0.0075802055941, + +0.0074195553431, +0.0051580205594, +0.0034726273010, +0.0033633755678, + +0.0034434616304, +0.0041219220655, +0.0045670571360, +0.0034946210853, + +0.0022323691131, +0.0010432703801, +0.0000949079608, +0.0003136504901, + +0.0008171169017, +0.0013423380349, +0.0023272770739, +0.0030203203443, + +0.0034580444657, +0.0037936887401, +0.0034726273010, +0.0026920870189, + +0.0025971790581, +0.0043263208224, +0.0063908677982, +0.0066610088453, + +0.0053987568731, +0.0042825723165, +0.0035749462109, +0.0022761176189, + -0.0003136504901, -0.0026409275639, -0.0030203203443, -0.0012182644035, + +0.0021522830504, +0.0063545302415, +0.0096155868994, +0.0099949796797, + +0.0065369352140, +0.0009120248625, -0.0033122161128, -0.0043409036577, + -0.0017654793211, +0.0030640688501, +0.0070109968922, +0.0083024145350, + +0.0065149414296, +0.0024367678699, -0.0008462825723, -0.0025754243366, + -0.0036696151088, -0.0033267989481, -0.0017217308152, +0.0001678221372, + +0.0019916327994, +0.0036478603873, +0.0053695912025, +0.0062670332297, + +0.0053184317475, +0.0038010996892, +0.0023638536935, +0.0009120248625, + +0.0002773129333, +0.0004743007411, +0.0002041596940, -0.0011307673918, + -0.0029619890031, -0.0041876643557, -0.0038010996892, -0.0018969639015, + +0.0002844848195, +0.0016414056897, +0.0017145589290, +0.0010578532154, + +0.0009775280899, +0.0009703562037, +0.0006784604351, -0.0001094907961, + -0.0014809945016, -0.0022106143916, -0.0022909395171, -0.0022543628974, + -0.0019552952426, -0.0018458044466, -0.0015976571838, -0.0009775280899, + -0.0003939756156, +0.0002189815922, +0.0002918957686, +0.0000000000000, + -0.0001532393019, -0.0002407363137, -0.0002627300980, -0.0004814726273, + -0.0010798469998, -0.0015904852976, -0.0020282094191, -0.0020793688740, + -0.0013569208702, -0.0001969878078, +0.0006347119292, +0.0006201290940, + -0.0001240736314, -0.0007879512312, -0.0012036815683, -0.0015613196271, + -0.0017728902701, -0.0020719579249, -0.0023710255797, -0.0019333014583, + -0.0010944298350, -0.0002773129333, +0.0002627300980, -0.0000145828353, + -0.0005689696390, -0.0003648099450, +0.0004011475018, +0.0010578532154, + +0.0005617977528, -0.0009557733684, -0.0025680133875, -0.0036770260579, + -0.0035237867559, -0.0023272770739, -0.0009849390390, +0.0001094907961, + +0.0008536935214, +0.0013934974898, +0.0010724360507, -0.0009411905331, + -0.0036041118814, -0.0058438919436, -0.0072008128138, -0.0072517332058, + -0.0055591680612, -0.0021886206072, +0.0014664116663, +0.0036770260579, + +0.0038156825245, +0.0024585225914, +0.0005034664117, -0.0015684915133, + -0.0030568969639, -0.0037865168539, -0.0037865168539, -0.0030423141286, + -0.0022397800622, -0.0014664116663, -0.0006421228783, -0.0006712885489, + -0.0014518288310, -0.0022251972269, -0.0027358355247, -0.0025316758307, + -0.0015321539565, -0.0002773129333, +0.0007659574468, +0.0011890987330, + +0.0010432703801, +0.0008171169017, +0.0005398039684, +0.0001312455176, + -0.0000511594549, +0.0000074109491, +0.0000729141764, -0.0000657422902, + -0.0006055462587, -0.0012182644035, -0.0010798469998, -0.0001969878078, + +0.0009483624193, +0.0021740377719, +0.0027286636385, +0.0021740377719, + +0.0010798469998, +0.0000219937844, -0.0005617977528, -0.0006784604351, + -0.0010358594310, -0.0016853932584, -0.0023856084150, -0.0028670810423, + -0.0026775041836, -0.0020136265838, -0.0013715037055, -0.0006127181449, + +0.0004305522352, +0.0018603872819, +0.0028161606503, +0.0028379153717, + +0.0022543628974, +0.0010944298350, -0.0002041596940, -0.0006930432704, + -0.0002918957686, +0.0007150370547, +0.0017800621563, +0.0021231173799, + +0.0017363136505, +0.0007513746115, -0.0005034664117, -0.0014152522113, + -0.0013497489840, -0.0004305522352, +0.0003793927803, +0.0006201290940, + +0.0007442027253, +0.0008097059527, +0.0006347119292, +0.0003428161607, + +0.0001604111881, +0.0004011475018, +0.0009557733684, +0.0012914176428, + +0.0013131723643, +0.0008171169017, -0.0003719818312, -0.0014955773368, + -0.0018823810662, -0.0015101601721, -0.0002041596940, +0.0015247430074, + +0.0029985656228, +0.0039760937126, +0.0037427683481, +0.0024001912503, + +0.0008171169017, -0.0007951231174, -0.0017291417643, -0.0014226631604, + -0.0004377241214, +0.0005981353096, +0.0011090126703, +0.0009483624193, + +0.0004888835764, -0.0004523069567, -0.0016559885250, -0.0021448721014, + -0.0017583074349, -0.0008171169017, +0.0003428161607, +0.0013351661487, + +0.0016196509682, +0.0010432703801, +0.0002481472627, -0.0002335644274, + -0.0003502271097, -0.0001166626823, +0.0001824049725, +0.0002407363137, + -0.0002553191489, -0.0010578532154, -0.0013497489840, -0.0009703562037, + -0.0002261534784, +0.0005763805881, +0.0011307673918, +0.0015247430074, + +0.0017217308152, +0.0014372459957, +0.0007805402821, +0.0000729141764, + -0.0002553191489, -0.0001824049725, -0.0000365766197, -0.0000583313411, + -0.0001969878078, -0.0002261534784, -0.0001312455176, -0.0000437485059, + +0.0001824049725, +0.0006712885489, +0.0011090126703, +0.0009703562037, + +0.0001458283529, -0.0007879512312, -0.0014226631604, -0.0016488166388, + -0.0011381783409, -0.0001240736314, +0.0007222089410, +0.0011527611762, + +0.0011527611762, +0.0003719818312, -0.0008462825723, -0.0016999760937, + -0.0018603872819, -0.0015029882859, -0.0009849390390, -0.0006567057136, + -0.0004231412862, -0.0001895768587, -0.0000803251255, +0.0000437485059, + +0.0002041596940, -0.0000074109491, -0.0006784604351, -0.0015904852976, + -0.0023930193641, -0.0025388477169, -0.0021740377719, -0.0016122400191, + -0.0007805402821, -0.0002481472627, -0.0001240736314, -0.0000803251255, + -0.0003210614392, -0.0005763805881, -0.0006421228783, -0.0009921109252, + -0.0016708104231, -0.0024076021994, -0.0027286636385, -0.0023201051877, + -0.0014592397801, -0.0004960554626, +0.0002335644274, +0.0005034664117, + +0.0003428161607, -0.0001532393019, -0.0007367917762, -0.0010798469998, + -0.0011381783409, -0.0009921109252, -0.0007951231174, -0.0006567057136, + -0.0006638775998, -0.0007951231174, -0.0009046139135, -0.0009557733684, + -0.0010286875448, -0.0013131723643, -0.0018238106622, -0.0021011235955, + -0.0021085345446, -0.0019844609132, -0.0015613196271, -0.0010358594310, + -0.0008608654076, -0.0009921109252, -0.0010798469998, -0.0010358594310, + -0.0012985895290, -0.0017363136505, -0.0019261295721, -0.0020062156347, + -0.0019844609132, -0.0017800621563, -0.0012622519723, -0.0006492947645, + -0.0003136504901, -0.0000437485059, +0.0002627300980, +0.0004743007411, + +0.0007004542195, +0.0005909634234, +0.0001020798470, -0.0004305522352, + -0.0010944298350, -0.0014738226153, -0.0013497489840, -0.0011745158977, + -0.0009629452546, -0.0008242887880, -0.0010358594310, -0.0013277551996, + -0.0015759024623, -0.0017291417643, -0.0015101601721, -0.0011527611762, + -0.0008536935214, -0.0004011475018, +0.0000291656706, +0.0004011475018, + +0.0005689696390, +0.0001312455176, -0.0008242887880, -0.0015613196271, + -0.0017363136505, -0.0016050681329, -0.0014444178819, -0.0010944298350, + -0.0005472149175, -0.0002627300980, -0.0001749940234, -0.0000511594549, + +0.0000437485059, +0.0003136504901, +0.0007587855606, +0.0006421228783, + -0.0000219937844, -0.0007442027253, -0.0012182644035, -0.0012840066938, + -0.0013205833134, -0.0014444178819, -0.0015247430074, -0.0016633994741, + -0.0016342338035, -0.0013934974898, -0.0013060004781, -0.0012402581879, + -0.0012110925173, -0.0012328472388, -0.0010358594310, -0.0005252211332, + +0.0000074109491, +0.0002990676548, +0.0004668897920, +0.0005763805881, + +0.0003210614392, -0.0002627300980, -0.0006858713842, -0.0007150370547, + -0.0005909634234, -0.0005689696390, -0.0005180492470, -0.0003136504901, + +0.0000145828353, +0.0003282333254, +0.0004305522352, +0.0003573989959, + +0.0001749940234, -0.0000365766197, -0.0002773129333, -0.0003865646665, + -0.0002844848195, -0.0001312455176, -0.0000803251255, -0.0001749940234, + -0.0003428161607, -0.0003939756156, -0.0003356442744, +0.0000145828353, + +0.0008242887880, +0.0014955773368, +0.0015684915133, +0.0009921109252, + +0.0002041596940, -0.0003136504901, -0.0005106382979, -0.0004814726273, + -0.0000437485059, +0.0005981353096, +0.0011453502271, +0.0015029882859, + +0.0015759024623, +0.0011307673918, +0.0002627300980, -0.0004888835764, + -0.0007951231174, -0.0006055462587, -0.0000949079608, +0.0004231412862, + +0.0007805402821, +0.0006930432704, +0.0003282333254, +0.0002844848195, + +0.0004377241214, +0.0003428161607, +0.0000219937844, -0.0002773129333, + -0.0004597179058, -0.0004668897920, -0.0001895768587, +0.0004011475018, + +0.0008828591920, +0.0010652641645, +0.0010944298350, +0.0009483624193, + +0.0008974420273, +0.0011745158977, +0.0013131723643, +0.0010141047095, + +0.0005034664117, -0.0000729141764, -0.0004814726273, -0.0005398039684, + -0.0002553191489, +0.0003428161607, +0.0010578532154, +0.0015247430074, + +0.0017508964858, +0.0018092278269, +0.0016342338035, +0.0013497489840, + +0.0011599330624, +0.0010652641645, +0.0009775280899, +0.0007879512312, + +0.0005689696390, +0.0004451350705, +0.0003502271097, +0.0003502271097, + +0.0005034664117, +0.0006712885489, +0.0008682763567, +0.0011673440115, + +0.0012985895290, +0.0011307673918, +0.0007733683959, +0.0004305522352, + +0.0003865646665, +0.0007805402821, +0.0014006693760, +0.0019041357877, + +0.0018969639015, +0.0014226631604, +0.0009411905331, +0.0006930432704, + +0.0006421228783, +0.0006712885489, +0.0007004542195, +0.0007587855606, + +0.0007951231174, +0.0008462825723, +0.0008900310782, +0.0007442027253, + +0.0006201290940, +0.0007296198900, +0.0008900310782, +0.0009483624193, + +0.0009775280899, +0.0009775280899, +0.0009120248625, +0.0006784604351, + +0.0003356442744, +0.0000000000000, -0.0001969878078, -0.0000874970117, + +0.0002115706431, +0.0005034664117, +0.0007367917762, +0.0009411905331, + +0.0009849390390, +0.0008754482429, +0.0008391106861, +0.0008900310782, + +0.0010212765957, +0.0012694238585, +0.0013860865408, +0.0012402581879, + +0.0009775280899, +0.0006201290940, +0.0003793927803, +0.0003648099450, + +0.0003573989959, +0.0004668897920, +0.0005981353096, +0.0005326320822, + +0.0003648099450, +0.0003064786039, +0.0003719818312, +0.0003939756156, + +0.0003865646665, +0.0004597179058, +0.0004960554626, +0.0004960554626, + +0.0005180492470, +0.0004888835764, +0.0004960554626, +0.0005763805881, + +0.0006421228783, +0.0004305522352, -0.0000657422902, -0.0004451350705, + -0.0004451350705, -0.0001604111881, +0.0002918957686, +0.0008242887880, + +0.0011819268468, +0.0012622519723, +0.0009995218743, +0.0005689696390, + +0.0002627300980, +0.0000874970117, +0.0000365766197, +0.0001166626823, + +0.0001312455176, +0.0000000000000, -0.0002335644274, -0.0004743007411, + -0.0006055462587, -0.0005981353096, -0.0004377241214, -0.0001240736314, + +0.0001749940234, +0.0003573989959, +0.0003939756156, +0.0002041596940, + -0.0000949079608, -0.0002481472627, -0.0002481472627, -0.0003356442744, + -0.0005252211332, -0.0007296198900, -0.0007587855606, -0.0003210614392, + +0.0005252211332, +0.0014738226153, +0.0021085345446, +0.0018529763328, + +0.0005981353096, -0.0009849390390, -0.0020939517093, -0.0021740377719, + -0.0013643318193, -0.0002189815922, +0.0007733683959, +0.0012840066938, + +0.0011673440115, +0.0006347119292, -0.0000511594549, -0.0007150370547, + -0.0010286875448, -0.0009703562037, -0.0007659574468, -0.0004159694000, + -0.0000074109491, +0.0003064786039, +0.0005326320822, +0.0005252211332, + +0.0002627300980, -0.0000657422902, -0.0004231412862, -0.0006275400430, + -0.0006492947645, -0.0005835524743, -0.0003793927803, -0.0002773129333, + -0.0003793927803, -0.0003648099450, -0.0002481472627, -0.0001824049725, + +0.0000145828353, +0.0001969878078, +0.0002115706431, +0.0002041596940, + +0.0000583313411, +0.0000000000000, +0.0001749940234, +0.0001166626823, + -0.0002261534784, -0.0006858713842, -0.0010506813292, -0.0008754482429, + -0.0005180492470, -0.0003648099450, -0.0001094907961, +0.0002189815922, + +0.0004159694000, +0.0004159694000, +0.0002115706431, +0.0002189815922, + +0.0003648099450, +0.0001166626823, -0.0001969878078, -0.0000803251255, + +0.0002773129333, +0.0005763805881, +0.0007004542195, +0.0006275400430, + +0.0003865646665, +0.0000583313411, -0.0003793927803, -0.0006492947645, + -0.0002407363137, +0.0005180492470, +0.0009046139135, +0.0009629452546, + +0.0009337795840, +0.0008242887880, +0.0006492947645, +0.0003282333254, + -0.0001240736314, -0.0005981353096, -0.0007587855606, -0.0004814726273, + +0.0000219937844, +0.0003865646665, +0.0004888835764, +0.0004085584509, + +0.0003282333254, +0.0003210614392, +0.0003793927803, +0.0004305522352, + +0.0004743007411, +0.0005763805881, +0.0007733683959, +0.0008828591920, + +0.0007442027253, +0.0005034664117, +0.0002189815922, -0.0000074109491, + +0.0000291656706, +0.0003428161607, +0.0007076261057, +0.0008682763567, + +0.0008974420273, +0.0009191967487, +0.0006858713842, +0.0003210614392, + +0.0002261534784, +0.0003719818312, +0.0005689696390, +0.0006347119292, + +0.0004668897920, +0.0004159694000, +0.0004814726273, +0.0004377241214, + +0.0004159694000, +0.0004231412862, +0.0003282333254, +0.0002041596940, + +0.0001166626823, +0.0001824049725, +0.0003502271097, +0.0004743007411, + +0.0007076261057, +0.0009557733684, +0.0010652641645, +0.0011161845565, + +0.0010141047095, +0.0007659574468, +0.0004305522352, +0.0000437485059, + -0.0001094907961, +0.0000074109491, +0.0002407363137, +0.0004451350705, + +0.0004231412862, +0.0002844848195, +0.0002335644274, +0.0002553191489, + +0.0003939756156, +0.0007587855606, +0.0011235955056, +0.0012328472388, + +0.0009629452546, +0.0004888835764, +0.0002041596940, +0.0002041596940, + +0.0002844848195, +0.0002918957686, +0.0001824049725, +0.0000511594549, + +0.0000000000000, +0.0000365766197, +0.0002115706431, +0.0003282333254, + +0.0003064786039, +0.0003356442744, +0.0004814726273, +0.0006275400430, + +0.0006784604351, +0.0005398039684, +0.0002553191489, -0.0000949079608, + -0.0003573989959, -0.0002918957686, +0.0000365766197, +0.0003356442744, + +0.0004523069567, +0.0003210614392, +0.0000583313411, -0.0001824049725, + -0.0003356442744, -0.0002627300980, +0.0000145828353, +0.0003136504901, + +0.0005763805881, +0.0007076261057, +0.0006275400430, +0.0004231412862, + +0.0001240736314, -0.0002773129333, -0.0006127181449, -0.0007587855606, + -0.0006712885489, -0.0004159694000, -0.0001386564667, +0.0000000000000, + -0.0000291656706, -0.0001386564667, -0.0001824049725, -0.0001094907961, + +0.0000729141764, +0.0002407363137, +0.0001969878078, -0.0000874970117, + -0.0004668897920, -0.0006421228783, -0.0005617977528, -0.0003428161607, + -0.0000949079608, -0.0000145828353, -0.0001824049725, -0.0003939756156, + -0.0004523069567, -0.0003793927803, -0.0003865646665, -0.0004743007411, + -0.0004377241214, -0.0003356442744, -0.0002335644274, -0.0001386564667, + -0.0001604111881, -0.0002481472627, -0.0003210614392, -0.0004085584509, + -0.0004085584509, -0.0003136504901, -0.0002335644274, -0.0002627300980, + -0.0004011475018, -0.0005835524743, -0.0006567057136, -0.0005689696390, + -0.0003356442744, +0.0000000000000, +0.0002481472627, +0.0002627300980, + +0.0001386564667, -0.0001020798470, -0.0004523069567, -0.0006421228783, + -0.0006421228783, -0.0005180492470, -0.0003502271097, -0.0002918957686, + -0.0002699019842, -0.0002335644274, -0.0002115706431, -0.0001386564667, + -0.0000949079608, -0.0001604111881, -0.0002407363137, -0.0002918957686, + -0.0003428161607, -0.0003939756156, -0.0004743007411, -0.0003939756156, + -0.0001532393019, -0.0000145828353, +0.0000000000000, +0.0000583313411, + +0.0001166626823, +0.0000874970117, -0.0000803251255, -0.0004085584509, + -0.0007442027253, -0.0009921109252, -0.0010212765957, -0.0007076261057, + -0.0002990676548, -0.0001312455176, -0.0002773129333, -0.0006567057136, + -0.0008754482429, -0.0007805402821, -0.0005689696390, -0.0003648099450, + -0.0002773129333, -0.0003428161607, -0.0004523069567, -0.0005472149175, + -0.0004814726273, -0.0001386564667, +0.0001678221372, +0.0001094907961, + -0.0003865646665, -0.0008682763567, -0.0009337795840, -0.0006930432704, + -0.0003428161607, -0.0000291656706, +0.0000145828353, -0.0002773129333, + -0.0007367917762, -0.0009703562037, -0.0008242887880, -0.0005034664117, + -0.0002041596940, -0.0001678221372, -0.0003939756156, -0.0005981353096, + -0.0006275400430, -0.0004668897920, -0.0002481472627, -0.0001094907961, + +0.0000000000000, +0.0000219937844, -0.0001386564667, -0.0003648099450, + -0.0005472149175, -0.0007076261057, -0.0008391106861, -0.0008171169017, + -0.0006055462587, -0.0004159694000, -0.0002699019842, -0.0001312455176, + -0.0000874970117, -0.0001532393019, -0.0003282333254, -0.0005180492470, + -0.0005909634234, -0.0005981353096, -0.0005472149175, -0.0005106382979, + -0.0006055462587, -0.0006201290940, -0.0004231412862, -0.0001094907961, + +0.0001458283529, +0.0001604111881, -0.0000657422902, -0.0004159694000, + -0.0007442027253, -0.0008536935214, -0.0007296198900, -0.0004597179058, + -0.0000874970117, +0.0001020798470, +0.0000583313411, -0.0000729141764, + -0.0004011475018, -0.0008391106861, -0.0010212765957, -0.0008974420273, + -0.0006421228783, -0.0003282333254, +0.0000074109491, +0.0002627300980, + +0.0002699019842, +0.0000729141764, -0.0001895768587, -0.0003939756156, + -0.0004814726273, -0.0005835524743, -0.0006784604351, -0.0006421228783, + -0.0005689696390, -0.0005763805881, -0.0006055462587, -0.0005689696390, + -0.0004159694000, -0.0002041596940, -0.0000219937844, +0.0001094907961, + +0.0002041596940, +0.0001749940234, -0.0000437485059, -0.0003064786039, + -0.0003939756156, -0.0003865646665, -0.0003282333254, -0.0002115706431, + -0.0001240736314, -0.0000437485059, +0.0000000000000, -0.0000657422902, + -0.0001386564667, -0.0001458283529, -0.0001604111881, -0.0001532393019, + -0.0001312455176, -0.0000803251255, -0.0000365766197, -0.0000583313411, + -0.0001312455176, -0.0002335644274, -0.0003136504901, -0.0002335644274, + -0.0001166626823, -0.0001386564667, -0.0002773129333, -0.0003648099450, + -0.0003210614392, -0.0002627300980, -0.0002990676548, -0.0003282333254, + -0.0002407363137, -0.0000949079608, +0.0000949079608, +0.0002844848195, + +0.0003282333254, +0.0001969878078, -0.0000874970117, -0.0003648099450, + -0.0004085584509, -0.0002990676548, -0.0001094907961, +0.0000657422902, + +0.0000657422902, -0.0001312455176, -0.0003939756156, -0.0005398039684, + -0.0004523069567, -0.0002407363137, -0.0000219937844, +0.0000874970117, + -0.0000219937844, -0.0002481472627, -0.0004231412862, -0.0004743007411, + -0.0003502271097, -0.0001312455176, +0.0000074109491, +0.0000657422902, + +0.0000949079608, +0.0000949079608, +0.0000583313411, +0.0000365766197, + +0.0000583313411, +0.0001020798470, +0.0001604111881, +0.0002627300980, + +0.0003865646665, +0.0004743007411, +0.0004668897920, +0.0003210614392, + +0.0000657422902, -0.0001749940234, -0.0003502271097, -0.0004451350705, + -0.0004451350705, -0.0002918957686, -0.0000511594549, +0.0000511594549, + +0.0000219937844, +0.0000000000000, -0.0000074109491, +0.0000365766197, + +0.0001312455176, +0.0001895768587, +0.0001824049725, +0.0000874970117, + -0.0000949079608, -0.0003210614392, -0.0004743007411, -0.0004231412862, + -0.0001969878078, +0.0000000000000, +0.0000583313411, +0.0000219937844, + -0.0000657422902, -0.0001895768587, -0.0002553191489, -0.0001895768587, + -0.0000657422902, +0.0000219937844, +0.0000074109491, -0.0001166626823, + -0.0002261534784, -0.0001969878078, -0.0000949079608, -0.0000219937844, + +0.0000000000000, -0.0000291656706, -0.0000874970117, -0.0000657422902, + +0.0000583313411, +0.0001678221372, +0.0001604111881, +0.0000219937844, + -0.0001532393019, -0.0003064786039, -0.0003865646665, -0.0002773129333, + -0.0000145828353, +0.0002189815922, +0.0003502271097, +0.0003210614392, + +0.0001458283529, -0.0000365766197, -0.0001386564667, -0.0000949079608, + +0.0000437485059, +0.0002335644274, +0.0003793927803, +0.0003719818312, + +0.0002407363137, +0.0000803251255, +0.0000145828353, +0.0000803251255, + +0.0001604111881, +0.0002041596940, +0.0001678221372, +0.0000145828353, + -0.0000949079608, -0.0001240736314, -0.0001312455176, -0.0000511594549, + +0.0000511594549, +0.0001604111881, +0.0002335644274, +0.0001969878078, + +0.0001969878078, +0.0002335644274, +0.0001895768587, +0.0001166626823, + +0.0000291656706, -0.0000874970117, -0.0001532393019, -0.0001166626823, + +0.0000583313411, +0.0003210614392, +0.0004743007411, +0.0005326320822, + +0.0005689696390, +0.0005689696390, +0.0005763805881, +0.0005472149175, + +0.0004011475018, +0.0002189815922, +0.0000583313411, -0.0000949079608, + -0.0002335644274, -0.0002990676548, -0.0002407363137, -0.0001312455176, + -0.0000219937844, +0.0001020798470, +0.0002335644274, +0.0003210614392, + +0.0003793927803, +0.0004085584509, +0.0004011475018, +0.0003136504901, + +0.0001458283529, +0.0000729141764, +0.0001386564667, +0.0002335644274, + +0.0002699019842, +0.0002481472627, +0.0002189815922, +0.0002627300980, + +0.0003064786039, +0.0002115706431, +0.0000000000000, -0.0001824049725, + -0.0002990676548, -0.0003136504901, -0.0002115706431, -0.0000219937844, + +0.0001749940234, +0.0003064786039, +0.0003502271097, +0.0003282333254, + +0.0002261534784, +0.0001240736314, +0.0000000000000, -0.0001166626823, + -0.0000219937844, +0.0002627300980, +0.0005398039684, +0.0006567057136, + +0.0005398039684, +0.0002553191489, -0.0000511594549, -0.0003136504901, + -0.0003356442744, -0.0000437485059, +0.0003428161607, +0.0006275400430, + +0.0006858713842, +0.0004305522352, +0.0000219937844, -0.0002990676548, + -0.0003865646665, -0.0001824049725, +0.0001094907961, +0.0002553191489, + +0.0002918957686, +0.0003428161607, +0.0004743007411, +0.0006275400430, + +0.0006421228783, +0.0005106382979, +0.0003064786039, +0.0001020798470, + +0.0000949079608, +0.0003210614392, +0.0006055462587, +0.0006784604351, + +0.0004377241214, +0.0001532393019, +0.0000219937844, -0.0000365766197, + -0.0000219937844, +0.0001386564667, +0.0002773129333, +0.0002990676548, + +0.0002335644274, +0.0000729141764, -0.0000874970117, -0.0001312455176, + +0.0000291656706, +0.0004011475018, +0.0007659574468, +0.0008900310782, + +0.0007442027253, +0.0004451350705, +0.0000729141764, -0.0001749940234, + -0.0002553191489, -0.0002335644274, -0.0001969878078, -0.0001240736314, + -0.0000365766197, +0.0000657422902, +0.0001386564667, +0.0001312455176, + +0.0001312455176, +0.0001604111881, +0.0001824049725, +0.0001386564667, + +0.0000291656706, -0.0000949079608, -0.0001678221372, -0.0001166626823, + +0.0000583313411, +0.0002261534784, +0.0002918957686, +0.0003064786039, + +0.0003356442744, +0.0003282333254, +0.0002189815922, +0.0000949079608, + +0.0000511594549, +0.0000365766197, -0.0000511594549, -0.0001240736314, + -0.0000437485059, +0.0001166626823, +0.0002699019842, +0.0004231412862, + +0.0005252211332, +0.0005326320822, +0.0004523069567, +0.0002844848195, + +0.0001678221372, +0.0001678221372, +0.0001895768587, +0.0002041596940, + +0.0002189815922, +0.0002115706431, +0.0002041596940, +0.0002115706431, + +0.0002041596940, +0.0001824049725, +0.0001604111881, +0.0001386564667, + +0.0001604111881, +0.0002041596940, +0.0002041596940, +0.0002699019842, + +0.0004523069567, +0.0006347119292, +0.0007150370547, +0.0005763805881, + +0.0002261534784, -0.0001166626823, -0.0002844848195, -0.0001532393019, + +0.0002115706431, +0.0005909634234, +0.0007951231174, +0.0007296198900, + +0.0004743007411, +0.0002335644274, +0.0000874970117, +0.0000000000000, + -0.0000074109491, +0.0000437485059, +0.0000949079608, +0.0001166626823, + +0.0001386564667, +0.0001824049725, +0.0002189815922, +0.0002041596940, + +0.0002261534784, +0.0002990676548, +0.0003210614392, +0.0002481472627, + +0.0001458283529, +0.0000583313411, +0.0000291656706, +0.0000583313411, + +0.0001458283529, +0.0002773129333, +0.0003573989959, +0.0003502271097, + +0.0002918957686, +0.0002041596940, +0.0001532393019, +0.0001532393019, + +0.0001678221372, +0.0001824049725, +0.0002481472627, +0.0002990676548, + +0.0003064786039, +0.0002699019842, +0.0001895768587, +0.0000949079608, + +0.0000219937844, +0.0000000000000, +0.0000145828353, +0.0001312455176, + +0.0002990676548, +0.0003064786039, +0.0001678221372, +0.0000583313411, + +0.0000437485059, +0.0000874970117, +0.0001458283529, +0.0001969878078, + +0.0002699019842, +0.0003502271097, +0.0004011475018, +0.0003502271097, + +0.0001969878078, +0.0000583313411, -0.0000583313411, -0.0001458283529, + -0.0001312455176, -0.0000949079608, -0.0000511594549, +0.0000074109491, + +0.0000219937844, -0.0000437485059, -0.0001749940234, -0.0002918957686, + -0.0002699019842, -0.0000949079608, +0.0000803251255, +0.0001895768587, + +0.0002189815922, +0.0002041596940, +0.0001532393019, +0.0001386564667, + +0.0001678221372, +0.0001749940234, +0.0001240736314, +0.0000365766197, + -0.0000511594549, -0.0000657422902, -0.0000074109491, +0.0000583313411, + +0.0000949079608, +0.0000657422902, +0.0000074109491, +0.0000291656706, + +0.0000874970117, +0.0000803251255, +0.0000291656706, +0.0000511594549, + +0.0001604111881, +0.0002773129333, +0.0002844848195, +0.0001604111881, + -0.0000219937844, -0.0001824049725, -0.0002041596940, -0.0000729141764, + +0.0001094907961, +0.0002553191489, +0.0002699019842, +0.0001824049725, + +0.0001020798470, +0.0000729141764, +0.0000874970117, +0.0000803251255, + -0.0000291656706, -0.0001749940234, -0.0002627300980, -0.0002481472627, + -0.0000949079608, +0.0000511594549, +0.0000729141764, +0.0000074109491, + -0.0001312455176, -0.0002261534784, -0.0001604111881, +0.0000000000000, + +0.0001386564667, +0.0001678221372, +0.0000437485059, -0.0001386564667, + -0.0003064786039, -0.0003939756156, -0.0002990676548, -0.0001094907961, + +0.0000511594549, +0.0000657422902, -0.0000874970117, -0.0002189815922, + -0.0002918957686, -0.0002844848195, -0.0001969878078, -0.0001386564667, + -0.0001094907961, -0.0000437485059, -0.0000219937844, -0.0000437485059, + -0.0000803251255, -0.0001749940234, -0.0002627300980, -0.0003282333254, + -0.0003648099450, -0.0003793927803, -0.0003428161607, -0.0002261534784, + -0.0001020798470, +0.0000000000000, +0.0000803251255, +0.0000657422902, + -0.0000437485059, -0.0001895768587, -0.0002844848195, -0.0002407363137, + -0.0001094907961, +0.0000219937844, +0.0001020798470, +0.0001094907961, + +0.0000365766197, -0.0001094907961, -0.0002627300980, -0.0003136504901, + -0.0003064786039, -0.0002189815922, -0.0000803251255, +0.0000000000000, + +0.0000365766197, +0.0000729141764, +0.0000874970117, +0.0000511594549, + -0.0000511594549, -0.0001604111881, -0.0002261534784, -0.0003064786039, + -0.0003428161607, -0.0002990676548, -0.0002481472627, -0.0002407363137, + -0.0002699019842, -0.0003210614392, -0.0003064786039, -0.0002189815922, + -0.0001166626823, -0.0000365766197, -0.0000219937844, -0.0000365766197, + -0.0000583313411, -0.0001312455176, -0.0001895768587, -0.0002189815922, + -0.0002261534784, -0.0002115706431, -0.0002041596940, -0.0002115706431, + -0.0001969878078, -0.0001312455176, -0.0000219937844, +0.0000511594549, + +0.0000583313411, +0.0000074109491, -0.0000949079608, -0.0002115706431, + -0.0002699019842, -0.0003064786039, -0.0002918957686, -0.0001969878078, + -0.0001166626823, -0.0000874970117, -0.0000874970117, -0.0000511594549, + +0.0000803251255, +0.0001824049725, +0.0001166626823, -0.0000511594549, + -0.0002699019842, -0.0004159694000, -0.0004451350705, -0.0004231412862, + -0.0003064786039, -0.0001678221372, -0.0001240736314, -0.0001166626823, + -0.0000949079608, -0.0000365766197, +0.0000365766197, -0.0000074109491, + -0.0001749940234, -0.0003282333254, -0.0003939756156, -0.0003136504901, + -0.0001386564667, +0.0000074109491, +0.0000874970117, +0.0000657422902, + -0.0000583313411, -0.0002553191489, -0.0004377241214, -0.0004668897920, + -0.0002990676548, -0.0000657422902, +0.0000657422902, +0.0000511594549, + -0.0000437485059, -0.0001312455176, -0.0001532393019, -0.0001678221372, + -0.0001678221372, -0.0001386564667, -0.0001312455176, -0.0001895768587, + -0.0002844848195, -0.0003573989959, -0.0002844848195, -0.0001312455176, + +0.0000219937844, +0.0001240736314, +0.0001532393019, +0.0001020798470, + +0.0000074109491, -0.0000511594549, -0.0000657422902, -0.0000874970117, + -0.0001604111881, -0.0002481472627, -0.0003210614392, -0.0003502271097, + -0.0003719818312, -0.0003356442744, -0.0002481472627, -0.0001604111881, + -0.0000511594549, +0.0000803251255, +0.0002553191489, +0.0003865646665, + +0.0003573989959, +0.0001604111881, -0.0000803251255, -0.0002481472627, + -0.0002627300980, -0.0001604111881, -0.0000291656706, +0.0000803251255, + +0.0000583313411, -0.0001166626823, -0.0003136504901, -0.0003793927803, + -0.0002844848195, -0.0001240736314, -0.0000365766197, -0.0000365766197, + -0.0001604111881, -0.0003356442744, -0.0004085584509, -0.0003064786039, + -0.0001094907961, -0.0000145828353, -0.0000729141764, -0.0002041596940, + -0.0003210614392, -0.0003064786039, -0.0001240736314, +0.0001094907961, + +0.0002773129333, +0.0003136504901, +0.0002115706431, +0.0000803251255, + -0.0000291656706, -0.0001094907961, -0.0001604111881, -0.0002553191489, + -0.0003793927803, -0.0004523069567, -0.0004668897920, -0.0003719818312, + -0.0002189815922, -0.0000657422902, +0.0000949079608, +0.0001532393019, + +0.0000365766197, -0.0001020798470, -0.0001824049725, -0.0001749940234, + -0.0000803251255, +0.0000074109491, +0.0000949079608, +0.0001604111881, + +0.0001532393019, +0.0000511594549, -0.0000874970117, -0.0001604111881, + -0.0001240736314, -0.0000365766197, +0.0000511594549, +0.0001166626823, + +0.0001240736314, +0.0000803251255, -0.0000291656706, -0.0001604111881, + -0.0002041596940, -0.0002261534784, -0.0002844848195, -0.0003356442744, + -0.0003136504901, -0.0002189815922, -0.0000803251255, +0.0000657422902, + +0.0001824049725, +0.0002481472627, +0.0002481472627, +0.0001678221372, + +0.0000657422902, +0.0000000000000, -0.0000949079608, -0.0001969878078, + -0.0001824049725, -0.0000583313411, +0.0000291656706, +0.0000291656706, + -0.0000074109491, -0.0000803251255, -0.0001824049725, -0.0002553191489, + -0.0002481472627, -0.0001240736314, +0.0001020798470, +0.0003502271097, + +0.0004377241214, +0.0003502271097, +0.0001166626823, -0.0001678221372, + -0.0003793927803, -0.0003865646665, -0.0002041596940, +0.0000145828353, + +0.0001240736314, +0.0000365766197, -0.0001678221372, -0.0003428161607, + -0.0003428161607, -0.0001604111881, +0.0001240736314, +0.0003648099450, + +0.0004231412862, +0.0003064786039, +0.0001458283529, +0.0000437485059, + -0.0000074109491, -0.0000583313411, -0.0001386564667, -0.0002335644274, + -0.0002627300980, -0.0002189815922, -0.0001166626823, +0.0000074109491, + +0.0001094907961, +0.0001749940234, +0.0001678221372, +0.0000803251255, + +0.0000365766197, +0.0000729141764, +0.0001386564667, +0.0002041596940, + +0.0002041596940, +0.0001094907961, -0.0000145828353, -0.0001312455176, + -0.0001749940234, -0.0001020798470, -0.0000145828353, +0.0000074109491, + +0.0000000000000, -0.0000145828353, -0.0000074109491, +0.0000219937844, + +0.0000437485059, +0.0000365766197, +0.0000145828353, -0.0000365766197, + -0.0000657422902, -0.0000074109491, +0.0000874970117, +0.0001678221372, + +0.0001895768587, +0.0001240736314, +0.0000000000000, -0.0001678221372, + -0.0002773129333, -0.0002407363137, -0.0000803251255, +0.0001458283529, + +0.0003502271097, +0.0004231412862, +0.0003648099450, +0.0002115706431, + +0.0000074109491, -0.0001312455176, -0.0002041596940, -0.0002115706431, + -0.0001240736314, +0.0000000000000, +0.0001240736314, +0.0002115706431, + +0.0002041596940, +0.0001312455176, +0.0000145828353, -0.0000949079608, + -0.0001532393019, -0.0001166626823, -0.0000219937844, +0.0000437485059, + +0.0001094907961, +0.0001678221372, +0.0002115706431, +0.0002773129333, + +0.0003282333254, +0.0003210614392, +0.0002335644274, +0.0000365766197, + -0.0001678221372, -0.0003136504901, -0.0003648099450, -0.0002918957686, + -0.0001166626823, +0.0000219937844, +0.0001020798470, +0.0000949079608, + +0.0000365766197, -0.0000074109491, -0.0000219937844, +0.0000219937844, + +0.0001020798470, +0.0001458283529, +0.0001749940234, +0.0001386564667, + +0.0000291656706, -0.0000437485059, -0.0000874970117, -0.0001240736314, + -0.0001166626823, -0.0000803251255, -0.0000145828353, +0.0000657422902, + +0.0001604111881, +0.0002261534784, +0.0002041596940, +0.0001604111881, + +0.0001458283529, +0.0001458283529, +0.0001386564667, +0.0001020798470, + +0.0000511594549, +0.0000219937844, +0.0000583313411, +0.0001532393019, + +0.0002699019842, +0.0003502271097, +0.0003282333254, +0.0002335644274, + +0.0001166626823, -0.0000145828353, -0.0001312455176, -0.0001240736314, + -0.0000145828353, +0.0000583313411, +0.0000437485059, -0.0000219937844, + -0.0000437485059, +0.0000000000000, +0.0000874970117, +0.0001969878078, + +0.0002699019842, +0.0002553191489, +0.0001532393019, +0.0000365766197, + -0.0000437485059, -0.0000803251255, -0.0000803251255, -0.0000437485059, + +0.0000145828353, +0.0000657422902, +0.0001094907961, +0.0001240736314, + +0.0001094907961, +0.0001020798470, +0.0000949079608, +0.0001166626823, + +0.0001824049725, +0.0002115706431, +0.0002261534784, +0.0002041596940, + +0.0001386564667, +0.0000803251255, +0.0000074109491, -0.0000291656706, + +0.0000000000000, +0.0000074109491, +0.0000000000000, -0.0000365766197, + -0.0000803251255, -0.0000803251255, -0.0000583313411, -0.0000803251255, + -0.0000803251255, -0.0000074109491, +0.0001020798470, +0.0002261534784, + +0.0002844848195, +0.0002627300980, +0.0001969878078, +0.0001678221372, + +0.0002115706431, +0.0003064786039, +0.0004085584509, +0.0004743007411, + +0.0004377241214, +0.0002627300980, +0.0000219937844, -0.0001166626823, + -0.0000874970117, +0.0000949079608, +0.0002773129333, +0.0003210614392, + +0.0001969878078, +0.0000437485059, +0.0000000000000, +0.0000437485059, + +0.0001458283529, +0.0002553191489, +0.0003356442744, +0.0003064786039, + +0.0001969878078, +0.0001312455176, +0.0001386564667, +0.0001604111881, + +0.0001969878078, +0.0002115706431, +0.0001749940234, +0.0001678221372, + +0.0002261534784, +0.0002990676548, +0.0003282333254, +0.0003210614392, + +0.0003210614392, +0.0002990676548, +0.0002335644274, +0.0001824049725, + +0.0001604111881, +0.0001969878078, +0.0002699019842, +0.0002990676548, + +0.0002335644274, +0.0000949079608, -0.0000437485059, -0.0001678221372, + -0.0001895768587, -0.0001020798470, +0.0000291656706, +0.0001678221372, + +0.0002699019842, +0.0002627300980, +0.0001458283529, +0.0000291656706, + +0.0000000000000, +0.0000874970117, +0.0001969878078, +0.0002627300980, + +0.0002335644274, +0.0000729141764, -0.0000729141764, -0.0000949079608, + +0.0000219937844, +0.0002335644274, +0.0003793927803, +0.0003428161607, + +0.0001895768587, +0.0000511594549, -0.0000074109491, -0.0000145828353, + -0.0000074109491, -0.0000219937844, -0.0000365766197, -0.0000583313411, + -0.0000437485059, -0.0000219937844, -0.0000145828353, -0.0000291656706, + -0.0000657422902, -0.0001020798470, -0.0001094907961, -0.0000657422902, + +0.0000291656706, +0.0001166626823, +0.0001020798470, +0.0000000000000, + -0.0001166626823, -0.0001458283529, -0.0000511594549, +0.0001312455176, + +0.0002844848195, +0.0003356442744, +0.0002335644274, +0.0000145828353, + -0.0001458283529, -0.0001749940234, -0.0001312455176, -0.0000874970117, + -0.0000949079608, -0.0001678221372, -0.0001895768587, -0.0001020798470, + +0.0000000000000, +0.0000437485059, +0.0000000000000, -0.0000803251255, + -0.0001386564667, -0.0001240736314, -0.0000365766197, +0.0000511594549, + +0.0000874970117, +0.0000437485059, -0.0000365766197, -0.0001532393019, + -0.0002115706431, -0.0001749940234, -0.0000803251255, +0.0000291656706, + +0.0001240736314, +0.0001678221372, +0.0001678221372, +0.0001312455176, + +0.0000729141764, +0.0000000000000, -0.0000583313411, -0.0000511594549, + +0.0000000000000, +0.0000219937844, -0.0000145828353, -0.0001094907961, + -0.0002115706431, -0.0002773129333, -0.0003064786039, -0.0002990676548, + -0.0002115706431, -0.0000657422902, +0.0000511594549, +0.0001020798470, + +0.0000583313411, -0.0000365766197, -0.0001532393019, -0.0002189815922, + -0.0001895768587, -0.0001386564667, -0.0001386564667, -0.0001312455176, + -0.0000949079608, -0.0000511594549, -0.0000291656706, -0.0000145828353, + +0.0000000000000, +0.0000291656706, +0.0000511594549, +0.0000291656706, + -0.0000291656706, -0.0000729141764, -0.0000874970117, -0.0000874970117, + -0.0001094907961, -0.0001386564667, -0.0001312455176, -0.0000949079608, + -0.0000949079608, -0.0001240736314, -0.0001240736314, -0.0000949079608, + -0.0000074109491, +0.0000874970117, +0.0001386564667, +0.0001166626823, + +0.0000437485059, -0.0000437485059, -0.0000729141764, -0.0000729141764, + -0.0000657422902, -0.0000291656706, +0.0000000000000, +0.0000000000000, + +0.0000291656706, +0.0000874970117, +0.0001824049725, +0.0002773129333, + +0.0003356442744, +0.0003282333254, +0.0002261534784, +0.0000583313411, + -0.0000949079608, -0.0002115706431, -0.0002189815922, -0.0000729141764, + +0.0001166626823, +0.0002189815922, +0.0001969878078, +0.0000874970117, + +0.0000291656706, +0.0000657422902, +0.0001386564667, +0.0002189815922, + +0.0002407363137, +0.0001824049725, +0.0000949079608, -0.0000145828353, + -0.0001166626823, -0.0001312455176, -0.0000874970117, -0.0000291656706, + +0.0000437485059, +0.0001094907961, +0.0001458283529, +0.0001386564667, + +0.0001094907961, +0.0000583313411, +0.0000000000000, -0.0000365766197, + -0.0000365766197, -0.0000074109491, +0.0000291656706, +0.0000583313411, + +0.0000511594549, +0.0000145828353, -0.0000365766197, -0.0000729141764, + -0.0000803251255, -0.0000437485059, +0.0000000000000, +0.0000291656706, + +0.0000074109491, -0.0000365766197, -0.0000874970117, -0.0000874970117, + +0.0000074109491, +0.0001094907961, +0.0001312455176, +0.0000729141764, + +0.0000000000000, -0.0000511594549, -0.0001020798470, -0.0001749940234, + -0.0001969878078, -0.0001604111881, -0.0000729141764, +0.0000219937844, + +0.0001020798470, +0.0001386564667, +0.0001166626823, +0.0000219937844, + -0.0000729141764, -0.0001532393019, -0.0001969878078, -0.0001604111881, + -0.0000874970117, -0.0000291656706, +0.0000000000000, -0.0000291656706, + -0.0001020798470, -0.0001240736314, -0.0000729141764, +0.0000000000000, + +0.0000291656706, +0.0000074109491, -0.0000219937844, -0.0000365766197, + -0.0000365766197, -0.0000219937844, -0.0000145828353, -0.0000219937844, + -0.0000145828353, +0.0000145828353, +0.0000291656706, +0.0000074109491, + -0.0000291656706, -0.0000583313411, -0.0000803251255, -0.0000729141764, + -0.0000437485059, -0.0000365766197, -0.0000874970117, -0.0001824049725, + -0.0002335644274, -0.0001969878078, -0.0000803251255, +0.0000365766197, + +0.0001166626823, +0.0001240736314, +0.0000511594549, -0.0000583313411, + -0.0001458283529, -0.0001895768587, -0.0001895768587, -0.0001604111881, + -0.0001166626823, -0.0001020798470, -0.0000874970117, -0.0000365766197, + +0.0000291656706, +0.0000803251255, +0.0000729141764, +0.0000000000000, + -0.0000874970117, -0.0001458283529, -0.0001312455176, -0.0000657422902, + -0.0000291656706, -0.0000803251255, -0.0001969878078, -0.0002990676548, + -0.0003136504901, -0.0002335644274, -0.0000874970117, +0.0000583313411, + +0.0001532393019, +0.0001604111881, +0.0001386564667, +0.0001094907961, + +0.0000803251255, +0.0000365766197, -0.0000365766197, -0.0001312455176, + -0.0001749940234, -0.0001458283529, -0.0000803251255, +0.0000000000000, + +0.0000583313411, +0.0000437485059, -0.0000291656706, -0.0001094907961, + -0.0001604111881, -0.0001532393019, -0.0000949079608, -0.0000291656706, + +0.0000000000000, -0.0000219937844, -0.0000874970117, -0.0001458283529, + -0.0001824049725, -0.0001678221372, -0.0001020798470, -0.0000219937844, + +0.0000365766197, +0.0000803251255, +0.0000729141764, +0.0000291656706, + -0.0000511594549, -0.0001532393019, -0.0002261534784, -0.0002553191489, + -0.0002115706431, -0.0000874970117, +0.0000657422902, +0.0001824049725, + +0.0002115706431, +0.0001458283529, +0.0000219937844, -0.0001094907961, + -0.0002189815922, -0.0002773129333, -0.0002918957686, -0.0002335644274, + -0.0001094907961, +0.0000000000000, +0.0000437485059, +0.0000657422902, + +0.0000511594549, +0.0000219937844, -0.0000219937844, -0.0000729141764, + -0.0000657422902, -0.0000291656706, +0.0000000000000, +0.0000145828353, + +0.0000145828353, +0.0000074109491, +0.0000000000000, +0.0000000000000, + +0.0000000000000 +}; diff --git a/plugins/LadspaEffect/swh/impulses/14-fender-superchamp-at4050.h b/plugins/LadspaEffect/swh/impulses/14-fender-superchamp-at4050.h new file mode 100644 index 000000000..09d7e887f --- /dev/null +++ b/plugins/LadspaEffect/swh/impulses/14-fender-superchamp-at4050.h @@ -0,0 +1,825 @@ +float fender_superchamp_at4050[] = { + -0.0001856447689, -0.0002525547445, -0.0002525547445, -0.0001632603406, + -0.0000075425791, +0.0001484184915, +0.0002822384428, +0.0003340632603, + +0.0002822384428, +0.0001484184915, -0.0000148418491, -0.0001781021898, + -0.0002673965937, -0.0002598540146, -0.0001708029197, -0.0000296836983, + +0.0001114355231, +0.0002153284672, +0.0002450121655, +0.0002004866180, + +0.0001114355231, +0.0000000000000, -0.0000742092457, -0.0001114355231, + -0.0000817518248, -0.0000148418491, +0.0000742092457, +0.0001559610706, + +0.0002228710462, +0.0002598540146, +0.0002673965937, +0.0002598540146, + +0.0002301703163, +0.0001929440389, +0.0001559610706, +0.0001114355231, + +0.0000742092457, +0.0000445255474, +0.0000296836983, +0.0000372262774, + +0.0000669099757, +0.0001187347932, +0.0001632603406, +0.0002004866180, + +0.0002153284672, +0.0002077858881, +0.0001781021898, +0.0001484184915, + +0.0001187347932, +0.0001114355231, +0.0001187347932, +0.0001411192214, + +0.0001708029197, +0.0001856447689, +0.0001856447689, +0.0001632603406, + +0.0001262773723, +0.0000742092457, +0.0000296836983, +0.0000000000000, + +0.0000000000000, +0.0000148418491, +0.0000593673966, +0.0001038929440, + +0.0001335766423, +0.0001262773723, +0.0000742092457, -0.0000075425791, + -0.0001262773723, -0.0002377128954, -0.0003043795620, -0.0003043795620, + -0.0002301703163, -0.0000817518248, +0.0000965936740, +0.0002673965937, + +0.0003861313869, +0.0004158150852, +0.0003416058394, +0.0001929440389, + +0.0000075425791, -0.0001484184915, -0.0002450121655, -0.0002525547445, + -0.0001856447689, -0.0000817518248, +0.0000075425791, +0.0000445255474, + +0.0000223844282, -0.0000445255474, -0.0001411192214, -0.0002004866180, + -0.0001856447689, -0.0000817518248, +0.0000890510949, +0.0002822384428, + +0.0004381995134, +0.0005048661800, +0.0004530413625, +0.0002895377129, + +0.0000593673966, -0.0001708029197, -0.0003416058394, -0.0003934306569, + -0.0003192214112, -0.0001411192214, +0.0000742092457, +0.0002822384428, + +0.0004233576642, +0.0004603406326, +0.0004082725061, +0.0002970802920, + +0.0001708029197, +0.0000742092457, +0.0000223844282, +0.0000223844282, + +0.0000445255474, +0.0000669099757, +0.0000742092457, +0.0000520681265, + +0.0000296836983, +0.0000223844282, +0.0000669099757, +0.0001632603406, + +0.0003043795620, +0.0004454987835, +0.0005493917275, +0.0005642335766, + +0.0004751824818, +0.0003043795620, +0.0000890510949, -0.0000965936740, + -0.0002077858881, -0.0002004866180, -0.0000890510949, +0.0000965936740, + +0.0002970802920, +0.0004454987835, +0.0005048661800, +0.0004603406326, + +0.0003416058394, +0.0001929440389, +0.0000593673966, -0.0000223844282, + -0.0000593673966, -0.0000520681265, -0.0000223844282, -0.0000075425791, + -0.0000148418491, -0.0000296836983, -0.0000445255474, -0.0000445255474, + -0.0000148418491, +0.0000372262774, +0.0001038929440, +0.0001632603406, + +0.0002077858881, +0.0002153284672, +0.0001856447689, +0.0001262773723, + +0.0000296836983, -0.0000965936740, -0.0002450121655, -0.0003934306569, + -0.0005124087591, -0.0005642335766, -0.0005345498783, -0.0004233576642, + -0.0002450121655, -0.0000445255474, +0.0001262773723, +0.0002301703163, + +0.0002450121655, +0.0001856447689, +0.0000817518248, +0.0000000000000, + -0.0000372262774, +0.0000000000000, +0.0000965936740, +0.0002004866180, + +0.0002377128954, +0.0001632603406, -0.0000372262774, -0.0003340632603, + -0.0006311435523, -0.0008389294404, -0.0008909975669, -0.0007647201946, + -0.0004900243309, -0.0001411192214, +0.0001856447689, +0.0004454987835, + +0.0006163017032, +0.0006980535280, +0.0007350364964, +0.0007425790754, + +0.0007350364964, +0.0006608272506, +0.0005124087591, +0.0002525547445, + -0.0000817518248, -0.0004233576642, -0.0006905109489, -0.0008019464720, + -0.0007128953771, -0.0004454987835, -0.0000890510949, +0.0002450121655, + +0.0004751824818, +0.0005345498783, +0.0004454987835, +0.0002673965937, + +0.0000965936740, +0.0000223844282, +0.0000742092457, +0.0002377128954, + +0.0004454987835, +0.0006087591241, +0.0006608272506, +0.0005790754258, + +0.0004009732360, +0.0001929440389, +0.0000148418491, -0.0000890510949, + -0.0001335766423, -0.0001335766423, -0.0001187347932, -0.0001187347932, + -0.0001335766423, -0.0001335766423, -0.0001038929440, -0.0000520681265, + -0.0000223844282, -0.0000593673966, -0.0002077858881, -0.0004751824818, + -0.0007871046229, -0.0010394160584, -0.0010990267640, -0.0008688564477, + -0.0003564476886, +0.0003267639903, +0.0009948905109, +0.0014479318735, + +0.0015148418491, +0.0011732360097, +0.0004900243309, -0.0003637469586, + -0.0011953771290, -0.0018043795620, -0.0021681265207, -0.0022053527981, + -0.0020270072993, -0.0017968369830, -0.0012474452555, -0.0008909975669, + -0.0005124087591, -0.0000593673966, +0.0003416058394, +0.0004975669100, + +0.0004603406326, +0.0001632603406, -0.0002377128954, -0.0007277372263, + -0.0010469586375, -0.0012029197080, -0.0010990267640, -0.0008316301703, + -0.0004900243309, -0.0002895377129, -0.0003119221411, -0.0006683698297, + -0.0011211678832, -0.0016111922141, -0.0018489051095, -0.0017819951338, + -0.0012846715328, -0.0007425790754, -0.0003340632603, -0.0002895377129, + -0.0006683698297, -0.0013958637470, -0.0023834549878, -0.0031705596107, + -0.0039352798054, -0.0044849148418, -0.0047520681265, -0.0061927007299, + -0.0072545012165, -0.0064377128954, -0.0117391727494, -0.0032077858881, + -0.0139072992701, -0.0164839416058, +0.0107963503650, +0.0530009732360, + +0.0273693430657, -0.0973666666667, -0.1174815085158, -0.0292255474453, + -0.0016632603406, +0.0869343065693, +0.2263053527981, +0.2432941605839, + +0.1944883211679, +0.0872090024331, -0.0263075425791, -0.0628097323601, + -0.0949905109489, -0.0983318734793, -0.0663961070560, -0.0642503649635, + -0.0502686131387, -0.0482192214112, -0.0187262773723, +0.0372892944039, + +0.0546866180049, +0.0601218978102, +0.0607975669100, +0.0236715328467, + +0.0058583941606, +0.0056727493917, +0.0018413625304, +0.0113233576642, + +0.0026581508516, -0.0215182481752, -0.0327673965937, -0.0295447688564, + -0.0244289537713, -0.0080637469586, +0.0019454987835, +0.0065712895377, + +0.0089326034063, +0.0041581508516, +0.0051457420925, +0.0004900243309, + -0.0086355231144, -0.0047744525547, -0.0107815085158, -0.0255798053528, + -0.0173304136253, -0.0189936739659, -0.0248669099757, -0.0149321167883, + -0.0088063260341, -0.0054574209246, -0.0088211678832, -0.0115907542579, + -0.0088284671533, -0.0113827250608, -0.0082717761557, +0.0028513381995, + +0.0040094890511, +0.0065043795620, +0.0035270072993, +0.0014255474453, + +0.0080934306569, +0.0032892944039, +0.0018934306569, +0.0044552311436, + -0.0059180048662, -0.0196768856448, -0.0281340632603, -0.0248372262774, + -0.0158527980535, -0.0158900243309, -0.0149469586375, -0.0052941605839, + +0.0010618004866, +0.0094299270073, +0.0096452554745, +0.0079153284672, + +0.0075885644769, -0.0019527980535, -0.0079077858881, -0.0110931873479, + -0.0188452554745, -0.0179391727494, -0.0128454987835, -0.0116798053528, + -0.0075068126521, -0.0090958637470, -0.0106403892944, -0.0089771289538, + -0.0078708029197, -0.0043883211679, -0.0000593673966, -0.0022350364964, + -0.0046109489051, -0.0066454987835, -0.0118951338200, -0.0135435523114, + -0.0073805352798, +0.0009727493917, +0.0081973236010, +0.0096304136253, + +0.0054204379562, -0.0003637469586, -0.0080564476886, -0.0102839416058, + -0.0043734793187, +0.0013737226277, +0.0010693430657, -0.0030963503650, + -0.0056357664234, -0.0084126520681, -0.0128158150852, -0.0133727493917, + -0.0125931873479, -0.0122440389294, -0.0091403892944, -0.0056282238443, + -0.0035939172749, -0.0036309002433, -0.0030963503650, -0.0010245742092, + +0.0017598540146, +0.0062593673966, +0.0092815085158, +0.0107963503650, + +0.0139520681265, +0.0126377128954, +0.0068311435523, +0.0015369829684, + -0.0046184914842, -0.0088284671533, -0.0132094890511, -0.0162610705596, + -0.0138257907543, -0.0102245742092, -0.0069128953771, -0.0034379562044, + -0.0032968369830, -0.0023017031630, -0.0009579075426, -0.0008389294404, + +0.0011287104623, +0.0034155717762, +0.0048189781022, +0.0059922141119, + +0.0058956204380, +0.0065564476886, +0.0073583941606, +0.0059773722628, + +0.0047892944039, +0.0043734793187, +0.0035863746959, +0.0033041362530, + +0.0035566909976, +0.0032596107056, +0.0032447688564, +0.0045145985401, + +0.0063486618005, +0.0069277372263, +0.0062965936740, +0.0061406326034, + +0.0067866180049, +0.0067345498783, +0.0057620437956, +0.0035343065693, + +0.0023834549878, +0.0038313868613, +0.0047965936740, +0.0045961070560, + +0.0045664233577, +0.0050715328467, +0.0051309002433, +0.0035046228710, + +0.0012029197080, -0.0010245742092, -0.0009133819951, +0.0032671532847, + +0.0092815085158, +0.0135732360097, +0.0142637469586, +0.0118654501217, + +0.0093929440389, +0.0067124087591, +0.0032002433090, +0.0010024330900, + +0.0010321167883, +0.0014107055961, +0.0027474452555, +0.0050564476886, + +0.0063708029197, +0.0082270072993, +0.0099126520681, +0.0108260340633, + +0.0100313868613, +0.0076406326034, +0.0076257907543, +0.0091924574209, + +0.0073435523114, +0.0053017031630, +0.0053165450122, +0.0068386861314, + +0.0087914841849, +0.0068386861314, +0.0026063260341, +0.0004454987835, + -0.0001335766423, +0.0016335766423, +0.0048411192214, +0.0069871046229, + +0.0090437956204, +0.0099126520681, +0.0078484184915, +0.0050119221411, + +0.0031184914842, +0.0014107055961, +0.0003192214112, +0.0003340632603, + +0.0009800486618, +0.0031408759124, +0.0056357664234, +0.0073583941606, + +0.0081824817518, +0.0068014598540, +0.0044552311436, +0.0032523114355, + +0.0040987834550, +0.0051233576642, +0.0046705596107, +0.0051902676399, + +0.0057768856448, +0.0036457420925, +0.0012622871046, -0.0002746958637, + -0.0013661800487, -0.0023017031630, -0.0031184914842, -0.0028661800487, + -0.0010024330900, +0.0021608272506, +0.0050639902676, +0.0059328467153, + +0.0061182481752, +0.0066454987835, +0.0070836982968, +0.0060737226277, + +0.0030221411192, -0.0003934306569, -0.0030442822384, -0.0045145985401, + -0.0039725060827, -0.0013810218978, +0.0007871046229, +0.0010693430657, + +0.0013513381995, +0.0016484184915, +0.0010097323601, +0.0009875912409, + +0.0009727493917, -0.0000372262774, -0.0002895377129, -0.0000223844282, + +0.0002525547445, +0.0007277372263, +0.0001335766423, -0.0006683698297, + -0.0010841849148, -0.0013216545012, -0.0018858880779, -0.0032596107056, + -0.0036605839416, -0.0024948905109, -0.0015593673966, -0.0010766423358, + +0.0001929440389, +0.0008836982968, +0.0002895377129, -0.0001708029197, + -0.0015666666667, -0.0028289537713, -0.0032002433090, -0.0039725060827, + -0.0041878345499, -0.0045812652068, -0.0058956204380, -0.0057323600973, + -0.0049673965937, -0.0030739659367, -0.0001781021898, +0.0017671532847, + +0.0039576642336, +0.0047150851582, +0.0021978102190, -0.0011880778589, + -0.0044625304136, -0.0067345498783, -0.0068535279805, -0.0062965936740, + -0.0044922141119, -0.0016335766423, +0.0010394160584, +0.0018934306569, + +0.0004009732360, -0.0016929440389, -0.0030518248175, -0.0042992700730, + -0.0041802919708, -0.0027919708029, -0.0028141119221, -0.0027026763990, + -0.0018340632603, -0.0012399026764, -0.0002746958637, +0.0001411192214, + +0.0002377128954, -0.0006535279805, -0.0031854014599, -0.0039352798054, + -0.0033116788321, -0.0036236009732, -0.0032819951338, -0.0028437956204, + -0.0014700729927, +0.0008836982968, +0.0011953771290, +0.0009652068127, + -0.0007498783455, -0.0030369829684, -0.0028437956204, -0.0030369829684, + -0.0039131386861, -0.0035639902676, -0.0038982968370, -0.0031781021898, + -0.0017895377129, -0.0023537712895, -0.0021384428224, -0.0013440389294, + -0.0012399026764, -0.0003637469586, -0.0001038929440, -0.0008688564477, + -0.0005197080292, -0.0003192214112, -0.0002822384428, +0.0003861313869, + +0.0008240875912, +0.0012102189781, +0.0007795620438, +0.0006608272506, + +0.0016111922141, +0.0012698296837, +0.0004009732360, -0.0003564476886, + -0.0013885644769, -0.0019306569343, -0.0024131386861, -0.0020790754258, + -0.0017077858881, -0.0022053527981, -0.0012177615572, +0.0005866180049, + +0.0015890510949, +0.0021459854015, +0.0013588807786, +0.0001262773723, + -0.0005790754258, -0.0010990267640, -0.0008316301703, -0.0006756690998, + -0.0011435523114, -0.0012399026764, -0.0013588807786, -0.0013068126521, + -0.0004751824818, +0.0005048661800, +0.0011880778589, +0.0015518248175, + +0.0015890510949, +0.0016557177616, +0.0014034063260, +0.0008389294404, + +0.0008540145985, +0.0007201946472, +0.0006459854015, +0.0013588807786, + +0.0016260340633, +0.0011138686131, +0.0002895377129, -0.0007647201946, + -0.0010914841849, -0.0008761557178, -0.0012474452555, -0.0017598540146, + -0.0017523114355, -0.0013958637470, -0.0007128953771, -0.0000520681265, + +0.0005717761557, +0.0012474452555, +0.0012399026764, +0.0011656934307, + +0.0013291970803, +0.0007425790754, +0.0001411192214, -0.0004082725061, + -0.0004975669100, +0.0008985401460, +0.0020121654501, +0.0024873479319, + +0.0026729927007, +0.0020790754258, +0.0019603406326, +0.0016260340633, + +0.0006535279805, +0.0000593673966, -0.0009058394161, -0.0012102189781, + -0.0004381995134, +0.0005866180049, +0.0014182481752, +0.0012326034063, + +0.0010542579075, +0.0006832116788, -0.0009727493917, -0.0014107055961, + -0.0011063260341, -0.0017746958637, -0.0020642335766, -0.0016260340633, + -0.0009727493917, -0.0005124087591, -0.0003712895377, +0.0000445255474, + +0.0008688564477, +0.0013588807786, +0.0021905109489, +0.0031036496350, + +0.0027474452555, +0.0021608272506, +0.0012846715328, -0.0002377128954, + -0.0009800486618, -0.0011656934307, -0.0011211678832, -0.0006236009732, + -0.0006311435523, -0.0007574209246, -0.0007350364964, -0.0010841849148, + -0.0005345498783, +0.0003043795620, +0.0006163017032, +0.0010542579075, + +0.0013440389294, +0.0010990267640, +0.0000669099757, -0.0012698296837, + -0.0020863746959, -0.0022053527981, -0.0019306569343, -0.0013885644769, + -0.0005493917275, +0.0000965936740, +0.0003043795620, +0.0002525547445, + +0.0000000000000, -0.0004751824818, -0.0008240875912, -0.0007944038929, + -0.0005717761557, -0.0001781021898, -0.0001708029197, -0.0005345498783, + -0.0004233576642, -0.0005717761557, -0.0008464720195, -0.0007425790754, + -0.0012474452555, -0.0019231143552, -0.0022647201946, -0.0022868613139, + -0.0013364963504, -0.0007944038929, -0.0011508515815, -0.0012326034063, + -0.0015221411192, -0.0015815085158, -0.0013068126521, -0.0014627737226, + -0.0013958637470, -0.0013810218978, -0.0019751824818, -0.0023834549878, + -0.0026508515815, -0.0025245742092, -0.0017004866180, -0.0007795620438, + +0.0002004866180, +0.0008613138686, +0.0006014598540, +0.0004900243309, + +0.0007128953771, +0.0002822384428, -0.0008167883212, -0.0018413625304, + -0.0023092457421, -0.0028364963504, -0.0033041362530, -0.0032374695864, + -0.0033116788321, -0.0029180048662, -0.0017598540146, -0.0010618004866, + -0.0008389294404, -0.0013885644769, -0.0020270072993, -0.0019306569343, + -0.0019306569343, -0.0019900243309, -0.0017895377129, -0.0020939172749, + -0.0020863746959, -0.0017004866180, -0.0015593673966, -0.0011656934307, + -0.0008167883212, -0.0007425790754, -0.0005569343066, -0.0005048661800, + -0.0001708029197, +0.0003489051095, +0.0001559610706, -0.0003043795620, + -0.0009503649635, -0.0013440389294, -0.0007647201946, -0.0003489051095, + -0.0005197080292, -0.0007277372263, -0.0013661800487, -0.0016408759124, + -0.0014034063260, -0.0016632603406, -0.0013364963504, -0.0006535279805, + -0.0005790754258, -0.0004454987835, -0.0003934306569, -0.0004306569343, + -0.0005642335766, -0.0008985401460, -0.0009875912409, -0.0012622871046, + -0.0015890510949, -0.0006980535280, +0.0002822384428, +0.0003192214112, + +0.0002153284672, -0.0002153284672, -0.0008909975669, -0.0009206812652, + -0.0007201946472, -0.0007574209246, -0.0007944038929, -0.0007201946472, + -0.0006311435523, -0.0005717761557, -0.0006608272506, -0.0004233576642, + +0.0000965936740, +0.0000372262774, -0.0002746958637, -0.0007277372263, + -0.0013440389294, -0.0014107055961, -0.0008985401460, -0.0004306569343, + -0.0002525547445, -0.0007277372263, -0.0012698296837, -0.0018116788321, + -0.0022944038929, -0.0020939172749, -0.0018340632603, -0.0015742092457, + -0.0007574209246, -0.0001038929440, -0.0002004866180, -0.0004900243309, + -0.0006014598540, -0.0005642335766, -0.0002822384428, +0.0001856447689, + +0.0006311435523, +0.0010024330900, +0.0011508515815, +0.0008909975669, + -0.0000669099757, -0.0011360097324, -0.0013513381995, -0.0010172749392, + -0.0006980535280, -0.0004306569343, -0.0007201946472, -0.0010990267640, + -0.0009503649635, -0.0006014598540, -0.0000965936740, -0.0000148418491, + -0.0003416058394, -0.0004827250608, -0.0005717761557, -0.0008167883212, + -0.0008909975669, -0.0004233576642, +0.0003192214112, +0.0003267639903, + +0.0002153284672, +0.0005939172749, +0.0004603406326, -0.0000148418491, + -0.0008240875912, -0.0016408759124, -0.0017226277372, -0.0010542579075, + +0.0002077858881, +0.0010766423358, +0.0013588807786, +0.0017598540146, + +0.0013216545012, +0.0002377128954, -0.0006459854015, -0.0010618004866, + -0.0004678832117, +0.0000669099757, +0.0003934306569, +0.0009282238443, + +0.0004530413625, -0.0002746958637, -0.0002153284672, -0.0001038929440, + -0.0000296836983, +0.0003043795620, +0.0007277372263, +0.0008540145985, + +0.0002153284672, -0.0002153284672, -0.0000148418491, -0.0000148418491, + +0.0001856447689, +0.0008836982968, +0.0010618004866, +0.0008985401460, + +0.0010024330900, +0.0011287104623, +0.0012995133820, +0.0017598540146, + +0.0021532846715, +0.0019379562044, +0.0010394160584, +0.0000890510949, + -0.0003340632603, -0.0003637469586, -0.0000593673966, +0.0000075425791, + -0.0003267639903, -0.0002228710462, +0.0004530413625, +0.0010172749392, + +0.0012474452555, +0.0011211678832, +0.0010097323601, +0.0009727493917, + +0.0008688564477, +0.0006980535280, +0.0004678832117, +0.0007574209246, + +0.0012474452555, +0.0013364963504, +0.0014107055961, +0.0013513381995, + +0.0011435523114, +0.0013513381995, +0.0015518248175, +0.0015963503650, + +0.0014700729927, +0.0011508515815, +0.0010618004866, +0.0011583941606, + +0.0012547445255, +0.0015666666667, +0.0021012165450, +0.0026805352798, + +0.0026953771290, +0.0017153284672, +0.0004678832117, -0.0001632603406, + -0.0003340632603, -0.0004306569343, -0.0000075425791, +0.0004454987835, + +0.0006535279805, +0.0009579075426, +0.0011435523114, +0.0012698296837, + +0.0013513381995, +0.0011656934307, +0.0012029197080, +0.0012250608273, + +0.0011583941606, +0.0011732360097, +0.0012995133820, +0.0017819951338, + +0.0019824817518, +0.0018340632603, +0.0016111922141, +0.0011138686131, + +0.0008092457421, +0.0009206812652, +0.0012919708029, +0.0019306569343, + +0.0020345498783, +0.0017968369830, +0.0016557177616, +0.0011211678832, + +0.0006683698297, +0.0007574209246, +0.0008761557178, +0.0010693430657, + +0.0012250608273, +0.0008613138686, +0.0002673965937, -0.0003119221411, + -0.0004975669100, -0.0000445255474, +0.0006236009732, +0.0013143552311, + +0.0016408759124, +0.0014330900243, +0.0012846715328, +0.0011732360097, + +0.0007647201946, +0.0004530413625, +0.0004603406326, +0.0008240875912, + +0.0011732360097, +0.0013440389294, +0.0014107055961, +0.0015666666667, + +0.0016111922141, +0.0011287104623, +0.0004381995134, +0.0001335766423, + +0.0000817518248, +0.0003043795620, +0.0005939172749, +0.0004381995134, + +0.0002822384428, +0.0003416058394, +0.0005420924574, +0.0009282238443, + +0.0008985401460, +0.0004827250608, +0.0003712895377, +0.0004381995134, + +0.0002673965937, -0.0000372262774, -0.0000520681265, +0.0001114355231, + +0.0000296836983, -0.0002450121655, -0.0004751824818, -0.0001632603406, + +0.0005272506083, +0.0008389294404, +0.0006163017032, +0.0002822384428, + +0.0002153284672, +0.0002004866180, -0.0001335766423, -0.0004975669100, + -0.0007425790754, -0.0004975669100, +0.0005717761557, +0.0014403892944, + +0.0015890510949, +0.0009875912409, -0.0001632603406, -0.0011211678832, + -0.0014776155718, -0.0014255474453, -0.0009948905109, -0.0003340632603, + +0.0003267639903, +0.0006980535280, +0.0005642335766, +0.0004975669100, + +0.0006608272506, +0.0005717761557, +0.0001114355231, -0.0005197080292, + -0.0009282238443, -0.0006535279805, -0.0000593673966, +0.0002895377129, + +0.0003934306569, +0.0004454987835, +0.0004082725061, +0.0002077858881, + +0.0002004866180, +0.0001632603406, -0.0001114355231, +0.0000148418491, + +0.0002228710462, -0.0003340632603, -0.0004678832117, -0.0004009732360, + -0.0009206812652, -0.0008389294404, -0.0007201946472, -0.0003785888078, + +0.0000148418491, -0.0002301703163, +0.0001708029197, +0.0000372262774, + -0.0008316301703, -0.0005197080292, -0.0004009732360, -0.0009282238443, + -0.0005717761557, -0.0004306569343, -0.0003119221411, +0.0001262773723, + +0.0002746958637, +0.0003489051095, +0.0002228710462, +0.0006756690998, + +0.0010024330900, +0.0004530413625, +0.0001856447689, +0.0000965936740, + -0.0002895377129, +0.0001038929440, +0.0004900243309, +0.0002077858881, + -0.0003192214112, -0.0008389294404, -0.0007574209246, -0.0001632603406, + +0.0005790754258, +0.0012919708029, +0.0017004866180, +0.0014034063260, + +0.0007201946472, +0.0000965936740, -0.0000817518248, -0.0001262773723, + +0.0001335766423, +0.0007647201946, +0.0008464720195, +0.0006683698297, + +0.0004530413625, -0.0000890510949, -0.0003043795620, -0.0000742092457, + +0.0000223844282, +0.0004233576642, +0.0012399026764, +0.0016705596107, + +0.0015593673966, +0.0011508515815, +0.0006386861314, +0.0003267639903, + +0.0001484184915, +0.0000890510949, +0.0003489051095, +0.0005717761557, + +0.0007201946472, +0.0009355231144, +0.0009133819951, +0.0010542579075, + +0.0012547445255, +0.0009430656934, +0.0007277372263, +0.0006087591241, + +0.0001781021898, -0.0000742092457, +0.0001262773723, +0.0004678832117, + +0.0007425790754, +0.0008240875912, +0.0009282238443, +0.0010914841849, + +0.0011953771290, +0.0011138686131, +0.0008688564477, +0.0005569343066, + +0.0002077858881, +0.0000075425791, -0.0000520681265, -0.0000075425791, + +0.0001187347932, +0.0003564476886, +0.0009355231144, +0.0014182481752, + +0.0014851581509, +0.0014924574209, +0.0013737226277, +0.0010841849148, + +0.0006311435523, +0.0003712895377, +0.0007201946472, +0.0012029197080, + +0.0012995133820, +0.0012622871046, +0.0009503649635, +0.0005939172749, + +0.0004454987835, +0.0004678832117, +0.0004530413625, +0.0003637469586, + +0.0003043795620, +0.0003861313869, +0.0007350364964, +0.0009206812652, + +0.0007795620438, +0.0006535279805, +0.0005939172749, +0.0004603406326, + +0.0004454987835, +0.0004827250608, +0.0009133819951, +0.0014107055961, + +0.0014403892944, +0.0012771289538, +0.0008389294404, +0.0002895377129, + +0.0000669099757, -0.0001038929440, -0.0002077858881, +0.0000000000000, + +0.0001335766423, +0.0000742092457, -0.0000372262774, -0.0002301703163, + -0.0002525547445, -0.0000817518248, +0.0000669099757, +0.0001781021898, + +0.0000445255474, -0.0002746958637, -0.0003416058394, -0.0003564476886, + -0.0004158150852, -0.0001632603406, +0.0001038929440, +0.0002673965937, + +0.0002077858881, -0.0000223844282, -0.0001708029197, -0.0001559610706, + +0.0000593673966, +0.0002153284672, +0.0000593673966, -0.0001335766423, + -0.0002970802920, -0.0005272506083, -0.0005345498783, -0.0004082725061, + -0.0004158150852, -0.0004678832117, -0.0003712895377, -0.0002377128954, + -0.0001781021898, -0.0001038929440, -0.0002598540146, -0.0005717761557, + -0.0008167883212, -0.0007277372263, -0.0003489051095, +0.0000445255474, + +0.0002598540146, +0.0002673965937, +0.0000817518248, -0.0003267639903, + -0.0006163017032, -0.0005866180049, -0.0004009732360, -0.0002970802920, + -0.0002970802920, -0.0005642335766, -0.0009579075426, -0.0010914841849, + -0.0009206812652, -0.0006386861314, -0.0004678832117, -0.0003416058394, + -0.0002153284672, -0.0001262773723, +0.0000075425791, +0.0000372262774, + -0.0003712895377, -0.0006905109489, -0.0005939172749, -0.0002228710462, + +0.0000669099757, +0.0001559610706, +0.0001335766423, -0.0000075425791, + -0.0001929440389, -0.0003119221411, -0.0004454987835, -0.0004900243309, + -0.0002077858881, +0.0001856447689, +0.0002673965937, -0.0000372262774, + -0.0002970802920, -0.0005866180049, -0.0008688564477, -0.0008240875912, + -0.0006608272506, -0.0004900243309, -0.0004454987835, -0.0007647201946, + -0.0009133819951, -0.0007201946472, -0.0004306569343, -0.0001262773723, + -0.0000075425791, -0.0000223844282, -0.0000223844282, -0.0001781021898, + -0.0003637469586, -0.0005345498783, -0.0006386861314, -0.0003861313869, + -0.0002673965937, -0.0003712895377, -0.0002153284672, -0.0002077858881, + -0.0002895377129, -0.0003192214112, -0.0006386861314, -0.0008389294404, + -0.0008985401460, -0.0009058394161, -0.0007201946472, -0.0007944038929, + -0.0009727493917, -0.0006608272506, -0.0005124087591, -0.0005866180049, + -0.0006311435523, -0.0007647201946, -0.0007350364964, -0.0006832116788, + -0.0006535279805, -0.0005124087591, -0.0005790754258, -0.0006980535280, + -0.0006683698297, -0.0007277372263, -0.0007574209246, -0.0006905109489, + -0.0005493917275, -0.0003267639903, -0.0002450121655, -0.0003416058394, + -0.0005642335766, -0.0008240875912, -0.0007574209246, -0.0005420924574, + -0.0005272506083, -0.0005717761557, -0.0006311435523, -0.0008092457421, + -0.0008909975669, -0.0006980535280, -0.0005345498783, -0.0006311435523, + -0.0006535279805, -0.0006608272506, -0.0007277372263, -0.0006608272506, + -0.0006535279805, -0.0008167883212, -0.0009058394161, -0.0009282238443, + -0.0007350364964, -0.0004082725061, -0.0002004866180, -0.0001114355231, + -0.0002673965937, -0.0003489051095, -0.0002598540146, -0.0003934306569, + -0.0006014598540, -0.0008092457421, -0.0010024330900, -0.0010618004866, + -0.0011953771290, -0.0011583941606, -0.0007944038929, -0.0006087591241, + -0.0005939172749, -0.0005939172749, -0.0008464720195, -0.0009800486618, + -0.0009282238443, -0.0007053527981, -0.0002153284672, -0.0000148418491, + -0.0002153284672, -0.0003712895377, -0.0005790754258, -0.0008761557178, + -0.0009282238443, -0.0008019464720, -0.0005939172749, -0.0004827250608, + -0.0004975669100, -0.0005493917275, -0.0007277372263, -0.0008688564477, + -0.0009355231144, -0.0010245742092, -0.0008464720195, -0.0005197080292, + -0.0004751824818, -0.0005197080292, -0.0005197080292, -0.0006311435523, + -0.0006980535280, -0.0006756690998, -0.0005642335766, -0.0004603406326, + -0.0004678832117, -0.0005197080292, -0.0006014598540, -0.0007647201946, + -0.0007647201946, -0.0007350364964, -0.0008167883212, -0.0007795620438, + -0.0006535279805, -0.0004306569343, -0.0002228710462, -0.0001484184915, + -0.0000372262774, +0.0000148418491, -0.0001708029197, -0.0004306569343, + -0.0007053527981, -0.0007944038929, -0.0006459854015, -0.0005939172749, + -0.0007871046229, -0.0010542579075, -0.0011508515815, -0.0009206812652, + -0.0006683698297, -0.0005420924574, -0.0004530413625, -0.0005569343066, + -0.0006905109489, -0.0006756690998, -0.0005124087591, -0.0001856447689, + -0.0000372262774, -0.0002228710462, -0.0004900243309, -0.0007871046229, + -0.0007795620438, -0.0004082725061, -0.0001708029197, -0.0000593673966, + -0.0002450121655, -0.0005345498783, -0.0005493917275, -0.0004530413625, + -0.0003416058394, -0.0001187347932, -0.0000075425791, -0.0000742092457, + -0.0003119221411, -0.0005790754258, -0.0007128953771, -0.0008909975669, + -0.0008688564477, -0.0006311435523, -0.0004381995134, -0.0003267639903, + -0.0002525547445, -0.0002450121655, -0.0002598540146, -0.0002525547445, + -0.0001411192214, -0.0000223844282, +0.0000520681265, +0.0002153284672, + +0.0002822384428, +0.0002377128954, +0.0001632603406, +0.0000372262774, + -0.0001559610706, -0.0004975669100, -0.0008688564477, -0.0010766423358, + -0.0009875912409, -0.0006535279805, -0.0002228710462, +0.0002377128954, + +0.0005569343066, +0.0004530413625, +0.0001484184915, -0.0001929440389, + -0.0005717761557, -0.0007722627737, -0.0007795620438, -0.0006459854015, + -0.0005124087591, -0.0004454987835, -0.0002822384428, -0.0000965936740, + -0.0000148418491, +0.0001335766423, +0.0002077858881, +0.0001262773723, + +0.0001411192214, +0.0001038929440, -0.0001856447689, -0.0003785888078, + -0.0003861313869, -0.0004678832117, -0.0004306569343, -0.0001632603406, + +0.0001262773723, +0.0004082725061, +0.0004381995134, +0.0002598540146, + +0.0000000000000, -0.0003712895377, -0.0005124087591, -0.0003712895377, + -0.0002301703163, -0.0000445255474, +0.0000593673966, +0.0000445255474, + +0.0001114355231, +0.0002153284672, +0.0003267639903, +0.0003340632603, + +0.0002153284672, +0.0001781021898, +0.0001187347932, +0.0000742092457, + +0.0002822384428, +0.0005420924574, +0.0006608272506, +0.0005717761557, + +0.0004158150852, +0.0003340632603, +0.0002525547445, +0.0002895377129, + +0.0004158150852, +0.0003934306569, +0.0002525547445, +0.0000742092457, + -0.0000445255474, -0.0000669099757, -0.0000148418491, +0.0001114355231, + +0.0002970802920, +0.0004306569343, +0.0004233576642, +0.0003785888078, + +0.0004306569343, +0.0004082725061, +0.0003712895377, +0.0003861313869, + +0.0003119221411, +0.0002746958637, +0.0004454987835, +0.0006535279805, + +0.0007574209246, +0.0006756690998, +0.0004306569343, +0.0001781021898, + +0.0000890510949, +0.0001708029197, +0.0002895377129, +0.0003564476886, + +0.0003934306569, +0.0004900243309, +0.0006087591241, +0.0007350364964, + +0.0006683698297, +0.0003785888078, +0.0001708029197, +0.0001708029197, + +0.0002301703163, +0.0002673965937, +0.0002970802920, +0.0003340632603, + +0.0004530413625, +0.0005717761557, +0.0006459854015, +0.0005939172749, + +0.0004233576642, +0.0003416058394, +0.0003192214112, +0.0002746958637, + +0.0002450121655, +0.0002377128954, +0.0001484184915, +0.0000593673966, + +0.0001114355231, +0.0002004866180, +0.0001559610706, +0.0000965936740, + +0.0001929440389, +0.0004082725061, +0.0006087591241, +0.0005939172749, + +0.0003192214112, -0.0000593673966, -0.0002525547445, -0.0000817518248, + +0.0002228710462, +0.0004009732360, +0.0004530413625, +0.0004454987835, + +0.0004082725061, +0.0003934306569, +0.0003785888078, +0.0004009732360, + +0.0004975669100, +0.0005124087591, +0.0002970802920, +0.0000965936740, + +0.0000445255474, +0.0000075425791, +0.0002077858881, +0.0005124087591, + +0.0006163017032, +0.0005939172749, +0.0003861313869, +0.0001632603406, + +0.0001781021898, +0.0003119221411, +0.0004381995134, +0.0005197080292, + +0.0004381995134, +0.0003861313869, +0.0005124087591, +0.0005569343066, + +0.0003934306569, +0.0002153284672, +0.0001781021898, +0.0003192214112, + +0.0006459854015, +0.0009206812652, +0.0008540145985, +0.0005939172749, + +0.0003785888078, +0.0001929440389, +0.0000669099757, +0.0000742092457, + +0.0001856447689, +0.0004009732360, +0.0005272506083, +0.0004751824818, + +0.0005197080292, +0.0006756690998, +0.0006832116788, +0.0005569343066, + +0.0003564476886, +0.0001559610706, +0.0001262773723, +0.0002377128954, + +0.0003416058394, +0.0003785888078, +0.0004082725061, +0.0004009732360, + +0.0003489051095, +0.0003192214112, +0.0002525547445, +0.0002746958637, + +0.0003119221411, +0.0001856447689, +0.0000372262774, -0.0000593673966, + -0.0000445255474, +0.0002228710462, +0.0004678832117, +0.0006459854015, + +0.0007128953771, +0.0004233576642, +0.0001781021898, +0.0001781021898, + +0.0001114355231, +0.0000075425791, +0.0000742092457, +0.0002450121655, + +0.0003489051095, +0.0002450121655, +0.0000000000000, -0.0001856447689, + -0.0001484184915, +0.0002004866180, +0.0007128953771, +0.0010990267640, + +0.0011656934307, +0.0010766423358, +0.0008836982968, +0.0006014598540, + +0.0003416058394, +0.0001187347932, +0.0001708029197, +0.0003416058394, + +0.0003785888078, +0.0004158150852, +0.0004306569343, +0.0003340632603, + +0.0002450121655, +0.0001559610706, +0.0001335766423, +0.0001632603406, + +0.0000890510949, +0.0001559610706, +0.0004827250608, +0.0007425790754, + +0.0007871046229, +0.0005345498783, +0.0002377128954, +0.0002301703163, + +0.0004306569343, +0.0006756690998, +0.0008836982968, +0.0007425790754, + +0.0003934306569, +0.0002450121655, +0.0002895377129, +0.0004233576642, + +0.0005717761557, +0.0006832116788, +0.0008092457421, +0.0008761557178, + +0.0007722627737, +0.0006014598540, +0.0004751824818, +0.0004233576642, + +0.0002598540146, +0.0001187347932, +0.0002377128954, +0.0004158150852, + +0.0005124087591, +0.0006980535280, +0.0009058394161, +0.0008240875912, + +0.0005569343066, +0.0003489051095, +0.0002377128954, +0.0001929440389, + +0.0001411192214, +0.0001484184915, +0.0003119221411, +0.0004233576642, + +0.0003043795620, +0.0000742092457, -0.0001781021898, -0.0002525547445, + -0.0001187347932, +0.0000445255474, +0.0002822384428, +0.0004009732360, + +0.0004454987835, +0.0006756690998, +0.0007871046229, +0.0005717761557, + +0.0003119221411, +0.0001262773723, +0.0000075425791, -0.0000372262774, + -0.0000593673966, +0.0000148418491, +0.0000296836983, -0.0000445255474, + -0.0001038929440, -0.0000890510949, +0.0000817518248, +0.0003489051095, + +0.0004306569343, +0.0003712895377, +0.0002598540146, +0.0001708029197, + +0.0001187347932, +0.0000742092457, +0.0000520681265, +0.0000890510949, + +0.0001781021898, +0.0003861313869, +0.0006087591241, +0.0006459854015, + +0.0004454987835, +0.0001708029197, +0.0000372262774, -0.0000445255474, + -0.0000965936740, +0.0000000000000, +0.0001484184915, +0.0003267639903, + +0.0003712895377, +0.0002228710462, +0.0000965936740, -0.0000075425791, + -0.0001187347932, -0.0000445255474, +0.0000223844282, +0.0000148418491, + +0.0001335766423, +0.0002228710462, +0.0002450121655, +0.0003192214112, + +0.0004082725061, +0.0004603406326, +0.0004530413625, +0.0003637469586, + +0.0003119221411, +0.0001187347932, -0.0000669099757, -0.0000148418491, + +0.0000445255474, +0.0000890510949, +0.0002004866180, +0.0003043795620, + +0.0004158150852, +0.0004975669100, +0.0004530413625, +0.0002895377129, + +0.0001187347932, +0.0001781021898, +0.0003267639903, +0.0002377128954, + +0.0000593673966, -0.0001262773723, -0.0002228710462, -0.0002004866180, + -0.0002450121655, -0.0002598540146, -0.0000593673966, +0.0002004866180, + +0.0003267639903, +0.0003267639903, +0.0002301703163, +0.0001559610706, + +0.0000593673966, +0.0000445255474, +0.0001632603406, +0.0001708029197, + +0.0000742092457, +0.0000223844282, -0.0000965936740, -0.0002377128954, + -0.0002673965937, -0.0002895377129, -0.0002895377129, -0.0001262773723, + +0.0000890510949, +0.0002598540146, +0.0003489051095, +0.0002228710462, + -0.0000148418491, -0.0001856447689, -0.0004009732360, -0.0005790754258, + -0.0005272506083, -0.0002598540146, +0.0000000000000, +0.0001114355231, + +0.0001559610706, +0.0001781021898, +0.0000817518248, -0.0000445255474, + -0.0000593673966, -0.0000445255474, -0.0000520681265, -0.0001038929440, + -0.0001559610706, -0.0002895377129, -0.0004158150852, -0.0003416058394, + -0.0001929440389, -0.0001856447689, -0.0002822384428, -0.0003267639903, + -0.0003416058394, -0.0003712895377, -0.0003043795620, -0.0001187347932, + -0.0000148418491, +0.0000742092457, +0.0002153284672, +0.0002301703163, + +0.0000742092457, -0.0001559610706, -0.0003564476886, -0.0004530413625, + -0.0004381995134, -0.0003340632603, -0.0003192214112, -0.0003861313869, + -0.0003340632603, -0.0002673965937, -0.0002077858881, -0.0001484184915, + -0.0001856447689, -0.0002746958637, -0.0002822384428, -0.0003416058394, + -0.0004009732360, -0.0003340632603, -0.0002598540146, -0.0002077858881, + -0.0001484184915, -0.0001262773723, -0.0001411192214, -0.0001708029197, + -0.0001262773723, -0.0000669099757, -0.0000965936740, -0.0000593673966, + -0.0001114355231, -0.0004233576642, -0.0007498783455, -0.0009503649635, + -0.0009133819951, -0.0006608272506, -0.0004827250608, -0.0003267639903, + -0.0002004866180, -0.0001929440389, -0.0000965936740, -0.0000075425791, + -0.0000817518248, -0.0001856447689, -0.0002301703163, -0.0002004866180, + -0.0002077858881, -0.0003192214112, -0.0003416058394, -0.0002970802920, + -0.0003267639903, -0.0002673965937, -0.0001484184915, -0.0001708029197, + -0.0001484184915, -0.0001411192214, -0.0003712895377, -0.0005866180049, + -0.0006832116788, -0.0007053527981, -0.0006608272506, -0.0005790754258, + -0.0004975669100, -0.0004751824818, -0.0005124087591, -0.0004678832117, + -0.0003192214112, -0.0001187347932, +0.0000372262774, +0.0000372262774, + -0.0001708029197, -0.0004975669100, -0.0006905109489, -0.0006608272506, + -0.0005345498783, -0.0003340632603, -0.0001559610706, -0.0001929440389, + -0.0003119221411, -0.0003637469586, -0.0003637469586, -0.0003785888078, + -0.0004082725061, -0.0004678832117, -0.0005493917275, -0.0005790754258, + -0.0004827250608, -0.0004009732360, -0.0003267639903, -0.0001187347932, + +0.0000075425791, -0.0000593673966, -0.0002004866180, -0.0003192214112, + -0.0004009732360, -0.0005048661800, -0.0006163017032, -0.0006087591241, + -0.0004751824818, -0.0003637469586, -0.0003489051095, -0.0003416058394, + -0.0003043795620, -0.0002377128954, -0.0002525547445, -0.0002895377129, + -0.0002153284672, -0.0001114355231, -0.0001038929440, -0.0001262773723, + -0.0001708029197, -0.0002598540146, -0.0003637469586, -0.0005569343066, + -0.0006683698297, -0.0006386861314, -0.0006311435523, -0.0006386861314, + -0.0006014598540, -0.0004975669100, -0.0003192214112, -0.0001929440389, + -0.0002153284672, -0.0002895377129, -0.0003785888078, -0.0004082725061, + -0.0003564476886, -0.0002228710462, -0.0001114355231, -0.0000965936740, + -0.0001187347932, -0.0001632603406, -0.0002377128954, -0.0003043795620, + -0.0003340632603, -0.0003564476886, -0.0003712895377, -0.0003192214112, + -0.0002228710462, -0.0001929440389, -0.0002077858881, -0.0002746958637, + -0.0003564476886, -0.0003785888078, -0.0004233576642, -0.0004530413625, + -0.0004454987835, -0.0003637469586, -0.0002377128954, -0.0002377128954, + -0.0002970802920, -0.0002746958637, -0.0001114355231, +0.0000445255474, + +0.0000223844282, -0.0000223844282, -0.0000075425791, -0.0000445255474, + -0.0000296836983, +0.0000296836983, +0.0000520681265, +0.0000593673966, + -0.0000148418491, -0.0000148418491, +0.0000445255474, -0.0000669099757, + -0.0002598540146, -0.0004751824818, -0.0006311435523, -0.0005345498783, + -0.0003043795620, -0.0001038929440, +0.0000817518248, +0.0002004866180, + +0.0002673965937, +0.0002377128954, +0.0001632603406, +0.0000445255474, + -0.0001114355231, -0.0002004866180, -0.0002228710462, -0.0002301703163, + -0.0002228710462, -0.0001114355231, +0.0001038929440, +0.0002377128954, + +0.0002153284672, +0.0001411192214, +0.0000890510949, +0.0000000000000, + -0.0001484184915, -0.0002970802920, -0.0003416058394, -0.0002673965937, + -0.0001632603406, -0.0001411192214, -0.0000817518248, +0.0000000000000, + +0.0000223844282, +0.0001262773723, +0.0001262773723, -0.0000075425791, + -0.0000817518248, -0.0001781021898, -0.0002228710462, -0.0001187347932, + +0.0000075425791, +0.0002077858881, +0.0002895377129, +0.0001559610706, + +0.0000296836983, -0.0000742092457, -0.0001038929440, -0.0001187347932, + -0.0001335766423, +0.0000669099757, +0.0002895377129, +0.0003416058394, + +0.0002895377129, +0.0001335766423, +0.0000000000000, -0.0000817518248, + -0.0001335766423, -0.0000669099757, -0.0000075425791, +0.0000223844282, + +0.0000445255474, -0.0000223844282, -0.0000890510949, -0.0000372262774, + +0.0000742092457, +0.0001335766423, +0.0000372262774, -0.0000593673966, + -0.0000520681265, -0.0000593673966, +0.0000148418491, +0.0001929440389, + +0.0002746958637, +0.0002525547445, +0.0002746958637, +0.0003192214112, + +0.0002077858881, +0.0000669099757, +0.0000296836983, +0.0000296836983, + +0.0000296836983, +0.0000296836983, +0.0000372262774, +0.0000593673966, + +0.0000223844282, +0.0000890510949, +0.0002377128954, +0.0002377128954, + +0.0001484184915, +0.0000669099757, -0.0000445255474, -0.0001187347932, + -0.0002301703163, -0.0003119221411, -0.0003043795620, -0.0002004866180, + -0.0000296836983, +0.0001856447689, +0.0003416058394, +0.0003861313869, + +0.0003564476886, +0.0003340632603, +0.0003267639903, +0.0002970802920, + +0.0001484184915, +0.0000372262774, -0.0000372262774, -0.0002450121655, + -0.0004381995134, -0.0004900243309, -0.0004381995134, -0.0002673965937, + -0.0000372262774, +0.0001781021898, +0.0003564476886, +0.0004678832117, + +0.0004751824818, +0.0003192214112, +0.0001335766423, +0.0000520681265, + -0.0000075425791, -0.0000593673966, -0.0000669099757, -0.0001038929440, + -0.0001335766423, -0.0001114355231, +0.0000000000000, +0.0002153284672, + +0.0003785888078, +0.0004381995134, +0.0004381995134, +0.0003712895377, + +0.0002301703163, +0.0001114355231, +0.0000965936740, +0.0001335766423, + +0.0000965936740, +0.0000075425791, -0.0000296836983, +0.0000075425791, + +0.0000965936740, +0.0001262773723, +0.0001262773723, +0.0000445255474, + -0.0001038929440, -0.0001559610706, -0.0001114355231, +0.0000075425791, + +0.0002004866180, +0.0003043795620, +0.0003416058394, +0.0003934306569, + +0.0003267639903, +0.0002525547445, +0.0001929440389, +0.0000223844282, + -0.0000669099757, -0.0000445255474, +0.0000075425791, +0.0000520681265, + -0.0000148418491, -0.0001335766423, -0.0001335766423, -0.0000965936740, + -0.0000742092457, +0.0000000000000, +0.0001335766423, +0.0002673965937, + +0.0003340632603, +0.0002970802920, +0.0001781021898, +0.0001335766423, + +0.0001411192214, +0.0001484184915, +0.0001484184915, +0.0000445255474, + +0.0000075425791, +0.0000520681265, +0.0000223844282, +0.0000296836983, + -0.0000075425791, -0.0001559610706, -0.0002598540146, -0.0002673965937, + -0.0000890510949, +0.0001411192214, +0.0002525547445, +0.0002746958637, + +0.0001781021898, +0.0000890510949, +0.0001262773723, +0.0001335766423, + +0.0000817518248, +0.0000372262774, -0.0000372262774, +0.0000000000000, + +0.0001411192214, +0.0002301703163, +0.0002822384428, +0.0003267639903, + +0.0002822384428, +0.0001929440389, +0.0000372262774, -0.0001187347932, + -0.0000965936740, +0.0000520681265, +0.0002228710462, +0.0002895377129, + +0.0002004866180, +0.0001114355231, +0.0000817518248, +0.0000965936740, + +0.0001411192214, +0.0001929440389, +0.0002970802920, +0.0003861313869, + +0.0002746958637, +0.0001632603406, +0.0001781021898, +0.0002895377129, + +0.0004082725061, +0.0004454987835, +0.0003934306569, +0.0003043795620, + +0.0001708029197, +0.0000148418491, -0.0001038929440, -0.0001559610706, + -0.0000965936740, +0.0000965936740, +0.0003192214112, +0.0004233576642, + +0.0004082725061, +0.0003267639903, +0.0002450121655, +0.0002598540146, + +0.0002301703163, +0.0001114355231, +0.0000593673966, +0.0001262773723, + +0.0002377128954, +0.0003785888078, +0.0004751824818, +0.0004751824818, + +0.0004082725061, +0.0002895377129, +0.0002077858881, +0.0001781021898, + +0.0002228710462, +0.0003340632603, +0.0004530413625, +0.0005866180049, + +0.0006236009732, +0.0004381995134, +0.0002377128954, +0.0000965936740, + +0.0000890510949, +0.0002525547445, +0.0004381995134, +0.0006236009732, + +0.0007277372263, +0.0006683698297, +0.0006014598540, +0.0005569343066, + +0.0004827250608, +0.0003416058394, +0.0001484184915, -0.0000445255474, + -0.0001335766423, -0.0000965936740, +0.0000223844282, +0.0001114355231, + +0.0001114355231, +0.0001632603406, +0.0002525547445, +0.0002673965937, + +0.0002525547445, +0.0002746958637, +0.0003192214112, +0.0004158150852, + +0.0004530413625, +0.0003785888078, +0.0002895377129, +0.0002004866180, + +0.0001114355231, +0.0000742092457, +0.0000593673966, +0.0000817518248, + +0.0001559610706, +0.0002153284672, +0.0001929440389, +0.0000445255474, + -0.0000742092457, -0.0000817518248, +0.0000223844282, +0.0001856447689, + +0.0002895377129, +0.0003416058394, +0.0003564476886, +0.0003192214112, + +0.0002450121655, +0.0001781021898, +0.0002004866180, +0.0002004866180, + +0.0000520681265, -0.0000669099757, -0.0000890510949, -0.0000593673966, + +0.0000520681265, +0.0002004866180, +0.0002895377129, +0.0003267639903, + +0.0003043795620, +0.0002746958637, +0.0002077858881, +0.0000742092457, + -0.0000742092457, -0.0001856447689, -0.0002301703163, -0.0002077858881, + -0.0001262773723, -0.0000296836983, -0.0000148418491, -0.0000372262774, + -0.0000445255474, -0.0000742092457, -0.0000890510949, -0.0000075425791, + +0.0000593673966, +0.0000148418491, -0.0000742092457, -0.0001187347932, + -0.0001632603406, -0.0002077858881, -0.0001708029197, -0.0000372262774, + +0.0000593673966, +0.0000520681265, -0.0000593673966, -0.0001929440389, + -0.0002228710462, -0.0001335766423, -0.0000669099757, -0.0000520681265, + -0.0000742092457, -0.0001187347932, -0.0001632603406, -0.0002077858881, + -0.0001559610706, -0.0000445255474, -0.0000520681265, -0.0001187347932, + -0.0001632603406, -0.0002153284672, -0.0002004866180, -0.0001262773723, + -0.0000593673966, -0.0000223844282, -0.0000223844282, -0.0000742092457, + -0.0000817518248, -0.0000296836983, +0.0000223844282, +0.0000445255474, + -0.0000296836983, -0.0001708029197, -0.0002970802920, -0.0003712895377, + -0.0003564476886, -0.0002450121655, -0.0000669099757, +0.0000445255474, + +0.0000445255474, +0.0000372262774, -0.0000075425791, -0.0000742092457, + -0.0000890510949, -0.0000965936740, -0.0001038929440, -0.0000890510949, + -0.0000520681265, -0.0000075425791, -0.0000890510949, -0.0002895377129, + -0.0004233576642, -0.0005048661800, -0.0005420924574, -0.0003934306569, + -0.0000890510949, +0.0001484184915, +0.0003043795620, +0.0003712895377, + +0.0003267639903, +0.0002228710462, +0.0000817518248, -0.0000372262774, + -0.0000890510949, -0.0000445255474, -0.0000520681265, -0.0001632603406, + -0.0002525547445, -0.0002746958637, -0.0002228710462, -0.0000669099757, + +0.0001114355231, +0.0002450121655, +0.0002377128954, +0.0000593673966, + -0.0000965936740, -0.0001335766423, -0.0001114355231, +0.0000296836983, + +0.0002301703163, +0.0002895377129, +0.0001559610706, +0.0000000000000, + -0.0000148418491, +0.0000148418491, -0.0000372262774, -0.0000742092457, + -0.0000669099757, -0.0000593673966, +0.0000520681265, +0.0001856447689, + +0.0002153284672, +0.0002077858881, +0.0001484184915, +0.0000817518248, + +0.0000669099757, +0.0000223844282, -0.0000148418491, -0.0000148418491, + +0.0000372262774, +0.0001335766423, +0.0001484184915, +0.0001262773723, + +0.0001632603406, +0.0001335766423, +0.0000445255474, -0.0000148418491, + +0.0000000000000, +0.0000520681265, +0.0000223844282, -0.0000372262774, + -0.0000223844282, +0.0000000000000, -0.0000296836983, -0.0000445255474, + -0.0000372262774, -0.0000520681265, -0.0000742092457, -0.0000148418491, + +0.0000296836983, +0.0000520681265, +0.0001335766423, +0.0002301703163, + +0.0002598540146, +0.0002153284672, +0.0000965936740, -0.0000372262774, + -0.0000965936740, -0.0001187347932, -0.0001781021898, -0.0002301703163, + -0.0002004866180, -0.0000669099757, +0.0000520681265, +0.0000965936740, + +0.0001262773723, +0.0001262773723, +0.0000669099757, +0.0000000000000, + -0.0001411192214, -0.0002301703163, -0.0002301703163, -0.0001929440389, + -0.0000742092457, +0.0000148418491, +0.0000000000000, +0.0000000000000, + -0.0000296836983, -0.0000890510949, -0.0001335766423, -0.0002153284672, + -0.0002228710462, -0.0001411192214, -0.0001038929440, -0.0000742092457, + +0.0000000000000, +0.0000742092457, +0.0000965936740, +0.0000890510949, + +0.0000223844282, -0.0001262773723, -0.0002450121655, -0.0002673965937, + -0.0002598540146, -0.0002746958637, -0.0002450121655, -0.0001187347932, + +0.0000372262774, +0.0001781021898, +0.0002450121655, +0.0001856447689, + +0.0000742092457, -0.0000742092457, -0.0002450121655, -0.0003489051095, + -0.0003861313869, -0.0003637469586, -0.0002598540146, -0.0001856447689, + -0.0001632603406, -0.0001484184915, -0.0000817518248, +0.0000000000000, + -0.0000372262774, -0.0001411192214, -0.0002077858881, -0.0002525547445, + -0.0002673965937, -0.0002525547445, -0.0002525547445, -0.0002598540146, + -0.0002228710462, -0.0001335766423, -0.0000817518248, -0.0001038929440, + -0.0001262773723, -0.0000965936740, -0.0000890510949, -0.0001335766423, + -0.0001411192214, -0.0001262773723, -0.0001559610706, -0.0001781021898, + -0.0001708029197, -0.0001929440389, -0.0002746958637, -0.0003637469586, + -0.0003712895377, -0.0003119221411, -0.0002450121655, -0.0002153284672, + -0.0001114355231, +0.0000817518248, +0.0002301703163, +0.0002301703163, + +0.0001187347932, -0.0000148418491, -0.0000445255474, +0.0000000000000, + -0.0000223844282, -0.0001038929440, -0.0001632603406, -0.0001484184915, + -0.0000742092457, -0.0000372262774, -0.0000593673966, -0.0001038929440, + -0.0001632603406, -0.0001929440389, -0.0002525547445, -0.0003119221411, + -0.0002598540146, -0.0001335766423, +0.0000000000000, +0.0000593673966, + +0.0000593673966, +0.0000296836983, -0.0000296836983, -0.0000520681265, + -0.0000296836983, -0.0000148418491, +0.0000000000000, -0.0000148418491, + -0.0000075425791, +0.0000148418491, -0.0000223844282, -0.0000593673966, + -0.0000520681265, -0.0000445255474, -0.0000445255474, -0.0001187347932, + -0.0002450121655, -0.0002598540146, -0.0001929440389, -0.0000965936740, + -0.0000223844282, +0.0000000000000, +0.0000445255474, +0.0000520681265, + +0.0000075425791, -0.0000296836983, -0.0000593673966, -0.0000669099757, + -0.0000742092457, -0.0000890510949, -0.0001262773723, -0.0001632603406, + -0.0001559610706, -0.0000817518248, -0.0000520681265, -0.0000890510949, + -0.0001262773723, -0.0001262773723, -0.0001335766423, -0.0001335766423, + -0.0001411192214, -0.0001708029197, -0.0002004866180, -0.0001929440389, + -0.0001929440389, -0.0001708029197, -0.0000742092457, +0.0000000000000, + -0.0000148418491, -0.0000520681265, -0.0000372262774, -0.0000223844282, + -0.0000445255474, -0.0000742092457, -0.0001187347932, -0.0001929440389, + -0.0001856447689, -0.0001411192214, -0.0001187347932, -0.0000742092457, + -0.0000223844282, +0.0000075425791, +0.0000075425791, -0.0000372262774, + -0.0000593673966, -0.0000148418491, +0.0000372262774, +0.0000593673966, + +0.0000296836983, +0.0000000000000, -0.0000669099757, -0.0001929440389, + -0.0002525547445, -0.0002673965937, -0.0001856447689, -0.0000223844282, + +0.0000965936740, +0.0001708029197, +0.0001632603406, +0.0000445255474, + -0.0000445255474, -0.0000965936740, -0.0001484184915, -0.0001187347932, + -0.0000593673966, -0.0000223844282, +0.0000075425791, +0.0000000000000, + -0.0000075425791, +0.0000296836983, +0.0000890510949, +0.0001114355231, + +0.0001038929440, +0.0000890510949, +0.0001187347932, +0.0001335766423, + +0.0000817518248, +0.0000296836983, -0.0000148418491, -0.0000593673966, + -0.0000296836983, +0.0000372262774, +0.0000593673966, +0.0000669099757, + +0.0000669099757, +0.0000000000000, -0.0000965936740, -0.0001559610706, + -0.0001038929440, +0.0000223844282, +0.0001335766423, +0.0001632603406, + +0.0000965936740, +0.0000000000000, -0.0000296836983, -0.0000372262774, + -0.0000372262774, -0.0000296836983, -0.0000593673966, -0.0000593673966, + +0.0000000000000, +0.0000742092457, +0.0001187347932, +0.0001038929440, + +0.0000445255474, +0.0000000000000, -0.0000223844282, -0.0000520681265, + -0.0000742092457, -0.0000742092457, -0.0000817518248, -0.0000372262774, + +0.0000223844282, +0.0000148418491, -0.0000372262774, -0.0000520681265, + +0.0000075425791, +0.0001335766423, +0.0001708029197, +0.0001262773723, + +0.0000445255474, -0.0000372262774, -0.0000890510949, -0.0000965936740, + -0.0000817518248, -0.0000520681265, -0.0000742092457, -0.0001038929440, + -0.0000669099757, -0.0000223844282, +0.0000445255474, +0.0001335766423, + +0.0001411192214, +0.0000817518248, +0.0000296836983, -0.0000223844282, + -0.0000593673966, -0.0000593673966, -0.0000148418491, +0.0000742092457, + +0.0001187347932, +0.0000965936740, +0.0000669099757, +0.0000148418491, + -0.0000223844282, +0.0000075425791, +0.0001114355231, +0.0001559610706, + +0.0000890510949, +0.0000148418491, -0.0000148418491, -0.0000445255474, + -0.0000593673966, -0.0000817518248, -0.0000742092457, +0.0000000000000, + +0.0000445255474, +0.0000593673966, +0.0000890510949, +0.0001187347932, + +0.0001484184915, +0.0001411192214, +0.0001484184915, +0.0001708029197, + +0.0000890510949, -0.0000593673966, -0.0001632603406, -0.0001559610706, + -0.0001187347932, -0.0000817518248, -0.0000075425791, +0.0000742092457, + +0.0001335766423, +0.0001856447689, +0.0001559610706, +0.0000445255474, + -0.0000075425791, -0.0000075425791, +0.0000000000000, +0.0000296836983, + +0.0001038929440, +0.0002077858881, +0.0002450121655, +0.0001781021898, + +0.0000669099757, +0.0000000000000, -0.0000593673966, -0.0000669099757, + +0.0000075425791, +0.0001411192214, +0.0002746958637, +0.0003416058394, + +0.0002822384428, +0.0001929440389, +0.0001262773723, +0.0000965936740, + +0.0001335766423, +0.0001335766423, +0.0000742092457, +0.0000372262774, + +0.0000075425791, +0.0000000000000, -0.0000148418491, -0.0000445255474, + -0.0000520681265, -0.0000075425791, +0.0000817518248, +0.0001559610706, + +0.0001632603406, +0.0001559610706, +0.0001114355231, +0.0000520681265, + +0.0000075425791, -0.0000296836983, -0.0000669099757, -0.0000965936740, + -0.0000817518248, -0.0000148418491, +0.0000445255474, +0.0001411192214, + +0.0002077858881, +0.0001708029197, +0.0000890510949, +0.0000075425791, + -0.0000520681265, -0.0000223844282, +0.0000520681265, +0.0000669099757, + +0.0000669099757, +0.0000742092457, +0.0000669099757, +0.0000742092457, + +0.0001114355231, +0.0001559610706, +0.0001856447689, +0.0001856447689, + +0.0001559610706, +0.0001262773723, +0.0000520681265, +0.0000000000000, + +0.0000000000000, +0.0000075425791, +0.0000075425791, +0.0000148418491, + +0.0000223844282, +0.0000296836983, +0.0000296836983, +0.0000148418491, + +0.0000445255474, +0.0001559610706, +0.0002895377129, +0.0003785888078, + +0.0003192214112, +0.0001484184915, -0.0000075425791, -0.0000890510949, + -0.0000890510949, -0.0000223844282, +0.0000148418491, +0.0000372262774, + +0.0000742092457, +0.0000890510949, +0.0000965936740, +0.0001484184915, + +0.0001929440389, +0.0001856447689, +0.0001262773723, +0.0000296836983, + -0.0000296836983, -0.0000296836983, -0.0000148418491, +0.0000000000000, + +0.0000075425791, -0.0000296836983, -0.0001038929440, -0.0001484184915, + -0.0001038929440, +0.0000000000000, +0.0001335766423, +0.0002450121655, + +0.0002822384428, +0.0002301703163, +0.0001262773723, +0.0000148418491, + -0.0000372262774, +0.0000000000000, +0.0000817518248, +0.0001187347932, + +0.0000817518248, +0.0000372262774, +0.0000075425791, -0.0000075425791, + +0.0000148418491, +0.0000669099757, +0.0000890510949, +0.0000965936740, + +0.0000965936740, +0.0000445255474, -0.0000148418491, -0.0000223844282, + +0.0000742092457, +0.0002077858881, +0.0002377128954, +0.0001187347932, + -0.0000372262774, -0.0001335766423, -0.0001411192214, -0.0000965936740, + -0.0000148418491, +0.0000593673966, +0.0001335766423, +0.0001708029197, + +0.0001632603406, +0.0001187347932, +0.0000296836983, -0.0000669099757, + -0.0001262773723, -0.0001484184915, -0.0001335766423, -0.0000593673966, + +0.0000445255474, +0.0001484184915, +0.0001856447689, +0.0001484184915, + +0.0000817518248, +0.0000372262774, +0.0000148418491, +0.0000223844282, + +0.0000445255474, +0.0000372262774, +0.0000000000000, -0.0000296836983, + -0.0000520681265, -0.0000445255474, -0.0000148418491, +0.0000075425791, + -0.0000372262774, -0.0001187347932, -0.0001484184915, -0.0000520681265, + +0.0001262773723, +0.0002822384428, +0.0003119221411, +0.0002301703163, + +0.0000965936740, -0.0000372262774, -0.0001114355231, -0.0000593673966, + +0.0000445255474, +0.0001559610706, +0.0001856447689, +0.0001632603406, + +0.0001484184915, +0.0000890510949, +0.0000372262774, +0.0000148418491, + -0.0000445255474, -0.0001335766423, -0.0001929440389, -0.0001929440389, + -0.0001262773723, -0.0000148418491, +0.0001262773723, +0.0001856447689, + +0.0001559610706, +0.0000965936740, +0.0000445255474, +0.0000148418491, + +0.0000148418491, +0.0000223844282, +0.0000223844282, -0.0000075425791, + -0.0000669099757, -0.0000965936740, -0.0000669099757, +0.0000223844282, + +0.0000965936740, +0.0000520681265, +0.0000000000000, -0.0000075425791, + +0.0000075425791, +0.0000593673966, +0.0000742092457, +0.0000593673966, + +0.0000148418491, -0.0000669099757, -0.0001484184915, -0.0001781021898, + -0.0001781021898, -0.0001484184915, -0.0001187347932, -0.0000593673966, + +0.0000148418491, +0.0000593673966, +0.0000669099757, +0.0000593673966, + +0.0000669099757, +0.0001335766423, +0.0002153284672, +0.0002004866180, + +0.0000742092457, -0.0000742092457, -0.0001632603406, -0.0001708029197, + -0.0001632603406, -0.0001335766423, -0.0000445255474, +0.0000445255474, + +0.0000890510949, +0.0001114355231, +0.0001187347932, +0.0001262773723, + +0.0000890510949, +0.0000075425791, -0.0001114355231, -0.0002077858881, + -0.0002228710462, -0.0001781021898, -0.0000817518248, +0.0000669099757, + +0.0001929440389, +0.0002822384428, +0.0002970802920, +0.0002746958637, + +0.0002525547445, +0.0002077858881, +0.0001262773723, +0.0000075425791, + -0.0001484184915, -0.0002377128954, -0.0002301703163, -0.0001632603406, + -0.0000742092457, +0.0000148418491, +0.0000890510949, +0.0001262773723, + +0.0001559610706, +0.0001708029197, +0.0001411192214, +0.0000742092457, + +0.0000223844282, +0.0000000000000, -0.0000372262774, -0.0000296836983, + +0.0000223844282, +0.0000890510949, +0.0001708029197, +0.0002153284672, + +0.0001929440389, +0.0001484184915, +0.0001038929440, +0.0000372262774, + -0.0000445255474, -0.0001411192214, -0.0001708029197, -0.0001187347932, + -0.0000593673966, +0.0000000000000, +0.0000593673966, +0.0000965936740, + +0.0001114355231, +0.0000742092457, +0.0000148418491, -0.0000075425791, + -0.0000075425791, +0.0000372262774, +0.0001114355231, +0.0001187347932, + +0.0000817518248, +0.0000445255474, +0.0000520681265, +0.0000817518248, + +0.0000742092457, +0.0000445255474, +0.0000296836983, +0.0000445255474, + +0.0000742092457, +0.0000817518248, +0.0000593673966, +0.0000296836983, + -0.0000445255474, -0.0001262773723, -0.0001632603406, -0.0001411192214, + -0.0000817518248, -0.0000075425791, -0.0000075425791, -0.0000372262774, + -0.0000742092457, -0.0001038929440, -0.0000965936740, -0.0000593673966, + -0.0000148418491, +0.0000000000000, +0.0000075425791, -0.0000075425791, + -0.0000223844282, +0.0000000000000, +0.0000445255474, +0.0001038929440, + +0.0001411192214, +0.0001411192214, +0.0001038929440, +0.0000520681265, + +0.0000445255474, +0.0000372262774, +0.0000000000000, -0.0000075425791, + -0.0000075425791, -0.0000520681265, -0.0001114355231, -0.0001335766423, + -0.0001038929440, -0.0000223844282, +0.0000520681265, +0.0000817518248, + +0.0000890510949, +0.0000742092457, +0.0000669099757, +0.0000669099757, + +0.0000223844282, -0.0000445255474, -0.0001038929440, -0.0000890510949, + -0.0000075425791, +0.0000223844282, +0.0000223844282, +0.0000520681265, + +0.0000520681265, +0.0000223844282, +0.0000148418491, -0.0000075425791, + -0.0000593673966, -0.0000890510949, -0.0000890510949, -0.0000890510949, + -0.0001187347932, -0.0001038929440, -0.0000520681265, -0.0000296836983, + -0.0000296836983, -0.0000148418491, +0.0000148418491, +0.0000372262774, + +0.0000075425791, +0.0000000000000, -0.0000296836983, -0.0001038929440, + -0.0001632603406, -0.0001929440389, -0.0001335766423, -0.0000296836983, + +0.0000000000000, +0.0000000000000, -0.0000372262774, -0.0000593673966, + -0.0000593673966, -0.0000593673966, -0.0000669099757, -0.0000593673966, + -0.0000520681265, -0.0000520681265, -0.0001038929440, -0.0001708029197, + -0.0002153284672, -0.0002377128954, -0.0002377128954, -0.0001929440389, + -0.0001187347932, -0.0000669099757, -0.0000669099757, -0.0000817518248, + -0.0000890510949, -0.0001038929440, -0.0001187347932, -0.0001187347932, + -0.0001114355231, -0.0000965936740, -0.0000742092457, -0.0000890510949, + -0.0001262773723, -0.0001484184915, -0.0001411192214, -0.0001262773723, + -0.0001114355231, -0.0001262773723, -0.0001632603406, -0.0001632603406, + -0.0001484184915, -0.0001335766423, -0.0001038929440, -0.0000817518248, + -0.0000669099757, -0.0000520681265, -0.0000372262774, -0.0000520681265, + -0.0001187347932, -0.0001708029197, -0.0001632603406, -0.0001856447689, + -0.0002301703163, -0.0002228710462, -0.0001632603406, -0.0000742092457, + +0.0000223844282, +0.0000593673966, +0.0000669099757, +0.0000372262774, + -0.0000223844282, -0.0000445255474, -0.0000742092457, -0.0001708029197, + -0.0002228710462, -0.0002525547445, -0.0002746958637, -0.0002228710462, + -0.0001559610706, -0.0000593673966, +0.0000296836983, +0.0000223844282, + -0.0000148418491, -0.0000593673966, -0.0000742092457, -0.0000148418491, + +0.0000445255474, +0.0000593673966, +0.0000223844282, -0.0000669099757, + -0.0001484184915, -0.0001708029197, -0.0001856447689, -0.0001632603406, + -0.0001262773723, -0.0000817518248, -0.0000372262774, -0.0000372262774, + -0.0000372262774, +0.0000000000000 +}; diff --git a/plugins/LadspaEffect/swh/impulses/15-fender-superchamp-ui87.h b/plugins/LadspaEffect/swh/impulses/15-fender-superchamp-ui87.h new file mode 100644 index 000000000..2c184ab02 --- /dev/null +++ b/plugins/LadspaEffect/swh/impulses/15-fender-superchamp-ui87.h @@ -0,0 +1,790 @@ +float fender_superchamp_ui87[] = { + +0.0000000000000, +0.0000000000000, -0.0000124489796, -0.0000124489796, + +0.0000000000000, +0.0000373469388, +0.0001120408163, +0.0001869387755, + +0.0002428571429, +0.0002055102041, +0.0001183673469, +0.0000000000000, + -0.0001120408163, -0.0001869387755, -0.0002055102041, -0.0001432653061, + -0.0000124489796, +0.0001369387755, +0.0002926530612, +0.0003985714286, + +0.0004173469388, +0.0003487755102, +0.0001993877551, +0.0000124489796, + -0.0001369387755, -0.0002242857143, -0.0002179591837, -0.0001183673469, + +0.0000312244898, +0.0001742857143, +0.0002616326531, +0.0002616326531, + +0.0001930612245, +0.0000934693878, +0.0000063265306, -0.0000187755102, + +0.0000187755102, +0.0001059183673, +0.0002055102041, +0.0002553061224, + +0.0002428571429, +0.0001681632653, +0.0000497959184, -0.0000561224490, + -0.0001308163265, -0.0001369387755, -0.0000871428571, -0.0000063265306, + +0.0000810204082, +0.0001557142857, +0.0001993877551, +0.0002055102041, + +0.0001869387755, +0.0001493877551, +0.0000995918367, +0.0000497959184, + +0.0000124489796, +0.0000000000000, +0.0000000000000, +0.0000312244898, + +0.0000995918367, +0.0001742857143, +0.0002367346939, +0.0002740816327, + +0.0002616326531, +0.0002055102041, +0.0001120408163, +0.0000124489796, + -0.0000622448980, -0.0001059183673, -0.0001059183673, -0.0000685714286, + -0.0000063265306, +0.0000685714286, +0.0001432653061, +0.0002055102041, + +0.0002491836735, +0.0002740816327, +0.0002865306122, +0.0002926530612, + +0.0002926530612, +0.0002926530612, +0.0002740816327, +0.0002304081633, + +0.0001493877551, +0.0000312244898, -0.0000934693878, -0.0002118367347, + -0.0002802040816, -0.0002740816327, -0.0001806122449, -0.0000436734694, + +0.0000995918367, +0.0002118367347, +0.0002740816327, +0.0002802040816, + +0.0002616326531, +0.0002367346939, +0.0002428571429, +0.0002802040816, + +0.0003175510204, +0.0003300000000, +0.0002740816327, +0.0001432653061, + -0.0000436734694, -0.0002367346939, -0.0003800000000, -0.0004234693878, + -0.0003675510204, -0.0002242857143, -0.0000497959184, +0.0001059183673, + +0.0002179591837, +0.0002802040816, +0.0003051020408, +0.0003175510204, + +0.0003363265306, +0.0003800000000, +0.0004234693878, +0.0004422448980, + +0.0004048979592, +0.0002865306122, +0.0000934693878, -0.0001618367347, + -0.0004234693878, -0.0006353061224, -0.0007287755102, -0.0006602040816, + -0.0004359183673, -0.0000934693878, +0.0002677551020, +0.0005606122449, + +0.0007100000000, +0.0006787755102, +0.0005044897959, +0.0002677551020, + +0.0000746938776, -0.0000312244898, -0.0000312244898, +0.0000000000000, + +0.0000124489796, -0.0000373469388, -0.0001493877551, -0.0002740816327, + -0.0003363265306, -0.0002865306122, -0.0001557142857, -0.0000124489796, + +0.0000810204082, +0.0000746938776, -0.0000063265306, -0.0000934693878, + -0.0000934693878, +0.0000312244898, +0.0002491836735, +0.0004359183673, + +0.0004732653061, +0.0002926530612, -0.0000810204082, -0.0005044897959, + -0.0007910204082, -0.0007910204082, -0.0004920408163, +0.0000000000000, + +0.0004857142857, +0.0007785714286, +0.0007473469388, +0.0004608163265, + +0.0000312244898, -0.0003363265306, -0.0006040816327, -0.0007597959184, + -0.0007224489796, -0.0008159183673, -0.0009030612245, -0.0008718367347, + -0.0006787755102, -0.0002926530612, +0.0002428571429, +0.0007971428571, + +0.0011957142857, +0.0012330612245, +0.0008969387755, +0.0003424489796, + -0.0002367346939, -0.0006414285714, -0.0008344897959, -0.0008159183673, + -0.0008034693878, -0.0008718367347, -0.0010900000000, -0.0012891836735, + -0.0013826530612, -0.0012020408163, -0.0008532653061, -0.0003551020408, + +0.0000000000000, +0.0000746938776, -0.0000995918367, -0.0003861224490, + -0.0006477551020, -0.0007785714286, -0.0005855102041, -0.0005481632653, + -0.0005667346939, -0.0013140816327, -0.0021548979592, -0.0037057142857, + -0.0049824489796, -0.0062904081633, -0.0072308163265, -0.0094044897959, + -0.0072993877551, -0.0138075510204, -0.0030330612245, -0.0133281632653, + -0.0246942857143, +0.0027902040816, +0.0544459183673, +0.0320932653061, + -0.0956757142857, -0.1275697959184, -0.0306608163265, +0.0084016326531, + +0.0812826530612, +0.2040691836735, +0.2002326530612, +0.1623100000000, + +0.0831573469388, -0.0095226530612, -0.0398534693878, -0.0714795918367, + -0.0870561224490, -0.0555295918367, -0.0589487755102, -0.0438457142857, + -0.0178744897959, +0.0066951020408, +0.0477008163265, +0.0553800000000, + +0.0518300000000, +0.0558471428571, +0.0315763265306, +0.0187216326531, + +0.0105006122449, -0.0076106122449, -0.0059104081633, -0.0186220408163, + -0.0288795918367, -0.0231995918367, -0.0170836734694, -0.0058044897959, + +0.0000124489796, -0.0093920408163, -0.0076606122449, +0.0011832653061, + +0.0031202040816, +0.0112291836735, +0.0091677551020, -0.0036495918367, + -0.0080467346939, -0.0097344897959, -0.0183230612245, -0.0085075510204, + -0.0107993877551, -0.0236853061224, -0.0122320408163, -0.0138761224490, + -0.0169279591837, -0.0099463265306, -0.0093857142857, -0.0079469387755, + -0.0065581632653, -0.0100644897959, +0.0011397959184, +0.0058481632653, + +0.0073989795918, +0.0098340816327, +0.0032261224490, +0.0038426530612, + +0.0017438775510, +0.0035936734694, +0.0075981632653, -0.0005293877551, + -0.0072993877551, -0.0104008163265, -0.0171022448980, -0.0207083673469, + -0.0168781632653, -0.0100459183673, -0.0008283673469, +0.0019742857143, + +0.0043908163265, +0.0030704081633, +0.0001557142857, -0.0002367346939, + -0.0000124489796, -0.0042538775510, -0.0106873469388, -0.0096534693878, + -0.0108181632653, -0.0110673469388, -0.0099463265306, -0.0104008163265, + -0.0128920408163, -0.0151528571429, -0.0129357142857, -0.0030579591837, + +0.0002677551020, -0.0040793877551, -0.0064895918367, -0.0103324489796, + -0.0093295918367, -0.0066826530612, -0.0044218367347, -0.0007473469388, + -0.0002677551020, +0.0024600000000, +0.0052067346939, -0.0024851020408, + -0.0079593877551, -0.0085387755102, -0.0097906122449, -0.0046585714286, + -0.0005916326531, -0.0013577551020, -0.0038116326531, -0.0086881632653, + -0.0116714285714, -0.0125432653061, -0.0134587755102, -0.0128671428571, + -0.0134714285714, -0.0120014285714, -0.0080777551020, -0.0079034693878, + -0.0062716326531, -0.0019806122449, +0.0011334693878, +0.0024912244898, + +0.0022669387755, +0.0032946938776, +0.0043222448980, +0.0025722448980, + +0.0031575510204, +0.0043161224490, +0.0032697959184, +0.0012891836735, + -0.0029210204082, -0.0078597959184, -0.0127614285714, -0.0153771428571, + -0.0134028571429, -0.0105689795918, -0.0081587755102, -0.0054432653061, + -0.0031140816327, -0.0013140816327, -0.0019244897959, -0.0026095918367, + -0.0007661224490, +0.0015259183673, +0.0037244897959, +0.0053312244898, + +0.0048018367347, +0.0036932653061, +0.0015881632653, -0.0009777551020, + -0.0008283673469, +0.0000436734694, +0.0002989795918, +0.0013826530612, + +0.0024787755102, +0.0028336734694, +0.0022483673469, +0.0017126530612, + +0.0028336734694, +0.0039859183673, +0.0054681632653, +0.0081900000000, + +0.0075546938776, +0.0047957142857, +0.0027963265306, +0.0016442857143, + +0.0021051020408, +0.0014636734694, +0.0005106122449, +0.0003175510204, + -0.0010026530612, -0.0008344897959, -0.0002865306122, +0.0000622448980, + +0.0028648979592, +0.0055118367347, +0.0069442857143, +0.0075920408163, + +0.0068383673469, +0.0061532653061, +0.0063463265306, +0.0065644897959, + +0.0055306122449, +0.0037804081633, +0.0012144897959, -0.0000561224490, + +0.0013826530612, +0.0021236734694, +0.0042163265306, +0.0073428571429, + +0.0076979591837, +0.0080716326531, +0.0087069387755, +0.0072930612245, + +0.0054744897959, +0.0036310204082, +0.0031763265306, +0.0037057142857, + +0.0048579591837, +0.0071810204082, +0.0086444897959, +0.0091055102041, + +0.0077228571429, +0.0047395918367, +0.0036371428571, +0.0017126530612, + -0.0005230612245, +0.0016816326531, +0.0041291836735, +0.0056177551020, + +0.0070438775510, +0.0059665306122, +0.0040295918367, +0.0025597959184, + +0.0014885714286, +0.0021175510204, +0.0025473469388, +0.0024975510204, + +0.0027589795918, +0.0025722448980, +0.0035873469388, +0.0069257142857, + +0.0088563265306, +0.0081089795918, +0.0071622448980, +0.0053063265306, + +0.0019930612245, -0.0008408163265, -0.0018185714286, -0.0009218367347, + +0.0004173469388, +0.0007910204082, -0.0000248979592, -0.0014200000000, + -0.0019244897959, -0.0000373469388, +0.0021175510204, +0.0027902040816, + +0.0035500000000, +0.0039734693878, +0.0023106122449, +0.0012269387755, + +0.0017065306122, +0.0018808163265, +0.0021861224490, +0.0023791836735, + +0.0023355102041, +0.0031202040816, +0.0045775510204, +0.0051755102041, + +0.0040232653061, +0.0016318367347, +0.0000312244898, -0.0002677551020, + +0.0003051020408, +0.0017126530612, +0.0023355102041, +0.0007412244898, + -0.0014263265306, -0.0028587755102, -0.0027902040816, -0.0014263265306, + +0.0004234693878, +0.0018746938776, +0.0022171428571, +0.0022295918367, + +0.0026842857143, +0.0022359183673, +0.0003487755102, -0.0015134693878, + -0.0026032653061, -0.0029708163265, -0.0019557142857, +0.0006165306122, + +0.0012393877551, -0.0001369387755, -0.0008842857143, -0.0017438775510, + -0.0038863265306, -0.0039424489796, -0.0028836734694, -0.0021424489796, + -0.0008408163265, -0.0006663265306, -0.0007412244898, -0.0009467346939, + -0.0018310204082, -0.0019306122449, -0.0013016326531, -0.0006851020408, + +0.0006975510204, +0.0006289795918, -0.0002677551020, -0.0014012244898, + -0.0028587755102, -0.0034753061224, -0.0036122448980, -0.0024475510204, + -0.0001244897959, +0.0009840816327, +0.0013951020408, +0.0009467346939, + -0.0009218367347, -0.0011771428571, -0.0011522448980, -0.0018559183673, + -0.0016816326531, -0.0010026530612, -0.0001493877551, +0.0007971428571, + +0.0011024489796, +0.0009965306122, +0.0001681632653, +0.0003985714286, + +0.0007661224490, -0.0005418367347, -0.0011273469388, -0.0011024489796, + -0.0014512244898, -0.0019681632653, -0.0031824489796, -0.0032510204082, + -0.0024040816327, -0.0017189795918, +0.0000436734694, +0.0010587755102, + -0.0002491836735, -0.0016130612245, -0.0024102040816, -0.0029085714286, + -0.0028463265306, -0.0026157142857, -0.0021922448980, -0.0012642857143, + -0.0002118367347, +0.0005169387755, +0.0008344897959, +0.0005979591837, + +0.0006663265306, +0.0006353061224, -0.0007722448980, -0.0018559183673, + -0.0018871428571, -0.0024538775510, -0.0025846938776, -0.0017624489796, + -0.0001993877551, +0.0011210204082, +0.0013140816327, +0.0023044897959, + +0.0033008163265, +0.0031140816327, +0.0026281632653, +0.0014512244898, + +0.0003487755102, -0.0004732653061, -0.0011522448980, -0.0005916326531, + +0.0000124489796, +0.0003736734694, +0.0009218367347, +0.0017875510204, + +0.0028836734694, +0.0029022448980, +0.0022483673469, +0.0009155102041, + -0.0008220408163, -0.0006975510204, -0.0003114285714, -0.0000124489796, + +0.0008593877551, +0.0006912244898, -0.0000063265306, -0.0004732653061, + -0.0005855102041, -0.0000746938776, -0.0002118367347, -0.0002989795918, + +0.0008657142857, +0.0015881632653, +0.0024040816327, +0.0032822448980, + +0.0035873469388, +0.0034379591837, +0.0020863265306, +0.0004608163265, + -0.0002367346939, -0.0003424489796, -0.0000373469388, +0.0001308163265, + -0.0000248979592, +0.0003051020408, +0.0004920408163, -0.0002616326531, + -0.0009902040816, -0.0013328571429, -0.0014324489796, -0.0009965306122, + -0.0002616326531, +0.0002553061224, +0.0005293877551, +0.0004359183673, + +0.0008034693878, +0.0015757142857, +0.0020055102041, +0.0023355102041, + +0.0031140816327, +0.0034379591837, +0.0029832653061, +0.0025285714286, + +0.0015071428571, +0.0006353061224, +0.0008095918367, +0.0010900000000, + +0.0015569387755, +0.0019806122449, +0.0021424489796, +0.0024975510204, + +0.0018622448980, +0.0007597959184, +0.0003424489796, -0.0003612244898, + -0.0002865306122, +0.0001369387755, -0.0000934693878, +0.0001557142857, + -0.0003612244898, -0.0008283673469, -0.0001742857143, -0.0001120408163, + +0.0001681632653, +0.0006851020408, +0.0008159183673, +0.0009902040816, + +0.0008034693878, +0.0015383673469, +0.0028087755102, +0.0030704081633, + +0.0028026530612, +0.0015632653061, +0.0001059183673, -0.0003363265306, + -0.0002553061224, +0.0002926530612, +0.0008034693878, +0.0006975510204, + +0.0006104081633, +0.0008095918367, +0.0010651020408, +0.0008842857143, + +0.0009716326531, +0.0011459183673, +0.0009030612245, +0.0006165306122, + +0.0000124489796, -0.0003487755102, -0.0008718367347, -0.0016442857143, + -0.0020863265306, -0.0025224489796, -0.0019430612245, -0.0004110204082, + +0.0008532653061, +0.0023106122449, +0.0032883673469, +0.0036185714286, + +0.0032697959184, +0.0020428571429, +0.0012955102041, +0.0006602040816, + +0.0000248979592, -0.0002865306122, -0.0006414285714, -0.0007224489796, + -0.0007785714286, -0.0010712244898, -0.0007597959184, -0.0003051020408, + -0.0000934693878, -0.0001930612245, +0.0001120408163, +0.0004173469388, + -0.0005667346939, -0.0013887755102, -0.0016628571429, -0.0014324489796, + -0.0007785714286, -0.0007036734694, -0.0009404081633, -0.0013887755102, + -0.0024787755102, -0.0030081632653, -0.0028275510204, -0.0019742857143, + -0.0002616326531, +0.0013638775510, +0.0023728571429, +0.0024414285714, + +0.0016130612245, +0.0003363265306, -0.0008842857143, -0.0016318367347, + -0.0021175510204, -0.0024475510204, -0.0025597959184, -0.0023169387755, + -0.0015881632653, -0.0011771428571, -0.0005606122449, +0.0000622448980, + -0.0001869387755, -0.0002802040816, -0.0004297959184, -0.0008969387755, + -0.0010524489796, -0.0011024489796, -0.0011957142857, -0.0014263265306, + -0.0021112244898, -0.0023418367347, -0.0020304081633, -0.0016877551020, + -0.0006851020408, +0.0000934693878, -0.0000871428571, -0.0003612244898, + -0.0002989795918, -0.0000063265306, +0.0008593877551, +0.0013328571429, + +0.0013514285714, +0.0011832653061, +0.0002926530612, -0.0003363265306, + -0.0004732653061, -0.0007224489796, -0.0004920408163, -0.0007536734694, + -0.0014263265306, -0.0013638775510, -0.0015383673469, -0.0015259183673, + -0.0008906122449, -0.0007971428571, -0.0006165306122, -0.0003424489796, + +0.0000497959184, +0.0005667346939, -0.0000124489796, -0.0006663265306, + -0.0010836734694, -0.0019681632653, -0.0021922448980, -0.0011334693878, + -0.0002179591837, -0.0000746938776, -0.0000124489796, +0.0001557142857, + -0.0001369387755, -0.0004920408163, -0.0009653061224, -0.0016318367347, + -0.0016940816327, -0.0010214285714, -0.0004297959184, -0.0004359183673, + -0.0011024489796, -0.0016442857143, -0.0016691836735, -0.0016006122449, + -0.0010214285714, -0.0003551020408, -0.0005357142857, -0.0008718367347, + -0.0011708163265, -0.0017189795918, -0.0019306122449, -0.0018310204082, + -0.0015881632653, -0.0009653061224, -0.0007536734694, -0.0011708163265, + -0.0014761224490, -0.0017002040816, -0.0018497959184, -0.0018000000000, + -0.0017624489796, -0.0017189795918, -0.0015881632653, -0.0014075510204, + -0.0011085714286, -0.0006602040816, -0.0003861224490, -0.0002428571429, + -0.0000995918367, -0.0002118367347, -0.0004173469388, -0.0005357142857, + -0.0003800000000, -0.0003238775510, -0.0006104081633, -0.0009716326531, + -0.0013016326531, -0.0014822448980, -0.0014697959184, -0.0012393877551, + -0.0006165306122, -0.0004359183673, -0.0007785714286, -0.0011708163265, + -0.0015383673469, -0.0013204081633, -0.0010775510204, -0.0004857142857, + +0.0003300000000, -0.0002553061224, -0.0012206122449, -0.0015383673469, + -0.0016006122449, -0.0014636734694, -0.0014387755102, -0.0012706122449, + -0.0010338775510, -0.0012642857143, -0.0012830612245, -0.0007597959184, + -0.0005667346939, -0.0004795918367, -0.0001930612245, -0.0002428571429, + -0.0005293877551, -0.0007722448980, -0.0010214285714, -0.0007163265306, + -0.0003487755102, -0.0004110204082, -0.0004422448980, -0.0008593877551, + -0.0011024489796, -0.0007661224490, -0.0008220408163, -0.0010712244898, + -0.0011771428571, -0.0015195918367, -0.0017065306122, -0.0014946938776, + -0.0008034693878, -0.0000187755102, +0.0000810204082, -0.0001493877551, + -0.0004048979592, -0.0006165306122, -0.0007287755102, -0.0006538775510, + -0.0004920408163, -0.0002491836735, +0.0000436734694, +0.0001244897959, + -0.0000063265306, +0.0000000000000, +0.0001183673469, +0.0001930612245, + +0.0000187755102, -0.0002553061224, -0.0005542857143, -0.0010214285714, + -0.0010214285714, -0.0004981632653, +0.0001869387755, +0.0005106122449, + +0.0001869387755, -0.0002802040816, -0.0002616326531, -0.0000187755102, + +0.0000312244898, +0.0000622448980, -0.0000934693878, -0.0003363265306, + -0.0002616326531, +0.0000000000000, +0.0004920408163, +0.0009591836735, + +0.0008159183673, +0.0005542857143, +0.0003612244898, +0.0003238775510, + +0.0004981632653, +0.0005044897959, +0.0003363265306, +0.0002304081633, + +0.0000934693878, +0.0000746938776, +0.0000685714286, -0.0001869387755, + -0.0004795918367, -0.0008593877551, -0.0010214285714, -0.0008034693878, + -0.0003924489796, +0.0000685714286, +0.0004732653061, +0.0006912244898, + +0.0006228571429, +0.0004110204082, +0.0005169387755, +0.0008593877551, + +0.0009342857143, +0.0006165306122, +0.0001059183673, -0.0001493877551, + +0.0000497959184, +0.0004732653061, +0.0008344897959, +0.0010900000000, + +0.0011397959184, +0.0008781632653, +0.0007100000000, +0.0007536734694, + +0.0010524489796, +0.0010712244898, +0.0007287755102, +0.0002179591837, + -0.0003675510204, -0.0006602040816, -0.0002989795918, +0.0006040816327, + +0.0013887755102, +0.0013265306122, +0.0007597959184, +0.0001993877551, + -0.0003736734694, -0.0004546938776, -0.0000561224490, +0.0002179591837, + +0.0003300000000, +0.0001059183673, -0.0003238775510, -0.0005106122449, + -0.0003487755102, -0.0000436734694, +0.0001557142857, +0.0000312244898, + -0.0003175510204, -0.0004732653061, -0.0004671428571, -0.0001681632653, + +0.0004857142857, +0.0009218367347, +0.0008657142857, +0.0006228571429, + +0.0002926530612, +0.0001244897959, -0.0000312244898, -0.0002553061224, + -0.0001993877551, -0.0001120408163, -0.0005542857143, -0.0009965306122, + -0.0009902040816, -0.0008034693878, -0.0002553061224, +0.0003114285714, + +0.0003612244898, +0.0002677551020, +0.0000000000000, -0.0004795918367, + -0.0005791836735, -0.0003487755102, -0.0002242857143, -0.0001369387755, + -0.0002616326531, -0.0005916326531, -0.0005730612245, -0.0003114285714, + -0.0000436734694, +0.0002491836735, +0.0001493877551, -0.0001618367347, + -0.0002179591837, -0.0004920408163, -0.0005542857143, -0.0003114285714, + -0.0003487755102, -0.0002242857143, +0.0000685714286, +0.0001681632653, + +0.0001806122449, -0.0001557142857, -0.0005542857143, -0.0008718367347, + -0.0014075510204, -0.0012020408163, -0.0006851020408, -0.0004359183673, + +0.0000187755102, +0.0000497959184, -0.0002242857143, -0.0002865306122, + -0.0004483673469, -0.0003612244898, -0.0002242857143, -0.0003300000000, + -0.0002989795918, -0.0005542857143, -0.0008344897959, -0.0009404081633, + -0.0012457142857, -0.0011957142857, -0.0006851020408, -0.0000622448980, + +0.0005293877551, +0.0007412244898, +0.0007910204082, +0.0003551020408, + -0.0001993877551, -0.0005293877551, -0.0011397959184, -0.0011210204082, + -0.0004546938776, +0.0001557142857, +0.0002677551020, +0.0001183673469, + +0.0003051020408, -0.0003114285714, -0.0007412244898, -0.0003861224490, + -0.0002677551020, +0.0004546938776, +0.0008469387755, +0.0005855102041, + +0.0005606122449, -0.0004173469388, -0.0013079591837, -0.0013079591837, + -0.0018497959184, -0.0011210204082, -0.0001742857143, +0.0000312244898, + +0.0008283673469, +0.0006851020408, -0.0005542857143, -0.0009777551020, + -0.0009218367347, -0.0005106122449, +0.0001742857143, +0.0004857142857, + +0.0007536734694, +0.0008532653061, +0.0008283673469, +0.0009030612245, + +0.0008159183673, +0.0004483673469, +0.0001742857143, -0.0002428571429, + -0.0003300000000, -0.0000810204082, -0.0001183673469, +0.0001059183673, + +0.0004110204082, +0.0006165306122, +0.0008159183673, +0.0008969387755, + +0.0008781632653, +0.0010089795918, +0.0009342857143, +0.0007348979592, + +0.0007785714286, +0.0007224489796, +0.0009030612245, +0.0009902040816, + +0.0009155102041, +0.0007722448980, +0.0007163265306, +0.0007661224490, + +0.0008220408163, +0.0007536734694, +0.0007846938776, +0.0011148979592, + +0.0014885714286, +0.0016753061224, +0.0015195918367, +0.0011522448980, + +0.0008906122449, +0.0007597959184, +0.0004795918367, +0.0001059183673, + -0.0001120408163, -0.0001869387755, +0.0001493877551, +0.0006851020408, + +0.0008969387755, +0.0009840816327, +0.0012955102041, +0.0014761224490, + +0.0013265306122, +0.0011210204082, +0.0008657142857, +0.0004048979592, + +0.0001557142857, +0.0000373469388, +0.0001869387755, +0.0007473469388, + +0.0011646938776, +0.0015818367347, +0.0016318367347, +0.0012642857143, + +0.0010587755102, +0.0008718367347, +0.0009528571429, +0.0014697959184, + +0.0018373469388, +0.0019930612245, +0.0017438775510, +0.0011771428571, + +0.0008718367347, +0.0006289795918, +0.0005791836735, +0.0008781632653, + +0.0010275510204, +0.0011085714286, +0.0012706122449, +0.0012206122449, + +0.0008469387755, +0.0005791836735, +0.0005293877551, +0.0005357142857, + +0.0008034693878, +0.0010836734694, +0.0012581632653, +0.0013951020408, + +0.0014387755102, +0.0014200000000, +0.0011646938776, +0.0007661224490, + +0.0003363265306, -0.0000871428571, -0.0001557142857, +0.0000685714286, + +0.0003924489796, +0.0007348979592, +0.0008034693878, +0.0007473469388, + +0.0006477551020, +0.0004483673469, +0.0003800000000, +0.0003924489796, + +0.0006353061224, +0.0008906122449, +0.0008718367347, +0.0007597959184, + +0.0003051020408, -0.0000995918367, -0.0000436734694, -0.0000063265306, + +0.0000312244898, +0.0001183673469, +0.0001742857143, +0.0003175510204, + +0.0004483673469, +0.0006602040816, +0.0008159183673, +0.0008034693878, + +0.0009342857143, +0.0010961224490, +0.0010587755102, +0.0008034693878, + +0.0004483673469, +0.0002055102041, +0.0000124489796, -0.0000685714286, + -0.0000063265306, +0.0000187755102, +0.0001681632653, +0.0004234693878, + +0.0004857142857, +0.0003487755102, +0.0005293877551, +0.0006663265306, + +0.0005855102041, +0.0007846938776, +0.0008532653061, +0.0008159183673, + +0.0009653061224, +0.0008969387755, +0.0006040816327, +0.0002179591837, + -0.0002242857143, -0.0002926530612, -0.0003800000000, -0.0002865306122, + +0.0001930612245, +0.0003551020408, +0.0004359183673, +0.0005979591837, + +0.0005542857143, +0.0006787755102, +0.0008283673469, +0.0007224489796, + +0.0007597959184, +0.0007163265306, +0.0005418367347, +0.0003800000000, + +0.0002553061224, +0.0002989795918, +0.0004173469388, +0.0004857142857, + +0.0004857142857, +0.0003363265306, +0.0002304081633, +0.0001618367347, + +0.0002553061224, +0.0006538775510, +0.0009902040816, +0.0012955102041, + +0.0013079591837, +0.0007785714286, +0.0001493877551, -0.0004359183673, + -0.0005916326531, -0.0002740816327, +0.0000810204082, +0.0002989795918, + +0.0002491836735, +0.0001369387755, +0.0001869387755, +0.0003612244898, + +0.0006040816327, +0.0008159183673, +0.0010089795918, +0.0012581632653, + +0.0012457142857, +0.0013016326531, +0.0012955102041, +0.0008842857143, + +0.0004048979592, -0.0001493877551, -0.0006228571429, -0.0006353061224, + -0.0004795918367, -0.0003424489796, -0.0000810204082, +0.0001059183673, + +0.0002428571429, +0.0004671428571, +0.0005979591837, +0.0006414285714, + +0.0006414285714, +0.0002802040816, +0.0000063265306, -0.0000248979592, + -0.0002428571429, -0.0001369387755, +0.0001432653061, +0.0001618367347, + +0.0000685714286, -0.0001930612245, -0.0004234693878, -0.0003114285714, + -0.0000187755102, +0.0005106122449, +0.0009404081633, +0.0009902040816, + +0.0010524489796, +0.0008469387755, +0.0003612244898, -0.0001183673469, + -0.0005916326531, -0.0008344897959, -0.0009591836735, -0.0010214285714, + -0.0007100000000, -0.0001993877551, +0.0001869387755, +0.0003861224490, + +0.0003675510204, +0.0002677551020, +0.0001432653061, +0.0000934693878, + +0.0000746938776, +0.0000312244898, -0.0000622448980, -0.0001993877551, + -0.0003300000000, -0.0003051020408, -0.0003551020408, -0.0005293877551, + -0.0003736734694, -0.0001557142857, -0.0001432653061, -0.0001493877551, + -0.0002367346939, -0.0000312244898, +0.0003736734694, +0.0003924489796, + +0.0003675510204, +0.0003051020408, -0.0000497959184, -0.0002179591837, + -0.0002179591837, -0.0001869387755, -0.0000373469388, -0.0000124489796, + -0.0001493877551, -0.0003424489796, -0.0005044897959, -0.0003551020408, + +0.0000000000000, +0.0002242857143, +0.0003675510204, +0.0004483673469, + +0.0002989795918, +0.0000871428571, -0.0001120408163, -0.0002802040816, + -0.0003175510204, -0.0002740816327, -0.0002616326531, -0.0003736734694, + -0.0007224489796, -0.0009591836735, -0.0008842857143, -0.0007473469388, + -0.0004795918367, -0.0002367346939, -0.0002242857143, -0.0002865306122, + -0.0002242857143, -0.0002118367347, -0.0003051020408, -0.0004422448980, + -0.0005979591837, -0.0006353061224, -0.0006602040816, -0.0007100000000, + -0.0006787755102, -0.0005481632653, -0.0003175510204, -0.0000995918367, + -0.0000187755102, +0.0000810204082, +0.0002491836735, +0.0002179591837, + +0.0000622448980, -0.0000685714286, -0.0002989795918, -0.0004608163265, + -0.0004732653061, -0.0004297959184, -0.0002865306122, -0.0002491836735, + -0.0003800000000, -0.0004795918367, -0.0005418367347, -0.0006165306122, + -0.0005730612245, -0.0005293877551, -0.0005730612245, -0.0004297959184, + -0.0001432653061, -0.0001244897959, -0.0002802040816, -0.0002865306122, + -0.0003487755102, -0.0004671428571, -0.0003424489796, -0.0002055102041, + -0.0002677551020, -0.0003675510204, -0.0004671428571, -0.0007100000000, + -0.0007846938776, -0.0004981632653, -0.0002989795918, -0.0001930612245, + -0.0001183673469, -0.0002926530612, -0.0005667346939, -0.0007971428571, + -0.0008906122449, -0.0008095918367, -0.0009404081633, -0.0012518367347, + -0.0013453061224, -0.0012330612245, -0.0008906122449, -0.0004422448980, + -0.0002118367347, -0.0002055102041, -0.0003487755102, -0.0005791836735, + -0.0007100000000, -0.0005979591837, -0.0003985714286, -0.0001869387755, + -0.0000497959184, -0.0001244897959, -0.0002865306122, -0.0004857142857, + -0.0006289795918, -0.0005542857143, -0.0004981632653, -0.0006228571429, + -0.0006851020408, -0.0007348979592, -0.0007348979592, -0.0005791836735, + -0.0004110204082, -0.0003363265306, -0.0003551020408, -0.0004981632653, + -0.0006040816327, -0.0006289795918, -0.0005730612245, -0.0004795918367, + -0.0003675510204, -0.0001369387755, -0.0000312244898, -0.0002304081633, + -0.0003985714286, -0.0005106122449, -0.0005357142857, -0.0003424489796, + -0.0001557142857, -0.0001059183673, -0.0001993877551, -0.0005418367347, + -0.0007722448980, -0.0008159183673, -0.0008842857143, -0.0008283673469, + -0.0007163265306, -0.0005791836735, -0.0003924489796, -0.0003363265306, + -0.0003487755102, -0.0004110204082, -0.0005791836735, -0.0006787755102, + -0.0006165306122, -0.0005230612245, -0.0003800000000, -0.0002428571429, + -0.0003051020408, -0.0004234693878, -0.0005855102041, -0.0007722448980, + -0.0007910204082, -0.0005606122449, -0.0003736734694, -0.0003736734694, + -0.0004483673469, -0.0005044897959, -0.0003175510204, -0.0000063265306, + +0.0001993877551, +0.0003051020408, +0.0001742857143, -0.0001244897959, + -0.0003675510204, -0.0005916326531, -0.0007971428571, -0.0008532653061, + -0.0007348979592, -0.0003736734694, +0.0000373469388, +0.0001806122449, + +0.0000187755102, -0.0002491836735, -0.0004297959184, -0.0003924489796, + -0.0002677551020, -0.0001308163265, -0.0000373469388, -0.0000187755102, + +0.0000000000000, +0.0000187755102, -0.0000871428571, -0.0001930612245, + -0.0001869387755, -0.0001059183673, -0.0000373469388, -0.0000248979592, + -0.0000248979592, -0.0000622448980, -0.0000497959184, +0.0000248979592, + +0.0000871428571, +0.0001183673469, +0.0001681632653, +0.0000187755102, + -0.0004110204082, -0.0008283673469, -0.0009653061224, -0.0009279591837, + -0.0006975510204, -0.0001993877551, +0.0001993877551, +0.0002055102041, + +0.0000124489796, -0.0000934693878, -0.0001369387755, -0.0000124489796, + +0.0003114285714, +0.0005606122449, +0.0005418367347, +0.0002926530612, + -0.0000561224490, -0.0003985714286, -0.0006975510204, -0.0007661224490, + -0.0005730612245, -0.0002802040816, -0.0000810204082, -0.0000995918367, + -0.0001806122449, -0.0002304081633, -0.0002179591837, -0.0000497959184, + +0.0000373469388, -0.0000373469388, -0.0001183673469, -0.0001869387755, + -0.0002242857143, -0.0002491836735, -0.0002242857143, -0.0001930612245, + -0.0002179591837, -0.0003300000000, -0.0004732653061, -0.0005667346939, + -0.0005293877551, -0.0003985714286, -0.0002553061224, -0.0001681632653, + -0.0001618367347, -0.0002428571429, -0.0002428571429, -0.0001059183673, + -0.0000373469388, -0.0001557142857, -0.0003363265306, -0.0003424489796, + -0.0001806122449, -0.0000436734694, +0.0000685714286, +0.0000746938776, + -0.0000685714286, -0.0002055102041, -0.0003551020408, -0.0004110204082, + -0.0002989795918, -0.0002118367347, -0.0001742857143, -0.0001806122449, + -0.0001681632653, -0.0000063265306, +0.0000810204082, +0.0000934693878, + +0.0001059183673, +0.0000746938776, +0.0000000000000, -0.0000934693878, + -0.0000497959184, +0.0000934693878, +0.0000561224490, -0.0000685714286, + -0.0001618367347, -0.0001493877551, +0.0000312244898, +0.0001308163265, + +0.0001308163265, +0.0000995918367, -0.0000934693878, -0.0003612244898, + -0.0004173469388, -0.0003800000000, -0.0001993877551, +0.0000871428571, + +0.0002367346939, +0.0003924489796, +0.0004608163265, +0.0002367346939, + -0.0000561224490, -0.0003051020408, -0.0004234693878, -0.0002677551020, + -0.0002677551020, -0.0002989795918, -0.0001432653061, -0.0001618367347, + -0.0002428571429, -0.0002616326531, -0.0001869387755, -0.0000497959184, + -0.0001244897959, -0.0003114285714, -0.0003800000000, -0.0004359183673, + -0.0001681632653, +0.0002677551020, +0.0004732653061, +0.0004981632653, + +0.0002367346939, -0.0000373469388, -0.0000063265306, +0.0000746938776, + +0.0002491836735, +0.0004359183673, +0.0001993877551, +0.0000000000000, + +0.0000871428571, +0.0001183673469, +0.0001369387755, +0.0002553061224, + +0.0001869387755, -0.0000561224490, -0.0002989795918, -0.0003736734694, + -0.0003424489796, -0.0001869387755, +0.0001493877551, +0.0002740816327, + +0.0000622448980, -0.0001806122449, -0.0002367346939, -0.0000871428571, + +0.0001681632653, +0.0002926530612, +0.0003051020408, +0.0003051020408, + +0.0001869387755, +0.0002242857143, +0.0004422448980, +0.0005542857143, + +0.0005418367347, +0.0004359183673, +0.0001806122449, +0.0000810204082, + -0.0000685714286, -0.0001244897959, +0.0000622448980, +0.0001059183673, + +0.0002242857143, +0.0005418367347, +0.0007412244898, +0.0008593877551, + +0.0008842857143, +0.0007412244898, +0.0006165306122, +0.0003300000000, + +0.0000063265306, -0.0000995918367, -0.0000685714286, +0.0000312244898, + +0.0001869387755, +0.0003985714286, +0.0004795918367, +0.0004546938776, + +0.0005542857143, +0.0005979591837, +0.0004795918367, +0.0004981632653, + +0.0005542857143, +0.0004608163265, +0.0003924489796, +0.0003675510204, + +0.0002865306122, +0.0001120408163, -0.0000124489796, +0.0000373469388, + +0.0000685714286, +0.0000497959184, +0.0001308163265, +0.0001681632653, + +0.0001120408163, +0.0000934693878, +0.0000746938776, +0.0000561224490, + +0.0000685714286, +0.0000497959184, +0.0001432653061, +0.0002055102041, + +0.0001681632653, +0.0001618367347, +0.0001369387755, +0.0001244897959, + +0.0001557142857, +0.0001493877551, +0.0001806122449, +0.0002118367347, + +0.0001183673469, +0.0001742857143, +0.0003487755102, +0.0004795918367, + +0.0006912244898, +0.0009279591837, +0.0008718367347, +0.0005169387755, + +0.0001244897959, -0.0001869387755, -0.0002677551020, -0.0001369387755, + +0.0000561224490, +0.0001742857143, +0.0002242857143, +0.0002428571429, + +0.0003363265306, +0.0004546938776, +0.0005791836735, +0.0006851020408, + +0.0006663265306, +0.0004732653061, +0.0002304081633, +0.0001681632653, + +0.0002428571429, +0.0003300000000, +0.0004483673469, +0.0004671428571, + +0.0003985714286, +0.0004483673469, +0.0005230612245, +0.0004981632653, + +0.0003675510204, +0.0003424489796, +0.0003675510204, +0.0002865306122, + +0.0002926530612, +0.0004732653061, +0.0006353061224, +0.0006726530612, + +0.0005606122449, +0.0003675510204, +0.0001806122449, +0.0000063265306, + +0.0000000000000, +0.0000995918367, +0.0001183673469, +0.0001493877551, + +0.0002553061224, +0.0003675510204, +0.0004732653061, +0.0005730612245, + +0.0005169387755, +0.0004483673469, +0.0003300000000, +0.0001120408163, + +0.0000810204082, +0.0001742857143, +0.0001806122449, +0.0002740816327, + +0.0002989795918, +0.0003175510204, +0.0005542857143, +0.0006228571429, + +0.0005730612245, +0.0005169387755, +0.0004048979592, +0.0003487755102, + +0.0003487755102, +0.0003612244898, +0.0004234693878, +0.0004048979592, + +0.0001618367347, -0.0000746938776, -0.0001493877551, -0.0001120408163, + +0.0000312244898, +0.0003175510204, +0.0004981632653, +0.0004920408163, + +0.0003612244898, +0.0001120408163, -0.0000436734694, -0.0001432653061, + -0.0000746938776, +0.0001618367347, +0.0003424489796, +0.0003736734694, + +0.0003051020408, +0.0001557142857, +0.0000746938776, +0.0000000000000, + -0.0000622448980, +0.0000000000000, +0.0000871428571, +0.0001493877551, + +0.0001618367347, +0.0001183673469, -0.0000497959184, -0.0002179591837, + -0.0001930612245, -0.0000871428571, +0.0000187755102, +0.0001183673469, + +0.0001742857143, +0.0002304081633, +0.0002926530612, +0.0003300000000, + +0.0003051020408, +0.0001681632653, +0.0000746938776, +0.0000000000000, + -0.0000934693878, -0.0000497959184, +0.0000000000000, +0.0000373469388, + +0.0001059183673, +0.0000934693878, +0.0000871428571, +0.0001993877551, + +0.0003051020408, +0.0005169387755, +0.0006912244898, +0.0006228571429, + +0.0004422448980, +0.0002367346939, +0.0001618367347, +0.0002179591837, + +0.0001930612245, +0.0001742857143, +0.0002428571429, +0.0001869387755, + +0.0000685714286, +0.0000000000000, +0.0000187755102, +0.0000373469388, + -0.0000187755102, -0.0000436734694, -0.0000436734694, -0.0000373469388, + -0.0000436734694, -0.0001059183673, -0.0000871428571, +0.0000312244898, + +0.0002304081633, +0.0003861224490, +0.0003800000000, +0.0003736734694, + +0.0003487755102, +0.0001618367347, +0.0000622448980, +0.0001308163265, + +0.0002677551020, +0.0003861224490, +0.0003675510204, +0.0002740816327, + +0.0001120408163, -0.0000561224490, -0.0000934693878, -0.0000810204082, + -0.0001244897959, -0.0002179591837, -0.0003861224490, -0.0004422448980, + -0.0003675510204, -0.0002616326531, -0.0000124489796, +0.0001681632653, + +0.0001681632653, +0.0002118367347, +0.0002740816327, +0.0002740816327, + +0.0002242857143, +0.0001681632653, +0.0001493877551, +0.0000124489796, + -0.0001183673469, -0.0001308163265, -0.0001369387755, -0.0000871428571, + +0.0000124489796, +0.0000561224490, +0.0000497959184, +0.0001244897959, + +0.0002118367347, +0.0002304081633, +0.0001369387755, -0.0000810204082, + -0.0003800000000, -0.0006851020408, -0.0008283673469, -0.0006104081633, + -0.0001806122449, +0.0001557142857, +0.0003238775510, +0.0002926530612, + +0.0001681632653, +0.0000312244898, -0.0000622448980, -0.0000561224490, + -0.0000561224490, -0.0000934693878, -0.0000248979592, +0.0000436734694, + +0.0000373469388, +0.0000000000000, -0.0001369387755, -0.0003051020408, + -0.0004110204082, -0.0003924489796, -0.0001806122449, +0.0000248979592, + +0.0001493877551, +0.0001059183673, -0.0001557142857, -0.0003924489796, + -0.0004234693878, -0.0003300000000, -0.0000934693878, +0.0000312244898, + -0.0000871428571, -0.0003175510204, -0.0004857142857, -0.0005230612245, + -0.0005357142857, -0.0004795918367, -0.0002677551020, -0.0001059183673, + -0.0000497959184, +0.0000187755102, -0.0000187755102, -0.0001557142857, + -0.0002304081633, -0.0002926530612, -0.0003736734694, -0.0004359183673, + -0.0004048979592, -0.0003114285714, -0.0002367346939, -0.0002055102041, + -0.0002242857143, -0.0003051020408, -0.0003675510204, -0.0003175510204, + -0.0001930612245, -0.0001308163265, -0.0001244897959, -0.0002179591837, + -0.0004483673469, -0.0005418367347, -0.0004608163265, -0.0003612244898, + -0.0002179591837, -0.0001244897959, -0.0001059183673, -0.0001120408163, + -0.0001869387755, -0.0001930612245, -0.0001557142857, -0.0001557142857, + +0.0000063265306, +0.0001930612245, +0.0001869387755, +0.0001618367347, + +0.0000685714286, -0.0000497959184, -0.0001618367347, -0.0003861224490, + -0.0005293877551, -0.0006228571429, -0.0007036734694, -0.0005730612245, + -0.0003363265306, -0.0001742857143, +0.0000187755102, +0.0001557142857, + +0.0001806122449, +0.0002553061224, +0.0002491836735, +0.0001493877551, + +0.0000746938776, -0.0000622448980, -0.0002740816327, -0.0004297959184, + -0.0004981632653, -0.0004234693878, -0.0002677551020, -0.0001557142857, + +0.0000000000000, +0.0001308163265, +0.0001618367347, +0.0001806122449, + +0.0001993877551, +0.0001681632653, +0.0000871428571, -0.0000436734694, + -0.0001618367347, -0.0002865306122, -0.0003612244898, -0.0002553061224, + -0.0001308163265, -0.0000746938776, -0.0000622448980, -0.0001183673469, + -0.0001618367347, -0.0001493877551, -0.0001120408163, -0.0000871428571, + -0.0000995918367, -0.0000871428571, -0.0000871428571, -0.0000124489796, + +0.0001183673469, +0.0001493877551, +0.0001681632653, +0.0001369387755, + +0.0000312244898, +0.0000373469388, +0.0001120408163, +0.0001244897959, + +0.0000000000000, -0.0001432653061, -0.0001869387755, -0.0001742857143, + -0.0000685714286, +0.0000000000000, -0.0000248979592, -0.0000312244898, + -0.0001869387755, -0.0004048979592, -0.0004483673469, -0.0002989795918, + -0.0000248979592, +0.0001869387755, +0.0002055102041, +0.0001308163265, + +0.0000000000000, -0.0000561224490, -0.0000685714286, -0.0001742857143, + -0.0001681632653, -0.0000746938776, -0.0001183673469, -0.0000685714286, + +0.0001369387755, +0.0002865306122, +0.0003238775510, +0.0002304081633, + +0.0000746938776, -0.0001120408163, -0.0003424489796, -0.0003800000000, + -0.0003114285714, -0.0002179591837, -0.0000561224490, -0.0000124489796, + +0.0000000000000, +0.0000685714286, +0.0000561224490, +0.0000746938776, + +0.0000810204082, -0.0000685714286, -0.0002118367347, -0.0002926530612, + -0.0003175510204, -0.0002616326531, -0.0002118367347, -0.0002179591837, + -0.0002304081633, -0.0002179591837, -0.0001432653061, -0.0000312244898, + -0.0000248979592, -0.0000746938776, -0.0000561224490, -0.0000187755102, + +0.0000810204082, +0.0001618367347, +0.0000995918367, +0.0000248979592, + -0.0000810204082, -0.0002428571429, -0.0003238775510, -0.0003363265306, + -0.0002802040816, -0.0001244897959, -0.0000248979592, -0.0000312244898, + -0.0001308163265, -0.0002616326531, -0.0003175510204, -0.0003675510204, + -0.0003363265306, -0.0001869387755, -0.0000934693878, -0.0000373469388, + +0.0000063265306, -0.0000063265306, +0.0000000000000, -0.0000436734694, + -0.0000622448980, +0.0000000000000, +0.0000312244898, +0.0000871428571, + +0.0001432653061, +0.0000871428571, +0.0000373469388, +0.0000063265306, + -0.0000436734694, -0.0000248979592, -0.0000436734694, -0.0001183673469, + -0.0001369387755, -0.0001681632653, -0.0002179591837, -0.0002304081633, + -0.0002304081633, -0.0001869387755, -0.0001618367347, -0.0001557142857, + -0.0001493877551, -0.0001432653061, -0.0001369387755, +0.0000000000000, + +0.0001993877551, +0.0002491836735, +0.0001806122449, -0.0000124489796, + -0.0002740816327, -0.0004173469388, -0.0004795918367, -0.0003800000000, + -0.0001308163265, +0.0000497959184, +0.0001930612245, +0.0001493877551, + -0.0000622448980, -0.0001742857143, -0.0003300000000, -0.0004732653061, + -0.0004608163265, -0.0004297959184, -0.0003612244898, -0.0002367346939, + -0.0001432653061, -0.0000622448980, -0.0000124489796, +0.0000000000000, + +0.0000187755102, +0.0000063265306, +0.0000124489796, +0.0000685714286, + +0.0001432653061, +0.0001432653061, +0.0000063265306, -0.0001308163265, + -0.0002553061224, -0.0003551020408, -0.0003985714286, -0.0004422448980, + -0.0004857142857, -0.0004110204082, -0.0002242857143, -0.0000561224490, + +0.0000561224490, +0.0001681632653, +0.0002055102041, +0.0001244897959, + +0.0000497959184, -0.0000746938776, -0.0001432653061, -0.0000746938776, + +0.0000063265306, +0.0000436734694, -0.0000063265306, -0.0001120408163, + -0.0001493877551, -0.0001432653061, -0.0000622448980, +0.0000312244898, + +0.0000810204082, +0.0000746938776, +0.0000000000000, -0.0001618367347, + -0.0002553061224, -0.0001742857143, +0.0000000000000, +0.0000871428571, + +0.0001432653061, +0.0001432653061, +0.0000561224490, +0.0000497959184, + +0.0001493877551, +0.0002304081633, +0.0001993877551, +0.0000497959184, + -0.0000622448980, -0.0001120408163, -0.0000810204082, +0.0000561224490, + +0.0001869387755, +0.0002616326531, +0.0002616326531, +0.0001432653061, + +0.0000124489796, -0.0000871428571, -0.0001244897959, -0.0000497959184, + +0.0000000000000, +0.0000312244898, +0.0000995918367, +0.0001183673469, + +0.0001120408163, +0.0001930612245, +0.0003175510204, +0.0004857142857, + +0.0005293877551, +0.0004173469388, +0.0002553061224, +0.0000995918367, + +0.0000312244898, +0.0000934693878, +0.0001183673469, +0.0001618367347, + +0.0002428571429, +0.0002740816327, +0.0002367346939, +0.0001432653061, + +0.0001432653061, +0.0002553061224, +0.0003985714286, +0.0004857142857, + +0.0003800000000, +0.0002304081633, +0.0002055102041, +0.0002242857143, + +0.0002677551020, +0.0002553061224, +0.0001432653061, +0.0000995918367, + +0.0001059183673, +0.0000622448980, +0.0000000000000, -0.0000312244898, + +0.0001059183673, +0.0003363265306, +0.0003736734694, +0.0002367346939, + +0.0000685714286, -0.0000561224490, -0.0000934693878, -0.0001432653061, + -0.0001993877551, -0.0001183673469, +0.0000063265306, +0.0001308163265, + +0.0002367346939, +0.0002304081633, +0.0002242857143, +0.0002428571429, + +0.0001806122449, +0.0000685714286, +0.0000000000000, -0.0000063265306, + +0.0000312244898, +0.0001244897959, +0.0002553061224, +0.0003736734694, + +0.0004920408163, +0.0004920408163, +0.0002553061224, -0.0000995918367, + -0.0003551020408, -0.0003612244898, -0.0001930612245, +0.0000312244898, + +0.0002616326531, +0.0003424489796, +0.0002865306122, +0.0002118367347, + +0.0001869387755, +0.0001742857143, +0.0001493877551, +0.0000934693878, + -0.0000063265306, -0.0001183673469, -0.0001369387755, -0.0001059183673, + +0.0000000000000, +0.0001369387755, +0.0002367346939, +0.0002367346939, + +0.0000995918367, -0.0000497959184, -0.0001557142857, -0.0002553061224, + -0.0002616326531, -0.0001493877551, -0.0000373469388, -0.0000312244898, + -0.0001120408163, -0.0001183673469, -0.0000373469388, +0.0000622448980, + +0.0001432653061, +0.0001806122449, +0.0001183673469, -0.0000312244898, + -0.0001930612245, -0.0003300000000, -0.0004234693878, -0.0003612244898, + -0.0001869387755, -0.0000810204082, -0.0000312244898, -0.0000497959184, + -0.0001493877551, -0.0001993877551, -0.0001618367347, -0.0000622448980, + +0.0000312244898, +0.0000934693878, +0.0001183673469, +0.0000934693878, + -0.0000124489796, -0.0000810204082, -0.0000248979592, +0.0000124489796, + +0.0000373469388, +0.0001059183673, +0.0000934693878, +0.0000312244898, + +0.0000312244898, +0.0000063265306, +0.0000373469388, +0.0001369387755, + +0.0000746938776, -0.0000934693878, -0.0002118367347, -0.0002677551020, + -0.0002055102041, -0.0000436734694, +0.0000436734694, +0.0000561224490, + -0.0000187755102, -0.0001742857143, -0.0002242857143, -0.0001432653061, + -0.0000561224490, +0.0000622448980, +0.0001308163265, +0.0000810204082, + +0.0000934693878, +0.0001059183673, +0.0000561224490, +0.0000497959184, + +0.0000622448980, +0.0000373469388, +0.0000063265306, +0.0000063265306, + +0.0000685714286, +0.0001183673469, +0.0001183673469, +0.0001308163265, + +0.0001618367347, +0.0002118367347, +0.0001742857143, +0.0000871428571, + +0.0000622448980, +0.0000373469388, +0.0000248979592, +0.0000810204082, + +0.0001681632653, +0.0002367346939, +0.0002428571429, +0.0002055102041, + +0.0001742857143, +0.0001308163265, +0.0001308163265, +0.0001059183673, + +0.0000934693878, +0.0000871428571, +0.0000622448980, +0.0001432653061, + +0.0002553061224, +0.0002926530612, +0.0003363265306, +0.0002865306122, + +0.0002179591837, +0.0002242857143, +0.0001993877551, +0.0002616326531, + +0.0003675510204, +0.0003800000000, +0.0003551020408, +0.0002740816327, + +0.0001742857143, +0.0001557142857, +0.0001308163265, +0.0000685714286, + +0.0000436734694, +0.0000810204082, +0.0001369387755, +0.0001869387755, + +0.0002118367347, +0.0002367346939, +0.0002428571429, +0.0001742857143, + +0.0000995918367, +0.0000746938776, +0.0000497959184, +0.0000561224490, + +0.0000810204082, +0.0000746938776, +0.0000561224490, +0.0000436734694, + +0.0000561224490, +0.0001308163265, +0.0002802040816, +0.0004422448980, + +0.0005606122449, +0.0005855102041, +0.0005230612245, +0.0003487755102, + +0.0001369387755, +0.0000124489796, -0.0000312244898, -0.0000622448980, + -0.0000685714286, -0.0000373469388, -0.0000622448980, -0.0000871428571, + -0.0000436734694, +0.0000312244898, +0.0001183673469, +0.0002055102041, + +0.0002242857143, +0.0001869387755, +0.0001183673469, +0.0000497959184, + +0.0000248979592, +0.0000187755102, +0.0000312244898, +0.0000497959184, + -0.0000187755102, -0.0000561224490, -0.0000063265306, -0.0000124489796, + -0.0000312244898, +0.0000000000000, +0.0000000000000, +0.0000312244898, + +0.0001059183673, +0.0001681632653, +0.0001869387755, +0.0001308163265, + +0.0000685714286, +0.0000063265306, -0.0000995918367, -0.0001493877551, + -0.0001308163265, -0.0000995918367, +0.0000000000000, +0.0000685714286, + +0.0000436734694, -0.0000187755102, -0.0000497959184, -0.0000124489796, + +0.0000124489796, +0.0000124489796, +0.0000312244898, +0.0000561224490, + +0.0001059183673, +0.0001618367347, +0.0001369387755, +0.0000312244898, + -0.0000746938776, -0.0000871428571, -0.0000871428571, -0.0000871428571, + -0.0000373469388, -0.0000312244898, -0.0000248979592, -0.0000063265306, + -0.0000248979592, -0.0000934693878, -0.0001557142857, -0.0001806122449, + -0.0001244897959, -0.0000124489796, +0.0000746938776, +0.0000746938776, + -0.0000436734694, -0.0001993877551, -0.0003051020408, -0.0003300000000, + -0.0002926530612, -0.0002428571429, -0.0002118367347, -0.0001806122449, + -0.0001308163265, -0.0000561224490, +0.0000373469388, +0.0001308163265, + +0.0001618367347, +0.0001308163265, +0.0000746938776, +0.0000124489796, + -0.0000124489796, +0.0000063265306, +0.0000063265306, +0.0000000000000, + -0.0000063265306, -0.0000871428571, -0.0001493877551, -0.0001369387755, + -0.0001493877551, -0.0001681632653, -0.0001681632653, -0.0001369387755, + -0.0000436734694, +0.0000373469388, +0.0000248979592, -0.0000248979592, + -0.0000685714286, -0.0000436734694, +0.0000373469388, +0.0000934693878, + +0.0000622448980, +0.0000187755102, -0.0000063265306, -0.0000187755102, + -0.0000373469388, -0.0000685714286, -0.0000561224490, +0.0000000000000, + +0.0000187755102, +0.0000187755102, -0.0000497959184, -0.0001557142857, + -0.0001557142857, -0.0001120408163, -0.0000373469388, +0.0000685714286, + +0.0001183673469, +0.0001120408163, +0.0000436734694, -0.0000497959184, + -0.0001183673469, -0.0001557142857, -0.0001244897959, -0.0000436734694, + +0.0000063265306, +0.0000871428571, +0.0001930612245, +0.0002616326531, + +0.0002677551020, +0.0001493877551, -0.0000373469388, -0.0001493877551, + -0.0001681632653, -0.0001869387755, -0.0001742857143, -0.0001308163265, + -0.0000561224490, +0.0000436734694, +0.0001308163265, +0.0001432653061, + +0.0001369387755, +0.0000995918367, -0.0000063265306, -0.0001059183673, + -0.0001432653061, -0.0001432653061, -0.0000622448980, +0.0000000000000, + +0.0000124489796, +0.0000124489796, +0.0000000000000, -0.0000561224490, + -0.0001120408163, -0.0001369387755, -0.0001869387755, -0.0001806122449, + -0.0001059183673, -0.0000436734694, -0.0000063265306, +0.0000000000000, + -0.0000497959184, -0.0001308163265, -0.0001369387755, -0.0001183673469, + -0.0000871428571, -0.0000248979592, -0.0000124489796, -0.0000312244898, + -0.0000561224490, -0.0000436734694, +0.0000312244898, +0.0001618367347, + +0.0002179591837, +0.0002304081633, +0.0001681632653, +0.0000373469388, + -0.0000810204082, -0.0001869387755, -0.0003114285714, -0.0003736734694, + -0.0002926530612, -0.0001120408163, +0.0000685714286, +0.0001993877551, + +0.0001869387755, +0.0000934693878, +0.0000000000000, -0.0001120408163, + -0.0001930612245, -0.0001742857143, -0.0001059183673, -0.0000497959184, + -0.0000436734694, -0.0000373469388, -0.0000063265306, -0.0000063265306, + +0.0000124489796, +0.0001244897959, +0.0002367346939, +0.0003114285714, + +0.0003238775510, +0.0002677551020, +0.0001806122449, +0.0000436734694, + -0.0000871428571, -0.0001806122449, -0.0002428571429, -0.0002055102041, + -0.0000746938776, -0.0000063265306, +0.0000373469388, +0.0000746938776, + +0.0000810204082, +0.0000995918367, +0.0001308163265, +0.0001618367347, + +0.0001432653061, +0.0000312244898, -0.0000436734694, -0.0001059183673, + -0.0001432653061, -0.0000871428571, -0.0000248979592, -0.0000497959184, + -0.0000746938776, -0.0001369387755, -0.0002118367347, -0.0002118367347, + -0.0000995918367, +0.0000187755102, +0.0000746938776, +0.0000934693878, + +0.0000871428571, +0.0000622448980, +0.0000373469388, +0.0000373469388, + +0.0000497959184, +0.0000312244898, -0.0000248979592, -0.0001244897959, + -0.0002677551020, -0.0003300000000, -0.0002428571429, -0.0001869387755, + -0.0001120408163, +0.0000000000000, +0.0000995918367, +0.0001806122449, + +0.0002242857143, +0.0002242857143, +0.0002118367347, +0.0001493877551, + +0.0000312244898, -0.0000622448980, -0.0001183673469, -0.0001308163265, + -0.0001244897959, -0.0001681632653, -0.0002677551020, -0.0003175510204, + -0.0002802040816, -0.0002055102041, -0.0000746938776, +0.0000746938776, + +0.0001308163265, +0.0001183673469, +0.0000685714286, -0.0000063265306, + -0.0000436734694, -0.0000373469388, +0.0000000000000, +0.0000497959184, + -0.0000187755102, -0.0001930612245, -0.0002989795918, -0.0003175510204, + -0.0002304081633, -0.0000622448980, +0.0000810204082, +0.0001742857143, + +0.0001618367347, +0.0000561224490, -0.0000561224490, -0.0001806122449, + -0.0002616326531, -0.0002428571429, -0.0001869387755, -0.0001369387755, + -0.0001059183673, -0.0000995918367, -0.0000934693878, -0.0000561224490, + +0.0000187755102, +0.0000934693878, +0.0001183673469, +0.0001059183673, + +0.0000746938776, +0.0000373469388, +0.0000187755102, -0.0000561224490, + -0.0001993877551, -0.0002802040816, -0.0002677551020, -0.0002055102041, + -0.0000810204082, +0.0000248979592, +0.0000373469388, -0.0000124489796, + -0.0000312244898, -0.0000248979592, -0.0000312244898, +0.0000000000000, + +0.0000622448980, +0.0001120408163, +0.0001183673469, +0.0000746938776, + +0.0000063265306, -0.0000810204082, -0.0001244897959, -0.0000497959184, + -0.0000187755102, -0.0000561224490, -0.0001059183673, -0.0001493877551, + -0.0001618367347, -0.0001120408163, -0.0000124489796, +0.0000871428571, + +0.0001244897959, +0.0001369387755, +0.0001244897959, +0.0000124489796, + -0.0000746938776, -0.0000995918367, -0.0000622448980, +0.0000063265306, + +0.0000497959184, +0.0000497959184, +0.0000497959184, +0.0000373469388, + +0.0000124489796, -0.0000436734694, -0.0001183673469, -0.0001120408163, + -0.0000871428571, -0.0000561224490, -0.0000248979592, -0.0000497959184, + -0.0000373469388, +0.0000063265306, -0.0000063265306, +0.0000000000000, + +0.0000124489796, -0.0000187755102, -0.0000746938776, -0.0001244897959, + -0.0001369387755, -0.0000746938776, +0.0000248979592, +0.0001557142857, + +0.0001806122449, +0.0000871428571, +0.0000248979592, +0.0000000000000, + +0.0000187755102, +0.0000622448980, +0.0000436734694, +0.0000063265306, + -0.0000373469388, -0.0000871428571, -0.0000810204082, -0.0000685714286, + -0.0000436734694, -0.0000063265306, +0.0000000000000, +0.0000248979592, + +0.0000746938776, +0.0001059183673, +0.0001369387755, +0.0001493877551, + +0.0001432653061, +0.0001618367347, +0.0001681632653, +0.0001120408163, + +0.0000312244898, -0.0000187755102, -0.0000436734694, -0.0000497959184, + -0.0000248979592, +0.0000000000000, +0.0000063265306, +0.0000124489796, + +0.0000248979592, +0.0000373469388, +0.0000436734694, +0.0000561224490, + +0.0000934693878, +0.0000810204082, +0.0000436734694, +0.0000312244898, + +0.0000312244898, +0.0000000000000, -0.0000497959184, -0.0000810204082, + -0.0001183673469, -0.0001557142857, -0.0001618367347, -0.0001244897959, + -0.0000685714286, -0.0000373469388, +0.0000000000000, +0.0000436734694, + +0.0000248979592, +0.0000124489796, +0.0000187755102, +0.0000000000000, + +0.0000312244898, +0.0000746938776, +0.0001059183673, +0.0001308163265, + +0.0001059183673, +0.0000622448980, +0.0000497959184, +0.0000810204082, + +0.0001183673469, +0.0001618367347, +0.0001742857143, +0.0001120408163, + -0.0000063265306, -0.0000436734694, -0.0000685714286, -0.0001244897959, + -0.0001432653061, -0.0001059183673, -0.0000373469388, +0.0000000000000, + +0.0000000000000, -0.0000124489796, -0.0000561224490, -0.0000934693878, + -0.0000312244898, +0.0000561224490, +0.0001183673469, +0.0001493877551, + +0.0001120408163, +0.0000497959184, +0.0000124489796, -0.0000063265306, + -0.0000248979592, -0.0000063265306, +0.0000436734694, +0.0000561224490, + -0.0000063265306, -0.0001183673469, -0.0002179591837, -0.0002491836735, + -0.0001742857143, -0.0000934693878, -0.0000436734694, -0.0000248979592, + -0.0000248979592, -0.0000248979592, -0.0000436734694, -0.0000746938776, + -0.0000497959184, +0.0000063265306, +0.0000436734694, +0.0000373469388, + +0.0000312244898, +0.0000561224490, +0.0000934693878, +0.0001308163265, + +0.0001493877551, +0.0000995918367, +0.0000187755102, -0.0000810204082, + -0.0001369387755, -0.0001493877551, -0.0001432653061, -0.0000810204082, + +0.0000312244898, +0.0001244897959, +0.0001493877551, +0.0001120408163, + +0.0000373469388, -0.0000063265306, -0.0000124489796, +0.0000248979592, + +0.0000934693878, +0.0000871428571, +0.0000000000000, -0.0000934693878, + -0.0001806122449, -0.0002242857143, -0.0001930612245, -0.0001059183673, + -0.0000248979592, +0.0000000000000, +0.0000063265306, +0.0000000000000, + +0.0000000000000, +0.0000373469388, +0.0000810204082, +0.0001059183673, + +0.0001369387755, +0.0001183673469, +0.0000436734694, -0.0000063265306, + -0.0000497959184, -0.0000685714286, -0.0001183673469, -0.0002055102041, + -0.0002428571429, -0.0001930612245, -0.0001183673469, +0.0000000000000, + +0.0001059183673, +0.0001432653061, +0.0001120408163, +0.0000746938776, + +0.0000373469388, -0.0000124489796, -0.0000746938776, -0.0001059183673, + -0.0001059183673, -0.0000871428571, -0.0000685714286, -0.0000497959184, + -0.0000436734694, -0.0000561224490, -0.0000622448980, -0.0000746938776, + -0.0000934693878, -0.0000934693878, -0.0000622448980, +0.0000000000000, + +0.0001059183673, +0.0001869387755, +0.0001930612245, +0.0001432653061, + +0.0000685714286, -0.0000124489796, -0.0000436734694, -0.0000124489796, + +0.0000497959184, +0.0001244897959, +0.0001432653061, +0.0000685714286, + +0.0000063265306, -0.0000063265306, +0.0000373469388, +0.0000995918367, + +0.0001369387755, +0.0001244897959, +0.0000685714286, +0.0000063265306, + -0.0000312244898, -0.0000746938776, -0.0000871428571, -0.0000436734694, + +0.0000248979592, +0.0000871428571, +0.0000871428571, +0.0000622448980, + +0.0000497959184, +0.0000373469388, +0.0000248979592, +0.0000312244898, + +0.0000373469388, +0.0000373469388, +0.0000000000000, -0.0000248979592, + +0.0000000000000, +0.0000810204082, +0.0001681632653, +0.0002118367347, + +0.0001742857143, +0.0000561224490, -0.0000934693878, -0.0001432653061, + -0.0000995918367, -0.0000124489796, +0.0000497959184, +0.0000995918367, + +0.0001244897959, +0.0001493877551, +0.0001557142857, +0.0001493877551, + +0.0001308163265, +0.0001120408163, +0.0000871428571, +0.0000561224490, + +0.0000124489796, +0.0000000000000, +0.0000561224490, +0.0001493877551, + +0.0001993877551, +0.0001681632653, +0.0000871428571, +0.0000561224490, + +0.0001120408163, +0.0001742857143, +0.0001993877551, +0.0001742857143, + +0.0001244897959, +0.0000561224490, +0.0000000000000, -0.0000063265306, + +0.0000000000000, +0.0000000000000, -0.0000063265306, -0.0000373469388, + -0.0000436734694, -0.0000248979592, +0.0000248979592, +0.0000934693878, + +0.0001493877551, +0.0001369387755, +0.0001059183673, +0.0000810204082, + +0.0000248979592, -0.0000187755102, -0.0000561224490, -0.0000622448980, + +0.0000187755102, +0.0001244897959, +0.0001432653061, +0.0000934693878, + +0.0000000000000, -0.0000746938776, -0.0001120408163, -0.0001308163265, + -0.0000871428571, -0.0000124489796, +0.0000312244898, +0.0000497959184, + +0.0000436734694, +0.0000124489796, +0.0000248979592, +0.0000622448980, + +0.0000995918367, +0.0001244897959, +0.0001244897959, +0.0001059183673, + +0.0000685714286, +0.0000561224490, +0.0000622448980, +0.0000746938776, + +0.0000934693878, +0.0001059183673, +0.0000312244898, -0.0000436734694, + -0.0000561224490, -0.0000436734694, -0.0000248979592, +0.0000124489796, + +0.0000685714286, +0.0001244897959, +0.0001183673469, +0.0000934693878, + +0.0000312244898, -0.0000312244898, -0.0000561224490, -0.0000187755102, + +0.0000497959184, +0.0001432653061, +0.0002118367347, +0.0002553061224, + +0.0002367346939, +0.0001557142857, +0.0000995918367, +0.0000561224490, + +0.0000436734694, +0.0000436734694, +0.0000000000000, -0.0000746938776, + -0.0001618367347, -0.0002367346939, -0.0002242857143, -0.0001493877551, + -0.0000871428571, -0.0000187755102, +0.0000561224490, +0.0000871428571, + +0.0000934693878, +0.0000810204082, +0.0000561224490, +0.0000312244898, + +0.0000124489796, -0.0000063265306, -0.0000248979592, -0.0000312244898, + -0.0000436734694, -0.0000934693878, -0.0001308163265, -0.0001369387755, + -0.0000746938776, +0.0000124489796, +0.0000436734694, +0.0000561224490, + +0.0000312244898, -0.0000561224490, -0.0001308163265, -0.0002118367347, + -0.0002677551020, -0.0002304081633, -0.0001618367347, -0.0000934693878, + -0.0000497959184, -0.0000685714286, -0.0001120408163, -0.0001432653061, + -0.0001369387755, -0.0000685714286, -0.0000187755102 +}; diff --git a/plugins/LadspaEffect/swh/impulses/16-marshall-jcm2000-sm57.h b/plugins/LadspaEffect/swh/impulses/16-marshall-jcm2000-sm57.h new file mode 100644 index 000000000..1c0312f5a --- /dev/null +++ b/plugins/LadspaEffect/swh/impulses/16-marshall-jcm2000-sm57.h @@ -0,0 +1,1167 @@ +float marshall_jcm2000_sm57[] = { + +0.0000000000000, -0.0000060311284, -0.0000178988327, -0.0000356031128, + -0.0000416342412, -0.0000712062257, -0.0000949416342, -0.0000653696498, + -0.0002138132296, +0.0000118677043, +0.0000060311284, -0.0004215953307, + -0.0001424124514, +0.0001484435798, +0.0000653696498, -0.0001068093385, + -0.0002315175097, -0.0002256809339, -0.0001840466926, -0.0001365758755, + -0.0000949416342, -0.0001009727626, -0.0001128404669, -0.0001247081712, + -0.0001840466926, -0.0001603112840, -0.0001959143969, -0.0001840466926, + -0.0001782101167, -0.0001782101167, -0.0001840466926, -0.0002077821012, + -0.0002196498054, -0.0002494163424, -0.0002433852140, -0.0002671206226, + -0.0002494163424, -0.0002731517510, -0.0002494163424, -0.0002433852140, + -0.0002256809339, -0.0002433852140, -0.0003027237354, -0.0003503891051, + -0.0003799610895, -0.0004867704280, -0.0004690661479, -0.0004392996109, + -0.0002968871595, +0.0008073929961, +0.0002731517510, +0.0017040856031, + +0.0059373540856, -0.0068457198444, -0.0352317120623, -0.0352910505837, + +0.0115599221790, +0.0720013618677, +0.1071202334630, +0.0965577821012, + +0.0392276264591, -0.0504490272374, -0.1408558365759, -0.1945346303502, + -0.1865371595331, -0.1197844357977, -0.0299772373541, +0.0433243190661, + +0.0822727626459, +0.0901040856031, +0.0776178988327, +0.0520817120623, + +0.0231019455253, +0.0037404669261, -0.0043935797665, -0.0072077821012, + -0.0082171206226, -0.0070951361868, -0.0022620622568, +0.0053850194553, + +0.0119694552529, +0.0103546692607, +0.0006649805447, -0.0104198443580, + -0.0168025291829, -0.0156743190661, -0.0098737354086, +0.0008252918288, + +0.0175624513619, +0.0316931906615, +0.0357245136187, +0.0299178988327, + +0.0180789883268, +0.0072850194553, +0.0024223735409, +0.0049280155642, + +0.0127472762646, +0.0196167315175, +0.0183758754864, +0.0108651750973, + +0.0062519455253, +0.0042926070039, -0.0001365758755, -0.0039719844358, + -0.0036394941634, -0.0006470817121, +0.0060797665370, +0.0174852140078, + +0.0276498054475, +0.0299595330739, +0.0247287937743, +0.0167194552529, + +0.0101408560311, +0.0065546692607, +0.0052900778210, +0.0042511673152, + +0.0001900778210, -0.0058066147860, -0.0098856031128, -0.0103190661479, + -0.0061747081712, +0.0010212062257, +0.0067626459144, +0.0094046692607, + +0.0107642023346, +0.0107048638132, +0.0093749027237, +0.0098202334630, + +0.0111145914397, +0.0093215953307, +0.0052782101167, +0.0023570038911, + +0.0018939688716, +0.0027490272374, +0.0044173151751, +0.0067863813230, + +0.0075463035019, +0.0046488326848, -0.0008608949416, -0.0058422178988, + -0.0085912451362, -0.0095826848249, -0.0087040856031, -0.0064894941634, + -0.0042986381323, -0.0022799610895, +0.0003978599222, +0.0043996108949, + +0.0083241245136, +0.0107583657588, +0.0113698443580, +0.0091315175097, + +0.0039601167315, -0.0024640077821, -0.0082350194553, -0.0118330739300, + -0.0131332684825, -0.0135369649805, -0.0141544747082, -0.0146768482490, + -0.0144690661479, -0.0132875486381, -0.0097015564202, -0.0031052529183, + +0.0040017509728, +0.0086743190661, +0.0093392996109, +0.0058303501946, + -0.0002612840467, -0.0065904669261, -0.0118507782101, -0.0155556420233, + -0.0173723735409, -0.0165947470817, -0.0128957198444, -0.0075819066148, + -0.0028379377432, +0.0000060311284, +0.0006708171206, -0.0002138132296, + -0.0006649805447, +0.0006056420233, +0.0024579766537, +0.0028202334630, + +0.0007480544747, -0.0030338521401, -0.0070474708171, -0.0104614785992, + -0.0125394941634, -0.0125157587549, -0.0111799610895, -0.0104258754864, + -0.0109126459144, -0.0117260700389, -0.0118626459144, -0.0111620622568, + -0.0097608949416, -0.0077599221790, -0.0059313229572, -0.0049754863813, + -0.0048270428016, -0.0048507782101, -0.0043105058366, -0.0030933852140, + -0.0022501945525, -0.0029507782101, -0.0052605058366, -0.0082289883268, + -0.0106038910506, -0.0114054474708, -0.0100340466926, -0.0066854085603, + -0.0024521400778, +0.0006470817121, +0.0009856031128, -0.0010686770428, + -0.0040671206226, -0.0067566147860, -0.0078015564202, -0.0064182879377, + -0.0035682879377, -0.0007778210117, +0.0009856031128, +0.0014011673152, + +0.0005344357977, -0.0015614785992, -0.0044470817121, -0.0067447470817, + -0.0073799610895, -0.0066556420233, -0.0057770428016, -0.0053317120623, + -0.0050287937743, -0.0047142023346, -0.0043163424125, -0.0036276264591, + -0.0025470817121, -0.0017159533074, -0.0020365758755, -0.0036692607004, + -0.0059610894942, -0.0078964980545, -0.0090186770428, -0.0097490272374, + -0.0102536964981, -0.0100754863813, -0.0088464980545, -0.0066616731518, + -0.0042332684825, -0.0021492217899, -0.0005165369650, +0.0007243190661, + +0.0016326848249, +0.0022501945525, +0.0025649805447, +0.0026243190661, + +0.0025531128405, +0.0025412451362, +0.0028379377432, +0.0033902723735, + +0.0038710116732, +0.0038889105058, +0.0031585603113, +0.0018227626459, + +0.0002612840467, -0.0013655642023, -0.0028558365759, -0.0038354085603, + -0.0040610894942, -0.0034852140078, -0.0024758754864, -0.0014428015564, + -0.0008311284047, -0.0009202334630, -0.0012408560311, -0.0011459143969, + -0.0006768482490, -0.0001840466926, +0.0001424124514, +0.0003680933852, + +0.0004630350195, +0.0002138132296, -0.0002077821012, -0.0002019455253, + +0.0003741245136, +0.0009737354086, +0.0010212062257, +0.0004097276265, + -0.0005463035019, -0.0013299610895, -0.0013180933852, -0.0000772373541, + +0.0022501945525, +0.0050110894942, +0.0071721789883, +0.0077124513619, + +0.0062579766537, +0.0033188715953, +0.0000356031128, -0.0022443579767, + -0.0025470817121, -0.0007778210117, +0.0022443579767, +0.0052723735409, + +0.0069466926070, +0.0068219844358, +0.0054503891051, +0.0036038910506, + +0.0019533073930, +0.0009143968872, +0.0005344357977, +0.0008371595331, + +0.0016326848249, +0.0024877431907, +0.0031822957198, +0.0036038910506, + +0.0037346303502, +0.0036455252918, +0.0035029182879, +0.0036336575875, + +0.0041027237354, +0.0045836575875, +0.0048745136187, +0.0049931906615, + +0.0050883268482, +0.0055215953307, +0.0066437743191, +0.0081103112840, + +0.0089474708171, +0.0085793774319, +0.0071426070039, +0.0053375486381, + +0.0039126459144, +0.0031585603113, +0.0031348249027, +0.0039424124514, + +0.0053079766537, +0.0064834630350, +0.0068931906615, +0.0063766536965, + +0.0050050583658, +0.0033011673152, +0.0019118677043, +0.0010865758755, + +0.0006412451362, +0.0004809338521, +0.0009143968872, +0.0020305447471, + +0.0035029182879, +0.0049754863813, +0.0060085603113, +0.0063112840467, + +0.0059729571984, +0.0052070038911, +0.0043935797665, +0.0039601167315, + +0.0040431906615, +0.0044173151751, +0.0046073929961, +0.0044410505837, + +0.0040552529183, +0.0035743190661, +0.0029982490272, +0.0024223735409, + +0.0020484435798, +0.0019533073930, +0.0020898832685, +0.0023095330739, + +0.0024105058366, +0.0024521400778, +0.0027964980545, +0.0036038910506, + +0.0045478599222, +0.0052128404669, +0.0053612840467, +0.0049813229572, + +0.0046013618677, +0.0047498054475, +0.0052782101167, +0.0058245136187, + +0.0060322957198, +0.0057591439689, +0.0052307392996, +0.0047081712062, + +0.0042867704280, +0.0041085603113, +0.0042867704280, +0.0048270428016, + +0.0055334630350, +0.0060678988327, +0.0060797665370, +0.0055334630350, + +0.0047616731518, +0.0041085603113, +0.0037642023346, +0.0038058365759, + +0.0040075875486, +0.0038058365759, +0.0028737354086, +0.0015675097276, + +0.0005581712062, +0.0002968871595, +0.0007422178988, +0.0015496108949, + +0.0024579766537, +0.0031941634241, +0.0032180933852, +0.0021433852140, + +0.0001365758755, -0.0020542801556, -0.0034198443580, -0.0033486381323, + -0.0019414396887, +0.0000772373541, +0.0018583657588, +0.0029924124514, + +0.0035266536965, +0.0035861867704, +0.0032357976654, +0.0025233463035, + +0.0015079766537, +0.0005877431907, +0.0003799610895, +0.0008252918288, + +0.0013062256809, +0.0015793774319, +0.0016980544747, +0.0016268482490, + +0.0014428015564, +0.0015852140078, +0.0022680933852, +0.0031822957198, + +0.0037702334630, +0.0035624513619, +0.0024996108949, +0.0009914396887, + -0.0004392996109, -0.0014011673152, -0.0017692607004, -0.0015852140078, + -0.0008192607004, +0.0003385214008, +0.0013299610895, +0.0017040856031, + +0.0013834630350, +0.0004630350195, -0.0007066147860, -0.0015793774319, + -0.0018702334630, -0.0016208171206, -0.0009262645914, +0.0000535019455, + +0.0010628404669, +0.0017990272374, +0.0020126459144, +0.0017692607004, + +0.0014723735409, +0.0013655642023, +0.0012645914397, +0.0009618677043, + +0.0004809338521, -0.0001247081712, -0.0008964980545, -0.0016268482490, + -0.0019651750973, -0.0017573929961, -0.0012645914397, -0.0009381322957, + -0.0011221789883, -0.0017692607004, -0.0024461089494, -0.0026894941634, + -0.0022976653696, -0.0014130350195, -0.0003503891051, +0.0004571984436, + +0.0005758754864, +0.0000060311284, -0.0008015564202, -0.0015258754864, + -0.0021077821012, -0.0025352140078, -0.0027192607004, -0.0026599221790, + -0.0024579766537, -0.0022443579767, -0.0022145914397, -0.0022680933852, + -0.0022324902724, -0.0022501945525, -0.0024640077821, -0.0027490272374, + -0.0029924124514, -0.0032951361868, -0.0037346303502, -0.0041027237354, + -0.0039898832685, -0.0033544747082, -0.0026599221790, -0.0023451361868, + -0.0025173151751, -0.0030933852140, -0.0037464980545, -0.0039482490272, + -0.0034733463035, -0.0026599221790, -0.0019593385214, -0.0015258754864, + -0.0014486381323, -0.0018346303502, -0.0025649805447, -0.0032239299611, + -0.0033070038911, -0.0026657587549, -0.0016031128405, -0.0007184824903, + -0.0005225680934, -0.0010628404669, -0.0021433852140, -0.0034317120623, + -0.0043756809339, -0.0045599221790, -0.0040908560311, -0.0034673151751, + -0.0031171206226, -0.0030992217899, -0.0032418287938, -0.0034910505837, + -0.0037879377432, -0.0039898832685, -0.0041322957198, -0.0044352140078, + -0.0048270428016, -0.0050764591440, -0.0050466926070, -0.0047081712062, + -0.0041383268482, -0.0035801556420, -0.0031822957198, -0.0028914396887, + -0.0026955252918, -0.0025887159533, -0.0024758754864, -0.0023392996109, + -0.0022443579767, -0.0023095330739, -0.0025470817121, -0.0028260700389, + -0.0029568093385, -0.0029389105058, -0.0028202334630, -0.0026538910506, + -0.0025531128405, -0.0026243190661, -0.0028795719844, -0.0032180933852, + -0.0034435797665, -0.0034079766537, -0.0031941634241, -0.0030042801556, + -0.0029924124514, -0.0031466926070, -0.0034140077821, -0.0037346303502, + -0.0039542801556, -0.0039424124514, -0.0037048638132, -0.0033961089494, + -0.0031171206226, -0.0027667315175, -0.0022443579767, -0.0016208171206, + -0.0010330739300, -0.0006470817121, -0.0005581712062, -0.0007184824903, + -0.0010628404669, -0.0015793774319, -0.0019889105058, -0.0019533073930, + -0.0015258754864, -0.0009083657588, -0.0002196498054, +0.0003145914397, + +0.0005521400778, +0.0003859922179, -0.0002138132296, -0.0010924124514, + -0.0019058365759, -0.0023451361868, -0.0023392996109, -0.0019295719844, + -0.0012645914397, -0.0005996108949, -0.0002138132296, -0.0001305447471, + -0.0002019455253, -0.0003324902724, -0.0004334630350, -0.0003741245136, + -0.0001900778210, -0.0000178988327, +0.0000237354086, -0.0000535019455, + -0.0001186770428, -0.0001128404669, +0.0000000000000, +0.0002552529183, + +0.0006352140078, +0.0010093385214, +0.0011754863813, +0.0009618677043, + +0.0004571984436, -0.0001484435798, -0.0007955252918, -0.0013357976654, + -0.0014902723735, -0.0011815175097, -0.0005937743191, +0.0000356031128, + +0.0004392996109, +0.0004274319066, +0.0000356031128, -0.0004334630350, + -0.0007066147860, -0.0007480544747, -0.0007243190661, -0.0007955252918, + -0.0009439688716, -0.0011459143969, -0.0013774319066, -0.0014784046693, + -0.0012350194553, -0.0007124513619, -0.0001424124514, +0.0003206225681, + +0.0005758754864, +0.0005877431907, +0.0004334630350, +0.0002433852140, + +0.0002552529183, +0.0005640077821, +0.0009143968872, +0.0011696498054, + +0.0013597276265, +0.0014486381323, +0.0013357976654, +0.0010330739300, + +0.0007778210117, +0.0007243190661, +0.0009143968872, +0.0012289883268, + +0.0014309338521, +0.0014249027237, +0.0013180933852, +0.0011398832685, + +0.0008727626459, +0.0006412451362, +0.0005700389105, +0.0006352140078, + +0.0006056420233, +0.0004511673152, +0.0004155642023, +0.0005640077821, + +0.0006947470817, +0.0007361867704, +0.0007480544747, +0.0006293774319, + +0.0003324902724, +0.0000178988327, -0.0001782101167, -0.0001900778210, + -0.0000297665370, +0.0001840466926, +0.0004334630350, +0.0006947470817, + +0.0008846303502, +0.0008550583658, +0.0005640077821, +0.0000891050584, + -0.0003978599222, -0.0007896887160, -0.0009381322957, -0.0006768482490, + -0.0000474708171, +0.0005877431907, +0.0008608949416, +0.0007243190661, + +0.0003622568093, -0.0001424124514, -0.0007005836576, -0.0009914396887, + -0.0007599221790, -0.0001424124514, +0.0005284046693, +0.0010330739300, + +0.0013180933852, +0.0013536964981, +0.0011280155642, +0.0008192607004, + +0.0006947470817, +0.0007955252918, +0.0009381322957, +0.0009856031128, + +0.0008906614786, +0.0006056420233, +0.0002256809339, +0.0000356031128, + +0.0001721789883, +0.0004809338521, +0.0006708171206, +0.0006233463035, + +0.0004274319066, +0.0002375486381, +0.0001247081712, +0.0000891050584, + +0.0001186770428, +0.0001186770428, +0.0000593385214, +0.0000712062257, + +0.0002612840467, +0.0006589494163, +0.0011280155642, +0.0014486381323, + +0.0015079766537, +0.0012943579767, +0.0008846303502, +0.0004928015564, + +0.0003978599222, +0.0007778210117, +0.0014902723735, +0.0021373540856, + +0.0023809338521, +0.0020780155642, +0.0014071984436, +0.0007540856031, + +0.0004453307393, +0.0005700389105, +0.0009321011673, +0.0012171206226, + +0.0011459143969, +0.0007303501946, +0.0002138132296, -0.0001365758755, + -0.0002315175097, -0.0000593385214, +0.0002552529183, +0.0004986381323, + +0.0004928015564, +0.0003027237354, +0.0001186770428, +0.0000474708171, + +0.0001424124514, +0.0003503891051, +0.0005463035019, +0.0006887159533, + +0.0007955252918, +0.0008727626459, +0.0009262645914, +0.0009558365759, + +0.0010330739300, +0.0011875486381, +0.0013418287938, +0.0013774319066, + +0.0012527237354, +0.0009856031128, +0.0006589494163, +0.0004749027237, + +0.0005877431907, +0.0009677042802, +0.0014486381323, +0.0019712062257, + +0.0024579766537, +0.0027785992218, +0.0028142023346, +0.0025768482490, + +0.0022027237354, +0.0018404669261, +0.0016149805447, +0.0015258754864, + +0.0015198443580, +0.0015675097276, +0.0015852140078, +0.0014784046693, + +0.0012468871595, +0.0009143968872, +0.0005640077821, +0.0002671206226, + +0.0001247081712, +0.0002196498054, +0.0004928015564, +0.0008192607004, + +0.0010865758755, +0.0012527237354, +0.0012527237354, +0.0011280155642, + +0.0010033073930, +0.0009618677043, +0.0009914396887, +0.0010153696498, + +0.0009974708171, +0.0008429961089, +0.0005463035019, +0.0002552529183, + +0.0001068093385, +0.0001603112840, +0.0004155642023, +0.0007778210117, + +0.0011042801556, +0.0013239299611, +0.0013953307393, +0.0013001945525, + +0.0010924124514, +0.0008550583658, +0.0006293774319, +0.0004986381323, + +0.0004334630350, +0.0003087548638, +0.0000593385214, -0.0002494163424, + -0.0004867704280, -0.0004867704280, -0.0001959143969, +0.0002494163424, + +0.0006828793774, +0.0010272373541, +0.0012052529183, +0.0011517509728, + +0.0009143968872, +0.0005996108949, +0.0002968871595, +0.0001365758755, + +0.0001959143969, +0.0004215953307, +0.0006470817121, +0.0007717898833, + +0.0007896887160, +0.0007361867704, +0.0006470817121, +0.0005937743191, + +0.0005700389105, +0.0005344357977, +0.0004809338521, +0.0004334630350, + +0.0003562256809, +0.0003145914397, +0.0003562256809, +0.0004155642023, + +0.0003918287938, +0.0003264591440, +0.0002850194553, +0.0002850194553, + +0.0002850194553, +0.0002196498054, +0.0000712062257, -0.0000830739300, + -0.0001900778210, -0.0002256809339, -0.0001959143969, -0.0001305447471, + -0.0000416342412, +0.0000891050584, +0.0002552529183, +0.0003443579767, + +0.0002850194553, +0.0000830739300, -0.0001424124514, -0.0002789883268, + -0.0002850194553, -0.0002256809339, -0.0001128404669, -0.0000060311284, + +0.0000237354086, +0.0000000000000, -0.0000712062257, -0.0001782101167, + -0.0002375486381, -0.0002968871595, -0.0004867704280, -0.0007599221790, + -0.0009321011673, -0.0008964980545, -0.0006470817121, -0.0002789883268, + +0.0000000000000, +0.0000000000000, -0.0002612840467, -0.0006887159533, + -0.0010984435798, -0.0013418287938, -0.0013299610895, -0.0011103112840, + -0.0008015564202, -0.0005402723735, -0.0003918287938, -0.0003145914397, + -0.0002908560311, -0.0002494163424, -0.0001305447471, +0.0000000000000, + +0.0000000000000, -0.0001247081712, -0.0002731517510, -0.0003264591440, + -0.0002494163424, -0.0000178988327, +0.0002315175097, +0.0003264591440, + +0.0002196498054, -0.0000416342412, -0.0003918287938, -0.0007361867704, + -0.0009262645914, -0.0009143968872, -0.0008134241245, -0.0007422178988, + -0.0007361867704, -0.0008134241245, -0.0008550583658, -0.0007659533074, + -0.0005996108949, -0.0004215953307, -0.0003324902724, -0.0004036964981, + -0.0006056420233, -0.0008073929961, -0.0009677042802, -0.0010449416342, + -0.0009856031128, -0.0008429961089, -0.0007243190661, -0.0006828793774, + -0.0007778210117, -0.0009025291829, -0.0008727626459, -0.0006649805447, + -0.0003918287938, -0.0002138132296, -0.0002375486381, -0.0004334630350, + -0.0006887159533, -0.0009262645914, -0.0010984435798, -0.0011815175097, + -0.0010865758755, -0.0007778210117, -0.0003680933852, -0.0000297665370, + +0.0001009727626, -0.0000118677043, -0.0003027237354, -0.0005344357977, + -0.0005640077821, -0.0004928015564, -0.0004036964981, -0.0003087548638, + -0.0001959143969, +0.0000000000000, +0.0003027237354, +0.0005937743191, + +0.0007480544747, +0.0007717898833, +0.0007066147860, +0.0006412451362, + +0.0006412451362, +0.0006589494163, +0.0005463035019, +0.0002908560311, + +0.0000356031128, -0.0000712062257, -0.0000297665370, +0.0000891050584, + +0.0001959143969, +0.0001900778210, +0.0000237354086, -0.0002019455253, + -0.0003859922179, -0.0004571984436, -0.0003206225681, -0.0000237354086, + +0.0002612840467, +0.0004392996109, +0.0004928015564, +0.0004392996109, + +0.0003027237354, +0.0001365758755, +0.0000237354086, -0.0000297665370, + -0.0001186770428, -0.0002433852140, -0.0002731517510, -0.0001900778210, + -0.0001068093385, -0.0000891050584, -0.0000712062257, +0.0000593385214, + +0.0003264591440, +0.0005877431907, +0.0006470817121, +0.0004392996109, + +0.0000416342412, -0.0004036964981, -0.0007778210117, -0.0009677042802, + -0.0009677042802, -0.0008015564202, -0.0005581712062, -0.0004274319066, + -0.0005225680934, -0.0008192607004, -0.0011994163424, -0.0014902723735, + -0.0015733463035, -0.0014486381323, -0.0011994163424, -0.0008669260700, + -0.0005521400778, -0.0002671206226, +0.0000830739300, +0.0003918287938, + +0.0004571984436, +0.0002612840467, -0.0000535019455, -0.0002968871595, + -0.0003443579767, -0.0002908560311, -0.0002433852140, -0.0002019455253, + -0.0001661478599, -0.0002138132296, -0.0002968871595, -0.0002552529183, + -0.0000237354086, +0.0003978599222, +0.0008727626459, +0.0011517509728, + +0.0011875486381, +0.0010153696498, +0.0006352140078, +0.0000772373541, + -0.0004453307393, -0.0007124513619, -0.0006828793774, -0.0004334630350, + +0.0000000000000, +0.0004274319066, +0.0005819066148, +0.0002968871595, + -0.0002850194553, -0.0008608949416, -0.0011577821012, -0.0010984435798, + -0.0007659533074, -0.0002789883268, +0.0002019455253, +0.0005284046693, + +0.0006175097276, +0.0004630350195, +0.0001247081712, -0.0004097276265, + -0.0010330739300, -0.0014605058366, -0.0014605058366, -0.0010924124514, + -0.0005463035019, +0.0000060311284, +0.0004630350195, +0.0007243190661, + +0.0007422178988, +0.0005521400778, +0.0002494163424, -0.0000297665370, + -0.0002138132296, -0.0003385214008, -0.0004453307393, -0.0004986381323, + -0.0005225680934, -0.0005107003891, -0.0004036964981, -0.0001603112840, + +0.0001603112840, +0.0003918287938, +0.0003027237354, -0.0001128404669, + -0.0006175097276, -0.0009381322957, -0.0009439688716, -0.0006114785992, + -0.0000237354086, +0.0006352140078, +0.0010984435798, +0.0012052529183, + +0.0010449416342, +0.0008192607004, +0.0007066147860, +0.0007124513619, + +0.0005819066148, +0.0001068093385, -0.0006828793774, -0.0015198443580, + -0.0019949416342, -0.0018821011673, -0.0013062256809, -0.0004749027237, + +0.0003206225681, +0.0008311284047, +0.0009500000000, +0.0007717898833, + +0.0004867704280, +0.0002552529183, +0.0001068093385, +0.0000772373541, + +0.0002494163424, +0.0006056420233, +0.0009618677043, +0.0011042801556, + +0.0009618677043, +0.0006233463035, +0.0002552529183, -0.0000535019455, + -0.0003562256809, -0.0006887159533, -0.0009677042802, -0.0010805447471, + -0.0010330739300, -0.0008608949416, -0.0005107003891, -0.0000297665370, + +0.0004571984436, +0.0008252918288, +0.0009262645914, +0.0007836575875, + +0.0006233463035, +0.0006175097276, +0.0007124513619, +0.0007066147860, + +0.0004986381323, +0.0000891050584, -0.0004334630350, -0.0008192607004, + -0.0008311284047, -0.0004274319066, +0.0002375486381, +0.0008371595331, + +0.0011280155642, +0.0011517509728, +0.0009914396887, +0.0006589494163, + +0.0001900778210, -0.0003264591440, -0.0007955252918, -0.0012171206226, + -0.0015556420233, -0.0016505836576, -0.0014071984436, -0.0008964980545, + -0.0001603112840, +0.0008073929961, +0.0019770428016, +0.0032060311284, + +0.0042688715953, +0.0049161478599, +0.0048151750973, +0.0038116731518, + +0.0021789883268, +0.0005107003891, -0.0008015564202, -0.0016564202335, + -0.0019712062257, -0.0018346303502, -0.0015140077821, -0.0011161478599, + -0.0006531128405, -0.0002375486381, +0.0000830739300, +0.0003799610895, + +0.0006887159533, +0.0009618677043, +0.0011340466926, +0.0011815175097, + +0.0010509727626, +0.0006828793774, +0.0001900778210, -0.0001068093385, + +0.0001186770428, +0.0007717898833, +0.0012824902724, +0.0012527237354, + +0.0007480544747, +0.0000118677043, -0.0007480544747, -0.0014011673152, + -0.0018108949416, -0.0019414396887, -0.0018464980545, -0.0015319066148, + -0.0010212062257, -0.0004274319066, +0.0000772373541, +0.0004690661479, + +0.0007422178988, +0.0008608949416, +0.0008015564202, +0.0004274319066, + -0.0002850194553, -0.0011221789883, -0.0017515564202, -0.0019533073930, + -0.0016149805447, -0.0008964980545, -0.0001247081712, +0.0004334630350, + +0.0006352140078, +0.0005165369650, +0.0003087548638, +0.0002731517510, + +0.0005165369650, +0.0008964980545, +0.0012408560311, +0.0013655642023, + +0.0010747081712, +0.0003385214008, -0.0006114785992, -0.0014665369650, + -0.0020365758755, -0.0022145914397, -0.0019889105058, -0.0014546692607, + -0.0007243190661, +0.0000712062257, +0.0007659533074, +0.0011815175097, + +0.0012171206226, +0.0009795719844, +0.0006947470817, +0.0004867704280, + +0.0003859922179, +0.0004215953307, +0.0005996108949, +0.0008550583658, + +0.0010686770428, +0.0011280155642, +0.0009500000000, +0.0005996108949, + +0.0002138132296, -0.0000297665370, -0.0000416342412, +0.0000178988327, + -0.0000356031128, -0.0001840466926, -0.0002375486381, -0.0000060311284, + +0.0005640077821, +0.0013180933852, +0.0019058365759, +0.0020186770428, + +0.0016268482490, +0.0010033073930, +0.0004215953307, +0.0001009727626, + +0.0002077821012, +0.0006470817121, +0.0010924124514, +0.0012231517510, + +0.0008669260700, +0.0001782101167, -0.0004630350195, -0.0007896887160, + -0.0007422178988, -0.0003799610895, +0.0001959143969, +0.0007659533074, + +0.0009974708171, +0.0007659533074, +0.0002196498054, -0.0003443579767, + -0.0008015564202, -0.0011398832685, -0.0012943579767, -0.0012408560311, + -0.0010449416342, -0.0007717898833, -0.0005225680934, -0.0003087548638, + +0.0000060311284, +0.0004334630350, +0.0008429961089, +0.0011696498054, + +0.0013239299611, +0.0012171206226, +0.0008608949416, +0.0003622568093, + -0.0000653696498, -0.0002789883268, -0.0003859922179, -0.0005344357977, + -0.0007599221790, -0.0010212062257, -0.0012645914397, -0.0013953307393, + -0.0013834630350, -0.0013299610895, -0.0012764591440, -0.0011696498054, + -0.0010033073930, -0.0008311284047, -0.0007480544747, -0.0007303501946, + -0.0006293774319, -0.0004097276265, -0.0001484435798, +0.0000830739300, + +0.0002552529183, +0.0003324902724, +0.0002671206226, +0.0000653696498, + -0.0001424124514, -0.0002552529183, -0.0002433852140, -0.0001128404669, + +0.0000891050584, +0.0003264591440, +0.0005107003891, +0.0005344357977, + +0.0003324902724, +0.0000118677043, -0.0002433852140, -0.0003799610895, + -0.0004215953307, -0.0003503891051, -0.0001186770428, +0.0002494163424, + +0.0006412451362, +0.0008846303502, +0.0008550583658, +0.0005521400778, + +0.0001365758755, -0.0002196498054, -0.0004215953307, -0.0004453307393, + -0.0002850194553, +0.0000535019455, +0.0005284046693, +0.0009262645914, + +0.0010391050584, +0.0007836575875, +0.0002552529183, -0.0002968871595, + -0.0006233463035, -0.0006114785992, -0.0003799610895, -0.0001186770428, + +0.0000356031128, +0.0000178988327, -0.0001186770428, -0.0003443579767, + -0.0006293774319, -0.0008550583658, -0.0008964980545, -0.0007124513619, + -0.0003264591440, +0.0000830739300, +0.0003680933852, +0.0004749027237, + +0.0003978599222, +0.0001959143969, +0.0000416342412, +0.0000772373541, + +0.0003264591440, +0.0006768482490, +0.0009321011673, +0.0009618677043, + +0.0007361867704, +0.0002671206226, -0.0002968871595, -0.0008073929961, + -0.0011577821012, -0.0013239299611, -0.0013001945525, -0.0011280155642, + -0.0007836575875, -0.0002671206226, +0.0003385214008, +0.0008846303502, + +0.0011517509728, +0.0010391050584, +0.0006293774319, +0.0000178988327, + -0.0006768482490, -0.0012706225681, -0.0015793774319, -0.0014784046693, + -0.0009677042802, -0.0002968871595, +0.0002019455253, +0.0004453307393, + +0.0004155642023, +0.0001247081712, -0.0002850194553, -0.0006768482490, + -0.0009202334630, -0.0009025291829, -0.0006649805447, -0.0003741245136, + -0.0001186770428, +0.0000653696498, +0.0001603112840, +0.0000772373541, + -0.0001661478599, -0.0004036964981, -0.0005046692607, -0.0005463035019, + -0.0005996108949, -0.0005700389105, -0.0004334630350, -0.0002789883268, + -0.0002315175097, -0.0003087548638, -0.0003918287938, -0.0004036964981, + -0.0004334630350, -0.0005463035019, -0.0006589494163, -0.0007303501946, + -0.0007778210117, -0.0007480544747, -0.0005877431907, -0.0003680933852, + -0.0002138132296, -0.0001305447471, -0.0001365758755, -0.0002494163424, + -0.0004690661479, -0.0007066147860, -0.0008964980545, -0.0009795719844, + -0.0009025291829, -0.0006352140078, -0.0002315175097, +0.0001782101167, + +0.0004749027237, +0.0005521400778, +0.0004215953307, +0.0001603112840, + -0.0001365758755, -0.0003859922179, -0.0004749027237, -0.0004215953307, + -0.0002731517510, -0.0000712062257, +0.0001365758755, +0.0003264591440, + +0.0004749027237, +0.0005581712062, +0.0005402723735, +0.0003859922179, + +0.0000891050584, -0.0002196498054, -0.0004867704280, -0.0006352140078, + -0.0005819066148, -0.0002850194553, +0.0001128404669, +0.0004630350195, + +0.0007422178988, +0.0008846303502, +0.0008192607004, +0.0006412451362, + +0.0004392996109, +0.0002908560311, +0.0002375486381, +0.0002375486381, + +0.0002315175097, +0.0002196498054, +0.0001900778210, +0.0001247081712, + +0.0000891050584, +0.0001247081712, +0.0001959143969, +0.0002671206226, + +0.0002968871595, +0.0001959143969, +0.0000000000000, -0.0002375486381, + -0.0004334630350, -0.0004215953307, -0.0002019455253, +0.0000000000000, + +0.0000891050584, +0.0001365758755, +0.0001424124514, +0.0000830739300, + -0.0000593385214, -0.0002196498054, -0.0002612840467, -0.0001782101167, + -0.0000474708171, +0.0000653696498, +0.0001603112840, +0.0002789883268, + +0.0005107003891, +0.0008192607004, +0.0011577821012, +0.0014367704280, + +0.0015496108949, +0.0014309338521, +0.0011696498054, +0.0008906614786, + +0.0006531128405, +0.0004511673152, +0.0002789883268, +0.0001661478599, + +0.0001484435798, +0.0001542801556, +0.0001484435798, +0.0001782101167, + +0.0002612840467, +0.0003859922179, +0.0005284046693, +0.0005996108949, + +0.0004690661479, +0.0001603112840, -0.0001424124514, -0.0003027237354, + -0.0002671206226, -0.0000891050584, +0.0001424124514, +0.0003741245136, + +0.0005225680934, +0.0005521400778, +0.0005463035019, +0.0005284046693, + +0.0004274319066, +0.0002731517510, +0.0001247081712, -0.0000060311284, + -0.0000830739300, -0.0000772373541, -0.0000237354086, +0.0001009727626, + +0.0004036964981, +0.0008252918288, +0.0011042801556, +0.0010984435798, + +0.0008429961089, +0.0004630350195, +0.0001247081712, -0.0000772373541, + -0.0001186770428, -0.0000712062257, -0.0000297665370, -0.0000178988327, + -0.0000356031128, -0.0000772373541, -0.0001305447471, -0.0001840466926, + -0.0002671206226, -0.0004097276265, -0.0005344357977, -0.0005937743191, + -0.0006352140078, -0.0006828793774, -0.0007184824903, -0.0006828793774, + -0.0005225680934, -0.0002494163424, +0.0000060311284, +0.0002019455253, + +0.0003324902724, +0.0003264591440, +0.0001424124514, -0.0001782101167, + -0.0005700389105, -0.0008311284047, -0.0008371595331, -0.0006233463035, + -0.0003145914397, -0.0000178988327, +0.0001661478599, +0.0001840466926, + +0.0000118677043, -0.0002494163424, -0.0004809338521, -0.0006175097276, + -0.0006056420233, -0.0004215953307, -0.0001900778210, -0.0000416342412, + -0.0000653696498, -0.0002850194553, -0.0005758754864, -0.0007243190661, + -0.0006768482490, -0.0005344357977, -0.0003443579767, -0.0001186770428, + +0.0000830739300, +0.0001900778210, +0.0001782101167, +0.0000712062257, + -0.0000416342412, -0.0001247081712, -0.0001424124514, -0.0000949416342, + -0.0000237354086, +0.0000237354086, +0.0000891050584, +0.0001484435798, + +0.0001782101167, +0.0001840466926, +0.0001542801556, +0.0001009727626, + +0.0000356031128, -0.0000593385214, -0.0001840466926, -0.0002433852140, + -0.0002256809339, -0.0000830739300, +0.0002433852140, +0.0006233463035, + +0.0008311284047, +0.0008311284047, +0.0006708171206, +0.0004334630350, + +0.0002375486381, +0.0001365758755, +0.0001542801556, +0.0002671206226, + +0.0003622568093, +0.0003443579767, +0.0002256809339, +0.0000237354086, + -0.0001959143969, -0.0003799610895, -0.0004571984436, -0.0004036964981, + -0.0002494163424, -0.0001128404669, -0.0000593385214, -0.0000772373541, + -0.0001484435798, -0.0002552529183, -0.0003206225681, -0.0002789883268, + -0.0001840466926, -0.0000535019455, +0.0001128404669, +0.0002494163424, + +0.0003206225681, +0.0003443579767, +0.0003145914397, +0.0002552529183, + +0.0001900778210, +0.0001186770428, +0.0000593385214, +0.0000772373541, + +0.0001661478599, +0.0002612840467, +0.0003385214008, +0.0003385214008, + +0.0002433852140, +0.0001603112840, +0.0002256809339, +0.0004511673152, + +0.0007243190661, +0.0008846303502, +0.0008134241245, +0.0005344357977, + +0.0001959143969, -0.0000653696498, -0.0001186770428, +0.0000356031128, + +0.0002552529183, +0.0003978599222, +0.0004215953307, +0.0003680933852, + +0.0002433852140, +0.0000891050584, -0.0000653696498, -0.0001840466926, + -0.0002138132296, -0.0001721789883, -0.0001128404669, -0.0001128404669, + -0.0001603112840, -0.0002433852140, -0.0003503891051, -0.0004155642023, + -0.0003145914397, -0.0000356031128, +0.0003206225681, +0.0005937743191, + +0.0006708171206, +0.0005284046693, +0.0002077821012, -0.0001068093385, + -0.0002671206226, -0.0002196498054, -0.0000178988327, +0.0002256809339, + +0.0003978599222, +0.0004392996109, +0.0003918287938, +0.0002494163424, + +0.0000000000000, -0.0002908560311, -0.0005225680934, -0.0005937743191, + -0.0004867704280, -0.0002612840467, -0.0000535019455, +0.0001186770428, + +0.0002552529183, +0.0003145914397, +0.0003324902724, +0.0003443579767, + +0.0002850194553, +0.0001661478599, +0.0000891050584, +0.0000830739300, + +0.0001068093385, +0.0001305447471, +0.0001542801556, +0.0001782101167, + +0.0002612840467, +0.0004215953307, +0.0006293774319, +0.0008134241245, + +0.0009381322957, +0.0009618677043, +0.0008134241245, +0.0004809338521, + +0.0000356031128, -0.0003799610895, -0.0006649805447, -0.0006947470817, + -0.0004392996109, -0.0000535019455, +0.0002375486381, +0.0003622568093, + +0.0003443579767, +0.0001721789883, -0.0001186770428, -0.0004274319066, + -0.0005758754864, -0.0004690661479, -0.0001721789883, +0.0001128404669, + +0.0002138132296, +0.0001128404669, -0.0001305447471, -0.0004453307393, + -0.0007124513619, -0.0007896887160, -0.0006589494163, -0.0003799610895, + -0.0000712062257, +0.0001484435798, +0.0002077821012, +0.0000535019455, + -0.0002375486381, -0.0005402723735, -0.0007422178988, -0.0008311284047, + -0.0008015564202, -0.0006589494163, -0.0004453307393, -0.0002196498054, + -0.0000237354086, +0.0000830739300, +0.0000474708171, -0.0000891050584, + -0.0002552529183, -0.0003978599222, -0.0004809338521, -0.0004392996109, + -0.0003206225681, -0.0002196498054, -0.0001959143969, -0.0002968871595, + -0.0004928015564, -0.0007243190661, -0.0008846303502, -0.0008669260700, + -0.0006887159533, -0.0004453307393, -0.0002019455253, -0.0000593385214, + -0.0000772373541, -0.0001959143969, -0.0003027237354, -0.0003918287938, + -0.0004453307393, -0.0004511673152, -0.0004392996109, -0.0004392996109, + -0.0004334630350, -0.0004036964981, -0.0003324902724, -0.0002138132296, + -0.0000118677043, +0.0002612840467, +0.0005046692607, +0.0005640077821, + +0.0004453307393, +0.0002256809339, -0.0000297665370, -0.0002494163424, + -0.0003443579767, -0.0003145914397, -0.0002138132296, -0.0001128404669, + -0.0000474708171, -0.0000474708171, -0.0000593385214, -0.0000118677043, + +0.0001009727626, +0.0002494163424, +0.0004097276265, +0.0005463035019, + +0.0005877431907, +0.0004809338521, +0.0002494163424, -0.0000297665370, + -0.0002375486381, -0.0003264591440, -0.0003385214008, -0.0003087548638, + -0.0002612840467, -0.0002256809339, -0.0002315175097, -0.0002671206226, + -0.0002671206226, -0.0001840466926, -0.0000593385214, +0.0000297665370, + +0.0000535019455, -0.0000356031128, -0.0002375486381, -0.0004215953307, + -0.0005046692607, -0.0004749027237, -0.0003622568093, -0.0002433852140, + -0.0002196498054, -0.0002789883268, -0.0003443579767, -0.0003324902724, + -0.0001900778210, +0.0000830739300, +0.0004097276265, +0.0006708171206, + +0.0007778210117, +0.0006708171206, +0.0003680933852, +0.0000237354086, + -0.0001721789883, -0.0001484435798, +0.0000593385214, +0.0003562256809, + +0.0006175097276, +0.0007717898833, +0.0008311284047, +0.0008192607004, + +0.0007124513619, +0.0005284046693, +0.0003503891051, +0.0002494163424, + +0.0001959143969, +0.0001542801556, +0.0001365758755, +0.0001603112840, + +0.0002019455253, +0.0002375486381, +0.0002789883268, +0.0003264591440, + +0.0003206225681, +0.0002196498054, +0.0000356031128, -0.0001661478599, + -0.0002908560311, -0.0003145914397, -0.0002789883268, -0.0002077821012, + -0.0001186770428, -0.0000593385214, -0.0000772373541, -0.0001305447471, + -0.0001542801556, -0.0001542801556, -0.0001721789883, -0.0001959143969, + -0.0002138132296, -0.0002612840467, -0.0003324902724, -0.0003918287938, + -0.0003680933852, -0.0002494163424, -0.0000949416342, +0.0000297665370, + +0.0001305447471, +0.0001900778210, +0.0001721789883, +0.0000949416342, + +0.0000118677043, -0.0000297665370, +0.0000000000000, +0.0000772373541, + +0.0001484435798, +0.0002375486381, +0.0003918287938, +0.0005402723735, + +0.0005819066148, +0.0005046692607, +0.0003680933852, +0.0002375486381, + +0.0001128404669, +0.0000178988327, -0.0000178988327, +0.0000237354086, + +0.0001305447471, +0.0002612840467, +0.0003562256809, +0.0004036964981, + +0.0003680933852, +0.0002375486381, +0.0001068093385, +0.0000356031128, + +0.0000474708171, +0.0001247081712, +0.0002433852140, +0.0003087548638, + +0.0002908560311, +0.0002019455253, +0.0000593385214, -0.0000712062257, + -0.0001424124514, -0.0001186770428, -0.0000416342412, +0.0000653696498, + +0.0001603112840, +0.0001721789883, +0.0001247081712, +0.0000712062257, + +0.0000060311284, -0.0000772373541, -0.0001603112840, -0.0001840466926, + -0.0001782101167, -0.0001424124514, -0.0000535019455, +0.0000949416342, + +0.0002494163424, +0.0003264591440, +0.0003324902724, +0.0002908560311, + +0.0002077821012, +0.0001247081712, +0.0000712062257, +0.0000653696498, + +0.0000891050584, +0.0000593385214, -0.0000356031128, -0.0001661478599, + -0.0002433852140, -0.0002552529183, -0.0002138132296, -0.0001186770428, + +0.0000000000000, +0.0001128404669, +0.0002315175097, +0.0002908560311, + +0.0002908560311, +0.0002433852140, +0.0001603112840, +0.0000474708171, + -0.0000535019455, -0.0001186770428, -0.0001484435798, -0.0001365758755, + -0.0000830739300, -0.0000356031128, +0.0000000000000, +0.0000237354086, + +0.0000891050584, +0.0001603112840, +0.0001900778210, +0.0001603112840, + +0.0000772373541, -0.0000356031128, -0.0002019455253, -0.0003859922179, + -0.0005225680934, -0.0005284046693, -0.0003622568093, -0.0000891050584, + +0.0001424124514, +0.0002494163424, +0.0001840466926, -0.0000297665370, + -0.0003027237354, -0.0005107003891, -0.0006175097276, -0.0006293774319, + -0.0005165369650, -0.0002671206226, +0.0000416342412, +0.0003324902724, + +0.0005521400778, +0.0006233463035, +0.0004809338521, +0.0001959143969, + -0.0001365758755, -0.0004274319066, -0.0006233463035, -0.0006828793774, + -0.0005996108949, -0.0004097276265, -0.0002375486381, -0.0001959143969, + -0.0002433852140, -0.0002552529183, -0.0001721789883, -0.0000118677043, + +0.0001782101167, +0.0003622568093, +0.0004749027237, +0.0004392996109, + +0.0002850194553, +0.0000830739300, -0.0001247081712, -0.0002494163424, + -0.0001959143969, +0.0000060311284, +0.0002731517510, +0.0005107003891, + +0.0005877431907, +0.0004630350195, +0.0002315175097, -0.0000237354086, + -0.0002433852140, -0.0003680933852, -0.0003680933852, -0.0002433852140, + -0.0000712062257, +0.0000356031128, +0.0000653696498, +0.0000060311284, + -0.0001128404669, -0.0002552529183, -0.0004036964981, -0.0005284046693, + -0.0005937743191, -0.0006293774319, -0.0005937743191, -0.0004511673152, + -0.0002433852140, -0.0000535019455, +0.0000772373541, +0.0001661478599, + +0.0001959143969, +0.0001424124514, +0.0000356031128, -0.0000653696498, + -0.0001603112840, -0.0001900778210, -0.0001186770428, +0.0000000000000, + +0.0001365758755, +0.0002375486381, +0.0002494163424, +0.0001365758755, + -0.0000416342412, -0.0002494163424, -0.0003859922179, -0.0003741245136, + -0.0001661478599, +0.0001603112840, +0.0004571984436, +0.0005877431907, + +0.0005165369650, +0.0002789883268, +0.0000178988327, -0.0001305447471, + -0.0001186770428, +0.0000356031128, +0.0002671206226, +0.0004334630350, + +0.0004334630350, +0.0002850194553, +0.0000474708171, -0.0002019455253, + -0.0003918287938, -0.0004511673152, -0.0003918287938, -0.0002968871595, + -0.0001840466926, -0.0000474708171, +0.0001305447471, +0.0003324902724, + +0.0004571984436, +0.0004690661479, +0.0003918287938, +0.0002552529183, + +0.0000535019455, -0.0002138132296, -0.0004690661479, -0.0005819066148, + -0.0005046692607, -0.0002375486381, +0.0001484435798, +0.0004986381323, + +0.0006947470817, +0.0007124513619, +0.0005402723735, +0.0001900778210, + -0.0002612840467, -0.0007717898833, -0.0012645914397, -0.0015675097276, + -0.0014367704280, -0.0007540856031, +0.0003978599222, +0.0016922178988, + +0.0026182879377, +0.0027192607004, +0.0018583657588, +0.0003027237354, + -0.0013597276265, -0.0024877431907, -0.0026717898833, -0.0019237354086, + -0.0006352140078, +0.0006531128405, +0.0015140077821, +0.0016743190661, + +0.0011696498054, +0.0002789883268, -0.0006352140078, -0.0013180933852, + -0.0016326848249, -0.0015496108949, -0.0011103112840, -0.0003562256809, + +0.0005165369650, +0.0011994163424, +0.0014902723735, +0.0013536964981, + +0.0008371595331, +0.0001186770428, -0.0005521400778, -0.0009321011673, + -0.0009202334630, -0.0005700389105, -0.0000416342412, +0.0004215953307, + +0.0006293774319, +0.0005284046693, +0.0002731517510, +0.0000474708171, + -0.0000535019455, -0.0000712062257, -0.0000356031128, -0.0000118677043, + -0.0000237354086, -0.0000712062257, -0.0001009727626, -0.0000474708171, + +0.0001186770428, +0.0003859922179, +0.0006470817121, +0.0007480544747, + +0.0006233463035, +0.0003680933852, +0.0001128404669, -0.0000653696498, + -0.0001661478599, -0.0002138132296, -0.0002138132296, -0.0001365758755, + -0.0000118677043, +0.0000593385214, +0.0000178988327, -0.0000949416342, + -0.0001365758755, +0.0000060311284, +0.0003324902724, +0.0007303501946, + +0.0010153696498, +0.0009677042802, +0.0005640077821, +0.0000297665370, + -0.0003918287938, -0.0005402723735, -0.0003799610895, +0.0000000000000, + +0.0004453307393, +0.0008134241245, +0.0009381322957, +0.0007659533074, + +0.0004155642023, +0.0000653696498, -0.0001542801556, -0.0002196498054, + -0.0001721789883, -0.0001128404669, -0.0000772373541, -0.0000416342412, + +0.0000118677043, +0.0000891050584, +0.0001840466926, +0.0002315175097, + +0.0002138132296, +0.0001484435798, +0.0000535019455, -0.0000535019455, + -0.0001128404669, -0.0000891050584, +0.0000118677043, +0.0001782101167, + +0.0003562256809, +0.0004690661479, +0.0004392996109, +0.0002552529183, + +0.0000297665370, -0.0001424124514, -0.0002196498054, -0.0002256809339, + -0.0001661478599, -0.0000535019455, +0.0001068093385, +0.0003443579767, + +0.0006114785992, +0.0008015564202, +0.0008429961089, +0.0006947470817, + +0.0003859922179, +0.0000356031128, -0.0002256809339, -0.0003087548638, + -0.0002256809339, -0.0000772373541, +0.0000297665370, +0.0000830739300, + +0.0001009727626, +0.0000772373541, +0.0000237354086, +0.0000000000000, + +0.0000830739300, +0.0002315175097, +0.0003443579767, +0.0003978599222, + +0.0003918287938, +0.0002789883268, +0.0000593385214, -0.0001305447471, + -0.0001424124514, +0.0000356031128, +0.0002850194553, +0.0004809338521, + +0.0005402723735, +0.0003741245136, +0.0000060311284, -0.0004215953307, + -0.0007659533074, -0.0008371595331, -0.0005284046693, +0.0000593385214, + +0.0007243190661, +0.0011815175097, +0.0012350194553, +0.0009381322957, + +0.0004867704280, +0.0000356031128, -0.0003206225681, -0.0005344357977, + -0.0006114785992, -0.0005344357977, -0.0003324902724, -0.0001186770428, + +0.0000297665370, +0.0001661478599, +0.0002731517510, +0.0002850194553, + +0.0002375486381, +0.0001900778210, +0.0001186770428, +0.0000000000000, + -0.0001186770428, -0.0002256809339, -0.0003324902724, -0.0004690661479, + -0.0005937743191, -0.0006056420233, -0.0004928015564, -0.0002494163424, + +0.0000593385214, +0.0003027237354, +0.0003503891051, +0.0001959143969, + -0.0000772373541, -0.0003680933852, -0.0005521400778, -0.0005640077821, + -0.0003918287938, -0.0000830739300, +0.0002315175097, +0.0004274319066, + +0.0004749027237, +0.0004334630350, +0.0003680933852, +0.0002908560311, + +0.0002494163424, +0.0002731517510, +0.0002671206226, +0.0001840466926, + +0.0001009727626, +0.0000772373541, +0.0000949416342, +0.0001128404669, + +0.0001186770428, +0.0001484435798, +0.0002375486381, +0.0003562256809, + +0.0004511673152, +0.0004690661479, +0.0003503891051, +0.0000891050584, + -0.0002789883268, -0.0007480544747, -0.0011517509728, -0.0013001945525, + -0.0011636186770, -0.0008490272374, -0.0005107003891, -0.0002671206226, + -0.0001782101167, -0.0002433852140, -0.0004155642023, -0.0006175097276, + -0.0007717898833, -0.0008429961089, -0.0008490272374, -0.0007955252918, + -0.0006768482490, -0.0004928015564, -0.0002908560311, -0.0001365758755, + -0.0000297665370, +0.0000653696498, +0.0001424124514, +0.0001603112840, + +0.0001247081712, +0.0000535019455, -0.0000593385214, -0.0002196498054, + -0.0003859922179, -0.0004749027237, -0.0004453307393, -0.0002789883268, + +0.0000000000000, +0.0003324902724, +0.0005700389105, +0.0006412451362, + +0.0006114785992, +0.0005107003891, +0.0004215953307, +0.0003859922179, + +0.0003562256809, +0.0002789883268, +0.0001721789883, +0.0000712062257, + +0.0000118677043, -0.0000178988327, -0.0000535019455, -0.0000830739300, + -0.0000653696498, +0.0000118677043, +0.0000712062257, +0.0000178988327, + -0.0001661478599, -0.0003859922179, -0.0005463035019, -0.0006056420233, + -0.0005107003891, -0.0002375486381, +0.0001068093385, +0.0003622568093, + +0.0004392996109, +0.0003741245136, +0.0003027237354, +0.0003087548638, + +0.0003622568093, +0.0003859922179, +0.0003503891051, +0.0002789883268, + +0.0001247081712, -0.0001247081712, -0.0003741245136, -0.0005046692607, + -0.0004630350195, -0.0003027237354, -0.0001186770428, +0.0000474708171, + +0.0002196498054, +0.0003918287938, +0.0005402723735, +0.0006470817121, + +0.0006708171206, +0.0005758754864, +0.0003859922179, +0.0001542801556, + -0.0000712062257, -0.0002789883268, -0.0003859922179, -0.0003385214008, + -0.0001721789883, -0.0000060311284, +0.0000653696498, +0.0000178988327, + -0.0001009727626, -0.0002315175097, -0.0002433852140, -0.0001305447471, + +0.0000178988327, +0.0001424124514, +0.0001900778210, +0.0001484435798, + +0.0000237354086, -0.0001247081712, -0.0002433852140, -0.0002968871595, + -0.0002968871595, -0.0002433852140, -0.0001603112840, -0.0001128404669, + -0.0001247081712, -0.0001721789883, -0.0002196498054, -0.0002552529183, + -0.0002731517510, -0.0002552529183, -0.0001959143969, -0.0001068093385, + -0.0000356031128, -0.0000178988327, -0.0000237354086, -0.0000535019455, + -0.0000949416342, -0.0001542801556, -0.0002256809339, -0.0003264591440, + -0.0004392996109, -0.0005344357977, -0.0005758754864, -0.0005640077821, + -0.0004809338521, -0.0003324902724, -0.0001603112840, +0.0000000000000, + +0.0001542801556, +0.0002850194553, +0.0003799610895, +0.0003918287938, + +0.0003027237354, +0.0001840466926, +0.0001186770428, +0.0001186770428, + +0.0001068093385, +0.0000416342412, -0.0000416342412, -0.0001128404669, + -0.0001424124514, -0.0000949416342, +0.0000118677043, +0.0001247081712, + +0.0001484435798, +0.0000297665370, -0.0001424124514, -0.0003027237354, + -0.0003741245136, -0.0003145914397, -0.0001365758755, +0.0000237354086, + +0.0000593385214, -0.0000653696498, -0.0003443579767, -0.0006649805447, + -0.0009143968872, -0.0009914396887, -0.0009025291829, -0.0007066147860, + -0.0004749027237, -0.0002494163424, -0.0000891050584, -0.0000653696498, + -0.0001542801556, -0.0002731517510, -0.0003443579767, -0.0003562256809, + -0.0003562256809, -0.0003741245136, -0.0004097276265, -0.0004097276265, + -0.0003264591440, -0.0001603112840, +0.0000593385214, +0.0002850194553, + +0.0004571984436, +0.0005284046693, +0.0004867704280, +0.0003622568093, + +0.0002196498054, +0.0001305447471, +0.0001186770428, +0.0001721789883, + +0.0002612840467, +0.0003443579767, +0.0003503891051, +0.0002612840467, + +0.0001661478599, +0.0001721789883, +0.0002908560311, +0.0004453307393, + +0.0005284046693, +0.0004928015564, +0.0003622568093, +0.0001900778210, + +0.0000118677043, -0.0001305447471, -0.0002375486381, -0.0003264591440, + -0.0003859922179, -0.0003799610895, -0.0003087548638, -0.0002019455253, + -0.0000830739300, +0.0000118677043, +0.0000653696498, +0.0000653696498, + +0.0000237354086, -0.0000593385214, -0.0001900778210, -0.0003087548638, + -0.0003562256809, -0.0002850194553, -0.0001186770428, +0.0000830739300, + +0.0002494163424, +0.0002671206226, +0.0001128404669, -0.0001484435798, + -0.0004334630350, -0.0006589494163, -0.0007659533074, -0.0007480544747, + -0.0006352140078, -0.0004571984436, -0.0002256809339, +0.0000178988327, + +0.0002077821012, +0.0003264591440, +0.0003918287938, +0.0003978599222, + +0.0003324902724, +0.0001959143969, +0.0000000000000, -0.0002019455253, + -0.0003264591440, -0.0002908560311, -0.0001128404669, +0.0001009727626, + +0.0002850194553, +0.0003859922179, +0.0004215953307, +0.0004334630350, + +0.0004809338521, +0.0005758754864, +0.0006531128405, +0.0006470817121, + +0.0005344357977, +0.0003859922179, +0.0002731517510, +0.0001959143969, + +0.0001484435798, +0.0001603112840, +0.0002256809339, +0.0002671206226, + +0.0002433852140, +0.0001542801556, +0.0000653696498, +0.0000535019455, + +0.0001305447471, +0.0002138132296, +0.0002315175097, +0.0001721789883, + +0.0000416342412, -0.0000772373541, -0.0001068093385, -0.0000237354086, + +0.0001068093385, +0.0002612840467, +0.0003978599222, +0.0004392996109, + +0.0003443579767, +0.0001424124514, -0.0001128404669, -0.0003562256809, + -0.0005107003891, -0.0005344357977, -0.0004097276265, -0.0001721789883, + +0.0000830739300, +0.0003027237354, +0.0004334630350, +0.0004809338521, + +0.0004630350195, +0.0003799610895, +0.0002612840467, +0.0001305447471, + +0.0000416342412, -0.0000118677043, -0.0000653696498, -0.0001009727626, + -0.0000535019455, +0.0000712062257, +0.0001959143969, +0.0002196498054, + +0.0001247081712, -0.0000356031128, -0.0001782101167, -0.0002196498054, + -0.0001661478599, -0.0000653696498, +0.0000772373541, +0.0002494163424, + +0.0003799610895, +0.0004274319066, +0.0003622568093, +0.0001840466926, + -0.0000178988327, -0.0001661478599, -0.0002315175097, -0.0002019455253, + -0.0001068093385, +0.0000000000000, +0.0001068093385, +0.0001603112840, + +0.0001424124514, +0.0000772373541, +0.0000000000000, -0.0000593385214, + -0.0000949416342, -0.0000772373541, +0.0000000000000, +0.0001186770428, + +0.0002077821012, +0.0002196498054, +0.0001484435798, +0.0000474708171, + -0.0000178988327, -0.0000416342412, -0.0000118677043, +0.0000535019455, + +0.0001186770428, +0.0001424124514, +0.0001009727626, +0.0000178988327, + -0.0000416342412, -0.0000474708171, +0.0000118677043, +0.0001186770428, + +0.0002138132296, +0.0002256809339, +0.0001424124514, +0.0000000000000, + -0.0001603112840, -0.0002850194553, -0.0003562256809, -0.0003562256809, + -0.0003027237354, -0.0001959143969, -0.0000416342412, +0.0001186770428, + +0.0002612840467, +0.0003385214008, +0.0003918287938, +0.0004392996109, + +0.0004690661479, +0.0004334630350, +0.0003443579767, +0.0002494163424, + +0.0002077821012, +0.0002077821012, +0.0002138132296, +0.0001782101167, + +0.0000891050584, -0.0000237354086, -0.0000891050584, -0.0000416342412, + +0.0001128404669, +0.0002850194553, +0.0003622568093, +0.0002731517510, + +0.0000416342412, -0.0002375486381, -0.0004511673152, -0.0004690661479, + -0.0002433852140, +0.0001068093385, +0.0004097276265, +0.0005107003891, + +0.0004036964981, +0.0001484435798, -0.0001247081712, -0.0003324902724, + -0.0003978599222, -0.0003206225681, -0.0001603112840, -0.0000060311284, + +0.0000712062257, +0.0001128404669, +0.0001661478599, +0.0002671206226, + +0.0004036964981, +0.0005046692607, +0.0004867704280, +0.0003087548638, + +0.0000297665370, -0.0002433852140, -0.0004215953307, -0.0004453307393, + -0.0003503891051, -0.0002077821012, -0.0000772373541, +0.0000237354086, + +0.0000830739300, +0.0000949416342, +0.0000772373541, +0.0000712062257, + +0.0000949416342, +0.0001009727626, +0.0000416342412, -0.0000712062257, + -0.0002077821012, -0.0003324902724, -0.0003918287938, -0.0003622568093, + -0.0002552529183, -0.0001484435798, -0.0000949416342, -0.0001009727626, + -0.0001484435798, -0.0002315175097, -0.0003443579767, -0.0004690661479, + -0.0005640077821, -0.0005521400778, -0.0004215953307, -0.0001721789883, + +0.0001068093385, +0.0003443579767, +0.0004867704280, +0.0005344357977, + +0.0004928015564, +0.0003859922179, +0.0002077821012, +0.0000118677043, + -0.0001424124514, -0.0002433852140, -0.0002850194553, -0.0002850194553, + -0.0002552529183, -0.0002019455253, -0.0001186770428, -0.0000356031128, + +0.0000000000000, -0.0000474708171, -0.0001721789883, -0.0003206225681, + -0.0003978599222, -0.0003562256809, -0.0001900778210, +0.0000297665370, + +0.0002315175097, +0.0003206225681, +0.0002789883268, +0.0001424124514, + -0.0000178988327, -0.0001128404669, -0.0001009727626, +0.0000000000000, + +0.0001186770428, +0.0002196498054, +0.0002671206226, +0.0002671206226, + +0.0002077821012, +0.0000712062257, -0.0000772373541, -0.0001542801556, + -0.0001128404669, +0.0000297665370, +0.0002077821012, +0.0003264591440, + +0.0003145914397, +0.0001721789883, -0.0000237354086, -0.0001840466926, + -0.0002433852140, -0.0002196498054, -0.0001542801556, -0.0000772373541, + -0.0000118677043, +0.0000118677043, +0.0000178988327, +0.0000060311284, + +0.0000000000000, +0.0000000000000, -0.0000237354086, -0.0000474708171, + -0.0000474708171, -0.0000653696498, -0.0001186770428, -0.0001900778210, + -0.0002671206226, -0.0003385214008, -0.0003680933852, -0.0003562256809, + -0.0003027237354, -0.0002375486381, -0.0001603112840, -0.0000949416342, + -0.0000593385214, -0.0000593385214, -0.0000653696498, -0.0000297665370, + +0.0000356031128, +0.0000949416342, +0.0001128404669, +0.0000949416342, + +0.0000712062257, +0.0000891050584, +0.0001484435798, +0.0002256809339, + +0.0002908560311, +0.0002908560311, +0.0002196498054, +0.0000891050584, + -0.0000653696498, -0.0001900778210, -0.0002196498054, -0.0001365758755, + +0.0000118677043, +0.0001782101167, +0.0002789883268, +0.0002612840467, + +0.0001186770428, -0.0000949416342, -0.0002671206226, -0.0003264591440, + -0.0003027237354, -0.0002256809339, -0.0001247081712, -0.0000178988327, + +0.0000416342412, +0.0000593385214, +0.0000535019455, +0.0000474708171, + +0.0000474708171, +0.0000416342412, +0.0000000000000, -0.0000535019455, + -0.0001009727626, -0.0001365758755, -0.0001603112840, -0.0001424124514, + -0.0000653696498, +0.0000474708171, +0.0001661478599, +0.0002375486381, + +0.0002256809339, +0.0001661478599, +0.0001186770428, +0.0000891050584, + +0.0000474708171, -0.0000060311284, -0.0000830739300, -0.0001542801556, + -0.0001840466926, -0.0001484435798, -0.0000356031128, +0.0000891050584, + +0.0001721789883, +0.0001840466926, +0.0001247081712, +0.0000060311284, + -0.0001305447471, -0.0002612840467, -0.0003264591440, -0.0003385214008, + -0.0002908560311, -0.0001840466926, -0.0000474708171, +0.0001068093385, + +0.0002433852140, +0.0003145914397, +0.0003027237354, +0.0002315175097, + +0.0001009727626, -0.0000535019455, -0.0001782101167, -0.0002077821012, + -0.0001424124514, -0.0000178988327, +0.0001068093385, +0.0001721789883, + +0.0001484435798, +0.0000593385214, +0.0000000000000, +0.0000178988327, + +0.0000949416342, +0.0001603112840, +0.0001840466926, +0.0001840466926, + +0.0001782101167, +0.0001603112840, +0.0001305447471, +0.0000891050584, + +0.0000593385214, +0.0000237354086, -0.0000356031128, -0.0001365758755, + -0.0002433852140, -0.0003145914397, -0.0003385214008, -0.0003206225681, + -0.0002552529183, -0.0001661478599, -0.0000891050584, -0.0000416342412, + -0.0000178988327, +0.0000060311284, +0.0000416342412, +0.0000772373541, + +0.0000891050584, +0.0000593385214, +0.0000000000000, -0.0000474708171, + -0.0000593385214, -0.0000356031128, -0.0000178988327, -0.0000474708171, + -0.0001365758755, -0.0002671206226, -0.0004215953307, -0.0005107003891, + -0.0004630350195, -0.0002612840467, +0.0000237354086, +0.0002968871595, + +0.0004571984436, +0.0004571984436, +0.0003145914397, +0.0001068093385, + -0.0000593385214, -0.0001484435798, -0.0001247081712, -0.0000593385214, + -0.0000060311284, -0.0000060311284, -0.0000593385214, -0.0001186770428, + -0.0001424124514, -0.0000891050584, +0.0000356031128, +0.0002077821012, + +0.0003443579767, +0.0004036964981, +0.0003741245136, +0.0002908560311, + +0.0001721789883, +0.0000535019455, +0.0000060311284, +0.0000772373541, + +0.0002077821012, +0.0003324902724, +0.0004097276265, +0.0003918287938, + +0.0002789883268, +0.0001186770428, -0.0000118677043, -0.0000593385214, + +0.0000060311284, +0.0001365758755, +0.0002612840467, +0.0003206225681, + +0.0002908560311, +0.0001900778210, +0.0000593385214, -0.0000060311284, + +0.0000000000000, +0.0000535019455, +0.0001128404669, +0.0001542801556, + +0.0001603112840, +0.0001305447471, +0.0000772373541, +0.0000060311284, + -0.0000416342412, -0.0000891050584, -0.0001484435798, -0.0001959143969, + -0.0001900778210, -0.0001009727626, +0.0000474708171, +0.0002375486381, + +0.0004334630350, +0.0005758754864, +0.0005937743191, +0.0004690661479, + +0.0002433852140, +0.0000178988327, -0.0001247081712, -0.0001424124514, + -0.0000416342412, +0.0000949416342, +0.0001900778210, +0.0001782101167, + +0.0000653696498, -0.0000830739300, -0.0001840466926, -0.0001959143969, + -0.0001128404669, +0.0000178988327, +0.0001424124514, +0.0001959143969, + +0.0001840466926, +0.0001365758755, +0.0000949416342, +0.0000653696498, + +0.0000356031128, +0.0000060311284, -0.0000297665370, -0.0000593385214, + -0.0000653696498, -0.0000535019455, -0.0000356031128, -0.0000118677043, + +0.0000000000000, -0.0000118677043, -0.0000535019455, -0.0001305447471, + -0.0002315175097, -0.0003145914397, -0.0003562256809, -0.0003027237354, + -0.0001365758755, +0.0000712062257, +0.0002315175097, +0.0002850194553, + +0.0002375486381, +0.0001365758755, +0.0000535019455, +0.0000118677043, + +0.0000060311284, -0.0000060311284, -0.0000949416342, -0.0002196498054, + -0.0003145914397, -0.0002968871595, -0.0001721789883, +0.0000178988327, + +0.0002019455253, +0.0002968871595, +0.0002494163424, +0.0000891050584, + -0.0000949416342, -0.0002375486381, -0.0003027237354, -0.0002789883268, + -0.0001900778210, -0.0000949416342, -0.0000416342412, -0.0000535019455, + -0.0001128404669, -0.0001721789883, -0.0002077821012, -0.0002077821012, + -0.0001542801556, -0.0000535019455, +0.0000593385214, +0.0001305447471, + +0.0001603112840, +0.0001721789883, +0.0001782101167, +0.0001542801556, + +0.0001128404669, +0.0000474708171, -0.0000416342412, -0.0001365758755, + -0.0002315175097, -0.0002908560311, -0.0003324902724, -0.0003443579767, + -0.0003087548638, -0.0002196498054, -0.0000891050584, +0.0000416342412, + +0.0001484435798, +0.0001900778210, +0.0001484435798, +0.0000474708171, + -0.0000237354086, -0.0000474708171, -0.0000237354086, +0.0000000000000, + -0.0000060311284, -0.0000535019455, -0.0001186770428, -0.0001603112840, + -0.0001900778210, -0.0001840466926, -0.0001603112840, -0.0001365758755, + -0.0001305447471, -0.0001484435798, -0.0001959143969, -0.0002612840467, + -0.0002968871595, -0.0002671206226, -0.0001661478599, -0.0000297665370, + +0.0000712062257, +0.0001009727626, +0.0000474708171, -0.0000653696498, + -0.0001840466926, -0.0002433852140, -0.0001900778210, -0.0000178988327, + +0.0002019455253, +0.0003562256809, +0.0003562256809, +0.0001900778210, + -0.0000712062257, -0.0003027237354, -0.0003978599222, -0.0003087548638, + -0.0000830739300, +0.0001661478599, +0.0003385214008, +0.0003741245136, + +0.0002850194553, +0.0001128404669, -0.0000712062257, -0.0002315175097, + -0.0003206225681, -0.0003206225681, -0.0002077821012, +0.0000000000000, + +0.0002196498054, +0.0004097276265, +0.0005046692607, +0.0005107003891, + +0.0004155642023, +0.0002375486381, +0.0000297665370, -0.0001068093385, + -0.0001247081712, -0.0000178988327, +0.0001424124514, +0.0002315175097, + +0.0001840466926, +0.0000356031128, -0.0001305447471, -0.0002671206226, + -0.0003385214008, -0.0003443579767, -0.0002968871595, -0.0002315175097, + -0.0001484435798, -0.0000535019455, +0.0000297665370, +0.0001068093385, + +0.0001840466926, +0.0002494163424, +0.0002552529183, +0.0001782101167, + +0.0000356031128, -0.0001009727626, -0.0001900778210, -0.0002019455253, + -0.0001305447471, -0.0000237354086, +0.0000653696498, +0.0001128404669, + +0.0001009727626, +0.0000653696498, +0.0000297665370, +0.0000060311284, + -0.0000118677043, -0.0000356031128, -0.0000593385214, -0.0000712062257, + -0.0000712062257, -0.0000772373541, -0.0000830739300, -0.0000712062257, + -0.0000356031128, +0.0000000000000, +0.0000118677043, +0.0000060311284, + +0.0000000000000, -0.0000118677043, -0.0000178988327, +0.0000000000000, + +0.0000891050584, +0.0002315175097, +0.0003799610895, +0.0004334630350, + +0.0003622568093, +0.0001542801556, -0.0001128404669, -0.0003443579767, + -0.0004215953307, -0.0003027237354, -0.0000653696498, +0.0001721789883, + +0.0002968871595, +0.0002789883268, +0.0001542801556, +0.0000060311284, + -0.0000949416342, -0.0001128404669, -0.0000356031128, +0.0000772373541, + +0.0001900778210, +0.0002433852140, +0.0002375486381, +0.0001900778210, + +0.0001247081712, +0.0000653696498, +0.0000297665370, +0.0000178988327, + +0.0000000000000, -0.0000237354086, -0.0000891050584, -0.0001721789883, + -0.0002433852140, -0.0002908560311, -0.0002731517510, -0.0001782101167, + -0.0000118677043, +0.0001840466926, +0.0003799610895, +0.0004928015564, + +0.0004690661479, +0.0003087548638, +0.0000712062257, -0.0001424124514, + -0.0002375486381, -0.0001782101167, -0.0000178988327, +0.0001603112840, + +0.0002968871595, +0.0003680933852, +0.0003385214008, +0.0002196498054, + +0.0000830739300, +0.0000000000000, +0.0000000000000, +0.0000237354086, + +0.0000474708171, +0.0000474708171, +0.0000356031128, +0.0000237354086, + +0.0000000000000, -0.0000593385214, -0.0001661478599, -0.0002789883268, + -0.0003622568093, -0.0003622568093, -0.0002731517510, -0.0001128404669, + +0.0000712062257, +0.0002256809339, +0.0002968871595, +0.0002789883268, + +0.0001721789883, +0.0000297665370, -0.0001068093385, -0.0002019455253, + -0.0002494163424, -0.0002315175097, -0.0001661478599, -0.0000712062257, + +0.0000060311284, +0.0000593385214, +0.0000653696498, +0.0000297665370, + +0.0000000000000, -0.0000237354086, -0.0000416342412, -0.0000416342412, + -0.0000237354086, +0.0000118677043, +0.0000712062257, +0.0001603112840, + +0.0002612840467, +0.0003145914397, +0.0002671206226, +0.0001424124514, + +0.0000178988327, -0.0000416342412, -0.0000237354086, +0.0000712062257, + +0.0002138132296, +0.0003324902724, +0.0003562256809, +0.0002612840467, + +0.0001068093385, -0.0000474708171, -0.0001721789883, -0.0002138132296, + -0.0001365758755, +0.0000118677043, +0.0001603112840, +0.0002375486381, + +0.0002494163424, +0.0001959143969, +0.0000891050584, -0.0000178988327, + -0.0000891050584, -0.0001186770428, -0.0001424124514, -0.0001603112840, + -0.0001424124514, -0.0001009727626, -0.0000593385214, -0.0000474708171, + -0.0000416342412, -0.0000356031128, -0.0000297665370, -0.0000237354086, + +0.0000000000000, +0.0000474708171, +0.0001068093385, +0.0001365758755, + +0.0001365758755, +0.0001009727626, +0.0000297665370, -0.0000535019455, + -0.0001365758755, -0.0002019455253, -0.0002315175097, -0.0002196498054, + -0.0001661478599, -0.0000830739300, -0.0000474708171, -0.0000772373541, + -0.0001661478599, -0.0002850194553, -0.0003918287938, -0.0004215953307, + -0.0003324902724, -0.0001484435798, +0.0000356031128, +0.0001840466926, + +0.0002552529183, +0.0002612840467, +0.0002077821012, +0.0001365758755, + +0.0000474708171, -0.0000297665370, -0.0001247081712, -0.0001959143969, + -0.0001959143969, -0.0001305447471, -0.0000416342412, +0.0000297665370, + +0.0000593385214, +0.0000060311284, -0.0001186770428, -0.0002731517510, + -0.0003918287938, -0.0004274319066, -0.0003443579767, -0.0001484435798, + +0.0000830739300, +0.0002731517510, +0.0003562256809, +0.0003087548638, + +0.0001542801556, -0.0000356031128, -0.0001959143969, -0.0002552529183, + -0.0002019455253, -0.0000416342412, +0.0001484435798, +0.0003027237354, + +0.0003443579767, +0.0002612840467, +0.0000891050584, -0.0000830739300, + -0.0001782101167, -0.0001900778210, -0.0001484435798, -0.0000653696498, + +0.0000178988327, +0.0000593385214, +0.0000416342412, +0.0000000000000, + -0.0000416342412, -0.0000830739300, -0.0001247081712, -0.0001721789883, + -0.0002256809339, -0.0002612840467, -0.0002375486381, -0.0001305447471, + +0.0000237354086, +0.0001721789883, +0.0002494163424, +0.0002375486381, + +0.0001484435798, +0.0000237354086, -0.0000891050584, -0.0001721789883, + -0.0002315175097, -0.0002731517510, -0.0003027237354, -0.0002850194553, + -0.0002138132296, -0.0001247081712, -0.0000474708171, -0.0000060311284, + -0.0000118677043, -0.0000712062257, -0.0001484435798, -0.0001900778210, + -0.0001840466926, -0.0001484435798, -0.0000712062257, +0.0000297665370, + +0.0001186770428, +0.0001542801556, +0.0001365758755, +0.0000891050584, + +0.0000535019455, +0.0000474708171, +0.0000535019455, +0.0000772373541, + +0.0001128404669, +0.0001305447471, +0.0001068093385, +0.0000060311284, + -0.0001305447471, -0.0002552529183, -0.0003145914397, -0.0003087548638, + -0.0002196498054, -0.0000712062257, +0.0000772373541, +0.0001721789883, + +0.0002077821012, +0.0001959143969, +0.0001721789883, +0.0001542801556, + +0.0001424124514, +0.0001365758755, +0.0001484435798, +0.0001661478599, + +0.0001782101167, +0.0001424124514, +0.0000712062257, -0.0000297665370, + -0.0001365758755, -0.0002315175097, -0.0002731517510, -0.0002433852140, + -0.0001603112840, -0.0000653696498, +0.0000000000000, +0.0000297665370, + +0.0000237354086, -0.0000178988327, -0.0000772373541, -0.0001186770428, + -0.0001128404669, -0.0000772373541, -0.0000297665370, +0.0000178988327, + +0.0000712062257, +0.0001128404669, +0.0001424124514, +0.0001661478599, + +0.0001840466926, +0.0001959143969, +0.0001840466926, +0.0001424124514, + +0.0000593385214, -0.0000237354086, -0.0000830739300, -0.0001009727626, + -0.0000891050584, -0.0000593385214, -0.0000356031128, -0.0000118677043, + +0.0000118677043, +0.0000653696498, +0.0001365758755, +0.0002077821012, + +0.0002552529183, +0.0002256809339, +0.0001305447471, +0.0000060311284, + -0.0000830739300, -0.0001305447471, -0.0001305447471, -0.0000949416342, + -0.0000118677043, +0.0001068093385, +0.0002196498054, +0.0002671206226, + +0.0002433852140, +0.0001782101167, +0.0001068093385, +0.0000653696498, + +0.0000474708171, +0.0000535019455, +0.0000535019455, +0.0000297665370, + -0.0000118677043, -0.0000593385214, -0.0000891050584, -0.0001186770428, + -0.0001424124514, -0.0001484435798, -0.0001247081712, -0.0000772373541, + -0.0000297665370, -0.0000178988327, -0.0000178988327, -0.0000060311284, + +0.0000178988327, +0.0000535019455, +0.0000772373541, +0.0001009727626, + +0.0001186770428, +0.0001186770428, +0.0000949416342, +0.0000653696498, + +0.0000474708171, +0.0000356031128, +0.0000178988327, -0.0000060311284, + -0.0000297665370, -0.0000118677043, +0.0000356031128, +0.0000949416342, + +0.0001424124514, +0.0001603112840, +0.0001305447471, +0.0000535019455, + -0.0000474708171, -0.0001186770428, -0.0001247081712, -0.0000653696498, + +0.0000237354086, +0.0001186770428, +0.0001840466926, +0.0001959143969, + +0.0001721789883, +0.0001365758755, +0.0000949416342, +0.0000772373541, + +0.0000712062257, +0.0000535019455, -0.0000060311284, -0.0000830739300, + -0.0001365758755, -0.0001424124514, -0.0001068093385, -0.0000772373541, + -0.0000653696498, -0.0000593385214, -0.0000535019455, -0.0000474708171, + -0.0000237354086, +0.0000000000000, +0.0000416342412, +0.0000772373541, + +0.0001009727626, +0.0001186770428, +0.0001186770428, +0.0000949416342, + +0.0000653696498, +0.0000356031128, +0.0000297665370, +0.0000474708171, + +0.0000712062257, +0.0000830739300, +0.0000830739300, +0.0000653696498, + +0.0000474708171, +0.0000535019455, +0.0000891050584, +0.0001365758755, + +0.0001840466926, +0.0001900778210, +0.0001603112840, +0.0001186770428, + +0.0000891050584, +0.0000772373541, +0.0000949416342, +0.0001305447471, + +0.0001661478599, +0.0001900778210, +0.0001900778210, +0.0001661478599, + +0.0001305447471, +0.0000891050584, +0.0000535019455, +0.0000237354086, + +0.0000118677043, +0.0000178988327, +0.0000356031128, +0.0000712062257, + +0.0001009727626, +0.0001068093385, +0.0000830739300, +0.0000474708171, + +0.0000297665370, +0.0000178988327, +0.0000000000000, -0.0000535019455, + -0.0001247081712, -0.0001900778210, -0.0002315175097, -0.0002433852140, + -0.0002196498054, -0.0001424124514, -0.0000237354086, +0.0000830739300, + +0.0001603112840, +0.0002077821012, +0.0001900778210, +0.0001068093385, + +0.0000060311284, -0.0000712062257, -0.0000830739300, -0.0000474708171, + +0.0000060311284, +0.0000712062257, +0.0001186770428, +0.0001186770428, + +0.0000593385214, -0.0000237354086, -0.0001128404669, -0.0001603112840, + -0.0001840466926, -0.0001840466926, -0.0001542801556, -0.0000891050584, + -0.0000178988327, +0.0000237354086, +0.0000474708171, +0.0000474708171, + +0.0000356031128, +0.0000237354086, +0.0000000000000, -0.0000060311284, + -0.0000118677043, -0.0000178988327, -0.0000118677043, +0.0000237354086, + +0.0001068093385, +0.0002138132296, +0.0002908560311, +0.0003027237354, + +0.0002552529183, +0.0001840466926, +0.0001068093385, +0.0000535019455, + +0.0000118677043, +0.0000000000000, -0.0000060311284, -0.0000118677043, + -0.0000356031128, -0.0000593385214, -0.0000653696498, -0.0000474708171, + -0.0000118677043, +0.0000297665370, +0.0000712062257, +0.0000949416342, + +0.0000949416342, +0.0000593385214, +0.0000178988327, -0.0000178988327, + -0.0000593385214, -0.0000891050584, -0.0001128404669, -0.0001247081712, + -0.0001542801556, -0.0001959143969, -0.0002256809339, -0.0002375486381, + -0.0002256809339, -0.0002138132296, -0.0001959143969, -0.0001840466926, + -0.0001603112840, -0.0001305447471, -0.0000949416342, -0.0000772373541, + -0.0000653696498, -0.0000535019455, -0.0000297665370, -0.0000060311284, + -0.0000178988327, -0.0000593385214, -0.0001305447471, -0.0001959143969, + -0.0002196498054, -0.0002077821012, -0.0001661478599, -0.0001128404669, + -0.0000593385214, -0.0000297665370, -0.0000297665370, -0.0000593385214, + -0.0000949416342, -0.0000949416342, -0.0000474708171, +0.0000297665370, + +0.0001009727626, +0.0001365758755, +0.0001247081712, +0.0000949416342, + +0.0000712062257, +0.0000593385214, +0.0000535019455, +0.0000474708171, + +0.0000356031128, +0.0000297665370, +0.0000237354086, +0.0000000000000, + -0.0000416342412, -0.0000949416342, -0.0001186770428, -0.0001068093385, + -0.0000830739300, -0.0000416342412, +0.0000118677043, +0.0000830739300, + +0.0001424124514, +0.0001484435798, +0.0000949416342, +0.0000000000000, + -0.0001305447471, -0.0002494163424, -0.0003264591440, -0.0003443579767, + -0.0003027237354, -0.0002315175097, -0.0001424124514, -0.0000474708171, + +0.0000356031128, +0.0000830739300, +0.0000772373541, +0.0000356031128, + +0.0000000000000, -0.0000416342412, -0.0000593385214, -0.0000653696498, + -0.0000712062257, -0.0000891050584, -0.0001009727626, -0.0000830739300, + -0.0000297665370, +0.0000535019455, +0.0001484435798, +0.0001959143969, + +0.0001721789883, +0.0000830739300, -0.0000416342412, -0.0001484435798, + -0.0001959143969, -0.0001603112840, -0.0000772373541, +0.0000000000000, + +0.0000416342412, +0.0000178988327, -0.0000474708171, -0.0001186770428, + -0.0001186770428, -0.0000356031128, +0.0001305447471, +0.0003087548638, + +0.0004215953307, +0.0004215953307, +0.0003027237354, +0.0001305447471, + -0.0000297665370, -0.0001365758755, -0.0001603112840, -0.0001068093385, + -0.0000178988327, +0.0000593385214, +0.0001068093385, +0.0001068093385, + +0.0000891050584, +0.0000535019455, +0.0000237354086, +0.0000060311284, + +0.0000118677043, +0.0000356031128, +0.0000653696498, +0.0001009727626, + +0.0001365758755, +0.0001542801556, +0.0001305447471, +0.0000712062257, + -0.0000118677043, -0.0000949416342, -0.0001305447471, -0.0001186770428, + -0.0000653696498, +0.0000060311284, +0.0000772373541, +0.0001186770428, + +0.0001305447471, +0.0001068093385, +0.0000653696498, +0.0000356031128, + +0.0000297665370, +0.0000416342412, +0.0000593385214, +0.0000593385214, + +0.0000237354086, -0.0000237354086, -0.0000772373541, -0.0001186770428, + -0.0001365758755, -0.0001365758755, -0.0001128404669, -0.0000653696498, + +0.0000000000000, +0.0000474708171, +0.0000772373541, +0.0000712062257, + +0.0000535019455, +0.0000416342412, +0.0000416342412, +0.0000535019455, + +0.0000593385214, +0.0000416342412, +0.0000237354086, +0.0000178988327, + +0.0000416342412, +0.0000772373541, +0.0000949416342, +0.0000830739300, + +0.0000474708171, -0.0000060311284, -0.0000535019455, -0.0000653696498, + -0.0000535019455, -0.0000178988327, +0.0000060311284, +0.0000118677043, + +0.0000000000000, -0.0000297665370, -0.0000593385214, -0.0000593385214, + -0.0000237354086, +0.0000474708171, +0.0001424124514, +0.0002138132296, + +0.0002315175097, +0.0001840466926, +0.0001009727626, +0.0000000000000, + -0.0000772373541, -0.0001247081712, -0.0001128404669, -0.0000653696498, + -0.0000118677043, +0.0000000000000, -0.0000178988327, -0.0000416342412, + -0.0000593385214, -0.0000535019455, -0.0000356031128, +0.0000000000000, + +0.0000593385214, +0.0001365758755, +0.0001840466926, +0.0002019455253, + +0.0001840466926, +0.0001484435798, +0.0000830739300, +0.0000178988327, + -0.0000178988327, -0.0000118677043, +0.0000416342412, +0.0001247081712, + +0.0002077821012, +0.0002552529183, +0.0002433852140, +0.0001603112840, + +0.0000297665370, -0.0001009727626, -0.0001959143969, -0.0002315175097, + -0.0002256809339, -0.0002077821012, -0.0001782101167, -0.0001424124514, + -0.0000830739300, +0.0000000000000, +0.0000830739300, +0.0001424124514, + +0.0001484435798, +0.0001068093385, +0.0000416342412, -0.0000118677043, + -0.0000416342412, -0.0000356031128, -0.0000060311284, +0.0000356031128, + +0.0000593385214, +0.0000535019455, +0.0000178988327, -0.0000297665370, + -0.0000593385214, -0.0000712062257, -0.0000593385214, -0.0000356031128, + +0.0000000000000, +0.0000416342412, +0.0000772373541, +0.0001009727626, + +0.0001068093385, +0.0000949416342, +0.0000474708171, -0.0000118677043, + -0.0000712062257, -0.0001128404669, -0.0001128404669, -0.0000653696498, + +0.0000118677043, +0.0001068093385, +0.0001721789883, +0.0001782101167, + +0.0001305447471, +0.0000653696498, +0.0000118677043, +0.0000000000000, + +0.0000237354086, +0.0000772373541, +0.0001247081712, +0.0001247081712, + +0.0000772373541, +0.0000118677043, -0.0000356031128, -0.0000772373541, + -0.0000891050584, -0.0000830739300, -0.0000712062257, -0.0000653696498, + -0.0000653696498, -0.0000772373541, -0.0000830739300, -0.0000772373541, + -0.0000712062257, -0.0000712062257, -0.0000712062257, -0.0000653696498, + -0.0000593385214, -0.0000416342412, +0.0000000000000, +0.0000593385214, + +0.0001128404669, +0.0001247081712, +0.0000772373541, +0.0000060311284, + -0.0000772373541, -0.0001484435798, -0.0001721789883, -0.0001484435798, + -0.0001009727626, -0.0000712062257, -0.0000653696498, -0.0001009727626, + -0.0001542801556, -0.0002077821012, -0.0002256809339, -0.0001900778210, + -0.0001247081712, -0.0000593385214, -0.0000237354086, -0.0000237354086, + -0.0000535019455, -0.0000772373541, -0.0000712062257, -0.0000593385214, + -0.0000474708171, -0.0000535019455, -0.0000772373541, -0.0001068093385, + -0.0001305447471, -0.0001247081712, -0.0000891050584, -0.0000356031128, + +0.0000297665370, +0.0001068093385, +0.0001603112840, +0.0001782101167, + +0.0001305447471, +0.0000535019455, -0.0000237354086, -0.0000712062257, + -0.0000712062257, -0.0000297665370, +0.0000237354086, +0.0000474708171, + +0.0000356031128, -0.0000118677043, -0.0000593385214, -0.0000653696498, + -0.0000237354086, +0.0000474708171, +0.0001068093385, +0.0001247081712, + +0.0000830739300, +0.0000000000000, -0.0000949416342, -0.0001542801556, + -0.0001542801556, -0.0001068093385, -0.0000416342412, +0.0000000000000, + +0.0000060311284, -0.0000118677043, -0.0000712062257, -0.0001305447471, + -0.0001661478599, -0.0001840466926, -0.0001900778210, -0.0001900778210, + -0.0001782101167, -0.0001484435798, -0.0000949416342, -0.0000474708171, + +0.0000000000000, +0.0000416342412, +0.0000474708171, +0.0000237354086, + -0.0000060311284, -0.0000356031128, -0.0000593385214, -0.0000830739300, + -0.0001009727626, -0.0001009727626, -0.0000891050584, -0.0000772373541, + -0.0000891050584, -0.0001068093385, -0.0001068093385, -0.0000712062257, + -0.0000060311284, +0.0000474708171, +0.0000772373541, +0.0000712062257, + +0.0000474708171, +0.0000060311284, -0.0000356031128, -0.0000772373541, + -0.0001009727626, -0.0000949416342, -0.0000593385214, -0.0000118677043, + +0.0000356031128, +0.0000653696498, +0.0000593385214, +0.0000237354086, + +0.0000000000000, -0.0000060311284, +0.0000060311284, +0.0000474708171, + +0.0001068093385, +0.0001661478599, +0.0001959143969, +0.0001840466926, + +0.0001484435798, +0.0001009727626, +0.0000535019455, +0.0000237354086, + +0.0000000000000, -0.0000060311284, -0.0000178988327, -0.0000297665370, + -0.0000535019455, -0.0000712062257, -0.0000772373541, -0.0000772373541, + -0.0000653696498, -0.0000653696498, -0.0000830739300, -0.0000830739300, + -0.0000535019455, +0.0000060311284, +0.0001009727626, +0.0001840466926, + +0.0002375486381, +0.0002315175097, +0.0001484435798, +0.0000356031128, + -0.0000653696498, -0.0001365758755, -0.0001484435798, -0.0001247081712, + -0.0000593385214, +0.0000000000000, +0.0000535019455, +0.0000772373541, + +0.0000949416342, +0.0000949416342, +0.0000712062257, +0.0000237354086, + -0.0000237354086, -0.0000653696498, -0.0000830739300, -0.0000712062257, + -0.0000416342412, +0.0000000000000, +0.0000356031128, +0.0000593385214, + +0.0000772373541, +0.0001009727626, +0.0001247081712, +0.0001365758755, + +0.0001128404669, +0.0000474708171, -0.0000297665370, -0.0001128404669, + -0.0001721789883, -0.0001900778210, -0.0001603112840, -0.0000949416342, + -0.0000237354086, +0.0000356031128, +0.0000830739300, +0.0001009727626, + +0.0000891050584, +0.0000712062257, +0.0000772373541, +0.0001068093385, + +0.0001247081712, +0.0001186770428, +0.0000712062257, +0.0000118677043, + -0.0000297665370, -0.0000416342412, -0.0000178988327, +0.0000118677043, + +0.0000535019455, +0.0000949416342, +0.0001186770428, +0.0001247081712, + +0.0001186770428, +0.0001009727626, +0.0000653696498, +0.0000237354086, + -0.0000118677043, -0.0000237354086, +0.0000000000000, +0.0000474708171, + +0.0000891050584, +0.0001009727626, +0.0000830739300, +0.0000356031128, + -0.0000237354086, -0.0000772373541, -0.0000891050584, -0.0000593385214, + +0.0000060311284, +0.0000830739300, +0.0001424124514, +0.0001782101167, + +0.0001840466926, +0.0001721789883, +0.0001305447471, +0.0000830739300, + +0.0000237354086, -0.0000178988327, -0.0000474708171, -0.0000653696498, + -0.0000772373541, -0.0000830739300, -0.0000653696498, -0.0000356031128, + +0.0000118677043, +0.0000593385214, +0.0000891050584, +0.0001068093385, + +0.0001247081712, +0.0001365758755, +0.0001424124514, +0.0001305447471, + +0.0000891050584, +0.0000356031128, -0.0000060311284, -0.0000297665370, + -0.0000297665370, -0.0000118677043, +0.0000000000000, +0.0000118677043, + +0.0000060311284, +0.0000000000000, +0.0000118677043, +0.0000593385214, + +0.0001247081712, +0.0001840466926, +0.0002138132296, +0.0002138132296, + +0.0001840466926, +0.0001365758755, +0.0001068093385, +0.0001068093385, + +0.0001305447471, +0.0001603112840, +0.0001721789883, +0.0001424124514, + +0.0000772373541, -0.0000178988327, -0.0001247081712, -0.0001840466926, + -0.0001661478599, -0.0000830739300, +0.0000297665370, +0.0001542801556, + +0.0002433852140, +0.0002731517510, +0.0002433852140, +0.0001840466926, + +0.0001186770428, +0.0000712062257, +0.0000178988327, -0.0000297665370, + -0.0000772373541, -0.0001009727626, -0.0000949416342, -0.0000593385214, + -0.0000118677043, +0.0000237354086, +0.0000356031128, +0.0000178988327, + -0.0000118677043, -0.0000416342412, -0.0000474708171, -0.0000178988327, + +0.0000237354086, +0.0000653696498, +0.0000712062257, +0.0000593385214, + +0.0000474708171, +0.0000416342412, +0.0000356031128, +0.0000178988327, + +0.0000000000000, -0.0000237354086, -0.0000416342412, -0.0000474708171, + -0.0000356031128, -0.0000178988327, +0.0000000000000, +0.0000178988327, + +0.0000118677043, -0.0000118677043, -0.0000535019455, -0.0000891050584, + -0.0000949416342, -0.0000593385214, +0.0000178988327, +0.0001365758755, + +0.0002433852140, +0.0002850194553, +0.0002552529183, +0.0001782101167, + +0.0000891050584, +0.0000060311284, -0.0000474708171, -0.0000830739300, + -0.0000830739300, -0.0000474708171, +0.0000000000000, +0.0000535019455, + +0.0001068093385, +0.0001247081712, +0.0001068093385, +0.0000535019455, + +0.0000000000000, -0.0000356031128, -0.0000416342412, -0.0000297665370, + +0.0000000000000, +0.0000237354086, +0.0000535019455, +0.0000772373541, + +0.0000772373541, +0.0000593385214, +0.0000416342412, +0.0000237354086, + +0.0000000000000, -0.0000297665370, -0.0000772373541, -0.0001128404669, + -0.0001247081712, -0.0001186770428, -0.0000830739300, -0.0000297665370, + +0.0000000000000, +0.0000000000000, -0.0000237354086, -0.0000830739300, + -0.0001484435798, -0.0001782101167, -0.0001603112840, -0.0000891050584, + +0.0000000000000, +0.0000593385214, +0.0000653696498, +0.0000297665370, + -0.0000297665370, -0.0000830739300, -0.0001068093385, -0.0000891050584, + -0.0000297665370, +0.0000356031128, +0.0000891050584, +0.0000891050584, + +0.0000474708171, -0.0000118677043, -0.0000712062257, -0.0000891050584, + -0.0000830739300, -0.0000712062257, -0.0000653696498, -0.0000712062257, + -0.0000891050584, -0.0001068093385, -0.0000949416342, -0.0000356031128, + +0.0000237354086, +0.0000593385214, +0.0000416342412, -0.0000178988327, + -0.0000891050584, -0.0001424124514, -0.0001542801556, -0.0001128404669, + -0.0000237354086, +0.0000772373541, +0.0001603112840, +0.0002019455253, + +0.0001840466926, +0.0001068093385, +0.0000000000000, -0.0000891050584, + -0.0001365758755, -0.0001365758755, -0.0001068093385, -0.0000653696498, + -0.0000356031128, -0.0000237354086, -0.0000297665370, -0.0000237354086, + -0.0000060311284, +0.0000237354086, +0.0000653696498, +0.0001068093385, + +0.0001305447471, +0.0001068093385, +0.0000416342412, -0.0000237354086, + -0.0000830739300, -0.0001128404669, -0.0000949416342, -0.0000356031128, + +0.0000297665370, +0.0001009727626, +0.0001484435798, +0.0001484435798, + +0.0001068093385, +0.0000356031128, -0.0000356031128, -0.0000949416342, + -0.0001305447471, -0.0001305447471, -0.0001068093385, -0.0000772373541, + -0.0000535019455, -0.0000297665370, +0.0000000000000, +0.0000237354086, + +0.0000178988327, -0.0000118677043, -0.0000653696498, -0.0001128404669, + -0.0001424124514, -0.0001424124514, -0.0001009727626, -0.0000178988327, + +0.0000830739300, +0.0001661478599, +0.0002077821012, +0.0001840466926, + +0.0001009727626, -0.0000237354086, -0.0001424124514, -0.0002138132296, + -0.0002315175097, -0.0002019455253, -0.0001542801556, -0.0001009727626, + -0.0000535019455, -0.0000060311284, +0.0000237354086, +0.0000416342412, + +0.0000535019455, +0.0000416342412, +0.0000237354086, +0.0000000000000, + -0.0000297665370, -0.0000416342412, -0.0000356031128, -0.0000178988327, + -0.0000060311284, -0.0000118677043, -0.0000416342412, -0.0000593385214, + -0.0000535019455, -0.0000178988327, +0.0000237354086, +0.0000593385214, + +0.0000653696498, +0.0000356031128, -0.0000178988327, -0.0000830739300, + -0.0001186770428, -0.0001247081712, -0.0001068093385, -0.0000712062257, + -0.0000416342412, -0.0000118677043, +0.0000000000000, +0.0000118677043, + +0.0000237354086, +0.0000356031128, +0.0000593385214, +0.0000772373541, + +0.0000830739300, +0.0000593385214, +0.0000000000000, -0.0000772373541, + -0.0001542801556, -0.0001840466926, -0.0001484435798, -0.0000653696498, + +0.0000178988327, +0.0000891050584, +0.0001186770428, +0.0001128404669, + +0.0000653696498, +0.0000000000000, -0.0000712062257, -0.0001068093385, + -0.0001068093385, -0.0000891050584, -0.0000653696498, -0.0000593385214, + -0.0000593385214, -0.0000653696498, -0.0000653696498, -0.0000474708171, + -0.0000237354086, -0.0000060311284, +0.0000060311284, +0.0000000000000, + -0.0000237354086, -0.0000772373541, -0.0001247081712, -0.0001542801556, + -0.0001365758755, -0.0000653696498, +0.0000297665370, +0.0001128404669, + +0.0001542801556, +0.0001365758755, +0.0000891050584, +0.0000474708171, + +0.0000237354086, +0.0000000000000, -0.0000178988327, -0.0000237354086, + -0.0000178988327, +0.0000060311284, +0.0000416342412, +0.0000949416342, + +0.0001365758755, +0.0001484435798, +0.0001305447471, +0.0000891050584, + +0.0000474708171, +0.0000000000000, -0.0000356031128, -0.0000474708171, + -0.0000356031128, +0.0000000000000, +0.0000416342412, +0.0001009727626, + +0.0001484435798, +0.0001782101167, +0.0001603112840, +0.0001128404669, + +0.0000416342412, -0.0000060311284, -0.0000356031128, -0.0000237354086, + -0.0000060311284, -0.0000118677043, -0.0000416342412, -0.0000830739300, + -0.0001068093385, -0.0001009727626, -0.0000593385214, +0.0000060311284, + +0.0000891050584, +0.0001484435798, +0.0001603112840, +0.0001305447471, + +0.0000535019455, -0.0000535019455, -0.0001542801556, -0.0002077821012, + -0.0001840466926, -0.0001068093385, -0.0000060311284, +0.0000593385214, + +0.0000891050584, +0.0000891050584, +0.0000653696498, +0.0000416342412, + +0.0000297665370, +0.0000237354086, +0.0000118677043, +0.0000000000000, + -0.0000178988327, -0.0000416342412, -0.0000535019455, -0.0000416342412, + -0.0000060311284, +0.0000356031128, +0.0000772373541, +0.0000712062257, + +0.0000297665370, -0.0000297665370, -0.0000712062257, -0.0000772373541, + -0.0000474708171, +0.0000000000000, +0.0000416342412, +0.0000653696498, + +0.0000593385214, +0.0000356031128, +0.0000237354086, +0.0000118677043, + +0.0000060311284, -0.0000118677043, -0.0000297665370, -0.0000416342412, + -0.0000474708171, -0.0000416342412, -0.0000297665370, -0.0000297665370, + -0.0000297665370, -0.0000356031128, -0.0000416342412, -0.0000237354086, + +0.0000178988327, +0.0000891050584, +0.0001484435798, +0.0001721789883, + +0.0001305447471, +0.0000356031128, -0.0000712062257, -0.0001603112840, + -0.0001782101167, -0.0001186770428, +0.0000000000000, +0.0001305447471, + +0.0002138132296, +0.0002256809339, +0.0001661478599, +0.0000653696498, + -0.0000474708171, -0.0001424124514, -0.0001959143969, -0.0001959143969, + -0.0001542801556, -0.0000949416342, -0.0000297665370, +0.0000237354086, + +0.0000712062257, +0.0000891050584, +0.0000772373541, +0.0000416342412, + -0.0000237354086, -0.0001128404669, -0.0001959143969, -0.0002375486381, + -0.0002196498054, -0.0001305447471, -0.0000178988327, +0.0000830739300, + +0.0001365758755, +0.0001186770428, +0.0000593385214, -0.0000118677043, + -0.0000535019455, -0.0000416342412, +0.0000178988327, +0.0000949416342, + +0.0001365758755, +0.0001128404669, +0.0000297665370, -0.0000653696498, + -0.0001603112840, -0.0001900778210, -0.0001661478599, -0.0000949416342, + -0.0000178988327, +0.0000237354086, +0.0000416342412, +0.0000356031128, + +0.0000237354086, +0.0000060311284, +0.0000060311284, +0.0000118677043, + +0.0000118677043, +0.0000118677043, +0.0000060311284, +0.0000000000000, + +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000 +}; diff --git a/plugins/LadspaEffect/swh/impulses/17-marshall-jcm2000-sm57-off.h b/plugins/LadspaEffect/swh/impulses/17-marshall-jcm2000-sm57-off.h new file mode 100644 index 000000000..0eb8bcb9c --- /dev/null +++ b/plugins/LadspaEffect/swh/impulses/17-marshall-jcm2000-sm57-off.h @@ -0,0 +1,1315 @@ +float marshall_jcm2000_sm57_off[] = { + +0.0000000000000, -0.0000263793103, -0.0000684482759, -0.0000946551724, + -0.0001579310345, -0.0001789655172, -0.0002000000000, -0.0001894827586, + -0.0002000000000, -0.0002051724138, -0.0001946551724, -0.0002210344828, + -0.0001946551724, -0.0002472413793, -0.0002105172414, -0.0002893103448, + -0.0002315517241, -0.0003105172414, -0.0002315517241, -0.0003105172414, + -0.0002472413793, -0.0003051724138, -0.0003367241379, -0.0001684482759, + -0.0006734482759, +0.0000631034483, -0.0002000000000, -0.0010996551724, + -0.0003105172414, +0.0001684482759, -0.0000789655172, -0.0004787931034, + -0.0007629310345, -0.0007470689655, -0.0006367241379, -0.0005367241379, + -0.0003841379310, -0.0004525862069, -0.0003787931034, -0.0004367241379, + -0.0004946551724, -0.0004577586207, -0.0005734482759, -0.0005629310345, + -0.0006682758621, -0.0007524137931, -0.0007313793103, -0.0007103448276, + -0.0005156896552, -0.0002472413793, +0.0002262068966, -0.0001262068966, + -0.0031832758621, -0.0043934482759, -0.0014522413793, -0.0059403448276, + -0.0157375862069, -0.0040777586207, +0.0346217241379, +0.0692696551724, + +0.0783565517241, +0.0612034482759, +0.0107443103448, -0.0608246551724, + -0.1221439655172, -0.1615853448276, -0.1723979310345, -0.1466053448276, + -0.0943098275862, -0.0352425862069, +0.0136277586207, +0.0395570689655, + +0.0450344827586, +0.0405041379310, +0.0266396551724, +0.0094236206897, + +0.0041936206897, +0.0126122413793, +0.0275605172414, +0.0389310344828, + +0.0339429310345, +0.0154903448276, -0.0024834482759, -0.0138434482759, + -0.0174529310345, -0.0073768965517, +0.0138486206897, +0.0317436206897, + +0.0383468965517, +0.0365422413793, +0.0338798275862, +0.0332536206897, + +0.0303544827586, +0.0269396551724, +0.0240615517241, +0.0170529310345, + +0.0119701724138, +0.0168110344828, +0.0295651724138, +0.0424982758621, + +0.0459079310345, +0.0374998275862, +0.0234037931034, +0.0070874137931, + -0.0074874137931, -0.0145643103448, -0.0140591379310, -0.0082924137931, + +0.0015889655172, +0.0138329310345, +0.0257768965517, +0.0342850000000, + +0.0367684482759, +0.0339165517241, +0.0279603448276, +0.0196417241379, + +0.0083924137931, -0.0026150000000, -0.0071243103448, -0.0039620689655, + +0.0021310344828, +0.0059824137931, +0.0057351724138, +0.0023256896552, + -0.0005208620690, +0.0014258620690, +0.0087081034483, +0.0179053448276, + +0.0251348275862, +0.0274184482759, +0.0245824137931, +0.0205887931034, + +0.0176581034483, +0.0133856896552, +0.0078293103448, +0.0046250000000, + +0.0036725862069, +0.0027939655172, +0.0003315517241, -0.0035515517241, + -0.0055774137931, -0.0041987931034, -0.0015679310345, +0.0019836206897, + +0.0057772413793, +0.0054563793103, +0.0007998275862, -0.0033674137931, + -0.0036884482759, +0.0008103448276, +0.0102496551724, +0.0214727586207, + +0.0293600000000, +0.0309753448276, +0.0257346551724, +0.0155693103448, + +0.0040936206897, -0.0074505172414, -0.0180053448276, -0.0232091379310, + -0.0215727586207, -0.0168162068966, -0.0119439655172, -0.0080082758621, + -0.0061403448276, -0.0060087931034, -0.0058615517241, -0.0043144827586, + -0.0015574137931, +0.0006787931034, +0.0001210344828, -0.0041513793103, + -0.0111284482759, -0.0185789655172, -0.0234196551724, -0.0241982758621, + -0.0220463793103, -0.0192313793103, -0.0175950000000, -0.0178001724138, + -0.0188051724138, -0.0187210344828, -0.0161796551724, -0.0114651724138, + -0.0065455172414, -0.0037146551724, -0.0039305172414, -0.0067560344828, + -0.0110863793103, -0.0148220689655, -0.0171372413793, -0.0186525862069, + -0.0190577586207, -0.0181212068966, -0.0170741379310, -0.0173529310345, + -0.0191260344828, -0.0207624137931, -0.0205362068966, -0.0177737931034, + -0.0127594827586, -0.0066296551724, -0.0008998275862, +0.0028360344828, + +0.0036831034483, +0.0014048275862, -0.0035305172414, -0.0099393103448, + -0.0162479310345, -0.0210255172414, -0.0236932758621, -0.0246824137931, + -0.0242825862069, -0.0224041379310, -0.0190156896552, -0.0144222413793, + -0.0098550000000, -0.0072715517241, -0.0082555172414, -0.0123858620690, + -0.0173581034483, -0.0202520689655, -0.0195155172414, -0.0154167241379, + -0.0100075862069, -0.0061087931034, -0.0048460344828, -0.0059718965517, + -0.0090079310345, -0.0125912068966, -0.0149746551724, -0.0154955172414, + -0.0144063793103, -0.0125017241379, -0.0104391379310, -0.0085765517241, + -0.0071768965517, -0.0065086206897, -0.0062665517241, -0.0057562068966, + -0.0050932758621, -0.0052617241379, -0.0068137931034, -0.0094289655172, + -0.0129436206897, -0.0168636206897, -0.0201258620690, -0.0219831034483, + -0.0221884482759, -0.0204836206897, -0.0168898275862, -0.0118860344828, + -0.0066927586207, -0.0029201724138, -0.0010365517241, -0.0003946551724, + -0.0002841379310, -0.0001210344828, +0.0005734482759, +0.0014784482759, + +0.0022362068966, +0.0026150000000, +0.0021046551724, +0.0003420689655, + -0.0026150000000, -0.0060298275862, -0.0080924137931, -0.0075610344828, + -0.0049617241379, -0.0013153448276, +0.0021046551724, +0.0039515517241, + +0.0037305172414, +0.0019889655172, -0.0004313793103, -0.0028412068966, + -0.0045144827586, -0.0046091379310, -0.0032253448276, -0.0016468965517, + -0.0011206896552, -0.0022625862069, -0.0046513793103, -0.0067243103448, + -0.0072768965517, -0.0063613793103, -0.0040462068966, -0.0005472413793, + +0.0029939655172, +0.0056720689655, +0.0073348275862, +0.0076820689655, + +0.0068558620690, +0.0057931034483, +0.0053194827586, +0.0055089655172, + +0.0060929310345, +0.0067875862069, +0.0072032758621, +0.0073979310345, + +0.0076662068966, +0.0079556896552, +0.0081398275862, +0.0083186206897, + +0.0084134482759, +0.0080398275862, +0.0071505172414, +0.0063244827586, + +0.0060456896552, +0.0062982758621, +0.0069558620690, +0.0077556896552, + +0.0083660344828, +0.0087553448276, +0.0088343103448, +0.0076346551724, + +0.0045934482759, +0.0008050000000, -0.0018679310345, -0.0022520689655, + -0.0007944827586, +0.0009208620690, +0.0018468965517, +0.0019100000000, + +0.0015627586207, +0.0016153448276, +0.0028412068966, +0.0056667241379, + +0.0096813793103, +0.0133908620690, +0.0155534482759, +0.0160058620690, + +0.0149377586207, +0.0126753448276, +0.0102760344828, +0.0092551724138, + +0.0102234482759, +0.0124227586207, +0.0144589655172, +0.0155324137931, + +0.0156218965517, +0.0146063793103, +0.0124753448276, +0.0103286206897, + +0.0094867241379, +0.0098655172414, +0.0105443103448, +0.0106968965517, + +0.0102181034483, +0.0094762068966, +0.0088027586207, +0.0086817241379, + +0.0095498275862, +0.0112967241379, +0.0131593103448, +0.0141012068966, + +0.0134329310345, +0.0114651724138, +0.0091500000000, +0.0074136206897, + +0.0068191379310, +0.0076505172414, +0.0094182758621, +0.0108653448276, + +0.0108548275862, +0.0093289655172, +0.0071715517241, +0.0051617241379, + +0.0039410344828, +0.0041777586207, +0.0057562068966, +0.0075451724138, + +0.0085344827586, +0.0084450000000, +0.0079608620690, +0.0080818965517, + +0.0087974137931, +0.0094920689655, +0.0100498275862, +0.0104970689655, + +0.0106653448276, +0.0106232758621, +0.0105127586207, +0.0104286206897, + +0.0103444827586, +0.0101760344828, +0.0099287931034, +0.0097129310345, + +0.0096182758621, +0.0097446551724, +0.0099760344828, +0.0102496551724, + +0.0105232758621, +0.0104496551724, +0.0099444827586, +0.0094077586207, + +0.0090868965517, +0.0086553448276, +0.0075610344828, +0.0058405172414, + +0.0043250000000, +0.0037463793103, +0.0041724137931, +0.0053194827586, + +0.0067875862069, +0.0080977586207, +0.0086237931034, +0.0078977586207, + +0.0059087931034, +0.0033358620690, +0.0011101724138, -0.0000894827586, + -0.0001420689655, +0.0006893103448, +0.0019784482759, +0.0032306896552, + +0.0043829310345, +0.0057036206897, +0.0071979310345, +0.0083818965517, + +0.0087291379310, +0.0080660344828, +0.0065506896552, +0.0046565517241, + +0.0032306896552, +0.0030781034483, +0.0042724137931, +0.0059982758621, + +0.0073610344828, +0.0077713793103, +0.0069822413793, +0.0052143103448, + +0.0029991379310, +0.0009996551724, -0.0001156896552, +0.0002000000000, + +0.0020046551724, +0.0043567241379, +0.0059718965517, +0.0061139655172, + +0.0046250000000, +0.0019520689655, -0.0009839655172, -0.0031727586207, + -0.0039725862069, -0.0031622413793, -0.0012155172414, +0.0006787931034, + +0.0013363793103, +0.0005262068966, -0.0008575862069, -0.0016205172414, + -0.0010575862069, +0.0006103448276, +0.0024518965517, +0.0034148275862, + +0.0030044827586, +0.0013891379310, -0.0005367241379, -0.0016627586207, + -0.0015048275862, -0.0005418965517, +0.0004841379310, +0.0010050000000, + +0.0007577586207, -0.0000263793103, -0.0009313793103, -0.0016100000000, + -0.0018468965517, -0.0016205172414, -0.0013312068966, -0.0014889655172, + -0.0023046551724, -0.0034463793103, -0.0041777586207, -0.0038777586207, + -0.0024677586207, -0.0004682758621, +0.0012312068966, +0.0017889655172, + +0.0009944827586, -0.0008050000000, -0.0027675862069, -0.0038936206897, + -0.0036884482759, -0.0024413793103, -0.0008050000000, +0.0004841379310, + +0.0010417241379, +0.0007470689655, -0.0004787931034, -0.0023518965517, + -0.0041936206897, -0.0054668965517, -0.0060246551724, -0.0059351724138, + -0.0053668965517, -0.0047039655172, -0.0044039655172, -0.0047196551724, + -0.0055300000000, -0.0063560344828, -0.0067927586207, -0.0068558620690, + -0.0065875862069, -0.0058667241379, -0.0046565517241, -0.0033622413793, + -0.0026729310345, -0.0030306896552, -0.0042251724138, -0.0056931034483, + -0.0068243103448, -0.0071453448276, -0.0065350000000, -0.0053774137931, + -0.0043724137931, -0.0039356896552, -0.0039094827586, -0.0040777586207, + -0.0043618965517, -0.0047301724138, -0.0052248275862, -0.0056984482759, + -0.0060667241379, -0.0064981034483, -0.0070558620690, -0.0074874137931, + -0.0076556896552, -0.0077136206897, -0.0079293103448, -0.0084660344828, + -0.0092762068966, -0.0102550000000, -0.0111600000000, -0.0114651724138, + -0.0109863793103, -0.0101129310345, -0.0093079310345, -0.0088868965517, + -0.0090658620690, -0.0097708620690, -0.0104758620690, -0.0105391379310, + -0.0095498275862, -0.0076977586207, -0.0055720689655, -0.0038305172414, + -0.0030886206897, -0.0034779310345, -0.0044250000000, -0.0052089655172, + -0.0054353448276, -0.0051774137931, -0.0048881034483, -0.0049143103448, + -0.0052512068966, -0.0056089655172, -0.0056667241379, -0.0053458620690, + -0.0047722413793, -0.0042198275862, -0.0040303448276, -0.0044618965517, + -0.0054931034483, -0.0068717241379, -0.0081344827586, -0.0088396551724, + -0.0087186206897, -0.0078031034483, -0.0063403448276, -0.0048406896552, + -0.0038989655172, -0.0038094827586, -0.0044093103448, -0.0051512068966, + -0.0054774137931, -0.0052143103448, -0.0047565517241, -0.0044618965517, + -0.0044355172414, -0.0046250000000, -0.0048512068966, -0.0048512068966, + -0.0046618965517, -0.0044250000000, -0.0040303448276, -0.0033989655172, + -0.0028096551724, -0.0026308620690, -0.0029255172414, -0.0035305172414, + -0.0040462068966, -0.0041356896552, -0.0037831034483, -0.0031991379310, + -0.0027624137931, -0.0028518965517, -0.0033832758621, -0.0040831034483, + -0.0047881034483, -0.0051932758621, -0.0050091379310, -0.0043724137931, + -0.0037410344828, -0.0034937931034, -0.0037200000000, -0.0040356896552, + -0.0037831034483, -0.0025677586207, -0.0005682758621, +0.0016468965517, + +0.0031991379310, +0.0033306896552, +0.0020046551724, -0.0002105172414, + -0.0024939655172, -0.0039672413793, -0.0041724137931, -0.0033568965517, + -0.0020677586207, -0.0008155172414, +0.0000000000000, +0.0002000000000, + +0.0000525862069, -0.0000053448276, +0.0000736206897, +0.0001631034483, + +0.0001631034483, -0.0000736206897, -0.0007418965517, -0.0017048275862, + -0.0025729310345, -0.0029517241379, -0.0026834482759, -0.0019362068966, + -0.0011627586207, -0.0006313793103, -0.0002787931034, +0.0000000000000, + +0.0001210344828, +0.0000105172414, -0.0002736206897, -0.0006472413793, + -0.0010260344828, -0.0012312068966, -0.0010629310345, -0.0004472413793, + +0.0007893103448, +0.0026570689655, +0.0045460344828, +0.0055351724138, + +0.0052248275862, +0.0038567241379, +0.0021467241379, +0.0009418965517, + +0.0005208620690, +0.0006472413793, +0.0010524137931, +0.0013312068966, + +0.0010575862069, +0.0003577586207, -0.0002577586207, -0.0004208620690, + -0.0000736206897, +0.0005944827586, +0.0011943103448, +0.0013627586207, + +0.0010524137931, +0.0003420689655, -0.0005208620690, -0.0011837931034, + -0.0014206896552, -0.0012575862069, -0.0008681034483, -0.0006103448276, + -0.0006944827586, -0.0009944827586, -0.0012312068966, -0.0012681034483, + -0.0010786206897, -0.0006893103448, -0.0002841379310, -0.0001315517241, + -0.0003736206897, -0.0008944827586, -0.0013837931034, -0.0014101724138, + -0.0008365517241, +0.0002156896552, +0.0016258620690, +0.0030360344828, + +0.0039094827586, +0.0039620689655, +0.0032727586207, +0.0021415517241, + +0.0010206896552, +0.0003156896552, +0.0002420689655, +0.0007839655172, + +0.0017415517241, +0.0027518965517, +0.0033937931034, +0.0034517241379, + +0.0030727586207, +0.0025360344828, +0.0021572413793, +0.0021256896552, + +0.0023308620690, +0.0024362068966, +0.0020782758621, +0.0012522413793, + +0.0003367241379, -0.0001789655172, -0.0001051724138, +0.0003420689655, + +0.0007998275862, +0.0010575862069, +0.0010312068966, +0.0007734482759, + +0.0004472413793, +0.0003210344828, +0.0006418965517, +0.0013048275862, + +0.0019889655172, +0.0024624137931, +0.0026413793103, +0.0025413793103, + +0.0023467241379, +0.0022572413793, +0.0023362068966, +0.0024624137931, + +0.0024887931034, +0.0024413793103, +0.0023834482759, +0.0022993103448, + +0.0021887931034, +0.0019889655172, +0.0015363793103, +0.0009524137931, + +0.0004946551724, +0.0004313793103, +0.0008103448276, +0.0013627586207, + +0.0017153448276, +0.0017310344828, +0.0014679310345, +0.0011365517241, + +0.0009103448276, +0.0007787931034, +0.0007524137931, +0.0007787931034, + +0.0006208620690, +0.0001894827586, -0.0002315517241, -0.0003420689655, + +0.0000105172414, +0.0007944827586, +0.0017100000000, +0.0023677586207, + +0.0025308620690, +0.0022362068966, +0.0017520689655, +0.0015206896552, + +0.0016889655172, +0.0019679310345, +0.0020625862069, +0.0019784482759, + +0.0018310344828, +0.0017784482759, +0.0019731034483, +0.0025782758621, + +0.0035725862069, +0.0046565517241, +0.0054194827586, +0.0056456896552, + +0.0054720689655, +0.0051248275862, +0.0048039655172, +0.0045513793103, + +0.0043567241379, +0.0042462068966, +0.0041513793103, +0.0039777586207, + +0.0037515517241, +0.0035884482759, +0.0034253448276, +0.0030937931034, + +0.0025150000000, +0.0018153448276, +0.0012155172414, +0.0009155172414, + +0.0008260344828, +0.0008629310345, +0.0010470689655, +0.0012575862069, + +0.0013312068966, +0.0013048275862, +0.0013206896552, +0.0013786206897, + +0.0013627586207, +0.0012732758621, +0.0011996551724, +0.0011101724138, + +0.0009734482759, +0.0008891379310, +0.0009944827586, +0.0013258620690, + +0.0017468965517, +0.0020362068966, +0.0020887931034, +0.0019994827586, + +0.0019256896552, +0.0019625862069, +0.0020782758621, +0.0021731034483, + +0.0021993103448, +0.0021677586207, +0.0020782758621, +0.0018625862069, + +0.0015574137931, +0.0014153448276, +0.0015574137931, +0.0018153448276, + +0.0019574137931, +0.0019205172414, +0.0017836206897, +0.0015837931034, + +0.0014206896552, +0.0014627586207, +0.0016889655172, +0.0018994827586, + +0.0019625862069, +0.0017625862069, +0.0013312068966, +0.0009208620690, + +0.0007365517241, +0.0007524137931, +0.0008839655172, +0.0009996551724, + +0.0010839655172, +0.0012206896552, +0.0014312068966, +0.0016889655172, + +0.0019625862069, +0.0021467241379, +0.0021782758621, +0.0020415517241, + +0.0017415517241, +0.0013837931034, +0.0010470689655, +0.0007893103448, + +0.0007155172414, +0.0009365517241, +0.0014468965517, +0.0020625862069, + +0.0025360344828, +0.0025993103448, +0.0021310344828, +0.0013101724138, + +0.0004787931034, -0.0000946551724, -0.0002577586207, -0.0000946551724, + +0.0000631034483, -0.0000158620690, -0.0002893103448, -0.0005577586207, + -0.0006629310345, -0.0005103448276, -0.0002315517241, -0.0002262068966, + -0.0006944827586, -0.0012732758621, -0.0014363793103, -0.0010417241379, + -0.0003367241379, +0.0003682758621, +0.0008998275862, +0.0011050000000, + +0.0009313793103, +0.0005103448276, +0.0001105172414, -0.0001841379310, + -0.0003682758621, -0.0004787931034, -0.0006103448276, -0.0008050000000, + -0.0010050000000, -0.0011837931034, -0.0011837931034, -0.0009103448276, + -0.0005367241379, -0.0003105172414, -0.0003946551724, -0.0007682758621, + -0.0011312068966, -0.0011365517241, -0.0007155172414, -0.0000420689655, + +0.0005313793103, +0.0007050000000, +0.0003787931034, -0.0002472413793, + -0.0009260344828, -0.0014732758621, -0.0016889655172, -0.0014468965517, + -0.0009470689655, -0.0006839655172, -0.0009524137931, -0.0015837931034, + -0.0020941379310, -0.0020572413793, -0.0013837931034, -0.0003946551724, + +0.0005418965517, +0.0011522413793, +0.0011837931034, +0.0005629310345, + -0.0003998275862, -0.0012050000000, -0.0015627586207, -0.0014574137931, + -0.0010575862069, -0.0006103448276, -0.0003682758621, -0.0004841379310, + -0.0008944827586, -0.0013522413793, -0.0016837931034, -0.0017889655172, + -0.0017100000000, -0.0015679310345, -0.0014574137931, -0.0014312068966, + -0.0014889655172, -0.0014837931034, -0.0012260344828, -0.0007313793103, + -0.0003262068966, -0.0003156896552, -0.0008103448276, -0.0017153448276, + -0.0028044827586, -0.0037146551724, -0.0039672413793, -0.0034094827586, + -0.0023993103448, -0.0014627586207, -0.0008629310345, -0.0006682758621, + -0.0008998275862, -0.0014153448276, -0.0018731034483, -0.0019468965517, + -0.0016627586207, -0.0011891379310, -0.0006577586207, -0.0002631034483, + -0.0000946551724, -0.0000579310345, -0.0000684482759, -0.0001315517241, + -0.0002893103448, -0.0005156896552, -0.0006524137931, -0.0005524137931, + -0.0002051724138, +0.0002841379310, +0.0007313793103, +0.0010050000000, + +0.0011365517241, +0.0010944827586, +0.0008260344828, +0.0003472413793, + -0.0002577586207, -0.0008050000000, -0.0010365517241, -0.0008470689655, + -0.0003841379310, -0.0000158620690, -0.0000474137931, -0.0004577586207, + -0.0010206896552, -0.0013681034483, -0.0012891379310, -0.0008470689655, + -0.0002051724138, +0.0004262068966, +0.0009050000000, +0.0011786206897, + +0.0012786206897, +0.0011312068966, +0.0006367241379, -0.0000789655172, + -0.0006787931034, -0.0010050000000, -0.0010101724138, -0.0006998275862, + -0.0002420689655, +0.0001315517241, +0.0003367241379, +0.0004208620690, + +0.0004418965517, +0.0003787931034, +0.0000841379310, -0.0004525862069, + -0.0011417241379, -0.0018153448276, -0.0023046551724, -0.0024729310345, + -0.0022993103448, -0.0018205172414, -0.0011470689655, -0.0005524137931, + -0.0003000000000, -0.0004841379310, -0.0011522413793, -0.0022625862069, + -0.0034884482759, -0.0043618965517, -0.0044355172414, -0.0035043103448, + -0.0018258620690, +0.0000263793103, +0.0015784482759, +0.0023677586207, + +0.0021993103448, +0.0014784482759, +0.0007470689655, +0.0001946551724, + -0.0002472413793, -0.0005629310345, -0.0006208620690, -0.0003420689655, + +0.0001420689655, +0.0005944827586, +0.0008208620690, +0.0007418965517, + +0.0004313793103, +0.0001789655172, +0.0002156896552, +0.0004313793103, + +0.0006998275862, +0.0009629310345, +0.0011627586207, +0.0011417241379, + +0.0008470689655, +0.0004262068966, +0.0000000000000, -0.0005051724138, + -0.0011260344828, -0.0016468965517, -0.0018415517241, -0.0017310344828, + -0.0014574137931, -0.0011206896552, -0.0008313793103, -0.0006524137931, + -0.0005629310345, -0.0004577586207, -0.0002946551724, -0.0002156896552, + -0.0003631034483, -0.0007682758621, -0.0012681034483, -0.0016415517241, + -0.0017310344828, -0.0014417241379, -0.0007944827586, -0.0000158620690, + +0.0005629310345, +0.0008681034483, +0.0010206896552, +0.0010206896552, + +0.0007524137931, +0.0002946551724, -0.0001051724138, -0.0003105172414, + -0.0003577586207, -0.0003787931034, -0.0005051724138, -0.0007893103448, + -0.0010734482759, -0.0010260344828, -0.0004631034483, +0.0005367241379, + +0.0016048275862, +0.0022413793103, +0.0020887931034, +0.0011996551724, + +0.0000263793103, -0.0008891379310, -0.0012996551724, -0.0012417241379, + -0.0008575862069, -0.0003105172414, +0.0002210344828, +0.0006682758621, + +0.0011050000000, +0.0016468965517, +0.0022941379310, +0.0028412068966, + +0.0030044827586, +0.0025939655172, +0.0015679310345, +0.0001210344828, + -0.0012681034483, -0.0020836206897, -0.0021100000000, -0.0014468965517, + -0.0003893103448, +0.0006156896552, +0.0011417241379, +0.0010260344828, + +0.0005682758621, +0.0002156896552, +0.0001210344828, +0.0002367241379, + +0.0005313793103, +0.0008681034483, +0.0010944827586, +0.0009996551724, + +0.0003577586207, -0.0007629310345, -0.0018889655172, -0.0026518965517, + -0.0029727586207, -0.0028096551724, -0.0021256896552, -0.0010417241379, + +0.0001210344828, +0.0011155172414, +0.0016784482759, +0.0017363793103, + +0.0014468965517, +0.0010470689655, +0.0007839655172, +0.0008681034483, + +0.0012837931034, +0.0018363793103, +0.0023098275862, +0.0025360344828, + +0.0023782758621, +0.0018100000000, +0.0010575862069, +0.0004631034483, + +0.0001789655172, +0.0001367241379, +0.0001946551724, +0.0002262068966, + +0.0002105172414, +0.0001579310345, +0.0001579310345, +0.0004262068966, + +0.0011365517241, +0.0021887931034, +0.0030991379310, +0.0031465517241, + +0.0020046551724, +0.0001262068966, -0.0015048275862, -0.0020362068966, + -0.0012470689655, +0.0004736206897, +0.0024308620690, +0.0038094827586, + +0.0039936206897, +0.0029622413793, +0.0013627586207, +0.0000684482759, + -0.0002946551724, +0.0002367241379, +0.0011786206897, +0.0020887931034, + +0.0024993103448, +0.0019046551724, +0.0005051724138, -0.0008524137931, + -0.0014574137931, -0.0011522413793, -0.0002262068966, +0.0008839655172, + +0.0017258620690, +0.0018994827586, +0.0013837931034, +0.0006103448276, + +0.0003105172414, +0.0009629310345, +0.0022677586207, +0.0033358620690, + +0.0034622413793, +0.0025255172414, +0.0008155172414, -0.0011470689655, + -0.0027255172414, -0.0035253448276, -0.0032622413793, -0.0020205172414, + -0.0006472413793, -0.0000263793103, -0.0001946551724, -0.0008103448276, + -0.0016943103448, -0.0024782758621, -0.0025729310345, -0.0018836206897, + -0.0009944827586, -0.0003998275862, -0.0000736206897, +0.0002051724138, + +0.0004208620690, +0.0004631034483, +0.0003998275862, +0.0004787931034, + +0.0006577586207, +0.0005472413793, -0.0000263793103, -0.0007998275862, + -0.0013048275862, -0.0011786206897, -0.0004682758621, +0.0005156896552, + +0.0013943103448, +0.0015732758621, +0.0007524137931, -0.0004893103448, + -0.0012470689655, -0.0011050000000, -0.0001105172414, +0.0012365517241, + +0.0021572413793, +0.0022677586207, +0.0015889655172, +0.0002420689655, + -0.0013627586207, -0.0025098275862, -0.0026675862069, -0.0019100000000, + -0.0008103448276, +0.0001051724138, +0.0006734482759, +0.0009260344828, + +0.0009629310345, +0.0008891379310, +0.0007524137931, +0.0005944827586, + +0.0004367241379, +0.0001894827586, -0.0001684482759, -0.0005262068966, + -0.0008103448276, -0.0010260344828, -0.0011050000000, -0.0009786206897, + -0.0006734482759, -0.0002787931034, +0.0001684482759, +0.0008418965517, + +0.0017836206897, +0.0028044827586, +0.0037251724138, +0.0043093103448, + +0.0043408620690, +0.0037725862069, +0.0026729310345, +0.0013732758621, + +0.0002682758621, -0.0005367241379, -0.0009418965517, -0.0008575862069, + -0.0005367241379, -0.0003105172414, -0.0004156896552, -0.0009103448276, + -0.0016258620690, -0.0023572413793, -0.0028201724138, -0.0027150000000, + -0.0019256896552, -0.0007103448276, +0.0004736206897, +0.0012050000000, + +0.0012943103448, +0.0009260344828, +0.0002946551724, -0.0004631034483, + -0.0011417241379, -0.0016048275862, -0.0019151724138, -0.0021625862069, + -0.0023203448276, -0.0021415517241, -0.0013101724138, +0.0001156896552, + +0.0017205172414, +0.0029781034483, +0.0035410344828, +0.0033358620690, + +0.0024834482759, +0.0010891379310, -0.0005418965517, -0.0019100000000, + -0.0027413793103, -0.0031622413793, -0.0033201724138, -0.0033253448276, + -0.0031412068966, -0.0026993103448, -0.0020994827586, -0.0014889655172, + -0.0009629310345, -0.0006682758621, -0.0006682758621, -0.0009103448276, + -0.0012837931034, -0.0014732758621, -0.0012943103448, -0.0009681034483, + -0.0006051724138, -0.0001367241379, +0.0002525862069, +0.0002472413793, + -0.0002315517241, -0.0010050000000, -0.0017363793103, -0.0021677586207, + -0.0022256896552, -0.0018836206897, -0.0011206896552, -0.0002156896552, + +0.0004367241379, +0.0006944827586, +0.0007524137931, +0.0008313793103, + +0.0009365517241, +0.0010206896552, +0.0010524137931, +0.0010575862069, + +0.0010260344828, +0.0009155172414, +0.0007734482759, +0.0005734482759, + +0.0001841379310, -0.0003998275862, -0.0010681034483, -0.0015574137931, + -0.0015943103448, -0.0011837931034, -0.0005998275862, -0.0000789655172, + +0.0003472413793, +0.0007313793103, +0.0010206896552, +0.0010839655172, + +0.0008681034483, +0.0004418965517, -0.0000105172414, -0.0003893103448, + -0.0007577586207, -0.0011522413793, -0.0013522413793, -0.0011522413793, + -0.0006262068966, -0.0000525862069, +0.0003472413793, +0.0006367241379, + +0.0007734482759, +0.0006156896552, +0.0003051724138, +0.0001420689655, + +0.0001894827586, +0.0003841379310, +0.0005944827586, +0.0005682758621, + +0.0002156896552, -0.0003736206897, -0.0010944827586, -0.0016627586207, + -0.0018363793103, -0.0017468965517, -0.0015784482759, -0.0012681034483, + -0.0008155172414, -0.0003367241379, -0.0000474137931, -0.0001315517241, + -0.0004841379310, -0.0008629310345, -0.0011101724138, -0.0010417241379, + -0.0005839655172, -0.0000210344828, +0.0002946551724, +0.0002577586207, + -0.0000841379310, -0.0006208620690, -0.0012155172414, -0.0017100000000, + -0.0019889655172, -0.0019046551724, -0.0013996551724, -0.0006208620690, + +0.0001579310345, +0.0007577586207, +0.0010734482759, +0.0010417241379, + +0.0007418965517, +0.0003472413793, +0.0001000000000, +0.0000158620690, + +0.0000105172414, +0.0001315517241, +0.0002367241379, +0.0000263793103, + -0.0005156896552, -0.0011312068966, -0.0016522413793, -0.0019836206897, + -0.0021151724138, -0.0020151724138, -0.0016679310345, -0.0012837931034, + -0.0010891379310, -0.0009944827586, -0.0007577586207, -0.0003420689655, + +0.0000736206897, +0.0002631034483, +0.0001315517241, -0.0001894827586, + -0.0005734482759, -0.0009524137931, -0.0013048275862, -0.0015522413793, + -0.0016153448276, -0.0014522413793, -0.0010524137931, -0.0004156896552, + +0.0003156896552, +0.0009260344828, +0.0011943103448, +0.0010312068966, + +0.0006208620690, +0.0002577586207, +0.0002156896552, +0.0005051724138, + +0.0008891379310, +0.0012206896552, +0.0014101724138, +0.0012891379310, + +0.0008260344828, +0.0001894827586, -0.0004208620690, -0.0009839655172, + -0.0015994827586, -0.0020941379310, -0.0020941379310, -0.0016048275862, + -0.0009681034483, -0.0004525862069, -0.0001156896552, +0.0001156896552, + +0.0003105172414, +0.0004418965517, +0.0004577586207, +0.0003577586207, + +0.0001367241379, -0.0001946551724, -0.0006051724138, -0.0009208620690, + -0.0008891379310, -0.0003525862069, +0.0005577586207, +0.0014837931034, + +0.0019941379310, +0.0018994827586, +0.0013101724138, +0.0005682758621, + +0.0001315517241, +0.0002631034483, +0.0008418965517, +0.0014837931034, + +0.0018363793103, +0.0017520689655, +0.0012996551724, +0.0006313793103, + +0.0000053448276, -0.0003525862069, -0.0005051724138, -0.0006156896552, + -0.0007470689655, -0.0008998275862, -0.0010155172414, -0.0009629310345, + -0.0007734482759, -0.0005418965517, -0.0002841379310, -0.0000736206897, + -0.0000105172414, -0.0000105172414, +0.0000525862069, +0.0002577586207, + +0.0006682758621, +0.0012575862069, +0.0017415517241, +0.0017994827586, + +0.0015101724138, +0.0011470689655, +0.0009155172414, +0.0009786206897, + +0.0014153448276, +0.0020205172414, +0.0024834482759, +0.0026413793103, + +0.0025098275862, +0.0022887931034, +0.0020941379310, +0.0019046551724, + +0.0017574137931, +0.0016732758621, +0.0015784482759, +0.0013837931034, + +0.0010944827586, +0.0008734482759, +0.0008524137931, +0.0009575862069, + +0.0009734482759, +0.0007418965517, +0.0003105172414, -0.0001631034483, + -0.0005472413793, -0.0007208620690, -0.0005998275862, -0.0002315517241, + +0.0002000000000, +0.0005156896552, +0.0006367241379, +0.0006103448276, + +0.0005472413793, +0.0005103448276, +0.0004577586207, +0.0004525862069, + +0.0005524137931, +0.0007155172414, +0.0008944827586, +0.0011365517241, + +0.0013312068966, +0.0013681034483, +0.0012522413793, +0.0010734482759, + +0.0009365517241, +0.0008470689655, +0.0007103448276, +0.0005051724138, + +0.0003315517241, +0.0002893103448, +0.0004103448276, +0.0005524137931, + +0.0005944827586, +0.0005524137931, +0.0004313793103, +0.0001736206897, + -0.0001841379310, -0.0004525862069, -0.0005156896552, -0.0004631034483, + -0.0003051724138, -0.0000263793103, +0.0002682758621, +0.0005787931034, + +0.0008681034483, +0.0008786206897, +0.0005682758621, +0.0002841379310, + +0.0002000000000, +0.0001736206897, +0.0001156896552, +0.0000263793103, + -0.0000579310345, -0.0001051724138, -0.0001000000000, -0.0000579310345, + +0.0000315517241, +0.0001789655172, +0.0002841379310, +0.0002105172414, + -0.0000789655172, -0.0004525862069, -0.0007524137931, -0.0009208620690, + -0.0009260344828, -0.0008155172414, -0.0006998275862, -0.0005156896552, + -0.0002105172414, +0.0001262068966, +0.0003631034483, +0.0004313793103, + +0.0003000000000, -0.0000368965517, -0.0005682758621, -0.0011206896552, + -0.0014574137931, -0.0014468965517, -0.0010312068966, -0.0003682758621, + +0.0002262068966, +0.0005472413793, +0.0005367241379, +0.0002156896552, + -0.0002472413793, -0.0005893103448, -0.0005998275862, -0.0003210344828, + +0.0001051724138, +0.0005418965517, +0.0007998275862, +0.0008208620690, + +0.0007787931034, +0.0008944827586, +0.0011312068966, +0.0012943103448, + +0.0013153448276, +0.0011891379310, +0.0008839655172, +0.0004472413793, + +0.0000315517241, -0.0001631034483, -0.0000579310345, +0.0002736206897, + +0.0005998275862, +0.0007155172414, +0.0005577586207, +0.0002105172414, + -0.0001579310345, -0.0003787931034, -0.0003946551724, -0.0003156896552, + -0.0001684482759, +0.0000000000000, +0.0001051724138, +0.0002000000000, + +0.0003367241379, +0.0004156896552, +0.0004051724138, +0.0003736206897, + +0.0003367241379, +0.0002472413793, +0.0000684482759, -0.0001841379310, + -0.0004208620690, -0.0004893103448, -0.0003472413793, -0.0000841379310, + +0.0001631034483, +0.0003420689655, +0.0004156896552, +0.0003736206897, + +0.0002841379310, +0.0002210344828, +0.0001894827586, +0.0001841379310, + +0.0001684482759, +0.0001525862069, +0.0002000000000, +0.0003577586207, + +0.0005472413793, +0.0006629310345, +0.0006313793103, +0.0005051724138, + +0.0003631034483, +0.0002156896552, +0.0000789655172, +0.0000525862069, + +0.0001262068966, +0.0001420689655, +0.0000158620690, -0.0001631034483, + -0.0002736206897, -0.0002525862069, -0.0001000000000, +0.0001525862069, + +0.0003787931034, +0.0003367241379, -0.0000158620690, -0.0005734482759, + -0.0011575862069, -0.0014889655172, -0.0013417241379, -0.0008260344828, + -0.0002315517241, +0.0002787931034, +0.0006051724138, +0.0006944827586, + +0.0006313793103, +0.0005577586207, +0.0005418965517, +0.0005682758621, + +0.0004998275862, +0.0002631034483, -0.0000525862069, -0.0002893103448, + -0.0003315517241, -0.0001631034483, +0.0001946551724, +0.0005524137931, + +0.0006787931034, +0.0005367241379, +0.0002525862069, -0.0000789655172, + -0.0003577586207, -0.0004525862069, -0.0003367241379, -0.0001631034483, + -0.0000474137931, -0.0000684482759, -0.0002315517241, -0.0004472413793, + -0.0006103448276, -0.0007260344828, -0.0007787931034, -0.0007418965517, + -0.0005998275862, -0.0002787931034, +0.0001946551724, +0.0006893103448, + +0.0010155172414, +0.0011155172414, +0.0010101724138, +0.0006998275862, + +0.0001736206897, -0.0004156896552, -0.0008208620690, -0.0008418965517, + -0.0005156896552, -0.0001210344828, +0.0000946551724, +0.0001736206897, + +0.0001789655172, +0.0001472413793, +0.0001367241379, +0.0001789655172, + +0.0002210344828, +0.0001894827586, +0.0000368965517, -0.0002262068966, + -0.0005367241379, -0.0008208620690, -0.0011417241379, -0.0014732758621, + -0.0016468965517, -0.0015101724138, -0.0010996551724, -0.0006682758621, + -0.0004262068966, -0.0003998275862, -0.0004787931034, -0.0005839655172, + -0.0007577586207, -0.0009996551724, -0.0012050000000, -0.0013101724138, + -0.0013153448276, -0.0011732758621, -0.0008470689655, -0.0004367241379, + -0.0000946551724, +0.0001210344828, +0.0001841379310, +0.0000000000000, + -0.0004156896552, -0.0008839655172, -0.0011417241379, -0.0010629310345, + -0.0008050000000, -0.0006051724138, -0.0005418965517, -0.0005472413793, + -0.0005472413793, -0.0004998275862, -0.0004262068966, -0.0003946551724, + -0.0004841379310, -0.0007260344828, -0.0010312068966, -0.0013153448276, + -0.0014943103448, -0.0014784482759, -0.0012260344828, -0.0008629310345, + -0.0005472413793, -0.0003682758621, -0.0003420689655, -0.0004103448276, + -0.0004946551724, -0.0005313793103, -0.0005472413793, -0.0006103448276, + -0.0007208620690, -0.0008050000000, -0.0007682758621, -0.0006418965517, + -0.0005629310345, -0.0005893103448, -0.0006524137931, -0.0007313793103, + -0.0008103448276, -0.0008313793103, -0.0007524137931, -0.0005998275862, + -0.0003998275862, -0.0002315517241, -0.0001684482759, -0.0002472413793, + -0.0004262068966, -0.0005524137931, -0.0005577586207, -0.0004787931034, + -0.0004262068966, -0.0004787931034, -0.0005682758621, -0.0005418965517, + -0.0003946551724, -0.0002156896552, -0.0001000000000, -0.0001367241379, + -0.0003998275862, -0.0008944827586, -0.0014206896552, -0.0017048275862, + -0.0016415517241, -0.0012627586207, -0.0006682758621, -0.0000525862069, + +0.0003841379310, +0.0005208620690, +0.0003315517241, -0.0000474137931, + -0.0004103448276, -0.0006313793103, -0.0007944827586, -0.0009734482759, + -0.0010734482759, -0.0009786206897, -0.0007208620690, -0.0003105172414, + +0.0001525862069, +0.0004367241379, +0.0003893103448, +0.0001000000000, + -0.0002420689655, -0.0004998275862, -0.0005472413793, -0.0003000000000, + +0.0002210344828, +0.0008155172414, +0.0011312068966, +0.0010155172414, + +0.0005893103448, +0.0000158620690, -0.0005734482759, -0.0009839655172, + -0.0009891379310, -0.0005787931034, +0.0000053448276, +0.0005208620690, + +0.0008103448276, +0.0008260344828, +0.0005524137931, +0.0001631034483, + -0.0001210344828, -0.0001525862069, +0.0000946551724, +0.0005734482759, + +0.0011101724138, +0.0014889655172, +0.0015153448276, +0.0011417241379, + +0.0004577586207, -0.0003105172414, -0.0007944827586, -0.0007629310345, + -0.0003315517241, +0.0002156896552, +0.0006998275862, +0.0010524137931, + +0.0011522413793, +0.0009260344828, +0.0004841379310, +0.0000841379310, + -0.0001210344828, -0.0001367241379, -0.0000263793103, +0.0001367241379, + +0.0002736206897, +0.0003367241379, +0.0003210344828, +0.0002210344828, + +0.0001472413793, +0.0001579310345, +0.0001631034483, +0.0000579310345, + -0.0001210344828, -0.0002367241379, -0.0002051724138, -0.0000525862069, + +0.0001262068966, +0.0002631034483, +0.0003631034483, +0.0004367241379, + +0.0004472413793, +0.0003736206897, +0.0003000000000, +0.0003525862069, + +0.0005103448276, +0.0006262068966, +0.0006208620690, +0.0005472413793, + +0.0003946551724, +0.0001789655172, +0.0000420689655, +0.0001315517241, + +0.0003577586207, +0.0005367241379, +0.0005734482759, +0.0005367241379, + +0.0005472413793, +0.0005893103448, +0.0005998275862, +0.0005524137931, + +0.0004682758621, +0.0003105172414, +0.0001156896552, +0.0000053448276, + +0.0000894827586, +0.0002893103448, +0.0004262068966, +0.0004367241379, + +0.0003156896552, +0.0001525862069, +0.0000053448276, -0.0001315517241, + -0.0002525862069, -0.0002787931034, -0.0001579310345, +0.0001051724138, + +0.0004525862069, +0.0007313793103, +0.0008786206897, +0.0009050000000, + +0.0008155172414, +0.0005998275862, +0.0003210344828, +0.0000894827586, + -0.0000841379310, -0.0002051724138, -0.0002156896552, -0.0001210344828, + +0.0000000000000, +0.0001210344828, +0.0002420689655, +0.0003472413793, + +0.0004736206897, +0.0006103448276, +0.0006472413793, +0.0004682758621, + +0.0001156896552, -0.0002105172414, -0.0003841379310, -0.0003787931034, + -0.0002682758621, -0.0001420689655, -0.0000263793103, +0.0000263793103, + -0.0000053448276, -0.0001420689655, -0.0002946551724, -0.0003577586207, + -0.0002946551724, -0.0001210344828, +0.0001525862069, +0.0004682758621, + +0.0007208620690, +0.0007998275862, +0.0006629310345, +0.0003893103448, + +0.0001262068966, -0.0000105172414, +0.0000210344828, +0.0002051724138, + +0.0003998275862, +0.0004998275862, +0.0004736206897, +0.0002946551724, + -0.0000158620690, -0.0003577586207, -0.0005682758621, -0.0005682758621, + -0.0003631034483, -0.0000105172414, +0.0003525862069, +0.0005629310345, + +0.0005682758621, +0.0004156896552, +0.0001946551724, -0.0000579310345, + -0.0003210344828, -0.0005208620690, -0.0005893103448, -0.0005577586207, + -0.0004893103448, -0.0003998275862, -0.0003000000000, -0.0002051724138, + -0.0001367241379, -0.0000841379310, +0.0000000000000, +0.0001525862069, + +0.0003787931034, +0.0006262068966, +0.0007787931034, +0.0007313793103, + +0.0004787931034, +0.0001051724138, -0.0001684482759, -0.0001420689655, + +0.0001631034483, +0.0005262068966, +0.0007577586207, +0.0007629310345, + +0.0005208620690, +0.0001105172414, -0.0002946551724, -0.0005313793103, + -0.0004893103448, -0.0002105172414, +0.0001420689655, +0.0004262068966, + +0.0005629310345, +0.0005156896552, +0.0002946551724, +0.0000105172414, + -0.0001841379310, -0.0002420689655, -0.0002367241379, -0.0002682758621, + -0.0003156896552, -0.0002841379310, -0.0001579310345, +0.0000525862069, + +0.0003420689655, +0.0005998275862, +0.0005944827586, +0.0002262068966, + -0.0003156896552, -0.0007208620690, -0.0007998275862, -0.0005208620690, + +0.0000579310345, +0.0007734482759, +0.0012996551724, +0.0013786206897, + +0.0010260344828, +0.0004472413793, -0.0001105172414, -0.0004841379310, + -0.0005787931034, -0.0004051724138, -0.0000525862069, +0.0002946551724, + +0.0004893103448, +0.0005262068966, +0.0004787931034, +0.0003525862069, + +0.0002000000000, +0.0000894827586, +0.0000105172414, -0.0000525862069, + -0.0000158620690, +0.0001631034483, +0.0004156896552, +0.0006629310345, + +0.0008839655172, +0.0010629310345, +0.0011101724138, +0.0009629310345, + +0.0006208620690, +0.0001472413793, -0.0003525862069, -0.0007893103448, + -0.0010312068966, -0.0009524137931, -0.0005893103448, -0.0001367241379, + +0.0002736206897, +0.0006367241379, +0.0008944827586, +0.0009470689655, + +0.0007893103448, +0.0005629310345, +0.0003787931034, +0.0002472413793, + +0.0002051724138, +0.0002893103448, +0.0004208620690, +0.0004525862069, + +0.0003893103448, +0.0003631034483, +0.0004156896552, +0.0004893103448, + +0.0005472413793, +0.0006208620690, +0.0006156896552, +0.0003946551724, + -0.0000631034483, -0.0006787931034, -0.0012155172414, -0.0014206896552, + -0.0011206896552, -0.0002682758621, +0.0009470689655, +0.0020467241379, + +0.0024046551724, +0.0017468965517, +0.0003262068966, -0.0013101724138, + -0.0024782758621, -0.0024834482759, -0.0011365517241, +0.0009418965517, + +0.0027308620690, +0.0033937931034, +0.0027255172414, +0.0010365517241, + -0.0010996551724, -0.0028939655172, -0.0035463793103, -0.0028360344828, + -0.0013101724138, +0.0001631034483, +0.0009681034483, +0.0009734482759, + +0.0004367241379, -0.0002736206897, -0.0008734482759, -0.0010734482759, + -0.0007893103448, -0.0002472413793, +0.0002000000000, +0.0003631034483, + +0.0002210344828, -0.0001210344828, -0.0005103448276, -0.0007787931034, + -0.0008365517241, -0.0007208620690, -0.0005629310345, -0.0004893103448, + -0.0005051724138, -0.0004946551724, -0.0003736206897, -0.0002000000000, + -0.0000474137931, +0.0001051724138, +0.0003156896552, +0.0005262068966, + +0.0006418965517, +0.0005944827586, +0.0003367241379, -0.0000894827586, + -0.0004631034483, -0.0005998275862, -0.0004682758621, -0.0000946551724, + +0.0003736206897, +0.0007734482759, +0.0009575862069, +0.0008629310345, + +0.0005262068966, +0.0000841379310, -0.0002682758621, -0.0003736206897, + -0.0001894827586, +0.0001210344828, +0.0003420689655, +0.0004631034483, + +0.0004841379310, +0.0003367241379, +0.0000053448276, -0.0003051724138, + -0.0004313793103, -0.0003841379310, -0.0002631034483, -0.0001420689655, + -0.0000684482759, -0.0000736206897, -0.0001525862069, -0.0002841379310, + -0.0003262068966, -0.0001051724138, +0.0003262068966, +0.0007998275862, + +0.0011470689655, +0.0011996551724, +0.0007944827586, +0.0001156896552, + -0.0004313793103, -0.0005524137931, -0.0002736206897, +0.0001367241379, + +0.0003736206897, +0.0003315517241, +0.0001105172414, -0.0001210344828, + -0.0002156896552, -0.0001156896552, +0.0001472413793, +0.0004946551724, + +0.0007365517241, +0.0006418965517, +0.0001472413793, -0.0005524137931, + -0.0011365517241, -0.0013206896552, -0.0009629310345, -0.0002051724138, + +0.0005629310345, +0.0009891379310, +0.0009470689655, +0.0005682758621, + +0.0001105172414, -0.0001472413793, -0.0000158620690, +0.0004631034483, + +0.0010101724138, +0.0013837931034, +0.0014784482759, +0.0013312068966, + +0.0010470689655, +0.0007050000000, +0.0003367241379, +0.0000210344828, + -0.0001472413793, -0.0002262068966, -0.0002420689655, -0.0001367241379, + +0.0001420689655, +0.0005367241379, +0.0008786206897, +0.0010786206897, + +0.0011101724138, +0.0009313793103, +0.0005682758621, +0.0001946551724, + -0.0000053448276, -0.0000315517241, +0.0000263793103, +0.0000894827586, + +0.0000841379310, -0.0000579310345, -0.0003105172414, -0.0005472413793, + -0.0006103448276, -0.0004103448276, -0.0000789655172, +0.0001841379310, + +0.0003315517241, +0.0003787931034, +0.0003367241379, +0.0003051724138, + +0.0004103448276, +0.0005313793103, +0.0004998275862, +0.0002893103448, + -0.0000579310345, -0.0004893103448, -0.0008944827586, -0.0011050000000, + -0.0009050000000, -0.0003051724138, +0.0003893103448, +0.0009365517241, + +0.0011996551724, +0.0010681034483, +0.0005893103448, +0.0000420689655, + -0.0002736206897, -0.0002631034483, -0.0000579310345, +0.0001156896552, + +0.0001736206897, +0.0000894827586, -0.0001789655172, -0.0005524137931, + -0.0008260344828, -0.0008629310345, -0.0006734482759, -0.0003420689655, + +0.0000368965517, +0.0003946551724, +0.0005839655172, +0.0005787931034, + +0.0004998275862, +0.0004208620690, +0.0002946551724, +0.0001525862069, + +0.0001105172414, +0.0001472413793, +0.0001262068966, -0.0000053448276, + -0.0002105172414, -0.0003736206897, -0.0004525862069, -0.0004682758621, + -0.0004313793103, -0.0003315517241, -0.0001684482759, +0.0000736206897, + +0.0004367241379, +0.0007998275862, +0.0009944827586, +0.0009208620690, + +0.0006262068966, +0.0002051724138, -0.0002472413793, -0.0006524137931, + -0.0008734482759, -0.0008418965517, -0.0006524137931, -0.0004208620690, + -0.0002420689655, -0.0001946551724, -0.0003841379310, -0.0008050000000, + -0.0012575862069, -0.0015417241379, -0.0015784482759, -0.0012996551724, + -0.0007524137931, -0.0001631034483, +0.0002631034483, +0.0004577586207, + +0.0004208620690, +0.0001631034483, -0.0002631034483, -0.0007524137931, + -0.0011732758621, -0.0014679310345, -0.0016100000000, -0.0015837931034, + -0.0014784482759, -0.0013837931034, -0.0012943103448, -0.0010944827586, + -0.0007260344828, -0.0002682758621, +0.0001315517241, +0.0004262068966, + +0.0005944827586, +0.0005682758621, +0.0003946551724, +0.0002210344828, + +0.0001894827586, +0.0002736206897, +0.0003577586207, +0.0003787931034, + +0.0003315517241, +0.0002315517241, +0.0000315517241, -0.0002262068966, + -0.0003787931034, -0.0002787931034, -0.0000105172414, +0.0002472413793, + +0.0003787931034, +0.0003051724138, +0.0000315517241, -0.0002946551724, + -0.0005103448276, -0.0004525862069, -0.0001156896552, +0.0002841379310, + +0.0005208620690, +0.0005262068966, +0.0004051724138, +0.0002210344828, + +0.0000105172414, -0.0001841379310, -0.0003367241379, -0.0003420689655, + -0.0001579310345, +0.0000631034483, +0.0001105172414, -0.0001367241379, + -0.0005893103448, -0.0009839655172, -0.0010839655172, -0.0007787931034, + -0.0001315517241, +0.0005577586207, +0.0009575862069, +0.0009050000000, + +0.0004631034483, -0.0001525862069, -0.0006839655172, -0.0009155172414, + -0.0007629310345, -0.0002787931034, +0.0003262068966, +0.0008208620690, + +0.0010470689655, +0.0009839655172, +0.0006839655172, +0.0002893103448, + -0.0000420689655, -0.0002631034483, -0.0003420689655, -0.0003000000000, + -0.0002051724138, -0.0001684482759, -0.0002262068966, -0.0003682758621, + -0.0005524137931, -0.0007208620690, -0.0008103448276, -0.0007734482759, + -0.0005682758621, -0.0001841379310, +0.0002682758621, +0.0005577586207, + +0.0005524137931, +0.0003051724138, -0.0000368965517, -0.0003367241379, + -0.0005051724138, -0.0005367241379, -0.0004841379310, -0.0004367241379, + -0.0004313793103, -0.0003998275862, -0.0003262068966, -0.0002315517241, + -0.0001156896552, +0.0000263793103, +0.0000841379310, -0.0000525862069, + -0.0003682758621, -0.0006944827586, -0.0008944827586, -0.0009524137931, + -0.0009103448276, -0.0007208620690, -0.0004156896552, -0.0001894827586, + -0.0001841379310, -0.0003577586207, -0.0005472413793, -0.0006577586207, + -0.0006577586207, -0.0005156896552, -0.0002736206897, -0.0000474137931, + +0.0000315517241, -0.0000579310345, -0.0002051724138, -0.0002946551724, + -0.0002787931034, -0.0001684482759, +0.0000105172414, +0.0001525862069, + +0.0001262068966, -0.0000525862069, -0.0002420689655, -0.0003156896552, + -0.0002210344828, +0.0000053448276, +0.0002210344828, +0.0002841379310, + +0.0001156896552, -0.0002315517241, -0.0006103448276, -0.0008365517241, + -0.0008418965517, -0.0006682758621, -0.0003841379310, -0.0001105172414, + -0.0000158620690, -0.0001789655172, -0.0005418965517, -0.0009313793103, + -0.0011206896552, -0.0010312068966, -0.0007839655172, -0.0005682758621, + -0.0004841379310, -0.0005208620690, -0.0005944827586, -0.0006051724138, + -0.0005367241379, -0.0004051724138, -0.0002577586207, -0.0001210344828, + -0.0000210344828, +0.0000053448276, -0.0000420689655, -0.0001367241379, + -0.0001894827586, -0.0001684482759, -0.0000841379310, +0.0000210344828, + +0.0001051724138, +0.0001105172414, +0.0000631034483, +0.0000368965517, + +0.0001000000000, +0.0002893103448, +0.0005472413793, +0.0007577586207, + +0.0008103448276, +0.0006787931034, +0.0004367241379, +0.0001789655172, + -0.0000158620690, -0.0001367241379, -0.0002105172414, -0.0002841379310, + -0.0003893103448, -0.0004736206897, -0.0004841379310, -0.0004156896552, + -0.0003367241379, -0.0002787931034, -0.0002682758621, -0.0002736206897, + -0.0002946551724, -0.0003525862069, -0.0004262068966, -0.0004156896552, + -0.0002736206897, -0.0000579310345, +0.0001579310345, +0.0003841379310, + +0.0005839655172, +0.0006472413793, +0.0005156896552, +0.0002736206897, + +0.0000368965517, -0.0002156896552, -0.0005367241379, -0.0008470689655, + -0.0010260344828, -0.0009629310345, -0.0006367241379, -0.0001105172414, + +0.0004262068966, +0.0007682758621, +0.0008050000000, +0.0006051724138, + +0.0003210344828, +0.0000946551724, -0.0000105172414, +0.0000105172414, + +0.0001579310345, +0.0003631034483, +0.0004998275862, +0.0004946551724, + +0.0003841379310, +0.0002682758621, +0.0002367241379, +0.0002420689655, + +0.0001789655172, -0.0000158620690, -0.0002946551724, -0.0005208620690, + -0.0005313793103, -0.0002367241379, +0.0002420689655, +0.0006734482759, + +0.0009260344828, +0.0009313793103, +0.0007155172414, +0.0003946551724, + +0.0001262068966, +0.0000263793103, +0.0001156896552, +0.0002841379310, + +0.0003893103448, +0.0004156896552, +0.0004472413793, +0.0004946551724, + +0.0005262068966, +0.0005472413793, +0.0005787931034, +0.0005787931034, + +0.0004472413793, +0.0002000000000, +0.0000158620690, +0.0000525862069, + +0.0002946551724, +0.0005577586207, +0.0006839655172, +0.0005839655172, + +0.0002367241379, -0.0002472413793, -0.0006577586207, -0.0007734482759, + -0.0004946551724, +0.0000579310345, +0.0006577586207, +0.0010629310345, + +0.0011732758621, +0.0010470689655, +0.0007787931034, +0.0004631034483, + +0.0002156896552, +0.0001315517241, +0.0002051724138, +0.0003682758621, + +0.0005472413793, +0.0006629310345, +0.0006944827586, +0.0006682758621, + +0.0006208620690, +0.0005051724138, +0.0003000000000, +0.0000789655172, + -0.0000263793103, +0.0000053448276, +0.0001736206897, +0.0003998275862, + +0.0005734482759, +0.0006313793103, +0.0005577586207, +0.0004051724138, + +0.0002736206897, +0.0002472413793, +0.0002893103448, +0.0003156896552, + +0.0002787931034, +0.0001841379310, +0.0001210344828, +0.0001315517241, + +0.0001894827586, +0.0002315517241, +0.0002577586207, +0.0002525862069, + +0.0001789655172, +0.0000315517241, -0.0001105172414, -0.0001525862069, + -0.0000631034483, +0.0000946551724, +0.0002472413793, +0.0002946551724, + +0.0002315517241, +0.0001367241379, +0.0000841379310, +0.0000789655172, + +0.0001000000000, +0.0001262068966, +0.0001051724138, +0.0000315517241, + -0.0000525862069, -0.0000525862069, +0.0000684482759, +0.0003156896552, + +0.0006313793103, +0.0008839655172, +0.0009524137931, +0.0008208620690, + +0.0005629310345, +0.0002682758621, +0.0000263793103, -0.0000631034483, + +0.0000000000000, +0.0001525862069, +0.0002841379310, +0.0003262068966, + +0.0003156896552, +0.0003367241379, +0.0003525862069, +0.0003105172414, + +0.0002420689655, +0.0002051724138, +0.0002210344828, +0.0002577586207, + +0.0003000000000, +0.0003525862069, +0.0004631034483, +0.0006472413793, + +0.0008575862069, +0.0009944827586, +0.0010101724138, +0.0009260344828, + +0.0007629310345, +0.0005262068966, +0.0002472413793, +0.0000000000000, + -0.0001841379310, -0.0002893103448, -0.0003000000000, -0.0002105172414, + -0.0000105172414, +0.0002787931034, +0.0006262068966, +0.0009260344828, + +0.0010524137931, +0.0009470689655, +0.0006682758621, +0.0003051724138, + -0.0000420689655, -0.0002787931034, -0.0003577586207, -0.0003262068966, + -0.0002631034483, -0.0002262068966, -0.0002210344828, -0.0002367241379, + -0.0002525862069, -0.0002420689655, -0.0001579310345, +0.0000000000000, + +0.0001472413793, +0.0001684482759, +0.0000420689655, -0.0001000000000, + -0.0002210344828, -0.0003210344828, -0.0003736206897, -0.0003315517241, + -0.0001684482759, +0.0000736206897, +0.0003210344828, +0.0004841379310, + +0.0005577586207, +0.0005472413793, +0.0004525862069, +0.0002736206897, + +0.0000579310345, -0.0001000000000, -0.0001210344828, -0.0000420689655, + +0.0000525862069, +0.0001579310345, +0.0002577586207, +0.0002631034483, + +0.0001210344828, -0.0001210344828, -0.0003631034483, -0.0005103448276, + -0.0005577586207, -0.0005472413793, -0.0004946551724, -0.0004208620690, + -0.0003051724138, -0.0001684482759, -0.0000210344828, +0.0001105172414, + +0.0001684482759, +0.0000946551724, -0.0000789655172, -0.0002315517241, + -0.0002736206897, -0.0002210344828, -0.0001367241379, -0.0000525862069, + +0.0000474137931, +0.0001472413793, +0.0002000000000, +0.0001736206897, + +0.0000631034483, -0.0001210344828, -0.0003420689655, -0.0004998275862, + -0.0005418965517, -0.0005208620690, -0.0004631034483, -0.0003525862069, + -0.0001736206897, +0.0000420689655, +0.0002105172414, +0.0002210344828, + +0.0000368965517, -0.0002736206897, -0.0005629310345, -0.0007260344828, + -0.0007208620690, -0.0005524137931, -0.0002787931034, +0.0000368965517, + +0.0002946551724, +0.0003893103448, +0.0002787931034, +0.0000420689655, + -0.0002262068966, -0.0004208620690, -0.0004682758621, -0.0004051724138, + -0.0002682758621, -0.0000789655172, +0.0001210344828, +0.0002841379310, + +0.0003893103448, +0.0004577586207, +0.0004418965517, +0.0003210344828, + +0.0001525862069, +0.0000210344828, -0.0000158620690, +0.0000000000000, + +0.0000420689655, +0.0001262068966, +0.0002051724138, +0.0001579310345, + +0.0000000000000, -0.0001631034483, -0.0002315517241, -0.0002156896552, + -0.0001894827586, -0.0001367241379, -0.0000420689655, +0.0000210344828, + -0.0000368965517, -0.0002156896552, -0.0004262068966, -0.0005893103448, + -0.0006577586207, -0.0006262068966, -0.0004998275862, -0.0003262068966, + -0.0001684482759, -0.0000736206897, -0.0000210344828, +0.0000315517241, + +0.0000946551724, +0.0001000000000, +0.0000000000000, -0.0001315517241, + -0.0002472413793, -0.0003210344828, -0.0003682758621, -0.0003577586207, + -0.0002631034483, -0.0001736206897, -0.0001525862069, -0.0001946551724, + -0.0002787931034, -0.0003787931034, -0.0004103448276, -0.0003787931034, + -0.0003315517241, -0.0002841379310, -0.0002841379310, -0.0003682758621, + -0.0004893103448, -0.0005262068966, -0.0003998275862, -0.0001736206897, + +0.0000315517241, +0.0001367241379, +0.0001156896552, -0.0000053448276, + -0.0001789655172, -0.0003736206897, -0.0005524137931, -0.0006577586207, + -0.0006577586207, -0.0005998275862, -0.0005313793103, -0.0004577586207, + -0.0003577586207, -0.0002051724138, -0.0000210344828, +0.0001472413793, + +0.0002736206897, +0.0003000000000, +0.0002315517241, +0.0001105172414, + -0.0000263793103, -0.0001472413793, -0.0002051724138, -0.0001841379310, + -0.0001262068966, -0.0000736206897, -0.0000579310345, -0.0000684482759, + -0.0001051724138, -0.0001789655172, -0.0002787931034, -0.0003577586207, + -0.0003736206897, -0.0003156896552, -0.0001894827586, -0.0000105172414, + +0.0001631034483, +0.0002525862069, +0.0002000000000, +0.0000684482759, + -0.0000368965517, -0.0001000000000, -0.0000946551724, +0.0000210344828, + +0.0002105172414, +0.0003156896552, +0.0002577586207, +0.0000789655172, + -0.0001105172414, -0.0002682758621, -0.0003525862069, -0.0003420689655, + -0.0002525862069, -0.0001684482759, -0.0001789655172, -0.0002946551724, + -0.0004051724138, -0.0004262068966, -0.0003262068966, -0.0001156896552, + +0.0001262068966, +0.0003000000000, +0.0003156896552, +0.0001684482759, + -0.0000579310345, -0.0002631034483, -0.0003105172414, -0.0001525862069, + +0.0000789655172, +0.0002262068966, +0.0002156896552, +0.0001000000000, + -0.0000474137931, -0.0001841379310, -0.0002631034483, -0.0002315517241, + -0.0001051724138, +0.0000210344828, +0.0001000000000, +0.0001156896552, + +0.0000789655172, -0.0000263793103, -0.0001894827586, -0.0003315517241, + -0.0003893103448, -0.0003367241379, -0.0002051724138, -0.0000420689655, + +0.0000579310345, +0.0000579310345, -0.0000105172414, -0.0001156896552, + -0.0002262068966, -0.0003262068966, -0.0003525862069, -0.0002525862069, + -0.0000420689655, +0.0002000000000, +0.0003841379310, +0.0004736206897, + +0.0004156896552, +0.0001525862069, -0.0002210344828, -0.0005472413793, + -0.0007103448276, -0.0007103448276, -0.0005944827586, -0.0003998275862, + -0.0001579310345, +0.0000525862069, +0.0001579310345, +0.0000946551724, + -0.0000841379310, -0.0002841379310, -0.0003841379310, -0.0003420689655, + -0.0001472413793, +0.0001789655172, +0.0005577586207, +0.0008524137931, + +0.0009418965517, +0.0007839655172, +0.0004208620690, -0.0000158620690, + -0.0003525862069, -0.0004577586207, -0.0003577586207, -0.0001472413793, + +0.0000789655172, +0.0002631034483, +0.0003420689655, +0.0003420689655, + +0.0003262068966, +0.0003472413793, +0.0003841379310, +0.0003893103448, + +0.0003156896552, +0.0001841379310, +0.0000946551724, +0.0001156896552, + +0.0002367241379, +0.0004103448276, +0.0005524137931, +0.0005787931034, + +0.0004472413793, +0.0002210344828, +0.0000158620690, -0.0000631034483, + -0.0000053448276, +0.0001525862069, +0.0003210344828, +0.0004103448276, + +0.0003736206897, +0.0002156896552, +0.0000000000000, -0.0002262068966, + -0.0004208620690, -0.0004998275862, -0.0004313793103, -0.0002525862069, + -0.0000210344828, +0.0001946551724, +0.0003315517241, +0.0003315517241, + +0.0001841379310, +0.0000000000000, -0.0001262068966, -0.0001367241379, + -0.0000525862069, +0.0000789655172, +0.0002051724138, +0.0003262068966, + +0.0004103448276, +0.0004367241379, +0.0004262068966, +0.0004156896552, + +0.0003631034483, +0.0002420689655, +0.0000789655172, -0.0000684482759, + -0.0001789655172, -0.0002577586207, -0.0002841379310, -0.0001841379310, + +0.0000105172414, +0.0002051724138, +0.0003262068966, +0.0003577586207, + +0.0003000000000, +0.0001736206897, +0.0000420689655, -0.0000263793103, + -0.0000105172414, +0.0000474137931, +0.0000525862069, -0.0000158620690, + -0.0000894827586, -0.0000894827586, +0.0000000000000, +0.0001579310345, + +0.0002893103448, +0.0002893103448, +0.0001631034483, -0.0000210344828, + -0.0001946551724, -0.0003051724138, -0.0003262068966, -0.0002682758621, + -0.0001841379310, -0.0001315517241, -0.0001367241379, -0.0001789655172, + -0.0002051724138, -0.0002000000000, -0.0001472413793, -0.0000579310345, + +0.0000158620690, +0.0000000000000, -0.0001315517241, -0.0003577586207, + -0.0005944827586, -0.0007524137931, -0.0007893103448, -0.0007103448276, + -0.0005262068966, -0.0002682758621, +0.0000053448276, +0.0002525862069, + +0.0004051724138, +0.0003998275862, +0.0002315517241, -0.0000420689655, + -0.0003472413793, -0.0005944827586, -0.0006944827586, -0.0006051724138, + -0.0003525862069, -0.0000525862069, +0.0002105172414, +0.0003736206897, + +0.0003998275862, +0.0002787931034, +0.0000684482759, -0.0001156896552, + -0.0001841379310, -0.0001051724138, +0.0000684482759, +0.0002367241379, + +0.0002787931034, +0.0001684482759, -0.0000158620690, -0.0001789655172, + -0.0002315517241, -0.0001367241379, +0.0000579310345, +0.0002577586207, + +0.0003472413793, +0.0002841379310, +0.0001105172414, -0.0001051724138, + -0.0003156896552, -0.0004103448276, -0.0003472413793, -0.0001420689655, + +0.0000841379310, +0.0001946551724, +0.0001315517241, -0.0000263793103, + -0.0002420689655, -0.0004577586207, -0.0006103448276, -0.0006524137931, + -0.0005944827586, -0.0004736206897, -0.0003315517241, -0.0002000000000, + -0.0000841379310, +0.0000210344828, +0.0001105172414, +0.0001894827586, + +0.0002472413793, +0.0002577586207, +0.0002262068966, +0.0001946551724, + +0.0002156896552, +0.0002893103448, +0.0003420689655, +0.0003105172414, + +0.0001631034483, -0.0000579310345, -0.0003156896552, -0.0005524137931, + -0.0007260344828, -0.0007470689655, -0.0005682758621, -0.0002577586207, + +0.0000894827586, +0.0004156896552, +0.0006418965517, +0.0007050000000, + +0.0005839655172, +0.0003105172414, -0.0000263793103, -0.0002893103448, + -0.0003472413793, -0.0001841379310, +0.0001210344828, +0.0004313793103, + +0.0006208620690, +0.0006208620690, +0.0004367241379, +0.0001525862069, + -0.0001105172414, -0.0002787931034, -0.0003156896552, -0.0002051724138, + +0.0000000000000, +0.0002000000000, +0.0003367241379, +0.0003893103448, + +0.0003946551724, +0.0003631034483, +0.0003210344828, +0.0002367241379, + +0.0000894827586, -0.0000841379310, -0.0002051724138, -0.0002156896552, + -0.0001367241379, -0.0000158620690, +0.0001105172414, +0.0001841379310, + +0.0001579310345, +0.0000684482759, +0.0000053448276, +0.0000105172414, + +0.0000684482759, +0.0001684482759, +0.0002736206897, +0.0003472413793, + +0.0003525862069, +0.0002893103448, +0.0002000000000, +0.0001367241379, + +0.0001051724138, +0.0000789655172, +0.0000158620690, -0.0001210344828, + -0.0003156896552, -0.0004787931034, -0.0004946551724, -0.0002841379310, + +0.0001105172414, +0.0005418965517, +0.0008470689655, +0.0009155172414, + +0.0007208620690, +0.0003682758621, +0.0000579310345, -0.0000736206897, + -0.0000263793103, +0.0001000000000, +0.0002210344828, +0.0003051724138, + +0.0003420689655, +0.0002946551724, +0.0001841379310, +0.0000525862069, + -0.0000894827586, -0.0002420689655, -0.0003420689655, -0.0002787931034, + -0.0000315517241, +0.0003367241379, +0.0006893103448, +0.0009050000000, + +0.0008944827586, +0.0006787931034, +0.0003472413793, +0.0000158620690, + -0.0002262068966, -0.0003210344828, -0.0002472413793, -0.0000315517241, + +0.0002577586207, +0.0005524137931, +0.0007682758621, +0.0008786206897, + +0.0008944827586, +0.0008524137931, +0.0007682758621, +0.0006682758621, + +0.0005313793103, +0.0003682758621, +0.0001841379310, +0.0000105172414, + -0.0000946551724, -0.0001315517241, -0.0001051724138, +0.0000000000000, + +0.0001841379310, +0.0004051724138, +0.0005682758621, +0.0006103448276, + +0.0004946551724, +0.0002841379310, +0.0000579310345, -0.0000946551724, + -0.0001579310345, -0.0000841379310, +0.0000894827586, +0.0002631034483, + +0.0003315517241, +0.0002946551724, +0.0002210344828, +0.0001367241379, + +0.0000210344828, -0.0001156896552, -0.0002262068966, -0.0002682758621, + -0.0002472413793, -0.0002000000000, -0.0001472413793, -0.0000736206897, + +0.0000105172414, +0.0000946551724, +0.0001315517241, +0.0001156896552, + +0.0000263793103, -0.0001210344828, -0.0002841379310, -0.0003841379310, + -0.0003841379310, -0.0002787931034, -0.0001051724138, +0.0000474137931, + +0.0001210344828, +0.0000946551724, +0.0000000000000, -0.0000579310345, + -0.0000368965517, +0.0000368965517, +0.0001525862069, +0.0002577586207, + +0.0002841379310, +0.0001841379310, +0.0000158620690, -0.0001579310345, + -0.0002787931034, -0.0003420689655, -0.0003210344828, -0.0002000000000, + +0.0000053448276, +0.0002156896552, +0.0003472413793, +0.0003893103448, + +0.0003841379310, +0.0003631034483, +0.0003525862069, +0.0003787931034, + +0.0004525862069, +0.0005472413793, +0.0006103448276, +0.0006103448276, + +0.0005472413793, +0.0004472413793, +0.0003000000000, +0.0001367241379, + -0.0000053448276, -0.0001000000000, -0.0001841379310, -0.0002841379310, + -0.0003946551724, -0.0004736206897, -0.0004631034483, -0.0003525862069, + -0.0001894827586, -0.0000420689655, +0.0000525862069, +0.0001262068966, + +0.0002000000000, +0.0002787931034, +0.0003210344828, +0.0002893103448, + +0.0001684482759, -0.0000105172414, -0.0002156896552, -0.0003631034483, + -0.0004208620690, -0.0003841379310, -0.0002841379310, -0.0001736206897, + -0.0001051724138, -0.0000684482759, -0.0000579310345, -0.0000841379310, + -0.0001789655172, -0.0003420689655, -0.0004998275862, -0.0005734482759, + -0.0005262068966, -0.0003787931034, -0.0001736206897, +0.0000105172414, + +0.0000841379310, -0.0000053448276, -0.0002156896552, -0.0004051724138, + -0.0004787931034, -0.0003946551724, -0.0001894827586, +0.0000315517241, + +0.0001525862069, +0.0001525862069, +0.0000684482759, -0.0000263793103, + -0.0001051724138, -0.0001579310345, -0.0001894827586, -0.0002262068966, + -0.0002631034483, -0.0002525862069, -0.0001631034483, -0.0000474137931, + +0.0000105172414, -0.0000158620690, -0.0001367241379, -0.0003105172414, + -0.0004787931034, -0.0005629310345, -0.0004946551724, -0.0002787931034, + +0.0000263793103, +0.0003420689655, +0.0005893103448, +0.0006682758621, + +0.0005577586207, +0.0003210344828, +0.0000736206897, -0.0001210344828, + -0.0002525862069, -0.0003105172414, -0.0003051724138, -0.0002577586207, + -0.0002051724138, -0.0001684482759, -0.0001367241379, -0.0000946551724, + -0.0000474137931, -0.0000368965517, -0.0000684482759, -0.0001262068966, + -0.0001736206897, -0.0002051724138, -0.0002262068966, -0.0002367241379, + -0.0002051724138, -0.0001210344828, -0.0000210344828, +0.0000368965517, + +0.0000105172414, -0.0001000000000, -0.0002631034483, -0.0004262068966, + -0.0005103448276, -0.0004525862069, -0.0002631034483, -0.0000315517241, + +0.0001210344828, +0.0001631034483, +0.0001210344828, +0.0000420689655, + -0.0000210344828, -0.0000684482759, -0.0001051724138, -0.0001525862069, + -0.0002210344828, -0.0002577586207, -0.0002577586207, -0.0002420689655, + -0.0002210344828, -0.0001946551724, -0.0001789655172, -0.0001894827586, + -0.0002156896552, -0.0002000000000, -0.0001051724138, +0.0000525862069, + +0.0001946551724, +0.0002420689655, +0.0001684482759, +0.0000053448276, + -0.0002000000000, -0.0004156896552, -0.0005629310345, -0.0006262068966, + -0.0005944827586, -0.0004841379310, -0.0003315517241, -0.0001946551724, + -0.0001051724138, -0.0000894827586, -0.0001420689655, -0.0002420689655, + -0.0002841379310, -0.0002156896552, -0.0000631034483, +0.0000736206897, + +0.0001105172414, +0.0000105172414, -0.0001472413793, -0.0002525862069, + -0.0002315517241, -0.0001051724138, +0.0000579310345, +0.0001684482759, + +0.0001472413793, +0.0000000000000, -0.0002367241379, -0.0004418965517, + -0.0004841379310, -0.0003420689655, -0.0000946551724, +0.0001315517241, + +0.0002420689655, +0.0002156896552, +0.0001210344828, +0.0000420689655, + +0.0000315517241, +0.0000736206897, +0.0001315517241, +0.0001472413793, + +0.0000841379310, -0.0000210344828, -0.0001262068966, -0.0001684482759, + -0.0001367241379, -0.0000525862069, +0.0000210344828, +0.0000525862069, + +0.0000315517241, -0.0000105172414, -0.0000368965517, +0.0000000000000, + +0.0000894827586, +0.0001841379310, +0.0002105172414, +0.0001525862069, + +0.0000315517241, -0.0001051724138, -0.0002156896552, -0.0002631034483, + -0.0002367241379, -0.0001579310345, -0.0000736206897, -0.0000368965517, + -0.0000525862069, -0.0000579310345, +0.0000000000000, +0.0000946551724, + +0.0001472413793, +0.0001472413793, +0.0001210344828, +0.0000841379310, + +0.0000315517241, -0.0000210344828, -0.0000894827586, -0.0001684482759, + -0.0002210344828, -0.0002262068966, -0.0001579310345, -0.0000474137931, + +0.0000474137931, +0.0000894827586, +0.0000579310345, +0.0000000000000, + -0.0000368965517, -0.0000315517241, +0.0000000000000, +0.0000474137931, + +0.0001051724138, +0.0001472413793, +0.0001736206897, +0.0001946551724, + +0.0002000000000, +0.0001684482759, +0.0001051724138, +0.0000315517241, + +0.0000000000000, +0.0000368965517, +0.0001156896552, +0.0001736206897, + +0.0001789655172, +0.0001315517241, +0.0000420689655, -0.0000579310345, + -0.0001525862069, -0.0002105172414, -0.0002051724138, -0.0001420689655, + -0.0000368965517, +0.0000789655172, +0.0001946551724, +0.0002631034483, + +0.0002525862069, +0.0001684482759, +0.0000525862069, -0.0000631034483, + -0.0001684482759, -0.0002051724138, -0.0001262068966, +0.0000263793103, + +0.0002051724138, +0.0003210344828, +0.0003156896552, +0.0001631034483, + -0.0000579310345, -0.0002841379310, -0.0004313793103, -0.0004682758621, + -0.0004367241379, -0.0003946551724, -0.0003315517241, -0.0002210344828, + -0.0000946551724, +0.0000000000000, +0.0000315517241, +0.0000525862069, + +0.0000631034483, +0.0000684482759, +0.0000579310345, +0.0000474137931, + +0.0000263793103, -0.0000105172414, -0.0000368965517, -0.0000263793103, + -0.0000053448276, -0.0000105172414, -0.0000684482759, -0.0001156896552, + -0.0001156896552, -0.0000684482759, -0.0000105172414, +0.0000368965517, + +0.0000946551724, +0.0001631034483, +0.0002525862069, +0.0003631034483, + +0.0004631034483, +0.0004946551724, +0.0004262068966, +0.0002682758621, + +0.0000841379310, -0.0000210344828, -0.0000158620690, +0.0000841379310, + +0.0002051724138, +0.0002787931034, +0.0002893103448, +0.0002420689655, + +0.0001262068966, +0.0000000000000, -0.0000736206897, -0.0000315517241, + +0.0001315517241, +0.0003525862069, +0.0005262068966, +0.0005893103448, + +0.0004998275862, +0.0003000000000, +0.0000579310345, -0.0001315517241, + -0.0002315517241, -0.0002420689655, -0.0002210344828, -0.0001894827586, + -0.0001472413793, -0.0001051724138, -0.0000789655172, -0.0000684482759, + -0.0000631034483, -0.0000579310345, -0.0000525862069, -0.0000631034483, + -0.0000789655172, -0.0000474137931, +0.0000525862069, +0.0001841379310, + +0.0002893103448, +0.0003210344828, +0.0002525862069, +0.0001105172414, + -0.0000474137931, -0.0001841379310, -0.0002736206897, -0.0003000000000, + -0.0002367241379, -0.0001000000000, +0.0000684482759, +0.0002000000000, + +0.0002262068966, +0.0001684482759, +0.0000736206897, +0.0000000000000, + -0.0000368965517, -0.0000579310345, -0.0000474137931, +0.0000053448276, + +0.0000946551724, +0.0001841379310, +0.0002682758621, +0.0003000000000, + +0.0002525862069, +0.0001472413793, +0.0000420689655, -0.0000053448276, + -0.0000053448276, +0.0000263793103, +0.0000789655172, +0.0001156896552, + +0.0001051724138, +0.0000263793103, -0.0000474137931, -0.0000736206897, + -0.0000210344828, +0.0000894827586, +0.0002315517241, +0.0003262068966, + +0.0003262068966, +0.0002472413793, +0.0001631034483, +0.0001367241379, + +0.0001367241379, +0.0001367241379, +0.0001315517241, +0.0001105172414, + +0.0000579310345, +0.0000000000000, -0.0000210344828, +0.0000158620690, + +0.0001105172414, +0.0002000000000, +0.0002156896552, +0.0001472413793, + +0.0000158620690, -0.0001000000000, -0.0001420689655, -0.0001000000000, + -0.0000263793103, +0.0000210344828, +0.0000053448276, -0.0000684482759, + -0.0001736206897, -0.0002736206897, -0.0003315517241, -0.0003367241379, + -0.0003156896552, -0.0002631034483, -0.0001684482759, -0.0000474137931, + +0.0000315517241, +0.0000263793103, -0.0000315517241, -0.0001156896552, + -0.0001894827586, -0.0002420689655, -0.0002736206897, -0.0002787931034, + -0.0002420689655, -0.0001631034483, -0.0000579310345, +0.0000315517241, + +0.0000946551724, +0.0001000000000, +0.0000420689655, -0.0000579310345, + -0.0001525862069, -0.0001894827586, -0.0001472413793, -0.0000315517241, + +0.0001000000000, +0.0001894827586, +0.0001789655172, +0.0000894827586, + +0.0000000000000, -0.0000315517241, -0.0000263793103, +0.0000000000000, + +0.0000368965517, +0.0000631034483, +0.0000946551724, +0.0001472413793, + +0.0002315517241, +0.0002893103448, +0.0002841379310, +0.0002367241379, + +0.0001684482759, +0.0000894827586, +0.0000105172414, -0.0000263793103, + -0.0000263793103, -0.0000053448276, +0.0000000000000, +0.0000000000000, + -0.0000158620690, -0.0000210344828, -0.0000105172414, +0.0000158620690, + +0.0000684482759, +0.0001262068966, +0.0001525862069, +0.0001472413793, + +0.0001420689655, +0.0001684482759, +0.0001894827586, +0.0001631034483, + +0.0000946551724, +0.0000000000000, -0.0000894827586, -0.0001472413793, + -0.0001684482759, -0.0001631034483, -0.0001579310345, -0.0001579310345, + -0.0001579310345, -0.0001736206897, -0.0001684482759, -0.0001315517241, + -0.0000474137931, +0.0000684482759, +0.0001736206897, +0.0002210344828, + +0.0002156896552, +0.0001579310345, +0.0000736206897, +0.0000000000000, + -0.0000158620690, +0.0000000000000, +0.0000474137931, +0.0001000000000, + +0.0001367241379, +0.0001472413793, +0.0001525862069, +0.0001736206897, + +0.0002156896552, +0.0002682758621, +0.0003051724138, +0.0002893103448, + +0.0002210344828, +0.0001210344828, +0.0000525862069, +0.0000420689655, + +0.0000894827586, +0.0001579310345, +0.0001894827586, +0.0001420689655, + +0.0000525862069, -0.0000263793103, -0.0000789655172, -0.0000946551724, + -0.0000684482759, -0.0000105172414, +0.0000420689655, +0.0000789655172, + +0.0000789655172, +0.0000368965517, -0.0000053448276, -0.0000158620690, + +0.0000420689655, +0.0001315517241, +0.0001789655172, +0.0001472413793, + +0.0000368965517, -0.0001000000000, -0.0002156896552, -0.0002472413793, + -0.0001789655172, -0.0000631034483, +0.0000158620690, +0.0000105172414, + -0.0000631034483, -0.0001472413793, -0.0001789655172, -0.0001262068966, + +0.0000000000000, +0.0001367241379, +0.0002367241379, +0.0002472413793, + +0.0001631034483, +0.0000263793103, -0.0000841379310, -0.0001525862069, + -0.0001684482759, -0.0001367241379, -0.0000631034483, +0.0000105172414, + +0.0000474137931, +0.0000474137931, +0.0000420689655, +0.0000684482759, + +0.0001000000000, +0.0001000000000, +0.0000631034483, +0.0000158620690, + +0.0000000000000, +0.0000105172414, +0.0000631034483, +0.0001420689655, + +0.0002420689655, +0.0002946551724, +0.0002682758621, +0.0001946551724, + +0.0001105172414, +0.0000420689655, -0.0000053448276, -0.0000158620690, + -0.0000210344828, -0.0000579310345, -0.0001051724138, -0.0001156896552, + -0.0000684482759, +0.0000263793103, +0.0001631034483, +0.0003000000000, + +0.0004103448276, +0.0004682758621, +0.0004472413793, +0.0003631034483, + +0.0002577586207, +0.0001579310345, +0.0000474137931, -0.0000684482759, + -0.0001631034483, -0.0001841379310, -0.0001262068966, -0.0000105172414, + +0.0001262068966, +0.0002472413793, +0.0002946551724, +0.0002472413793, + +0.0001472413793, +0.0000315517241, -0.0000263793103, +0.0000000000000, + +0.0001051724138, +0.0002525862069, +0.0003420689655, +0.0003051724138, + +0.0001789655172, +0.0000684482759, +0.0000368965517, +0.0000894827586, + +0.0001841379310, +0.0002577586207, +0.0002736206897, +0.0002105172414, + +0.0000684482759, -0.0001472413793, -0.0003787931034, -0.0005208620690, + -0.0005208620690, -0.0003787931034, -0.0001367241379, +0.0001210344828, + +0.0003000000000, +0.0003472413793, +0.0002787931034, +0.0001684482759, + +0.0000684482759, -0.0000053448276, -0.0000946551724, -0.0001946551724, + -0.0002893103448, -0.0003472413793, -0.0003525862069, -0.0002946551724, + -0.0001841379310, -0.0000579310345, +0.0000263793103, +0.0000525862069, + +0.0000368965517, +0.0000000000000, -0.0000210344828, -0.0000158620690, + +0.0000210344828, +0.0000946551724, +0.0001472413793, +0.0001579310345, + +0.0001156896552, +0.0000158620690, -0.0000894827586, -0.0001841379310, + -0.0002315517241, -0.0001946551724, -0.0000684482759, +0.0001051724138, + +0.0002682758621, +0.0003577586207, +0.0003525862069, +0.0002577586207, + +0.0001210344828, +0.0000000000000, -0.0000736206897, -0.0001210344828, + -0.0001420689655, -0.0001367241379, -0.0001000000000, -0.0000315517241, + +0.0000420689655, +0.0001051724138, +0.0001262068966, +0.0001000000000, + +0.0000263793103, -0.0000525862069, -0.0001105172414, -0.0001367241379, + -0.0001472413793, -0.0001579310345, -0.0002000000000, -0.0002577586207, + -0.0002893103448, -0.0002631034483, -0.0001789655172, -0.0000631034483, + +0.0000579310345, +0.0001420689655, +0.0001315517241, +0.0000315517241, + -0.0001000000000, -0.0002000000000, -0.0002315517241, -0.0002051724138, + -0.0001525862069, -0.0000894827586, -0.0000579310345, -0.0000946551724, + -0.0001946551724, -0.0003051724138, -0.0003577586207, -0.0003000000000, + -0.0001420689655, +0.0000315517241, +0.0001367241379, +0.0000946551724, + -0.0000736206897, -0.0002682758621, -0.0003736206897, -0.0003472413793, + -0.0002262068966, -0.0000684482759, +0.0000525862069, +0.0001156896552, + +0.0001156896552, +0.0000631034483, +0.0000053448276, -0.0000315517241, + -0.0000579310345, -0.0000684482759, -0.0000579310345, -0.0000263793103, + +0.0000105172414, +0.0000736206897, +0.0001262068966, +0.0001420689655, + +0.0001156896552, +0.0000579310345, -0.0000105172414, -0.0000946551724, + -0.0001631034483, -0.0001894827586, -0.0001684482759, -0.0001000000000, + -0.0000315517241, -0.0000105172414, -0.0000474137931, -0.0001105172414, + -0.0001420689655, -0.0001156896552, -0.0000525862069, +0.0000210344828, + +0.0000789655172, +0.0000789655172, +0.0000105172414, -0.0001051724138, + -0.0002105172414, -0.0002736206897, -0.0003051724138, -0.0003315517241, + -0.0003577586207, -0.0003631034483, -0.0003577586207, -0.0003210344828, + -0.0002682758621, -0.0002000000000, -0.0001472413793, -0.0001105172414, + -0.0001051724138, -0.0001262068966, -0.0001684482759, -0.0002156896552, + -0.0002631034483, -0.0002787931034, -0.0002525862069, -0.0002105172414, + -0.0001841379310, -0.0001789655172, -0.0002051724138, -0.0002262068966, + -0.0002051724138, -0.0001420689655, -0.0000525862069, +0.0000053448276, + +0.0000158620690, -0.0000158620690, -0.0000631034483, -0.0001210344828, + -0.0001946551724, -0.0002577586207, -0.0002736206897, -0.0002367241379, + -0.0001579310345, -0.0000525862069, +0.0000263793103, +0.0000525862069, + -0.0000158620690, -0.0001631034483, -0.0003210344828, -0.0004208620690, + -0.0004472413793, -0.0004051724138, -0.0003156896552, -0.0002210344828, + -0.0001156896552, -0.0000105172414, +0.0000789655172, +0.0001315517241, + +0.0001262068966, +0.0001051724138, +0.0001105172414, +0.0001472413793, + +0.0001841379310, +0.0001789655172, +0.0001051724138, +0.0000000000000, + -0.0001105172414, -0.0001894827586, -0.0002156896552, -0.0001841379310, + -0.0001156896552, -0.0000368965517, +0.0000210344828, +0.0000474137931, + +0.0000315517241, -0.0000210344828, -0.0001000000000, -0.0001789655172, + -0.0002420689655, -0.0002841379310, -0.0003051724138, -0.0002787931034, + -0.0001946551724, -0.0000579310345, +0.0000736206897, +0.0001210344828, + +0.0000684482759, -0.0000210344828, -0.0001000000000, -0.0001315517241, + -0.0001051724138, -0.0000525862069, -0.0000158620690, -0.0000315517241, + -0.0000894827586, -0.0001525862069, -0.0001736206897, -0.0001262068966, + -0.0000263793103, +0.0000946551724, +0.0001894827586, +0.0001946551724, + +0.0001051724138, -0.0000210344828, -0.0001315517241, -0.0001894827586, + -0.0001736206897, -0.0001051724138, -0.0000263793103, +0.0000105172414, + +0.0000158620690, -0.0000105172414, -0.0000736206897, -0.0001579310345, + -0.0002472413793, -0.0003000000000, -0.0003051724138, -0.0002367241379, + -0.0001315517241, -0.0000210344828, +0.0000368965517, +0.0000525862069, + +0.0000315517241, +0.0000158620690, +0.0000210344828, +0.0000684482759, + +0.0001315517241, +0.0002000000000, +0.0002156896552, +0.0001579310345, + +0.0000631034483, +0.0000000000000, -0.0000263793103, -0.0000263793103, + -0.0000053448276, +0.0000474137931, +0.0001156896552, +0.0001631034483, + +0.0001736206897, +0.0001420689655, +0.0000894827586, +0.0000315517241, + +0.0000053448276, +0.0000474137931, +0.0001525862069, +0.0002946551724, + +0.0003998275862, +0.0004313793103, +0.0003420689655, +0.0001736206897, + -0.0000053448276, -0.0001315517241, -0.0001736206897, -0.0001472413793, + -0.0000684482759, +0.0000210344828, +0.0000841379310, +0.0000736206897, + +0.0000210344828, -0.0000210344828, -0.0000368965517, -0.0000105172414, + +0.0000525862069, +0.0001420689655, +0.0002156896552, +0.0002525862069, + +0.0002472413793, +0.0002210344828, +0.0002051724138, +0.0001946551724, + +0.0001684482759, +0.0001156896552, +0.0000420689655, -0.0000210344828, + -0.0000579310345, -0.0000631034483, -0.0000263793103, +0.0000474137931, + +0.0001262068966, +0.0001789655172, +0.0001946551724, +0.0001841379310, + +0.0001894827586, +0.0002262068966, +0.0002893103448, +0.0003315517241, + +0.0003525862069, +0.0003472413793, +0.0003210344828, +0.0002787931034, + +0.0002210344828, +0.0001789655172, +0.0001472413793, +0.0001315517241, + +0.0001105172414, +0.0000841379310, +0.0000368965517, -0.0000158620690, + -0.0000631034483, -0.0000474137931, +0.0000420689655, +0.0001841379310, + +0.0003105172414, +0.0003525862069, +0.0003051724138, +0.0001894827586, + +0.0000736206897, +0.0000000000000, +0.0000000000000, +0.0000631034483, + +0.0001579310345, +0.0002262068966, +0.0002420689655, +0.0002105172414, + +0.0001684482759, +0.0001262068966, +0.0001051724138, +0.0001105172414, + +0.0001262068966, +0.0001472413793, +0.0001525862069, +0.0001156896552, + +0.0000684482759, +0.0000368965517, +0.0000525862069, +0.0001156896552, + +0.0002000000000, +0.0002682758621, +0.0003105172414, +0.0003210344828, + +0.0002946551724, +0.0002472413793, +0.0002000000000, +0.0001789655172, + +0.0001631034483, +0.0001367241379, +0.0000841379310, +0.0000210344828, + -0.0000053448276, +0.0000053448276, +0.0000684482759, +0.0001579310345, + +0.0002525862069, +0.0003156896552, +0.0003315517241, +0.0003051724138, + +0.0002315517241, +0.0001420689655, +0.0000420689655, -0.0000474137931, + -0.0001210344828, -0.0001579310345, -0.0001367241379, -0.0000684482759, + +0.0000263793103, +0.0001315517241, +0.0002105172414, +0.0002315517241, + +0.0001789655172, +0.0000841379310, +0.0000000000000, -0.0000684482759, + -0.0000946551724, -0.0000684482759, -0.0000105172414, +0.0000210344828, + +0.0000158620690, -0.0000158620690, -0.0000579310345, -0.0000736206897, + -0.0000525862069, +0.0000105172414, +0.0001105172414, +0.0002156896552, + +0.0002841379310, +0.0002787931034, +0.0002000000000, +0.0000789655172, + -0.0000368965517, -0.0001210344828, -0.0001736206897, -0.0002210344828, + -0.0002420689655, -0.0002156896552, -0.0001472413793, -0.0000579310345, + +0.0000263793103, +0.0000946551724, +0.0001210344828, +0.0001105172414, + +0.0000789655172, +0.0000474137931, +0.0000315517241, +0.0000315517241, + +0.0000263793103, +0.0000053448276, -0.0000474137931, -0.0001262068966, + -0.0001946551724, -0.0002156896552, -0.0001789655172, -0.0000894827586, + +0.0000105172414, +0.0000894827586, +0.0001105172414, +0.0000736206897, + +0.0000210344828, -0.0000105172414, -0.0000105172414, +0.0000210344828, + +0.0000631034483, +0.0000894827586, +0.0000736206897, +0.0000053448276, + -0.0000894827586, -0.0001472413793, -0.0001315517241, -0.0000525862069, + +0.0000474137931, +0.0001367241379, +0.0001894827586, +0.0001841379310, + +0.0001051724138, -0.0000210344828, -0.0001315517241, -0.0001841379310, + -0.0001736206897, -0.0001315517241, -0.0000736206897, -0.0000158620690, + +0.0000263793103, +0.0000631034483, +0.0001000000000, +0.0001420689655, + +0.0001736206897, +0.0001579310345, +0.0000894827586, -0.0000263793103, + -0.0001525862069, -0.0002472413793, -0.0002682758621, -0.0002156896552, + -0.0001315517241, -0.0000368965517, +0.0000263793103, +0.0000684482759, + +0.0000841379310, +0.0001000000000, +0.0001210344828, +0.0001684482759, + +0.0002051724138, +0.0002156896552, +0.0001841379310, +0.0001105172414, + +0.0000105172414, -0.0000684482759, -0.0001156896552, -0.0001051724138, + -0.0000368965517, +0.0000525862069, +0.0001579310345, +0.0002420689655, + +0.0002631034483, +0.0002105172414, +0.0000946551724, -0.0000525862069, + -0.0001789655172, -0.0002367241379, -0.0001894827586, -0.0000736206897, + +0.0000474137931, +0.0001000000000, +0.0000736206897, -0.0000053448276, + -0.0000946551724, -0.0001684482759, -0.0001946551724, -0.0001736206897, + -0.0001315517241, -0.0000841379310, -0.0000315517241, +0.0000210344828, + +0.0000631034483, +0.0000736206897, +0.0000420689655, -0.0000105172414, + -0.0000579310345, -0.0000946551724, -0.0001315517241, -0.0001841379310, + -0.0002262068966, -0.0002420689655, -0.0002210344828, -0.0001684482759, + -0.0000841379310, +0.0000158620690, +0.0001262068966, +0.0001894827586, + +0.0001736206897, +0.0001000000000, +0.0000105172414, -0.0000368965517, + -0.0000579310345, -0.0000525862069, -0.0000263793103, -0.0000105172414, + -0.0000105172414, -0.0000315517241, -0.0000631034483, -0.0000894827586, + -0.0000946551724, -0.0000684482759, -0.0000158620690, +0.0000210344828, + +0.0000210344828, -0.0000263793103, -0.0000894827586, -0.0001156896552, + -0.0001051724138, -0.0000684482759, -0.0000158620690, +0.0000368965517, + +0.0000789655172, +0.0000841379310, +0.0000631034483, +0.0000210344828, + -0.0000210344828, -0.0000684482759, -0.0001051724138, -0.0001210344828, + -0.0001156896552, -0.0001105172414, -0.0001051724138, -0.0001000000000, + -0.0000894827586, -0.0000684482759, -0.0000474137931, -0.0000263793103, + +0.0000000000000, +0.0000263793103, +0.0000841379310, +0.0001472413793, + +0.0001789655172, +0.0001684482759, +0.0001210344828, +0.0000684482759, + +0.0000210344828, -0.0000158620690, -0.0000579310345, -0.0001262068966, + -0.0002051724138, -0.0002631034483, -0.0002472413793, -0.0001420689655, + +0.0000263793103, +0.0002000000000, +0.0003156896552, +0.0003367241379, + +0.0002472413793, +0.0000946551724, -0.0000631034483, -0.0001684482759, + -0.0001841379310, -0.0001262068966, -0.0000368965517, +0.0000474137931, + +0.0001105172414, +0.0001315517241, +0.0001105172414, +0.0000474137931, + -0.0000315517241, -0.0001051724138, -0.0001420689655, -0.0001210344828, + -0.0000579310345, +0.0000105172414, +0.0000579310345, +0.0000736206897, + +0.0000631034483, +0.0000420689655, +0.0000315517241, +0.0000525862069, + +0.0000946551724, +0.0001367241379, +0.0001315517241, +0.0000789655172, + +0.0000053448276, -0.0000579310345, -0.0000841379310, -0.0000684482759, + -0.0000158620690, +0.0000420689655, +0.0000841379310, +0.0001000000000, + +0.0000946551724, +0.0000684482759, +0.0000315517241, +0.0000053448276, + -0.0000105172414, -0.0000315517241, -0.0000474137931, -0.0000631034483, + -0.0000579310345, -0.0000210344828, +0.0000263793103, +0.0000736206897, + +0.0000789655172, +0.0000631034483, +0.0000053448276, -0.0000736206897, + -0.0001579310345, -0.0002000000000, -0.0001736206897, -0.0001210344828, + -0.0000684482759, -0.0000210344828, +0.0000420689655, +0.0001156896552, + +0.0001684482759, +0.0001736206897, +0.0001156896552, +0.0000210344828, + -0.0000841379310, -0.0001736206897, -0.0002210344828, -0.0002262068966, + -0.0002105172414, -0.0001789655172, -0.0001472413793, -0.0001156896552, + -0.0000946551724, -0.0000789655172, -0.0000684482759, -0.0000525862069, + -0.0000263793103, +0.0000105172414, +0.0000631034483, +0.0001105172414, + +0.0001420689655, +0.0001579310345, +0.0001420689655, +0.0000841379310, + -0.0000053448276, -0.0001051724138, -0.0001841379310, -0.0002156896552, + -0.0001894827586, -0.0001210344828, -0.0000368965517, +0.0000263793103, + +0.0000525862069, +0.0000315517241, -0.0000315517241, -0.0001156896552, + -0.0001789655172, -0.0001841379310, -0.0001315517241, -0.0000579310345, + +0.0000105172414, +0.0000579310345, +0.0000894827586, +0.0001000000000, + +0.0001000000000, +0.0000841379310, +0.0000684482759, +0.0000368965517, + -0.0000158620690, -0.0000894827586, -0.0001525862069, -0.0001631034483, + -0.0001051724138, +0.0000000000000, +0.0001051724138, +0.0001631034483, + +0.0001420689655, +0.0000474137931, -0.0000684482759, -0.0001525862069, + -0.0001631034483, -0.0001051724138, -0.0000315517241, +0.0000000000000, + -0.0000158620690, -0.0000894827586, -0.0001894827586, -0.0002682758621, + -0.0003051724138, -0.0002893103448, -0.0002262068966, -0.0001472413793, + -0.0000579310345, +0.0000263793103, +0.0000789655172, +0.0000789655172, + +0.0000420689655, -0.0000105172414, -0.0000684482759, -0.0001262068966, + -0.0001736206897, -0.0001946551724, -0.0001736206897, -0.0001156896552, + -0.0000525862069, -0.0000053448276, +0.0000000000000, -0.0000053448276, + -0.0000420689655, -0.0000894827586, -0.0001472413793, -0.0001946551724, + -0.0002000000000, -0.0001472413793, -0.0000525862069, +0.0000315517241, + +0.0000894827586, +0.0000946551724, +0.0000525862069, +0.0000000000000, + -0.0000263793103, -0.0000263793103, -0.0000158620690, -0.0000053448276, + -0.0000158620690, -0.0000158620690, +0.0000000000000, +0.0000263793103, + +0.0000474137931, +0.0000684482759, +0.0000789655172, +0.0000684482759, + +0.0000105172414, -0.0000841379310, -0.0001841379310, -0.0002472413793, + -0.0002420689655, -0.0001841379310, -0.0001105172414, -0.0000525862069, + -0.0000420689655, -0.0000684482759, -0.0001000000000, -0.0001156896552, + -0.0001051724138, -0.0000579310345, +0.0000158620690, +0.0000946551724, + +0.0001210344828, +0.0000736206897, -0.0000368965517, -0.0001736206897, + -0.0002577586207, -0.0002682758621, -0.0002210344828, -0.0001525862069, + -0.0000946551724, -0.0000525862069, -0.0000368965517, -0.0000368965517, + -0.0000579310345, -0.0000684482759, -0.0000579310345, -0.0000210344828, + +0.0000210344828, +0.0000631034483, +0.0000736206897, +0.0000525862069, + +0.0000105172414, -0.0000368965517, -0.0000789655172, -0.0001105172414, + -0.0001156896552, -0.0000841379310, -0.0000315517241, +0.0000263793103, + +0.0000684482759, +0.0000684482759, +0.0000105172414, -0.0000579310345, + -0.0001156896552, -0.0001210344828, -0.0000946551724, -0.0000525862069, + +0.0000000000000, +0.0000684482759, +0.0001156896552, +0.0001000000000, + +0.0000210344828, -0.0000841379310, -0.0001631034483, -0.0001841379310, + -0.0001472413793, -0.0000579310345, +0.0000368965517, +0.0001105172414, + +0.0001315517241, +0.0000789655172, -0.0000105172414, -0.0001262068966, + -0.0002210344828, -0.0002577586207, -0.0002000000000, -0.0000736206897, + +0.0000736206897, +0.0001841379310, +0.0002210344828, +0.0001684482759, + +0.0000525862069, -0.0000684482759, -0.0001789655172, -0.0002315517241, + -0.0002367241379, -0.0002105172414, -0.0001684482759, -0.0001315517241, + -0.0000894827586, -0.0000525862069, -0.0000105172414, +0.0000315517241, + +0.0000736206897, +0.0000894827586, +0.0000631034483, +0.0000053448276, + -0.0000474137931, -0.0000631034483, -0.0000263793103, +0.0000420689655, + +0.0001210344828, +0.0001789655172, +0.0001894827586, +0.0001420689655, + +0.0000525862069, -0.0000420689655, -0.0001156896552, -0.0001367241379, + -0.0000894827586, +0.0000000000000, +0.0000946551724, +0.0001525862069, + +0.0001684482759, +0.0001367241379, +0.0000736206897, -0.0000053448276, + -0.0000789655172, -0.0001156896552, -0.0000789655172, +0.0000158620690, + +0.0001367241379, +0.0002156896552, +0.0002262068966, +0.0001525862069, + +0.0000368965517, -0.0000579310345, -0.0001000000000, -0.0000736206897, + +0.0000000000000, +0.0000841379310, +0.0001315517241, +0.0001315517241, + +0.0000894827586, +0.0000368965517, -0.0000053448276, -0.0000053448276, + +0.0000420689655, +0.0001262068966, +0.0001841379310, +0.0001736206897, + +0.0000946551724, -0.0000158620690, -0.0001051724138, -0.0001315517241, + -0.0000894827586, -0.0000158620690, +0.0000684482759, +0.0001420689655, + +0.0001736206897, +0.0001789655172, +0.0001525862069, +0.0001156896552, + +0.0000736206897, +0.0000368965517, +0.0000158620690, +0.0000315517241, + +0.0000789655172, +0.0001262068966, +0.0001420689655, +0.0001262068966, + +0.0000789655172, +0.0000210344828, -0.0000263793103, -0.0000420689655, + -0.0000368965517, -0.0000263793103, -0.0000420689655, -0.0000684482759, + -0.0000631034483, -0.0000158620690, +0.0000736206897, +0.0001684482759, + +0.0002315517241, +0.0002315517241, +0.0001894827586, +0.0001210344828, + +0.0000631034483, +0.0000315517241, +0.0000474137931, +0.0001000000000, + +0.0001579310345, +0.0001894827586, +0.0001736206897, +0.0001367241379, + +0.0000841379310, +0.0000368965517, +0.0000000000000, -0.0000053448276, + +0.0000158620690, +0.0000474137931, +0.0000684482759, +0.0000631034483, + +0.0000315517241, +0.0000053448276, +0.0000053448276, +0.0000474137931, + +0.0001210344828, +0.0002000000000, +0.0002631034483, +0.0003000000000, + +0.0003210344828, +0.0003367241379, +0.0003367241379, +0.0003262068966, + +0.0003051724138, +0.0002577586207, +0.0002105172414, +0.0001684482759, + +0.0001525862069, +0.0001684482759, +0.0002051724138, +0.0002315517241, + +0.0002000000000, +0.0001262068966, +0.0000420689655, -0.0000158620690, + -0.0000263793103, +0.0000105172414, +0.0000841379310, +0.0001579310345, + +0.0002105172414, +0.0002210344828, +0.0001946551724, +0.0001525862069, + +0.0001105172414, +0.0000894827586, +0.0000894827586, +0.0001156896552, + +0.0001525862069, +0.0001894827586, +0.0002105172414, +0.0002051724138, + +0.0001684482759, +0.0000946551724, +0.0000000000000, -0.0001105172414, + -0.0001736206897, -0.0001736206897, -0.0000841379310, +0.0000631034483, + +0.0002210344828, +0.0003156896552, +0.0003210344828, +0.0002367241379, + +0.0001156896552, +0.0000053448276, -0.0000525862069, -0.0000579310345, + -0.0000263793103, +0.0000105172414, +0.0000315517241, +0.0000315517241, + +0.0000105172414, -0.0000053448276, -0.0000210344828, -0.0000105172414, + +0.0000053448276, +0.0000368965517, +0.0000579310345, +0.0000684482759, + +0.0000736206897, +0.0000841379310, +0.0001000000000, +0.0001156896552, + +0.0001156896552, +0.0000946551724, +0.0000579310345, +0.0000210344828, + +0.0000000000000, -0.0000105172414, -0.0000053448276, +0.0000053448276, + +0.0000210344828, +0.0000368965517, +0.0000368965517, +0.0000315517241, + +0.0000420689655, +0.0000736206897, +0.0001105172414, +0.0001472413793, + +0.0001736206897, +0.0001894827586, +0.0001946551724, +0.0002000000000, + +0.0001946551724, +0.0001789655172, +0.0001579310345, +0.0001262068966, + +0.0000946551724, +0.0000631034483, +0.0000315517241, +0.0000000000000, + -0.0000105172414, +0.0000000000000, +0.0000368965517, +0.0000894827586, + +0.0001472413793, +0.0001789655172, +0.0001841379310, +0.0001631034483, + +0.0001315517241, +0.0000946551724, +0.0000474137931, +0.0000000000000, + -0.0000525862069, -0.0000841379310, -0.0000894827586, -0.0000684482759, + -0.0000263793103, +0.0000210344828, +0.0000736206897, +0.0001156896552, + +0.0001315517241, +0.0001156896552, +0.0000684482759, +0.0000210344828, + +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, + +0.0000000000000, +0.0000158620690, +0.0000105172414, -0.0000158620690, + -0.0000684482759, -0.0001105172414, -0.0001315517241, -0.0001105172414, + -0.0000579310345, +0.0000053448276, +0.0000579310345, +0.0000789655172, + +0.0000736206897, +0.0000525862069, +0.0000263793103, +0.0000000000000, + -0.0000263793103, -0.0000315517241, -0.0000053448276, +0.0000263793103, + +0.0000474137931, +0.0000368965517, +0.0000000000000, -0.0000525862069, + -0.0000894827586, -0.0001051724138, -0.0000841379310, -0.0000368965517, + +0.0000315517241, +0.0001051724138, +0.0001684482759, +0.0002051724138, + +0.0002156896552, +0.0002051724138, +0.0001684482759, +0.0001051724138, + +0.0000210344828, -0.0000579310345, -0.0001105172414, -0.0001105172414, + -0.0000736206897, -0.0000210344828, +0.0000158620690, +0.0000158620690, + -0.0000053448276, -0.0000368965517, -0.0000525862069, -0.0000631034483, + -0.0000684482759, -0.0000684482759, -0.0000631034483, -0.0000579310345, + -0.0000579310345, -0.0000474137931, -0.0000420689655, -0.0000315517241, + -0.0000315517241, -0.0000368965517, -0.0000579310345, -0.0000946551724, + -0.0001420689655, -0.0001841379310, -0.0001946551724, -0.0001684482759, + -0.0001051724138, -0.0000315517241, +0.0000210344828, +0.0000420689655, + +0.0000263793103, -0.0000053448276, -0.0000420689655, -0.0000474137931, + -0.0000210344828, +0.0000263793103, +0.0000789655172, +0.0000841379310, + +0.0000315517241, -0.0000631034483, -0.0001631034483, -0.0002262068966, + -0.0002367241379, -0.0002051724138, -0.0001472413793, -0.0000684482759, + -0.0000053448276, +0.0000315517241, +0.0000315517241, +0.0000000000000, + -0.0000368965517, -0.0000631034483, -0.0000631034483, -0.0000474137931, + -0.0000263793103, -0.0000053448276, +0.0000000000000, -0.0000105172414, + -0.0000474137931, -0.0000946551724, -0.0001367241379, -0.0001631034483, + -0.0001684482759, -0.0001525862069, -0.0001210344828, -0.0000841379310, + -0.0000420689655, +0.0000000000000, +0.0000315517241, +0.0000579310345, + +0.0000631034483, +0.0000368965517, -0.0000053448276, -0.0000736206897, + -0.0001367241379, -0.0001841379310, -0.0002105172414, -0.0002105172414, + -0.0002105172414, -0.0002105172414, -0.0002262068966, -0.0002367241379, + -0.0002367241379, -0.0002156896552, -0.0001736206897, -0.0001262068966, + -0.0000894827586, -0.0000736206897, -0.0000684482759, -0.0000684482759, + -0.0000684482759, -0.0000789655172, -0.0001051724138, -0.0001420689655, + -0.0001736206897, -0.0001736206897, -0.0001472413793, -0.0001156896552, + -0.0001105172414, -0.0001262068966, -0.0001579310345, -0.0001789655172, + -0.0001684482759, -0.0001156896552, -0.0000368965517, +0.0000263793103, + +0.0000631034483, +0.0000368965517, -0.0000263793103, -0.0000946551724, + -0.0001472413793, -0.0001789655172, -0.0002051724138, -0.0002262068966, + -0.0002315517241, -0.0002156896552, -0.0001894827586, -0.0001525862069, + -0.0001105172414, -0.0000789655172, -0.0000631034483, -0.0000684482759, + -0.0000946551724, -0.0001262068966, -0.0001367241379, -0.0001156896552, + -0.0000631034483, +0.0000053448276, +0.0000579310345, +0.0000736206897, + +0.0000210344828, -0.0000579310345, -0.0001525862069, -0.0002156896552, + -0.0002315517241, -0.0001946551724, -0.0001262068966, -0.0000631034483, + -0.0000315517241, -0.0000368965517, -0.0000631034483, -0.0001051724138, + -0.0001262068966, -0.0001156896552, -0.0000736206897, -0.0000105172414, + +0.0000525862069, +0.0000946551724, +0.0000894827586, +0.0000420689655, + -0.0000263793103, -0.0000894827586, -0.0001262068966, -0.0001262068966, + -0.0001000000000, -0.0000789655172, -0.0000684482759, -0.0000841379310, + -0.0001105172414, -0.0001210344828, -0.0001156896552, -0.0001105172414, + -0.0001156896552, -0.0001367241379, -0.0001579310345, -0.0001631034483, + -0.0001420689655, -0.0000894827586, -0.0000263793103, +0.0000315517241, + +0.0000579310345, +0.0000263793103, -0.0000420689655, -0.0001210344828, + -0.0001789655172, -0.0002000000000, -0.0001736206897, -0.0001051724138, + -0.0000158620690, +0.0000525862069, +0.0001000000000, +0.0000946551724, + +0.0000525862069, -0.0000105172414, -0.0000789655172, -0.0001105172414, + -0.0000946551724, -0.0000474137931, +0.0000210344828, +0.0001000000000, + +0.0001579310345, +0.0001841379310, +0.0001789655172, +0.0001420689655, + +0.0000841379310, +0.0000420689655, +0.0000053448276, -0.0000158620690, + -0.0000315517241, -0.0000420689655, -0.0000315517241, -0.0000158620690, + +0.0000000000000, +0.0000315517241, +0.0000579310345, +0.0000894827586, + +0.0001051724138, +0.0001105172414, +0.0001051724138, +0.0000841379310, + +0.0000420689655, +0.0000000000000, -0.0000105172414, -0.0000105172414, + +0.0000000000000, +0.0000053448276, +0.0000210344828, +0.0000315517241, + +0.0000263793103, +0.0000053448276, -0.0000053448276, -0.0000263793103, + -0.0000368965517, -0.0000368965517, -0.0000210344828, -0.0000053448276, + +0.0000000000000, +0.0000000000000, +0.0000000000000 +}; diff --git a/plugins/LadspaEffect/swh/impulses/18-marshall-plexi-sm57.h b/plugins/LadspaEffect/swh/impulses/18-marshall-plexi-sm57.h new file mode 100644 index 000000000..26ee27170 --- /dev/null +++ b/plugins/LadspaEffect/swh/impulses/18-marshall-plexi-sm57.h @@ -0,0 +1,1386 @@ +float marshall_plexi_sm57[] = { + +0.0000000000000, +0.0000000000000, -0.0000201754386, -0.0000401315789, + -0.0000469298246, -0.0000401315789, -0.0000067982456, +0.0000133771930, + +0.0000335526316, +0.0000401315789, +0.0000201754386, +0.0000000000000, + -0.0000469298246, -0.0001004385965, -0.0001605263158, -0.0002208333333, + -0.0002677631579, -0.0002945175439, -0.0002677631579, -0.0001940789474, + -0.0000736842105, +0.0000535087719, +0.0001739035088, +0.0002276315789, + +0.0001872807018, +0.0000469298246, -0.0001539473684, -0.0003614035088, + -0.0004951754386, -0.0004951754386, -0.0003412280702, -0.0001070175439, + +0.0001271929825, +0.0002743421053, +0.0002743421053, +0.0001405701754, + -0.0000469298246, -0.0002074561404, -0.0002677631579, -0.0002008771930, + -0.0000668859649, +0.0000535087719, +0.0001004385965, +0.0000401315789, + -0.0000936403509, -0.0002410087719, -0.0003144736842, -0.0002877192982, + -0.0001539473684, +0.0000267543860, +0.0001940789474, +0.0003010964912, + +0.0003144736842, +0.0002475877193, +0.0001405701754, +0.0000067982456, + -0.0000936403509, -0.0001739035088, -0.0002008771930, -0.0001673245614, + -0.0000802631579, +0.0000335526316, +0.0001673245614, +0.0002677631579, + +0.0003010964912, +0.0002609649123, +0.0001539473684, +0.0000267543860, + -0.0000668859649, -0.0001138157895, -0.0000736842105, +0.0000067982456, + +0.0001138157895, +0.0002074561404, +0.0002475877193, +0.0002410087719, + +0.0001940789474, +0.0001271929825, +0.0000802631579, +0.0000668859649, + +0.0001004385965, +0.0001673245614, +0.0002543859649, +0.0003212719298, + +0.0003346491228, +0.0002811403509, +0.0001807017544, +0.0000535087719, + -0.0000469298246, -0.0000936403509, -0.0000936403509, -0.0000469298246, + +0.0000000000000, +0.0000267543860, +0.0000469298246, +0.0000802631579, + +0.0001739035088, +0.0003278508772, +0.0005287280702, +0.0006960526316, + +0.0007361842105, +0.0005890350877, +0.0002677631579, -0.0001405701754, + -0.0005019736842, -0.0006892543860, -0.0006157894737, -0.0003278508772, + +0.0000535087719, +0.0003815789474, +0.0005421052632, +0.0004951754386, + +0.0003078947368, +0.0001004385965, -0.0000067982456, +0.0000000000000, + +0.0001070175439, +0.0002208333333, +0.0002543859649, +0.0001673245614, + +0.0000067982456, -0.0001471491228, -0.0002410087719, -0.0002276315789, + -0.0001673245614, -0.0001070175439, -0.0001004385965, -0.0001471491228, + -0.0001807017544, -0.0001337719298, +0.0000267543860, +0.0002609649123, + +0.0004618421053, +0.0005085526316, +0.0003480263158, +0.0000000000000, + -0.0003815789474, -0.0006491228070, -0.0006892543860, -0.0004752192982, + -0.0001271929825, +0.0001940789474, +0.0003480263158, +0.0002743421053, + +0.0000201754386, -0.0002811403509, -0.0004951754386, -0.0005421052632, + -0.0004149122807, -0.0002008771930, +0.0000133771930, +0.0001539473684, + +0.0002008771930, +0.0001673245614, +0.0000936403509, +0.0000000000000, + -0.0000936403509, -0.0002008771930, -0.0002945175439, -0.0003614035088, + -0.0003614035088, -0.0002811403509, -0.0001271929825, +0.0000335526316, + +0.0001471491228, +0.0001605263158, +0.0000535087719, -0.0001203947368, + -0.0003078947368, -0.0004282894737, -0.0004416666667, -0.0003412280702, + -0.0001673245614, +0.0000201754386, +0.0001739035088, +0.0002609649123, + +0.0002743421053, +0.0002142543860, +0.0001203947368, +0.0000067982456, + -0.0000802631579, -0.0001203947368, -0.0001138157895, -0.0000603070175, + +0.0000067982456, +0.0000668859649, +0.0000870614035, +0.0000401315789, + -0.0000469298246, -0.0001739035088, -0.0002945175439, -0.0003679824561, + -0.0003614035088, -0.0002609649123, -0.0000668859649, +0.0001807017544, + +0.0004550438596, +0.0006692982456, +0.0007831140351, +0.0007495614035, + +0.0005890350877, +0.0003480263158, +0.0001004385965, -0.0000870614035, + -0.0001872807018, -0.0002008771930, -0.0001739035088, -0.0001405701754, + -0.0001337719298, -0.0001271929825, -0.0001138157895, -0.0000535087719, + +0.0000401315789, +0.0001539473684, +0.0002475877193, +0.0003010964912, + +0.0003212719298, +0.0003278508772, +0.0003747807018, +0.0004550438596, + +0.0005554824561, +0.0006157894737, +0.0005822368421, +0.0004416666667, + +0.0002142543860, -0.0000335526316, -0.0002410087719, -0.0003614035088, + -0.0004015350877, -0.0003815789474, -0.0003346491228, -0.0002811403509, + -0.0001872807018, -0.0000469298246, +0.0001405701754, +0.0003614035088, + +0.0005421052632, +0.0006291666667, +0.0005822368421, +0.0004550438596, + +0.0003010964912, +0.0001940789474, +0.0001605263158, +0.0001539473684, + +0.0000936403509, -0.0000802631579, -0.0003815789474, -0.0007361842105, + -0.0009837719298, -0.0009971491228, -0.0007293859649, -0.0002410087719, + +0.0002877192982, +0.0006960526316, +0.0008298245614, +0.0007160087719, + +0.0004350877193, +0.0001605263158, +0.0000000000000, -0.0000668859649, + -0.0001203947368, -0.0003010964912, -0.0006692982456, -0.0011578947368, + -0.0015861842105, -0.0017131578947, -0.0013787280702, -0.0006089912281, + +0.0003815789474, +0.0013050438596, +0.0018403508772, +0.0018403508772, + +0.0013317982456, +0.0005085526316, -0.0003747807018, -0.0011243421053, + -0.0016396929825, -0.0019208333333, -0.0019877192982, -0.0018671052632, + -0.0015392543860, -0.0009905701754, -0.0002677631579, +0.0004752192982, + +0.0010708333333, +0.0013519736842, +0.0012649122807, +0.0009368421053, + +0.0005421052632, +0.0002609649123, +0.0001271929825, +0.0000335526316, + -0.0002074561404, -0.0007561403509, -0.0015594298246, -0.0023690789474, + -0.0028309210526, -0.0026234649123, -0.0016664473684, -0.0001807017544, + +0.0013921052632, +0.0025432017544, +0.0029447368421, +0.0025096491228, + +0.0014723684211, +0.0002008771930, -0.0008366228070, -0.0014054824561, + -0.0013451754386, -0.0008366228070, -0.0000335526316, +0.0006491228070, + +0.0009638157895, +0.0009771929825, -0.0002208333333, -0.0003747807018, + -0.0018203947368, -0.0026234649123, -0.0020278508772, -0.0007427631579, + +0.0005620614035, +0.0019074561404, +0.0027774122807, +0.0033061403509, + +0.0032660087719, +0.0029513157895, +0.0025631578947, +0.0018804824561, + +0.0012515350877, +0.0000401315789, -0.0012114035088, -0.0025765350877, + -0.0033596491228, -0.0033260964912, -0.0022085526316, -0.0005085526316, + +0.0012714912281, +0.0023824561404, +0.0026234649123, +0.0020478070175, + +0.0013116228070, +0.0009234649123, +0.0012848684211, +0.0022017543860, + +0.0032993421053, +0.0040289473684, +0.0041962719298, +0.0037811403509, + +0.0030383771930, +0.0020210526316, +0.0007697368421, -0.0008901315789, + -0.0027171052632, -0.0043567982456, -0.0048721491228, -0.0037276315789, + -0.0013787280702, +0.0010907894737, +0.0026567982456, +0.0004618421053, + -0.0032725877193, -0.0044706140351, -0.0067861842105, -0.0001271929825, + +0.0271712719298, +0.0275728070175, -0.0296006578947, -0.0846192982456, + -0.0746208333333, -0.0039885964912, +0.0946513157895, +0.1792372807018, + +0.2192848684211, +0.1940410087719, +0.1078554824561, -0.0104469298246, + -0.1053458333333, -0.1385471491228, -0.1215015350877, -0.0807109649123, + -0.0396394736842, -0.0055480263158, +0.0227945175439, +0.0308320175439, + +0.0169989035088, +0.0033127192982, -0.0035870614035, +0.0024627192982, + +0.0147032894737, +0.0147100877193, +0.0049993421053, -0.0009100877193, + -0.0007361842105, +0.0010975877193, +0.0006826754386, -0.0076293859649, + -0.0168649122807, -0.0225267543860, -0.0285232456140, -0.0296407894737, + -0.0201508771930, -0.0106745614035, -0.0066991228070, -0.0105473684211, + -0.0177015350877, -0.0207063596491, -0.0222993421053, -0.0246482456140, + -0.0224396929825, -0.0147635964912, -0.0121870614035, -0.0134853070175, + -0.0078903508772, -0.0003679824561, -0.0027973684211, -0.0111361842105, + -0.0187789473684, -0.0254714912281, -0.0287574561404, -0.0222791666667, + -0.0128896929825, -0.0096839912281, -0.0100653508772, -0.0087804824561, + -0.0072679824561, -0.0048252192982, +0.0017535087719, +0.0089478070175, + +0.0076763157895, -0.0018002192982, -0.0115510964912, -0.0170791666667, + -0.0174739035088, -0.0151315789474, -0.0128962719298, -0.0119526315789, + -0.0100519736842, -0.0080576754386, -0.0094497807018, -0.0108820175439, + -0.0089410087719, -0.0087067982456, -0.0113035087719, -0.0136458333333, + -0.0124614035088, -0.0068396929825, +0.0027640350877, +0.0127826754386, + +0.0181098684211, +0.0168449561404, +0.0106410087719, +0.0020813596491, + -0.0060633771930, -0.0099315789474, -0.0070940789474, -0.0025765350877, + -0.0031120614035, -0.0061504385965, -0.0072747807018, -0.0056684210526, + -0.0032324561404, +0.0008565789474, +0.0069600877193, +0.0118991228070, + +0.0136725877193, +0.0125951754386, +0.0103934210526, +0.0097039473684, + +0.0108015350877, +0.0102394736842, +0.0058625000000, -0.0002677631579, + -0.0058024122807, -0.0105206140351, -0.0120866228070, -0.0085730263158, + -0.0012381578947, +0.0067392543860, +0.0123342105263, +0.0142280701754, + +0.0129030701754, +0.0103063596491, +0.0075155701754, +0.0038682017544, + +0.0003480263158, -0.0020679824561, -0.0028175438596, -0.0016462719298, + +0.0000133771930, +0.0010907894737, +0.0022552631579, +0.0034800438596, + +0.0043701754386, +0.0056282894737, +0.0083186403509, +0.0116916666667, + +0.0143353070175, +0.0156938596491, +0.0157271929825, +0.0141010964912, + +0.0116247807018, +0.0105339912281, +0.0110089912281, +0.0118188596491, + +0.0125282894737, +0.0120464912281, +0.0097175438596, +0.0064179824561, + +0.0037677631579, +0.0029245614035, +0.0033394736842, +0.0041962719298, + +0.0047515350877, +0.0046578947368, +0.0051532894737, +0.0066254385965, + +0.0073015350877, +0.0069000000000, +0.0068328947368, +0.0066589912281, + +0.0056217105263, +0.0046712719298, +0.0042497807018, +0.0036339912281, + +0.0029982456140, +0.0025631578947, +0.0028508771930, +0.0041157894737, + +0.0055682017544, +0.0060232456140, +0.0053339912281, +0.0038750000000, + +0.0027907894737, +0.0030182017544, +0.0045508771930, +0.0066188596491, + +0.0081513157895, +0.0085932017544, +0.0082719298246, +0.0078100877193, + +0.0078302631579, +0.0089478070175, +0.0107078947368, +0.0119326754386, + +0.0115712719298, +0.0098311403509, +0.0078234649123, +0.0072278508772, + +0.0083789473684, +0.0102864035088, +0.0114039473684, +0.0113703947368, + +0.0105741228070, +0.0096171052632, +0.0091083333333, +0.0087872807018, + +0.0075557017544, +0.0048118421053, +0.0009771929825, -0.0025298245614, + -0.0040622807018, -0.0036072368421, -0.0030048245614, -0.0032392543860, + -0.0034131578947, -0.0034063596491, -0.0035671052632, -0.0034265350877, + -0.0023690789474, -0.0007293859649, +0.0011175438596, +0.0030853070175, + +0.0047785087719, +0.0058223684211, +0.0063578947368, +0.0066456140351, + +0.0064114035088, +0.0054475877193, +0.0039885964912, +0.0027572368421, + +0.0024225877193, +0.0028175438596, +0.0035537280702, +0.0044037280702, + +0.0050796052632, +0.0056618421053, +0.0061905701754, +0.0059697368421, + +0.0053940789474, +0.0052133771930, +0.0047048245614, +0.0033864035088, + +0.0019475877193, +0.0004550438596, -0.0008500000000, -0.0009837719298, + +0.0000000000000, +0.0011041666667, +0.0014456140351, +0.0005085526316, + -0.0013853070175, -0.0032859649123, -0.0049122807018, -0.0056550438596, + -0.0048519736842, -0.0031120614035, -0.0012982456140, +0.0006291666667, + +0.0020010964912, +0.0016328947368, -0.0005554824561, -0.0033730263158, + -0.0052000000000, -0.0053405701754, -0.0042497807018, -0.0029245614035, + -0.0018002192982, -0.0010975877193, -0.0012381578947, -0.0024427631579, + -0.0038081140351, -0.0044304824561, -0.0040622807018, -0.0035403508772, + -0.0035201754386, -0.0036607456140, -0.0034131578947, -0.0032793859649, + -0.0036741228070, -0.0044370614035, -0.0051666666667, -0.0056015350877, + -0.0057622807018, -0.0066254385965, -0.0084526315789, -0.0099449561404, + -0.0099717105263, -0.0086600877193, -0.0061837719298, -0.0029513157895, + -0.0002743421053, +0.0004282894737, -0.0011041666667, -0.0035938596491, + -0.0057956140351, -0.0069600877193, -0.0065451754386, -0.0048118421053, + -0.0028375000000, -0.0012114035088, -0.0004885964912, -0.0004951754386, + -0.0010506578947, -0.0018872807018, -0.0025699561404, -0.0032526315789, + -0.0042765350877, -0.0050528508772, -0.0053004385965, -0.0054743421053, + -0.0056817982456, -0.0054743421053, -0.0047984649123, -0.0041157894737, + -0.0037745614035, -0.0038616228070, -0.0037879385965, -0.0030986842105, + -0.0022085526316, -0.0016263157895, -0.0014589912281, -0.0014589912281, + -0.0012515350877, -0.0012848684211, -0.0020745614035, -0.0031587719298, + -0.0037076754386, -0.0039686403509, -0.0044103070175, -0.0049456140351, + -0.0054208333333, -0.0058758771930, -0.0062506578947, -0.0064381578947, + -0.0062774122807, -0.0061771929825, -0.0067326754386, -0.0075155701754, + -0.0076092105263, -0.0070135964912, -0.0064984649123, -0.0062910087719, + -0.0063912280702, -0.0069333333333, -0.0077497807018, -0.0081379385965, + -0.0076629385965, -0.0065719298246, -0.0054342105263, -0.0045375000000, + -0.0040824561404, -0.0042364035088, -0.0048721491228, -0.0056951754386, + -0.0061236842105, -0.0055144736842, -0.0037142543860, -0.0014456140351, + +0.0000736842105, +0.0002208333333, -0.0005822368421, -0.0016061403509, + -0.0024493421053, -0.0027706140351, -0.0021015350877, -0.0003212719298, + +0.0018471491228, +0.0034399122807, +0.0036607456140, +0.0021684210526, + -0.0005219298246, -0.0033127192982, -0.0048385964912, -0.0045574561404, + -0.0037142543860, -0.0037811403509, -0.0044236842105, -0.0045910087719, + -0.0039752192982, -0.0027973684211, -0.0017333333333, -0.0015861842105, + -0.0023491228070, -0.0032324561404, -0.0038750000000, -0.0044438596491, + -0.0047984649123, -0.0046311403509, -0.0041092105263, -0.0036004385965, + -0.0031923245614, -0.0028778508772, -0.0024493421053, -0.0016730263158, + -0.0009100877193, -0.0005353070175, -0.0005287280702, -0.0009570175439, + -0.0015258771930, -0.0017668859649, -0.0015526315789, -0.0009771929825, + -0.0004951754386, -0.0007228070175, -0.0013250000000, -0.0017868421053, + -0.0022486842105, -0.0026032894737, -0.0024828947368, -0.0021015350877, + -0.0021015350877, -0.0026903508772, -0.0033929824561, -0.0035135964912, + -0.0029046052632, -0.0020879385965, -0.0015460526316, -0.0013653508772, + -0.0011578947368, -0.0006960526316, -0.0002609649123, -0.0001673245614, + -0.0001539473684, +0.0000469298246, +0.0002811403509, +0.0003679824561, + +0.0003144736842, +0.0003346491228, +0.0005890350877, +0.0004885964912, + -0.0003679824561, -0.0012649122807, -0.0013921052632, -0.0006758771930, + +0.0003010964912, +0.0009905701754, +0.0014589912281, +0.0016396929825, + +0.0012381578947, +0.0005287280702, +0.0002074561404, +0.0006625000000, + +0.0016798245614, +0.0028912280702, +0.0039083333333, +0.0044370614035, + +0.0043500000000, +0.0039686403509, +0.0038013157895, +0.0039017543860, + +0.0038348684211, +0.0034131578947, +0.0030585526316, +0.0030383771930, + +0.0032190789474, +0.0035135964912, +0.0038548245614, +0.0038414473684, + +0.0033997807018, +0.0029581140351, +0.0026300438596, +0.0023423245614, + +0.0018938596491, +0.0011175438596, +0.0003881578947, +0.0002475877193, + +0.0003480263158, +0.0002410087719, +0.0002008771930, +0.0005822368421, + +0.0011846491228, +0.0016932017544, +0.0020611842105, +0.0022151315789, + +0.0020879385965, +0.0019877192982, +0.0022620614035, +0.0028710526316, + +0.0034197368421, +0.0034131578947, +0.0030585526316, +0.0028912280702, + +0.0030986842105, +0.0036407894737, +0.0043434210526, +0.0048653508772, + +0.0049925438596, +0.0048587719298, +0.0047182017544, +0.0045173245614, + +0.0042429824561, +0.0042364035088, +0.0044304824561, +0.0043835526316, + +0.0039686403509, +0.0033864035088, +0.0027304824561, +0.0021282894737, + +0.0017868421053, +0.0018938596491, +0.0023557017544, +0.0029046052632, + +0.0032256578947, +0.0030986842105, +0.0027572368421, +0.0026971491228, + +0.0030449561404, +0.0035938596491, +0.0041493421053, +0.0045107456140, + +0.0044638157895, +0.0041760964912, +0.0040355263158, +0.0040423245614, + +0.0042096491228, +0.0045574561404, +0.0047449561404, +0.0044839912281, + +0.0040690789474, +0.0038750000000, +0.0042162280702, +0.0048320175439, + +0.0051732456140, +0.0050260964912, +0.0044839912281, +0.0035804824561, + +0.0025497807018, +0.0018872807018, +0.0017199561404, +0.0017267543860, + +0.0014923245614, +0.0012114035088, +0.0011912280702, +0.0013853070175, + +0.0015660087719, +0.0019140350877, +0.0023625000000, +0.0026502192982, + +0.0024962719298, +0.0016596491228, +0.0004350877193, -0.0005756578947, + -0.0008699561404, -0.0002074561404, +0.0010105263158, +0.0019407894737, + +0.0020679824561, +0.0014789473684, +0.0007896929825, +0.0004817982456, + +0.0006291666667, +0.0010173245614, +0.0013519736842, +0.0012381578947, + +0.0005756578947, -0.0001673245614, -0.0004817982456, -0.0003815789474, + -0.0001070175439, +0.0001940789474, +0.0002743421053, +0.0000603070175, + -0.0003346491228, -0.0006223684211, -0.0005756578947, -0.0001138157895, + +0.0004083333333, +0.0005287280702, +0.0000802631579, -0.0005486842105, + -0.0008967105263, -0.0007427631579, -0.0002074561404, +0.0004951754386, + +0.0012247807018, +0.0016798245614, +0.0015125000000, +0.0008967105263, + +0.0004282894737, +0.0003278508772, +0.0004618421053, +0.0008164473684, + +0.0012313596491, +0.0015460526316, +0.0018537280702, +0.0022552631579, + +0.0027171052632, +0.0029046052632, +0.0023625000000, +0.0012581140351, + +0.0002074561404, -0.0005486842105, -0.0010708333333, -0.0012515350877, + -0.0009638157895, -0.0002410087719, +0.0005287280702, +0.0009368421053, + +0.0008833333333, +0.0004618421053, -0.0002142543860, -0.0009168859649, + -0.0013986842105, -0.0017734649123, -0.0021214912281, -0.0022888157895, + -0.0020879385965, -0.0017333333333, -0.0014254385965, -0.0012916666667, + -0.0013050438596, -0.0013116228070, -0.0011510964912, -0.0007896929825, + -0.0003679824561, -0.0001807017544, -0.0004149122807, -0.0009570175439, + -0.0015728070175, -0.0019407894737, -0.0018070175439, -0.0012581140351, + -0.0006758771930, -0.0003010964912, -0.0002342105263, -0.0003144736842, + -0.0003546052632, -0.0004083333333, -0.0004817982456, -0.0002342105263, + +0.0003212719298, +0.0008565789474, +0.0009771929825, +0.0006223684211, + +0.0002543859649, +0.0003078947368, +0.0006559210526, +0.0009638157895, + +0.0010239035088, +0.0008298245614, +0.0004885964912, +0.0000936403509, + -0.0001539473684, -0.0002074561404, -0.0001004385965, +0.0000535087719, + +0.0001872807018, +0.0001539473684, -0.0000067982456, -0.0000802631579, + +0.0000936403509, +0.0003346491228, +0.0003144736842, -0.0001203947368, + -0.0008699561404, -0.0016396929825, -0.0021081140351, -0.0020478070175, + -0.0014923245614, -0.0006425438596, +0.0002208333333, +0.0008633771930, + +0.0010574561404, +0.0008500000000, +0.0005890350877, +0.0005756578947, + +0.0006960526316, +0.0007293859649, +0.0007561403509, +0.0009035087719, + +0.0010239035088, +0.0009302631579, +0.0006692982456, +0.0004484649123, + +0.0002276315789, -0.0000201754386, -0.0002276315789, -0.0003546052632, + -0.0004416666667, -0.0006223684211, -0.0009638157895, -0.0014120614035, + -0.0018537280702, -0.0021149122807, -0.0021883771930, -0.0021684210526, + -0.0021883771930, -0.0021482456140, -0.0019541666667, -0.0018203947368, + -0.0018002192982, -0.0015057017544, -0.0008232456140, -0.0001004385965, + +0.0003480263158, +0.0005486842105, +0.0004817982456, +0.0000870614035, + -0.0003679824561, -0.0004684210526, -0.0000335526316, +0.0007293859649, + +0.0014254385965, +0.0017936403509, +0.0016864035088, +0.0011778508772, + +0.0005219298246, +0.0000133771930, -0.0001940789474, -0.0001739035088, + -0.0000870614035, -0.0001673245614, -0.0005688596491, -0.0010440789474, + -0.0012447368421, -0.0011778508772, -0.0011377192982, -0.0012381578947, + -0.0013585526316, -0.0014857456140, -0.0015526315789, -0.0013184210526, + -0.0007896929825, -0.0002677631579, -0.0000668859649, -0.0003747807018, + -0.0010708333333, -0.0018671052632, -0.0024359649123, -0.0026769736842, + -0.0027105263158, -0.0026434210526, -0.0025230263158, -0.0023089912281, + -0.0019609649123, -0.0015526315789, -0.0011846491228, -0.0009905701754, + -0.0009771929825, -0.0010506578947, -0.0012381578947, -0.0014521929825, + -0.0015258771930, -0.0012848684211, -0.0007561403509, -0.0002877192982, + -0.0002208333333, -0.0006223684211, -0.0013317982456, -0.0020947368421, + -0.0025096491228, -0.0023625000000, -0.0019609649123, -0.0016061403509, + -0.0012447368421, -0.0009436403509, -0.0009436403509, -0.0011309210526, + -0.0012247807018, -0.0011644736842, -0.0011712719298, -0.0013116228070, + -0.0015326754386, -0.0017131578947, -0.0018269736842, -0.0018403508772, + -0.0015861842105, -0.0009638157895, -0.0001739035088, +0.0004083333333, + +0.0005756578947, +0.0003144736842, -0.0001271929825, -0.0005554824561, + -0.0007561403509, -0.0007228070175, -0.0006223684211, -0.0005688596491, + -0.0005085526316, -0.0005019736842, -0.0005688596491, -0.0006491228070, + -0.0007561403509, -0.0009302631579, -0.0011846491228, -0.0015190789474, + -0.0018471491228, -0.0020611842105, -0.0020611842105, -0.0018002192982, + -0.0013787280702, -0.0010372807018, -0.0008366228070, -0.0007964912281, + -0.0008967105263, -0.0009771929825, -0.0009436403509, -0.0009703947368, + -0.0010574561404, -0.0010372807018, -0.0008833333333, -0.0006960526316, + -0.0005353070175, -0.0004217105263, -0.0003949561404, -0.0004083333333, + -0.0004484649123, -0.0004817982456, -0.0002410087719, +0.0003412280702, + +0.0008699561404, +0.0009302631579, +0.0006157894737, +0.0003078947368, + +0.0000335526316, -0.0003679824561, -0.0006491228070, -0.0004951754386, + -0.0001471491228, +0.0001539473684, +0.0004350877193, +0.0007094298246, + +0.0009234649123, +0.0010774122807, +0.0011912280702, +0.0011309210526, + +0.0009168859649, +0.0005756578947, +0.0001203947368, -0.0002543859649, + -0.0003412280702, +0.0000201754386, +0.0007361842105, +0.0013116228070, + +0.0014120614035, +0.0011243421053, +0.0006892543860, +0.0003881578947, + +0.0003881578947, +0.0006223684211, +0.0008098684211, +0.0007697368421, + +0.0006491228070, +0.0005620614035, +0.0006024122807, +0.0008366228070, + +0.0011778508772, +0.0014655701754, +0.0016530701754, +0.0016664473684, + +0.0015190789474, +0.0012447368421, +0.0010173245614, +0.0008565789474, + +0.0006892543860, +0.0005019736842, +0.0002877192982, -0.0000201754386, + -0.0003346491228, -0.0003949561404, -0.0001070175439, +0.0003010964912, + +0.0005421052632, +0.0005756578947, +0.0004618421053, +0.0002945175439, + +0.0001807017544, +0.0001471491228, +0.0002609649123, +0.0006425438596, + +0.0011712719298, +0.0014120614035, +0.0011578947368, +0.0007228070175, + +0.0003881578947, +0.0003078947368, +0.0005890350877, +0.0010039473684, + +0.0012848684211, +0.0013585526316, +0.0013519736842, +0.0013519736842, + +0.0013184210526, +0.0011778508772, +0.0009638157895, +0.0007427631579, + +0.0005956140351, +0.0005085526316, +0.0004684210526, +0.0005287280702, + +0.0007293859649, +0.0010574561404, +0.0012515350877, +0.0010774122807, + +0.0007763157895, +0.0005822368421, +0.0004149122807, +0.0003881578947, + +0.0005956140351, +0.0008699561404, +0.0009638157895, +0.0007228070175, + +0.0003078947368, +0.0000401315789, -0.0001070175439, -0.0003480263158, + -0.0005756578947, -0.0005688596491, -0.0003078947368, +0.0000067982456, + +0.0001271929825, +0.0000067982456, -0.0001271929825, -0.0000335526316, + +0.0002142543860, +0.0003278508772, +0.0000267543860, -0.0006625000000, + -0.0014054824561, -0.0016864035088, -0.0014054824561, -0.0008565789474, + -0.0004282894737, -0.0004083333333, -0.0007495614035, -0.0010239035088, + -0.0008901315789, -0.0004416666667, +0.0000000000000, +0.0002074561404, + +0.0002342105263, +0.0002342105263, +0.0001739035088, +0.0000535087719, + -0.0000736842105, -0.0002543859649, -0.0004817982456, -0.0006223684211, + -0.0006692982456, -0.0006425438596, -0.0005486842105, -0.0004416666667, + -0.0004217105263, -0.0003480263158, -0.0002074561404, -0.0001337719298, + -0.0001337719298, -0.0003078947368, -0.0007697368421, -0.0011912280702, + -0.0012581140351, -0.0011243421053, -0.0008967105263, -0.0005756578947, + -0.0002609649123, +0.0000133771930, +0.0001337719298, +0.0000067982456, + -0.0000870614035, +0.0000736842105, +0.0004083333333, +0.0006960526316, + +0.0007495614035, +0.0006024122807, +0.0004484649123, +0.0004484649123, + +0.0006892543860, +0.0011041666667, +0.0015057017544, +0.0018471491228, + +0.0020478070175, +0.0018872807018, +0.0013519736842, +0.0008432017544, + +0.0006491228070, +0.0007427631579, +0.0008833333333, +0.0008232456140, + +0.0004817982456, -0.0001940789474, -0.0010239035088, -0.0014322368421, + -0.0010239035088, +0.0000201754386, +0.0012247807018, +0.0021081140351, + +0.0024160087719, +0.0020344298246, +0.0010173245614, -0.0003010964912, + -0.0014054824561, -0.0017467105263, -0.0013184210526, -0.0006157894737, + +0.0000000000000, +0.0004951754386, +0.0007763157895, +0.0007361842105, + +0.0004618421053, +0.0002276315789, +0.0001138157895, +0.0000000000000, + -0.0002475877193, -0.0006357456140, -0.0008432017544, -0.0005085526316, + +0.0001605263158, +0.0006089912281, +0.0006089912281, +0.0003949561404, + +0.0002342105263, +0.0000936403509, -0.0000870614035, -0.0001807017544, + -0.0000067982456, +0.0003010964912, +0.0006559210526, +0.0009771929825, + +0.0011578947368, +0.0011712719298, +0.0010842105263, +0.0008432017544, + +0.0005822368421, +0.0003346491228, +0.0000802631579, -0.0001337719298, + -0.0002677631579, -0.0003212719298, -0.0001807017544, +0.0000870614035, + +0.0003480263158, +0.0004684210526, +0.0005554824561, +0.0007228070175, + +0.0007361842105, +0.0005353070175, +0.0003881578947, +0.0002677631579, + -0.0001138157895, -0.0005620614035, -0.0006491228070, -0.0002743421053, + +0.0003480263158, +0.0008699561404, +0.0010239035088, +0.0007697368421, + +0.0001872807018, -0.0004149122807, -0.0007427631579, -0.0007561403509, + -0.0004416666667, -0.0000668859649, -0.0000469298246, -0.0003614035088, + -0.0006758771930, -0.0007896929825, -0.0005956140351, +0.0000000000000, + +0.0007361842105, +0.0012114035088, +0.0012714912281, +0.0008967105263, + +0.0001605263158, -0.0006491228070, -0.0011712719298, -0.0012247807018, + -0.0008232456140, -0.0002743421053, +0.0000335526316, +0.0001004385965, + +0.0001138157895, +0.0000603070175, -0.0001471491228, -0.0003346491228, + -0.0002208333333, +0.0000802631579, +0.0002410087719, +0.0000802631579, + -0.0002543859649, -0.0004149122807, -0.0001673245614, +0.0004015350877, + +0.0009502192982, +0.0011445175439, +0.0008967105263, +0.0002342105263, + -0.0005019736842, -0.0008901315789, -0.0008164473684, -0.0005153508772, + -0.0000936403509, +0.0002342105263, +0.0003212719298, +0.0001872807018, + +0.0000335526316, +0.0001337719298, +0.0005153508772, +0.0010173245614, + +0.0014655701754, +0.0015728070175, +0.0011175438596, +0.0002276315789, + -0.0008164473684, -0.0015660087719, -0.0016997807018, -0.0012714912281, + -0.0006357456140, +0.0000000000000, +0.0007361842105, +0.0015728070175, + +0.0021616228070, +0.0024160087719, +0.0022151315789, +0.0013184210526, + -0.0003010964912, -0.0022151315789, -0.0040289473684, -0.0054543859649, + -0.0061771929825, -0.0060164473684, -0.0050662280702, -0.0034532894737, + -0.0014655701754, +0.0004282894737, +0.0018739035088, +0.0025230263158, + +0.0023690789474, +0.0016932017544, +0.0008901315789, +0.0002743421053, + -0.0000535087719, -0.0001070175439, +0.0000401315789, +0.0002410087719, + +0.0003278508772, +0.0001138157895, -0.0005219298246, -0.0015125000000, + -0.0024962719298, -0.0030651315789, -0.0029780701754, -0.0020412280702, + -0.0004083333333, +0.0010975877193, +0.0015728070175, +0.0010774122807, + +0.0004885964912, +0.0003679824561, +0.0004550438596, +0.0004885964912, + +0.0006491228070, +0.0009638157895, +0.0011041666667, +0.0008232456140, + +0.0001940789474, -0.0004083333333, -0.0005956140351, -0.0003881578947, + -0.0001271929825, +0.0000201754386, +0.0000535087719, -0.0000936403509, + -0.0002074561404, +0.0001539473684, +0.0011846491228, +0.0024293859649, + +0.0029646929825, +0.0024627192982, +0.0013787280702, +0.0002142543860, + -0.0005756578947, -0.0007896929825, -0.0006559210526, -0.0004282894737, + -0.0003010964912, -0.0005219298246, -0.0009905701754, -0.0012247807018, + -0.0009638157895, -0.0002208333333, +0.0008767543860, +0.0020010964912, + +0.0027706140351, +0.0028844298246, +0.0022085526316, +0.0010372807018, + -0.0002543859649, -0.0013787280702, -0.0019743421053, -0.0019274122807, + -0.0014188596491, -0.0006559210526, +0.0000936403509, +0.0005890350877, + +0.0007361842105, +0.0006625000000, +0.0005085526316, +0.0002475877193, + -0.0002208333333, -0.0009771929825, -0.0018002192982, -0.0022686403509, + -0.0021883771930, -0.0015660087719, -0.0006357456140, +0.0001807017544, + +0.0007831140351, +0.0010708333333, +0.0008432017544, +0.0000936403509, + -0.0010440789474, -0.0021817982456, -0.0028107456140, -0.0027438596491, + -0.0020210526316, -0.0008500000000, +0.0002609649123, +0.0007160087719, + +0.0004083333333, -0.0002677631579, -0.0009570175439, -0.0014254385965, + -0.0015258771930, -0.0012782894737, -0.0007361842105, -0.0002074561404, + -0.0000267543860, -0.0001872807018, -0.0004618421053, -0.0006826754386, + -0.0005822368421, -0.0003144736842, -0.0000401315789, +0.0003881578947, + +0.0010307017544, +0.0016263157895, +0.0019877192982, +0.0020010964912, + +0.0016730263158, +0.0011846491228, +0.0006491228070, -0.0000668859649, + -0.0010173245614, -0.0019743421053, -0.0027105263158, -0.0030250000000, + -0.0026769736842, -0.0015190789474, +0.0000335526316, +0.0011980263158, + +0.0015927631579, +0.0015190789474, +0.0013116228070, +0.0010640350877, + +0.0009100877193, +0.0010574561404, +0.0014589912281, +0.0017734649123, + +0.0017535087719, +0.0013853070175, +0.0009638157895, +0.0006892543860, + +0.0005486842105, +0.0004618421053, +0.0002877192982, +0.0000401315789, + -0.0001070175439, -0.0001405701754, -0.0002008771930, -0.0002475877193, + -0.0001471491228, +0.0000133771930, +0.0000469298246, -0.0001138157895, + -0.0004752192982, -0.0007561403509, -0.0006157894737, -0.0000668859649, + +0.0005085526316, +0.0006826754386, +0.0002743421053, -0.0004282894737, + -0.0009703947368, -0.0010708333333, -0.0006157894737, +0.0001539473684, + +0.0007763157895, +0.0008432017544, +0.0004217105263, -0.0000335526316, + -0.0002410087719, -0.0003144736842, -0.0003212719298, -0.0001605263158, + +0.0000133771930, -0.0000335526316, -0.0002677631579, -0.0005890350877, + -0.0008901315789, -0.0010307017544, -0.0010173245614, -0.0009168859649, + -0.0008232456140, -0.0006024122807, -0.0000535087719, +0.0006692982456, + +0.0012179824561, +0.0014521929825, +0.0013921052632, +0.0011175438596, + +0.0006692982456, +0.0001807017544, -0.0001673245614, -0.0003346491228, + -0.0004083333333, -0.0004618421053, -0.0004885964912, -0.0004885964912, + -0.0005153508772, -0.0005085526316, -0.0003546052632, -0.0001539473684, + -0.0002208333333, -0.0005822368421, -0.0009502192982, -0.0010239035088, + -0.0007293859649, -0.0003679824561, -0.0002475877193, -0.0002410087719, + -0.0001539473684, +0.0000133771930, +0.0002543859649, +0.0005153508772, + +0.0007026315789, +0.0007629385965, +0.0006960526316, +0.0006024122807, + +0.0004217105263, -0.0000067982456, -0.0006024122807, -0.0009837719298, + -0.0008767543860, -0.0003546052632, +0.0003679824561, +0.0010907894737, + +0.0015190789474, +0.0014188596491, +0.0010372807018, +0.0006625000000, + +0.0003412280702, +0.0000802631579, -0.0001605263158, -0.0003815789474, + -0.0004282894737, -0.0001539473684, +0.0003747807018, +0.0010307017544, + +0.0016664473684, +0.0020478070175, +0.0020679824561, +0.0017600877193, + +0.0011578947368, +0.0003747807018, -0.0003144736842, -0.0007094298246, + -0.0007160087719, -0.0003815789474, +0.0000668859649, +0.0005219298246, + +0.0008366228070, +0.0008232456140, +0.0006024122807, +0.0004149122807, + +0.0003815789474, +0.0005620614035, +0.0008366228070, +0.0009703947368, + +0.0009168859649, +0.0007629385965, +0.0006491228070, +0.0007160087719, + +0.0009302631579, +0.0011175438596, +0.0011778508772, +0.0009837719298, + +0.0005287280702, +0.0000401315789, -0.0002342105263, -0.0001872807018, + +0.0001539473684, +0.0006692982456, +0.0010907894737, +0.0011578947368, + +0.0009168859649, +0.0005688596491, +0.0002074561404, -0.0000936403509, + -0.0002208333333, -0.0001138157895, +0.0001004385965, +0.0002342105263, + +0.0001673245614, -0.0000133771930, -0.0001739035088, -0.0001739035088, + -0.0000267543860, +0.0001070175439, +0.0001872807018, +0.0001605263158, + +0.0000201754386, -0.0001940789474, -0.0004752192982, -0.0006892543860, + -0.0006960526316, -0.0004752192982, -0.0001605263158, +0.0001070175439, + +0.0002543859649, +0.0001940789474, -0.0000668859649, -0.0004484649123, + -0.0007094298246, -0.0006425438596, -0.0004217105263, -0.0003078947368, + -0.0002276315789, -0.0000870614035, -0.0000133771930, -0.0001004385965, + -0.0003546052632, -0.0006089912281, -0.0006559210526, -0.0004282894737, + -0.0000067982456, +0.0003546052632, +0.0004484649123, +0.0003278508772, + +0.0001004385965, -0.0001739035088, -0.0003815789474, -0.0003679824561, + -0.0001271929825, +0.0002543859649, +0.0006692982456, +0.0010239035088, + +0.0011309210526, +0.0009302631579, +0.0006024122807, +0.0002811403509, + +0.0000000000000, -0.0002074561404, -0.0004015350877, -0.0005956140351, + -0.0007697368421, -0.0008767543860, -0.0007964912281, -0.0006024122807, + -0.0004752192982, -0.0005219298246, -0.0007561403509, -0.0011377192982, + -0.0015594298246, -0.0018471491228, -0.0018471491228, -0.0015660087719, + -0.0010574561404, -0.0004015350877, +0.0001138157895, +0.0002276315789, + -0.0000067982456, -0.0003412280702, -0.0005688596491, -0.0006357456140, + -0.0005956140351, -0.0005219298246, -0.0004684210526, -0.0004752192982, + -0.0004885964912, -0.0004416666667, -0.0004083333333, -0.0004618421053, + -0.0004752192982, -0.0004015350877, -0.0004149122807, -0.0005822368421, + -0.0007561403509, -0.0007629385965, -0.0006089912281, -0.0003614035088, + -0.0000936403509, -0.0000870614035, -0.0004083333333, -0.0007697368421, + -0.0009100877193, -0.0007561403509, -0.0004416666667, -0.0002877192982, + -0.0004149122807, -0.0006758771930, -0.0008967105263, -0.0010842105263, + -0.0011309210526, -0.0009234649123, -0.0004550438596, +0.0000736842105, + +0.0004618421053, +0.0005756578947, +0.0005421052632, +0.0004484649123, + +0.0003412280702, +0.0003546052632, +0.0005287280702, +0.0007896929825, + +0.0011309210526, +0.0014723684211, +0.0017065789474, +0.0017535087719, + +0.0015125000000, +0.0010173245614, +0.0005019736842, +0.0001539473684, + -0.0000067982456, -0.0000668859649, -0.0000603070175, +0.0000401315789, + +0.0002475877193, +0.0004752192982, +0.0006826754386, +0.0008633771930, + +0.0009168859649, +0.0007160087719, +0.0004015350877, +0.0002074561404, + +0.0002609649123, +0.0004416666667, +0.0005620614035, +0.0004885964912, + +0.0003346491228, +0.0002475877193, +0.0002276315789, +0.0001539473684, + +0.0000603070175, +0.0000936403509, +0.0003144736842, +0.0005756578947, + +0.0007697368421, +0.0008030701754, +0.0007094298246, +0.0006157894737, + +0.0006089912281, +0.0006157894737, +0.0005353070175, +0.0002945175439, + -0.0000736842105, -0.0004484649123, -0.0006425438596, -0.0005486842105, + -0.0002410087719, +0.0000870614035, +0.0003144736842, +0.0003412280702, + +0.0002410087719, +0.0001271929825, +0.0000736842105, +0.0001337719298, + +0.0002276315789, +0.0002945175439, +0.0004282894737, +0.0006291666667, + +0.0006960526316, +0.0005554824561, +0.0002142543860, -0.0002074561404, + -0.0005486842105, -0.0007160087719, -0.0007629385965, -0.0006357456140, + -0.0003278508772, +0.0000201754386, +0.0002743421053, +0.0004350877193, + +0.0004484649123, +0.0002410087719, -0.0001539473684, -0.0005287280702, + -0.0006625000000, -0.0005019736842, -0.0001271929825, +0.0003212719298, + +0.0005956140351, +0.0006157894737, +0.0005085526316, +0.0004817982456, + +0.0005486842105, +0.0006692982456, +0.0008565789474, +0.0010372807018, + +0.0011377192982, +0.0010907894737, +0.0008164473684, +0.0004282894737, + +0.0000870614035, -0.0002276315789, -0.0006024122807, -0.0009168859649, + -0.0010307017544, -0.0009368421053, -0.0007427631579, -0.0005486842105, + -0.0004282894737, -0.0003480263158, -0.0003480263158, -0.0004885964912, + -0.0006024122807, -0.0005287280702, -0.0004083333333, -0.0003546052632, + -0.0003480263158, -0.0003144736842, -0.0001405701754, +0.0000469298246, + +0.0000067982456, -0.0002342105263, -0.0004618421053, -0.0005421052632, + -0.0005019736842, -0.0004951754386, -0.0005890350877, -0.0006223684211, + -0.0005085526316, -0.0003346491228, -0.0001940789474, -0.0000469298246, + +0.0001539473684, +0.0002945175439, +0.0002208333333, +0.0000267543860, + -0.0001004385965, -0.0000401315789, +0.0001337719298, +0.0001807017544, + +0.0000267543860, -0.0001673245614, -0.0002677631579, -0.0002945175439, + -0.0002342105263, -0.0001807017544, -0.0002342105263, -0.0004350877193, + -0.0006157894737, -0.0006357456140, -0.0004484649123, -0.0003144736842, + -0.0003679824561, -0.0005153508772, -0.0005688596491, -0.0004618421053, + -0.0001872807018, +0.0000870614035, +0.0002609649123, +0.0003144736842, + +0.0003010964912, +0.0002475877193, +0.0002074561404, +0.0002074561404, + +0.0003212719298, +0.0005287280702, +0.0007763157895, +0.0009436403509, + +0.0009971491228, +0.0008901315789, +0.0005688596491, +0.0000736842105, + -0.0003747807018, -0.0006559210526, -0.0007896929825, -0.0007697368421, + -0.0006692982456, -0.0006223684211, -0.0006892543860, -0.0007697368421, + -0.0007228070175, -0.0005756578947, -0.0003949561404, -0.0003078947368, + -0.0004416666667, -0.0007228070175, -0.0008833333333, -0.0007561403509, + -0.0004618421053, -0.0001739035088, +0.0000469298246, +0.0002543859649, + +0.0003614035088, +0.0002609649123, -0.0000201754386, -0.0003010964912, + -0.0004484649123, -0.0004550438596, -0.0003949561404, -0.0003010964912, + -0.0002008771930, -0.0001203947368, -0.0001605263158, -0.0003412280702, + -0.0005890350877, -0.0006892543860, -0.0004885964912, -0.0000802631579, + +0.0003078947368, +0.0005421052632, +0.0005554824561, +0.0004015350877, + +0.0001203947368, -0.0001605263158, -0.0002609649123, -0.0000802631579, + +0.0003078947368, +0.0007561403509, +0.0010307017544, +0.0010640350877, + +0.0008833333333, +0.0006089912281, +0.0003815789474, +0.0002609649123, + +0.0001605263158, +0.0000469298246, -0.0000401315789, -0.0000267543860, + +0.0001271929825, +0.0004217105263, +0.0007896929825, +0.0011041666667, + +0.0012114035088, +0.0010975877193, +0.0008432017544, +0.0005085526316, + +0.0002142543860, +0.0001605263158, +0.0003815789474, +0.0007293859649, + +0.0009638157895, +0.0009905701754, +0.0008633771930, +0.0006223684211, + +0.0003546052632, +0.0001539473684, +0.0000335526316, -0.0000267543860, + -0.0000603070175, -0.0000870614035, -0.0000603070175, -0.0000201754386, + -0.0000133771930, -0.0000201754386, -0.0000603070175, -0.0001337719298, + -0.0001807017544, -0.0002074561404, -0.0002945175439, -0.0003881578947, + -0.0003815789474, -0.0001807017544, +0.0001539473684, +0.0004083333333, + +0.0004550438596, +0.0003881578947, +0.0002877192982, +0.0001605263158, + +0.0000603070175, -0.0000401315789, -0.0001605263158, -0.0002743421053, + -0.0004350877193, -0.0006223684211, -0.0007160087719, -0.0006291666667, + -0.0003881578947, -0.0001203947368, +0.0001070175439, +0.0003010964912, + +0.0004951754386, +0.0006425438596, +0.0006692982456, +0.0005085526316, + +0.0001872807018, -0.0001004385965, -0.0002008771930, -0.0001203947368, + +0.0000802631579, +0.0003546052632, +0.0006223684211, +0.0007831140351, + +0.0008098684211, +0.0007763157895, +0.0007293859649, +0.0006692982456, + +0.0005421052632, +0.0004083333333, +0.0003144736842, +0.0002008771930, + +0.0000469298246, -0.0001203947368, -0.0002877192982, -0.0003815789474, + -0.0003412280702, -0.0002543859649, -0.0002543859649, -0.0003480263158, + -0.0004817982456, -0.0006024122807, -0.0006559210526, -0.0006892543860, + -0.0007094298246, -0.0006223684211, -0.0004416666667, -0.0003212719298, + -0.0003546052632, -0.0004885964912, -0.0006491228070, -0.0007964912281, + -0.0008901315789, -0.0008432017544, -0.0005822368421, -0.0002074561404, + +0.0000469298246, +0.0000736842105, -0.0001070175439, -0.0003747807018, + -0.0006625000000, -0.0008298245614, -0.0006892543860, -0.0002945175439, + +0.0000802631579, +0.0002142543860, +0.0000535087719, -0.0001940789474, + -0.0003747807018, -0.0004550438596, -0.0004217105263, -0.0002342105263, + +0.0000401315789, +0.0003278508772, +0.0005019736842, +0.0004752192982, + +0.0003614035088, +0.0002877192982, +0.0002008771930, +0.0000469298246, + -0.0000802631579, -0.0001337719298, -0.0000936403509, -0.0000401315789, + +0.0000000000000, +0.0000267543860, +0.0000000000000, -0.0000936403509, + -0.0001539473684, -0.0001070175439, +0.0000668859649, +0.0003412280702, + +0.0005956140351, +0.0006758771930, +0.0005019736842, +0.0001203947368, + -0.0002677631579, -0.0005421052632, -0.0006826754386, -0.0007293859649, + -0.0006758771930, -0.0005956140351, -0.0005085526316, -0.0004083333333, + -0.0002677631579, -0.0001138157895, -0.0000401315789, -0.0000668859649, + -0.0001070175439, -0.0001203947368, -0.0000535087719, +0.0000401315789, + +0.0001004385965, +0.0000802631579, -0.0000603070175, -0.0002811403509, + -0.0003679824561, -0.0002677631579, -0.0001203947368, +0.0000000000000, + +0.0001070175439, +0.0002008771930, +0.0001807017544, +0.0000469298246, + -0.0000603070175, -0.0000870614035, -0.0001138157895, -0.0001405701754, + -0.0000802631579, +0.0000668859649, +0.0001739035088, +0.0001004385965, + -0.0000870614035, -0.0002475877193, -0.0003278508772, -0.0003010964912, + -0.0001605263158, +0.0000000000000, +0.0000267543860, -0.0000736842105, + -0.0002208333333, -0.0003412280702, -0.0003144736842, -0.0000870614035, + +0.0002008771930, +0.0003815789474, +0.0004752192982, +0.0005019736842, + +0.0005287280702, +0.0006291666667, +0.0006960526316, +0.0006223684211, + +0.0004618421053, +0.0002743421053, +0.0000201754386, -0.0002677631579, + -0.0005085526316, -0.0005153508772, -0.0003212719298, -0.0000936403509, + +0.0000201754386, +0.0000603070175, +0.0000870614035, +0.0001203947368, + +0.0001070175439, +0.0000802631579, +0.0001004385965, +0.0001605263158, + +0.0002276315789, +0.0002677631579, +0.0002074561404, +0.0001138157895, + +0.0000936403509, +0.0001872807018, +0.0002945175439, +0.0002609649123, + +0.0000401315789, -0.0002342105263, -0.0004752192982, -0.0005756578947, + -0.0004149122807, -0.0000335526316, +0.0003480263158, +0.0005688596491, + +0.0006223684211, +0.0006625000000, +0.0007361842105, +0.0007763157895, + +0.0006960526316, +0.0005019736842, +0.0002609649123, +0.0000335526316, + -0.0001405701754, -0.0002208333333, -0.0001203947368, +0.0001271929825, + +0.0002945175439, +0.0002142543860, +0.0000335526316, -0.0000802631579, + -0.0001004385965, +0.0000469298246, +0.0003010964912, +0.0005153508772, + +0.0006559210526, +0.0006559210526, +0.0004817982456, +0.0002008771930, + -0.0000603070175, -0.0002743421053, -0.0004350877193, -0.0005153508772, + -0.0004684210526, -0.0003747807018, -0.0002743421053, -0.0001337719298, + +0.0000335526316, +0.0001739035088, +0.0002945175439, +0.0003881578947, + +0.0004282894737, +0.0004282894737, +0.0004217105263, +0.0003278508772, + +0.0001070175439, -0.0000936403509, -0.0001471491228, -0.0000736842105, + +0.0000335526316, +0.0001539473684, +0.0003278508772, +0.0004684210526, + +0.0003815789474, +0.0000936403509, -0.0000802631579, +0.0000201754386, + +0.0002276315789, +0.0002811403509, +0.0002008771930, +0.0002208333333, + +0.0003546052632, +0.0004149122807, +0.0004149122807, +0.0004752192982, + +0.0005688596491, +0.0004752192982, +0.0000469298246, -0.0004550438596, + -0.0006223684211, -0.0004217105263, -0.0000936403509, +0.0001807017544, + +0.0003614035088, +0.0004015350877, +0.0003144736842, +0.0001203947368, + -0.0000870614035, -0.0002008771930, -0.0001271929825, +0.0001070175439, + +0.0004484649123, +0.0007561403509, +0.0007964912281, +0.0004684210526, + -0.0000469298246, -0.0004416666667, -0.0004951754386, -0.0002342105263, + +0.0001138157895, +0.0003815789474, +0.0003881578947, +0.0000870614035, + -0.0003679824561, -0.0007094298246, -0.0007427631579, -0.0004684210526, + -0.0000335526316, +0.0004015350877, +0.0007361842105, +0.0008967105263, + +0.0007361842105, +0.0002677631579, -0.0002410087719, -0.0004885964912, + -0.0005153508772, -0.0004684210526, -0.0003480263158, -0.0001471491228, + -0.0000201754386, -0.0000603070175, -0.0001337719298, -0.0000067982456, + +0.0003614035088, +0.0006625000000, +0.0006357456140, +0.0005085526316, + +0.0003881578947, +0.0001940789474, +0.0000133771930, -0.0000133771930, + +0.0000133771930, -0.0000067982456, -0.0002276315789, -0.0005219298246, + -0.0005421052632, -0.0001940789474, +0.0002743421053, +0.0006826754386, + +0.0011175438596, +0.0016864035088, +0.0020344298246, +0.0015793859649, + +0.0002475877193, -0.0013653508772, -0.0025631578947, -0.0028844298246, + -0.0022151315789, -0.0008030701754, +0.0008232456140, +0.0019809210526, + +0.0021015350877, +0.0011912280702, -0.0002008771930, -0.0013853070175, + -0.0018403508772, -0.0014991228070, -0.0005620614035, +0.0004817982456, + +0.0011445175439, +0.0012714912281, +0.0012046052632, +0.0011445175439, + +0.0009638157895, +0.0004817982456, -0.0002677631579, -0.0010506578947, + -0.0014723684211, -0.0013787280702, -0.0008500000000, -0.0000668859649, + +0.0007293859649, +0.0011712719298, +0.0010440789474, +0.0004752192982, + -0.0002677631579, -0.0009100877193, -0.0011644736842, -0.0009035087719, + -0.0002142543860, +0.0005085526316, +0.0008699561404, +0.0007361842105, + +0.0003010964912, -0.0001405701754, -0.0004350877193, -0.0004951754386, + -0.0003346491228, -0.0002208333333, -0.0004484649123, -0.0009168859649, + -0.0011980263158, -0.0010105263158, -0.0004752192982, +0.0001739035088, + +0.0008633771930, +0.0014589912281, +0.0016530701754, +0.0013250000000, + +0.0007094298246, +0.0000936403509, -0.0004217105263, -0.0006826754386, + -0.0005353070175, -0.0001337719298, +0.0001070175439, -0.0000267543860, + -0.0004752192982, -0.0009703947368, -0.0012782894737, -0.0012782894737, + -0.0009368421053, -0.0003078947368, +0.0003078947368, +0.0005890350877, + +0.0004015350877, -0.0001337719298, -0.0007427631579, -0.0010774122807, + -0.0009638157895, -0.0005085526316, -0.0000335526316, +0.0002008771930, + +0.0001337719298, -0.0000870614035, -0.0002811403509, -0.0003346491228, + -0.0002543859649, -0.0001673245614, -0.0002074561404, -0.0003212719298, + -0.0003881578947, -0.0002743421053, -0.0000201754386, +0.0001471491228, + +0.0001605263158, +0.0001337719298, +0.0001807017544, +0.0002410087719, + +0.0002208333333, +0.0000201754386, -0.0002945175439, -0.0004752192982, + -0.0003278508772, -0.0000067982456, +0.0002475877193, +0.0003815789474, + +0.0004350877193, +0.0003546052632, +0.0001271929825, -0.0001203947368, + -0.0002945175439, -0.0004684210526, -0.0007094298246, -0.0009368421053, + -0.0009570175439, -0.0007094298246, -0.0003546052632, -0.0000603070175, + +0.0000936403509, +0.0000267543860, -0.0003078947368, -0.0008098684211, + -0.0012381578947, -0.0013317982456, -0.0010506578947, -0.0006625000000, + -0.0004015350877, -0.0002543859649, -0.0001138157895, -0.0000067982456, + +0.0000267543860, +0.0000335526316, -0.0000469298246, -0.0002208333333, + -0.0003278508772, -0.0003278508772, -0.0003412280702, -0.0004550438596, + -0.0006024122807, -0.0005620614035, -0.0001872807018, +0.0003546052632, + +0.0007561403509, +0.0007629385965, +0.0003614035088, -0.0002475877193, + -0.0008098684211, -0.0011309210526, -0.0011578947368, -0.0008901315789, + -0.0003815789474, +0.0002276315789, +0.0007094298246, +0.0009035087719, + +0.0007896929825, +0.0004618421053, +0.0000870614035, -0.0001271929825, + -0.0001337719298, -0.0000469298246, -0.0000736842105, -0.0002811403509, + -0.0005153508772, -0.0005620614035, -0.0004015350877, -0.0001872807018, + -0.0000535087719, +0.0000067982456, +0.0000603070175, +0.0001138157895, + +0.0001539473684, +0.0002276315789, +0.0003546052632, +0.0005153508772, + +0.0006024122807, +0.0005688596491, +0.0004416666667, +0.0002543859649, + +0.0000603070175, +0.0000133771930, +0.0000936403509, +0.0001940789474, + +0.0001872807018, +0.0000067982456, -0.0002743421053, -0.0004951754386, + -0.0005353070175, -0.0004217105263, -0.0003144736842, -0.0002543859649, + -0.0001940789474, -0.0001605263158, -0.0002410087719, -0.0004618421053, + -0.0006425438596, -0.0005956140351, -0.0003881578947, -0.0001807017544, + -0.0000401315789, +0.0000736842105, +0.0002208333333, +0.0002677631579, + +0.0001673245614, +0.0000469298246, +0.0000335526316, +0.0001471491228, + +0.0003747807018, +0.0006357456140, +0.0009771929825, +0.0013451754386, + +0.0016129385965, +0.0016730263158, +0.0014589912281, +0.0009771929825, + +0.0004484649123, +0.0001271929825, +0.0000802631579, +0.0002543859649, + +0.0005756578947, +0.0009436403509, +0.0012046052632, +0.0012313596491, + +0.0010708333333, +0.0008500000000, +0.0005421052632, +0.0001471491228, + -0.0002008771930, -0.0003881578947, -0.0003815789474, -0.0002677631579, + -0.0001271929825, +0.0000401315789, +0.0002074561404, +0.0003546052632, + +0.0004951754386, +0.0006223684211, +0.0006960526316, +0.0007293859649, + +0.0006960526316, +0.0005822368421, +0.0003278508772, -0.0000668859649, + -0.0005287280702, -0.0009100877193, -0.0010574561404, -0.0009502192982, + -0.0007629385965, -0.0006758771930, -0.0007228070175, -0.0008164473684, + -0.0008901315789, -0.0008967105263, -0.0008098684211, -0.0006157894737, + -0.0003346491228, +0.0000000000000, +0.0003480263158, +0.0005756578947, + +0.0005554824561, +0.0003346491228, +0.0001004385965, +0.0000535087719, + +0.0001940789474, +0.0003212719298, +0.0002208333333, -0.0001004385965, + -0.0004951754386, -0.0007561403509, -0.0008298245614, -0.0007561403509, + -0.0005890350877, -0.0003747807018, -0.0001138157895, +0.0001337719298, + +0.0003278508772, +0.0004350877193, +0.0004618421053, +0.0004282894737, + +0.0003278508772, +0.0002074561404, +0.0001138157895, +0.0000267543860, + -0.0001004385965, -0.0003144736842, -0.0005153508772, -0.0006157894737, + -0.0006692982456, -0.0007160087719, -0.0007026315789, -0.0006089912281, + -0.0005019736842, -0.0004015350877, -0.0002543859649, -0.0000936403509, + +0.0000000000000, -0.0000603070175, -0.0002208333333, -0.0003747807018, + -0.0004752192982, -0.0004885964912, -0.0003679824561, -0.0001605263158, + +0.0000668859649, +0.0002543859649, +0.0004083333333, +0.0006089912281, + +0.0008500000000, +0.0010239035088, +0.0010440789474, +0.0009302631579, + +0.0008232456140, +0.0007896929825, +0.0007763157895, +0.0007495614035, + +0.0007561403509, +0.0007763157895, +0.0006892543860, +0.0004484649123, + +0.0001070175439, -0.0001070175439, -0.0000335526316, +0.0002609649123, + +0.0004885964912, +0.0004752192982, +0.0003078947368, +0.0000870614035, + -0.0001405701754, -0.0002811403509, -0.0003010964912, -0.0002743421053, + -0.0002945175439, -0.0003010964912, -0.0002543859649, -0.0002142543860, + -0.0002609649123, -0.0003212719298, -0.0002677631579, -0.0000668859649, + +0.0002142543860, +0.0004282894737, +0.0004752192982, +0.0003480263158, + +0.0001203947368, -0.0000535087719, -0.0001405701754, -0.0001539473684, + -0.0001004385965, +0.0000067982456, +0.0001004385965, +0.0001471491228, + +0.0001337719298, +0.0000335526316, -0.0001138157895, -0.0002276315789, + -0.0002743421053, -0.0002609649123, -0.0001138157895, +0.0002475877193, + +0.0007629385965, +0.0011846491228, +0.0013050438596, +0.0010842105263, + +0.0006758771930, +0.0003010964912, +0.0001739035088, +0.0003278508772, + +0.0005890350877, +0.0007896929825, +0.0008833333333, +0.0008565789474, + +0.0007361842105, +0.0005421052632, +0.0003212719298, +0.0001203947368, + +0.0000067982456, +0.0000469298246, +0.0002475877193, +0.0004885964912, + +0.0006357456140, +0.0005890350877, +0.0003679824561, +0.0000469298246, + -0.0002410087719, -0.0003747807018, -0.0002609649123, -0.0000067982456, + +0.0001807017544, +0.0001807017544, -0.0000401315789, -0.0004350877193, + -0.0008164473684, -0.0009703947368, -0.0008098684211, -0.0004550438596, + -0.0001337719298, -0.0000133771930, -0.0001471491228, -0.0004817982456, + -0.0008366228070, -0.0009905701754, -0.0008901315789, -0.0006291666667, + -0.0003614035088, -0.0002342105263, -0.0002342105263, -0.0002475877193, + -0.0002074561404, -0.0000668859649, +0.0001471491228, +0.0003480263158, + +0.0004817982456, +0.0005688596491, +0.0005421052632, +0.0003614035088, + +0.0001004385965, -0.0001004385965, -0.0001337719298, +0.0000267543860, + +0.0002543859649, +0.0004149122807, +0.0004752192982, +0.0004684210526, + +0.0004350877193, +0.0003881578947, +0.0002811403509, +0.0001539473684, + -0.0000067982456, -0.0001807017544, -0.0002743421053, -0.0001405701754, + +0.0002008771930, +0.0005956140351, +0.0008500000000, +0.0008901315789, + +0.0007293859649, +0.0004684210526, +0.0001872807018, -0.0000267543860, + -0.0001271929825, -0.0001271929825, -0.0001138157895, -0.0001605263158, + -0.0003212719298, -0.0005085526316, -0.0005353070175, -0.0003278508772, + +0.0000000000000, +0.0002677631579, +0.0003346491228, +0.0001739035088, + -0.0001807017544, -0.0005756578947, -0.0007964912281, -0.0007629385965, + -0.0005822368421, -0.0004217105263, -0.0003747807018, -0.0004149122807, + -0.0004350877193, -0.0003815789474, -0.0002475877193, -0.0000736842105, + +0.0000736842105, +0.0001070175439, -0.0000668859649, -0.0003949561404, + -0.0006758771930, -0.0007361842105, -0.0004951754386, -0.0000802631579, + +0.0003010964912, +0.0004282894737, +0.0002008771930, -0.0002609649123, + -0.0006425438596, -0.0007427631579, -0.0005890350877, -0.0002945175439, + +0.0000000000000, +0.0001872807018, +0.0001872807018, +0.0000936403509, + +0.0000335526316, +0.0000802631579, +0.0001471491228, +0.0001539473684, + +0.0001004385965, +0.0000535087719, +0.0001004385965, +0.0001940789474, + +0.0002410087719, +0.0002208333333, +0.0001739035088, +0.0000603070175, + -0.0001203947368, -0.0003078947368, -0.0004350877193, -0.0004350877193, + -0.0003144736842, -0.0001673245614, -0.0000603070175, -0.0000133771930, + -0.0000802631579, -0.0002410087719, -0.0004350877193, -0.0005219298246, + -0.0004484649123, -0.0002677631579, -0.0000870614035, +0.0000267543860, + +0.0000668859649, +0.0000535087719, +0.0000000000000, -0.0001539473684, + -0.0003815789474, -0.0005554824561, -0.0005688596491, -0.0004083333333, + -0.0001539473684, +0.0001203947368, +0.0003747807018, +0.0005554824561, + +0.0005756578947, +0.0004484649123, +0.0002475877193, +0.0000668859649, + -0.0000535087719, -0.0000870614035, -0.0000133771930, +0.0001004385965, + +0.0002008771930, +0.0001872807018, +0.0000668859649, -0.0000201754386, + +0.0000000000000, +0.0000802631579, +0.0001739035088, +0.0002811403509, + +0.0003747807018, +0.0003881578947, +0.0002811403509, +0.0001004385965, + -0.0000668859649, -0.0002142543860, -0.0002811403509, -0.0002609649123, + -0.0001940789474, -0.0001004385965, -0.0000401315789, -0.0001138157895, + -0.0003010964912, -0.0004618421053, -0.0005353070175, -0.0005421052632, + -0.0004817982456, -0.0003412280702, -0.0001004385965, +0.0001405701754, + +0.0003078947368, +0.0003881578947, +0.0003815789474, +0.0002877192982, + +0.0001004385965, -0.0000870614035, -0.0001673245614, -0.0001070175439, + -0.0000067982456, -0.0000067982456, -0.0001471491228, -0.0003546052632, + -0.0004885964912, -0.0005019736842, -0.0004083333333, -0.0002410087719, + -0.0000335526316, +0.0001271929825, +0.0002142543860, +0.0002276315789, + +0.0001539473684, -0.0000335526316, -0.0002945175439, -0.0004885964912, + -0.0005287280702, -0.0003278508772, +0.0000401315789, +0.0003815789474, + +0.0004684210526, +0.0002877192982, -0.0000201754386, -0.0002945175439, + -0.0004484649123, -0.0004350877193, -0.0003078947368, -0.0001405701754, + -0.0000469298246, -0.0000535087719, -0.0001337719298, -0.0002410087719, + -0.0002743421053, -0.0001605263158, +0.0000267543860, +0.0001940789474, + +0.0002609649123, +0.0001940789474, +0.0000469298246, -0.0000802631579, + -0.0001337719298, -0.0000870614035, +0.0000535087719, +0.0002475877193, + +0.0004217105263, +0.0005287280702, +0.0005219298246, +0.0003949561404, + +0.0002276315789, +0.0000936403509, +0.0000133771930, +0.0000000000000, + +0.0000267543860, +0.0000603070175, +0.0000668859649, +0.0000603070175, + +0.0000401315789, +0.0000067982456, +0.0000067982456, +0.0000736842105, + +0.0002410087719, +0.0004416666667, +0.0006425438596, +0.0007763157895, + +0.0008164473684, +0.0007495614035, +0.0005822368421, +0.0002945175439, + -0.0000201754386, -0.0002142543860, -0.0002074561404, -0.0001004385965, + -0.0000067982456, +0.0000469298246, +0.0000870614035, +0.0001203947368, + +0.0001271929825, +0.0001070175439, +0.0001203947368, +0.0001539473684, + +0.0001807017544, +0.0002142543860, +0.0002811403509, +0.0003212719298, + +0.0003346491228, +0.0003212719298, +0.0003010964912, +0.0002811403509, + +0.0002677631579, +0.0002276315789, +0.0001673245614, +0.0001337719298, + +0.0001405701754, +0.0001605263158, +0.0001673245614, +0.0001337719298, + +0.0000802631579, +0.0000201754386, -0.0000335526316, -0.0000668859649, + -0.0000736842105, -0.0000736842105, -0.0001070175439, -0.0001471491228, + -0.0001271929825, -0.0000603070175, -0.0000469298246, -0.0000736842105, + -0.0000535087719, +0.0000067982456, +0.0000335526316, -0.0000335526316, + -0.0001605263158, -0.0002811403509, -0.0003815789474, -0.0004149122807, + -0.0003412280702, -0.0001605263158, +0.0000603070175, +0.0002342105263, + +0.0003614035088, +0.0004282894737, +0.0003747807018, +0.0001739035088, + -0.0000736842105, -0.0002677631579, -0.0003412280702, -0.0003346491228, + -0.0002677631579, -0.0001539473684, +0.0000401315789, +0.0002945175439, + +0.0005019736842, +0.0005620614035, +0.0004618421053, +0.0002609649123, + +0.0000535087719, -0.0001070175439, -0.0001673245614, -0.0000936403509, + +0.0000936403509, +0.0003278508772, +0.0005153508772, +0.0006024122807, + +0.0005620614035, +0.0004217105263, +0.0002074561404, -0.0000067982456, + -0.0001070175439, -0.0000603070175, +0.0000133771930, +0.0000267543860, + -0.0000267543860, -0.0000936403509, -0.0001138157895, -0.0000870614035, + -0.0000802631579, -0.0001271929825, -0.0001739035088, -0.0001673245614, + -0.0001203947368, -0.0000936403509, -0.0001271929825, -0.0001807017544, + -0.0002008771930, -0.0001739035088, -0.0001405701754, -0.0001203947368, + -0.0000936403509, -0.0000133771930, +0.0001673245614, +0.0003546052632, + +0.0004217105263, +0.0003078947368, +0.0000736842105, -0.0001872807018, + -0.0003949561404, -0.0004817982456, -0.0004282894737, -0.0002475877193, + -0.0000067982456, +0.0002208333333, +0.0003949561404, +0.0005019736842, + +0.0004885964912, +0.0003747807018, +0.0002208333333, +0.0000603070175, + -0.0000802631579, -0.0002074561404, -0.0002743421053, -0.0002945175439, + -0.0003144736842, -0.0003278508772, -0.0003010964912, -0.0002008771930, + -0.0000936403509, -0.0000401315789, -0.0000335526316, -0.0000802631579, + -0.0001807017544, -0.0002877192982, -0.0003278508772, -0.0002475877193, + -0.0000133771930, +0.0003010964912, +0.0005822368421, +0.0007361842105, + +0.0006892543860, +0.0003881578947, -0.0000335526316, -0.0003614035088, + -0.0004484649123, -0.0003480263158, -0.0001605263158, +0.0000469298246, + +0.0002342105263, +0.0003144736842, +0.0002410087719, +0.0000469298246, + -0.0001739035088, -0.0003212719298, -0.0003679824561, -0.0003412280702, + -0.0002609649123, -0.0001405701754, -0.0000936403509, -0.0001605263158, + -0.0002543859649, -0.0002609649123, -0.0001138157895, +0.0001070175439, + +0.0003078947368, +0.0003747807018, +0.0002811403509, +0.0000668859649, + -0.0001807017544, -0.0004282894737, -0.0006425438596, -0.0007964912281, + -0.0007964912281, -0.0006157894737, -0.0003144736842, +0.0000000000000, + +0.0002677631579, +0.0004550438596, +0.0005153508772, +0.0004484649123, + +0.0003346491228, +0.0002276315789, +0.0001203947368, +0.0000000000000, + -0.0001605263158, -0.0002677631579, -0.0002811403509, -0.0002008771930, + -0.0000335526316, +0.0002008771930, +0.0004217105263, +0.0005688596491, + +0.0006089912281, +0.0005219298246, +0.0003412280702, +0.0001405701754, + +0.0000000000000, -0.0000201754386, +0.0000535087719, +0.0002276315789, + +0.0004282894737, +0.0005353070175, +0.0004885964912, +0.0002877192982, + +0.0000067982456, -0.0002342105263, -0.0003679824561, -0.0003815789474, + -0.0002811403509, -0.0001070175439, +0.0000469298246, +0.0000936403509, + +0.0000335526316, -0.0000535087719, -0.0001070175439, -0.0000802631579, + +0.0000133771930, +0.0000936403509, +0.0000870614035, -0.0000133771930, + -0.0001872807018, -0.0003949561404, -0.0005486842105, -0.0005688596491, + -0.0004885964912, -0.0004282894737, -0.0004282894737, -0.0004752192982, + -0.0005353070175, -0.0006024122807, -0.0006758771930, -0.0007026315789, + -0.0006291666667, -0.0004416666667, -0.0002208333333, -0.0000469298246, + +0.0000000000000, -0.0000535087719, -0.0001605263158, -0.0002342105263, + -0.0002475877193, -0.0001673245614, +0.0000000000000, +0.0001337719298, + +0.0001605263158, +0.0000736842105, -0.0000469298246, -0.0001739035088, + -0.0002677631579, -0.0002945175439, -0.0002945175439, -0.0003078947368, + -0.0003614035088, -0.0003614035088, -0.0002945175439, -0.0001539473684, + -0.0000335526316, +0.0000133771930, -0.0000133771930, -0.0000736842105, + -0.0001739035088, -0.0003010964912, -0.0004282894737, -0.0004684210526, + -0.0003881578947, -0.0002410087719, -0.0000401315789, +0.0001807017544, + +0.0003679824561, +0.0004149122807, +0.0003212719298, +0.0001605263158, + +0.0000000000000, -0.0001203947368, -0.0001337719298, -0.0000401315789, + +0.0000603070175, +0.0000870614035, +0.0000401315789, -0.0000267543860, + -0.0000870614035, -0.0001138157895, -0.0001004385965, -0.0000802631579, + -0.0000668859649, -0.0000401315789, +0.0000736842105, +0.0002543859649, + +0.0003949561404, +0.0003815789474, +0.0002142543860, +0.0000000000000, + -0.0001605263158, -0.0002543859649, -0.0002811403509, -0.0002342105263, + -0.0001271929825, -0.0000133771930, +0.0000469298246, +0.0000401315789, + -0.0000201754386, -0.0001337719298, -0.0002276315789, -0.0002475877193, + -0.0002008771930, -0.0000736842105, +0.0001405701754, +0.0003614035088, + +0.0004752192982, +0.0004951754386, +0.0004684210526, +0.0004350877193, + +0.0003679824561, +0.0002877192982, +0.0002543859649, +0.0002945175439, + +0.0003480263158, +0.0003278508772, +0.0002208333333, +0.0001203947368, + +0.0000802631579, +0.0000668859649, +0.0000401315789, +0.0000335526316, + +0.0000603070175, +0.0001004385965, +0.0001539473684, +0.0001807017544, + +0.0001673245614, +0.0001203947368, +0.0000870614035, +0.0001004385965, + +0.0001203947368, +0.0000870614035, -0.0000335526316, -0.0001872807018, + -0.0003144736842, -0.0004217105263, -0.0004550438596, -0.0003546052632, + -0.0001739035088, +0.0000000000000, +0.0001405701754, +0.0002342105263, + +0.0002475877193, +0.0002008771930, +0.0001605263158, +0.0001807017544, + +0.0002945175439, +0.0004484649123, +0.0005085526316, +0.0004149122807, + +0.0002276315789, +0.0000133771930, -0.0001471491228, -0.0002074561404, + -0.0001471491228, -0.0000401315789, +0.0001070175439, +0.0002743421053, + +0.0003747807018, +0.0003614035088, +0.0002677631579, +0.0001673245614, + +0.0001004385965, +0.0000802631579, +0.0000802631579, +0.0000802631579, + +0.0001070175439, +0.0001271929825, +0.0001203947368, +0.0001271929825, + +0.0001605263158, +0.0002276315789, +0.0002877192982, +0.0003144736842, + +0.0002743421053, +0.0001539473684, -0.0000267543860, -0.0001940789474, + -0.0002342105263, -0.0001539473684, -0.0000603070175, -0.0000267543860, + -0.0000335526316, -0.0000535087719, -0.0001004385965, -0.0001807017544, + -0.0002142543860, -0.0001138157895, +0.0000603070175, +0.0002410087719, + +0.0003949561404, +0.0004951754386, +0.0004817982456, +0.0003278508772, + +0.0000736842105, -0.0000936403509, -0.0001138157895, +0.0000000000000, + +0.0002008771930, +0.0004282894737, +0.0005287280702, +0.0004350877193, + +0.0002342105263, +0.0000133771930, -0.0001673245614, -0.0002877192982, + -0.0003412280702, -0.0003346491228, -0.0002743421053, -0.0001337719298, + +0.0000201754386, +0.0001203947368, +0.0001070175439, +0.0000000000000, + -0.0001271929825, -0.0001673245614, -0.0000603070175, +0.0001471491228, + +0.0003614035088, +0.0004282894737, +0.0002945175439, +0.0000535087719, + -0.0001337719298, -0.0001872807018, -0.0001070175439, -0.0000067982456, + +0.0000335526316, -0.0000201754386, -0.0001673245614, -0.0003346491228, + -0.0004149122807, -0.0003346491228, -0.0001271929825, +0.0000802631579, + +0.0002208333333, +0.0002475877193, +0.0001739035088, +0.0000401315789, + -0.0000936403509, -0.0001405701754, -0.0000401315789, +0.0001471491228, + +0.0003010964912, +0.0003144736842, +0.0001940789474, +0.0000469298246, + +0.0000000000000, +0.0000802631579, +0.0002342105263, +0.0002945175439, + +0.0002008771930, +0.0000401315789, -0.0001070175439, -0.0001872807018, + -0.0001271929825, +0.0000535087719, +0.0002609649123, +0.0003747807018, + +0.0003212719298, +0.0001337719298, -0.0001138157895, -0.0003346491228, + -0.0004282894737, -0.0003546052632, -0.0001337719298, +0.0001203947368, + +0.0003144736842, +0.0003881578947, +0.0003679824561, +0.0002811403509, + +0.0001337719298, -0.0000335526316, -0.0001673245614, -0.0002342105263, + -0.0002475877193, -0.0002543859649, -0.0002743421053, -0.0002945175439, + -0.0002342105263, -0.0000870614035, +0.0000469298246, +0.0000535087719, + -0.0000201754386, -0.0001004385965, -0.0001940789474, -0.0003010964912, + -0.0003546052632, -0.0003144736842, -0.0001940789474, -0.0000401315789, + +0.0001138157895, +0.0002342105263, +0.0002609649123, +0.0001872807018, + +0.0000668859649, -0.0000603070175, -0.0001471491228, -0.0002008771930, + -0.0002609649123, -0.0003346491228, -0.0003480263158, -0.0002410087719, + -0.0000736842105, +0.0000535087719, +0.0001070175439, +0.0001138157895, + +0.0000870614035, +0.0000133771930, -0.0001004385965, -0.0002276315789, + -0.0003078947368, -0.0003480263158, -0.0003614035088, -0.0002945175439, + -0.0001605263158, -0.0000133771930, +0.0000870614035, +0.0000870614035, + +0.0000133771930, -0.0000335526316, -0.0000335526316, +0.0000067982456, + +0.0001138157895, +0.0002811403509, +0.0004015350877, +0.0003815789474, + +0.0002008771930, -0.0000469298246, -0.0002410087719, -0.0002877192982, + -0.0001807017544, +0.0000133771930, +0.0002008771930, +0.0002945175439, + +0.0003144736842, +0.0002743421053, +0.0001605263158, +0.0000201754386, + -0.0000603070175, -0.0000802631579, -0.0000802631579, -0.0001070175439, + -0.0001271929825, -0.0001405701754, -0.0001807017544, -0.0002609649123, + -0.0003346491228, -0.0003480263158, -0.0002811403509, -0.0001872807018, + -0.0001203947368, -0.0000603070175, +0.0000000000000, +0.0000535087719, + +0.0000870614035, +0.0000936403509, +0.0001070175439, +0.0001271929825, + +0.0000870614035, -0.0000267543860, -0.0001539473684, -0.0002609649123, + -0.0003480263158, -0.0003881578947, -0.0003346491228, -0.0001739035088, + +0.0000133771930, +0.0001405701754, +0.0000936403509, -0.0000802631579, + -0.0003212719298, -0.0005019736842, -0.0005421052632, -0.0004416666667, + -0.0002543859649, -0.0000535087719, +0.0000936403509, +0.0001539473684, + +0.0001337719298, +0.0000870614035, +0.0000802631579, +0.0001004385965, + +0.0000936403509, +0.0000603070175, +0.0000201754386, +0.0000133771930, + +0.0000267543860, +0.0000067982456, -0.0000802631579, -0.0002276315789, + -0.0003412280702, -0.0003546052632, -0.0002609649123, -0.0001337719298, + +0.0000133771930, +0.0001940789474, +0.0003480263158, +0.0004350877193, + +0.0004282894737, +0.0003412280702, +0.0001807017544, +0.0000335526316, + -0.0000067982456, +0.0000802631579, +0.0002811403509, +0.0004951754386, + +0.0006089912281, +0.0006223684211, +0.0005554824561, +0.0004083333333, + +0.0001807017544, -0.0000736842105, -0.0002811403509, -0.0003881578947, + -0.0003815789474, -0.0002811403509, -0.0001004385965, +0.0000802631579, + +0.0001940789474, +0.0001605263158, +0.0000000000000, -0.0001673245614, + -0.0002410087719, -0.0002074561404, -0.0001203947368, -0.0000267543860, + +0.0000668859649, +0.0001405701754, +0.0001673245614, +0.0001673245614, + +0.0001605263158, +0.0001138157895, +0.0000401315789, -0.0000067982456, + -0.0000201754386, -0.0000469298246, -0.0001070175439, -0.0001739035088, + -0.0002142543860, -0.0002074561404, -0.0001739035088, -0.0001673245614, + -0.0001940789474, -0.0002475877193, -0.0003212719298, -0.0003614035088, + -0.0002877192982, -0.0000802631579, +0.0001739035088, +0.0003881578947, + +0.0004550438596, +0.0003815789474, +0.0002543859649, +0.0001539473684, + +0.0001203947368, +0.0001739035088, +0.0003010964912, +0.0004282894737, + +0.0005019736842, +0.0005019736842, +0.0004350877193, +0.0002945175439, + +0.0001271929825, +0.0000000000000, -0.0000335526316, -0.0000067982456, + +0.0000133771930, +0.0000133771930, +0.0000201754386, +0.0000133771930, + +0.0000000000000, +0.0000133771930, +0.0000870614035, +0.0001673245614, + +0.0002142543860, +0.0001940789474, +0.0001471491228, +0.0001271929825, + +0.0001605263158, +0.0002475877193, +0.0003412280702, +0.0004015350877, + +0.0003881578947, +0.0003144736842, +0.0002342105263, +0.0001605263158, + +0.0000736842105, -0.0000335526316, -0.0001271929825, -0.0001673245614, + -0.0001337719298, -0.0000603070175, -0.0000067982456, -0.0000067982456, + -0.0000469298246, -0.0001070175439, -0.0001673245614, -0.0001807017544, + -0.0001271929825, -0.0000335526316, +0.0000535087719, +0.0001405701754, + +0.0001940789474, +0.0002142543860, +0.0002074561404, +0.0001605263158, + +0.0000936403509, +0.0000067982456, -0.0000936403509, -0.0001539473684, + -0.0001807017544, -0.0001872807018, -0.0001673245614, -0.0001070175439, + -0.0000133771930, +0.0000870614035, +0.0001605263158, +0.0001940789474, + +0.0001673245614, +0.0000603070175, -0.0001004385965, -0.0002342105263, + -0.0002342105263, -0.0001070175439, +0.0000603070175, +0.0001807017544, + +0.0002142543860, +0.0001807017544, +0.0001138157895, +0.0000870614035, + +0.0001070175439, +0.0001605263158, +0.0002008771930, +0.0001739035088, + +0.0000802631579, -0.0000401315789, -0.0001673245614, -0.0002475877193, + -0.0002609649123, -0.0002142543860, -0.0001337719298, -0.0000736842105, + -0.0000535087719, -0.0000603070175, -0.0000802631579, -0.0001004385965, + -0.0001004385965, -0.0000603070175, +0.0000067982456, +0.0000870614035, + +0.0001070175439, +0.0000668859649, -0.0000067982456, -0.0001004385965, + -0.0001739035088, -0.0001872807018, -0.0001739035088, -0.0001539473684, + -0.0001138157895, -0.0000267543860, +0.0001070175439, +0.0002475877193, + +0.0003412280702, +0.0003546052632, +0.0002677631579, +0.0001337719298, + +0.0000201754386, -0.0000335526316, -0.0000201754386, +0.0000133771930, + +0.0000133771930, -0.0000535087719, -0.0001605263158, -0.0002475877193, + -0.0002877192982, -0.0002945175439, -0.0002543859649, -0.0001337719298, + +0.0000133771930, +0.0001471491228, +0.0001940789474, +0.0001673245614, + +0.0000936403509, +0.0000000000000, -0.0001070175439, -0.0001940789474, + -0.0001940789474, -0.0001004385965, -0.0000067982456, +0.0000000000000, + -0.0000736842105, -0.0001739035088, -0.0002543859649, -0.0003010964912, + -0.0003078947368, -0.0002276315789, -0.0001203947368, -0.0000603070175, + -0.0000535087719, -0.0000401315789, +0.0000000000000, +0.0000401315789, + +0.0000668859649, +0.0000802631579, +0.0000936403509, +0.0001203947368, + +0.0001739035088, +0.0002609649123, +0.0003412280702, +0.0003546052632, + +0.0002877192982, +0.0001673245614, +0.0000067982456, -0.0001138157895, + -0.0001271929825, -0.0000267543860, +0.0001004385965, +0.0002008771930, + +0.0002475877193, +0.0002342105263, +0.0001739035088, +0.0000936403509, + +0.0000535087719, +0.0000668859649, +0.0000936403509, +0.0000870614035, + +0.0000401315789, +0.0000000000000, -0.0000067982456, +0.0000067982456, + +0.0000000000000, -0.0000267543860, -0.0000469298246, -0.0000335526316, + -0.0000201754386, -0.0000267543860, -0.0000535087719, -0.0000870614035, + -0.0000936403509, -0.0000870614035, -0.0000603070175, +0.0000067982456, + +0.0000936403509, +0.0001337719298, +0.0000802631579, -0.0000201754386, + -0.0001203947368, -0.0002475877193, -0.0003881578947, -0.0004752192982, + -0.0004416666667, -0.0003212719298, -0.0001940789474, -0.0000936403509, + -0.0000469298246, -0.0000535087719, -0.0001070175439, -0.0001605263158, + -0.0001872807018, -0.0002008771930, -0.0001673245614, -0.0000936403509, + +0.0000000000000, +0.0000603070175, +0.0000802631579, +0.0000535087719, + -0.0000133771930, -0.0001337719298, -0.0002410087719, -0.0002677631579, + -0.0002543859649, -0.0002410087719, -0.0002074561404, -0.0001271929825, + -0.0000133771930, +0.0001004385965, +0.0001739035088, +0.0001807017544, + +0.0001203947368, +0.0000201754386, -0.0000736842105, -0.0001138157895, + -0.0000870614035, -0.0000201754386, +0.0000201754386, +0.0000067982456, + -0.0000668859649, -0.0001673245614, -0.0002342105263, -0.0002543859649, + -0.0002342105263, -0.0001739035088, -0.0001203947368, -0.0000870614035, + -0.0001203947368, -0.0001872807018, -0.0002276315789, -0.0001807017544, + -0.0000936403509, -0.0000201754386, -0.0000067982456, -0.0000335526316, + -0.0000335526316, -0.0000067982456, +0.0000335526316, +0.0001004385965, + +0.0001872807018, +0.0002543859649, +0.0002811403509, +0.0002410087719, + +0.0001405701754, +0.0000201754386, -0.0000736842105, -0.0000870614035, + +0.0000000000000, +0.0001138157895, +0.0001539473684, +0.0000335526316, + -0.0001739035088, -0.0003815789474, -0.0005219298246, -0.0005620614035, + -0.0004817982456, -0.0003078947368, -0.0001405701754, -0.0000469298246, + -0.0000603070175, -0.0001337719298, -0.0001940789474, -0.0001739035088, + -0.0000668859649, +0.0000936403509, +0.0002276315789, +0.0002543859649, + +0.0001539473684, +0.0000267543860, -0.0000335526316, -0.0000401315789, + -0.0000335526316, -0.0000469298246, -0.0000469298246, -0.0000067982456, + +0.0000335526316, +0.0000668859649, +0.0000936403509, +0.0001271929825, + +0.0001605263158, +0.0001739035088, +0.0001739035088, +0.0001471491228, + +0.0000870614035, +0.0000267543860, +0.0000133771930, +0.0000603070175, + +0.0001539473684, +0.0002811403509, +0.0003949561404, +0.0004416666667, + +0.0004015350877, +0.0002743421053, +0.0001203947368, +0.0000000000000, + -0.0000267543860, +0.0000469298246, +0.0001605263158, +0.0002410087719, + +0.0002743421053, +0.0002743421053, +0.0002208333333, +0.0001138157895, + +0.0000133771930, -0.0000469298246, -0.0000603070175, -0.0000401315789, + +0.0000000000000, +0.0000267543860, +0.0000201754386, -0.0000201754386, + -0.0000936403509, -0.0001203947368, -0.0001138157895, -0.0001070175439, + -0.0001337719298, -0.0001872807018, -0.0002342105263, -0.0002410087719, + -0.0001940789474, -0.0001203947368, -0.0000469298246, +0.0000000000000, + +0.0000133771930, +0.0000067982456, -0.0000267543860, -0.0000736842105, + -0.0001070175439, -0.0001138157895, -0.0001004385965, -0.0000736842105, + -0.0000133771930, +0.0000870614035, +0.0002142543860, +0.0002877192982, + +0.0002609649123, +0.0001807017544, +0.0001070175439, +0.0000802631579, + +0.0001271929825, +0.0002410087719, +0.0003480263158, +0.0003614035088, + +0.0002475877193, +0.0000802631579, -0.0000802631579, -0.0002142543860, + -0.0002877192982, -0.0002543859649, -0.0001070175439, +0.0000870614035, + +0.0002543859649, +0.0003278508772, +0.0002743421053, +0.0001405701754, + +0.0000133771930, -0.0000469298246, -0.0000401315789, -0.0000201754386, + -0.0000469298246, -0.0001271929825, -0.0002074561404, -0.0002475877193, + -0.0002074561404, -0.0000870614035, +0.0000535087719, +0.0001539473684, + +0.0001673245614, +0.0001271929825, +0.0000668859649, +0.0000067982456, + -0.0000067982456, +0.0000335526316, +0.0001271929825, +0.0001673245614, + +0.0001070175439, -0.0000267543860, -0.0001605263158, -0.0002208333333, + -0.0001940789474, -0.0001203947368, -0.0000401315789, +0.0000201754386, + +0.0000469298246, +0.0000267543860, -0.0000201754386, -0.0000603070175, + -0.0000335526316, +0.0000535087719, +0.0001605263158, +0.0002410087719, + +0.0002342105263, +0.0001471491228, +0.0000267543860, -0.0000736842105, + -0.0001539473684, -0.0002008771930, -0.0002008771930, -0.0001673245614, + -0.0001070175439, -0.0000401315789, +0.0000335526316, +0.0001471491228, + +0.0002543859649, +0.0003078947368, +0.0002945175439, +0.0002208333333, + +0.0000936403509, -0.0000133771930, -0.0000736842105, -0.0000736842105, + -0.0000267543860, +0.0000335526316, +0.0001138157895, +0.0001673245614, + +0.0001739035088, +0.0001471491228, +0.0001070175439, +0.0000603070175, + +0.0000267543860, +0.0000267543860, +0.0000603070175, +0.0001337719298, + +0.0002008771930, +0.0002142543860, +0.0001271929825, -0.0000335526316, + -0.0001807017544, -0.0002342105263, -0.0001539473684, +0.0000000000000, + +0.0001337719298, +0.0001739035088, +0.0001138157895, +0.0000000000000, + -0.0000936403509, -0.0001405701754, -0.0001337719298, -0.0000936403509, + -0.0000401315789, -0.0000133771930, -0.0000067982456, +0.0000000000000, + +0.0000401315789, +0.0000870614035, +0.0001070175439, +0.0000802631579, + +0.0000335526316, -0.0000267543860, -0.0000736842105, -0.0000802631579, + -0.0000335526316, -0.0000067982456, -0.0000267543860, -0.0000668859649, + -0.0000802631579, -0.0000469298246, +0.0000133771930, +0.0000870614035, + +0.0001539473684, +0.0002008771930, +0.0002410087719, +0.0002276315789, + +0.0001605263158, +0.0000535087719, -0.0000535087719, -0.0001539473684, + -0.0002008771930, -0.0001807017544, -0.0001070175439, -0.0000267543860, + +0.0000000000000, -0.0000201754386, -0.0000936403509, -0.0001807017544, + -0.0002609649123, -0.0003412280702, -0.0003815789474, -0.0003346491228, + -0.0002208333333, -0.0001138157895, -0.0000535087719, -0.0000535087719, + -0.0000936403509, -0.0001405701754, -0.0001271929825, -0.0000603070175, + +0.0000000000000, +0.0000201754386, +0.0000133771930, +0.0000469298246, + +0.0001271929825, +0.0002208333333, +0.0002743421053, +0.0002543859649, + +0.0001940789474, +0.0001138157895, +0.0000335526316, -0.0000133771930, + -0.0000133771930, +0.0000267543860, +0.0000802631579, +0.0001070175439, + +0.0001004385965, +0.0001004385965, +0.0001138157895, +0.0001271929825, + +0.0001004385965, +0.0000401315789, -0.0000267543860, -0.0000802631579, + -0.0000936403509, -0.0000469298246, +0.0000469298246, +0.0001471491228, + +0.0002208333333, +0.0002142543860, +0.0001004385965, -0.0000535087719, + -0.0001940789474, -0.0002677631579, -0.0002410087719, -0.0001271929825, + +0.0000335526316, +0.0001940789474, +0.0002543859649, +0.0001872807018, + +0.0000469298246, -0.0001004385965, -0.0002074561404, -0.0002475877193, + -0.0002410087719, -0.0002208333333, -0.0001739035088, -0.0000870614035, + +0.0000133771930, +0.0001138157895, +0.0001539473684, +0.0001203947368, + +0.0000603070175, +0.0000067982456, -0.0000133771930, +0.0000067982456, + +0.0000335526316, +0.0000469298246, +0.0000469298246, +0.0000603070175, + +0.0000736842105, +0.0000469298246, -0.0000267543860, -0.0001203947368, + -0.0001807017544, -0.0001739035088, -0.0001070175439, +0.0000000000000, + +0.0001203947368, +0.0001940789474, +0.0002142543860, +0.0001739035088, + +0.0000870614035, +0.0000000000000, -0.0000603070175, -0.0000668859649, + -0.0000267543860, +0.0000201754386, +0.0000535087719, +0.0000535087719, + +0.0000668859649, +0.0001138157895, +0.0001539473684, +0.0001673245614, + +0.0001405701754, +0.0001203947368, +0.0001203947368, +0.0001405701754, + +0.0001739035088, +0.0002074561404, +0.0002276315789, +0.0002142543860, + +0.0001807017544, +0.0001605263158, +0.0001471491228, +0.0001004385965, + +0.0000335526316, -0.0000267543860, -0.0000802631579, -0.0001004385965, + -0.0000870614035, -0.0000267543860, +0.0000335526316, +0.0000535087719, + +0.0000201754386, -0.0000535087719, -0.0001673245614, -0.0002609649123, + -0.0003010964912, -0.0002877192982, -0.0002276315789, -0.0001539473684, + -0.0000736842105, -0.0000067982456, +0.0000469298246, +0.0000870614035, + +0.0000802631579, +0.0000201754386, -0.0000603070175, -0.0001539473684, + -0.0002142543860, -0.0002208333333, -0.0001471491228, -0.0000267543860, + +0.0000870614035, +0.0001337719298, +0.0000870614035, -0.0000201754386, + -0.0001337719298, -0.0002074561404, -0.0001940789474, -0.0000870614035, + +0.0000736842105, +0.0001940789474, +0.0002142543860, +0.0001405701754, + +0.0000469298246, -0.0000067982456, +0.0000000000000, +0.0000335526316, + +0.0000936403509, +0.0001739035088, +0.0002276315789, +0.0002342105263, + +0.0001872807018, +0.0001405701754, +0.0000936403509, +0.0000469298246, + +0.0000133771930, +0.0000067982456, +0.0000401315789, +0.0000736842105, + +0.0000802631579, +0.0000870614035, +0.0000936403509, +0.0001337719298, + +0.0001872807018, +0.0002475877193, +0.0002811403509, +0.0002543859649, + +0.0001739035088, +0.0000535087719, -0.0000401315789, -0.0000736842105, + -0.0000267543860, +0.0000603070175, +0.0001471491228, +0.0001673245614, + +0.0001203947368, +0.0000469298246, -0.0000133771930, -0.0000535087719, + -0.0000603070175, -0.0000603070175, -0.0000736842105, -0.0001070175439, + -0.0001138157895, -0.0000603070175, +0.0000267543860, +0.0001138157895, + +0.0001471491228, +0.0001203947368, +0.0000335526316, -0.0000668859649, + -0.0001605263158, -0.0002342105263, -0.0002475877193, -0.0001739035088, + -0.0000267543860, +0.0001070175439, +0.0001739035088, +0.0001539473684, + +0.0000469298246, -0.0000668859649, -0.0001605263158, -0.0002008771930, + -0.0001872807018, -0.0001203947368, -0.0000469298246, +0.0000000000000, + +0.0000000000000, -0.0000201754386, -0.0000401315789, -0.0000535087719, + -0.0000802631579, -0.0001337719298, -0.0001872807018, -0.0002342105263, + -0.0002677631579, -0.0002543859649, -0.0002008771930, -0.0001138157895, + -0.0000201754386, +0.0000267543860, +0.0000535087719, +0.0000535087719, + +0.0000469298246, +0.0000603070175, +0.0000870614035, +0.0001271929825, + +0.0001070175439, +0.0000267543860, -0.0000469298246, -0.0000603070175, + +0.0000133771930, +0.0001070175439, +0.0001539473684, +0.0001138157895, + +0.0000133771930, -0.0000802631579, -0.0001337719298, -0.0001138157895, + -0.0000401315789, +0.0000401315789, +0.0000936403509, +0.0001070175439, + +0.0000936403509, +0.0000603070175, +0.0000401315789, +0.0000401315789, + +0.0000335526316, +0.0000067982456, -0.0000469298246, -0.0001271929825, + -0.0002008771930, -0.0002475877193, -0.0002543859649, -0.0002342105263, + -0.0001940789474, -0.0001405701754, -0.0001070175439, -0.0001004385965, + -0.0000936403509, -0.0000603070175, -0.0000267543860, -0.0000067982456, + +0.0000000000000, +0.0000000000000, +0.0000000000000, -0.0000133771930, + -0.0000201754386, +0.0000000000000, +0.0000469298246, +0.0000802631579, + +0.0000668859649, +0.0000401315789, +0.0000267543860, +0.0000668859649, + +0.0001337719298, +0.0002074561404, +0.0002342105263, +0.0001872807018, + +0.0000736842105, -0.0000267543860, -0.0000870614035, -0.0000603070175, + +0.0000469298246, +0.0001739035088, +0.0002475877193, +0.0002074561404, + +0.0000603070175, -0.0001405701754, -0.0003278508772, -0.0004282894737, + -0.0003949561404, -0.0002410087719, -0.0000335526316, +0.0001337719298, + +0.0002276315789, +0.0002543859649, +0.0002475877193, +0.0002208333333, + +0.0002008771930, +0.0001807017544, +0.0001673245614, +0.0001539473684, + +0.0001203947368, +0.0000603070175, -0.0000335526316, -0.0001337719298, + -0.0002008771930, -0.0002208333333, -0.0002008771930, -0.0001539473684, + -0.0001004385965, -0.0000401315789, +0.0000000000000, +0.0000133771930, + +0.0000000000000, -0.0000469298246, -0.0001004385965, -0.0001271929825, + -0.0001070175439, -0.0000535087719, -0.0000267543860, -0.0000668859649, + -0.0001539473684, -0.0002342105263, -0.0002677631579, -0.0002276315789, + -0.0001203947368, -0.0000067982456, +0.0000535087719, +0.0000335526316, + -0.0000335526316, -0.0000802631579, -0.0000469298246, +0.0000603070175, + +0.0001872807018, +0.0002410087719, +0.0001940789474, +0.0000603070175, + -0.0001004385965, -0.0002410087719, -0.0003212719298, -0.0003346491228, + -0.0003010964912, -0.0002475877193, -0.0001872807018, -0.0001271929825, + -0.0000736842105, -0.0000067982456, +0.0000535087719, +0.0001271929825, + +0.0001872807018, +0.0002008771930, +0.0001872807018, +0.0001337719298, + +0.0000267543860, -0.0000936403509, -0.0001940789474, -0.0002410087719, + -0.0002276315789, -0.0001807017544, -0.0001405701754, -0.0001070175439, + -0.0000736842105, -0.0000335526316, +0.0000000000000, +0.0000668859649, + +0.0001405701754, +0.0002008771930, +0.0002074561404, +0.0001605263158, + +0.0000802631579, +0.0000133771930, -0.0000201754386, -0.0000335526316, + -0.0000201754386, +0.0000000000000, +0.0000067982456, +0.0000000000000, + -0.0000401315789, -0.0000603070175, -0.0000335526316, +0.0000267543860, + +0.0000870614035, +0.0000870614035, +0.0000335526316, -0.0000603070175, + -0.0001605263158, -0.0002074561404, -0.0001539473684, -0.0000067982456, + +0.0001471491228, +0.0002410087719, +0.0002410087719, +0.0001539473684, + +0.0000267543860, -0.0001004385965, -0.0001872807018, -0.0002074561404, + -0.0001539473684, -0.0000535087719, +0.0000201754386, +0.0000603070175, + +0.0000535087719, +0.0000401315789, +0.0000401315789, +0.0000335526316, + +0.0000401315789, +0.0000469298246, +0.0000802631579, +0.0001070175439, + +0.0001070175439, +0.0000736842105, +0.0000267543860, -0.0000067982456, + -0.0000401315789, -0.0000668859649, -0.0000736842105, -0.0000469298246, + +0.0000000000000, +0.0000870614035, +0.0001673245614, +0.0002142543860, + +0.0002142543860, +0.0001673245614, +0.0001271929825, +0.0001070175439, + +0.0001138157895, +0.0001271929825, +0.0001203947368, +0.0000668859649, + +0.0000000000000, -0.0000736842105, -0.0001271929825, -0.0001004385965, + -0.0000335526316, +0.0000335526316, +0.0000668859649, +0.0000668859649, + +0.0000401315789, +0.0000267543860, +0.0000201754386, +0.0000267543860, + +0.0000335526316, +0.0000335526316, +0.0000535087719, +0.0001070175439, + +0.0001739035088, +0.0002208333333, +0.0002276315789, +0.0001940789474, + +0.0001138157895, +0.0000133771930, -0.0000335526316, -0.0000133771930, + +0.0000469298246, +0.0001138157895, +0.0001739035088, +0.0002142543860, + +0.0002074561404, +0.0001471491228, +0.0000469298246, -0.0000401315789, + -0.0001203947368, -0.0001872807018, -0.0002342105263, -0.0002410087719, + -0.0002142543860, -0.0001807017544, -0.0001337719298, -0.0000603070175, + +0.0000067982456, +0.0000535087719, +0.0000401315789, -0.0000133771930, + -0.0000736842105, -0.0001004385965, -0.0001004385965, -0.0000870614035, + -0.0000736842105, -0.0001004385965, -0.0001539473684, -0.0002074561404, + -0.0002208333333, -0.0001807017544, -0.0000870614035, +0.0000000000000, + +0.0000736842105, +0.0000802631579, +0.0000401315789, -0.0000267543860, + -0.0000936403509, -0.0001405701754, -0.0001539473684, -0.0001337719298, + -0.0001070175439, -0.0000802631579, -0.0000401315789, -0.0000067982456, + +0.0000201754386, +0.0000267543860, +0.0000133771930, -0.0000067982456, + -0.0000267543860, -0.0000401315789, -0.0000401315789, -0.0000267543860, + +0.0000133771930, +0.0000736842105, +0.0001271929825, +0.0001471491228, + +0.0001471491228, +0.0001337719298, +0.0000802631579, -0.0000067982456, + -0.0001337719298, -0.0002475877193, -0.0002677631579, -0.0001539473684, + +0.0000335526316, +0.0002074561404, +0.0003010964912, +0.0003010964912, + +0.0002410087719, +0.0001673245614, +0.0001138157895, +0.0001004385965, + +0.0001004385965, +0.0000802631579, +0.0000067982456, -0.0000802631579, + -0.0001203947368, -0.0000870614035, +0.0000000000000, +0.0001004385965, + +0.0001471491228, +0.0001337719298, +0.0000668859649, +0.0000000000000, + -0.0000401315789, -0.0000401315789, -0.0000133771930, +0.0000067982456, + +0.0000067982456, -0.0000335526316, -0.0001004385965, -0.0001271929825, + -0.0000668859649, +0.0000401315789, +0.0001605263158, +0.0002410087719, + +0.0002543859649, +0.0001807017544, +0.0000469298246, -0.0000736842105, + -0.0001271929825, -0.0000736842105, +0.0000201754386, +0.0001138157895, + +0.0001539473684, +0.0001271929825, +0.0000535087719, -0.0000067982456, + -0.0000067982456, +0.0000603070175, +0.0001539473684, +0.0001872807018, + +0.0001405701754, +0.0000401315789, -0.0000802631579, -0.0001872807018, + -0.0002475877193, -0.0002276315789, -0.0001539473684, -0.0000603070175, + +0.0000067982456, +0.0000668859649, +0.0001271929825, +0.0001872807018, + +0.0002276315789, +0.0002543859649, +0.0002677631579, +0.0002342105263, + +0.0001471491228, +0.0000267543860, -0.0000668859649, -0.0001138157895, + -0.0001070175439, -0.0000401315789, +0.0000469298246, +0.0001471491228, + +0.0001940789474, +0.0001739035088, +0.0000936403509, +0.0000133771930, + -0.0000267543860, -0.0000335526316, -0.0000401315789, -0.0000870614035, + -0.0001539473684, -0.0002142543860, -0.0002276315789, -0.0001872807018, + -0.0001203947368, -0.0000201754386, +0.0000535087719, +0.0000736842105, + +0.0000201754386, -0.0000802631579, -0.0001739035088, -0.0002074561404, + -0.0001673245614, -0.0000936403509, -0.0000401315789, -0.0000201754386, + -0.0000401315789, -0.0000668859649, -0.0000802631579, -0.0000802631579, + -0.0000870614035, -0.0001203947368, -0.0001539473684, -0.0001872807018, + -0.0002074561404, -0.0002208333333, -0.0002342105263, -0.0002208333333, + -0.0001605263158, -0.0000603070175, +0.0000668859649, +0.0001872807018, + +0.0002677631579, +0.0002945175439, +0.0002811403509, +0.0002410087719, + +0.0001605263158, +0.0000603070175, -0.0000335526316, -0.0001004385965, + -0.0001203947368, -0.0000870614035, -0.0000133771930, +0.0000668859649, + +0.0001471491228, +0.0002008771930, +0.0002276315789, +0.0002074561404, + +0.0001471491228, +0.0000535087719, -0.0000401315789, -0.0001203947368, + -0.0001471491228, -0.0001203947368, -0.0000603070175, +0.0000201754386, + +0.0000936403509, +0.0001337719298, +0.0001138157895, +0.0000668859649, + +0.0000401315789, +0.0000469298246, +0.0000535087719, +0.0000401315789, + +0.0000201754386, +0.0000267543860, +0.0000668859649, +0.0000936403509, + +0.0000870614035, +0.0000603070175, +0.0000201754386, -0.0000201754386, + -0.0000469298246, -0.0000535087719, -0.0000133771930, +0.0000401315789, + +0.0000668859649, +0.0000335526316, -0.0000267543860, -0.0000870614035, + -0.0001138157895, -0.0000936403509, -0.0000201754386, +0.0000603070175, + +0.0001337719298, +0.0001673245614, +0.0001539473684, +0.0001138157895, + +0.0000401315789, -0.0000401315789, -0.0001203947368, -0.0001471491228, + -0.0001203947368, -0.0000736842105, -0.0000401315789, -0.0000201754386, + +0.0000000000000, +0.0000401315789, +0.0000802631579, +0.0001070175439, + +0.0000802631579, +0.0000133771930, -0.0000535087719, -0.0000870614035, + -0.0000736842105, -0.0000067982456, +0.0000668859649, +0.0001271929825, + +0.0001471491228, +0.0001203947368, +0.0000736842105, +0.0000133771930, + -0.0000201754386, -0.0000267543860, +0.0000201754386, +0.0001271929825, + +0.0002208333333, +0.0002410087719, +0.0001739035088, +0.0000936403509, + +0.0000335526316, +0.0000067982456, +0.0000000000000, -0.0000067982456, + -0.0000267543860, -0.0000535087719, -0.0000802631579, -0.0000936403509, + -0.0001070175439, -0.0001070175439, -0.0000936403509, -0.0000870614035, + -0.0000870614035, -0.0000802631579, -0.0000736842105, -0.0000603070175, + -0.0000267543860, +0.0000133771930, +0.0000802631579, +0.0001471491228, + +0.0002142543860, +0.0002475877193, +0.0002342105263, +0.0001539473684, + +0.0000335526316, -0.0000603070175, -0.0001138157895, -0.0000936403509, + -0.0000133771930, +0.0000668859649, +0.0000936403509, +0.0000401315789, + -0.0000603070175, -0.0001337719298, -0.0001271929825, -0.0000469298246, + +0.0000603070175, +0.0001605263158, +0.0002008771930, +0.0001739035088, + +0.0000870614035, -0.0000133771930, -0.0001138157895, -0.0001471491228, + -0.0001203947368, -0.0000469298246, +0.0000000000000, +0.0000201754386, + -0.0000067982456, -0.0000535087719, -0.0000870614035, -0.0001070175439, + -0.0000936403509, -0.0000603070175, -0.0000067982456, +0.0000469298246, + +0.0000870614035, +0.0001004385965, +0.0001070175439, +0.0001138157895, + +0.0001271929825, +0.0001337719298, +0.0001471491228, +0.0001405701754, + +0.0001070175439, +0.0000668859649, +0.0000401315789, +0.0000469298246, + +0.0000936403509, +0.0001337719298, +0.0001673245614, +0.0001739035088, + +0.0001471491228, +0.0001004385965, +0.0000535087719, +0.0000201754386, + +0.0000133771930, +0.0000133771930, +0.0000201754386, +0.0000335526316, + +0.0000469298246, +0.0000603070175, +0.0000736842105, +0.0000736842105, + +0.0000668859649, +0.0000469298246, +0.0000000000000, -0.0000469298246, + -0.0000870614035, -0.0000870614035, -0.0000469298246, +0.0000133771930, + +0.0000736842105, +0.0001070175439, +0.0001004385965, +0.0000736842105, + +0.0000469298246, +0.0000401315789, +0.0000401315789, +0.0000469298246, + +0.0000535087719, +0.0000335526316, +0.0000067982456, +0.0000000000000, + +0.0000000000000, +0.0000000000000, -0.0000067982456, +0.0000000000000, + +0.0000133771930, +0.0000469298246, +0.0000802631579, +0.0001070175439, + +0.0001070175439, +0.0000802631579, +0.0000267543860, -0.0000201754386, + -0.0000469298246, -0.0000335526316, +0.0000000000000, +0.0000335526316, + +0.0000603070175, +0.0000603070175, +0.0000469298246, +0.0000133771930, + -0.0000201754386, -0.0000668859649, -0.0000870614035, -0.0000870614035, + -0.0000668859649, -0.0000469298246, -0.0000335526316, -0.0000201754386, + +0.0000000000000, +0.0000067982456, +0.0000201754386, +0.0000469298246, + +0.0000802631579, +0.0001070175439, +0.0001070175439, +0.0000736842105, + +0.0000267543860, -0.0000267543860, -0.0000802631579, -0.0000870614035, + -0.0000401315789, +0.0000201754386, +0.0000736842105, +0.0000936403509, + +0.0000802631579, +0.0000469298246, +0.0000267543860, +0.0000335526316, + +0.0000535087719, +0.0000469298246, +0.0000067982456, -0.0000535087719, + -0.0001203947368, -0.0001471491228, -0.0001138157895, -0.0000401315789, + +0.0000335526316, +0.0000870614035, +0.0001004385965, +0.0000668859649, + +0.0000000000000, -0.0000603070175, -0.0000936403509, -0.0000603070175, + +0.0000000000000, +0.0000335526316, +0.0000067982456, -0.0000736842105, + -0.0001872807018, -0.0002609649123, -0.0002743421053, -0.0002208333333, + -0.0001405701754, -0.0000603070175, -0.0000133771930, -0.0000067982456, + -0.0000335526316, -0.0000603070175, -0.0000736842105, -0.0000802631579, + -0.0000870614035, -0.0001004385965, -0.0001203947368, -0.0001605263158, + -0.0001940789474, -0.0002074561404, -0.0001872807018, -0.0001271929825, + -0.0000535087719, +0.0000067982456, +0.0000469298246, +0.0000335526316, + -0.0000133771930, -0.0000870614035, -0.0001605263158, -0.0002074561404, + -0.0002142543860, -0.0001807017544, -0.0001004385965, -0.0000133771930, + +0.0000535087719, +0.0000936403509, +0.0000870614035, +0.0000335526316, + -0.0000133771930, -0.0000469298246, -0.0000401315789, +0.0000000000000, + +0.0000469298246, +0.0000870614035, +0.0000936403509, +0.0000736842105, + +0.0000535087719, +0.0000335526316, +0.0000133771930, +0.0000067982456, + +0.0000000000000, -0.0000067982456, -0.0000335526316, -0.0000668859649, + -0.0000936403509, -0.0001138157895, -0.0001138157895, -0.0001070175439, + -0.0001004385965, -0.0000870614035, -0.0000736842105, -0.0000668859649, + -0.0000535087719, -0.0000535087719, -0.0000535087719, -0.0000535087719, + -0.0000535087719, -0.0000668859649, -0.0000668859649, -0.0000603070175, + -0.0000668859649, -0.0001070175439, -0.0001673245614, -0.0002208333333, + -0.0002410087719, -0.0002276315789, -0.0001940789474, -0.0001539473684, + -0.0001004385965, -0.0000535087719, -0.0000335526316, -0.0000469298246, + -0.0000870614035, -0.0001271929825, -0.0001405701754, -0.0001271929825, + -0.0000870614035, -0.0000267543860, +0.0000335526316, +0.0000870614035, + +0.0001138157895, +0.0001070175439, +0.0000668859649, +0.0000133771930, + -0.0000335526316, -0.0000668859649, -0.0000802631579, -0.0000668859649, + -0.0000401315789, -0.0000133771930, +0.0000000000000, +0.0000067982456, + -0.0000067982456, -0.0000401315789, -0.0000736842105, -0.0000870614035, + -0.0000870614035, -0.0000736842105, -0.0000603070175, -0.0000535087719, + -0.0000401315789, -0.0000267543860, -0.0000267543860, -0.0000133771930, + +0.0000000000000, +0.0000133771930, +0.0000267543860, +0.0000469298246, + +0.0000469298246, +0.0000201754386, -0.0000201754386, -0.0000469298246, + -0.0000535087719, -0.0000335526316, +0.0000000000000, +0.0000335526316, + +0.0000736842105, +0.0000668859649, +0.0000201754386, -0.0000469298246, + -0.0001070175439, -0.0001337719298, -0.0001138157895, -0.0000469298246, + +0.0000668859649, +0.0001739035088, +0.0002342105263, +0.0002208333333, + +0.0001539473684, +0.0000603070175, -0.0000335526316, -0.0000936403509, + -0.0001138157895, -0.0001070175439, -0.0000736842105, -0.0000201754386, + +0.0000133771930, +0.0000133771930, -0.0000133771930, -0.0000736842105, + -0.0001203947368, -0.0001271929825, -0.0001070175439, -0.0000668859649, + -0.0000267543860, +0.0000000000000, +0.0000000000000, -0.0000267543860, + -0.0000469298246, -0.0000469298246, -0.0000267543860, +0.0000067982456, + +0.0000469298246, +0.0000668859649, +0.0000603070175, +0.0000133771930, + -0.0000267543860, -0.0000469298246, -0.0000401315789, -0.0000133771930, + -0.0000067982456, -0.0000067982456, -0.0000201754386, -0.0000267543860, + -0.0000201754386, +0.0000000000000, +0.0000335526316, +0.0000535087719, + +0.0000469298246, +0.0000000000000, -0.0000535087719, -0.0000802631579, + -0.0000535087719, +0.0000000000000, +0.0000736842105, +0.0001203947368, + +0.0001271929825, +0.0000936403509, +0.0000603070175, +0.0000469298246, + +0.0000469298246, +0.0000603070175, +0.0000603070175, +0.0000603070175, + +0.0000469298246, +0.0000133771930, -0.0000133771930, -0.0000267543860, + +0.0000000000000, +0.0000668859649, +0.0001203947368, +0.0001271929825, + +0.0000936403509, +0.0000668859649, +0.0000469298246, +0.0000401315789, + +0.0000401315789, +0.0000267543860, +0.0000000000000, -0.0000267543860, + -0.0000469298246, -0.0000401315789, +0.0000000000000, +0.0000736842105, + +0.0001471491228, +0.0001673245614, +0.0001203947368, +0.0000401315789, + -0.0000267543860, -0.0000736842105, -0.0000802631579, -0.0000736842105, + -0.0000535087719, -0.0000201754386, +0.0000201754386, +0.0000535087719, + +0.0000668859649, +0.0000469298246, +0.0000201754386, -0.0000067982456, + -0.0000201754386, -0.0000267543860, -0.0000201754386, +0.0000067982456, + +0.0000535087719, +0.0000936403509, +0.0001070175439, +0.0000936403509, + +0.0000469298246, +0.0000000000000, -0.0000133771930, +0.0000000000000, + +0.0000401315789, +0.0000668859649, +0.0000603070175, +0.0000267543860, + +0.0000000000000, -0.0000067982456, +0.0000000000000, +0.0000201754386, + +0.0000535087719, +0.0000802631579, +0.0000870614035, +0.0000802631579, + +0.0000401315789, +0.0000000000000, -0.0000335526316, -0.0000133771930, + +0.0000401315789, +0.0001203947368, +0.0001872807018, +0.0002008771930, + +0.0001739035088, +0.0001203947368, +0.0000668859649, +0.0000401315789, + +0.0000401315789, +0.0000603070175, +0.0000668859649, +0.0000469298246, + +0.0000000000000, -0.0000535087719, -0.0000802631579, -0.0000535087719, + +0.0000067982456, +0.0001004385965, +0.0001673245614, +0.0002008771930, + +0.0001739035088, +0.0001203947368, +0.0000668859649, +0.0000335526316, + +0.0000067982456, +0.0000000000000, +0.0000000000000, -0.0000067982456, + -0.0000267543860, -0.0000401315789, -0.0000469298246, -0.0000267543860, + +0.0000000000000, +0.0000335526316, +0.0000603070175, +0.0000603070175, + +0.0000401315789, +0.0000000000000, -0.0000201754386, -0.0000133771930, + +0.0000133771930, +0.0000335526316, +0.0000267543860, +0.0000000000000, + -0.0000133771930, -0.0000267543860, -0.0000133771930, +0.0000000000000, + +0.0000335526316, +0.0000603070175, +0.0000870614035, +0.0001004385965, + +0.0001070175439, +0.0000936403509, +0.0000668859649, +0.0000267543860, + +0.0000000000000, -0.0000201754386, -0.0000267543860, -0.0000133771930, + +0.0000067982456, +0.0000535087719, +0.0001070175439, +0.0001539473684, + +0.0001673245614, +0.0001539473684, +0.0001271929825, +0.0001004385965, + +0.0000668859649, +0.0000335526316, +0.0000000000000, -0.0000267543860, + -0.0000469298246, -0.0000603070175, -0.0000469298246, -0.0000067982456, + +0.0000469298246, +0.0001004385965, +0.0001271929825, +0.0001203947368, + +0.0000802631579, +0.0000267543860, -0.0000067982456, -0.0000267543860, + -0.0000067982456, +0.0000133771930, +0.0000335526316, +0.0000267543860, + +0.0000000000000, -0.0000133771930, -0.0000067982456, +0.0000201754386, + +0.0000603070175, +0.0000802631579, +0.0000802631579, +0.0000469298246, + -0.0000067982456, -0.0000936403509, -0.0001673245614, -0.0002008771930, + -0.0001673245614, -0.0000870614035, +0.0000000000000, +0.0000469298246, + +0.0000668859649, +0.0000335526316, +0.0000000000000, -0.0000401315789, + -0.0000469298246, -0.0000267543860, -0.0000067982456, +0.0000000000000, + +0.0000067982456, +0.0000267543860, +0.0000469298246, +0.0000603070175, + +0.0000603070175, +0.0000401315789, +0.0000201754386, +0.0000000000000, + -0.0000133771930, -0.0000267543860, -0.0000201754386, -0.0000067982456, + +0.0000000000000, +0.0000133771930, +0.0000267543860, +0.0000335526316, + +0.0000267543860, +0.0000201754386, +0.0000201754386, +0.0000201754386, + +0.0000267543860, +0.0000201754386, +0.0000133771930, +0.0000067982456, + +0.0000067982456, +0.0000067982456, +0.0000067982456, +0.0000067982456, + +0.0000133771930, +0.0000201754386, +0.0000201754386, +0.0000133771930, + +0.0000000000000, -0.0000067982456, -0.0000201754386, -0.0000267543860, + -0.0000201754386, -0.0000133771930, -0.0000067982456, -0.0000067982456, + -0.0000133771930, -0.0000201754386, -0.0000267543860, -0.0000335526316, + -0.0000267543860, -0.0000133771930, +0.0000000000000, +0.0000000000000, + +0.0000067982456, +0.0000000000000, +0.0000000000000, +0.0000000000000, + +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, + +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, + +0.0000000000000 +}; diff --git a/plugins/LadspaEffect/swh/impulses/19-marshall-plexi-sm57-off.h b/plugins/LadspaEffect/swh/impulses/19-marshall-plexi-sm57-off.h new file mode 100644 index 000000000..78ec65e2c --- /dev/null +++ b/plugins/LadspaEffect/swh/impulses/19-marshall-plexi-sm57-off.h @@ -0,0 +1,1360 @@ +float marshall_plexi_sm57_off[] = { + +0.0000000000000, +0.0000239215686, +0.0000478431373, +0.0000778431373, + +0.0001076470588, +0.0001376470588, +0.0001615686275, +0.0002094117647, + +0.0002333333333, +0.0002572549020, +0.0002452941176, +0.0002872549020, + +0.0002752941176, +0.0003170588235, +0.0002811764706, +0.0003470588235, + +0.0002872549020, +0.0003770588235, +0.0002811764706, +0.0004188235294, + +0.0002692156863, +0.0004905882353, +0.0001974509804, +0.0006162745098, + +0.0000180392157, +0.0008137254902, +0.0001017647059, +0.0000956862745, + +0.0014421568627, -0.0002452941176, +0.0000419607843, +0.0004727450980, + +0.0010531372549, +0.0006641176471, +0.0007180392157, +0.0001256862745, + +0.0004547058824, -0.0000239215686, +0.0004666666667, +0.0001376470588, + +0.0004188235294, +0.0003650980392, +0.0003770588235, +0.0004368627451, + +0.0004368627451, +0.0003949019608, +0.0003829411765, +0.0004009803922, + +0.0003709803922, +0.0002094117647, +0.0001915686275, +0.0001915686275, + +0.0002572549020, +0.0005864705882, +0.0011309803922, +0.0018609803922, + +0.0011488235294, -0.0056607843137, -0.0101545098039, -0.0078807843137, + -0.0183823529412, -0.0470031372549, -0.0563917647059, -0.0222119607843, + +0.0368545098039, +0.1011209803922, +0.1648068627451, +0.1960664705882, + +0.1808735294118, +0.1334815686275, +0.0625250980392, -0.0097476470588, + -0.0588629411765, -0.0769221568627, -0.0688021568627, -0.0461294117647, + -0.0298594117647, -0.0227745098039, -0.0156837254902, -0.0146245098039, + -0.0251021568627, -0.0281060784314, -0.0170658823529, +0.0061933333333, + +0.0285727450980, +0.0305474509804, +0.0142654901961, -0.0073841176471, + -0.0306552941176, -0.0475117647059, -0.0517123529412, -0.0441427450980, + -0.0331862745098, -0.0291174509804, -0.0298174509804, -0.0287223529412, + -0.0231754901961, -0.0191064705882, -0.0147621568627, -0.0120274509804, + -0.0188311764706, -0.0317203921569, -0.0380452941176, -0.0333358823529, + -0.0184960784314, -0.0019686274510, +0.0121711764706, +0.0229539215686, + +0.0218649019608, +0.0108307843137, -0.0035064705882, -0.0196209803922, + -0.0345986274510, -0.0420245098039, -0.0393378431373, -0.0290096078431, + -0.0167847058824, -0.0053315686275, +0.0032311764706, +0.0068454901961, + +0.0050982352941, -0.0015498039216, -0.0085449019608, -0.0101486274510, + -0.0048409803922, +0.0039074509804, +0.0068694117647, -0.0014062745098, + -0.0196688235294, -0.0371596078431, -0.0437956862745, -0.0393976470588, + -0.0289139215686, -0.0154382352941, -0.0057803921569, -0.0027945098039, + -0.0026329411765, -0.0011129411765, +0.0003650980392, +0.0009752941176, + +0.0025790196078, +0.0051580392157, +0.0072403921569, +0.0056427450980, + -0.0009513725490, -0.0085209803922, -0.0126917647059, -0.0135174509804, + -0.0101425490196, -0.0046435294118, -0.0030576470588, -0.0096758823529, + -0.0203988235294, -0.0300927450980, -0.0358133333333, -0.0338205882353, + -0.0228762745098, -0.0070668627451, +0.0105974509804, +0.0254672549020, + +0.0334915686275, +0.0334615686275, +0.0239294117647, +0.0085090196078, + -0.0017174509804, -0.0033749019608, -0.0009872549020, +0.0034527450980, + +0.0064564705882, +0.0043621568627, -0.0001017647059, -0.0029260784314, + -0.0019268627451, +0.0042903921569, +0.0142952941176, +0.0240011764706, + +0.0293149019608, +0.0287582352941, +0.0230737254902, +0.0155460784314, + +0.0104956862745, +0.0088621568627, +0.0085807843137, +0.0083054901961, + +0.0063309803922, +0.0029978431373, +0.0004966666667, +0.0002811764706, + +0.0035962745098, +0.0102623529412, +0.0165094117647, +0.0206203921569, + +0.0220803921569, +0.0202911764706, +0.0162282352941, +0.0117882352941, + +0.0085270588235, +0.0085688235294, +0.0115966666667, +0.0149296078431, + +0.0155221568627, +0.0120813725490, +0.0054992156863, -0.0015617647059, + -0.0062531372549, -0.0066780392157, -0.0032911764706, +0.0024294117647, + +0.0083952941176, +0.0131286274510, +0.0168145098039, +0.0197107843137, + +0.0216315686275, +0.0227386274510, +0.0227745098039, +0.0207700000000, + +0.0158392156863, +0.0090835294118, +0.0037519607843, +0.0021362745098, + +0.0046852941176, +0.0109803921569, +0.0183164705882, +0.0218050980392, + +0.0192619607843, +0.0120274509804, +0.0039013725490, -0.0009215686275, + -0.0005745098039, +0.0032072549020, +0.0085509803922, +0.0132182352941, + +0.0148039215686, +0.0124882352941, +0.0084909803922, +0.0053256862745, + +0.0041049019608, +0.0044460784314, +0.0055768627451, +0.0063368627451, + +0.0058103921569, +0.0048409803922, +0.0048768627451, +0.0061035294118, + +0.0093527450980, +0.0147560784314, +0.0196988235294, +0.0223496078431, + +0.0226068627451, +0.0207339215686, +0.0178437254902, +0.0141158823529, + +0.0087843137255, +0.0027525490196, -0.0019805882353, -0.0044998039216, + -0.0048050980392, -0.0038954901961, -0.0026866666667, -0.0018070588235, + -0.0014121568627, -0.0010592156863, -0.0006821568627, -0.0003709803922, + +0.0004307843137, +0.0022798039216, +0.0049786274510, +0.0077550980392, + +0.0090835294118, +0.0075098039216, +0.0030996078431, -0.0020464705882, + -0.0056307843137, -0.0064984313725, -0.0044878431373, -0.0004249019608, + +0.0037039215686, +0.0063190196078, +0.0074258823529, +0.0075874509804, + +0.0068635294118, +0.0054513725490, +0.0042425490196, +0.0040629411765, + +0.0049786274510, +0.0060615686275, +0.0059358823529, +0.0047570588235, + +0.0029500000000, +0.0002513725490, -0.0030456862745, -0.0058941176471, + -0.0077192156863, -0.0083594117647, -0.0075994117647, -0.0055829411765, + -0.0035423529412, -0.0025250980392, -0.0023156862745, -0.0026209803922, + -0.0035603921569, -0.0050682352941, -0.0065941176471, -0.0077490196078, + -0.0078927450980, -0.0067258823529, -0.0050562745098, -0.0039613725490, + -0.0038774509804, -0.0046913725490, -0.0058223529412, -0.0066600000000, + -0.0065223529412, -0.0055529411765, -0.0039133333333, -0.0019805882353, + -0.0006582352941, +0.0001915686275, +0.0020464705882, +0.0048349019608, + +0.0065523529412, +0.0060556862745, +0.0042964705882, +0.0025790196078, + +0.0010472549020, -0.0004966666667, -0.0021482352941, -0.0035543137255, + -0.0049725490196, -0.0068994117647, -0.0093227450980, -0.0113752941176, + -0.0119796078431, -0.0112915686275, -0.0105554901961, -0.0101127450980, + -0.0097117647059, -0.0098733333333, -0.0106392156863, -0.0113513725490, + -0.0113154901961, -0.0103400000000, -0.0090535294118, -0.0077609803922, + -0.0064564705882, -0.0055111764706, -0.0052000000000, -0.0058701960784, + -0.0073062745098, -0.0082158823529, -0.0079464705882, -0.0070429411765, + -0.0061992156863, -0.0059658823529, -0.0066839215686, -0.0082098039216, + -0.0097954901961, -0.0100947058824, -0.0086764705882, -0.0063727450980, + -0.0044998039216, -0.0038715686275, -0.0042845098039, -0.0052178431373, + -0.0066121568627, -0.0075098039216, -0.0066480392157, -0.0042066666667, + -0.0014001960784, +0.0005025490196, +0.0009096078431, -0.0001137254902, + -0.0021182352941, -0.0042186274510, -0.0057445098039, -0.0065941176471, + -0.0065701960784, -0.0062650980392, -0.0064386274510, -0.0069592156863, + -0.0073660784314, -0.0073182352941, -0.0067617647059, -0.0062411764706, + -0.0063368627451, -0.0073001960784, -0.0090894117647, -0.0107290196078, + -0.0110341176471, -0.0098015686275, -0.0079047058824, -0.0063847058824, + -0.0059060784314, -0.0063429411765, -0.0070429411765, -0.0072345098039, + -0.0068396078431, -0.0061694117647, -0.0055649019608, -0.0051880392157, + -0.0047033333333, -0.0038415686275, -0.0031774509804, -0.0034945098039, + -0.0045058823529, -0.0052956862745, -0.0055170588235, -0.0049366666667, + -0.0034825490196, -0.0014660784314, +0.0005505882353, +0.0020645098039, + +0.0023935294118, +0.0012925490196, -0.0008617647059, -0.0031654901961, + -0.0045298039216, -0.0044400000000, -0.0035962745098, -0.0033449019608, + -0.0044280392157, -0.0063129411765, -0.0076174509804, -0.0072403921569, + -0.0053854901961, -0.0031056862745, -0.0013703921569, -0.0011129411765, + -0.0026986274510, -0.0052417647059, -0.0071386274510, -0.0072045098039, + -0.0052956862745, -0.0026568627451, -0.0004786274510, +0.0008617647059, + +0.0008198039216, -0.0014541176471, -0.0051282352941, -0.0078449019608, + -0.0077670588235, -0.0048170588235, -0.0004488235294, +0.0036441176471, + +0.0061574509804, +0.0064266666667, +0.0045656862745, +0.0015976470588, + -0.0010650980392, -0.0021660784314, -0.0014780392157, +0.0000658823529, + +0.0011727450980, +0.0011607843137, +0.0001137254902, -0.0015078431373, + -0.0031894117647, -0.0039911764706, -0.0031952941176, -0.0013643137255, + +0.0000837254902, +0.0003050980392, -0.0005025490196, -0.0017113725490, + -0.0025072549020, -0.0024235294118, -0.0014958823529, -0.0001554901961, + +0.0009154901961, +0.0012625490196, +0.0012505882353, +0.0010472549020, + +0.0006701960784, +0.0004666666667, +0.0008376470588, +0.0013284313725, + +0.0012925490196, +0.0004488235294, -0.0009694117647, -0.0025011764706, + -0.0033629411765, -0.0029858823529, -0.0013943137255, +0.0007898039216, + +0.0023576470588, +0.0026090196078, +0.0018370588235, +0.0004786274510, + -0.0012745098039, -0.0026029411765, -0.0026688235294, -0.0015976470588, + +0.0000478431373, +0.0018490196078, +0.0032792156863, +0.0041349019608, + +0.0045476470588, +0.0045715686275, +0.0042305882353, +0.0037458823529, + +0.0031713725490, +0.0028901960784, +0.0031474509804, +0.0035784313725, + +0.0037998039216, +0.0038774509804, +0.0038954901961, +0.0036382352941, + +0.0027047058824, +0.0014062745098, +0.0009813725490, +0.0020284313725, + +0.0038774509804, +0.0054152941176, +0.0060735294118, +0.0055050980392, + +0.0038356862745, +0.0016874509804, +0.0000060784314, -0.0005803921569, + -0.0000898039216, +0.0011429411765, +0.0028482352941, +0.0044160784314, + +0.0053496078431, +0.0056188235294, +0.0054272549020, +0.0052478431373, + +0.0054213725490, +0.0059600000000, +0.0065582352941, +0.0069472549020, + +0.0072943137255, +0.0077011764706, +0.0081439215686, +0.0085449019608, + +0.0089039215686, +0.0089458823529, +0.0084192156863, +0.0076294117647, + +0.0072225490196, +0.0071327450980, +0.0069770588235, +0.0065403921569, + +0.0058941176471, +0.0048409803922, +0.0034586274510, +0.0020645098039, + +0.0010950980392, +0.0010592156863, +0.0019447058824, +0.0031713725490, + +0.0041766666667, +0.0044400000000, +0.0037339215686, +0.0026149019608, + +0.0018909803922, +0.0021243137255, +0.0030098039216, +0.0036860784314, + +0.0035903921569, +0.0032372549020, +0.0031176470588, +0.0033688235294, + +0.0039133333333, +0.0046076470588, +0.0053615686275, +0.0061933333333, + +0.0067796078431, +0.0066839215686, +0.0058880392157, +0.0044700000000, + +0.0027705882353, +0.0015198039216, +0.0013343137255, +0.0021243137255, + +0.0032672549020, +0.0041647058824, +0.0042186274510, +0.0033688235294, + +0.0023156862745, +0.0017711764706, +0.0018729411765, +0.0026507843137, + +0.0036023529412, +0.0038954901961, +0.0033270588235, +0.0024354901961, + +0.0015078431373, +0.0005564705882, -0.0000956862745, +0.0001196078431, + +0.0011009803922, +0.0021301960784, +0.0028482352941, +0.0031654901961, + +0.0030278431373, +0.0025970588235, +0.0022619607843, +0.0024294117647, + +0.0029441176471, +0.0033988235294, +0.0036082352941, +0.0033988235294, + +0.0026507843137, +0.0016874509804, +0.0010233333333, +0.0010352941176, + +0.0015317647059, +0.0018968627451, +0.0014421568627, -0.0001315686275, + -0.0023876470588, -0.0042784313725, -0.0049905882353, -0.0041886274510, + -0.0020764705882, +0.0006223529412, +0.0027945098039, +0.0035723529412, + +0.0027586274510, +0.0008796078431, -0.0009335294118, -0.0019268627451, + -0.0021301960784, -0.0019447058824, -0.0016454901961, -0.0014121568627, + -0.0011907843137, -0.0008556862745, -0.0001974509804, +0.0008556862745, + +0.0021721568627, +0.0033807843137, +0.0040031372549, +0.0036501960784, + +0.0022319607843, +0.0002633333333, -0.0014001960784, -0.0020403921569, + -0.0015976470588, -0.0005266666667, +0.0007719607843, +0.0019088235294, + +0.0022319607843, +0.0016754901961, +0.0006162745098, -0.0006162745098, + -0.0018790196078, -0.0031235294118, -0.0042845098039, -0.0051700000000, + -0.0055290196078, -0.0050264705882, -0.0037158823529, -0.0021062745098, + -0.0007360784314, +0.0000478431373, +0.0002154901961, -0.0000300000000, + -0.0003111764706, -0.0005205882353, -0.0006882352941, -0.0005984313725, + -0.0002872549020, -0.0000898039216, -0.0001076470588, -0.0004009803922, + -0.0008317647059, -0.0010472549020, -0.0008137254902, -0.0002213725490, + +0.0005984313725, +0.0013462745098, +0.0018370588235, +0.0022619607843, + +0.0025670588235, +0.0023696078431, +0.0017892156863, +0.0011009803922, + +0.0005625490196, +0.0005147058824, +0.0011190196078, +0.0020525490196, + +0.0027047058824, +0.0026329411765, +0.0017592156863, +0.0003770588235, + -0.0008796078431, -0.0015078431373, -0.0017950980392, -0.0021362745098, + -0.0023815686275, -0.0023754901961, -0.0022500000000, -0.0020943137255, + -0.0018729411765, -0.0014301960784, -0.0006760784314, +0.0000478431373, + +0.0002633333333, -0.0003650980392, -0.0017711764706, -0.0033509803922, + -0.0042545098039, -0.0040450980392, -0.0028721568627, -0.0012925490196, + +0.0000000000000, +0.0005386274510, +0.0004307843137, +0.0001017647059, + -0.0000419607843, +0.0002333333333, +0.0007241176471, +0.0010111764706, + +0.0008915686275, +0.0003111764706, -0.0004905882353, -0.0010831372549, + -0.0012745098039, -0.0010531372549, -0.0004427450980, +0.0001315686275, + +0.0001735294118, -0.0003111764706, -0.0010770588235, -0.0018729411765, + -0.0022319607843, -0.0019327450980, -0.0012925490196, -0.0007060784314, + -0.0003829411765, -0.0003290196078, -0.0005386274510, -0.0010292156863, + -0.0015976470588, -0.0020045098039, -0.0020045098039, -0.0014001960784, + -0.0004488235294, +0.0001496078431, +0.0002931372549, +0.0003709803922, + +0.0004786274510, +0.0003770588235, +0.0000598039216, -0.0003531372549, + -0.0007001960784, -0.0008017647059, -0.0004966666667, +0.0000180392157, + +0.0004666666667, +0.0008676470588, +0.0013164705882, +0.0016215686275, + +0.0015678431373, +0.0011429411765, +0.0004068627451, -0.0003890196078, + -0.0009454901961, -0.0011070588235, -0.0008556862745, -0.0004368627451, + -0.0001915686275, -0.0002274509804, -0.0003949019608, -0.0005684313725, + -0.0008017647059, -0.0011907843137, -0.0016215686275, -0.0020703921569, + -0.0025370588235, -0.0030698039216, -0.0036680392157, -0.0041588235294, + -0.0043203921569, -0.0042545098039, -0.0042245098039, -0.0043860784314, + -0.0045417647059, -0.0044219607843, -0.0038835294118, -0.0029619607843, + -0.0018429411765, -0.0009394117647, -0.0005386274510, -0.0007300000000, + -0.0012686274510, -0.0017772549020, -0.0018370588235, -0.0012984313725, + -0.0005266666667, -0.0001554901961, -0.0004786274510, -0.0012505882353, + -0.0019566666667, -0.0021900000000, -0.0018070588235, -0.0010292156863, + -0.0003170588235, +0.0000478431373, +0.0000717647059, -0.0002872549020, + -0.0007778431373, -0.0009752941176, -0.0008737254902, -0.0007180392157, + -0.0005984313725, -0.0007898039216, -0.0014719607843, -0.0023935294118, + -0.0031296078431, -0.0032731372549, -0.0026627450980, -0.0015856862745, + -0.0005505882353, +0.0000060784314, +0.0000300000000, -0.0001854901961, + -0.0004847058824, -0.0009335294118, -0.0014541176471, -0.0020045098039, + -0.0024354901961, -0.0024833333333, -0.0021301960784, -0.0015917647059, + -0.0009633333333, -0.0002572549020, +0.0004905882353, +0.0010770588235, + +0.0012505882353, +0.0009813725490, +0.0005205882353, +0.0001615686275, + -0.0001076470588, -0.0003231372549, -0.0003050980392, -0.0001017647059, + +0.0000000000000, -0.0001974509804, -0.0006760784314, -0.0011907843137, + -0.0016335294118, -0.0020464705882, -0.0021182352941, -0.0017472549020, + -0.0012266666667, -0.0008915686275, -0.0009035294118, -0.0012147058824, + -0.0016813725490, -0.0020403921569, -0.0020703921569, -0.0017113725490, + -0.0012447058824, -0.0009633333333, -0.0008437254902, -0.0007180392157, + -0.0005745098039, -0.0003050980392, +0.0002094117647, +0.0008676470588, + +0.0012386274510, +0.0011368627451, +0.0006641176471, +0.0000898039216, + -0.0003411764706, -0.0004786274510, -0.0003231372549, +0.0001915686275, + +0.0008556862745, +0.0013103921569, +0.0013223529412, +0.0009154901961, + +0.0003949019608, +0.0000837254902, +0.0000000000000, +0.0000956862745, + +0.0002213725490, +0.0001915686275, +0.0000180392157, -0.0002035294118, + -0.0004607843137, -0.0005325490196, -0.0002154901961, +0.0003231372549, + +0.0008078431373, +0.0010890196078, +0.0011607843137, +0.0010233333333, + +0.0007658823529, +0.0006641176471, +0.0009096078431, +0.0014600000000, + +0.0019088235294, +0.0020584313725, +0.0017831372549, +0.0009933333333, + -0.0000239215686, -0.0006941176471, -0.0006521568627, +0.0002274509804, + +0.0015617647059, +0.0026329411765, +0.0030398039216, +0.0027825490196, + +0.0020764705882, +0.0011429411765, +0.0002692156863, -0.0001554901961, + -0.0000539215686, +0.0003650980392, +0.0008256862745, +0.0010950980392, + +0.0008796078431, +0.0002333333333, -0.0005205882353, -0.0009454901961, + -0.0007600000000, -0.0001137254902, +0.0005803921569, +0.0011129411765, + +0.0012447058824, +0.0008317647059, +0.0001435294118, -0.0004188235294, + -0.0006343137255, -0.0002333333333, +0.0007241176471, +0.0017054901961, + +0.0021960784314, +0.0021123529412, +0.0015798039216, +0.0008796078431, + +0.0001735294118, -0.0003650980392, -0.0005564705882, -0.0004188235294, + -0.0002692156863, -0.0001854901961, +0.0000717647059, +0.0006521568627, + +0.0013582352941, +0.0020225490196, +0.0023996078431, +0.0022798039216, + +0.0016694117647, +0.0008198039216, +0.0001615686275, +0.0001137254902, + +0.0007539215686, +0.0017652941176, +0.0025790196078, +0.0027225490196, + +0.0020884313725, +0.0010052941176, -0.0000239215686, -0.0006343137255, + -0.0007539215686, -0.0006701960784, -0.0005984313725, -0.0005325490196, + -0.0005147058824, -0.0005564705882, -0.0006701960784, -0.0008796078431, + -0.0010770588235, -0.0011368627451, -0.0011309803922, -0.0011607843137, + -0.0013882352941, -0.0016994117647, -0.0017892156863, -0.0013403921569, + -0.0002931372549, +0.0010411764706, +0.0021362745098, +0.0026388235294, + +0.0025072549020, +0.0019268627451, +0.0011788235294, +0.0004488235294, + -0.0001017647059, -0.0004666666667, -0.0006343137255, -0.0005386274510, + -0.0002394117647, +0.0000119607843, +0.0000658823529, -0.0001796078431, + -0.0006941176471, -0.0011249019608, -0.0011668627451, -0.0007419607843, + +0.0002035294118, +0.0014480392157, +0.0022500000000, +0.0020525490196, + +0.0009813725490, -0.0005386274510, -0.0020645098039, -0.0030337254902, + -0.0029619607843, -0.0018070588235, -0.0000478431373, +0.0014241176471, + +0.0020584313725, +0.0019149019608, +0.0013045098039, +0.0004905882353, + -0.0000898039216, -0.0002452941176, +0.0000837254902, +0.0007778431373, + +0.0015737254902, +0.0022500000000, +0.0028362745098, +0.0032850980392, + +0.0035245098039, +0.0034586274510, +0.0029260784314, +0.0018011764706, + +0.0004307843137, -0.0006882352941, -0.0011070588235, -0.0007658823529, + -0.0001315686275, +0.0002633333333, +0.0003890196078, +0.0003949019608, + +0.0004905882353, +0.0005325490196, +0.0003770588235, +0.0000717647059, + -0.0001915686275, -0.0003590196078, -0.0003650980392, -0.0004068627451, + -0.0007060784314, -0.0012805882353, -0.0018909803922, -0.0021362745098, + -0.0017831372549, -0.0010950980392, -0.0003949019608, +0.0000717647059, + +0.0003411764706, +0.0004727450980, +0.0005864705882, +0.0007958823529, + +0.0012088235294, +0.0017592156863, +0.0020884313725, +0.0019327450980, + +0.0014719607843, +0.0009454901961, +0.0004786274510, +0.0001315686275, + +0.0001315686275, +0.0005325490196, +0.0010650980392, +0.0015258823529, + +0.0019268627451, +0.0021900000000, +0.0022798039216, +0.0020703921569, + +0.0014062745098, +0.0004307843137, -0.0004368627451, -0.0009694117647, + -0.0011968627451, -0.0012207843137, -0.0012805882353, -0.0014062745098, + -0.0012207843137, -0.0005564705882, +0.0003290196078, +0.0011668627451, + +0.0017711764706, +0.0018729411765, +0.0014182352941, +0.0005386274510, + -0.0005266666667, -0.0014719607843, -0.0020943137255, -0.0023156862745, + -0.0020345098039, -0.0012984313725, -0.0003170588235, +0.0005684313725, + +0.0012386274510, +0.0016635294118, +0.0015198039216, +0.0007658823529, + -0.0002035294118, -0.0011368627451, -0.0019149019608, -0.0023396078431, + -0.0022978431373, -0.0018729411765, -0.0012505882353, -0.0005923529412, + +0.0000778431373, +0.0006223529412, +0.0008376470588, +0.0008017647059, + +0.0007300000000, +0.0005025490196, -0.0000060784314, -0.0007839215686, + -0.0016215686275, -0.0021182352941, -0.0018909803922, -0.0009215686275, + +0.0004129411765, +0.0016276470588, +0.0023337254902, +0.0023515686275, + +0.0018490196078, +0.0011009803922, +0.0003411764706, -0.0001796078431, + -0.0003411764706, -0.0000837254902, +0.0003890196078, +0.0008796078431, + +0.0011309803922, +0.0008796078431, +0.0001554901961, -0.0005025490196, + -0.0007658823529, -0.0006401960784, -0.0003770588235, -0.0002633333333, + -0.0004727450980, -0.0010233333333, -0.0017831372549, -0.0024594117647, + -0.0026688235294, -0.0021182352941, -0.0010411764706, +0.0000539215686, + +0.0008137254902, +0.0010411764706, +0.0007539215686, +0.0001974509804, + -0.0003890196078, -0.0007719607843, -0.0010292156863, -0.0014062745098, + -0.0019986274510, -0.0026090196078, -0.0028123529412, -0.0020823529412, + -0.0005864705882, +0.0010711764706, +0.0020045098039, +0.0014780392157, + -0.0004427450980, -0.0026927450980, -0.0042066666667, -0.0044700000000, + -0.0034466666667, -0.0016037254902, +0.0002752941176, +0.0015558823529, + +0.0019268627451, +0.0014301960784, +0.0003111764706, -0.0009574509804, + -0.0018309803922, -0.0019447058824, -0.0011727450980, +0.0003050980392, + +0.0014719607843, +0.0013643137255, +0.0001554901961, -0.0014241176471, + -0.0027525490196, -0.0031415686275, -0.0024054901961, -0.0009454901961, + +0.0005266666667, +0.0010831372549, +0.0002872549020, -0.0009633333333, + -0.0015856862745, -0.0010890196078, +0.0004307843137, +0.0022619607843, + +0.0034466666667, +0.0034766666667, +0.0024413725490, +0.0008676470588, + -0.0006282352941, -0.0013284313725, -0.0007658823529, +0.0005505882353, + +0.0017174509804, +0.0022558823529, +0.0021721568627, +0.0016994117647, + +0.0011309803922, +0.0008078431373, +0.0010770588235, +0.0016933333333, + +0.0019805882353, +0.0015378431373, +0.0004607843137, -0.0007300000000, + -0.0015976470588, -0.0018370588235, -0.0010770588235, +0.0005864705882, + +0.0021601960784, +0.0023876470588, +0.0009813725490, -0.0011249019608, + -0.0027764705882, -0.0033509803922, -0.0027347058824, -0.0013284313725, + +0.0001017647059, +0.0008617647059, +0.0005147058824, -0.0005803921569, + -0.0015258823529, -0.0016156862745, -0.0009335294118, -0.0000539215686, + +0.0005745098039, +0.0007958823529, +0.0003770588235, -0.0005684313725, + -0.0015498039216, -0.0020943137255, -0.0019686274510, -0.0012386274510, + -0.0001796078431, +0.0008556862745, +0.0016933333333, +0.0020403921569, + +0.0018011764706, +0.0013582352941, +0.0010472549020, +0.0007539215686, + +0.0004068627451, -0.0001196078431, -0.0007658823529, -0.0013643137255, + -0.0018490196078, -0.0022439215686, -0.0024652941176, -0.0025192156863, + -0.0023876470588, -0.0022678431373, -0.0022439215686, -0.0023456862745, + -0.0025370588235, -0.0026927450980, -0.0025550980392, -0.0020225490196, + -0.0012147058824, -0.0004847058824, -0.0002154901961, -0.0005325490196, + -0.0011249019608, -0.0014062745098, -0.0010052941176, +0.0000837254902, + +0.0014600000000, +0.0024772549020, +0.0026747058824, +0.0020464705882, + +0.0009335294118, -0.0001376470588, -0.0006103921569, -0.0002394117647, + +0.0005684313725, +0.0012925490196, +0.0018131372549, +0.0021301960784, + +0.0022978431373, +0.0024533333333, +0.0025131372549, +0.0022558823529, + +0.0016037254902, +0.0004607843137, -0.0010352941176, -0.0024115686275, + -0.0033090196078, -0.0037339215686, -0.0035843137255, -0.0027347058824, + -0.0014660784314, -0.0000898039216, +0.0012625490196, +0.0024833333333, + +0.0034107843137, +0.0038356862745, +0.0035603921569, +0.0026149019608, + +0.0014062745098, +0.0004188235294, -0.0001496078431, -0.0003829411765, + -0.0002633333333, +0.0002692156863, +0.0009872549020, +0.0016096078431, + +0.0020345098039, +0.0023396078431, +0.0024652941176, +0.0023876470588, + +0.0020884313725, +0.0015678431373, +0.0009035294118, +0.0003470588235, + +0.0001017647059, +0.0002872549020, +0.0007839215686, +0.0011968627451, + +0.0010770588235, +0.0004488235294, -0.0004009803922, -0.0011309803922, + -0.0014541176471, -0.0012984313725, -0.0008556862745, -0.0004666666667, + -0.0004607843137, -0.0007778431373, -0.0010770588235, -0.0010352941176, + -0.0007958823529, -0.0005745098039, -0.0002394117647, +0.0003350980392, + +0.0009872549020, +0.0014480392157, +0.0013762745098, +0.0007060784314, + -0.0002154901961, -0.0009274509804, -0.0012447058824, -0.0012386274510, + -0.0010111764706, -0.0007180392157, -0.0004547058824, -0.0001256862745, + +0.0003411764706, +0.0007839215686, +0.0010472549020, +0.0012027450980, + +0.0011070588235, +0.0007241176471, +0.0003231372549, -0.0000300000000, + -0.0003111764706, -0.0003949019608, -0.0003890196078, -0.0003411764706, + -0.0002035294118, -0.0002154901961, -0.0005564705882, -0.0009872549020, + -0.0011847058824, -0.0009872549020, -0.0004129411765, +0.0004249019608, + +0.0013343137255, +0.0020584313725, +0.0023996078431, +0.0020943137255, + +0.0011190196078, +0.0000000000000, -0.0008317647059, -0.0011788235294, + -0.0010292156863, -0.0005086274510, +0.0002692156863, +0.0010592156863, + +0.0015678431373, +0.0017352941176, +0.0015737254902, +0.0010233333333, + +0.0003470588235, -0.0000300000000, +0.0000717647059, +0.0005625490196, + +0.0012327450980, +0.0018909803922, +0.0022739215686, +0.0022260784314, + +0.0017831372549, +0.0009872549020, +0.0000180392157, -0.0007480392157, + -0.0011968627451, -0.0013103921569, -0.0010831372549, -0.0008256862745, + -0.0007241176471, -0.0007121568627, -0.0007958823529, -0.0008676470588, + -0.0005923529412, -0.0000358823529, +0.0004488235294, +0.0007719607843, + +0.0010650980392, +0.0013045098039, +0.0013762745098, +0.0012088235294, + +0.0008915686275, +0.0005266666667, +0.0000239215686, -0.0006343137255, + -0.0011009803922, -0.0011488235294, -0.0007839215686, -0.0001076470588, + +0.0007778431373, +0.0016694117647, +0.0022917647059, +0.0024054901961, + +0.0019566666667, +0.0011907843137, +0.0005684313725, +0.0003350980392, + +0.0003770588235, +0.0004188235294, +0.0002692156863, -0.0000837254902, + -0.0004547058824, -0.0006462745098, -0.0006103921569, -0.0003829411765, + -0.0000837254902, +0.0000000000000, -0.0003470588235, -0.0011249019608, + -0.0019088235294, -0.0021482352941, -0.0017113725490, -0.0007241176471, + +0.0006043137255, +0.0018370588235, +0.0024772549020, +0.0023576470588, + +0.0015976470588, +0.0005564705882, -0.0003770588235, -0.0009513725490, + -0.0010292156863, -0.0006462745098, +0.0000119607843, +0.0007001960784, + +0.0011309803922, +0.0013403921569, +0.0014719607843, +0.0015439215686, + +0.0016037254902, +0.0016813725490, +0.0014900000000, +0.0009215686275, + +0.0000956862745, -0.0008017647059, -0.0015078431373, -0.0016994117647, + -0.0013523529412, -0.0008198039216, -0.0004129411765, -0.0001796078431, + -0.0002452941176, -0.0006882352941, -0.0012566666667, -0.0015976470588, + -0.0014719607843, -0.0008078431373, +0.0001017647059, +0.0007958823529, + +0.0009035294118, +0.0005505882353, +0.0001974509804, +0.0002633333333, + +0.0007001960784, +0.0011309803922, +0.0013164705882, +0.0012566666667, + +0.0009394117647, +0.0004727450980, +0.0000119607843, -0.0002633333333, + -0.0002633333333, -0.0001076470588, +0.0000239215686, +0.0000300000000, + -0.0001674509804, -0.0005325490196, -0.0008796078431, -0.0009933333333, + -0.0008017647059, -0.0005325490196, -0.0005745098039, -0.0010831372549, + -0.0017472549020, -0.0022500000000, -0.0024952941176, -0.0024772549020, + -0.0023037254902, -0.0022439215686, -0.0022798039216, -0.0021841176471, + -0.0018968627451, -0.0014780392157, -0.0009096078431, -0.0003590196078, + -0.0001196078431, -0.0003709803922, -0.0008437254902, -0.0011488235294, + -0.0010411764706, -0.0005745098039, +0.0000419607843, +0.0005505882353, + +0.0006701960784, +0.0004009803922, -0.0000478431373, -0.0004129411765, + -0.0004427450980, -0.0001554901961, +0.0001554901961, +0.0002333333333, + +0.0000180392157, -0.0003170588235, -0.0005984313725, -0.0007719607843, + -0.0008198039216, -0.0007778431373, -0.0007180392157, -0.0006582352941, + -0.0005803921569, -0.0005803921569, -0.0006521568627, -0.0006941176471, + -0.0006223529412, -0.0005025490196, -0.0004188235294, -0.0003829411765, + -0.0003350980392, -0.0001796078431, +0.0001376470588, +0.0004368627451, + +0.0005684313725, +0.0005205882353, +0.0003531372549, +0.0000898039216, + -0.0001615686275, -0.0003650980392, -0.0005025490196, -0.0005266666667, + -0.0003470588235, +0.0000358823529, +0.0004009803922, +0.0005325490196, + +0.0005386274510, +0.0004966666667, +0.0003531372549, +0.0001376470588, + -0.0001615686275, -0.0005445098039, -0.0007839215686, -0.0007480392157, + -0.0004249019608, +0.0001017647059, +0.0007241176471, +0.0012447058824, + +0.0014541176471, +0.0012505882353, +0.0006941176471, -0.0000358823529, + -0.0006701960784, -0.0009215686275, -0.0007480392157, -0.0002154901961, + +0.0004427450980, +0.0010531372549, +0.0013523529412, +0.0012088235294, + +0.0008556862745, +0.0006223529412, +0.0005325490196, +0.0005205882353, + +0.0005325490196, +0.0005745098039, +0.0006103921569, +0.0005505882353, + +0.0003590196078, +0.0001315686275, +0.0000778431373, +0.0003770588235, + +0.0008198039216, +0.0011070588235, +0.0011190196078, +0.0009154901961, + +0.0006941176471, +0.0004009803922, -0.0000239215686, -0.0004368627451, + -0.0007300000000, -0.0008976470588, -0.0008676470588, -0.0006641176471, + -0.0004368627451, -0.0002692156863, -0.0002513725490, -0.0003890196078, + -0.0005684313725, -0.0006223529412, -0.0006401960784, -0.0007060784314, + -0.0007600000000, -0.0006401960784, -0.0004307843137, -0.0002274509804, + -0.0000717647059, +0.0000837254902, +0.0003231372549, +0.0006760784314, + +0.0009752941176, +0.0009394117647, +0.0006043137255, +0.0002931372549, + +0.0000539215686, -0.0002213725490, -0.0004488235294, -0.0004966666667, + -0.0004966666667, -0.0004488235294, -0.0003170588235, -0.0001554901961, + +0.0000419607843, +0.0002572549020, +0.0002154901961, -0.0000778431373, + -0.0003590196078, -0.0004847058824, -0.0004905882353, -0.0002811764706, + +0.0001615686275, +0.0006641176471, +0.0009096078431, +0.0007719607843, + +0.0003949019608, +0.0000060784314, -0.0002633333333, -0.0004368627451, + -0.0006462745098, -0.0009933333333, -0.0013643137255, -0.0015617647059, + -0.0014360784314, -0.0009274509804, -0.0002692156863, +0.0001615686275, + +0.0003050980392, +0.0002394117647, -0.0000180392157, -0.0003650980392, + -0.0006223529412, -0.0007898039216, -0.0007658823529, -0.0004607843137, + +0.0000419607843, +0.0004666666667, +0.0005625490196, +0.0003411764706, + +0.0000358823529, -0.0001735294118, -0.0001974509804, -0.0000778431373, + +0.0001017647059, +0.0001674509804, +0.0000956862745, +0.0000180392157, + +0.0000180392157, +0.0000180392157, -0.0000119607843, -0.0000898039216, + -0.0001915686275, -0.0003650980392, -0.0006223529412, -0.0008617647059, + -0.0008737254902, -0.0006162745098, -0.0001915686275, +0.0002154901961, + +0.0004427450980, +0.0003650980392, +0.0000598039216, -0.0003290196078, + -0.0006462745098, -0.0007419607843, -0.0006043137255, -0.0003531372549, + -0.0001196078431, -0.0000119607843, -0.0000837254902, -0.0002992156863, + -0.0005086274510, -0.0004249019608, -0.0000180392157, +0.0003829411765, + +0.0004786274510, +0.0001915686275, -0.0003949019608, -0.0010233333333, + -0.0014001960784, -0.0014600000000, -0.0011968627451, -0.0007001960784, + -0.0002333333333, +0.0001315686275, +0.0004607843137, +0.0007539215686, + +0.0009335294118, +0.0009513725490, +0.0007241176471, +0.0002692156863, + -0.0003050980392, -0.0008617647059, -0.0012984313725, -0.0014719607843, + -0.0013223529412, -0.0009574509804, -0.0005803921569, -0.0002213725490, + +0.0002035294118, +0.0007180392157, +0.0011309803922, +0.0012805882353, + +0.0011070588235, +0.0006821568627, +0.0002274509804, -0.0000180392157, + +0.0000239215686, +0.0003111764706, +0.0006582352941, +0.0009096078431, + +0.0010352941176, +0.0011190196078, +0.0012447058824, +0.0013403921569, + +0.0012505882353, +0.0009633333333, +0.0006162745098, +0.0002992156863, + +0.0000717647059, +0.0000539215686, +0.0002394117647, +0.0005205882353, + +0.0007480392157, +0.0008437254902, +0.0007839215686, +0.0005684313725, + +0.0002274509804, -0.0000358823529, -0.0000778431373, +0.0001137254902, + +0.0004068627451, +0.0006462745098, +0.0008496078431, +0.0010650980392, + +0.0011788235294, +0.0012327450980, +0.0013403921569, +0.0014241176471, + +0.0013164705882, +0.0010233333333, +0.0006760784314, +0.0002931372549, + -0.0001496078431, -0.0005684313725, -0.0007719607843, -0.0006462745098, + -0.0002513725490, +0.0001796078431, +0.0005086274510, +0.0007360784314, + +0.0008078431373, +0.0006103921569, +0.0002752941176, +0.0000060784314, + -0.0001376470588, -0.0002094117647, -0.0002213725490, -0.0001674509804, + -0.0000837254902, -0.0000539215686, -0.0001196078431, -0.0002513725490, + -0.0002394117647, +0.0000300000000, +0.0003350980392, +0.0004666666667, + +0.0004607843137, +0.0003770588235, +0.0003290196078, +0.0003650980392, + +0.0004368627451, +0.0004905882353, +0.0004666666667, +0.0003111764706, + +0.0000956862745, -0.0001256862745, -0.0002572549020, -0.0001854901961, + +0.0000837254902, +0.0005564705882, +0.0011788235294, +0.0016994117647, + +0.0018729411765, +0.0016515686275, +0.0011488235294, +0.0005205882353, + -0.0000658823529, -0.0004188235294, -0.0004068627451, +0.0000000000000, + +0.0006043137255, +0.0010770588235, +0.0012984313725, +0.0013343137255, + +0.0011907843137, +0.0008856862745, +0.0006043137255, +0.0005205882353, + +0.0005505882353, +0.0005564705882, +0.0004607843137, +0.0002811764706, + +0.0000898039216, -0.0000717647059, -0.0002752941176, -0.0004427450980, + -0.0004607843137, -0.0003590196078, -0.0002633333333, -0.0002752941176, + -0.0003650980392, -0.0004368627451, -0.0003829411765, -0.0001496078431, + +0.0001615686275, +0.0003650980392, +0.0003650980392, +0.0001674509804, + -0.0002094117647, -0.0006941176471, -0.0010650980392, -0.0011668627451, + -0.0010890196078, -0.0009694117647, -0.0008256862745, -0.0006401960784, + -0.0004786274510, -0.0003770588235, -0.0002872549020, -0.0000658823529, + +0.0002394117647, +0.0004307843137, +0.0003350980392, +0.0000060784314, + -0.0003829411765, -0.0006582352941, -0.0007658823529, -0.0007060784314, + -0.0004905882353, -0.0001796078431, +0.0001615686275, +0.0004427450980, + +0.0006223529412, +0.0006641176471, +0.0005625490196, +0.0003590196078, + +0.0001735294118, +0.0000478431373, -0.0001196078431, -0.0004307843137, + -0.0007060784314, -0.0007060784314, -0.0003770588235, +0.0000778431373, + +0.0005625490196, +0.0010292156863, +0.0013703921569, +0.0013762745098, + +0.0010531372549, +0.0005505882353, +0.0000358823529, -0.0004068627451, + -0.0007600000000, -0.0009933333333, -0.0010233333333, -0.0007600000000, + -0.0001854901961, +0.0004427450980, +0.0008376470588, +0.0008737254902, + +0.0006343137255, +0.0001674509804, -0.0003890196078, -0.0008556862745, + -0.0011309803922, -0.0012266666667, -0.0011129411765, -0.0008496078431, + -0.0005625490196, -0.0003531372549, -0.0002992156863, -0.0003709803922, + -0.0004607843137, -0.0004666666667, -0.0004488235294, -0.0004905882353, + -0.0005864705882, -0.0007241176471, -0.0009035294118, -0.0010531372549, + -0.0011549019608, -0.0011727450980, -0.0010531372549, -0.0008437254902, + -0.0005564705882, -0.0001796078431, +0.0001256862745, +0.0001496078431, + -0.0001256862745, -0.0005325490196, -0.0009154901961, -0.0011249019608, + -0.0010770588235, -0.0008256862745, -0.0003890196078, +0.0002811764706, + +0.0009274509804, +0.0011847058824, +0.0009694117647, +0.0004547058824, + -0.0000478431373, -0.0003111764706, -0.0004249019608, -0.0004905882353, + -0.0004905882353, -0.0004009803922, -0.0003170588235, -0.0002452941176, + -0.0001735294118, -0.0000956862745, -0.0000717647059, -0.0000539215686, + +0.0000119607843, +0.0002992156863, +0.0007480392157, +0.0010831372549, + +0.0010770588235, +0.0007898039216, +0.0003111764706, -0.0001915686275, + -0.0005386274510, -0.0006462745098, -0.0004547058824, +0.0000060784314, + +0.0004847058824, +0.0007419607843, +0.0007719607843, +0.0006701960784, + +0.0004547058824, +0.0001076470588, -0.0003290196078, -0.0006582352941, + -0.0007360784314, -0.0005745098039, -0.0002752941176, +0.0000898039216, + +0.0004009803922, +0.0005147058824, +0.0003829411765, +0.0001196078431, + -0.0001196078431, -0.0002692156863, -0.0003111764706, -0.0002572549020, + -0.0001017647059, +0.0001315686275, +0.0003890196078, +0.0005745098039, + +0.0005803921569, +0.0003590196078, +0.0001196078431, +0.0000358823529, + +0.0001196078431, +0.0002992156863, +0.0004847058824, +0.0005505882353, + +0.0004427450980, +0.0001315686275, -0.0002452941176, -0.0006043137255, + -0.0008556862745, -0.0009813725490, -0.0008915686275, -0.0005266666667, + +0.0000778431373, +0.0007539215686, +0.0013284313725, +0.0015798039216, + +0.0013762745098, +0.0008017647059, +0.0001615686275, -0.0002333333333, + -0.0002692156863, -0.0000717647059, +0.0002274509804, +0.0005564705882, + +0.0008437254902, +0.0009154901961, +0.0006821568627, +0.0002274509804, + -0.0001915686275, -0.0004666666667, -0.0005625490196, -0.0004427450980, + -0.0000956862745, +0.0002992156863, +0.0005923529412, +0.0006821568627, + +0.0006103921569, +0.0005025490196, +0.0004427450980, +0.0003770588235, + +0.0002811764706, +0.0001674509804, +0.0000598039216, +0.0000000000000, + +0.0000239215686, +0.0001376470588, +0.0002811764706, +0.0003231372549, + +0.0001615686275, -0.0001376470588, -0.0004488235294, -0.0006401960784, + -0.0006701960784, -0.0005025490196, -0.0001376470588, +0.0002452941176, + +0.0003770588235, +0.0001735294118, -0.0003170588235, -0.0009215686275, + -0.0013703921569, -0.0014719607843, -0.0011847058824, -0.0006821568627, + -0.0002572549020, -0.0000717647059, -0.0001256862745, -0.0003290196078, + -0.0005625490196, -0.0007241176471, -0.0008317647059, -0.0007658823529, + -0.0004547058824, -0.0000119607843, +0.0002513725490, +0.0002154901961, + -0.0000658823529, -0.0003890196078, -0.0005386274510, -0.0004009803922, + -0.0001017647059, +0.0001974509804, +0.0003890196078, +0.0003650980392, + +0.0000778431373, -0.0003350980392, -0.0006941176471, -0.0008198039216, + -0.0006701960784, -0.0003350980392, +0.0000539215686, +0.0004786274510, + +0.0008017647059, +0.0008437254902, +0.0005803921569, +0.0001915686275, + -0.0001496078431, -0.0004307843137, -0.0007360784314, -0.0010052941176, + -0.0009992156863, -0.0006821568627, -0.0001496078431, +0.0005325490196, + +0.0012686274510, +0.0017413725490, +0.0016933333333, +0.0010950980392, + +0.0000956862745, -0.0010172549020, -0.0018668627451, -0.0020464705882, + -0.0013703921569, -0.0000358823529, +0.0014958823529, +0.0025731372549, + +0.0026568627451, +0.0014360784314, -0.0008676470588, -0.0032970588235, + -0.0045117647059, -0.0038894117647, -0.0018070588235, +0.0008017647059, + +0.0030996078431, +0.0043143137255, +0.0040211764706, +0.0023754901961, + +0.0002692156863, -0.0012147058824, -0.0014480392157, -0.0006462745098, + +0.0004727450980, +0.0012327450980, +0.0012984313725, +0.0006882352941, + -0.0002692156863, -0.0010711764706, -0.0012147058824, -0.0006821568627, + +0.0000837254902, +0.0006343137255, +0.0008496078431, +0.0008676470588, + +0.0007539215686, +0.0003949019608, +0.0000000000000, -0.0000539215686, + +0.0002811764706, +0.0006882352941, +0.0008137254902, +0.0005564705882, + +0.0001196078431, -0.0002811764706, -0.0005864705882, -0.0006821568627, + -0.0004727450980, -0.0000060784314, +0.0005445098039, +0.0009872549020, + +0.0011788235294, +0.0011070588235, +0.0007180392157, +0.0000598039216, + -0.0006282352941, -0.0010650980392, -0.0011129411765, -0.0008676470588, + -0.0005803921569, -0.0003290196078, -0.0000898039216, +0.0000778431373, + +0.0000898039216, -0.0000060784314, -0.0001137254902, -0.0001674509804, + -0.0002154901961, -0.0001796078431, +0.0000478431373, +0.0004905882353, + +0.0008915686275, +0.0009274509804, +0.0005325490196, -0.0000180392157, + -0.0005325490196, -0.0008496078431, -0.0009154901961, -0.0007600000000, + -0.0005325490196, -0.0003890196078, -0.0004427450980, -0.0006462745098, + -0.0008496078431, -0.0008796078431, -0.0006941176471, -0.0003709803922, + -0.0000119607843, +0.0002094117647, +0.0002811764706, +0.0003050980392, + +0.0003350980392, +0.0003590196078, +0.0004009803922, +0.0004068627451, + +0.0002633333333, -0.0000358823529, -0.0003531372549, -0.0005325490196, + -0.0004727450980, -0.0001496078431, +0.0003890196078, +0.0008796078431, + +0.0009454901961, +0.0004727450980, -0.0002094117647, -0.0006582352941, + -0.0006462745098, -0.0003170588235, +0.0000598039216, +0.0002213725490, + +0.0000358823529, -0.0004488235294, -0.0010292156863, -0.0014062745098, + -0.0013882352941, -0.0011009803922, -0.0007241176471, -0.0003411764706, + -0.0000478431373, +0.0000956862745, +0.0001435294118, +0.0001315686275, + +0.0000717647059, -0.0000239215686, -0.0000539215686, +0.0000778431373, + +0.0002394117647, +0.0001974509804, -0.0000837254902, -0.0004488235294, + -0.0006821568627, -0.0007001960784, -0.0004847058824, -0.0001554901961, + +0.0000956862745, +0.0001674509804, +0.0001435294118, +0.0000898039216, + +0.0000598039216, +0.0001137254902, +0.0002513725490, +0.0002992156863, + +0.0000658823529, -0.0004607843137, -0.0010411764706, -0.0013403921569, + -0.0012984313725, -0.0010352941176, -0.0006582352941, -0.0002035294118, + +0.0001674509804, +0.0003650980392, +0.0003949019608, +0.0003949019608, + +0.0004009803922, +0.0003650980392, +0.0001854901961, -0.0000778431373, + -0.0004009803922, -0.0006941176471, -0.0008617647059, -0.0008256862745, + -0.0005984313725, -0.0002452941176, +0.0001017647059, +0.0003350980392, + +0.0003290196078, +0.0000898039216, -0.0001854901961, -0.0003290196078, + -0.0003231372549, -0.0001915686275, +0.0000000000000, +0.0001915686275, + +0.0002992156863, +0.0002094117647, -0.0000478431373, -0.0003050980392, + -0.0004188235294, -0.0004068627451, -0.0003170588235, -0.0002452941176, + -0.0002333333333, -0.0002394117647, -0.0002094117647, -0.0001735294118, + -0.0001915686275, -0.0002872549020, -0.0003411764706, -0.0002572549020, + -0.0000539215686, +0.0002094117647, +0.0004786274510, +0.0005984313725, + +0.0005445098039, +0.0004427450980, +0.0004727450980, +0.0005505882353, + +0.0004905882353, +0.0002213725490, -0.0000898039216, -0.0003411764706, + -0.0004786274510, -0.0004188235294, -0.0001315686275, +0.0002633333333, + +0.0006043137255, +0.0007121568627, +0.0005803921569, +0.0003231372549, + +0.0001196078431, +0.0001137254902, +0.0004607843137, +0.0010711764706, + +0.0015737254902, +0.0015558823529, +0.0010233333333, +0.0002692156863, + -0.0004009803922, -0.0007719607843, -0.0006882352941, -0.0002094117647, + +0.0004368627451, +0.0009813725490, +0.0012566666667, +0.0013164705882, + +0.0012925490196, +0.0012447058824, +0.0012088235294, +0.0011368627451, + +0.0009752941176, +0.0007300000000, +0.0004666666667, +0.0002035294118, + +0.0000060784314, +0.0000000000000, +0.0001435294118, +0.0002692156863, + +0.0001915686275, -0.0001615686275, -0.0005923529412, -0.0007839215686, + -0.0007180392157, -0.0005564705882, -0.0004009803922, -0.0002692156863, + -0.0001854901961, -0.0001554901961, -0.0001915686275, -0.0002572549020, + -0.0002394117647, -0.0000778431373, +0.0001137254902, +0.0002394117647, + +0.0002213725490, +0.0000717647059, -0.0001796078431, -0.0005445098039, + -0.0009215686275, -0.0011249019608, -0.0010950980392, -0.0008376470588, + -0.0004249019608, +0.0000000000000, +0.0002752941176, +0.0003590196078, + +0.0002572549020, +0.0000598039216, -0.0000478431373, +0.0000539215686, + +0.0003290196078, +0.0006282352941, +0.0008556862745, +0.0009096078431, + +0.0007060784314, +0.0002752941176, -0.0002154901961, -0.0005266666667, + -0.0004905882353, -0.0001796078431, +0.0001674509804, +0.0003829411765, + +0.0003350980392, -0.0000658823529, -0.0007121568627, -0.0013403921569, + -0.0016515686275, -0.0015078431373, -0.0010472549020, -0.0005745098039, + -0.0001435294118, +0.0002633333333, +0.0005684313725, +0.0007539215686, + +0.0008676470588, +0.0009096078431, +0.0008856862745, +0.0007360784314, + +0.0004188235294, +0.0000000000000, -0.0003709803922, -0.0005445098039, + -0.0004368627451, -0.0001735294118, +0.0001076470588, +0.0003709803922, + +0.0005086274510, +0.0004068627451, +0.0000837254902, -0.0002872549020, + -0.0004666666667, -0.0003531372549, -0.0000837254902, +0.0001615686275, + +0.0002513725490, +0.0000956862745, -0.0002872549020, -0.0007060784314, + -0.0009096078431, -0.0007658823529, -0.0004547058824, -0.0002394117647, + -0.0001735294118, -0.0001137254902, +0.0000539215686, +0.0003050980392, + +0.0005325490196, +0.0007060784314, +0.0008078431373, +0.0007839215686, + +0.0005984313725, +0.0003231372549, +0.0000658823529, -0.0000419607843, + -0.0000060784314, +0.0001076470588, +0.0002333333333, +0.0003709803922, + +0.0004607843137, +0.0004905882353, +0.0004547058824, +0.0003829411765, + +0.0003350980392, +0.0003531372549, +0.0003650980392, +0.0003350980392, + +0.0002872549020, +0.0002274509804, +0.0000898039216, -0.0001017647059, + -0.0001974509804, -0.0001196078431, +0.0000119607843, +0.0000837254902, + +0.0000180392157, -0.0000658823529, -0.0000717647059, -0.0000419607843, + -0.0000119607843, +0.0000956862745, +0.0002931372549, +0.0004607843137, + +0.0005684313725, +0.0006401960784, +0.0006882352941, +0.0006941176471, + +0.0007241176471, +0.0007898039216, +0.0008137254902, +0.0007180392157, + +0.0005564705882, +0.0004068627451, +0.0003470588235, +0.0003590196078, + +0.0003890196078, +0.0003829411765, +0.0003770588235, +0.0003111764706, + +0.0001735294118, +0.0000598039216, +0.0001017647059, +0.0001974509804, + +0.0002154901961, +0.0001554901961, +0.0001017647059, +0.0000000000000, + -0.0002035294118, -0.0003829411765, -0.0003770588235, -0.0002154901961, + -0.0000837254902, -0.0002094117647, -0.0005445098039, -0.0008737254902, + -0.0010352941176, -0.0010233333333, -0.0008437254902, -0.0005325490196, + -0.0001554901961, +0.0002154901961, +0.0005386274510, +0.0007600000000, + +0.0008737254902, +0.0009215686275, +0.0008976470588, +0.0008376470588, + +0.0007658823529, +0.0007241176471, +0.0006760784314, +0.0005803921569, + +0.0004188235294, +0.0003050980392, +0.0003050980392, +0.0003770588235, + +0.0004427450980, +0.0004966666667, +0.0005205882353, +0.0005564705882, + +0.0005564705882, +0.0005205882353, +0.0004727450980, +0.0004307843137, + +0.0003829411765, +0.0003890196078, +0.0003949019608, +0.0003650980392, + +0.0003290196078, +0.0003470588235, +0.0003350980392, +0.0002213725490, + +0.0000000000000, -0.0002394117647, -0.0004009803922, -0.0004129411765, + -0.0003111764706, -0.0001854901961, -0.0001137254902, -0.0001376470588, + -0.0002452941176, -0.0003829411765, -0.0004666666667, -0.0004847058824, + -0.0004488235294, -0.0003231372549, -0.0001796078431, -0.0001435294118, + -0.0002154901961, -0.0002633333333, -0.0002274509804, -0.0001315686275, + -0.0000598039216, -0.0000658823529, -0.0001496078431, -0.0003290196078, + -0.0005445098039, -0.0006882352941, -0.0007001960784, -0.0006103921569, + -0.0004488235294, -0.0002931372549, -0.0001735294118, -0.0001315686275, + -0.0002035294118, -0.0003709803922, -0.0005205882353, -0.0006282352941, + -0.0006701960784, -0.0006223529412, -0.0005147058824, -0.0004188235294, + -0.0003231372549, -0.0001915686275, -0.0000358823529, +0.0000539215686, + +0.0000898039216, +0.0001137254902, +0.0002213725490, +0.0004368627451, + +0.0006582352941, +0.0007658823529, +0.0007600000000, +0.0006582352941, + +0.0004966666667, +0.0002513725490, -0.0001017647059, -0.0005147058824, + -0.0007898039216, -0.0008256862745, -0.0005984313725, -0.0001915686275, + +0.0001796078431, +0.0003949019608, +0.0004307843137, +0.0002752941176, + +0.0000300000000, -0.0001674509804, -0.0003111764706, -0.0003770588235, + -0.0003290196078, -0.0001554901961, +0.0000358823529, +0.0001315686275, + +0.0000300000000, -0.0002213725490, -0.0004786274510, -0.0005923529412, + -0.0006103921569, -0.0006103921569, -0.0005984313725, -0.0005325490196, + -0.0004068627451, -0.0002633333333, -0.0001915686275, -0.0001915686275, + -0.0001735294118, -0.0000478431373, +0.0001435294118, +0.0002811764706, + +0.0002752941176, +0.0001854901961, +0.0001256862745, +0.0001376470588, + +0.0001435294118, +0.0000956862745, -0.0000180392157, -0.0000956862745, + -0.0001137254902, -0.0001615686275, -0.0002872549020, -0.0004068627451, + -0.0004068627451, -0.0003111764706, -0.0002035294118, -0.0001256862745, + -0.0000717647059, -0.0000300000000, -0.0000119607843, -0.0000119607843, + -0.0000060784314, -0.0000180392157, -0.0001376470588, -0.0004068627451, + -0.0007001960784, -0.0008796078431, -0.0008856862745, -0.0007480392157, + -0.0004847058824, -0.0001554901961, +0.0001854901961, +0.0003890196078, + +0.0003231372549, +0.0000778431373, -0.0001435294118, -0.0002692156863, + -0.0002692156863, -0.0001915686275, -0.0001196078431, -0.0001256862745, + -0.0001915686275, -0.0002752941176, -0.0003531372549, -0.0004666666667, + -0.0005923529412, -0.0006582352941, -0.0006521568627, -0.0006582352941, + -0.0007241176471, -0.0007958823529, -0.0007958823529, -0.0006882352941, + -0.0004786274510, -0.0002213725490, -0.0000539215686, -0.0000658823529, + -0.0001854901961, -0.0002333333333, -0.0000956862745, +0.0001496078431, + +0.0002572549020, +0.0001076470588, -0.0001974509804, -0.0005025490196, + -0.0006821568627, -0.0006462745098, -0.0004249019608, -0.0001076470588, + +0.0001796078431, +0.0003290196078, +0.0002931372549, +0.0001256862745, + -0.0001017647059, -0.0002692156863, -0.0002452941176, +0.0000358823529, + +0.0004905882353, +0.0009274509804, +0.0011488235294, +0.0010890196078, + +0.0007600000000, +0.0002452941176, -0.0002692156863, -0.0005984313725, + -0.0006103921569, -0.0003170588235, +0.0000837254902, +0.0003770588235, + +0.0004307843137, +0.0002572549020, -0.0000419607843, -0.0003709803922, + -0.0006401960784, -0.0007778431373, -0.0007600000000, -0.0005923529412, + -0.0003290196078, -0.0000300000000, +0.0002572549020, +0.0005025490196, + +0.0006343137255, +0.0006043137255, +0.0004427450980, +0.0001615686275, + -0.0001496078431, -0.0003350980392, -0.0002333333333, +0.0001017647059, + +0.0004966666667, +0.0007839215686, +0.0008437254902, +0.0006343137255, + +0.0002154901961, -0.0002035294118, -0.0004009803922, -0.0003111764706, + -0.0000239215686, +0.0002692156863, +0.0004249019608, +0.0003590196078, + +0.0001554901961, -0.0000778431373, -0.0002213725490, -0.0002394117647, + -0.0001796078431, -0.0000658823529, +0.0000956862745, +0.0002692156863, + +0.0003231372549, +0.0002452941176, +0.0001554901961, +0.0001376470588, + +0.0001554901961, +0.0001076470588, -0.0000180392157, -0.0001554901961, + -0.0002872549020, -0.0004249019608, -0.0005147058824, -0.0005025490196, + -0.0003890196078, -0.0001915686275, +0.0000717647059, +0.0004009803922, + +0.0006821568627, +0.0008137254902, +0.0007480392157, +0.0005325490196, + +0.0002513725490, +0.0000180392157, -0.0001615686275, -0.0003411764706, + -0.0004905882353, -0.0005445098039, -0.0005025490196, -0.0003650980392, + -0.0001256862745, +0.0001974509804, +0.0004966666667, +0.0005984313725, + +0.0004068627451, -0.0000180392157, -0.0005025490196, -0.0008317647059, + -0.0008437254902, -0.0005564705882, -0.0001315686275, +0.0002572549020, + +0.0005086274510, +0.0004966666667, +0.0002692156863, -0.0000060784314, + -0.0001974509804, -0.0002333333333, -0.0001315686275, +0.0000180392157, + +0.0001435294118, +0.0002154901961, +0.0002811764706, +0.0003709803922, + +0.0004666666667, +0.0005205882353, +0.0005684313725, +0.0006223529412, + +0.0006582352941, +0.0006462745098, +0.0005684313725, +0.0004249019608, + +0.0002811764706, +0.0001615686275, +0.0000956862745, +0.0001017647059, + +0.0001796078431, +0.0002633333333, +0.0002811764706, +0.0002394117647, + +0.0001854901961, +0.0001435294118, +0.0001196078431, +0.0001017647059, + +0.0000717647059, +0.0000239215686, -0.0000658823529, -0.0001974509804, + -0.0002992156863, -0.0002872549020, -0.0001674509804, +0.0000300000000, + +0.0002633333333, +0.0004488235294, +0.0004847058824, +0.0003829411765, + +0.0002035294118, +0.0000060784314, -0.0001854901961, -0.0003111764706, + -0.0002931372549, -0.0001196078431, +0.0001196078431, +0.0003590196078, + +0.0005505882353, +0.0006701960784, +0.0006882352941, +0.0006103921569, + +0.0004368627451, +0.0002154901961, -0.0000300000000, -0.0002633333333, + -0.0004307843137, -0.0004547058824, -0.0002931372549, -0.0000239215686, + +0.0001974509804, +0.0002633333333, +0.0002333333333, +0.0001854901961, + +0.0001256862745, +0.0000060784314, -0.0001196078431, -0.0001854901961, + -0.0001674509804, -0.0001315686275, -0.0001017647059, -0.0000358823529, + +0.0001315686275, +0.0003770588235, +0.0006223529412, +0.0007658823529, + +0.0007180392157, +0.0004129411765, -0.0000539215686, -0.0005025490196, + -0.0007360784314, -0.0006821568627, -0.0003531372549, +0.0000956862745, + +0.0004607843137, +0.0006282352941, +0.0006282352941, +0.0004607843137, + +0.0002035294118, -0.0000358823529, -0.0001496078431, -0.0001076470588, + +0.0000358823529, +0.0001854901961, +0.0002752941176, +0.0002633333333, + +0.0001256862745, -0.0000898039216, -0.0002992156863, -0.0004188235294, + -0.0004547058824, -0.0004427450980, -0.0003709803922, -0.0002274509804, + -0.0001256862745, -0.0001435294118, -0.0001915686275, -0.0001376470588, + +0.0000119607843, +0.0001915686275, +0.0002811764706, +0.0002274509804, + +0.0000717647059, -0.0000419607843, -0.0001017647059, -0.0001137254902, + -0.0001137254902, -0.0001076470588, -0.0001256862745, -0.0001376470588, + -0.0001315686275, -0.0000717647059, +0.0000717647059, +0.0002931372549, + +0.0004966666667, +0.0006043137255, +0.0005984313725, +0.0005025490196, + +0.0003590196078, +0.0002154901961, +0.0001496078431, +0.0001915686275, + +0.0002872549020, +0.0003531372549, +0.0003111764706, +0.0001376470588, + -0.0000598039216, -0.0001974509804, -0.0002872549020, -0.0003770588235, + -0.0004547058824, -0.0004727450980, -0.0003709803922, -0.0001435294118, + +0.0001554901961, +0.0004607843137, +0.0007300000000, +0.0008856862745, + +0.0008737254902, +0.0006941176471, +0.0004068627451, +0.0000598039216, + -0.0002333333333, -0.0003829411765, -0.0003350980392, -0.0002154901961, + -0.0001554901961, -0.0001674509804, -0.0001915686275, -0.0001915686275, + -0.0001615686275, -0.0001137254902, -0.0000956862745, -0.0001435294118, + -0.0002572549020, -0.0003829411765, -0.0004307843137, -0.0003650980392, + -0.0002154901961, -0.0000717647059, +0.0000119607843, +0.0000060784314, + -0.0001196078431, -0.0003111764706, -0.0004847058824, -0.0005684313725, + -0.0005803921569, -0.0005386274510, -0.0004249019608, -0.0002213725490, + -0.0000119607843, +0.0001196078431, +0.0001554901961, +0.0001017647059, + -0.0000358823529, -0.0002452941176, -0.0004547058824, -0.0006043137255, + -0.0006821568627, -0.0006462745098, -0.0005147058824, -0.0003350980392, + -0.0001735294118, -0.0000419607843, +0.0000898039216, +0.0002811764706, + +0.0004786274510, +0.0005564705882, +0.0004427450980, +0.0002035294118, + -0.0000419607843, -0.0002452941176, -0.0003290196078, -0.0002513725490, + -0.0000419607843, +0.0002213725490, +0.0004727450980, +0.0005625490196, + +0.0004307843137, +0.0001076470588, -0.0002452941176, -0.0004786274510, + -0.0004666666667, -0.0002572549020, +0.0000239215686, +0.0002213725490, + +0.0002274509804, +0.0000539215686, -0.0001076470588, -0.0001376470588, + +0.0000180392157, +0.0002394117647, +0.0003890196078, +0.0003590196078, + +0.0000956862745, -0.0003470588235, -0.0007480392157, -0.0008856862745, + -0.0007001960784, -0.0003290196078, +0.0000358823529, +0.0002633333333, + +0.0003111764706, +0.0001615686275, -0.0000956862745, -0.0003531372549, + -0.0005025490196, -0.0005147058824, -0.0004009803922, -0.0002692156863, + -0.0001915686275, -0.0001554901961, -0.0001256862745, -0.0000778431373, + +0.0000119607843, +0.0001256862745, +0.0001615686275, +0.0000837254902, + -0.0000778431373, -0.0002452941176, -0.0002931372549, -0.0001554901961, + +0.0000778431373, +0.0003709803922, +0.0006162745098, +0.0007180392157, + +0.0005864705882, +0.0003050980392, +0.0000300000000, -0.0000837254902, + -0.0000300000000, +0.0001796078431, +0.0004666666667, +0.0006821568627, + +0.0007121568627, +0.0005864705882, +0.0003350980392, +0.0000239215686, + -0.0002274509804, -0.0002513725490, -0.0000239215686, +0.0003111764706, + +0.0006223529412, +0.0008198039216, +0.0008317647059, +0.0006462745098, + +0.0003231372549, +0.0000000000000, -0.0002035294118, -0.0002811764706, + -0.0002572549020, -0.0001854901961, -0.0001017647059, -0.0000358823529, + -0.0000119607843, -0.0000539215686, -0.0001315686275, -0.0002035294118, + -0.0002452941176, -0.0002274509804, -0.0001376470588, -0.0000119607843, + +0.0001315686275, +0.0002633333333, +0.0003350980392, +0.0002872549020, + +0.0001435294118, -0.0000300000000, -0.0001615686275, -0.0001854901961, + -0.0001017647059, +0.0000300000000, +0.0001735294118, +0.0002633333333, + +0.0002452941176, +0.0001554901961, +0.0000300000000, -0.0001196078431, + -0.0002811764706, -0.0003411764706, -0.0002035294118, +0.0001315686275, + +0.0005984313725, +0.0010172549020, +0.0012027450980, +0.0010650980392, + +0.0006343137255, +0.0000419607843, -0.0005266666667, -0.0008737254902, + -0.0009154901961, -0.0006760784314, -0.0002811764706, +0.0001615686275, + +0.0005205882353, +0.0006701960784, +0.0005445098039, +0.0002154901961, + -0.0001315686275, -0.0002992156863, -0.0002633333333, -0.0001076470588, + +0.0000598039216, +0.0002333333333, +0.0003829411765, +0.0005205882353, + +0.0005803921569, +0.0005086274510, +0.0002811764706, -0.0000300000000, + -0.0003470588235, -0.0005625490196, -0.0005984313725, -0.0004666666667, + -0.0002633333333, -0.0001137254902, -0.0000956862745, -0.0001854901961, + -0.0002872549020, -0.0003231372549, -0.0002633333333, -0.0001376470588, + +0.0000119607843, +0.0001435294118, +0.0002035294118, +0.0001854901961, + +0.0001196078431, +0.0000180392157, -0.0000539215686, -0.0001017647059, + -0.0001435294118, -0.0002213725490, -0.0003231372549, -0.0004786274510, + -0.0006103921569, -0.0006162745098, -0.0003949019608, +0.0000000000000, + +0.0004427450980, +0.0007658823529, +0.0008617647059, +0.0006882352941, + +0.0003411764706, -0.0000478431373, -0.0003470588235, -0.0004368627451, + -0.0002931372549, -0.0000239215686, +0.0001974509804, +0.0002572549020, + +0.0001256862745, -0.0001137254902, -0.0003890196078, -0.0005564705882, + -0.0005025490196, -0.0002154901961, +0.0001915686275, +0.0005803921569, + +0.0007658823529, +0.0006882352941, +0.0004129411765, +0.0000837254902, + -0.0001735294118, -0.0002872549020, -0.0002931372549, -0.0002274509804, + -0.0001554901961, -0.0000956862745, -0.0000478431373, +0.0000239215686, + +0.0000898039216, +0.0001256862745, +0.0000898039216, -0.0000060784314, + -0.0001256862745, -0.0001915686275, -0.0001735294118, -0.0000837254902, + +0.0000300000000, +0.0001615686275, +0.0002752941176, +0.0002931372549, + +0.0001496078431, -0.0001554901961, -0.0005445098039, -0.0008256862745, + -0.0008317647059, -0.0005684313725, -0.0001496078431, +0.0002394117647, + +0.0004905882353, +0.0005266666667, +0.0003949019608, +0.0001796078431, + -0.0000060784314, -0.0001256862745, -0.0001554901961, -0.0001554901961, + -0.0001796078431, -0.0002452941176, -0.0003290196078, -0.0004249019608, + -0.0005266666667, -0.0005984313725, -0.0005505882353, -0.0003829411765, + -0.0001915686275, -0.0000778431373, -0.0000060784314, +0.0000180392157, + +0.0000060784314, -0.0000358823529, -0.0001137254902, -0.0002333333333, + -0.0003590196078, -0.0004368627451, -0.0004188235294, -0.0002872549020, + -0.0001137254902, +0.0000419607843, +0.0001137254902, +0.0000717647059, + -0.0000658823529, -0.0002572549020, -0.0004129411765, -0.0004488235294, + -0.0003770588235, -0.0002333333333, -0.0000658823529, +0.0001017647059, + +0.0002452941176, +0.0003170588235, +0.0002394117647, +0.0000539215686, + -0.0001315686275, -0.0002035294118, -0.0001376470588, -0.0000119607843, + +0.0000778431373, +0.0001674509804, +0.0002513725490, +0.0003231372549, + +0.0003470588235, +0.0003411764706, +0.0002992156863, +0.0002094117647, + +0.0000598039216, -0.0001196078431, -0.0002633333333, -0.0002992156863, + -0.0002394117647, -0.0001735294118, -0.0001196078431, -0.0000898039216, + -0.0000598039216, -0.0000239215686, +0.0000478431373, +0.0001496078431, + +0.0002692156863, +0.0003470588235, +0.0003231372549, +0.0001435294118, + -0.0000956862745, -0.0003050980392, -0.0004188235294, -0.0004188235294, + -0.0003290196078, -0.0002213725490, -0.0001376470588, -0.0001017647059, + -0.0000898039216, -0.0001256862745, -0.0002154901961, -0.0003350980392, + -0.0004129411765, -0.0004488235294, -0.0004188235294, -0.0003531372549, + -0.0002633333333, -0.0000898039216, +0.0001256862745, +0.0003290196078, + +0.0004068627451, +0.0003170588235, +0.0000598039216, -0.0002633333333, + -0.0005325490196, -0.0006282352941, -0.0005564705882, -0.0003709803922, + -0.0001796078431, +0.0000000000000, +0.0001615686275, +0.0003350980392, + +0.0004786274510, +0.0005386274510, +0.0004727450980, +0.0003231372549, + +0.0001076470588, -0.0000837254902, -0.0002274509804, -0.0002752941176, + -0.0002872549020, -0.0002931372549, -0.0002811764706, -0.0001735294118, + +0.0000419607843, +0.0003170588235, +0.0005445098039, +0.0006462745098, + +0.0006103921569, +0.0004368627451, +0.0001796078431, -0.0000478431373, + -0.0001435294118, -0.0000778431373, +0.0001137254902, +0.0003411764706, + +0.0005445098039, +0.0006462745098, +0.0006521568627, +0.0005505882353, + +0.0004009803922, +0.0002513725490, +0.0001315686275, +0.0000358823529, + -0.0000239215686, -0.0000658823529, -0.0000717647059, -0.0000717647059, + -0.0000478431373, -0.0000358823529, +0.0000000000000, +0.0000837254902, + +0.0002274509804, +0.0003829411765, +0.0005086274510, +0.0005505882353, + +0.0004786274510, +0.0002872549020, +0.0000000000000, -0.0003231372549, + -0.0006043137255, -0.0007778431373, -0.0008256862745, -0.0007121568627, + -0.0004666666667, -0.0001554901961, +0.0000956862745, +0.0002213725490, + +0.0002154901961, +0.0001496078431, +0.0000898039216, +0.0000539215686, + +0.0000000000000, -0.0000300000000, -0.0000060784314, +0.0000956862745, + +0.0002154901961, +0.0002752941176, +0.0002274509804, +0.0000956862745, + -0.0000358823529, -0.0000898039216, -0.0000837254902, -0.0000358823529, + -0.0000239215686, -0.0000478431373, -0.0000539215686, +0.0000180392157, + +0.0001735294118, +0.0003470588235, +0.0004607843137, +0.0004847058824, + +0.0004068627451, +0.0002333333333, +0.0000358823529, -0.0001554901961, + -0.0002872549020, -0.0003111764706, -0.0001974509804, +0.0000119607843, + +0.0002452941176, +0.0003949019608, +0.0004068627451, +0.0002513725490, + +0.0000180392157, -0.0001854901961, -0.0002513725490, -0.0001674509804, + +0.0000419607843, +0.0002752941176, +0.0004188235294, +0.0003590196078, + +0.0001615686275, -0.0000956862745, -0.0003170588235, -0.0004188235294, + -0.0003411764706, -0.0001376470588, +0.0001076470588, +0.0003290196078, + +0.0004666666667, +0.0004786274510, +0.0004068627451, +0.0003290196078, + +0.0002752941176, +0.0002394117647, +0.0001796078431, +0.0000478431373, + -0.0001315686275, -0.0002692156863, -0.0002692156863, -0.0000956862745, + +0.0001735294118, +0.0004488235294, +0.0005864705882, +0.0005266666667, + +0.0002692156863, -0.0000300000000, -0.0002931372549, -0.0004068627451, + -0.0003829411765, -0.0002452941176, -0.0000300000000, +0.0001854901961, + +0.0002992156863, +0.0002572549020, +0.0001376470588, +0.0000539215686, + +0.0000419607843, +0.0000778431373, +0.0001435294118, +0.0002333333333, + +0.0002931372549, +0.0002931372549, +0.0002213725490, +0.0000658823529, + -0.0001376470588, -0.0003231372549, -0.0003890196078, -0.0003350980392, + -0.0001796078431, +0.0000119607843, +0.0002154901961, +0.0003231372549, + +0.0003470588235, +0.0002992156863, +0.0002274509804, +0.0001315686275, + +0.0000358823529, -0.0000598039216, -0.0001674509804, -0.0003111764706, + -0.0004009803922, -0.0003650980392, -0.0001735294118, +0.0000658823529, + +0.0002992156863, +0.0004427450980, +0.0004666666667, +0.0003111764706, + +0.0000358823529, -0.0002452941176, -0.0004249019608, -0.0004427450980, + -0.0002872549020, -0.0000419607843, +0.0001554901961, +0.0002333333333, + +0.0001915686275, +0.0000898039216, -0.0000119607843, -0.0000419607843, + -0.0000060784314, +0.0000539215686, +0.0000837254902, +0.0000300000000, + -0.0000956862745, -0.0002094117647, -0.0002931372549, -0.0003231372549, + -0.0003050980392, -0.0001974509804, -0.0000358823529, +0.0001496078431, + +0.0002811764706, +0.0003290196078, +0.0002931372549, +0.0001974509804, + +0.0000419607843, -0.0001196078431, -0.0002752941176, -0.0003770588235, + -0.0004427450980, -0.0004188235294, -0.0002931372549, -0.0000837254902, + +0.0001076470588, +0.0002452941176, +0.0003231372549, +0.0003350980392, + +0.0002752941176, +0.0001496078431, +0.0000239215686, -0.0000837254902, + -0.0001496078431, -0.0001796078431, -0.0001615686275, -0.0001256862745, + -0.0000658823529, +0.0000000000000, +0.0001076470588, +0.0002154901961, + +0.0002931372549, +0.0002992156863, +0.0002394117647, +0.0001076470588, + -0.0000180392157, -0.0001137254902, -0.0001435294118, -0.0001256862745, + -0.0000837254902, -0.0000658823529, -0.0000419607843, -0.0000060784314, + +0.0000598039216, +0.0001615686275, +0.0002872549020, +0.0003890196078, + +0.0004188235294, +0.0003470588235, +0.0001796078431, -0.0000180392157, + -0.0001735294118, -0.0001854901961, -0.0000717647059, +0.0000837254902, + +0.0002094117647, +0.0002931372549, +0.0003231372549, +0.0002811764706, + +0.0001674509804, +0.0000239215686, -0.0001076470588, -0.0001974509804, + -0.0002513725490, -0.0002394117647, -0.0001735294118, -0.0000778431373, + -0.0000180392157, +0.0000119607843, +0.0000180392157, +0.0000060784314, + -0.0000717647059, -0.0002094117647, -0.0003650980392, -0.0004905882353, + -0.0005325490196, -0.0004847058824, -0.0003770588235, -0.0002154901961, + -0.0000419607843, +0.0000658823529, +0.0000717647059, +0.0000000000000, + -0.0000898039216, -0.0001435294118, -0.0001137254902, -0.0000419607843, + +0.0000180392157, +0.0000000000000, -0.0001017647059, -0.0002752941176, + -0.0004188235294, -0.0004786274510, -0.0004129411765, -0.0002274509804, + +0.0000300000000, +0.0002333333333, +0.0003050980392, +0.0002452941176, + +0.0001315686275, +0.0000119607843, -0.0000539215686, -0.0000956862745, + -0.0001076470588, -0.0001196078431, -0.0001256862745, -0.0001076470588, + -0.0000419607843, +0.0000419607843, +0.0001315686275, +0.0002094117647, + +0.0002333333333, +0.0001615686275, +0.0000060784314, -0.0001854901961, + -0.0003411764706, -0.0003590196078, -0.0002692156863, -0.0001196078431, + +0.0000180392157, +0.0001496078431, +0.0002333333333, +0.0002931372549, + +0.0003411764706, +0.0003650980392, +0.0003231372549, +0.0002213725490, + +0.0000478431373, -0.0001137254902, -0.0002452941176, -0.0003050980392, + -0.0003231372549, -0.0002931372549, -0.0002035294118, -0.0000658823529, + +0.0000658823529, +0.0001315686275, +0.0001137254902, +0.0000119607843, + -0.0000956862745, -0.0001854901961, -0.0002154901961, -0.0002094117647, + -0.0001796078431, -0.0001554901961, -0.0001376470588, -0.0001137254902, + -0.0000778431373, -0.0000478431373, -0.0000180392157, -0.0000119607843, + -0.0000239215686, -0.0000539215686, -0.0000717647059, -0.0000898039216, + -0.0001076470588, -0.0001376470588, -0.0001735294118, -0.0002154901961, + -0.0002154901961, -0.0001735294118, -0.0001017647059, -0.0000598039216, + -0.0000778431373, -0.0001256862745, -0.0001496078431, -0.0001315686275, + -0.0000837254902, -0.0000180392157, +0.0000060784314, -0.0000060784314, + -0.0000419607843, -0.0000717647059, -0.0000778431373, -0.0000119607843, + +0.0000837254902, +0.0002094117647, +0.0003350980392, +0.0004249019608, + +0.0004368627451, +0.0003890196078, +0.0003231372549, +0.0002692156863, + +0.0001974509804, +0.0001137254902, -0.0000060784314, -0.0001315686275, + -0.0002094117647, -0.0001915686275, -0.0000837254902, +0.0000717647059, + +0.0002394117647, +0.0003949019608, +0.0004905882353, +0.0004905882353, + +0.0004068627451, +0.0002811764706, +0.0001796078431, +0.0001256862745, + +0.0001196078431, +0.0001076470588, +0.0000658823529, -0.0000358823529, + -0.0001496078431, -0.0001915686275, -0.0001196078431, +0.0000239215686, + +0.0001796078431, +0.0002692156863, +0.0002752941176, +0.0001735294118, + +0.0000180392157, -0.0001435294118, -0.0002811764706, -0.0003650980392, + -0.0003411764706, -0.0002035294118, -0.0000180392157, +0.0001435294118, + +0.0002274509804, +0.0002094117647, +0.0001076470588, +0.0000119607843, + -0.0000358823529, -0.0000300000000, +0.0000000000000, +0.0000658823529, + +0.0001315686275, +0.0002035294118, +0.0002154901961, +0.0001496078431, + +0.0000119607843, -0.0000956862745, -0.0001615686275, -0.0001496078431, + -0.0000778431373, +0.0000239215686, +0.0000898039216, +0.0000837254902, + +0.0000000000000, -0.0000956862745, -0.0001615686275, -0.0001674509804, + -0.0001196078431, -0.0000180392157, +0.0001196078431, +0.0002692156863, + +0.0003709803922, +0.0003829411765, +0.0003411764706, +0.0002811764706, + +0.0002394117647, +0.0001674509804, +0.0000180392157, -0.0001615686275, + -0.0003170588235, -0.0004129411765, -0.0004249019608, -0.0003411764706, + -0.0001735294118, +0.0000060784314, +0.0001496078431, +0.0001915686275, + +0.0001256862745, -0.0000419607843, -0.0002094117647, -0.0003050980392, + -0.0002752941176, -0.0001915686275, -0.0001196078431, -0.0001435294118, + -0.0002394117647, -0.0003709803922, -0.0004307843137, -0.0003709803922, + -0.0002035294118, -0.0000060784314, +0.0001554901961, +0.0002333333333, + +0.0002035294118, +0.0001137254902, +0.0000180392157, +0.0000000000000, + +0.0000060784314, +0.0000300000000, +0.0000180392157, +0.0000000000000, + -0.0000239215686, +0.0000060784314, +0.0000898039216, +0.0002154901961, + +0.0002692156863, +0.0002274509804, +0.0000778431373, -0.0000778431373, + -0.0002035294118, -0.0002333333333, -0.0001735294118, -0.0000239215686, + +0.0001615686275, +0.0003411764706, +0.0004368627451, +0.0003890196078, + +0.0002154901961, +0.0000300000000, -0.0000717647059, -0.0000419607843, + +0.0000837254902, +0.0002213725490, +0.0002811764706, +0.0002333333333, + +0.0000956862745, -0.0000598039216, -0.0001735294118, -0.0002452941176, + -0.0002513725490, -0.0001974509804, -0.0000898039216, -0.0000119607843, + +0.0000358823529, +0.0000598039216, +0.0000837254902, +0.0000658823529, + +0.0000119607843, -0.0000837254902, -0.0001674509804, -0.0002035294118, + -0.0001796078431, -0.0001137254902, -0.0000119607843, +0.0000478431373, + +0.0000419607843, -0.0000119607843, -0.0000837254902, -0.0001315686275, + -0.0001554901961, -0.0001554901961, -0.0001196078431, -0.0000358823529, + +0.0000478431373, +0.0001076470588, +0.0000898039216, +0.0000300000000, + -0.0000300000000, -0.0000658823529, -0.0000778431373, -0.0000778431373, + -0.0001196078431, -0.0001674509804, -0.0001974509804, -0.0001735294118, + -0.0001256862745, -0.0000239215686, +0.0000598039216, +0.0001315686275, + +0.0001496078431, +0.0001256862745, +0.0000419607843, -0.0000598039216, + -0.0001735294118, -0.0002572549020, -0.0002811764706, -0.0002094117647, + -0.0000837254902, +0.0000180392157, +0.0000539215686, +0.0000119607843, + -0.0000658823529, -0.0001735294118, -0.0002931372549, -0.0003770588235, + -0.0003290196078, -0.0001674509804, +0.0000539215686, +0.0002213725490, + +0.0002811764706, +0.0002154901961, +0.0000658823529, -0.0001076470588, + -0.0002333333333, -0.0002513725490, -0.0001376470588, +0.0000300000000, + +0.0001854901961, +0.0002213725490, +0.0001137254902, -0.0001017647059, + -0.0003350980392, -0.0004666666667, -0.0004249019608, -0.0002274509804, + +0.0000358823529, +0.0002633333333, +0.0003650980392, +0.0003290196078, + +0.0001615686275, -0.0000239215686, -0.0001496078431, -0.0001496078431, + -0.0000658823529, +0.0000300000000, +0.0000837254902, +0.0000898039216, + +0.0000539215686, +0.0000478431373, +0.0000539215686, +0.0000717647059, + +0.0000837254902, +0.0001076470588, +0.0001017647059, +0.0000539215686, + +0.0000000000000, -0.0000119607843, -0.0000180392157, -0.0000239215686, + +0.0000000000000, +0.0000239215686, +0.0000060784314, -0.0000717647059, + -0.0001854901961, -0.0002992156863, -0.0003650980392, -0.0003650980392, + -0.0002992156863, -0.0001735294118, -0.0000300000000, +0.0000598039216, + +0.0001017647059, +0.0000898039216, +0.0000658823529, +0.0000419607843, + +0.0000478431373, +0.0000539215686, +0.0000478431373, +0.0000000000000, + -0.0000358823529, -0.0000419607843, +0.0000060784314, +0.0000598039216, + +0.0000778431373, +0.0000239215686, -0.0000658823529, -0.0001615686275, + -0.0002035294118, -0.0001674509804, -0.0000300000000, +0.0001554901961, + +0.0003411764706, +0.0004547058824, +0.0004666666667, +0.0003890196078, + +0.0002452941176, +0.0001076470588, +0.0000000000000, -0.0000358823529, + -0.0000300000000, +0.0000180392157, +0.0000478431373, +0.0000419607843, + +0.0000000000000, -0.0000419607843, -0.0000598039216, -0.0000180392157, + +0.0000598039216, +0.0001496078431, +0.0001915686275, +0.0001854901961, + +0.0001496078431, +0.0001196078431, +0.0000956862745, +0.0000598039216, + +0.0000000000000, -0.0000837254902, -0.0002154901961, -0.0003650980392, + -0.0004607843137, -0.0004727450980, -0.0003650980392, -0.0001915686275, + -0.0000119607843, +0.0000956862745, +0.0001137254902, +0.0000358823529, + -0.0000598039216, -0.0001435294118, -0.0001315686275, -0.0000419607843, + +0.0000778431373, +0.0001615686275, +0.0001435294118, +0.0000119607843, + -0.0001496078431, -0.0002513725490, -0.0002452941176, -0.0001974509804, + -0.0001554901961, -0.0001435294118, -0.0001615686275, -0.0001915686275, + -0.0001854901961, -0.0001256862745, +0.0000000000000, +0.0001435294118, + +0.0002633333333, +0.0003170588235, +0.0003170588235, +0.0002931372549, + +0.0002333333333, +0.0001435294118, +0.0000478431373, +0.0000000000000, + -0.0000180392157, +0.0000119607843, +0.0000717647059, +0.0001615686275, + +0.0002274509804, +0.0002452941176, +0.0002094117647, +0.0001615686275, + +0.0001256862745, +0.0001137254902, +0.0001137254902, +0.0001554901961, + +0.0002513725490, +0.0003531372549, +0.0004129411765, +0.0004188235294, + +0.0004068627451, +0.0003709803922, +0.0003170588235, +0.0002333333333, + +0.0001435294118, +0.0000358823529, -0.0000358823529, -0.0000898039216, + -0.0000778431373, -0.0000239215686, +0.0000658823529, +0.0001674509804, + +0.0002452941176, +0.0002633333333, +0.0002513725490, +0.0002094117647, + +0.0001796078431, +0.0001554901961, +0.0001554901961, +0.0001796078431, + +0.0002154901961, +0.0002213725490, +0.0001796078431, +0.0001017647059, + +0.0000180392157, -0.0000300000000, -0.0000358823529, +0.0000239215686, + +0.0001196078431, +0.0001974509804, +0.0002154901961, +0.0001735294118, + +0.0000778431373, -0.0000419607843, -0.0001496078431, -0.0002094117647, + -0.0002094117647, -0.0001615686275, -0.0000898039216, -0.0000060784314, + +0.0000358823529, +0.0000539215686, +0.0000300000000, +0.0000000000000, + -0.0000478431373, -0.0000717647059, -0.0000478431373, +0.0000239215686, + +0.0001137254902, +0.0001915686275, +0.0002274509804, +0.0002154901961, + +0.0001854901961, +0.0001496078431, +0.0001315686275, +0.0001017647059, + +0.0000539215686, +0.0000000000000, -0.0000119607843, +0.0000300000000, + +0.0001256862745, +0.0002274509804, +0.0003111764706, +0.0003350980392, + +0.0003050980392, +0.0002035294118, +0.0000956862745, +0.0000300000000, + +0.0000478431373, +0.0000956862745, +0.0001137254902, +0.0000778431373, + -0.0000119607843, -0.0001435294118, -0.0002394117647, -0.0002394117647, + -0.0001256862745, +0.0000658823529, +0.0002572549020, +0.0003829411765, + +0.0003890196078, +0.0002752941176, +0.0000837254902, -0.0000898039216, + -0.0001674509804, -0.0000837254902, +0.0001017647059, +0.0002992156863, + +0.0003709803922, +0.0002752941176, +0.0000658823529, -0.0001196078431, + -0.0002274509804, -0.0001974509804, -0.0000598039216, +0.0001315686275, + +0.0002872549020, +0.0003411764706, +0.0002692156863, +0.0000898039216, + -0.0001076470588, -0.0002513725490, -0.0002572549020, -0.0001256862745, + +0.0000539215686, +0.0001674509804, +0.0001435294118, +0.0000000000000, + -0.0001854901961, -0.0003170588235, -0.0003411764706, -0.0002752941176, + -0.0001315686275, +0.0000239215686, +0.0001376470588, +0.0001315686275, + +0.0000300000000, -0.0001256862745, -0.0002333333333, -0.0002513725490, + -0.0001796078431, -0.0000598039216, +0.0000658823529, +0.0001674509804, + +0.0002333333333, +0.0002692156863, +0.0002992156863, +0.0002931372549, + +0.0002394117647, +0.0001315686275, +0.0000000000000, -0.0001076470588, + -0.0001974509804, -0.0002274509804, -0.0002035294118, -0.0001076470588, + +0.0000000000000, +0.0000956862745, +0.0001256862745, +0.0001076470588, + +0.0000119607843, -0.0000898039216, -0.0001435294118, -0.0001137254902, + -0.0000419607843, +0.0000000000000, +0.0000000000000, -0.0000300000000, + -0.0000837254902, -0.0001554901961, -0.0002274509804, -0.0002633333333, + -0.0002513725490, -0.0002333333333, -0.0002274509804, -0.0002213725490, + -0.0001974509804, -0.0001615686275, -0.0001137254902, -0.0000778431373, + -0.0000539215686, -0.0000658823529, -0.0001137254902, -0.0001974509804, + -0.0002692156863, -0.0003170588235, -0.0002931372549, -0.0002274509804, + -0.0001376470588, -0.0000956862745, -0.0000898039216, -0.0001196078431, + -0.0001137254902, -0.0000837254902, -0.0000300000000, +0.0000300000000, + +0.0001137254902, +0.0001796078431, +0.0001915686275, +0.0001376470588, + +0.0000419607843, -0.0000598039216, -0.0001376470588, -0.0001974509804, + -0.0002274509804, -0.0002274509804, -0.0001915686275, -0.0001256862745, + -0.0000717647059, -0.0000239215686, +0.0000000000000, +0.0000060784314, + -0.0000119607843, -0.0000239215686, -0.0000119607843, +0.0000419607843, + +0.0001076470588, +0.0001554901961, +0.0001435294118, +0.0000598039216, + -0.0001076470588, -0.0003050980392, -0.0004307843137, -0.0004068627451, + -0.0002513725490, -0.0000419607843, +0.0001496078431, +0.0002633333333, + +0.0002692156863, +0.0001796078431, +0.0000419607843, -0.0001076470588, + -0.0002452941176, -0.0003650980392, -0.0004427450980, -0.0004786274510, + -0.0004427450980, -0.0003411764706, -0.0001974509804, -0.0000778431373, + -0.0000060784314, +0.0000000000000, -0.0000180392157, -0.0000539215686, + -0.0000837254902, -0.0000956862745, -0.0000658823529, -0.0000060784314, + +0.0000539215686, +0.0000778431373, +0.0000539215686, +0.0000000000000, + -0.0000658823529, -0.0001435294118, -0.0001974509804, -0.0002094117647, + -0.0001915686275, -0.0001435294118, -0.0000837254902, +0.0000000000000, + +0.0000837254902, +0.0001496078431, +0.0001496078431, +0.0000598039216, + -0.0000956862745, -0.0002572549020, -0.0003770588235, -0.0003890196078, + -0.0002931372549, -0.0001076470588, +0.0000598039216, +0.0001615686275, + +0.0001674509804, +0.0000898039216, +0.0000060784314, -0.0000060784314, + +0.0000478431373, +0.0001196078431, +0.0001674509804, +0.0001735294118, + +0.0001435294118, +0.0001017647059, +0.0000478431373, +0.0000000000000, + -0.0000539215686, -0.0001137254902, -0.0001615686275, -0.0001674509804, + -0.0001076470588, +0.0000000000000, +0.0001435294118, +0.0002752941176, + +0.0003650980392, +0.0003770588235, +0.0002992156863, +0.0001315686275, + -0.0000478431373, -0.0001674509804, -0.0001796078431, -0.0001196078431, + -0.0000598039216, -0.0000300000000, -0.0000358823529, -0.0000598039216, + -0.0000419607843, +0.0000358823529, +0.0001315686275, +0.0001854901961, + +0.0001435294118, +0.0000239215686, -0.0001196078431, -0.0002452941176, + -0.0003111764706, -0.0002992156863, -0.0002154901961, -0.0000717647059, + +0.0000598039216, +0.0001496078431, +0.0001615686275, +0.0001017647059, + +0.0000119607843, -0.0000658823529, -0.0001256862745, -0.0001674509804, + -0.0001974509804, -0.0001854901961, -0.0001076470588, +0.0000180392157, + +0.0001376470588, +0.0002274509804, +0.0002811764706, +0.0002752941176, + +0.0002094117647, +0.0001017647059, -0.0000180392157, -0.0001376470588, + -0.0002154901961, -0.0002154901961, -0.0001196078431, +0.0000060784314, + +0.0001017647059, +0.0001256862745, +0.0000898039216, +0.0000239215686, + -0.0000239215686, -0.0000478431373, -0.0000239215686, +0.0000119607843, + +0.0000300000000, +0.0000119607843, -0.0000180392157, -0.0000478431373, + -0.0000717647059, -0.0000717647059, -0.0000539215686, -0.0000180392157, + +0.0000000000000, +0.0000060784314, +0.0000060784314, -0.0000060784314, + -0.0000598039216, -0.0001315686275, -0.0001854901961, -0.0001854901961, + -0.0001256862745, -0.0000358823529, +0.0000239215686, +0.0000598039216, + +0.0000778431373, +0.0000658823529, +0.0000598039216, +0.0000598039216, + +0.0000837254902, +0.0000837254902, +0.0000539215686, -0.0000119607843, + -0.0000898039216, -0.0001256862745, -0.0000717647059, +0.0000598039216, + +0.0002333333333, +0.0003709803922, +0.0004188235294, +0.0003470588235, + +0.0001796078431, -0.0000239215686, -0.0002035294118, -0.0002872549020, + -0.0002513725490, -0.0001315686275, +0.0000239215686, +0.0001315686275, + +0.0001735294118, +0.0001554901961, +0.0001137254902, +0.0000778431373, + +0.0000598039216, +0.0000300000000, -0.0000358823529, -0.0001196078431, + -0.0001796078431, -0.0001674509804, -0.0000898039216, +0.0000300000000, + +0.0001554901961, +0.0002333333333, +0.0002333333333, +0.0001854901961, + +0.0001196078431, +0.0000778431373, +0.0000658823529, +0.0000898039216, + +0.0001315686275, +0.0001674509804, +0.0001554901961, +0.0000956862745, + +0.0000060784314, -0.0000898039216, -0.0001435294118, -0.0001137254902, + +0.0000000000000, +0.0001615686275, +0.0003111764706, +0.0003949019608, + +0.0003829411765, +0.0002811764706, +0.0001376470588, +0.0000000000000, + -0.0000837254902, -0.0000956862745, -0.0000658823529, -0.0000419607843, + -0.0000358823529, -0.0000478431373, -0.0000478431373, -0.0000300000000, + +0.0000119607843, +0.0000717647059, +0.0001376470588, +0.0001854901961, + +0.0001974509804, +0.0001674509804, +0.0001017647059, +0.0000000000000, + -0.0000898039216, -0.0001435294118, -0.0001554901961, -0.0001196078431, + -0.0000717647059, -0.0000239215686, +0.0000180392157, +0.0000358823529, + +0.0000358823529, +0.0000300000000, +0.0000180392157, +0.0000119607843, + -0.0000180392157, -0.0000717647059, -0.0001137254902, -0.0001196078431, + -0.0000898039216, -0.0000180392157, +0.0000658823529, +0.0001615686275, + +0.0002094117647, +0.0001915686275, +0.0000898039216, -0.0000478431373, + -0.0001735294118, -0.0002274509804, -0.0002154901961, -0.0001796078431, + -0.0001615686275, -0.0001735294118, -0.0002035294118, -0.0002154901961, + -0.0001435294118, -0.0000060784314, +0.0001674509804, +0.0002992156863, + +0.0003531372549, +0.0002752941176, +0.0001137254902, -0.0000898039216, + -0.0002452941176, -0.0003111764706, -0.0002692156863, -0.0001554901961, + +0.0000060784314, +0.0001496078431, +0.0002274509804, +0.0001974509804, + +0.0000898039216, -0.0000478431373, -0.0001615686275, -0.0002213725490, + -0.0002094117647, -0.0001376470588, -0.0000239215686, +0.0000778431373, + +0.0001615686275, +0.0001974509804, +0.0001796078431, +0.0001256862745, + +0.0000598039216, +0.0000119607843, -0.0000239215686, -0.0000658823529, + -0.0001256862745, -0.0001735294118, -0.0001735294118, -0.0000956862745, + +0.0000180392157, +0.0001315686275, +0.0001915686275, +0.0001974509804, + +0.0001554901961, +0.0001076470588, +0.0000778431373, +0.0000778431373, + +0.0000837254902, +0.0000717647059, +0.0000239215686, -0.0000419607843, + -0.0001376470588, -0.0002035294118, -0.0002094117647, -0.0001435294118, + -0.0000358823529, +0.0000658823529, +0.0001435294118, +0.0001674509804, + +0.0001315686275, +0.0000478431373, -0.0000478431373, -0.0001196078431, + -0.0001196078431, -0.0000539215686, +0.0000539215686, +0.0001435294118, + +0.0001735294118, +0.0001315686275, +0.0000598039216, +0.0000000000000, + -0.0000180392157, -0.0000119607843, +0.0000000000000, +0.0000180392157, + +0.0000478431373, +0.0000778431373, +0.0001137254902, +0.0001376470588, + +0.0001496078431, +0.0001496078431, +0.0001076470588, +0.0000419607843, + -0.0000239215686, -0.0000956862745, -0.0001735294118, -0.0002274509804, + -0.0002274509804, -0.0001615686275, -0.0000778431373, -0.0000239215686, + -0.0000119607843, -0.0000119607843, -0.0000180392157, -0.0000119607843, + +0.0000060784314, +0.0000478431373, +0.0001017647059, +0.0001435294118, + +0.0001554901961, +0.0001196078431, +0.0000419607843, -0.0000300000000, + -0.0000658823529, -0.0000478431373, +0.0000000000000, +0.0000658823529, + +0.0001256862745, +0.0001554901961, +0.0001554901961, +0.0001196078431, + +0.0000539215686, +0.0000000000000, -0.0000239215686, -0.0000060784314, + +0.0000180392157, +0.0000358823529, +0.0000358823529, +0.0000300000000, + +0.0000478431373, +0.0001017647059, +0.0001915686275, +0.0002572549020, + +0.0002633333333, +0.0001854901961, +0.0000598039216, -0.0000478431373, + -0.0001256862745, -0.0001554901961, -0.0001554901961, -0.0001315686275, + -0.0000898039216, -0.0000539215686, -0.0000300000000, -0.0000300000000, + -0.0000478431373, -0.0000837254902, -0.0001076470588, -0.0000956862745, + -0.0000598039216, -0.0000358823529, -0.0000419607843, -0.0000837254902, + -0.0001256862745, -0.0001376470588, -0.0001017647059, -0.0000358823529, + +0.0000419607843, +0.0001137254902, +0.0001674509804, +0.0001735294118, + +0.0001376470588, +0.0000898039216, +0.0000539215686, +0.0000300000000, + +0.0000180392157, +0.0000119607843, +0.0000180392157, +0.0000358823529, + +0.0000778431373, +0.0001496078431, +0.0002452941176, +0.0003350980392, + +0.0003709803922, +0.0003231372549, +0.0001735294118, +0.0000000000000, + -0.0001554901961, -0.0002035294118, -0.0001256862745, +0.0000478431373, + +0.0002633333333, +0.0004188235294, +0.0004188235294, +0.0002692156863, + +0.0000300000000, -0.0001854901961, -0.0002931372549, -0.0002692156863, + -0.0001496078431, -0.0000060784314, +0.0000956862745, +0.0001196078431, + +0.0000717647059, -0.0000060784314, -0.0000658823529, -0.0000717647059, + -0.0000358823529, +0.0000060784314, +0.0000598039216, +0.0000717647059, + +0.0000419607843, -0.0000300000000, -0.0000956862745, -0.0001315686275, + -0.0001137254902, -0.0000658823529, -0.0000180392157, +0.0000239215686, + +0.0000658823529, +0.0001017647059, +0.0001137254902, +0.0000898039216, + +0.0000300000000, -0.0000358823529, -0.0001137254902, -0.0001435294118, + -0.0001076470588, -0.0000060784314, +0.0001076470588, +0.0001915686275, + +0.0001915686275, +0.0001137254902, -0.0000119607843, -0.0001376470588, + -0.0002213725490, -0.0002154901961, -0.0001256862745, +0.0000000000000, + +0.0001196078431, +0.0001915686275, +0.0001974509804, +0.0001615686275, + +0.0001196078431, +0.0000956862745, +0.0001137254902, +0.0001615686275, + +0.0002035294118, +0.0002035294118, +0.0001674509804, +0.0001076470588, + +0.0000358823529, -0.0000239215686, -0.0000539215686, -0.0000419607843, + +0.0000060784314, +0.0000539215686, +0.0000717647059, +0.0000539215686, + +0.0000300000000, +0.0000239215686, +0.0000419607843, +0.0000539215686, + +0.0000717647059, +0.0000717647059, +0.0000598039216, +0.0000239215686, + +0.0000000000000, -0.0000060784314, +0.0000239215686, +0.0000717647059, + +0.0001137254902, +0.0001196078431, +0.0001017647059, +0.0000658823529, + +0.0000239215686, +0.0000060784314, +0.0000119607843, +0.0000300000000, + +0.0000419607843, +0.0000358823529, +0.0000060784314, -0.0000419607843, + -0.0001196078431, -0.0001854901961, -0.0002154901961, -0.0001854901961, + -0.0001076470588, +0.0000060784314, +0.0001256862745, +0.0002154901961, + +0.0002452941176, +0.0002213725490, +0.0001435294118, +0.0000419607843, + -0.0000539215686, -0.0001137254902, -0.0001196078431, -0.0000898039216, + -0.0000300000000, +0.0000300000000, +0.0000778431373, +0.0001076470588, + +0.0001196078431, +0.0001076470588, +0.0000717647059, +0.0000119607843, + -0.0000300000000, -0.0000778431373, -0.0001076470588, -0.0001256862745, + -0.0001196078431, -0.0000778431373, -0.0000060784314, +0.0000419607843, + +0.0000658823529, +0.0000358823529, -0.0000239215686, -0.0000898039216, + -0.0001256862745, -0.0001076470588, -0.0000419607843, +0.0000419607843, + +0.0001076470588, +0.0001376470588, +0.0001256862745, +0.0000898039216, + +0.0000300000000, -0.0000300000000, -0.0000658823529, -0.0000658823529, + -0.0000478431373, -0.0000358823529, -0.0000300000000, -0.0000180392157, + -0.0000180392157, -0.0000119607843, -0.0000180392157, -0.0000239215686, + -0.0000358823529, -0.0000539215686, -0.0000837254902, -0.0001196078431, + -0.0001256862745, -0.0000837254902, -0.0000119607843, +0.0000598039216, + +0.0001076470588, +0.0001256862745, +0.0001076470588, +0.0000539215686, + -0.0000119607843, -0.0001017647059, -0.0001735294118, -0.0002274509804, + -0.0002333333333, -0.0001974509804, -0.0001615686275, -0.0001496078431, + -0.0001615686275, -0.0001854901961, -0.0001915686275, -0.0001735294118, + -0.0001315686275, -0.0001076470588, -0.0001076470588, -0.0001315686275, + -0.0001735294118, -0.0001974509804, -0.0001974509804, -0.0001496078431, + -0.0000837254902, -0.0000419607843, -0.0000478431373, -0.0000956862745, + -0.0001735294118, -0.0002333333333, -0.0002452941176, -0.0001915686275, + -0.0000837254902, +0.0000358823529, +0.0001196078431, +0.0001554901961, + +0.0001196078431, +0.0000419607843, -0.0000598039216, -0.0001554901961, + -0.0001974509804, -0.0001854901961, -0.0001376470588, -0.0000778431373, + -0.0000539215686, -0.0000658823529, -0.0000717647059, -0.0000658823529, + -0.0000300000000, +0.0000119607843, +0.0000539215686, +0.0000778431373, + +0.0000717647059, +0.0000358823529, -0.0000119607843, -0.0000358823529, + -0.0000060784314, +0.0000419607843, +0.0000778431373, +0.0000598039216, + -0.0000060784314, -0.0001017647059, -0.0001915686275, -0.0002274509804, + -0.0001854901961, -0.0000778431373, +0.0000419607843, +0.0001496078431, + +0.0002094117647, +0.0002154901961, +0.0001796078431, +0.0001076470588, + +0.0000060784314, -0.0000898039216, -0.0001674509804, -0.0002035294118, + -0.0001796078431, -0.0001137254902, -0.0000358823529, +0.0000119607843, + +0.0000180392157, -0.0000119607843, -0.0000539215686, -0.0000717647059, + -0.0000598039216, -0.0000180392157, +0.0000300000000, +0.0000598039216, + +0.0000478431373, +0.0000000000000, -0.0000658823529, -0.0001315686275, + -0.0001796078431, -0.0001974509804, -0.0001854901961, -0.0001615686275, + -0.0001315686275, -0.0001076470588, -0.0000778431373, -0.0000598039216, + -0.0000419607843, -0.0000060784314, +0.0000180392157, +0.0000300000000, + +0.0000000000000, -0.0000598039216, -0.0001435294118, -0.0002035294118, + -0.0002213725490, -0.0001854901961, -0.0000898039216, +0.0000000000000, + +0.0000419607843, +0.0000300000000, -0.0000119607843, -0.0000658823529, + -0.0000778431373, -0.0000478431373, +0.0000119607843, +0.0000658823529, + +0.0000717647059, +0.0000239215686, -0.0000598039216, -0.0001256862745, + -0.0001435294118, -0.0001137254902, -0.0000598039216, +0.0000000000000, + +0.0000658823529, +0.0001076470588, +0.0001196078431, +0.0001076470588, + +0.0000837254902, +0.0000658823529, +0.0000539215686, +0.0000239215686, + -0.0000060784314, -0.0000419607843, -0.0000598039216, -0.0000598039216, + -0.0000300000000, +0.0000000000000, +0.0000180392157, +0.0000358823529, + +0.0000300000000, +0.0000180392157, +0.0000180392157, +0.0000300000000, + +0.0000478431373, +0.0000717647059, +0.0000837254902, +0.0000778431373, + +0.0000419607843, +0.0000000000000, -0.0000239215686, -0.0000239215686, + +0.0000000000000, +0.0000119607843, +0.0000119607843, -0.0000180392157, + -0.0000658823529, -0.0001017647059, -0.0001137254902, -0.0001137254902, + -0.0000956862745, -0.0000658823529, -0.0000300000000, -0.0000119607843, + -0.0000239215686, -0.0000658823529, -0.0001196078431, -0.0001435294118, + -0.0001196078431, -0.0000478431373, +0.0000478431373, +0.0001376470588, + +0.0001974509804, +0.0001915686275, +0.0001376470588, +0.0000478431373, + -0.0000419607843, -0.0001137254902, -0.0001554901961, -0.0001735294118, + -0.0001674509804, -0.0001256862745, -0.0000717647059, -0.0000239215686, + +0.0000000000000, +0.0000060784314, +0.0000119607843, +0.0000180392157, + +0.0000358823529, +0.0000717647059, +0.0001196078431, +0.0001615686275, + +0.0001554901961, +0.0001076470588, +0.0000300000000, -0.0000419607843, + -0.0000898039216, -0.0000956862745, -0.0000837254902, -0.0000478431373, + +0.0000000000000, +0.0000239215686, +0.0000358823529, +0.0000180392157, + -0.0000060784314, -0.0000358823529, -0.0000539215686, -0.0000419607843, + +0.0000180392157, +0.0001076470588, +0.0001974509804, +0.0002452941176, + +0.0002274509804, +0.0001376470588, +0.0000060784314, -0.0001256862745, + -0.0002154901961, -0.0002274509804, -0.0001496078431, -0.0000300000000, + +0.0000956862745, +0.0001796078431, +0.0001915686275, +0.0001435294118, + +0.0000778431373, +0.0000180392157, -0.0000119607843, -0.0000060784314, + +0.0000119607843, +0.0000358823529, +0.0000300000000, +0.0000000000000, + -0.0000419607843, -0.0000598039216, -0.0000478431373, -0.0000239215686, + +0.0000000000000, +0.0000358823529, +0.0000539215686, +0.0000419607843, + +0.0000119607843, -0.0000180392157, -0.0000180392157, +0.0000358823529, + +0.0001256862745, +0.0002154901961, +0.0002394117647, +0.0002094117647, + +0.0001376470588, +0.0000717647059, +0.0000239215686, +0.0000060784314, + +0.0000239215686, +0.0000658823529, +0.0000778431373, +0.0000478431373, + +0.0000000000000, -0.0000180392157, +0.0000060784314, +0.0000837254902, + +0.0001615686275, +0.0002094117647, +0.0001915686275, +0.0001315686275, + +0.0000717647059, +0.0000539215686, +0.0000837254902, +0.0001376470588, + +0.0001796078431, +0.0001854901961, +0.0001376470588, +0.0000419607843, + -0.0000539215686, -0.0001196078431, -0.0001256862745, -0.0000898039216, + -0.0000239215686, +0.0000358823529, +0.0000956862745, +0.0001496078431, + +0.0002035294118, +0.0002333333333, +0.0002394117647, +0.0001854901961, + +0.0000956862745, -0.0000060784314, -0.0000778431373, -0.0001017647059, + -0.0000837254902, -0.0000478431373, -0.0000060784314, +0.0000300000000, + +0.0000539215686, +0.0000898039216, +0.0001196078431, +0.0001674509804, + +0.0001974509804, +0.0002154901961, +0.0002094117647, +0.0001796078431, + +0.0001376470588, +0.0001017647059, +0.0000717647059, +0.0000598039216, + +0.0000478431373, +0.0000300000000, +0.0000060784314, -0.0000180392157, + -0.0000478431373, -0.0000658823529, -0.0000539215686, -0.0000119607843, + +0.0000419607843, +0.0000778431373, +0.0000717647059, +0.0000358823529, + +0.0000000000000, -0.0000239215686, -0.0000119607843, +0.0000239215686, + +0.0000778431373, +0.0001256862745, +0.0001496078431, +0.0001615686275, + +0.0001554901961, +0.0001376470588, +0.0001137254902, +0.0000778431373, + +0.0000539215686, +0.0000598039216, +0.0000778431373, +0.0001076470588, + +0.0001256862745, +0.0001256862745, +0.0001017647059, +0.0000598039216, + +0.0000000000000, -0.0000478431373, -0.0000837254902, -0.0000956862745, + -0.0000717647059, -0.0000180392157, +0.0000419607843, +0.0000956862745, + +0.0001256862745, +0.0001196078431, +0.0000898039216, +0.0000419607843, + +0.0000000000000, -0.0000358823529, -0.0000658823529, -0.0000898039216, + -0.0001076470588, -0.0001196078431, -0.0001076470588, -0.0000778431373, + -0.0000419607843, -0.0000060784314, +0.0000000000000, -0.0000119607843, + -0.0000717647059, -0.0001554901961, -0.0002094117647, -0.0002035294118, + -0.0001256862745, -0.0000119607843, +0.0001076470588, +0.0001915686275, + +0.0002154901961, +0.0001496078431, +0.0000119607843, -0.0001137254902, + -0.0001854901961, -0.0001674509804, -0.0000898039216, +0.0000000000000, + +0.0000598039216, +0.0000658823529, +0.0000119607843, -0.0000539215686, + -0.0001017647059, -0.0000956862745, -0.0000539215686, -0.0000119607843, + +0.0000000000000, +0.0000000000000, -0.0000119607843, -0.0000060784314, + +0.0000180392157, +0.0000598039216, +0.0000837254902, +0.0000898039216, + +0.0000658823529, +0.0000239215686, -0.0000239215686, -0.0000419607843, + -0.0000239215686, +0.0000419607843, +0.0001256862745, +0.0001854901961, + +0.0002035294118, +0.0001615686275, +0.0000837254902, +0.0000060784314, + -0.0000358823529, -0.0000358823529, -0.0000060784314, +0.0000300000000, + +0.0000598039216, +0.0000778431373, +0.0000837254902, +0.0000717647059, + +0.0000478431373, +0.0000119607843, -0.0000478431373, -0.0001196078431, + -0.0001796078431, -0.0001974509804, -0.0001496078431, -0.0000539215686, + +0.0000478431373, +0.0001256862745, +0.0001554901961, +0.0001315686275, + +0.0000717647059, +0.0000119607843, -0.0000358823529, -0.0000539215686, + -0.0000478431373, -0.0000358823529, -0.0000180392157, -0.0000119607843, + -0.0000239215686, -0.0000419607843, -0.0000419607843, -0.0000300000000, + -0.0000239215686, -0.0000358823529, -0.0000539215686, -0.0000658823529, + -0.0000478431373, +0.0000000000000, +0.0000598039216, +0.0001017647059, + +0.0001137254902, +0.0000837254902, +0.0000239215686, -0.0000239215686, + -0.0000539215686, -0.0000539215686, -0.0000239215686, +0.0000119607843, + +0.0000598039216, +0.0000658823529, +0.0000358823529, -0.0000119607843, + -0.0000539215686, -0.0000717647059, -0.0000598039216, -0.0000180392157, + +0.0000239215686, +0.0000658823529, +0.0001017647059, +0.0001435294118, + +0.0001735294118, +0.0001674509804, +0.0001256862745, +0.0000539215686, + -0.0000300000000, -0.0001256862745, -0.0001974509804, -0.0002094117647, + -0.0001674509804, -0.0000717647059, +0.0000358823529, +0.0001376470588, + +0.0001915686275, +0.0001915686275, +0.0001496078431, +0.0000837254902, + +0.0000300000000, +0.0000060784314, +0.0000180392157, +0.0000478431373, + +0.0000658823529, +0.0000658823529, +0.0000358823529, +0.0000000000000, + -0.0000358823529, -0.0000419607843, +0.0000000000000, +0.0000717647059, + +0.0001315686275, +0.0001256862745, +0.0000539215686, -0.0000478431373, + -0.0001376470588, -0.0001615686275, -0.0001076470588, -0.0000119607843, + +0.0000717647059, +0.0001256862745, +0.0001137254902, +0.0000478431373, + -0.0000300000000, -0.0000778431373, -0.0000837254902, -0.0000478431373, + +0.0000000000000, +0.0000239215686, +0.0000239215686, -0.0000060784314, + -0.0000598039216, -0.0001137254902, -0.0001435294118, -0.0001435294118, + -0.0001137254902, -0.0000898039216, -0.0000778431373, -0.0000837254902, + -0.0000956862745, -0.0000898039216, -0.0000598039216, -0.0000060784314, + +0.0000539215686, +0.0000956862745, +0.0000898039216, +0.0000300000000, + -0.0000539215686, -0.0001315686275, -0.0001615686275, -0.0001435294118, + -0.0000898039216, -0.0000300000000, +0.0000239215686, +0.0000539215686, + +0.0000300000000, -0.0000300000000, -0.0001196078431, -0.0001854901961, + -0.0002154901961, -0.0001796078431, -0.0000837254902, +0.0000478431373, + +0.0001615686275, +0.0002154901961, +0.0002035294118, +0.0001615686275, + +0.0000837254902, +0.0000000000000, -0.0000717647059, -0.0001315686275, + -0.0001615686275, -0.0001615686275, -0.0001315686275, -0.0000898039216, + -0.0000358823529, +0.0000000000000, +0.0000180392157, +0.0000239215686, + +0.0000060784314, -0.0000358823529, -0.0000717647059, -0.0001017647059, + -0.0001017647059, -0.0000837254902, -0.0000539215686, -0.0000300000000, + -0.0000119607843, +0.0000000000000, +0.0000180392157, +0.0000358823529, + +0.0000539215686, +0.0000478431373, +0.0000180392157, -0.0000180392157, + -0.0000598039216, -0.0000837254902, -0.0000658823529, +0.0000000000000, + +0.0000956862745, +0.0001974509804, +0.0002513725490, +0.0002274509804, + +0.0001315686275, +0.0000180392157, -0.0000658823529, -0.0001137254902, + -0.0001196078431, -0.0000837254902, -0.0000300000000, +0.0000000000000, + +0.0000000000000, -0.0000119607843, -0.0000239215686, -0.0000300000000, + -0.0000119607843, +0.0000000000000, +0.0000060784314, +0.0000119607843, + +0.0000060784314, +0.0000000000000 +}; diff --git a/plugins/LadspaEffect/swh/impulses/20-matchless-chieftain-sm57.h b/plugins/LadspaEffect/swh/impulses/20-matchless-chieftain-sm57.h new file mode 100644 index 000000000..43f33e502 --- /dev/null +++ b/plugins/LadspaEffect/swh/impulses/20-matchless-chieftain-sm57.h @@ -0,0 +1,863 @@ +float matchless_chieftain_sm57[] = { + -0.0001573195876, -0.0001321649485, -0.0001509278351, -0.0001950515464, + -0.0001698969072, -0.0002014432990, -0.0002391752577, -0.0002076288660, + -0.0002391752577, -0.0002579381443, -0.0002265979381, -0.0002705154639, + -0.0002830927835, -0.0002579381443, -0.0003082474227, -0.0003082474227, + -0.0002830927835, -0.0003397938144, -0.0003208247423, -0.0003020618557, + -0.0003587628866, -0.0003272164948, -0.0003146391753, -0.0003523711340, + -0.0003020618557, -0.0003020618557, -0.0003334020619, -0.0002830927835, + -0.0002894845361, -0.0003082474227, -0.0002517525773, -0.0002705154639, + -0.0002643298969, -0.0001950515464, -0.0002202061856, -0.0002014432990, + -0.0001383505155, -0.0001760824742, -0.0001383505155, -0.0000754639175, + -0.0001006185567, -0.0000377319588, +0.0000125773196, +0.0000000000000, + +0.0000818556701, +0.0001257731959, +0.0001070103093, +0.0001950515464, + +0.0002140206186, +0.0002014432990, +0.0003082474227, +0.0003272164948, + +0.0003397938144, +0.0004655670103, +0.0004845360825, +0.0005284536082, + +0.0006480412371, +0.0006480412371, +0.0006983505155, +0.0007991752577, + +0.0007802061856, +0.0008556701031, +0.0009439175258, +0.0009187628866, + +0.0010193814433, +0.0011012371134, +0.0010886597938, +0.0011954639175, + +0.0012521649485, +0.0012331958763, +0.0013527835052, +0.0013843298969, + +0.0013717525773, +0.0014975257732, +0.0014975257732, +0.0015101030928, + +0.0016360824742, +0.0016045360825, +0.0016235051546, +0.0017303092784, + +0.0016738144330, +0.0017115463918, +0.0017934020619, +0.0016989690722, + +0.0017303092784, +0.0017618556701, +0.0016360824742, +0.0016863917526, + +0.0016674226804, +0.0015352577320, +0.0016486597938, +0.0015919587629, + +0.0014597938144, +0.0016360824742, +0.0014787628866, +0.0012270103093, + +0.0014220618557, +0.0012837113402, +0.0009061855670, +0.0009690721649, + +0.0008934020619, +0.0006921649485, +0.0007488659794, +0.0005600000000, + +0.0003523711340, +0.0003713402062, +0.0001131958763, -0.0000441237113, + -0.0000189690722, -0.0003020618557, -0.0004152577320, -0.0003964948454, + -0.0007173195876, -0.0008117525773, -0.0008369072165, -0.0012521649485, + -0.0013402061856, -0.0013653608247, -0.0018185567010, -0.0018311340206, + -0.0017744329897, -0.0024098969072, -0.0025484536082, -0.0020701030928, + -0.0023847422680, -0.0031336082474, -0.0036746391753, -0.0041340206186, + -0.0032280412371, -0.0027496907216, -0.0086958762887, -0.0155482474227, + -0.0044989690722, +0.0278622680412, +0.0582853608247, +0.0601542268041, + +0.0219851546392, -0.0483373195876, -0.1271859793814, -0.1883847422680, + -0.2061604123711, -0.1617053608247, -0.0701967010309, +0.0274721649485, + +0.1021426804124, +0.1359385567010, +0.1240461855670, +0.0918358762887, + +0.0611546391753, +0.0284158762887, +0.0013340206186, -0.0083121649485, + -0.0133647422680, -0.0195878350515, -0.0178385567010, -0.0133585567010, + -0.0077331958763, +0.0091426804124, +0.0264402061856, +0.0247412371134, + +0.0079849484536, -0.0106024742268, -0.0259492783505, -0.0365393814433, + -0.0389618556701, -0.0265030927835, +0.0010632989691, +0.0284915463918, + +0.0412585567010, +0.0431461855670, +0.0453861855670, +0.0480793814433, + +0.0433412371134, +0.0286298969072, +0.0059274226804, -0.0206261855670, + -0.0408494845361, -0.0479534020619, -0.0436117525773, -0.0271134020619, + -0.0034608247423, +0.0123327835052, +0.0190216494845, +0.0234639175258, + +0.0194872164948, +0.0082303092784, +0.0028441237113, -0.0001321649485, + -0.0086078350515, -0.0130249484536, -0.0089540206186, -0.0065377319588, + -0.0087148453608, -0.0100740206186, -0.0096649484536, -0.0076074226804, + +0.0001195876289, +0.0136354639175, +0.0243321649485, +0.0259808247423, + +0.0218152577320, +0.0170144329897, +0.0146358762887, +0.0146169072165, + +0.0114835051546, +0.0035550515464, -0.0016925773196, -0.0007865979381, + +0.0015855670103, +0.0029637113402, +0.0048136082474, +0.0070410309278, + +0.0062292783505, -0.0002643298969, -0.0088973195876, -0.0142080412371, + -0.0154160824742, -0.0135472164948, -0.0094131958763, -0.0039074226804, + +0.0038193814433, +0.0134214432990, +0.0221865979381, +0.0295925773196, + +0.0346138144330, +0.0342678350515, +0.0294290721649, +0.0230863917526, + +0.0158125773196, +0.0073430927835, -0.0029888659794, -0.0141764948454, + -0.0219412371134, -0.0246909278351, -0.0238352577320, -0.0186441237113, + -0.0088531958763, +0.0035804123711, +0.0170270103093, +0.0276672164948, + +0.0298756701031, +0.0225138144330, +0.0096901030928, -0.0035488659794, + -0.0138053608247, -0.0193991752577, -0.0193991752577, -0.0140191752577, + -0.0056756701031, +0.0020952577320, +0.0071103092784, +0.0101117525773, + +0.0125531958763, +0.0132453608247, +0.0109863917526, +0.0065942268041, + -0.0000944329897, -0.0080414432990, -0.0124649484536, -0.0111876288660, + -0.0065439175258, -0.0002517525773, +0.0061286597938, +0.0101305154639, + +0.0114709278351, +0.0108981443299, +0.0073241237113, +0.0010068041237, + -0.0043919587629, -0.0062608247423, -0.0056063917526, -0.0037816494845, + -0.0011577319588, +0.0014849484536, +0.0035676288660, +0.0043919587629, + +0.0026616494845, -0.0009439175258, -0.0048828865979, -0.0094195876289, + -0.0130375257732, -0.0122950515464, -0.0076325773196, -0.0019317525773, + +0.0032909278351, +0.0062672164948, +0.0053420618557, +0.0010129896907, + -0.0047632989691, -0.0089350515464, -0.0093818556701, -0.0074249484536, + -0.0054303092784, -0.0045934020619, -0.0050338144330, -0.0054428865979, + -0.0047507216495, -0.0035929896907, -0.0026239175258, -0.0018185567010, + -0.0013150515464, -0.0011325773196, -0.0009061855670, -0.0002014432990, + +0.0004216494845, -0.0004152577320, -0.0026552577320, -0.0051721649485, + -0.0071039175258, -0.0071290721649, -0.0057762886598, -0.0055119587629, + -0.0056944329897, -0.0046752577320, -0.0042723711340, -0.0049583505155, + -0.0044422680412, -0.0025610309278, -0.0003523711340, +0.0014030927835, + +0.0010319587629, -0.0018247422680, -0.0056692783505, -0.0094383505155, + -0.0117791752577, -0.0109925773196, -0.0073367010309, -0.0031523711340, + -0.0010129896907, -0.0014410309278, -0.0031649484536, -0.0055309278351, + -0.0070913402062, -0.0053800000000, -0.0010319587629, +0.0026490721649, + +0.0037123711340, +0.0018624742268, -0.0019569072165, -0.0060783505155, + -0.0091426804124, -0.0097907216495, -0.0079282474227, -0.0055686597938, + -0.0035488659794, -0.0013276288660, +0.0001131958763, -0.0002643298969, + -0.0016612371134, -0.0023721649485, -0.0014723711340, -0.0001383505155, + +0.0001006185567, -0.0002453608247, -0.0008620618557, -0.0019569072165, + -0.0022338144330, -0.0009061855670, +0.0011451546392, +0.0035047422680, + +0.0051534020619, +0.0041591752577, +0.0004026804124, -0.0044296907216, + -0.0082618556701, -0.0090546391753, -0.0066068041237, -0.0027496907216, + +0.0004655670103, +0.0018311340206, +0.0012585567010, -0.0006103092784, + -0.0031775257732, -0.0054742268041, -0.0064684536082, -0.0057070103093, + -0.0032531958763, -0.0002579381443, +0.0017241237113, +0.0026678350515, + +0.0031397938144, +0.0029259793814, +0.0018311340206, +0.0002391752577, + -0.0013088659794, -0.0027183505155, -0.0043919587629, -0.0056882474227, + -0.0052791752577, -0.0040962886598, -0.0038068041237, -0.0035550515464, + -0.0021016494845, -0.0004719587629, +0.0001509278351, +0.0005284536082, + +0.0018121649485, +0.0036558762887, +0.0045179381443, +0.0035865979381, + +0.0015981443299, -0.0002643298969, -0.0017744329897, -0.0031272164948, + -0.0036872164948, -0.0029447422680, -0.0017554639175, -0.0007550515464, + +0.0003649484536, +0.0014975257732, +0.0022086597938, +0.0023344329897, + +0.0019569072165, +0.0017177319588, +0.0018814432990, +0.0015352577320, + +0.0003839175258, -0.0008556701031, -0.0018059793814, -0.0020449484536, + -0.0013402061856, -0.0002327835052, +0.0013340206186, +0.0038193814433, + +0.0063049484536, +0.0075319587629, +0.0072550515464, +0.0057575257732, + +0.0034356701031, +0.0010381443299, -0.0005284536082, -0.0009690721649, + -0.0006606185567, +0.0001447422680, +0.0012521649485, +0.0017870103093, + +0.0013843298969, +0.0005663917526, -0.0003587628866, -0.0011515463918, + -0.0011138144330, +0.0000000000000, +0.0016925773196, +0.0029762886598, + +0.0030265979381, +0.0024476288660, +0.0024224742268, +0.0031084536082, + +0.0038760824742, +0.0042158762887, +0.0041969072165, +0.0040334020619, + +0.0030265979381, +0.0008369072165, -0.0009439175258, -0.0011200000000, + -0.0004907216495, +0.0003775257732, +0.0019379381443, +0.0036810309278, + +0.0043668041237, +0.0039012371134, +0.0033663917526, +0.0032468041237, + +0.0031587628866, +0.0030140206186, +0.0030202061856, +0.0033412371134, + +0.0041591752577, +0.0050527835052, +0.0053358762887, +0.0051408247423, + +0.0048197938144, +0.0043606185567, +0.0037249484536, +0.0028063917526, + +0.0019253608247, +0.0018498969072, +0.0022715463918, +0.0022715463918, + +0.0018121649485, +0.0010822680412, +0.0002956701031, +0.0000000000000, + -0.0001257731959, -0.0007362886598, -0.0012962886598, -0.0011451546392, + -0.0004090721649, +0.0005851546392, +0.0014472164948, +0.0018624742268, + +0.0019758762887, +0.0021268041237, +0.0026804123711, +0.0034230927835, + +0.0035362886598, +0.0028628865979, +0.0019443298969, +0.0012457731959, + +0.0010068041237, +0.0009752577320, +0.0008872164948, +0.0013527835052, + +0.0026490721649, +0.0038948453608, +0.0042346391753, +0.0034105154639, + +0.0019379381443, +0.0009942268041, +0.0006857731959, +0.0001447422680, + -0.0005158762887, -0.0005284536082, +0.0001573195876, +0.0009375257732, + +0.0012395876289, +0.0012711340206, +0.0016360824742, +0.0022148453608, + +0.0026678350515, +0.0029888659794, +0.0028189690722, +0.0018750515464, + +0.0007614432990, +0.0002643298969, +0.0006480412371, +0.0013969072165, + +0.0016486597938, +0.0013591752577, +0.0009816494845, +0.0004655670103, + -0.0001760824742, -0.0005915463918, -0.0005977319588, -0.0001509278351, + +0.0005915463918, +0.0012395876289, +0.0016422680412, +0.0018688659794, + +0.0017618556701, +0.0013214432990, +0.0008243298969, +0.0002579381443, + -0.0004655670103, -0.0012206185567, -0.0016548453608, -0.0015290721649, + -0.0009313402062, -0.0001195876289, +0.0007109278351, +0.0015290721649, + +0.0021709278351, +0.0023154639175, +0.0017806185567, +0.0006795876289, + -0.0006354639175, -0.0016360824742, -0.0018814432990, -0.0016045360825, + -0.0013024742268, -0.0010632989691, -0.0008117525773, -0.0004026804124, + +0.0001698969072, +0.0004845360825, +0.0002894845361, +0.0001070103093, + +0.0001321649485, -0.0000754639175, -0.0007109278351, -0.0014030927835, + -0.0016989690722, -0.0014030927835, -0.0008053608247, -0.0002705154639, + +0.0000315463918, +0.0000692783505, -0.0000503092784, -0.0001131958763, + -0.0001824742268, -0.0003964948454, -0.0005725773196, -0.0005474226804, + -0.0004719587629, -0.0004907216495, -0.0005977319588, -0.0007740206186, + -0.0008872164948, -0.0007047422680, -0.0003208247423, -0.0002014432990, + -0.0005412371134, -0.0011074226804, -0.0015101030928, -0.0014346391753, + -0.0010068041237, -0.0006983505155, -0.0004278350515, +0.0001760824742, + +0.0009375257732, +0.0012647422680, +0.0009564948454, +0.0002830927835, + -0.0002705154639, -0.0005222680412, -0.0006167010309, -0.0006670103093, + -0.0007927835052, -0.0010571134021, -0.0011641237113, -0.0009249484536, + -0.0007614432990, -0.0011325773196, -0.0018373195876, -0.0022967010309, + -0.0021268041237, -0.0014849484536, -0.0007802061856, -0.0002076288660, + +0.0002956701031, +0.0007550515464, +0.0009123711340, +0.0004719587629, + -0.0003649484536, -0.0011263917526, -0.0015729896907, -0.0017870103093, + -0.0019758762887, -0.0023092783505, -0.0026931958763, -0.0028692783505, + -0.0026804123711, -0.0021835051546, -0.0017241237113, -0.0015542268041, + -0.0013779381443, -0.0009878350515, -0.0006606185567, -0.0005851546392, + -0.0006480412371, -0.0007740206186, -0.0006731958763, -0.0001257731959, + +0.0003839175258, +0.0003208247423, -0.0001950515464, -0.0007362886598, + -0.0011074226804, -0.0013717525773, -0.0015290721649, -0.0015164948454, + -0.0012837113402, -0.0010068041237, -0.0009690721649, -0.0013150515464, + -0.0018059793814, -0.0020639175258, -0.0019694845361, -0.0016989690722, + -0.0014536082474, -0.0013024742268, -0.0012018556701, -0.0010129896907, + -0.0005663917526, +0.0000441237113, +0.0005915463918, +0.0009626804124, + +0.0011325773196, +0.0009816494845, +0.0004278350515, -0.0005158762887, + -0.0016800000000, -0.0025294845361, -0.0027119587629, -0.0024098969072, + -0.0018940206186, -0.0013465979381, -0.0009878350515, -0.0007991752577, + -0.0005284536082, -0.0002014432990, +0.0000125773196, +0.0001509278351, + +0.0002014432990, +0.0001447422680, +0.0000000000000, -0.0002956701031, + -0.0008430927835, -0.0013653608247, -0.0015101030928, -0.0013088659794, + -0.0010571134021, -0.0008808247423, -0.0007109278351, -0.0005725773196, + -0.0004090721649, -0.0001509278351, +0.0000441237113, +0.0000944329897, + +0.0000754639175, +0.0000315463918, +0.0000063917526, +0.0000189690722, + -0.0001447422680, -0.0004655670103, -0.0004593814433, -0.0001195876289, + +0.0000754639175, +0.0001006185567, +0.0001383505155, +0.0002579381443, + +0.0004845360825, +0.0005600000000, +0.0002956701031, -0.0000315463918, + -0.0001888659794, -0.0001635051546, +0.0000754639175, +0.0004468041237, + +0.0006480412371, +0.0006228865979, +0.0004529896907, +0.0001573195876, + -0.0001698969072, -0.0005915463918, -0.0009942268041, -0.0010255670103, + -0.0007298969072, -0.0004593814433, -0.0003523711340, -0.0004468041237, + -0.0006670103093, -0.0006354639175, -0.0002894845361, +0.0001131958763, + +0.0005474226804, +0.0010255670103, +0.0014661855670, +0.0018059793814, + +0.0018311340206, +0.0014156701031, +0.0008179381443, +0.0003523711340, + +0.0002076288660, +0.0003713402062, +0.0005412371134, +0.0006983505155, + +0.0010948453608, +0.0015039175258, +0.0015668041237, +0.0013591752577, + +0.0009690721649, +0.0004907216495, +0.0002140206186, +0.0002327835052, + +0.0004152577320, +0.0006103092784, +0.0005977319588, +0.0003775257732, + +0.0001950515464, +0.0001447422680, +0.0001383505155, +0.0001383505155, + +0.0001321649485, +0.0002265979381, +0.0004152577320, +0.0003587628866, + +0.0000315463918, -0.0001131958763, +0.0000692783505, +0.0002327835052, + +0.0001131958763, -0.0000818556701, -0.0001447422680, -0.0000377319588, + +0.0001888659794, +0.0004404123711, +0.0004781443299, +0.0002956701031, + +0.0001321649485, +0.0000944329897, +0.0001760824742, +0.0003587628866, + +0.0005284536082, +0.0005789690722, +0.0005977319588, +0.0006041237113, + +0.0004781443299, +0.0002643298969, +0.0002643298969, +0.0005915463918, + +0.0010445360825, +0.0014661855670, +0.0017051546392, +0.0016296907216, + +0.0013905154639, +0.0011767010309, +0.0008934020619, +0.0005348453608, + +0.0002894845361, +0.0001195876289, +0.0000000000000, -0.0000628865979, + -0.0001888659794, -0.0003208247423, -0.0002517525773, +0.0000503092784, + +0.0005663917526, +0.0010886597938, +0.0013088659794, +0.0012647422680, + +0.0011325773196, +0.0008556701031, +0.0005096907216, +0.0002579381443, + +0.0000377319588, -0.0001573195876, -0.0001824742268, +0.0000000000000, + +0.0003272164948, +0.0007298969072, +0.0010445360825, +0.0013150515464, + +0.0015855670103, +0.0016296907216, +0.0013024742268, +0.0007802061856, + +0.0003334020619, +0.0000189690722, -0.0002830927835, -0.0006606185567, + -0.0009439175258, -0.0009626804124, -0.0007614432990, -0.0004655670103, + -0.0000503092784, +0.0004026804124, +0.0007047422680, +0.0007927835052, + +0.0007991752577, +0.0006292783505, +0.0002517525773, -0.0000628865979, + -0.0002391752577, -0.0003146391753, -0.0001824742268, +0.0000377319588, + +0.0001257731959, +0.0002202061856, +0.0004152577320, +0.0004468041237, + +0.0003272164948, +0.0001824742268, -0.0000189690722, -0.0001760824742, + -0.0001195876289, +0.0000000000000, +0.0000189690722, -0.0000189690722, + -0.0001383505155, -0.0002643298969, -0.0003587628866, -0.0005158762887, + -0.0007550515464, -0.0008494845361, -0.0005977319588, -0.0000567010309, + +0.0005474226804, +0.0010571134021, +0.0014536082474, +0.0016800000000, + +0.0014661855670, +0.0006731958763, -0.0004216494845, -0.0014346391753, + -0.0020575257732, -0.0020513402062, -0.0014472164948, -0.0004845360825, + +0.0006292783505, +0.0016171134021, +0.0021016494845, +0.0020197938144, + +0.0015604123711, +0.0008053608247, +0.0000000000000, -0.0005977319588, + -0.0009942268041, -0.0012144329897, -0.0012018556701, -0.0009564948454, + -0.0004468041237, +0.0001888659794, +0.0006921649485, +0.0009123711340, + +0.0008620618557, +0.0005284536082, +0.0000628865979, -0.0003334020619, + -0.0006041237113, -0.0007424742268, -0.0007676288660, -0.0007047422680, + -0.0005663917526, -0.0004907216495, -0.0005600000000, -0.0005977319588, + -0.0004719587629, -0.0002579381443, -0.0001321649485, -0.0001888659794, + -0.0004090721649, -0.0007047422680, -0.0009187628866, -0.0008808247423, + -0.0005663917526, -0.0001321649485, +0.0003587628866, +0.0007927835052, + +0.0009313402062, +0.0007550515464, +0.0003775257732, -0.0000818556701, + -0.0004593814433, -0.0006041237113, -0.0005851546392, -0.0005474226804, + -0.0005725773196, -0.0006983505155, -0.0008243298969, -0.0007991752577, + -0.0005915463918, -0.0003334020619, -0.0000818556701, +0.0002643298969, + +0.0006480412371, +0.0007109278351, +0.0004216494845, +0.0001070103093, + -0.0000063917526, +0.0000377319588, +0.0002014432990, +0.0003459793814, + +0.0004090721649, +0.0003964948454, +0.0003587628866, +0.0003713402062, + +0.0002517525773, -0.0001131958763, -0.0004845360825, -0.0006731958763, + -0.0007424742268, -0.0006544329897, -0.0003459793814, +0.0000628865979, + +0.0004655670103, +0.0006795876289, +0.0005474226804, +0.0001131958763, + -0.0004655670103, -0.0010319587629, -0.0012331958763, -0.0009690721649, + -0.0004655670103, -0.0000125773196, +0.0002140206186, +0.0002076288660, + -0.0000944329897, -0.0006983505155, -0.0012898969072, -0.0015542268041, + -0.0014787628866, -0.0011325773196, -0.0005789690722, +0.0000063917526, + +0.0005158762887, +0.0008494845361, +0.0009061855670, +0.0007173195876, + +0.0003146391753, -0.0003397938144, -0.0010822680412, -0.0016235051546, + -0.0018562886598, -0.0017428865979, -0.0013024742268, -0.0006480412371, + +0.0000944329897, +0.0006921649485, +0.0008682474227, +0.0006167010309, + +0.0001383505155, -0.0003713402062, -0.0008179381443, -0.0010696907216, + -0.0010068041237, -0.0006480412371, -0.0000880412371, +0.0005725773196, + +0.0011641237113, +0.0014410309278, +0.0013150515464, +0.0008243298969, + +0.0001509278351, -0.0004468041237, -0.0009249484536, -0.0012962886598, + -0.0014597938144, -0.0014094845361, -0.0012144329897, -0.0009690721649, + -0.0007991752577, -0.0006544329897, -0.0004404123711, -0.0002517525773, + -0.0001383505155, +0.0000000000000, +0.0001321649485, +0.0001509278351, + +0.0001509278351, +0.0002076288660, +0.0002830927835, +0.0003775257732, + +0.0004468041237, +0.0005032989691, +0.0005538144330, +0.0004593814433, + +0.0001509278351, -0.0002391752577, -0.0005725773196, -0.0006670103093, + -0.0004781443299, -0.0001824742268, +0.0000125773196, +0.0001321649485, + +0.0002453608247, +0.0002517525773, +0.0000189690722, -0.0003272164948, + -0.0005725773196, -0.0006544329897, -0.0005348453608, -0.0002076288660, + +0.0001006185567, +0.0002140206186, +0.0001321649485, -0.0001321649485, + -0.0004971134021, -0.0007614432990, -0.0008243298969, -0.0006480412371, + -0.0002769072165, +0.0000628865979, +0.0002327835052, +0.0002643298969, + +0.0001824742268, +0.0000567010309, -0.0000189690722, -0.0000818556701, + -0.0001131958763, -0.0001447422680, -0.0002076288660, -0.0002956701031, + -0.0003082474227, -0.0002327835052, -0.0000818556701, +0.0001509278351, + +0.0004593814433, +0.0007109278351, +0.0007424742268, +0.0005032989691, + +0.0001760824742, +0.0000000000000, -0.0000754639175, -0.0001698969072, + -0.0001760824742, -0.0000818556701, -0.0001070103093, -0.0002265979381, + -0.0002327835052, -0.0002265979381, -0.0003146391753, -0.0004152577320, + -0.0005348453608, -0.0006795876289, -0.0007676288660, -0.0008494845361, + -0.0008808247423, -0.0007109278351, -0.0004529896907, -0.0002014432990, + +0.0000315463918, +0.0001760824742, +0.0002579381443, +0.0004404123711, + +0.0006167010309, +0.0006480412371, +0.0005222680412, +0.0001573195876, + -0.0003272164948, -0.0007173195876, -0.0009249484536, -0.0008808247423, + -0.0005474226804, -0.0000880412371, +0.0004278350515, +0.0008808247423, + +0.0010381443299, +0.0009564948454, +0.0008117525773, +0.0006354639175, + +0.0004719587629, +0.0003082474227, +0.0001131958763, -0.0000441237113, + -0.0002327835052, -0.0003713402062, -0.0002579381443, +0.0000251546392, + +0.0003587628866, +0.0007298969072, +0.0009249484536, +0.0007298969072, + +0.0003020618557, -0.0001888659794, -0.0005977319588, -0.0006103092784, + -0.0003020618557, +0.0001006185567, +0.0006041237113, +0.0010004123711, + +0.0010068041237, +0.0007047422680, +0.0003272164948, +0.0000000000000, + -0.0002327835052, -0.0004090721649, -0.0005032989691, -0.0004719587629, + -0.0004216494845, -0.0004468041237, -0.0005348453608, -0.0006103092784, + -0.0005474226804, -0.0003459793814, -0.0001257731959, +0.0001195876289, + +0.0003713402062, +0.0004971134021, +0.0005096907216, +0.0003901030928, + +0.0001321649485, -0.0000315463918, -0.0000251546392, +0.0000125773196, + +0.0000251546392, +0.0000000000000, -0.0000251546392, -0.0000251546392, + -0.0000189690722, -0.0001257731959, -0.0003587628866, -0.0005851546392, + -0.0006480412371, -0.0004971134021, -0.0002265979381, +0.0000315463918, + +0.0002705154639, +0.0004907216495, +0.0006606185567, +0.0007298969072, + +0.0006983505155, +0.0005158762887, +0.0002014432990, -0.0000063917526, + +0.0000000000000, +0.0000692783505, +0.0001070103093, +0.0001070103093, + +0.0000000000000, -0.0001888659794, -0.0003964948454, -0.0005600000000, + -0.0005096907216, -0.0001760824742, +0.0002265979381, +0.0006354639175, + +0.0009752577320, +0.0011263917526, +0.0010948453608, +0.0009187628866, + +0.0005663917526, +0.0001383505155, -0.0002014432990, -0.0004152577320, + -0.0003964948454, -0.0001509278351, +0.0001509278351, +0.0003459793814, + +0.0002956701031, +0.0001070103093, -0.0000377319588, -0.0002327835052, + -0.0004529896907, -0.0004907216495, -0.0003459793814, -0.0000880412371, + +0.0002769072165, +0.0005977319588, +0.0007740206186, +0.0009061855670, + +0.0009187628866, +0.0008053608247, +0.0006670103093, +0.0003839175258, + -0.0000567010309, -0.0004216494845, -0.0006292783505, -0.0007047422680, + -0.0005725773196, -0.0002830927835, +0.0000441237113, +0.0004026804124, + +0.0007047422680, +0.0008430927835, +0.0007614432990, +0.0005412371134, + +0.0003459793814, +0.0002076288660, +0.0000754639175, -0.0000189690722, + -0.0000692783505, -0.0000441237113, +0.0000567010309, +0.0002265979381, + +0.0003775257732, +0.0005032989691, +0.0005096907216, +0.0004026804124, + +0.0003146391753, +0.0002643298969, +0.0002453608247, +0.0002894845361, + +0.0003523711340, +0.0003713402062, +0.0003459793814, +0.0002705154639, + +0.0001698969072, +0.0000754639175, +0.0000377319588, +0.0001070103093, + +0.0001950515464, +0.0002076288660, +0.0001760824742, +0.0001131958763, + +0.0000441237113, +0.0001131958763, +0.0002014432990, +0.0001950515464, + +0.0002453608247, +0.0003459793814, +0.0002769072165, +0.0000251546392, + -0.0002705154639, -0.0005158762887, -0.0005538144330, -0.0004090721649, + -0.0001824742268, +0.0001195876289, +0.0004026804124, +0.0004404123711, + +0.0002453608247, -0.0000251546392, -0.0002391752577, -0.0003020618557, + -0.0002956701031, -0.0002517525773, -0.0001006185567, +0.0000818556701, + +0.0002140206186, +0.0002265979381, +0.0001635051546, +0.0001509278351, + +0.0002014432990, +0.0001383505155, +0.0000251546392, +0.0000251546392, + +0.0000628865979, -0.0000125773196, -0.0001824742268, -0.0002956701031, + -0.0002014432990, +0.0000628865979, +0.0002956701031, +0.0003649484536, + +0.0003587628866, +0.0003334020619, +0.0002391752577, +0.0000503092784, + -0.0001635051546, -0.0003649484536, -0.0004090721649, -0.0002830927835, + -0.0001321649485, -0.0000063917526, +0.0001383505155, +0.0002076288660, + +0.0000818556701, -0.0000441237113, -0.0000944329897, -0.0001131958763, + -0.0001006185567, -0.0000377319588, +0.0000000000000, +0.0000063917526, + +0.0000189690722, -0.0000125773196, -0.0001006185567, -0.0001321649485, + -0.0000628865979, +0.0000818556701, +0.0002202061856, +0.0002956701031, + +0.0003208247423, +0.0002643298969, +0.0001760824742, +0.0001760824742, + +0.0002327835052, +0.0003334020619, +0.0004971134021, +0.0005789690722, + +0.0005158762887, +0.0004090721649, +0.0002391752577, +0.0000125773196, + -0.0000944329897, -0.0000692783505, -0.0000441237113, -0.0000754639175, + -0.0001195876289, -0.0001006185567, +0.0000125773196, +0.0002014432990, + +0.0003146391753, +0.0003020618557, +0.0002643298969, +0.0001698969072, + -0.0000315463918, -0.0001950515464, -0.0001383505155, +0.0000251546392, + +0.0001195876289, +0.0000441237113, -0.0001321649485, -0.0002769072165, + -0.0004026804124, -0.0006167010309, -0.0008053608247, -0.0007740206186, + -0.0005915463918, -0.0003649484536, -0.0001131958763, +0.0001070103093, + +0.0002327835052, +0.0001321649485, -0.0000818556701, -0.0001509278351, + +0.0000189690722, +0.0003020618557, +0.0005789690722, +0.0007676288660, + +0.0008053608247, +0.0007237113402, +0.0005348453608, +0.0003146391753, + +0.0001950515464, +0.0002140206186, +0.0003334020619, +0.0004907216495, + +0.0005977319588, +0.0006167010309, +0.0005348453608, +0.0003587628866, + +0.0001950515464, +0.0001509278351, +0.0001509278351, +0.0001070103093, + +0.0000754639175, +0.0000880412371, +0.0001383505155, +0.0001824742268, + +0.0002014432990, +0.0002327835052, +0.0001698969072, -0.0000818556701, + -0.0003964948454, -0.0006041237113, -0.0006041237113, -0.0003397938144, + -0.0000503092784, +0.0000125773196, +0.0000000000000, -0.0000315463918, + -0.0002014432990, -0.0004152577320, -0.0005977319588, -0.0007614432990, + -0.0008053608247, -0.0006857731959, -0.0004845360825, -0.0002391752577, + -0.0001131958763, -0.0001760824742, -0.0002956701031, -0.0003713402062, + -0.0003146391753, -0.0000628865979, +0.0001760824742, +0.0002327835052, + +0.0002076288660, +0.0002014432990, +0.0001383505155, +0.0000125773196, + -0.0001131958763, -0.0001888659794, -0.0001447422680, -0.0000692783505, + -0.0000880412371, -0.0001824742268, -0.0002956701031, -0.0003649484536, + -0.0003272164948, -0.0002643298969, -0.0002391752577, -0.0002014432990, + -0.0001698969072, -0.0002579381443, -0.0003901030928, -0.0004404123711, + -0.0003901030928, -0.0002140206186, +0.0000063917526, +0.0001195876289, + +0.0001195876289, +0.0001321649485, +0.0001383505155, +0.0001383505155, + +0.0001573195876, +0.0000692783505, -0.0001635051546, -0.0003649484536, + -0.0004719587629, -0.0005789690722, -0.0005915463918, -0.0004468041237, + -0.0002453608247, -0.0000567010309, +0.0000377319588, +0.0000189690722, + -0.0000754639175, -0.0002517525773, -0.0003901030928, -0.0004152577320, + -0.0003587628866, -0.0001888659794, +0.0001006185567, +0.0002830927835, + +0.0002327835052, +0.0000944329897, -0.0000692783505, -0.0002579381443, + -0.0003587628866, -0.0003459793814, -0.0002643298969, -0.0001131958763, + +0.0000944329897, +0.0003082474227, +0.0004529896907, +0.0005096907216, + +0.0004781443299, +0.0003713402062, +0.0002327835052, +0.0001573195876, + +0.0001383505155, +0.0001824742268, +0.0002830927835, +0.0003713402062, + +0.0004026804124, +0.0004278350515, +0.0004593814433, +0.0004719587629, + +0.0004468041237, +0.0003713402062, +0.0002956701031, +0.0002453608247, + +0.0001195876289, -0.0000315463918, -0.0001447422680, -0.0001760824742, + -0.0000692783505, +0.0001698969072, +0.0003775257732, +0.0004719587629, + +0.0004529896907, +0.0002643298969, +0.0000000000000, -0.0001824742268, + -0.0002579381443, -0.0002076288660, -0.0000125773196, +0.0002453608247, + +0.0005032989691, +0.0006041237113, +0.0005096907216, +0.0003272164948, + +0.0001131958763, -0.0000692783505, -0.0002202061856, -0.0003964948454, + -0.0005915463918, -0.0006857731959, -0.0006731958763, -0.0005284536082, + -0.0002643298969, -0.0000063917526, +0.0001573195876, +0.0002830927835, + +0.0002769072165, +0.0001888659794, +0.0002202061856, +0.0003397938144, + +0.0004152577320, +0.0004593814433, +0.0004529896907, +0.0003649484536, + +0.0001888659794, +0.0000125773196, -0.0000063917526, +0.0000944329897, + +0.0001888659794, +0.0002453608247, +0.0002769072165, +0.0002014432990, + +0.0000000000000, -0.0002830927835, -0.0004971134021, -0.0004971134021, + -0.0003082474227, -0.0000567010309, +0.0001573195876, +0.0002453608247, + +0.0001635051546, +0.0000251546392, -0.0000818556701, -0.0001698969072, + -0.0001824742268, -0.0001509278351, -0.0000441237113, +0.0001698969072, + +0.0003713402062, +0.0003649484536, +0.0001950515464, -0.0000315463918, + -0.0002705154639, -0.0004593814433, -0.0005663917526, -0.0005474226804, + -0.0004026804124, -0.0002202061856, -0.0001070103093, -0.0000441237113, + -0.0000315463918, -0.0000818556701, -0.0001760824742, -0.0002076288660, + -0.0001195876289, +0.0000125773196, +0.0001509278351, +0.0002643298969, + +0.0002705154639, +0.0001698969072, +0.0001070103093, +0.0001006185567, + +0.0001195876289, +0.0001573195876, +0.0001573195876, +0.0000628865979, + -0.0000818556701, -0.0002643298969, -0.0004468041237, -0.0005096907216, + -0.0003649484536, -0.0000818556701, +0.0001635051546, +0.0003082474227, + +0.0002956701031, +0.0000692783505, -0.0002830927835, -0.0005915463918, + -0.0007173195876, -0.0006103092784, -0.0002894845361, +0.0001509278351, + +0.0005725773196, +0.0007740206186, +0.0006731958763, +0.0003839175258, + +0.0000315463918, -0.0003397938144, -0.0006606185567, -0.0007991752577, + -0.0007237113402, -0.0004404123711, -0.0000692783505, +0.0002076288660, + +0.0003839175258, +0.0004907216495, +0.0004781443299, +0.0003459793814, + +0.0001824742268, +0.0000251546392, -0.0000944329897, -0.0001257731959, + -0.0000063917526, +0.0001509278351, +0.0001950515464, +0.0000628865979, + -0.0001509278351, -0.0003334020619, -0.0003713402062, -0.0002140206186, + +0.0000000000000, +0.0001509278351, +0.0002579381443, +0.0002956701031, + +0.0001950515464, +0.0000441237113, +0.0000000000000, +0.0000503092784, + +0.0001635051546, +0.0002391752577, +0.0002579381443, +0.0002202061856, + +0.0001257731959, +0.0000503092784, +0.0000754639175, +0.0001383505155, + +0.0001635051546, +0.0001635051546, +0.0001321649485, +0.0000441237113, + -0.0000692783505, -0.0001573195876, -0.0001383505155, -0.0000125773196, + +0.0001447422680, +0.0003397938144, +0.0005222680412, +0.0006292783505, + +0.0005851546392, +0.0004152577320, +0.0002705154639, +0.0001824742268, + +0.0000628865979, -0.0000251546392, -0.0000377319588, -0.0000944329897, + -0.0002391752577, -0.0002894845361, -0.0002014432990, -0.0000818556701, + +0.0000000000000, +0.0000503092784, +0.0001006185567, +0.0001698969072, + +0.0002202061856, +0.0002453608247, +0.0003082474227, +0.0004152577320, + +0.0004781443299, +0.0004152577320, +0.0002517525773, +0.0000692783505, + -0.0001321649485, -0.0003082474227, -0.0002956701031, -0.0001321649485, + +0.0000000000000, +0.0000818556701, +0.0000880412371, +0.0000000000000, + -0.0001195876289, -0.0002140206186, -0.0002769072165, -0.0002643298969, + -0.0002517525773, -0.0002956701031, -0.0003082474227, -0.0002327835052, + -0.0000944329897, +0.0000503092784, +0.0001509278351, +0.0001573195876, + +0.0001006185567, -0.0000441237113, -0.0003146391753, -0.0005851546392, + -0.0007298969072, -0.0006544329897, -0.0004655670103, -0.0003334020619, + -0.0002327835052, -0.0000818556701, +0.0000315463918, +0.0001131958763, + +0.0001950515464, +0.0002517525773, +0.0003082474227, +0.0003901030928, + +0.0003901030928, +0.0001950515464, -0.0001006185567, -0.0003272164948, + -0.0003397938144, -0.0001698969072, +0.0000503092784, +0.0002202061856, + +0.0002579381443, +0.0001573195876, +0.0000000000000, -0.0001509278351, + -0.0002391752577, -0.0002391752577, -0.0001698969072, -0.0000315463918, + +0.0000944329897, +0.0000880412371, -0.0000628865979, -0.0002830927835, + -0.0004719587629, -0.0005412371134, -0.0004781443299, -0.0002956701031, + -0.0000692783505, +0.0000125773196, -0.0000503092784, -0.0001383505155, + -0.0002265979381, -0.0003839175258, -0.0004845360825, -0.0004719587629, + -0.0004468041237, -0.0003713402062, -0.0002705154639, -0.0002076288660, + -0.0001131958763, +0.0000063917526, +0.0000818556701, +0.0001257731959, + +0.0001447422680, +0.0000692783505, -0.0000315463918, -0.0001321649485, + -0.0002014432990, -0.0002140206186, -0.0001573195876, -0.0000944329897, + -0.0000063917526, +0.0000754639175, +0.0001195876289, +0.0000880412371, + +0.0000189690722, +0.0000063917526, +0.0000441237113, +0.0000692783505, + +0.0000880412371, +0.0001447422680, +0.0002076288660, +0.0002705154639, + +0.0003272164948, +0.0002705154639, +0.0001070103093, -0.0000441237113, + -0.0001509278351, -0.0002014432990, -0.0002265979381, -0.0002202061856, + -0.0001070103093, +0.0000692783505, +0.0001509278351, +0.0000628865979, + -0.0000692783505, -0.0001698969072, -0.0001888659794, -0.0001257731959, + +0.0000251546392, +0.0002391752577, +0.0003839175258, +0.0004090721649, + +0.0003459793814, +0.0002453608247, +0.0001447422680, +0.0000441237113, + -0.0000441237113, -0.0001383505155, -0.0002705154639, -0.0003901030928, + -0.0004026804124, -0.0002579381443, -0.0000063917526, +0.0002453608247, + +0.0003713402062, +0.0003020618557, +0.0001573195876, +0.0000377319588, + +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000315463918, + +0.0000880412371, +0.0001447422680, +0.0002265979381, +0.0003334020619, + +0.0003775257732, +0.0002956701031, +0.0001447422680, +0.0000063917526, + -0.0000628865979, -0.0001257731959, -0.0002076288660, -0.0001888659794, + -0.0000189690722, +0.0001321649485, +0.0002014432990, +0.0001950515464, + +0.0000818556701, -0.0000628865979, -0.0001321649485, -0.0000818556701, + +0.0000000000000, +0.0001131958763, +0.0002327835052, +0.0002956701031, + +0.0002643298969, +0.0001509278351, +0.0000189690722, -0.0000125773196, + +0.0000251546392, +0.0000692783505, +0.0000628865979, +0.0000315463918, + +0.0000000000000, -0.0000251546392, -0.0000189690722, +0.0000189690722, + +0.0001195876289, +0.0002830927835, +0.0004152577320, +0.0004216494845, + +0.0002830927835, +0.0000692783505, -0.0001447422680, -0.0003082474227, + -0.0003649484536, -0.0003020618557, -0.0001257731959, +0.0000628865979, + +0.0002327835052, +0.0003334020619, +0.0002769072165, +0.0000754639175, + -0.0001383505155, -0.0002956701031, -0.0003523711340, -0.0002830927835, + -0.0001321649485, +0.0000000000000, +0.0000567010309, +0.0000251546392, + -0.0001573195876, -0.0004216494845, -0.0005725773196, -0.0005725773196, + -0.0004468041237, -0.0002014432990, +0.0000567010309, +0.0001888659794, + +0.0001383505155, +0.0000000000000, -0.0000880412371, -0.0000628865979, + +0.0000503092784, +0.0002076288660, +0.0003523711340, +0.0003964948454, + +0.0002894845361, +0.0001131958763, -0.0000628865979, -0.0002076288660, + -0.0002014432990, -0.0000628865979, +0.0000628865979, +0.0001321649485, + +0.0001006185567, -0.0000441237113, -0.0002140206186, -0.0002956701031, + -0.0002579381443, -0.0001195876289, +0.0000377319588, +0.0001509278351, + +0.0001824742268, +0.0001573195876, +0.0001006185567, +0.0000441237113, + +0.0000063917526, +0.0000125773196, +0.0000251546392, -0.0000189690722, + -0.0001321649485, -0.0002076288660, -0.0002076288660, -0.0001573195876, + -0.0000628865979, +0.0000063917526, +0.0000315463918, +0.0000000000000, + -0.0000377319588, -0.0000377319588, +0.0000000000000, +0.0000503092784, + +0.0001321649485, +0.0002140206186, +0.0002265979381, +0.0001383505155, + +0.0000503092784, +0.0000125773196, +0.0000125773196, +0.0000251546392, + +0.0000377319588, +0.0000315463918, -0.0000189690722, -0.0000944329897, + -0.0000818556701, +0.0000000000000, +0.0000441237113, +0.0000628865979, + +0.0001006185567, +0.0001760824742, +0.0002517525773, +0.0002517525773, + +0.0001888659794, +0.0001635051546, +0.0001698969072, +0.0001257731959, + +0.0000628865979, +0.0000189690722, -0.0000503092784, -0.0001509278351, + -0.0002076288660, -0.0001824742268, -0.0001006185567, -0.0000251546392, + +0.0000315463918, +0.0000628865979, +0.0000315463918, -0.0000441237113, + -0.0001257731959, -0.0001573195876, -0.0000880412371, +0.0000628865979, + +0.0002517525773, +0.0003901030928, +0.0004593814433, +0.0004719587629, + +0.0004529896907, +0.0004216494845, +0.0003587628866, +0.0002327835052, + +0.0000818556701, -0.0000125773196, -0.0000567010309, -0.0001195876289, + -0.0001573195876, -0.0001257731959, -0.0000567010309, +0.0000125773196, + +0.0001321649485, +0.0002014432990, +0.0001447422680, +0.0000377319588, + -0.0000377319588, -0.0001195876289, -0.0002014432990, -0.0002453608247, + -0.0002265979381, -0.0001383505155, -0.0000063917526, +0.0000818556701, + +0.0001195876289, +0.0001070103093, +0.0000818556701, +0.0000692783505, + +0.0000189690722, -0.0000628865979, -0.0001070103093, -0.0000944329897, + -0.0000754639175, -0.0000628865979, -0.0000567010309, -0.0000189690722, + +0.0000441237113, +0.0000880412371, +0.0000189690722, -0.0001257731959, + -0.0002769072165, -0.0003459793814, -0.0003082474227, -0.0001888659794, + -0.0000189690722, +0.0001006185567, +0.0001447422680, +0.0001509278351, + +0.0001509278351, +0.0001447422680, +0.0002014432990, +0.0004026804124, + +0.0006103092784, +0.0006921649485, +0.0006480412371, +0.0004655670103, + +0.0001760824742, -0.0000692783505, -0.0001888659794, -0.0001950515464, + -0.0001509278351, -0.0001006185567, -0.0000628865979, -0.0000315463918, + -0.0000251546392, -0.0000628865979, -0.0001257731959, -0.0002014432990, + -0.0002956701031, -0.0004278350515, -0.0005600000000, -0.0005915463918, + -0.0005158762887, -0.0004026804124, -0.0002769072165, -0.0001321649485, + -0.0000315463918, +0.0000000000000, +0.0000063917526, +0.0000189690722, + +0.0000818556701, +0.0001950515464, +0.0003082474227, +0.0003713402062, + +0.0003459793814, +0.0002391752577, +0.0000441237113, -0.0002014432990, + -0.0004152577320, -0.0004845360825, -0.0004152577320, -0.0002579381443, + -0.0000251546392, +0.0001698969072, +0.0002769072165, +0.0002830927835, + +0.0001257731959, -0.0001195876289, -0.0003208247423, -0.0004026804124, + -0.0003649484536, -0.0001635051546, +0.0000944329897, +0.0002894845361, + +0.0003523711340, +0.0002830927835, +0.0000944329897, -0.0000880412371, + -0.0002014432990, -0.0002327835052, -0.0002140206186, -0.0001950515464, + -0.0001950515464, -0.0002140206186, -0.0002202061856, -0.0001824742268, + -0.0001131958763, -0.0000503092784, -0.0000063917526, +0.0000251546392, + +0.0000628865979, +0.0000944329897, +0.0001195876289, +0.0001321649485, + +0.0001573195876, +0.0002014432990, +0.0002517525773, +0.0002705154639, + +0.0002705154639, +0.0002202061856, +0.0001195876289, +0.0000000000000, + -0.0000944329897, -0.0001321649485, -0.0000944329897, +0.0000251546392, + +0.0001698969072, +0.0002265979381, +0.0001635051546, +0.0000125773196, + -0.0001635051546, -0.0003397938144, -0.0004404123711, -0.0004655670103, + -0.0004468041237, -0.0004026804124, -0.0003334020619, -0.0002327835052, + -0.0000944329897, +0.0000628865979, +0.0002014432990, +0.0002579381443, + +0.0002391752577, +0.0001760824742, +0.0000377319588, -0.0001131958763, + -0.0002140206186, -0.0002769072165, -0.0003208247423, -0.0003082474227, + -0.0002705154639, -0.0002327835052, -0.0001888659794, -0.0001635051546, + -0.0002140206186, -0.0003020618557, -0.0003587628866, -0.0003397938144, + -0.0003020618557, -0.0002327835052, -0.0001131958763, +0.0000063917526, + +0.0000944329897, +0.0001447422680, +0.0001509278351, +0.0001006185567, + +0.0000251546392, -0.0000377319588, -0.0001070103093, -0.0001195876289, + -0.0000567010309, +0.0000000000000, +0.0000251546392, +0.0000125773196, + -0.0000377319588, -0.0001321649485, -0.0002076288660, -0.0002327835052, + -0.0002140206186, -0.0001698969072, -0.0001070103093, -0.0000063917526, + +0.0000754639175, +0.0001573195876, +0.0002265979381, +0.0002453608247, + +0.0001824742268, +0.0000503092784, -0.0000880412371, -0.0002140206186, + -0.0003082474227, -0.0003334020619, -0.0002202061856, -0.0000503092784, + +0.0000315463918, +0.0000503092784, +0.0000251546392, +0.0000189690722, + +0.0000628865979, +0.0000944329897, +0.0000000000000, -0.0001509278351, + -0.0003334020619, -0.0004971134021, -0.0005915463918, -0.0005600000000, + -0.0004404123711, -0.0002391752577, -0.0000063917526, +0.0001383505155, + +0.0002202061856, +0.0002769072165, +0.0003082474227, +0.0002830927835, + +0.0001950515464, +0.0001195876289, +0.0000692783505, +0.0000503092784, + +0.0000692783505, +0.0000880412371, +0.0000880412371, +0.0001195876289, + +0.0001824742268, +0.0002202061856, +0.0002453608247, +0.0002643298969, + +0.0002453608247, +0.0001635051546, +0.0000567010309, -0.0000189690722, + -0.0000754639175, -0.0001195876289, -0.0001383505155, -0.0000818556701, + +0.0000944329897, +0.0003146391753, +0.0004278350515, +0.0003649484536, + +0.0002076288660, +0.0000628865979, -0.0000315463918, -0.0000880412371, + -0.0001195876289, -0.0001573195876, -0.0001509278351, -0.0001195876289, + -0.0001195876289, -0.0001131958763, -0.0000567010309, +0.0000063917526, + +0.0000818556701, +0.0001635051546, +0.0002202061856, +0.0002327835052, + +0.0002140206186, +0.0001509278351, +0.0000567010309, -0.0000125773196, + -0.0000377319588, +0.0000377319588, +0.0001824742268, +0.0002769072165, + +0.0003020618557, +0.0002956701031, +0.0002643298969, +0.0002202061856, + +0.0002076288660, +0.0002327835052, +0.0002517525773, +0.0002453608247, + +0.0001888659794, +0.0000567010309, -0.0001257731959, -0.0002830927835, + -0.0003082474227, -0.0001950515464, +0.0000377319588, +0.0003649484536, + +0.0006544329897, +0.0008179381443, +0.0007927835052, +0.0006103092784, + +0.0003901030928, +0.0001950515464, +0.0000441237113, -0.0000567010309, + -0.0001447422680, -0.0001824742268, -0.0001698969072, -0.0001383505155, + -0.0000692783505, +0.0000441237113, +0.0001573195876, +0.0002202061856, + +0.0002391752577, +0.0002076288660, +0.0001131958763, +0.0000251546392, + +0.0000000000000, +0.0000377319588, +0.0000944329897, +0.0001509278351, + +0.0002327835052, +0.0003146391753, +0.0003397938144, +0.0003208247423, + +0.0003082474227, +0.0002327835052, +0.0000880412371, -0.0000567010309, + -0.0001698969072, -0.0002140206186, -0.0001824742268, -0.0000944329897, + +0.0000315463918, +0.0001635051546, +0.0002453608247, +0.0003020618557, + +0.0003523711340, +0.0003713402062, +0.0003901030928, +0.0004152577320, + +0.0004593814433, +0.0004529896907, +0.0003272164948, +0.0001257731959, + -0.0000189690722, -0.0001509278351, -0.0002453608247, -0.0002202061856, + -0.0000944329897, +0.0000189690722, +0.0000880412371, +0.0000567010309, + -0.0000503092784, -0.0001383505155, -0.0001635051546, -0.0001447422680, + -0.0000692783505, +0.0000000000000, +0.0000377319588, +0.0001195876289, + +0.0002140206186, +0.0002579381443, +0.0002956701031, +0.0003397938144, + +0.0003775257732, +0.0003964948454, +0.0003713402062, +0.0003146391753, + +0.0002830927835, +0.0003082474227, +0.0003649484536, +0.0004404123711, + +0.0004845360825, +0.0003964948454, +0.0002202061856, +0.0000628865979, + -0.0000754639175, -0.0002265979381, -0.0002769072165, -0.0002014432990, + -0.0000692783505, +0.0000567010309, +0.0001509278351, +0.0001447422680, + +0.0000628865979, -0.0000315463918, -0.0001321649485, -0.0001447422680, + -0.0000377319588, +0.0000818556701, +0.0001321649485, +0.0000754639175, + -0.0000880412371, -0.0002894845361, -0.0004152577320, -0.0004468041237, + -0.0004090721649, -0.0003334020619, -0.0002327835052, -0.0000944329897, + +0.0000754639175, +0.0002140206186, +0.0002643298969, +0.0002769072165, + +0.0002643298969, +0.0002014432990, +0.0001006185567, +0.0000125773196, + -0.0000818556701, -0.0002391752577, -0.0003713402062, -0.0004090721649, + -0.0003272164948, -0.0001195876289, +0.0001321649485, +0.0003334020619, + +0.0004404123711, +0.0004719587629, +0.0004152577320, +0.0002894845361, + +0.0001383505155, -0.0000189690722, -0.0001321649485, -0.0001195876289, + -0.0000503092784, +0.0000125773196, +0.0001006185567, +0.0001950515464, + +0.0002517525773, +0.0002579381443, +0.0001698969072, +0.0000000000000, + -0.0002391752577, -0.0004781443299, -0.0006292783505, -0.0006731958763, + -0.0005474226804, -0.0002202061856, +0.0001698969072, +0.0004593814433, + +0.0005851546392, +0.0005348453608, +0.0003587628866, +0.0001509278351, + -0.0000125773196, -0.0001006185567, -0.0000628865979, -0.0000377319588, + -0.0001383505155, -0.0002705154639, -0.0003775257732, -0.0004593814433, + -0.0004593814433, -0.0003587628866, -0.0002265979381, -0.0001635051546, + -0.0002705154639, -0.0004907216495, -0.0006480412371, -0.0006670103093, + -0.0005284536082, -0.0002327835052, +0.0001006185567, +0.0003523711340, + +0.0004845360825, +0.0004845360825, +0.0003334020619, +0.0001383505155, + -0.0000063917526, -0.0001257731959, -0.0002076288660, -0.0002327835052, + -0.0002140206186, -0.0002076288660, -0.0002265979381, -0.0002265979381, + -0.0002140206186, -0.0002202061856, -0.0002391752577, -0.0002517525773, + -0.0002517525773, -0.0002453608247, -0.0002517525773, -0.0002327835052, + -0.0001321649485, +0.0000063917526, +0.0001447422680, +0.0002517525773, + +0.0002830927835, +0.0002265979381, +0.0001573195876, +0.0001195876289, + +0.0000754639175, +0.0000125773196, -0.0000377319588, -0.0001070103093, + -0.0001888659794, -0.0002579381443, -0.0002830927835, -0.0002517525773, + -0.0002076288660, -0.0001760824742, -0.0001509278351, -0.0001509278351, + -0.0002140206186, -0.0003082474227, -0.0003839175258, -0.0003839175258, + -0.0003020618557, -0.0001573195876, +0.0000125773196, +0.0002076288660, + +0.0003649484536, +0.0004278350515, +0.0003649484536, +0.0002076288660, + +0.0000441237113, -0.0000754639175, -0.0001383505155, -0.0001195876289, + -0.0000567010309, -0.0000063917526, +0.0000000000000, -0.0000189690722, + -0.0000503092784, -0.0000567010309, -0.0000567010309, -0.0000818556701, + -0.0001257731959, -0.0002140206186, -0.0003020618557, -0.0003208247423, + -0.0002769072165, -0.0002076288660, -0.0001006185567, +0.0000000000000, + +0.0000503092784, +0.0000503092784, +0.0000315463918, +0.0000125773196, + +0.0000503092784, +0.0001006185567, +0.0001257731959, +0.0001698969072, + +0.0002391752577, +0.0002705154639, +0.0002517525773, +0.0002140206186, + +0.0001195876289, -0.0000503092784, -0.0002769072165, -0.0004468041237, + -0.0005538144330, -0.0005915463918, -0.0004971134021, -0.0003208247423, + -0.0002076288660, -0.0001888659794, -0.0001635051546, -0.0000880412371, + +0.0000628865979, +0.0002894845361, +0.0005032989691, +0.0006228865979, + +0.0005915463918, +0.0004278350515, +0.0002643298969, +0.0002140206186, + +0.0002705154639, +0.0003523711340, +0.0003964948454, +0.0003713402062, + +0.0002517525773, +0.0000628865979, -0.0001006185567, -0.0002327835052, + -0.0003146391753, -0.0003459793814, -0.0003208247423, -0.0002705154639, + -0.0001950515464, -0.0000880412371, -0.0000063917526, +0.0000251546392, + +0.0000441237113, +0.0000628865979, +0.0000377319588, -0.0000315463918, + -0.0001195876289, -0.0001447422680, -0.0001195876289, -0.0000692783505, + +0.0000125773196, +0.0001573195876, +0.0002705154639, +0.0003020618557, + +0.0002643298969, +0.0002014432990, +0.0001573195876, +0.0001195876289, + +0.0001195876289, +0.0002076288660, +0.0003272164948, +0.0003649484536, + +0.0003020618557, +0.0002076288660, +0.0001195876289, +0.0000251546392, + -0.0000754639175, -0.0001888659794, -0.0002769072165, -0.0003208247423, + -0.0003146391753, -0.0002391752577, -0.0001070103093, +0.0000754639175, + +0.0002956701031, +0.0004655670103, +0.0005412371134, +0.0005096907216, + +0.0004090721649, +0.0003082474227, +0.0002140206186, +0.0001321649485, + +0.0000818556701, +0.0000441237113, -0.0000377319588, -0.0001635051546, + -0.0002265979381, -0.0001888659794, -0.0001195876289, -0.0000628865979, + -0.0000251546392, +0.0000189690722, +0.0000441237113, +0.0000377319588, + +0.0000441237113, +0.0000818556701, +0.0000944329897, +0.0000628865979, + +0.0000189690722, +0.0000000000000, +0.0000251546392, +0.0000818556701, + +0.0001321649485, +0.0002140206186, +0.0002769072165, +0.0002643298969, + +0.0001509278351, +0.0000000000000, -0.0001070103093, -0.0001888659794, + -0.0002453608247, -0.0003020618557, -0.0003082474227, -0.0002140206186, + -0.0000692783505, +0.0000125773196, +0.0000692783505, +0.0001447422680, + +0.0001824742268, +0.0001383505155, +0.0000000000000, -0.0001509278351, + -0.0003082474227, -0.0003901030928, -0.0003587628866, -0.0002076288660, + +0.0000063917526, +0.0002265979381, +0.0003523711340, +0.0003839175258, + +0.0003397938144, +0.0002265979381, +0.0000754639175, +0.0000000000000, + +0.0000063917526, +0.0000441237113, +0.0000377319588, +0.0000251546392, + +0.0000000000000, -0.0000567010309, -0.0001006185567, -0.0000880412371, + -0.0000754639175, -0.0000692783505, -0.0000125773196, +0.0000880412371, + +0.0001950515464, +0.0002391752577, +0.0002076288660, +0.0001698969072, + +0.0001383505155, +0.0000628865979, -0.0000503092784, -0.0001383505155, + -0.0001760824742, -0.0001950515464, -0.0002140206186, -0.0002014432990, + -0.0001195876289, +0.0000000000000, +0.0000692783505, +0.0000880412371, + +0.0000944329897, +0.0001006185567, +0.0000567010309, -0.0000315463918, + -0.0001131958763, -0.0001321649485, -0.0000880412371, +0.0000000000000, + +0.0000944329897, +0.0001573195876, +0.0001447422680, +0.0000692783505, + -0.0000441237113, -0.0001698969072, -0.0002140206186, -0.0001760824742, + -0.0000944329897, -0.0000189690722, +0.0000189690722, +0.0000251546392, + +0.0000000000000, -0.0000377319588, -0.0000692783505, -0.0000567010309, + +0.0000000000000, +0.0000503092784, +0.0000880412371, +0.0000944329897, + +0.0000503092784, -0.0000377319588, -0.0001321649485, -0.0001760824742, + -0.0001383505155, -0.0000441237113, +0.0000441237113, +0.0001070103093, + +0.0001383505155, +0.0001257731959, +0.0000880412371, +0.0000567010309, + +0.0000377319588, +0.0000125773196, +0.0000000000000, -0.0000063917526, + -0.0000251546392, -0.0000692783505, -0.0001257731959, -0.0001760824742, + -0.0001888659794, -0.0001635051546, -0.0001321649485, -0.0001006185567, + -0.0000754639175, -0.0000503092784, -0.0000189690722, +0.0000000000000, + +0.0000063917526, +0.0000567010309, +0.0001635051546, +0.0002643298969, + +0.0003146391753, +0.0003272164948, +0.0003020618557, +0.0002391752577, + +0.0001698969072, +0.0001070103093, +0.0000692783505, +0.0000377319588, + +0.0000125773196, +0.0000000000000, -0.0000189690722, -0.0000441237113, + -0.0000628865979, -0.0000754639175, -0.0001195876289, -0.0001760824742, + -0.0001888659794, -0.0001447422680, -0.0000567010309, +0.0000503092784, + +0.0001760824742, +0.0002265979381, +0.0001573195876, +0.0000189690722, + -0.0001195876289, -0.0002327835052, -0.0002769072165, -0.0002453608247, + -0.0001888659794, -0.0001509278351, -0.0001447422680, -0.0001573195876, + -0.0001635051546, -0.0001573195876, -0.0001509278351, -0.0001321649485, + -0.0000628865979, +0.0000000000000, +0.0000251546392, +0.0000628865979, + +0.0001131958763, +0.0001635051546, +0.0001888659794, +0.0001698969072, + +0.0000818556701, -0.0000503092784, -0.0002202061856, -0.0003587628866, + -0.0003964948454, -0.0003020618557, -0.0001447422680, +0.0000000000000, + +0.0001131958763, +0.0001824742268, +0.0001824742268, +0.0001257731959, + +0.0000754639175, +0.0000189690722, -0.0000125773196, -0.0000503092784, + -0.0000692783505, -0.0000754639175, -0.0000754639175, -0.0000944329897, + -0.0001257731959, -0.0001257731959, -0.0001131958763, -0.0001131958763, + -0.0000944329897, -0.0000567010309, -0.0000315463918, -0.0000125773196, + +0.0000000000000, -0.0000125773196, -0.0000251546392, -0.0000315463918, + -0.0000189690722, +0.0000251546392, +0.0000944329897, +0.0001573195876, + +0.0001698969072, +0.0001195876289, +0.0000000000000, -0.0001321649485, + -0.0002517525773, -0.0003020618557, -0.0002517525773, -0.0001573195876, + -0.0000818556701, -0.0000315463918, +0.0000063917526, +0.0000251546392, + +0.0000189690722, +0.0000125773196, +0.0000567010309, +0.0001257731959, + +0.0001698969072, +0.0001760824742, +0.0001383505155, +0.0000503092784, + -0.0000628865979, -0.0001888659794, -0.0002579381443, -0.0002453608247, + -0.0001321649485, +0.0000315463918, +0.0002140206186, +0.0003146391753, + +0.0003334020619, +0.0002956701031, +0.0002202061856, +0.0001195876289, + +0.0000503092784, +0.0000315463918, +0.0000189690722, +0.0000125773196, + +0.0000125773196, +0.0000189690722, +0.0000251546392, +0.0000125773196, + +0.0000000000000, +0.0000063917526, +0.0000251546392, +0.0000567010309, + +0.0000944329897, +0.0001257731959, +0.0001195876289, +0.0000692783505, + -0.0000189690722, -0.0001573195876, -0.0002453608247, -0.0002579381443, + -0.0002140206186, -0.0001447422680, -0.0000818556701, -0.0000441237113, + +0.0000000000000, +0.0000189690722, +0.0000441237113, +0.0000628865979, + +0.0000818556701, +0.0001006185567, +0.0001321649485, +0.0001509278351, + +0.0001447422680, +0.0001257731959, +0.0000880412371, +0.0000189690722, + -0.0000567010309, -0.0001131958763, -0.0001131958763, -0.0000692783505, + +0.0000000000000, +0.0000818556701, +0.0001573195876, +0.0001760824742, + +0.0001698969072, +0.0001509278351, +0.0001257731959, +0.0001070103093, + +0.0000818556701, +0.0000628865979, +0.0000692783505, +0.0000754639175, + +0.0000692783505, +0.0000503092784, +0.0000000000000, -0.0000692783505, + -0.0001131958763, -0.0001131958763, -0.0000944329897, -0.0000818556701, + -0.0000944329897, -0.0001195876289, -0.0001257731959, -0.0001195876289, + -0.0000692783505, +0.0000000000000, +0.0000628865979, +0.0000692783505, + +0.0000189690722, -0.0000377319588, -0.0001070103093, -0.0001509278351, + -0.0001321649485, -0.0000063917526, +0.0001573195876, +0.0002830927835, + +0.0002769072165, +0.0001447422680, -0.0000441237113, -0.0002265979381, + -0.0003082474227, -0.0002830927835, -0.0001760824742, -0.0000315463918, + +0.0000944329897, +0.0002014432990, +0.0002327835052, +0.0001888659794, + +0.0001447422680, +0.0001257731959, +0.0001321649485, +0.0001195876289, + +0.0000692783505, +0.0000189690722, -0.0000063917526, -0.0000503092784, + -0.0000944329897, -0.0000754639175, +0.0000000000000, +0.0000818556701, + +0.0001383505155, +0.0001698969072, +0.0001447422680, +0.0000441237113, + -0.0001006185567, -0.0002076288660, -0.0001950515464, -0.0000818556701, + +0.0000567010309, +0.0002014432990, +0.0002956701031, +0.0003146391753, + +0.0002265979381, +0.0000818556701, -0.0000189690722, -0.0000944329897, + -0.0001447422680, -0.0001635051546, -0.0001573195876, -0.0001257731959, + -0.0000628865979, -0.0000189690722, +0.0000000000000, +0.0000063917526, + +0.0000000000000, -0.0000503092784, -0.0001070103093, -0.0001006185567, + -0.0000692783505, -0.0000251546392, +0.0000315463918, +0.0000880412371, + +0.0001257731959, +0.0001447422680, +0.0001257731959, +0.0000754639175, + +0.0000315463918, +0.0000125773196, +0.0000189690722, +0.0000377319588, + +0.0000503092784, +0.0000441237113, +0.0000441237113, +0.0000503092784, + +0.0000944329897, +0.0001635051546, +0.0002453608247, +0.0002830927835, + +0.0002643298969, +0.0001824742268, +0.0000754639175, +0.0000063917526, + +0.0000000000000, +0.0000315463918, +0.0001006185567, +0.0001760824742, + +0.0002202061856, +0.0002014432990, +0.0001383505155, +0.0000628865979, + +0.0000251546392, +0.0000441237113, +0.0000692783505, +0.0000628865979, + +0.0000125773196, -0.0000628865979, -0.0001824742268, -0.0002453608247, + -0.0002014432990, -0.0000880412371, +0.0000567010309, +0.0002076288660, + +0.0002956701031, +0.0002769072165, +0.0001698969072, +0.0000125773196, + -0.0000944329897, -0.0001321649485, -0.0001131958763, -0.0000692783505, + -0.0000063917526, +0.0000692783505, +0.0001509278351, +0.0001888659794, + +0.0002140206186, +0.0002265979381, +0.0002327835052, +0.0002140206186, + +0.0001760824742, +0.0001070103093, +0.0000125773196, -0.0000628865979, + -0.0001447422680, -0.0001698969072, -0.0001321649485, -0.0000441237113, + +0.0000377319588, +0.0001006185567, +0.0001195876289, +0.0000818556701, + +0.0000251546392, +0.0000000000000, +0.0000000000000, +0.0000125773196, + +0.0000125773196, +0.0000063917526, +0.0000000000000, +0.0000000000000, + -0.0000063917526, -0.0000063917526, -0.0000063917526, +0.0000063917526, + +0.0000441237113, +0.0000880412371, +0.0001195876289, +0.0001321649485, + +0.0000944329897, +0.0000315463918, +0.0000000000000, -0.0000251546392, + -0.0000567010309, -0.0000628865979, -0.0000315463918, +0.0000000000000, + +0.0000000000000, +0.0000000000000, +0.0000125773196, +0.0000251546392, + +0.0000503092784, +0.0000628865979, +0.0000315463918, -0.0000063917526, + -0.0000315463918, -0.0000503092784, -0.0000441237113, -0.0000125773196, + +0.0000189690722, +0.0000754639175, +0.0001195876289, +0.0001070103093, + +0.0000503092784, +0.0000063917526, -0.0000315463918, -0.0000754639175, + -0.0001131958763, -0.0001006185567, -0.0000251546392, +0.0000628865979, + +0.0001383505155, +0.0001635051546, +0.0001131958763, +0.0000000000000, + -0.0001195876289, -0.0001888659794, -0.0002140206186, -0.0001888659794, + -0.0001257731959, -0.0000377319588, +0.0000189690722, +0.0000251546392, + +0.0000000000000, +0.0000000000000, +0.0000189690722, +0.0000567010309, + +0.0000754639175, +0.0000692783505, +0.0000441237113, +0.0000000000000, + -0.0000315463918, -0.0000377319588, +0.0000000000000, +0.0000441237113, + +0.0000692783505, +0.0000567010309, +0.0000000000000, -0.0000944329897, + -0.0001950515464, -0.0002579381443, -0.0002453608247, -0.0001573195876, + -0.0000251546392, +0.0001070103093, +0.0002265979381, +0.0002517525773, + +0.0001824742268, +0.0000818556701, +0.0000000000000, -0.0000441237113, + -0.0000567010309, -0.0000189690722, +0.0000251546392, +0.0000628865979, + +0.0000441237113, +0.0000063917526, -0.0000251546392, -0.0000503092784, + -0.0000567010309, -0.0000628865979, -0.0000628865979, -0.0000628865979, + -0.0000692783505, -0.0000880412371, -0.0000880412371, -0.0000628865979, + -0.0000315463918, +0.0000000000000, +0.0000251546392, +0.0000441237113, + +0.0000377319588, +0.0000251546392, +0.0000315463918, +0.0000441237113, + +0.0000251546392, +0.0000000000000, -0.0000189690722, -0.0000377319588, + -0.0000503092784, -0.0000503092784, -0.0000315463918, +0.0000000000000, + +0.0000503092784, +0.0000692783505, +0.0000818556701, +0.0000880412371, + +0.0000880412371, +0.0000567010309, +0.0000000000000, -0.0001006185567, + -0.0001760824742, -0.0002014432990, -0.0001573195876, -0.0000567010309, + +0.0000315463918, +0.0000818556701, +0.0000818556701, +0.0000189690722, + -0.0000692783505, -0.0001635051546, -0.0002453608247, -0.0002830927835, + -0.0002517525773, -0.0001573195876, -0.0000503092784, +0.0000189690722, + +0.0000692783505, +0.0000944329897, +0.0001006185567, +0.0000818556701, + +0.0000441237113, +0.0000000000000, -0.0000189690722, -0.0000251546392, + -0.0000377319588, -0.0000628865979, -0.0000754639175, -0.0000692783505, + -0.0000377319588, +0.0000063917526, +0.0000818556701, +0.0001447422680, + +0.0001698969072, +0.0001257731959, +0.0000189690722, -0.0000818556701, + -0.0001509278351, -0.0001635051546, -0.0001131958763, -0.0000377319588, + +0.0000189690722, +0.0000441237113, +0.0000125773196, -0.0000628865979, + -0.0001509278351, -0.0001950515464, -0.0002014432990, -0.0001698969072, + -0.0001131958763, -0.0000567010309, -0.0000377319588, -0.0000628865979, + -0.0000944329897, -0.0000880412371, -0.0000441237113, +0.0000000000000, + +0.0000441237113, +0.0000692783505, +0.0000315463918, -0.0000567010309, + -0.0001824742268, -0.0002769072165, -0.0003082474227, -0.0002769072165, + -0.0001888659794, -0.0000692783505, +0.0000063917526, +0.0000628865979, + +0.0000692783505, +0.0000189690722, -0.0000503092784, -0.0001006185567, + -0.0001321649485, -0.0001195876289, -0.0000818556701, -0.0000189690722, + +0.0000189690722, +0.0000315463918, +0.0000000000000, -0.0000441237113, + -0.0001006185567, -0.0001509278351, -0.0001760824742, -0.0001635051546, + -0.0001447422680, -0.0001321649485, -0.0001257731959, -0.0001131958763, + -0.0000818556701, -0.0000377319588, +0.0000000000000, +0.0000251546392, + +0.0000441237113, +0.0000441237113, +0.0000441237113, +0.0000567010309, + +0.0000880412371, +0.0001006185567, +0.0000754639175, +0.0000063917526, + -0.0000754639175, -0.0001888659794, -0.0002769072165, -0.0003082474227, + -0.0002769072165, -0.0002076288660, -0.0001070103093, -0.0000189690722, + +0.0000063917526, +0.0000000000000, -0.0000315463918, -0.0000628865979, + -0.0000692783505, -0.0000880412371, -0.0001006185567, -0.0001006185567, + -0.0001070103093, -0.0001131958763, -0.0000880412371, -0.0000503092784, + -0.0000063917526, +0.0000377319588, +0.0000818556701, +0.0000880412371, + +0.0000503092784, -0.0000377319588, -0.0001447422680, -0.0002014432990, + -0.0002140206186, -0.0001888659794, -0.0001257731959, -0.0000315463918, + +0.0000315463918, +0.0000754639175, +0.0000944329897, +0.0000818556701, + +0.0000567010309, +0.0000189690722, +0.0000000000000, +0.0000000000000, + +0.0000000000000, -0.0000125773196, -0.0000251546392, -0.0000251546392, + -0.0000251546392, +0.0000000000000, +0.0000315463918, +0.0000944329897, + +0.0001573195876, +0.0002076288660, +0.0002202061856, +0.0001950515464, + +0.0001383505155, +0.0000692783505, -0.0000063917526, -0.0001006185567, + -0.0001573195876, -0.0001509278351, -0.0001070103093, -0.0000315463918, + +0.0000251546392, +0.0000818556701, +0.0001070103093, +0.0000944329897, + +0.0000818556701, +0.0000754639175, +0.0000628865979, +0.0000441237113, + +0.0000567010309, +0.0001070103093, +0.0001573195876, +0.0001698969072, + +0.0001383505155, +0.0001070103093, +0.0000818556701, +0.0000628865979, + +0.0000692783505, +0.0001131958763, +0.0001321649485, +0.0001257731959, + +0.0000880412371, +0.0000441237113, +0.0000125773196, +0.0000000000000, + -0.0000063917526, +0.0000189690722, +0.0000880412371, +0.0001383505155, + +0.0001573195876, +0.0001573195876, +0.0001447422680, +0.0001257731959, + +0.0000880412371, +0.0000628865979, +0.0000567010309, +0.0000567010309, + +0.0000315463918, +0.0000000000000, -0.0000125773196, -0.0000251546392, + -0.0000189690722, +0.0000000000000, +0.0000503092784, +0.0001447422680, + +0.0002076288660, +0.0002265979381, +0.0002076288660, +0.0001509278351, + +0.0000567010309, -0.0000377319588, -0.0001131958763, -0.0001195876289, + -0.0000503092784, +0.0000251546392, +0.0000880412371, +0.0001195876289, + +0.0001195876289, +0.0001070103093, +0.0000754639175, +0.0000125773196, + -0.0000063917526, +0.0000000000000, +0.0000251546392, +0.0000567010309, + +0.0000754639175, +0.0000880412371, +0.0001195876289, +0.0001257731959, + +0.0000944329897, +0.0000377319588, +0.0000000000000, -0.0000503092784, + -0.0000692783505, -0.0000377319588, +0.0000000000000, +0.0000063917526, + +0.0000125773196, +0.0000000000000, -0.0000251546392, -0.0000567010309, + -0.0000441237113, +0.0000063917526, +0.0001006185567, +0.0001888659794, + +0.0002517525773, +0.0002769072165, +0.0002769072165, +0.0002579381443, + +0.0002265979381, +0.0002014432990, +0.0002014432990, +0.0001824742268, + +0.0001195876289, +0.0000503092784, +0.0000000000000, -0.0000441237113, + -0.0000754639175, -0.0000944329897, -0.0000944329897, -0.0000628865979, + -0.0000315463918, -0.0000125773196, +0.0000000000000, +0.0000063917526, + +0.0000125773196, +0.0000251546392, +0.0000441237113, +0.0000944329897, + +0.0001509278351, +0.0001760824742, +0.0001888659794, +0.0001760824742 +}; diff --git a/plugins/LadspaEffect/swh/impulses/21-matchless-chieftain-sm57-off.h b/plugins/LadspaEffect/swh/impulses/21-matchless-chieftain-sm57-off.h new file mode 100644 index 000000000..e5558b9f3 --- /dev/null +++ b/plugins/LadspaEffect/swh/impulses/21-matchless-chieftain-sm57-off.h @@ -0,0 +1,937 @@ +float matchless_chieftain_sm57_off[] = { + +0.0001511926606, +0.0001566972477, +0.0001566972477, +0.0001566972477, + +0.0001623853211, +0.0001680733945, +0.0001680733945, +0.0001792660550, + +0.0001847706422, +0.0001904587156, +0.0001904587156, +0.0002016513761, + +0.0002071559633, +0.0002128440367, +0.0002128440367, +0.0002183486239, + +0.0002240366972, +0.0002240366972, +0.0002183486239, +0.0002240366972, + +0.0002183486239, +0.0002183486239, +0.0002128440367, +0.0002071559633, + +0.0002071559633, +0.0002071559633, +0.0002016513761, +0.0002016513761, + +0.0001959633028, +0.0002016513761, +0.0001904587156, +0.0001847706422, + +0.0001735779817, +0.0001680733945, +0.0001511926606, +0.0001343119266, + +0.0001119266055, +0.0001007339450, +0.0000840366972, +0.0000671559633, + +0.0000504587156, +0.0000447706422, +0.0000280733945, +0.0000168807339, + +0.0000000000000, -0.0000056880734, -0.0000223853211, -0.0000447706422, + -0.0000728440367, -0.0000895412844, -0.0001176146789, -0.0001400000000, + -0.0001623853211, -0.0001792660550, -0.0001959633028, -0.0002183486239, + -0.0002519266055, -0.0002800000000, -0.0003135779817, -0.0003359633028, + -0.0003640366972, -0.0003752293578, -0.0003919266055, -0.0003976146789, + -0.0004143119266, -0.0004255045872, -0.0004535779817, -0.0004759633028, + -0.0005040366972, -0.0005207339450, -0.0005431192661, -0.0005488073394, + -0.0005543119266, -0.0005600000000, -0.0005711926606, -0.0005711926606, + -0.0005823853211, -0.0005823853211, -0.0005935779817, -0.0005935779817, + -0.0005878899083, -0.0005766972477, -0.0005655045872, -0.0005431192661, + -0.0005264220183, -0.0004928440367, -0.0004759633028, -0.0004423853211, + -0.0004143119266, -0.0003752293578, -0.0003471559633, -0.0003135779817, + -0.0002855045872, -0.0002464220183, -0.0002183486239, -0.0001680733945, + -0.0001176146789, -0.0000504587156, +0.0000000000000, +0.0000671559633, + +0.0001400000000, +0.0002240366972, +0.0002911926606, +0.0003695412844, + +0.0004366972477, +0.0005152293578, +0.0005878899083, +0.0006776146789, + +0.0007559633028, +0.0008566972477, +0.0009462385321, +0.0010414678899, + +0.0011200000000, +0.0012207339450, +0.0013102752294, +0.0014166972477, + +0.0015119266055, +0.0016350458716, +0.0017469724771, +0.0018645871560, + +0.0019543119266, +0.0020605504587, +0.0021333944954, +0.0022229357798, + +0.0022845871560, +0.0023741284404, +0.0024526605505, +0.0025590825688, + +0.0026374311927, +0.0027438532110, +0.0028165137615, +0.0029117431193, + +0.0029622018349, +0.0030405504587, +0.0030741284404, +0.0031300917431, + +0.0031245871560, +0.0031581651376, +0.0031357798165, +0.0031693577982, + +0.0031245871560, +0.0031469724771, +0.0030853211009, +0.0031188990826, + +0.0030181651376, +0.0030462385321, +0.0028893577982, +0.0029117431193, + +0.0026877064220, +0.0027381651376, +0.0024022018349, +0.0025365137615, + +0.0020045871560, +0.0023910091743, +0.0015007339450, +0.0020381651376, + +0.0017302752294, +0.0006383486239, +0.0018143119266, +0.0010471559633, + +0.0006271559633, +0.0001343119266, +0.0002464220183, -0.0001007339450, + +0.0000335779817, -0.0005319266055, -0.0003695412844, -0.0010638532110, + -0.0009855045872, -0.0015231192661, -0.0017302752294, -0.0020831192661, + -0.0023741284404, -0.0027157798165, -0.0032422018349, -0.0031805504587, + -0.0028838532110, -0.0042948623853, -0.0065458715596, -0.0058963302752, + -0.0033486238532, -0.0035500917431, -0.0062546788991, -0.0036229357798, + +0.0045915596330, -0.0037796330275, -0.0148332110092, +0.0062939449541, + +0.0453620183486, +0.0444772477064, -0.0210823853211, -0.1025390825688, + -0.1561379816514, -0.1834581651376, -0.1786370642202, -0.1175234862385, + -0.0273089908257, +0.0380882568807, +0.0621383486239, +0.0517398165138, + +0.0079344954128, -0.0153651376147, -0.0025365137615, +0.0080409174312, + +0.0194640366972, +0.0423157798165, +0.0483130275229, +0.0478985321101, + +0.0450484403670, +0.0363803669725, +0.0385754128440, +0.0512247706422, + +0.0413807339450, +0.0109190825688, -0.0123022018349, -0.0354060550459, + -0.0486992660550, -0.0297335779817, -0.0066522935780, +0.0166587155963, + +0.0411455045872, +0.0406135779817, +0.0217933944954, +0.0147603669725, + +0.0076154128440, +0.0044460550459, +0.0064618348624, -0.0014110091743, + -0.0078337614679, -0.0050732110092, -0.0054708256881, -0.0038972477064, + +0.0035053211009, +0.0110255045872, +0.0144077064220, +0.0082704587156, + -0.0021278899083, -0.0137972477064, -0.0202759633028, -0.0287201834862, + -0.0369739449541, -0.0291344954128, -0.0102583486239, +0.0031300917431, + +0.0146541284404, +0.0231710091743, +0.0217262385321, +0.0112719266055, + -0.0047651376147, -0.0217095412844, -0.0217319266055, -0.0040484403670, + +0.0149508256881, +0.0281880733945, +0.0348124770642, +0.0330150458716, + +0.0294033027523, +0.0264858715596, +0.0249236697248, +0.0283056880734, + +0.0272137614679, +0.0197271559633, +0.0163282568807, +0.0146372477064, + +0.0056275229358, -0.0078001834862, -0.0206623853211, -0.0273034862385, + -0.0254163302752, -0.0177561467890, -0.0075201834862, -0.0004816513761, + +0.0034829357798, +0.0069434862385, +0.0131310091743, +0.0231038532110, + +0.0330093577982, +0.0376011009174, +0.0372818348624, +0.0350812844037, + +0.0268946788991, +0.0153203669725, +0.0105216513761, +0.0106840366972, + +0.0090376146789, +0.0049724770642, -0.0021390825688, -0.0073130275229, + -0.0081249541284, -0.0070611009174, -0.0028500917431, +0.0037741284404, + +0.0076770642202, +0.0027326605505, -0.0067194495413, -0.0106390825688, + -0.0062099082569, +0.0037908256881, +0.0157963302752, +0.0250860550459, + +0.0274434862385, +0.0209143119266, +0.0104935779817, +0.0026822018349, + +0.0008455045872, +0.0024022018349, +0.0045691743119, +0.0081025688073, + +0.0110647706422, +0.0081025688073, -0.0010807339450, -0.0102247706422, + -0.0139877064220, -0.0103928440367, -0.0014614678899, +0.0057508256881, + +0.0056051376147, +0.0013159633028, -0.0022117431193, -0.0035836697248, + -0.0042165137615, -0.0023069724771, +0.0010919266055, +0.0036733944954, + +0.0046924770642, +0.0043565137615, +0.0043172477064, +0.0030517431193, + +0.0019543119266, +0.0032588990826, +0.0056499082569, +0.0081473394495, + +0.0092111926606, +0.0074809174312, +0.0040484403670, -0.0010695412844, + -0.0050284403670, -0.0063387155963, -0.0086737614679, -0.0156115596330, + -0.0231093577982, -0.0256515596330, -0.0242067889908, -0.0206400000000, + -0.0132486238532, -0.0043229357798, +0.0022733944954, +0.0057170642202, + +0.0077442201835, +0.0064842201835, +0.0000000000000, -0.0069546788991, + -0.0097321100917, -0.0090711926606, -0.0064563302752, -0.0045300917431, + -0.0037012844037, -0.0018422018349, -0.0013719266055, -0.0040429357798, + -0.0066746788991, -0.0081080733945, -0.0087297247706, -0.0079568807339, + -0.0082313761468, -0.0101183486239, -0.0127669724771, -0.0147996330275, + -0.0142341284404, -0.0116807339450, -0.0080521100917, -0.0045803669725, + -0.0023014678899, -0.0022622018349, -0.0033541284404, -0.0044629357798, + -0.0058739449541, -0.0064058715596, -0.0053979816514, -0.0051179816514, + -0.0066522935780, -0.0100400000000, -0.0153372477064, -0.0197271559633, + -0.0206176146789, -0.0191673394495, -0.0171849541284, -0.0126269724771, + -0.0075034862385, -0.0052972477064, -0.0057955963303, -0.0068651376147, + -0.0068539449541, -0.0048267889908, -0.0024581651376, -0.0015510091743, + -0.0019766972477, -0.0029845871560, -0.0040988990826, -0.0050899082569, + -0.0054372477064, -0.0047260550459, -0.0032086238532, -0.0015902752294, + -0.0006159633028, -0.0011983486239, -0.0027438532110, -0.0054203669725, + -0.0088192660550, -0.0107231192661, -0.0102135779817, -0.0074642201835, + -0.0048267889908, -0.0028500917431, -0.0011535779817, -0.0005990825688, + -0.0001400000000, +0.0017190825688, +0.0025981651376, +0.0030012844037, + +0.0039812844037, +0.0029845871560, -0.0003247706422, -0.0033653211009, + -0.0052915596330, -0.0050675229358, -0.0016686238532, +0.0033598165138, + +0.0067754128440, +0.0059579816514, +0.0009071559633, -0.0062379816514, + -0.0126717431193, -0.0168154128440, -0.0179689908257, -0.0153875229358, + -0.0094464220183, -0.0030012844037, +0.0021950458716, +0.0054875229358, + +0.0063106422018, +0.0038245871560, +0.0002576146789, -0.0025590825688, + -0.0042779816514, -0.0040708256881, -0.0024693577982, -0.0015902752294, + -0.0025198165138, -0.0032365137615, -0.0027438532110, -0.0019766972477, + -0.0027269724771, -0.0046027522936, -0.0061091743119, -0.0061818348624, + -0.0060979816514, -0.0063554128440, -0.0066466055046, -0.0063946788991, + -0.0053196330275, -0.0047203669725, -0.0052579816514, -0.0050115596330, + -0.0027662385321, -0.0000728440367, +0.0020045871560, +0.0039420183486, + +0.0058682568807, +0.0071673394495, +0.0073522935780, +0.0067977981651, + +0.0070049541284, +0.0076937614679, +0.0067642201835, +0.0047091743119, + +0.0037405504587, +0.0030069724771, +0.0013607339450, -0.0001735779817, + -0.0007447706422, +0.0000111926606, +0.0021669724771, +0.0046308256881, + +0.0067082568807, +0.0085337614679, +0.0101183486239, +0.0103816513761, + +0.0087576146789, +0.0058851376147, +0.0026765137615, +0.0004590825688, + +0.0001792660550, +0.0017245871560, +0.0046588990826, +0.0072625688073, + +0.0080185321101, +0.0072122935780, +0.0051796330275, +0.0026374311927, + +0.0004088073394, -0.0012710091743, -0.0020719266055, -0.0020493577982, + -0.0010919266055, +0.0007055045872, +0.0019374311927, +0.0015455045872, + +0.0007055045872, +0.0002743119266, -0.0005878899083, -0.0019990825688, + -0.0025141284404, -0.0014055045872, +0.0014333944954, +0.0052467889908, + +0.0086344954128, +0.0106000000000, +0.0114678899083, +0.0109862385321, + +0.0086737614679, +0.0056108256881, +0.0038805504587, +0.0036060550459, + +0.0044179816514, +0.0054875229358, +0.0052691743119, +0.0040765137615, + +0.0029733944954, +0.0023910091743, +0.0027717431193, +0.0043677064220, + +0.0060755963303, +0.0067642201835, +0.0061315596330, +0.0049667889908, + +0.0035612844037, +0.0025141284404, +0.0024974311927, +0.0036229357798, + +0.0050675229358, +0.0058515596330, +0.0055827522936, +0.0049891743119, + +0.0047091743119, +0.0047539449541, +0.0048603669725, +0.0049836697248, + +0.0054427522936, +0.0061763302752, +0.0069546788991, +0.0075873394495, + +0.0075818348624, +0.0067139449541, +0.0052579816514, +0.0034772477064, + +0.0016910091743, +0.0000504587156, -0.0013495412844, -0.0019655045872, + -0.0014447706422, -0.0001680733945, +0.0005488073394, +0.0006047706422, + +0.0010638532110, +0.0017245871560, +0.0019150458716, +0.0024302752294, + +0.0038412844037, +0.0055546788991, +0.0065346788991, +0.0062267889908, + +0.0052860550459, +0.0042108256881, +0.0032645871560, +0.0025814678899, + +0.0024526605505, +0.0027550458716, +0.0027605504587, +0.0019543119266, + +0.0009071559633, +0.0004590825688, +0.0001847706422, -0.0004647706422, + -0.0008400000000, +0.0001119266055, +0.0018814678899, +0.0033877064220, + +0.0039588990826, +0.0039141284404, +0.0034717431193, +0.0024693577982, + +0.0014390825688, +0.0010750458716, +0.0010638532110, +0.0009462385321, + +0.0008288073394, +0.0008231192661, +0.0011423853211, +0.0013886238532, + +0.0009350458716, +0.0000616513761, -0.0003192660550, -0.0006214678899, + -0.0012150458716, -0.0017807339450, -0.0020045871560, -0.0019150458716, + -0.0016014678899, -0.0011590825688, -0.0004423853211, +0.0008511926606, + +0.0016183486239, +0.0012655045872, +0.0004200000000, -0.0004590825688, + -0.0011535779817, -0.0013719266055, -0.0009743119266, +0.0001400000000, + +0.0012935779817, +0.0015510091743, +0.0012823853211, +0.0008455045872, + +0.0002016513761, -0.0003695412844, -0.0004143119266, -0.0001455045872, + -0.0003752293578, -0.0012710091743, -0.0022343119266, -0.0029229357798, + -0.0033598165138, -0.0037741284404, -0.0042667889908, -0.0040036697248, + -0.0033765137615, -0.0031412844037, -0.0029005504587, -0.0020943119266, + -0.0007671559633, +0.0003304587156, +0.0006552293578, +0.0006776146789, + +0.0009855045872, +0.0012150458716, +0.0010638532110, +0.0008511926606, + +0.0004871559633, -0.0004702752294, -0.0015790825688, -0.0021390825688, + -0.0021166972477, -0.0018366972477, -0.0012431192661, -0.0004535779817, + +0.0001400000000, +0.0004647706422, +0.0001511926606, -0.0004928440367, + -0.0009911926606, -0.0013102752294, -0.0013607339450, -0.0011926605505, + -0.0012710091743, -0.0014726605505, -0.0014222018349, -0.0013271559633, + -0.0013998165138, -0.0012319266055, -0.0009519266055, -0.0009688073394, + -0.0012095412844, -0.0015007339450, -0.0015902752294, -0.0017695412844, + -0.0020550458716, -0.0022062385321, -0.0020998165138, -0.0017190825688, + -0.0013383486239, -0.0009966972477, -0.0007335779817, -0.0009631192661, + -0.0016071559633, -0.0022005504587, -0.0023629357798, -0.0020102752294, + -0.0013886238532, -0.0004200000000, +0.0006159633028, +0.0013886238532, + +0.0017022018349, +0.0012262385321, +0.0000000000000, -0.0012095412844, + -0.0020381651376, -0.0024302752294, -0.0025253211009, -0.0025814678899, + -0.0028277064220, -0.0034100917431, -0.0040317431193, -0.0044067889908, + -0.0043508256881, -0.0037405504587, -0.0028726605505, -0.0021726605505, + -0.0018814678899, -0.0022902752294, -0.0029341284404, -0.0030069724771, + -0.0025198165138, -0.0016631192661, -0.0005095412844, +0.0005040366972, + +0.0011031192661, +0.0011647706422, +0.0006888073394, -0.0000671559633, + -0.0008511926606, -0.0014278899083, -0.0017974311927, -0.0020214678899, + -0.0021222018349, -0.0022845871560, -0.0024693577982, -0.0025422018349, + -0.0024974311927, -0.0024414678899, -0.0023181651376, -0.0019150458716, + -0.0010247706422, -0.0000783486239, +0.0007559633028, +0.0014222018349, + +0.0018143119266, +0.0020943119266, +0.0020998165138, +0.0014838532110, + +0.0005264220183, -0.0001735779817, -0.0005488073394, -0.0009126605505, + -0.0012823853211, -0.0014055045872, -0.0015790825688, -0.0018086238532, + -0.0017919266055, -0.0016238532110, -0.0015343119266, -0.0017357798165, + -0.0020886238532, -0.0023069724771, -0.0023966972477, -0.0024750458716, + -0.0024078899083, -0.0018086238532, -0.0005095412844, +0.0007390825688, + +0.0012990825688, +0.0013271559633, +0.0011871559633, +0.0007278899083, + +0.0000447706422, -0.0004590825688, -0.0006495412844, -0.0007447706422, + -0.0010862385321, -0.0016350458716, -0.0021445871560, -0.0025310091743, + -0.0024581651376, -0.0017245871560, -0.0004535779817, +0.0006831192661, + +0.0010359633028, +0.0007111926606, +0.0001511926606, -0.0005600000000, + -0.0012374311927, -0.0014278899083, -0.0011143119266, -0.0005935779817, + -0.0001847706422, -0.0000111926606, +0.0002855045872, +0.0008231192661, + +0.0013886238532, +0.0018422018349, +0.0021838532110, +0.0021893577982, + +0.0020045871560, +0.0016126605505, +0.0012262385321, +0.0010414678899, + +0.0008064220183, +0.0004200000000, +0.0003640366972, +0.0006047706422, + +0.0008176146789, +0.0008064220183, +0.0005207339450, +0.0005431192661, + +0.0011759633028, +0.0016574311927, +0.0013943119266, +0.0008566972477, + +0.0004535779817, +0.0001176146789, -0.0000056880734, +0.0001680733945, + +0.0004759633028, +0.0009576146789, +0.0013550458716, +0.0011031192661, + +0.0007111926606, +0.0004983486239, +0.0002464220183, +0.0001400000000, + +0.0004255045872, +0.0007055045872, +0.0008959633028, +0.0007055045872, + +0.0002688073394, -0.0000895412844, -0.0008847706422, -0.0017583486239, + -0.0014447706422, -0.0006943119266, -0.0002743119266, +0.0002800000000, + +0.0005376146789, +0.0004816513761, +0.0004871559633, +0.0002576146789, + +0.0001064220183, +0.0003135779817, +0.0004423853211, +0.0006102752294, + +0.0009407339450, +0.0014166972477, +0.0020269724771, +0.0022622018349, + +0.0022455045872, +0.0022229357798, +0.0019038532110, +0.0012878899083, + +0.0004816513761, -0.0002407339450, -0.0006383486239, -0.0010359633028, + -0.0012598165138, -0.0008623853211, -0.0000280733945, +0.0008847706422, + +0.0015286238532, +0.0016407339450, +0.0017583486239, +0.0020102752294, + +0.0022229357798, +0.0024581651376, +0.0025814678899, +0.0025926605505, + +0.0024862385321, +0.0021502752294, +0.0017862385321, +0.0016126605505, + +0.0013998165138, +0.0012543119266, +0.0012543119266, +0.0011423853211, + +0.0008847706422, +0.0004590825688, +0.0000000000000, -0.0001959633028, + -0.0000840366972, +0.0000335779817, +0.0003471559633, +0.0009014678899, + +0.0015174311927, +0.0019543119266, +0.0020774311927, +0.0019766972477, + +0.0017638532110, +0.0013047706422, +0.0007950458716, +0.0004143119266, + -0.0000111926606, -0.0004200000000, -0.0004816513761, -0.0003528440367, + -0.0002966972477, -0.0004759633028, -0.0008455045872, -0.0010695412844, + -0.0009350458716, -0.0005095412844, +0.0000280733945, +0.0005823853211, + +0.0011311926606, +0.0014838532110, +0.0014447706422, +0.0011647706422, + +0.0007111926606, +0.0003416513761, +0.0002016513761, +0.0001735779817, + +0.0003640366972, +0.0008064220183, +0.0011086238532, +0.0012935779817, + +0.0013495412844, +0.0010974311927, +0.0007111926606, +0.0004871559633, + +0.0003135779817, +0.0002911926606, +0.0003416513761, +0.0002352293578, + +0.0000783486239, +0.0001288073394, +0.0004478899083, +0.0008678899083, + +0.0011926605505, +0.0015007339450, +0.0014333944954, +0.0008902752294, + +0.0000559633028, -0.0008064220183, -0.0014838532110, -0.0016407339450, + -0.0014559633028, -0.0009462385321, -0.0002295412844, +0.0005040366972, + +0.0011143119266, +0.0014110091743, +0.0012935779817, +0.0010414678899, + +0.0006664220183, +0.0002911926606, +0.0000335779817, -0.0000280733945, + +0.0001511926606, +0.0005431192661, +0.0008400000000, +0.0009743119266, + +0.0009462385321, +0.0007223853211, +0.0000504587156, -0.0007783486239, + -0.0014166972477, -0.0017695412844, -0.0017414678899, -0.0013271559633, + -0.0009576146789, -0.0007335779817, -0.0006552293578, -0.0007223853211, + -0.0007614678899, -0.0005095412844, -0.0000616513761, +0.0004759633028, + +0.0009014678899, +0.0010078899083, +0.0009631192661, +0.0008231192661, + +0.0004759633028, +0.0000616513761, -0.0001288073394, -0.0001007339450, + -0.0001288073394, -0.0003640366972, -0.0008959633028, -0.0013495412844, + -0.0015343119266, -0.0013719266055, -0.0009743119266, -0.0004816513761, + -0.0001007339450, +0.0000447706422, -0.0001904587156, -0.0005600000000, + -0.0006495412844, -0.0003078899083, +0.0001735779817, +0.0007502752294, + +0.0012095412844, +0.0013159633028, +0.0009183486239, +0.0003078899083, + -0.0000504587156, -0.0000168807339, -0.0000447706422, -0.0002911926606, + -0.0004535779817, -0.0004928440367, -0.0006214678899, -0.0007390825688, + -0.0007838532110, -0.0006664220183, -0.0004702752294, -0.0002352293578, + +0.0000111926606, +0.0002016513761, +0.0000895412844, -0.0001792660550, + -0.0005655045872, -0.0008847706422, -0.0009462385321, -0.0008623853211, + -0.0008007339450, -0.0005823853211, -0.0004143119266, -0.0003247706422, + -0.0002407339450, -0.0001231192661, +0.0000840366972, +0.0003078899083, + +0.0003192660550, +0.0002183486239, +0.0000447706422, -0.0001904587156, + -0.0004702752294, -0.0006943119266, -0.0009183486239, -0.0011255045872, + -0.0013774311927, -0.0017190825688, -0.0019766972477, -0.0019990825688, + -0.0017078899083, -0.0010807339450, -0.0003528440367, +0.0002295412844, + +0.0005264220183, +0.0004366972477, +0.0000783486239, -0.0003192660550, + -0.0006495412844, -0.0007950458716, -0.0007447706422, -0.0005431192661, + -0.0003528440367, -0.0003752293578, -0.0005319266055, -0.0007726605505, + -0.0012486238532, -0.0017245871560, -0.0018086238532, -0.0015231192661, + -0.0010919266055, -0.0006383486239, -0.0002855045872, -0.0000447706422, + +0.0000840366972, +0.0000168807339, -0.0001176146789, -0.0001623853211, + -0.0001566972477, -0.0001735779817, -0.0001343119266, -0.0002016513761, + -0.0003023853211, -0.0004535779817, -0.0006719266055, -0.0007559633028, + -0.0006495412844, -0.0004366972477, -0.0001959633028, -0.0001007339450, + -0.0001064220183, -0.0001959633028, -0.0004647706422, -0.0009350458716, + -0.0013662385321, -0.0016462385321, -0.0017750458716, -0.0017078899083, + -0.0013326605505, -0.0007895412844, -0.0002295412844, +0.0001176146789, + +0.0003192660550, +0.0002352293578, +0.0000056880734, -0.0002128440367, + -0.0003359633028, -0.0004311926606, -0.0004928440367, -0.0006607339450, + -0.0009295412844, -0.0011423853211, -0.0011423853211, -0.0012486238532, + -0.0015286238532, -0.0018757798165, -0.0020214678899, -0.0020550458716, + -0.0019262385321, -0.0015959633028, -0.0010078899083, -0.0003023853211, + +0.0005152293578, +0.0012431192661, +0.0015845871560, +0.0014390825688, + +0.0009238532110, +0.0001623853211, -0.0004478899083, -0.0007950458716, + -0.0008455045872, -0.0008064220183, -0.0008176146789, -0.0009183486239, + -0.0012319266055, -0.0015959633028, -0.0015622018349, -0.0014166972477, + -0.0012710091743, -0.0010695412844, -0.0009126605505, -0.0009631192661, + -0.0008902752294, -0.0004928440367, +0.0001959633028, +0.0006495412844, + +0.0007726605505, +0.0006102752294, +0.0004143119266, +0.0001288073394, + -0.0000335779817, -0.0000952293578, +0.0000000000000, +0.0002911926606, + +0.0006776146789, +0.0006552293578, +0.0001400000000, -0.0007614678899, + -0.0016910091743, -0.0022678899083, -0.0024750458716, -0.0024805504587, + -0.0022678899083, -0.0020269724771, -0.0016574311927, -0.0011143119266, + -0.0005207339450, +0.0002576146789, +0.0013326605505, +0.0021950458716, + +0.0025310091743, +0.0020662385321, +0.0007447706422, -0.0009238532110, + -0.0022957798165, -0.0029286238532, -0.0026262385321, -0.0015231192661, + +0.0000783486239, +0.0016407339450, +0.0024750458716, +0.0022622018349, + +0.0013326605505, +0.0002352293578, -0.0005376146789, -0.0010247706422, + -0.0012823853211, -0.0012766972477, -0.0011366972477, -0.0009743119266, + -0.0006888073394, -0.0002464220183, +0.0001847706422, +0.0006719266055, + +0.0011031192661, +0.0013214678899, +0.0012766972477, +0.0010471559633, + +0.0007614678899, +0.0005152293578, +0.0003078899083, +0.0002352293578, + +0.0002855045872, +0.0004031192661, +0.0006271559633, +0.0008511926606, + +0.0008288073394, +0.0005040366972, +0.0000056880734, -0.0005040366972, + -0.0009295412844, -0.0010526605505, -0.0008735779817, -0.0004759633028, + +0.0000111926606, +0.0005655045872, +0.0008847706422, +0.0008902752294, + +0.0006383486239, +0.0002071559633, -0.0001176146789, -0.0001735779817, + -0.0001511926606, -0.0000168807339, +0.0002855045872, +0.0005431192661, + +0.0005431192661, +0.0002855045872, -0.0001792660550, -0.0005655045872, + -0.0009519266055, -0.0013438532110, -0.0014559633028, -0.0010919266055, + -0.0005823853211, -0.0000671559633, +0.0004088073394, +0.0009014678899, + +0.0013214678899, +0.0017638532110, +0.0019319266055, +0.0017862385321, + +0.0014278899083, +0.0009350458716, +0.0001904587156, -0.0005543119266, + -0.0010359633028, -0.0009462385321, -0.0005990825688, -0.0001959633028, + +0.0001119266055, +0.0004200000000, +0.0006552293578, +0.0009350458716, + +0.0011871559633, +0.0014895412844, +0.0016295412844, +0.0013550458716, + +0.0006495412844, -0.0000728440367, -0.0006214678899, -0.0007390825688, + -0.0003919266055, +0.0002911926606, +0.0010302752294, +0.0017078899083, + +0.0020045871560, +0.0018702752294, +0.0014950458716, +0.0010919266055, + +0.0005264220183, -0.0000895412844, -0.0007502752294, -0.0012431192661, + -0.0012655045872, -0.0007559633028, +0.0000000000000, +0.0009743119266, + +0.0018702752294, +0.0024526605505, +0.0026093577982, +0.0021950458716, + +0.0012655045872, +0.0002966972477, -0.0005152293578, -0.0009855045872, + -0.0009462385321, -0.0005711926606, -0.0000783486239, +0.0004366972477, + +0.0007950458716, +0.0011311926606, +0.0015845871560, +0.0019319266055, + +0.0019262385321, +0.0015902752294, +0.0009462385321, +0.0001400000000, + -0.0006495412844, -0.0010862385321, -0.0009014678899, -0.0002407339450, + +0.0004702752294, +0.0010190825688, +0.0012543119266, +0.0011926605505, + +0.0008735779817, +0.0004143119266, +0.0000000000000, -0.0003023853211, + -0.0004200000000, -0.0001623853211, +0.0002576146789, +0.0005600000000, + +0.0006607339450, +0.0004983486239, +0.0001735779817, +0.0000504587156, + +0.0002128440367, +0.0004702752294, +0.0007166972477, +0.0008735779817, + +0.0009183486239, +0.0007559633028, +0.0003864220183, +0.0000447706422, + -0.0001735779817, -0.0004983486239, -0.0006664220183, -0.0005823853211, + -0.0002128440367, +0.0002911926606, +0.0008343119266, +0.0013438532110, + +0.0017357798165, +0.0016966972477, +0.0012710091743, +0.0005543119266, + -0.0001847706422, -0.0007950458716, -0.0010695412844, -0.0010583486239, + -0.0007335779817, -0.0002240366972, +0.0002295412844, +0.0004647706422, + +0.0006214678899, +0.0006943119266, +0.0006607339450, +0.0004983486239, + +0.0003471559633, +0.0001288073394, -0.0001007339450, -0.0003023853211, + -0.0002519266055, -0.0001343119266, -0.0000280733945, +0.0000447706422, + +0.0001959633028, +0.0003359633028, +0.0004590825688, +0.0002855045872, + +0.0000000000000, -0.0001792660550, -0.0002576146789, -0.0002800000000, + -0.0002407339450, -0.0002183486239, -0.0001007339450, +0.0000280733945, + +0.0002016513761, +0.0002743119266, +0.0002295412844, +0.0001623853211, + +0.0001288073394, +0.0000447706422, -0.0000335779817, -0.0001847706422, + -0.0003359633028, -0.0002576146789, +0.0000000000000, +0.0001735779817, + +0.0002240366972, +0.0001792660550, +0.0000559633028, -0.0001511926606, + -0.0004088073394, -0.0005543119266, -0.0003976146789, -0.0000952293578, + +0.0001400000000, +0.0001511926606, +0.0000671559633, -0.0000056880734, + -0.0001119266055, -0.0002352293578, -0.0002688073394, -0.0002464220183, + -0.0001792660550, -0.0000559633028, +0.0000280733945, +0.0000728440367, + +0.0002183486239, +0.0004928440367, +0.0006159633028, +0.0005823853211, + +0.0005990825688, +0.0006102752294, +0.0004143119266, +0.0002407339450, + +0.0002016513761, +0.0002071559633, +0.0002631192661, +0.0004088073394, + +0.0004478899083, +0.0002352293578, -0.0001231192661, -0.0004590825688, + -0.0007447706422, -0.0007335779817, -0.0002911926606, +0.0002240366972, + +0.0004816513761, +0.0005823853211, +0.0004423853211, -0.0000335779817, + -0.0005543119266, -0.0007111926606, -0.0006102752294, -0.0003583486239, + -0.0000335779817, +0.0001455045872, +0.0000783486239, -0.0000280733945, + -0.0002407339450, -0.0003807339450, -0.0002295412844, +0.0002855045872, + +0.0008623853211, +0.0012598165138, +0.0013383486239, +0.0011478899083, + +0.0007390825688, +0.0002016513761, -0.0002128440367, -0.0000952293578, + +0.0002743119266, +0.0006383486239, +0.0010526605505, +0.0012766972477, + +0.0010414678899, +0.0006552293578, +0.0003023853211, -0.0000392660550, + -0.0002743119266, -0.0001735779817, +0.0001176146789, +0.0003247706422, + +0.0004647706422, +0.0007223853211, +0.0007278899083, +0.0005040366972, + +0.0002240366972, +0.0001455045872, +0.0001959633028, +0.0001455045872, + +0.0002071559633, +0.0002855045872, -0.0001735779817, -0.0007223853211, + -0.0008176146789, -0.0007671559633, -0.0006888073394, -0.0004590825688, + -0.0003416513761, -0.0003976146789, -0.0003976146789, -0.0004590825688, + -0.0008007339450, -0.0012543119266, -0.0014166972477, -0.0013438532110, + -0.0013159633028, -0.0009911926606, -0.0002128440367, +0.0005040366972, + +0.0010359633028, +0.0013998165138, +0.0012655045872, +0.0006047706422, + -0.0001623853211, -0.0008064220183, -0.0011702752294, -0.0012598165138, + -0.0008847706422, -0.0000056880734, +0.0007166972477, +0.0008902752294, + +0.0006831192661, +0.0002407339450, -0.0001566972477, -0.0006159633028, + -0.0009966972477, -0.0011086238532, -0.0009966972477, -0.0008566972477, + -0.0004311926606, +0.0000000000000, +0.0002966972477, +0.0006102752294, + +0.0007000000000, +0.0004702752294, +0.0003528440367, +0.0002911926606, + +0.0001792660550, -0.0001064220183, -0.0007671559633, -0.0013998165138, + -0.0016798165138, -0.0016519266055, -0.0011926605505, -0.0003807339450, + +0.0003304587156, +0.0007111926606, +0.0007278899083, +0.0003359633028, + -0.0002519266055, -0.0008959633028, -0.0012710091743, -0.0011702752294, + -0.0006888073394, -0.0002688073394, +0.0000447706422, +0.0002407339450, + +0.0002407339450, +0.0000447706422, -0.0000504587156, +0.0000280733945, + +0.0002631192661, +0.0004088073394, +0.0005990825688, +0.0007055045872, + +0.0005935779817, +0.0004088073394, +0.0002183486239, +0.0000000000000, + -0.0003640366972, -0.0007726605505, -0.0009295412844, -0.0008176146789, + -0.0006271559633, -0.0004816513761, -0.0003416513761, -0.0002352293578, + -0.0001847706422, -0.0002183486239, -0.0001680733945, -0.0000111926606, + +0.0000895412844, +0.0000952293578, +0.0000559633028, -0.0000447706422, + -0.0001400000000, -0.0000223853211, +0.0003023853211, +0.0006719266055, + +0.0009911926606, +0.0013102752294, +0.0015062385321, +0.0015062385321, + +0.0013047706422, +0.0009911926606, +0.0008678899083, +0.0008119266055, + +0.0004647706422, +0.0001119266055, -0.0001288073394, -0.0003864220183, + -0.0005543119266, -0.0004647706422, -0.0000840366972, +0.0004478899083, + +0.0008623853211, +0.0010414678899, +0.0008176146789, +0.0003192660550, + -0.0000840366972, -0.0001735779817, +0.0000000000000, +0.0003192660550, + +0.0005990825688, +0.0008176146789, +0.0009743119266, +0.0010247706422, + +0.0009519266055, +0.0007783486239, +0.0004200000000, -0.0000728440367, + -0.0005711926606, -0.0009183486239, -0.0011535779817, -0.0012319266055, + -0.0011478899083, -0.0008343119266, -0.0003807339450, +0.0000335779817, + +0.0003583486239, +0.0006943119266, +0.0007447706422, +0.0004759633028, + +0.0000671559633, -0.0002519266055, -0.0005319266055, -0.0006831192661, + -0.0006495412844, -0.0003752293578, -0.0000335779817, +0.0003304587156, + +0.0005878899083, +0.0006271559633, +0.0005040366972, +0.0003192660550, + +0.0000504587156, -0.0001288073394, -0.0002631192661, -0.0003864220183, + -0.0004590825688, -0.0004478899083, -0.0003471559633, -0.0001680733945, + +0.0000000000000, +0.0001623853211, +0.0002464220183, +0.0001792660550, + +0.0001288073394, +0.0001680733945, +0.0002688073394, +0.0004816513761, + +0.0007166972477, +0.0007000000000, +0.0006159633028, +0.0007111926606, + +0.0007783486239, +0.0007838532110, +0.0008511926606, +0.0006607339450, + +0.0001007339450, -0.0004366972477, -0.0008007339450, -0.0009743119266, + -0.0009071559633, -0.0005711926606, -0.0000671559633, +0.0002800000000, + +0.0004816513761, +0.0006440366972, +0.0007166972477, +0.0005878899083, + +0.0003304587156, +0.0000168807339, -0.0001623853211, -0.0003528440367, + -0.0005319266055, -0.0005655045872, -0.0004478899083, -0.0003304587156, + -0.0001455045872, -0.0000335779817, -0.0000223853211, -0.0001064220183, + -0.0002295412844, -0.0003359633028, -0.0003192660550, -0.0002183486239, + -0.0000559633028, -0.0000840366972, -0.0003471559633, -0.0006326605505, + -0.0006440366972, -0.0003807339450, -0.0000280733945, +0.0001511926606, + +0.0001680733945, +0.0000728440367, +0.0000000000000, -0.0000223853211, + +0.0000895412844, +0.0003583486239, +0.0006719266055, +0.0007223853211, + +0.0004983486239, +0.0001735779817, -0.0001119266055, -0.0003807339450, + -0.0003416513761, +0.0000783486239, +0.0005990825688, +0.0008511926606, + +0.0008176146789, +0.0005935779817, +0.0004088073394, +0.0003304587156, + +0.0003192660550, +0.0003695412844, +0.0004200000000, +0.0002183486239, + -0.0002071559633, -0.0006383486239, -0.0009576146789, -0.0011366972477, + -0.0010359633028, -0.0006776146789, -0.0002183486239, +0.0002688073394, + +0.0007000000000, +0.0009183486239, +0.0009238532110, +0.0008511926606, + +0.0007726605505, +0.0006440366972, +0.0003192660550, -0.0000728440367, + -0.0003359633028, -0.0003695412844, -0.0003023853211, -0.0001680733945, + +0.0000559633028, +0.0004311926606, +0.0006831192661, +0.0006719266055, + +0.0005040366972, +0.0003416513761, +0.0002183486239, +0.0001566972477, + +0.0000616513761, +0.0000000000000, -0.0000952293578, -0.0002464220183, + -0.0003135779817, -0.0001007339450, +0.0001847706422, +0.0005319266055, + +0.0008735779817, +0.0011255045872, +0.0011255045872, +0.0008623853211, + +0.0003247706422, -0.0002240366972, -0.0007726605505, -0.0011031192661, + -0.0010919266055, -0.0007838532110, -0.0003135779817, +0.0001288073394, + +0.0003583486239, +0.0004816513761, +0.0004031192661, +0.0001343119266, + -0.0001119266055, -0.0001680733945, -0.0001511926606, -0.0000783486239, + -0.0001119266055, -0.0002464220183, -0.0003135779817, -0.0002576146789, + -0.0002071559633, -0.0000504587156, +0.0001792660550, +0.0005095412844, + +0.0007335779817, +0.0006664220183, +0.0003192660550, -0.0001007339450, + -0.0004983486239, -0.0007950458716, -0.0009183486239, -0.0008566972477, + -0.0008231192661, -0.0008678899083, -0.0008455045872, -0.0007111926606, + -0.0005264220183, -0.0002071559633, +0.0001064220183, +0.0002352293578, + +0.0001847706422, +0.0000559633028, -0.0001904587156, -0.0005264220183, + -0.0007000000000, -0.0005207339450, -0.0001680733945, +0.0000111926606, + +0.0000168807339, -0.0000392660550, -0.0000671559633, -0.0000952293578, + -0.0000895412844, +0.0000280733945, +0.0002519266055, +0.0002855045872, + +0.0000559633028, -0.0003192660550, -0.0006440366972, -0.0007335779817, + -0.0006383486239, -0.0004983486239, -0.0002407339450, +0.0000392660550, + +0.0001400000000, +0.0000111926606, -0.0001119266055, -0.0002128440367, + -0.0001904587156, -0.0001680733945, -0.0001680733945, -0.0001959633028, + -0.0002576146789, -0.0004366972477, -0.0005655045872, -0.0005878899083, + -0.0004702752294, -0.0002800000000, -0.0001176146789, -0.0000952293578, + -0.0001119266055, -0.0002631192661, -0.0005152293578, -0.0008231192661, + -0.0010807339450, -0.0012543119266, -0.0013102752294, -0.0010807339450, + -0.0004759633028, +0.0001847706422, +0.0007783486239, +0.0010695412844, + +0.0010414678899, +0.0007559633028, +0.0002464220183, -0.0002352293578, + -0.0004366972477, -0.0003583486239, -0.0000952293578, +0.0000952293578, + +0.0001455045872, +0.0001288073394, +0.0000000000000, -0.0002800000000, + -0.0004255045872, -0.0003135779817, -0.0002128440367, -0.0002911926606, + -0.0005488073394, -0.0008119266055, -0.0007895412844, -0.0005264220183, + -0.0002631192661, +0.0000000000000, +0.0003135779817, +0.0005207339450, + +0.0004702752294, +0.0002743119266, +0.0000504587156, -0.0001566972477, + -0.0002519266055, -0.0001231192661, +0.0000335779817, +0.0000728440367, + -0.0000223853211, -0.0002519266055, -0.0004535779817, -0.0004647706422, + -0.0003807339450, -0.0001064220183, +0.0003359633028, +0.0007223853211, + +0.0008343119266, +0.0007166972477, +0.0004816513761, +0.0002743119266, + +0.0001400000000, +0.0000783486239, +0.0000728440367, +0.0001735779817, + +0.0002743119266, +0.0002576146789, +0.0001288073394, +0.0000000000000, + -0.0000616513761, -0.0000504587156, +0.0000335779817, +0.0002071559633, + +0.0003416513761, +0.0003919266055, +0.0002631192661, +0.0000111926606, + -0.0001735779817, -0.0003135779817, -0.0003752293578, -0.0002352293578, + -0.0000223853211, +0.0001119266055, +0.0001959633028, +0.0001566972477, + +0.0000223853211, -0.0000392660550, +0.0000000000000, +0.0001288073394, + +0.0003078899083, +0.0004647706422, +0.0005543119266, +0.0004590825688, + +0.0002352293578, +0.0000559633028, +0.0000000000000, -0.0000056880734, + -0.0000559633028, -0.0001176146789, -0.0001566972477, -0.0002855045872, + -0.0003976146789, -0.0003416513761, -0.0001511926606, +0.0000280733945, + +0.0002016513761, +0.0003247706422, +0.0004366972477, +0.0004759633028, + +0.0003919266055, +0.0002128440367, +0.0000783486239, +0.0000504587156, + +0.0001176146789, +0.0001959633028, +0.0002688073394, +0.0002800000000, + +0.0002631192661, +0.0001792660550, -0.0000280733945, -0.0003078899083, + -0.0004478899083, -0.0004816513761, -0.0004200000000, -0.0002352293578, + -0.0000168807339, +0.0001343119266, +0.0002576146789, +0.0003416513761, + +0.0003192660550, +0.0002128440367, +0.0000559633028, -0.0001455045872, + -0.0003023853211, -0.0003023853211, -0.0002352293578, -0.0001511926606, + -0.0000895412844, -0.0000168807339, +0.0000335779817, -0.0000447706422, + -0.0002743119266, -0.0004088073394, -0.0004200000000, -0.0004200000000, + -0.0004759633028, -0.0004871559633, -0.0004311926606, -0.0003078899083, + -0.0001904587156, -0.0000335779817, +0.0001566972477, +0.0003976146789, + +0.0005711926606, +0.0005655045872, +0.0002855045872, -0.0000392660550, + -0.0002464220183, -0.0002800000000, -0.0001792660550, -0.0000056880734, + +0.0000783486239, +0.0001680733945, +0.0003023853211, +0.0004031192661, + +0.0002911926606, +0.0000504587156, -0.0002855045872, -0.0006552293578, + -0.0008400000000, -0.0007278899083, -0.0004255045872, -0.0000447706422, + +0.0002295412844, +0.0003583486239, +0.0003247706422, +0.0002240366972, + +0.0000504587156, -0.0001904587156, -0.0004983486239, -0.0007559633028, + -0.0009800000000, -0.0010471559633, -0.0008511926606, -0.0004759633028, + -0.0001231192661, +0.0001455045872, +0.0002631192661, +0.0002128440367, + +0.0001792660550, +0.0001959633028, +0.0001680733945, +0.0001176146789, + +0.0002071559633, +0.0004535779817, +0.0007000000000, +0.0008119266055, + +0.0008007339450, +0.0006664220183, +0.0004702752294, +0.0001904587156, + -0.0000895412844, -0.0003247706422, -0.0003471559633, -0.0002183486239, + -0.0000056880734, +0.0002071559633, +0.0004816513761, +0.0006719266055, + +0.0007335779817, +0.0006271559633, +0.0004255045872, +0.0001566972477, + -0.0000952293578, -0.0002295412844, -0.0001511926606, -0.0000447706422, + +0.0000000000000, +0.0000504587156, +0.0002464220183, +0.0004088073394, + +0.0004590825688, +0.0003528440367, +0.0001455045872, -0.0001400000000, + -0.0004200000000, -0.0006102752294, -0.0005823853211, -0.0003864220183, + -0.0001119266055, +0.0001231192661, +0.0003078899083, +0.0002855045872, + +0.0001231192661, -0.0000616513761, -0.0002071559633, -0.0002855045872, + -0.0002071559633, -0.0000559633028, +0.0001176146789, +0.0002519266055, + +0.0002911926606, +0.0002352293578, +0.0001792660550, +0.0001623853211, + +0.0001735779817, +0.0001119266055, -0.0000335779817, -0.0002016513761, + -0.0002800000000, -0.0002407339450, -0.0001176146789, +0.0000000000000, + +0.0001231192661, +0.0001735779817, +0.0001064220183, +0.0000616513761, + +0.0001231192661, +0.0001735779817, +0.0001231192661, +0.0000840366972, + +0.0001735779817, +0.0002464220183, +0.0001959633028, +0.0001680733945, + +0.0002183486239, +0.0002911926606, +0.0002519266055, +0.0001680733945, + +0.0000504587156, -0.0000280733945, -0.0001566972477, -0.0002688073394, + -0.0003192660550, -0.0001231192661, +0.0001343119266, +0.0002966972477, + +0.0003078899083, +0.0003752293578, +0.0004759633028, +0.0005600000000, + +0.0004590825688, +0.0002464220183, -0.0000056880734, -0.0002240366972, + -0.0004478899083, -0.0005488073394, -0.0005431192661, -0.0004031192661, + -0.0002631192661, -0.0001176146789, -0.0000280733945, -0.0000392660550, + -0.0001959633028, -0.0002855045872, -0.0002743119266, -0.0001904587156, + -0.0001343119266, -0.0000616513761, +0.0000447706422, +0.0002016513761, + +0.0002240366972, +0.0001288073394, -0.0000223853211, -0.0002071559633, + -0.0003919266055, -0.0005095412844, -0.0005655045872, -0.0005264220183, + -0.0004143119266, -0.0002688073394, -0.0001064220183, +0.0000000000000, + +0.0000168807339, -0.0000223853211, -0.0000728440367, -0.0000783486239, + -0.0000392660550, -0.0000223853211, +0.0000840366972, +0.0002631192661, + +0.0003807339450, +0.0003583486239, +0.0002352293578, +0.0000223853211, + -0.0001680733945, -0.0004031192661, -0.0005711926606, -0.0005600000000, + -0.0003135779817, +0.0000000000000, +0.0003528440367, +0.0005878899083, + +0.0006214678899, +0.0004590825688, +0.0001959633028, -0.0001400000000, + -0.0003583486239, -0.0004200000000, -0.0002688073394, -0.0001288073394, + -0.0000335779817, +0.0000168807339, +0.0000504587156, -0.0000559633028, + -0.0001288073394, -0.0001288073394, -0.0000223853211, +0.0000559633028, + +0.0001623853211, +0.0002352293578, +0.0003247706422, +0.0002855045872, + +0.0001623853211, +0.0000168807339, -0.0000447706422, -0.0000616513761, + -0.0000168807339, -0.0000168807339, -0.0000559633028, -0.0001735779817, + -0.0003192660550, -0.0004255045872, -0.0003864220183, -0.0002128440367, + +0.0000111926606, +0.0001511926606, +0.0001566972477, +0.0000728440367, + -0.0000392660550, -0.0001119266055, -0.0000280733945, +0.0001343119266, + +0.0003416513761, +0.0005207339450, +0.0005376146789, +0.0004816513761, + +0.0003919266055, +0.0001847706422, -0.0001400000000, -0.0004031192661, + -0.0005319266055, -0.0004871559633, -0.0003807339450, -0.0002519266055, + -0.0001400000000, +0.0000111926606, +0.0001176146789, +0.0001511926606, + +0.0001343119266, +0.0001007339450, -0.0000559633028, -0.0002855045872, + -0.0005319266055, -0.0006607339450, -0.0006943119266, -0.0006271559633, + -0.0005264220183, -0.0003304587156, -0.0001566972477, -0.0000056880734, + +0.0000000000000, -0.0001119266055, -0.0003247706422, -0.0003752293578, + -0.0003135779817, -0.0001400000000, +0.0000168807339, +0.0001400000000, + +0.0000504587156, -0.0001623853211, -0.0004647706422, -0.0006719266055, + -0.0007614678899, -0.0007000000000, -0.0005264220183, -0.0002855045872, + -0.0001288073394, -0.0000783486239, -0.0001288073394, -0.0002295412844, + -0.0002407339450, -0.0001288073394, +0.0000000000000, +0.0001064220183, + +0.0000895412844, +0.0000000000000, -0.0000392660550, -0.0000111926606, + +0.0000168807339, +0.0000559633028, +0.0000840366972, +0.0000000000000, + -0.0001680733945, -0.0004255045872, -0.0006383486239, -0.0007447706422, + -0.0006607339450, -0.0004478899083, -0.0001792660550, -0.0000447706422, + -0.0000559633028, -0.0001735779817, -0.0002519266055, -0.0002519266055, + -0.0001511926606, -0.0000447706422, +0.0000952293578, +0.0001959633028, + +0.0003078899083, +0.0003416513761, +0.0002966972477, +0.0001288073394, + -0.0000223853211, -0.0001455045872, -0.0001623853211, -0.0001847706422, + -0.0001904587156, -0.0002240366972, -0.0002631192661, -0.0002631192661, + -0.0001511926606, -0.0000616513761, +0.0000447706422, +0.0001511926606, + +0.0002183486239, +0.0002631192661, +0.0003471559633, +0.0004366972477, + +0.0005152293578, +0.0005488073394, +0.0005376146789, +0.0004423853211, + +0.0003528440367, +0.0003078899083, +0.0002240366972, +0.0001566972477, + +0.0001455045872, +0.0000895412844, +0.0000000000000, -0.0000447706422, + -0.0000840366972, -0.0000952293578, -0.0000335779817, +0.0001343119266, + +0.0003640366972, +0.0005152293578, +0.0004928440367, +0.0003976146789, + +0.0002407339450, +0.0000728440367, -0.0000728440367, -0.0001735779817, + -0.0002240366972, -0.0001231192661, +0.0000056880734, +0.0001343119266, + +0.0002016513761, +0.0003192660550, +0.0003807339450, +0.0004366972477, + +0.0005152293578, +0.0005878899083, +0.0005376146789, +0.0004983486239, + +0.0004200000000, +0.0003192660550, +0.0002183486239, +0.0002295412844, + +0.0003247706422, +0.0005152293578, +0.0006831192661, +0.0008119266055, + +0.0008176146789, +0.0007111926606, +0.0005152293578, +0.0003247706422, + +0.0001623853211, +0.0000840366972, +0.0001119266055, +0.0002240366972, + +0.0003192660550, +0.0003864220183, +0.0003807339450, +0.0003304587156, + +0.0003135779817, +0.0003471559633, +0.0003695412844, +0.0004088073394, + +0.0004478899083, +0.0003864220183, +0.0002071559633, -0.0000056880734, + -0.0002016513761, -0.0003192660550, -0.0003135779817, -0.0001959633028, + +0.0000223853211, +0.0001735779817, +0.0002128440367, +0.0002183486239, + +0.0002240366972, +0.0002128440367, +0.0002743119266, +0.0002855045872, + +0.0002966972477, +0.0003304587156, +0.0004478899083, +0.0005207339450, + +0.0005655045872, +0.0005376146789, +0.0006047706422, +0.0007614678899, + +0.0009014678899, +0.0008343119266, +0.0006326605505, +0.0003359633028, + +0.0000000000000, -0.0002911926606, -0.0003864220183, -0.0002911926606, + -0.0000111926606, +0.0003023853211, +0.0005711926606, +0.0006888073394, + +0.0006719266055, +0.0005711926606, +0.0005264220183, +0.0004871559633, + +0.0004478899083, +0.0003752293578, +0.0002800000000, +0.0001623853211, + +0.0000895412844, +0.0000952293578, +0.0002407339450, +0.0004759633028, + +0.0006214678899, +0.0006440366972, +0.0005766972477, +0.0004535779817, + +0.0002576146789, +0.0000111926606, -0.0001792660550, -0.0002911926606, + -0.0003864220183, -0.0004311926606, -0.0003864220183, -0.0001904587156, + +0.0000783486239, +0.0003528440367, +0.0005376146789, +0.0006495412844, + +0.0005431192661, +0.0002631192661, -0.0000559633028, -0.0002688073394, + -0.0003471559633, -0.0001566972477, +0.0001847706422, +0.0005600000000, + +0.0007838532110, +0.0007895412844, +0.0005600000000, +0.0003078899083, + +0.0000559633028, -0.0001400000000, -0.0003864220183, -0.0006383486239, + -0.0007838532110, -0.0007335779817, -0.0006047706422, -0.0003752293578, + -0.0000728440367, +0.0003135779817, +0.0007223853211, +0.0009295412844, + +0.0008511926606, +0.0006326605505, +0.0002743119266, -0.0001511926606, + -0.0005600000000, -0.0008678899083, -0.0009519266055, -0.0007278899083, + -0.0003695412844, -0.0000840366972, +0.0000504587156, +0.0001119266055, + +0.0000952293578, +0.0000783486239, +0.0001119266055, +0.0001064220183, + +0.0001176146789, +0.0002016513761, +0.0003078899083, +0.0003752293578, + +0.0004816513761, +0.0005711926606, +0.0006214678899, +0.0004928440367, + +0.0002183486239, -0.0001455045872, -0.0005878899083, -0.0011031192661, + -0.0014783486239, -0.0015510091743, -0.0011871559633, -0.0006047706422, + -0.0001400000000, +0.0000895412844, +0.0003247706422, +0.0005095412844, + +0.0005600000000, +0.0004478899083, +0.0003023853211, +0.0001735779817, + +0.0000895412844, -0.0000056880734, -0.0001566972477, -0.0003583486239, + -0.0004647706422, -0.0004311926606, -0.0001735779817, +0.0001455045872, + +0.0003192660550, +0.0002240366972, -0.0000280733945, -0.0004031192661, + -0.0007055045872, -0.0007223853211, -0.0004366972477, +0.0000056880734, + +0.0004031192661, +0.0004647706422, +0.0000783486239, -0.0003976146789, + -0.0006943119266, -0.0007223853211, -0.0006159633028, -0.0004871559633, + -0.0003752293578, -0.0002743119266, -0.0003304587156, -0.0004816513761, + -0.0004647706422, -0.0002631192661, -0.0000952293578, -0.0001064220183, + -0.0002855045872, -0.0004535779817, -0.0004928440367, -0.0003528440367, + -0.0001847706422, -0.0001904587156, -0.0003752293578, -0.0005878899083, + -0.0008288073394, -0.0010862385321, -0.0012543119266, -0.0012095412844, + -0.0009519266055, -0.0005152293578, -0.0000504587156, +0.0002855045872, + +0.0004590825688, +0.0004928440367, +0.0004702752294, +0.0004366972477, + +0.0003304587156, +0.0001455045872, -0.0000280733945, -0.0001847706422, + -0.0003359633028, -0.0004983486239, -0.0005823853211, -0.0004816513761, + -0.0001680733945, +0.0000728440367, +0.0001288073394, +0.0000000000000, + -0.0001511926606, -0.0002743119266, -0.0002631192661, -0.0001007339450, + +0.0001904587156, +0.0004535779817, +0.0004759633028, +0.0002407339450, + -0.0001176146789, -0.0004535779817, -0.0005766972477, -0.0005543119266, + -0.0003976146789, -0.0001623853211, +0.0000616513761, +0.0002240366972, + +0.0002240366972, +0.0000392660550, -0.0000559633028, +0.0000000000000, + +0.0000671559633, +0.0001007339450, +0.0001735779817, +0.0002407339450, + +0.0001847706422, +0.0000056880734, -0.0002240366972, -0.0004423853211, + -0.0005319266055, -0.0004871559633, -0.0003864220183, -0.0001847706422, + +0.0000616513761, +0.0002352293578, +0.0002295412844, +0.0001400000000, + +0.0000335779817, +0.0000000000000, +0.0000392660550, +0.0001959633028, + +0.0003640366972, +0.0004423853211, +0.0003304587156, +0.0001511926606, + -0.0000671559633, -0.0002911926606, -0.0004816513761, -0.0005766972477, + -0.0005935779817, -0.0004816513761, -0.0002966972477, -0.0000280733945, + +0.0001231192661, +0.0001735779817, +0.0001288073394, +0.0000000000000, + -0.0002743119266, -0.0004143119266, -0.0003247706422, -0.0001343119266, + +0.0000280733945, +0.0002295412844, +0.0003304587156, +0.0003023853211, + +0.0001511926606, -0.0000056880734, -0.0000671559633, +0.0000335779817, + +0.0001959633028, +0.0002966972477, +0.0003023853211, +0.0002016513761, + +0.0000671559633, -0.0000223853211, +0.0000000000000, +0.0001680733945, + +0.0004200000000, +0.0006047706422, +0.0006607339450, +0.0005431192661, + +0.0002911926606, -0.0000111926606, -0.0002240366972, -0.0003135779817, + -0.0002183486239, +0.0000000000000, +0.0002743119266, +0.0003919266055, + +0.0002911926606, +0.0000616513761, +0.0000000000000, +0.0000000000000, + +0.0001007339450, +0.0002183486239, +0.0003078899083, +0.0002743119266, + +0.0001511926606, -0.0000335779817, -0.0000728440367, +0.0000111926606, + +0.0001792660550, +0.0002352293578, +0.0002407339450, +0.0001847706422, + +0.0000783486239, -0.0000728440367, -0.0000783486239, +0.0000671559633, + +0.0003640366972, +0.0006831192661, +0.0009407339450, +0.0010135779817, + +0.0008790825688, +0.0006214678899, +0.0003864220183, +0.0001680733945, + +0.0000111926606, -0.0000280733945, -0.0000783486239, -0.0002128440367, + -0.0003807339450, -0.0004702752294, -0.0004871559633, -0.0004255045872, + -0.0002911926606, -0.0000783486239, +0.0001288073394, +0.0003752293578, + +0.0005040366972, +0.0005040366972, +0.0003192660550, +0.0000840366972, + -0.0001623853211, -0.0002743119266, -0.0002576146789, -0.0000335779817, + +0.0002183486239, +0.0004535779817, +0.0005207339450, +0.0005319266055, + +0.0004366972477, +0.0002855045872, +0.0000559633028, -0.0000559633028, + -0.0001064220183, -0.0000895412844, -0.0001119266055, -0.0000447706422, + +0.0000952293578, +0.0003135779817, +0.0003752293578, +0.0003023853211, + +0.0001231192661, -0.0000392660550, -0.0001680733945, -0.0001511926606, + -0.0000671559633, -0.0000056880734, -0.0000111926606, -0.0000504587156, + -0.0001400000000, -0.0002128440367, -0.0002071559633, -0.0001400000000, + -0.0000840366972, -0.0000559633028, -0.0000728440367, -0.0001792660550, + -0.0003416513761, -0.0005711926606, -0.0007502752294, -0.0008007339450, + -0.0006831192661, -0.0004983486239, -0.0002576146789, -0.0000895412844, + -0.0000056880734, -0.0000447706422, -0.0000952293578, -0.0001680733945, + -0.0001064220183, +0.0000223853211, +0.0002016513761, +0.0002966972477, + +0.0003976146789, +0.0004423853211, +0.0004928440367, +0.0004647706422, + +0.0004535779817, +0.0004200000000, +0.0003416513761, +0.0001288073394, + -0.0000504587156, -0.0002071559633, -0.0002855045872, -0.0003471559633, + -0.0002519266055, -0.0000671559633, +0.0001343119266, +0.0003023853211, + +0.0004088073394, +0.0003192660550, +0.0001343119266, -0.0000671559633, + -0.0002295412844, -0.0003023853211, -0.0002631192661, -0.0001566972477, + -0.0000223853211, +0.0000895412844, +0.0001400000000, +0.0001119266055, + +0.0000000000000, -0.0001511926606, -0.0003135779817, -0.0004031192661, + -0.0003807339450, -0.0002519266055, -0.0001288073394, +0.0000447706422, + +0.0002071559633, +0.0002407339450, +0.0000671559633, -0.0001231192661, + -0.0002631192661, -0.0002743119266, -0.0002743119266, -0.0002071559633, + -0.0001623853211, -0.0001904587156, -0.0003192660550, -0.0003976146789, + -0.0004535779817, -0.0003640366972, -0.0001566972477, +0.0001007339450, + +0.0002240366972, +0.0002071559633, +0.0000728440367, +0.0000000000000, + -0.0000223853211, +0.0000111926606, +0.0000840366972, +0.0002407339450, + +0.0003583486239, +0.0003640366972, +0.0002240366972, +0.0000895412844, + +0.0000280733945, +0.0000056880734, -0.0000392660550, -0.0001176146789, + -0.0001792660550, -0.0001959633028, -0.0001400000000, -0.0000392660550, + +0.0000280733945, +0.0000671559633, +0.0001343119266, +0.0002128440367, + +0.0003078899083, +0.0003583486239, +0.0003640366972, +0.0002407339450, + +0.0001343119266, +0.0000728440367, +0.0000392660550, -0.0000056880734, + -0.0000168807339, -0.0000447706422, -0.0000559633028, -0.0000728440367, + -0.0000392660550, +0.0000000000000, +0.0000840366972, +0.0001511926606, + +0.0002128440367, +0.0001904587156, +0.0001343119266, +0.0000000000000, + -0.0001792660550, -0.0003528440367, -0.0003976146789, -0.0003528440367, + -0.0002576146789, -0.0001735779817, -0.0001343119266, -0.0001400000000, + -0.0001288073394, -0.0000840366972, +0.0000111926606, +0.0001847706422, + +0.0003304587156, +0.0003416513761, +0.0002016513761, -0.0000056880734, + -0.0002016513761, -0.0003078899083, -0.0003416513761, -0.0002631192661, + -0.0001343119266, -0.0000447706422, -0.0001007339450, -0.0002519266055, + -0.0004478899083, -0.0005823853211, -0.0005935779817, -0.0004200000000, + -0.0001847706422, +0.0000504587156, +0.0002183486239, +0.0003416513761, + +0.0003471559633, +0.0002519266055, +0.0000783486239, -0.0000616513761, + -0.0002407339450, -0.0003583486239, -0.0003807339450, -0.0002743119266, + -0.0001176146789, +0.0000000000000, +0.0000223853211, +0.0000447706422, + +0.0000559633028, +0.0000392660550, +0.0000280733945, +0.0000056880734, + -0.0000447706422, -0.0001400000000, -0.0002631192661, -0.0004143119266, + -0.0005152293578, -0.0005319266055, -0.0004702752294, -0.0003864220183, + -0.0003304587156, -0.0002966972477, -0.0002295412844, -0.0001343119266, + +0.0000056880734, +0.0001455045872, +0.0001792660550, +0.0000223853211, + -0.0002128440367, -0.0004255045872, -0.0004647706422, -0.0003976146789, + -0.0001904587156, +0.0000952293578, +0.0004031192661, +0.0005376146789, + +0.0005264220183, +0.0003807339450, +0.0002071559633, +0.0000447706422, + -0.0000559633028, -0.0001176146789, -0.0000952293578, -0.0001064220183, + -0.0001400000000, -0.0001623853211, -0.0001566972477, -0.0000895412844, + +0.0000447706422, +0.0002016513761, +0.0003247706422, +0.0003528440367, + +0.0002519266055, +0.0000671559633, -0.0001064220183, -0.0001792660550, + -0.0000895412844, +0.0000671559633, +0.0001959633028, +0.0002800000000, + +0.0002855045872, +0.0002295412844, +0.0001176146789, +0.0000223853211, + +0.0000056880734, +0.0000952293578, +0.0001566972477, +0.0001511926606, + +0.0000111926606, -0.0001455045872, -0.0002631192661, -0.0002464220183, + -0.0001623853211, +0.0000223853211, +0.0002911926606, +0.0005878899083, + +0.0007783486239, +0.0008064220183, +0.0006047706422, +0.0002576146789, + -0.0000895412844, -0.0002966972477, -0.0003135779817, -0.0001511926606, + +0.0000280733945, +0.0001566972477, +0.0001959633028, +0.0001904587156, + +0.0001680733945, +0.0001847706422, +0.0002352293578, +0.0002519266055, + +0.0002071559633, +0.0001007339450, +0.0000000000000, -0.0000616513761, + -0.0000335779817, +0.0000335779817, +0.0001680733945, +0.0003023853211, + +0.0004031192661, +0.0004088073394, +0.0003192660550, +0.0001176146789, + -0.0000392660550, -0.0001400000000, -0.0001455045872, -0.0001119266055, + -0.0000616513761, -0.0000616513761, -0.0000616513761, -0.0000392660550, + +0.0000447706422, +0.0001904587156, +0.0003807339450, +0.0004647706422, + +0.0003752293578, +0.0001231192661, -0.0001176146789, -0.0002855045872, + -0.0003304587156, -0.0002800000000, -0.0001343119266, +0.0000056880734, + +0.0001007339450, +0.0001288073394, +0.0001400000000, +0.0001680733945, + +0.0002071559633, +0.0002519266055, +0.0002855045872, +0.0002966972477, + +0.0002464220183, +0.0001231192661, -0.0000559633028, -0.0001400000000, + -0.0000671559633, +0.0000504587156, +0.0001623853211, +0.0002576146789, + +0.0002576146789, +0.0001959633028, +0.0001288073394, +0.0001064220183, + +0.0001566972477, +0.0002688073394, +0.0003247706422, +0.0003078899083, + +0.0001904587156, +0.0000447706422, -0.0000728440367, -0.0000616513761, + +0.0000392660550, +0.0001847706422, +0.0002631192661, +0.0002855045872, + +0.0002016513761, +0.0000616513761, -0.0000392660550, -0.0000895412844, + -0.0000616513761, +0.0000223853211, +0.0000895412844, +0.0001176146789, + +0.0001343119266, +0.0001735779817, +0.0002071559633, +0.0002128440367, + +0.0002240366972, +0.0002240366972, +0.0002183486239, +0.0001792660550, + +0.0000783486239, -0.0001119266055, -0.0003135779817, -0.0004366972477, + -0.0004088073394, -0.0002295412844, +0.0000223853211, +0.0002128440367, + +0.0002800000000, +0.0001792660550, +0.0000056880734, -0.0001792660550, + -0.0002966972477, -0.0003135779817, -0.0002183486239, -0.0001064220183, + -0.0000111926606, -0.0000168807339, -0.0000616513761, -0.0001176146789, + -0.0001231192661, -0.0000504587156, +0.0000504587156, +0.0001231192661, + +0.0001959633028, +0.0002464220183, +0.0002407339450, +0.0002240366972, + +0.0002688073394, +0.0003416513761, +0.0003807339450, +0.0003864220183, + +0.0003583486239, +0.0002855045872, +0.0001623853211, +0.0000728440367, + +0.0000223853211, +0.0000000000000, -0.0000168807339, -0.0000392660550, + -0.0000728440367, -0.0000616513761, -0.0000056880734, +0.0001176146789, + +0.0002576146789, +0.0004031192661, +0.0005040366972, +0.0005431192661, + +0.0004702752294, +0.0002966972477, +0.0000280733945, -0.0001847706422, + -0.0003416513761, -0.0003640366972, -0.0002966972477, -0.0001511926606, + -0.0000335779817, +0.0000000000000, +0.0000000000000, -0.0000111926606, + +0.0000000000000, +0.0000504587156, +0.0000840366972, +0.0000840366972, + +0.0000671559633, +0.0000280733945, -0.0000223853211, -0.0000895412844, + -0.0001064220183, -0.0000895412844, -0.0000504587156, -0.0000056880734, + +0.0000392660550, +0.0000616513761, +0.0000616513761, +0.0000895412844, + +0.0001904587156, +0.0002743119266, +0.0003135779817, +0.0002800000000, + +0.0002295412844, +0.0001343119266, +0.0000335779817, -0.0000616513761, + -0.0000840366972, -0.0000504587156, +0.0000000000000, -0.0000168807339, + -0.0000783486239, -0.0001792660550, -0.0002519266055, -0.0002966972477, + -0.0002519266055, -0.0001511926606, -0.0000447706422, +0.0000056880734, + +0.0000616513761, +0.0000559633028, +0.0000000000000, -0.0000447706422, + -0.0001231192661, -0.0002183486239, -0.0003359633028, -0.0004143119266, + -0.0004088073394, -0.0002688073394, -0.0000671559633, +0.0001231192661, + +0.0002464220183, +0.0002576146789, +0.0001007339450, -0.0001119266055, + -0.0003247706422, -0.0003640366972, -0.0002352293578, +0.0000000000000, + +0.0001959633028, +0.0003192660550, +0.0002855045872, +0.0001566972477, + -0.0000168807339, -0.0001792660550, -0.0002911926606, -0.0002743119266, + -0.0001959633028, -0.0000783486239, -0.0000056880734, +0.0000000000000, + -0.0000616513761, -0.0001847706422, -0.0002911926606, -0.0002855045872, + -0.0001959633028, -0.0000616513761, +0.0000392660550, +0.0001007339450, + +0.0000952293578, +0.0000728440367, +0.0000840366972, +0.0000728440367, + +0.0000168807339, -0.0000840366972, -0.0002016513761, -0.0003023853211, + -0.0003471559633, -0.0003528440367, -0.0002464220183, -0.0000671559633, + +0.0001231192661, +0.0002183486239, +0.0002352293578, +0.0001566972477, + +0.0000111926606, -0.0001792660550, -0.0003078899083, -0.0003752293578, + -0.0003528440367, -0.0002743119266, -0.0001400000000, -0.0000616513761, + -0.0000280733945, -0.0000616513761, -0.0000895412844, -0.0001064220183, + -0.0000895412844, -0.0000728440367, -0.0000559633028, -0.0000728440367, + -0.0001343119266, -0.0001847706422, -0.0001231192661, -0.0000111926606, + +0.0000840366972, +0.0001847706422, +0.0002688073394, +0.0002966972477, + +0.0002407339450, +0.0001231192661, +0.0000056880734, -0.0000447706422, + -0.0001064220183, -0.0001176146789, -0.0001064220183, -0.0000559633028, + -0.0000335779817, -0.0000056880734, -0.0000168807339, +0.0000000000000, + +0.0000000000000, +0.0000335779817, +0.0000280733945, +0.0000000000000, + -0.0000840366972, -0.0001400000000, -0.0002071559633, -0.0002352293578, + -0.0002071559633, -0.0000559633028, +0.0001064220183, +0.0002688073394, + +0.0003304587156, +0.0003304587156, +0.0002352293578, +0.0000952293578, + -0.0000335779817, -0.0001176146789, -0.0001343119266, -0.0001231192661, + -0.0001231192661, -0.0001511926606, -0.0001847706422, -0.0001847706422, + -0.0001064220183, +0.0000168807339, +0.0001735779817, +0.0002576146789, + +0.0002688073394, +0.0001680733945, +0.0000223853211, -0.0001007339450, + -0.0001566972477, -0.0001566972477, -0.0000840366972, +0.0000000000000, + +0.0000783486239, +0.0001064220183, +0.0001400000000, +0.0001511926606, + +0.0001735779817, +0.0001623853211, +0.0001792660550, +0.0001623853211, + +0.0001176146789, +0.0000168807339, -0.0000447706422, -0.0001007339450, + -0.0000895412844, -0.0000728440367, -0.0000447706422, +0.0000000000000, + +0.0000504587156, +0.0001064220183, +0.0001511926606, +0.0001904587156, + +0.0002295412844, +0.0002407339450, +0.0001792660550, +0.0000671559633, + -0.0000168807339, -0.0000783486239, -0.0001566972477, -0.0002071559633, + -0.0002407339450, -0.0002071559633, -0.0001176146789, +0.0000168807339, + +0.0001064220183, +0.0001288073394, +0.0000447706422, -0.0000559633028, + -0.0001904587156, -0.0002464220183, -0.0002352293578, -0.0001343119266, + +0.0000000000000, +0.0001288073394, +0.0001735779817, +0.0001455045872, + +0.0000447706422, -0.0000616513761, -0.0002016513761, -0.0002407339450, + -0.0002183486239, -0.0001680733945, -0.0001343119266, -0.0000840366972, + -0.0000280733945, +0.0000111926606, +0.0000392660550, +0.0000168807339, + +0.0000000000000, -0.0000168807339, -0.0000447706422, -0.0000895412844, + -0.0001007339450, -0.0001119266055, -0.0001007339450, -0.0000952293578, + -0.0000616513761, -0.0000559633028, -0.0000559633028, -0.0001455045872, + -0.0002295412844, -0.0002911926606, -0.0003192660550, -0.0003695412844, + -0.0003471559633, -0.0002519266055, -0.0000616513761, +0.0000783486239, + +0.0001904587156, +0.0001959633028, +0.0001400000000, +0.0000111926606, + -0.0001119266055, -0.0002576146789, -0.0002966972477, -0.0002016513761, + -0.0000392660550, +0.0000559633028, +0.0000783486239, +0.0000056880734, + -0.0000783486239, -0.0001566972477, -0.0001735779817, -0.0001343119266, + -0.0000840366972, -0.0000671559633, -0.0001176146789, -0.0001566972477, + -0.0001792660550, -0.0001735779817, -0.0001959633028, -0.0001735779817, + -0.0001007339450, +0.0000056880734, +0.0000616513761, +0.0000447706422, + -0.0000168807339, -0.0000783486239, -0.0001847706422, -0.0002743119266, + -0.0003023853211, -0.0002071559633, -0.0000895412844, +0.0000168807339, + +0.0000783486239, +0.0000895412844, +0.0000504587156, +0.0000168807339, + -0.0000335779817, -0.0000559633028, -0.0000728440367, -0.0001119266055, + -0.0001792660550, -0.0002519266055, -0.0003359633028, -0.0003864220183, + -0.0003471559633, -0.0002295412844, -0.0000783486239, +0.0000223853211, + +0.0000728440367, +0.0000223853211, -0.0000671559633, -0.0001792660550, + -0.0002071559633, -0.0001623853211, -0.0000111926606, +0.0001288073394, + +0.0002295412844, +0.0002128440367, +0.0001288073394, +0.0000000000000, + -0.0000840366972, -0.0000952293578, -0.0000392660550, -0.0000111926606, + -0.0000335779817, -0.0001231192661, -0.0001847706422, -0.0002183486239, + -0.0001735779817, -0.0000840366972, +0.0000392660550, +0.0001566972477, + +0.0001904587156, +0.0001511926606, +0.0001231192661, +0.0000840366972, + +0.0000335779817, -0.0000056880734, -0.0000671559633, -0.0001176146789, + -0.0001400000000, -0.0001288073394, -0.0000840366972, +0.0000000000000, + +0.0001064220183, +0.0002519266055, +0.0003807339450, +0.0004590825688, + +0.0004535779817, +0.0004088073394, +0.0003247706422, +0.0001959633028, + +0.0000504587156, +0.0000111926606, +0.0000616513761, +0.0001566972477, + +0.0001904587156, +0.0002128440367, +0.0002295412844, +0.0002295412844, + +0.0001847706422, +0.0001511926606, +0.0001566972477, +0.0002016513761, + +0.0002464220183, +0.0002464220183, +0.0002071559633, +0.0001680733945, + +0.0001288073394, +0.0000840366972, +0.0000559633028, +0.0000504587156, + +0.0000504587156, +0.0000111926606, -0.0000280733945, -0.0000728440367, + -0.0001119266055, -0.0001623853211, -0.0001904587156, -0.0002016513761, + -0.0001623853211, -0.0001007339450, -0.0000056880734, +0.0000671559633, + +0.0001400000000, +0.0001735779817, +0.0001792660550, +0.0001400000000, + +0.0000671559633, +0.0000000000000, -0.0000504587156, -0.0000728440367, + -0.0000223853211, +0.0000447706422, +0.0001231192661, +0.0001792660550, + +0.0002016513761, +0.0001343119266, +0.0000111926606, -0.0000559633028, + -0.0000559633028, +0.0000000000000, +0.0000392660550, +0.0000559633028, + +0.0000111926606, -0.0000504587156, -0.0001231192661, -0.0001007339450, + +0.0000168807339, +0.0002128440367, +0.0003640366972, +0.0004143119266, + +0.0003359633028, +0.0001680733945, +0.0000111926606, -0.0000392660550, + -0.0000392660550, +0.0000000000000, +0.0000392660550, +0.0000671559633, + +0.0000616513761, +0.0000335779817, +0.0000000000000, +0.0000000000000, + +0.0000447706422, +0.0001007339450, +0.0001511926606, +0.0001847706422, + +0.0002128440367, +0.0002016513761, +0.0001959633028, +0.0001959633028, + +0.0002240366972, +0.0002128440367, +0.0001623853211, +0.0000504587156, + -0.0000447706422, -0.0001064220183, -0.0000671559633, +0.0000000000000, + +0.0001119266055, +0.0001680733945, +0.0001904587156, +0.0001623853211, + +0.0001064220183, +0.0000168807339, -0.0000223853211, -0.0000392660550, + +0.0000000000000, +0.0000559633028, +0.0000952293578, +0.0001119266055, + +0.0001288073394, +0.0001511926606, +0.0001566972477, +0.0001400000000, + +0.0001231192661, +0.0001455045872, +0.0001566972477, +0.0001680733945, + +0.0001792660550, +0.0002352293578, +0.0002688073394, +0.0002800000000, + +0.0001959633028, +0.0000783486239, -0.0000280733945, -0.0000783486239, + -0.0001007339450, -0.0000616513761, -0.0000559633028, -0.0000616513761, + -0.0001176146789, -0.0001455045872, -0.0001288073394, -0.0000168807339, + +0.0001007339450, +0.0002519266055, +0.0002688073394, +0.0001735779817, + -0.0000056880734, -0.0001959633028, -0.0003192660550, -0.0003078899083, + -0.0002240366972, -0.0000895412844, +0.0000392660550, +0.0001623853211, + +0.0002352293578, +0.0002295412844, +0.0001792660550, +0.0000895412844, + +0.0000223853211, +0.0000056880734, +0.0000840366972, +0.0002071559633, + +0.0003528440367, +0.0004311926606, +0.0004702752294, +0.0003919266055, + +0.0002519266055, +0.0000783486239, -0.0000111926606, -0.0001119266055, + -0.0001400000000, -0.0001566972477, -0.0000895412844, -0.0000168807339, + +0.0000671559633, +0.0001064220183, +0.0001566972477, +0.0001455045872, + +0.0001231192661, +0.0000616513761, +0.0000447706422, +0.0000280733945, + +0.0000392660550, +0.0000223853211, +0.0000056880734, +0.0000000000000, + -0.0000168807339, -0.0000335779817, -0.0000280733945, +0.0000000000000, + +0.0000056880734, +0.0000000000000, -0.0000559633028, -0.0001343119266, + -0.0002240366972, -0.0002800000000, -0.0002966972477, -0.0002128440367, + -0.0000895412844, +0.0000616513761, +0.0001566972477, +0.0002016513761, + +0.0001511926606, +0.0001007339450, +0.0000000000000, -0.0000447706422, + -0.0001176146789, -0.0001288073394, -0.0001176146789, -0.0000392660550, + +0.0000056880734, +0.0000895412844, +0.0001064220183, +0.0001064220183, + +0.0000335779817, -0.0000447706422, -0.0001680733945, -0.0002016513761, + -0.0001511926606, -0.0000168807339, +0.0001064220183, +0.0002240366972, + +0.0002352293578, +0.0001566972477, +0.0000335779817, -0.0000728440367, + -0.0001119266055, -0.0000447706422, +0.0000504587156, +0.0001007339450, + +0.0001119266055, +0.0000728440367, +0.0000335779817, -0.0000111926606, + -0.0000223853211, -0.0000168807339, +0.0000335779817, +0.0000559633028, + +0.0000616513761, +0.0000000000000, -0.0000504587156, -0.0001511926606, + -0.0001904587156, -0.0002128440367, -0.0001343119266, -0.0000504587156, + +0.0000504587156, +0.0001119266055, +0.0001064220183, +0.0000000000000, + -0.0000895412844, -0.0001343119266, -0.0000952293578, -0.0000223853211, + +0.0000671559633, +0.0001680733945, +0.0002071559633, +0.0001680733945, + +0.0000952293578, +0.0000504587156, +0.0000223853211, +0.0000447706422, + +0.0000504587156, +0.0000392660550, -0.0000111926606, -0.0000840366972, + -0.0001623853211, -0.0001455045872, -0.0000783486239, +0.0000223853211, + +0.0001119266055, +0.0001680733945, +0.0001176146789, +0.0000111926606, + -0.0001064220183, -0.0001455045872, -0.0001343119266, -0.0000392660550, + +0.0000559633028, +0.0001735779817, +0.0002576146789, +0.0003416513761, + +0.0003695412844, +0.0003528440367, +0.0002800000000, +0.0001680733945, + +0.0000000000000, -0.0001623853211, -0.0002800000000, -0.0003078899083, + -0.0002352293578, -0.0001176146789, +0.0000000000000, +0.0000447706422, + +0.0000559633028, +0.0000000000000, -0.0000223853211, -0.0000335779817, + +0.0000000000000, +0.0000335779817, +0.0000671559633, +0.0000223853211, + -0.0000223853211, -0.0000952293578, -0.0001455045872, -0.0001623853211, + -0.0000504587156, +0.0001064220183, +0.0002855045872, +0.0004031192661, + +0.0004647706422, +0.0003807339450, +0.0002071559633, +0.0000168807339, + -0.0001007339450, -0.0001623853211, -0.0001119266055, -0.0000335779817, + -0.0000056880734, -0.0000335779817, -0.0000840366972, -0.0000671559633, + +0.0000168807339, +0.0001680733945, +0.0002911926606, +0.0003583486239, + +0.0003416513761, +0.0002631192661, +0.0001400000000, +0.0000223853211, + -0.0000168807339, +0.0000168807339, +0.0001288073394, +0.0002576146789, + +0.0002855045872, +0.0002128440367, +0.0000447706422, -0.0001119266055, + -0.0002576146789, -0.0003359633028, -0.0003471559633, -0.0002855045872, + -0.0002128440367, -0.0001792660550, -0.0001680733945, -0.0001566972477, + -0.0001288073394, -0.0000783486239 +}; diff --git a/plugins/LadspaEffect/swh/impulses/all.h b/plugins/LadspaEffect/swh/impulses/all.h new file mode 100644 index 000000000..cf597bfeb --- /dev/null +++ b/plugins/LadspaEffect/swh/impulses/all.h @@ -0,0 +1,51 @@ +/* Generated file, do not edit */ + +#define IMPULSES 21 + +#include "impulses/01-unit.h" +#include "impulses/02-steves-flat.h" +#include "impulses/03-stk-m1.h" +#include "impulses/04-fender-68-vibrolux-sm57.h" +#include "impulses/05-fender-68-vibrolux-sm57-off.h" +#include "impulses/06-fender-68-vibrolux-at4050.h" +#include "impulses/07-fender-68-vibrolux-ui87.h" +#include "impulses/08-fender-bassman-sm57.h" +#include "impulses/09-fender-bassman-sm57-off.h" +#include "impulses/10-fender-bassman-at4050.h" +#include "impulses/11-fender-bassman-ui87.h" +#include "impulses/12-fender-superchamp-sm57.h" +#include "impulses/13-fender-superchamp-sm57-off.h" +#include "impulses/14-fender-superchamp-at4050.h" +#include "impulses/15-fender-superchamp-ui87.h" +#include "impulses/16-marshall-jcm2000-sm57.h" +#include "impulses/17-marshall-jcm2000-sm57-off.h" +#include "impulses/18-marshall-plexi-sm57.h" +#include "impulses/19-marshall-plexi-sm57-off.h" +#include "impulses/20-matchless-chieftain-sm57.h" +#include "impulses/21-matchless-chieftain-sm57-off.h" + +inline void mk_imps(fftw_real **impulse_freq) +{ + int c = 0; + MK_IMP(unit); + MK_IMP(steves_flat); + MK_IMP(stk_m1); + MK_IMP(fender_68_vibrolux_sm57); + MK_IMP(fender_68_vibrolux_sm57_off); + MK_IMP(fender_68_vibrolux_at4050); + MK_IMP(fender_68_vibrolux_ui87); + MK_IMP(fender_bassman_sm57); + MK_IMP(fender_bassman_sm57_off); + MK_IMP(fender_bassman_at4050); + MK_IMP(fender_bassman_ui87); + MK_IMP(fender_superchamp_sm57); + MK_IMP(fender_superchamp_sm57_off); + MK_IMP(fender_superchamp_at4050); + MK_IMP(fender_superchamp_ui87); + MK_IMP(marshall_jcm2000_sm57); + MK_IMP(marshall_jcm2000_sm57_off); + MK_IMP(marshall_plexi_sm57); + MK_IMP(marshall_plexi_sm57_off); + MK_IMP(matchless_chieftain_sm57); + MK_IMP(matchless_chieftain_sm57_off); +}; diff --git a/plugins/LadspaEffect/swh/inv_1429.c b/plugins/LadspaEffect/swh/inv_1429.c new file mode 100644 index 000000000..cbc51f548 --- /dev/null +++ b/plugins/LadspaEffect/swh/inv_1429.c @@ -0,0 +1,218 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + + +#define INV_INPUT 0 +#define INV_OUTPUT 1 + +static LADSPA_Descriptor *invDescriptor = NULL; + +typedef struct { + LADSPA_Data *input; + LADSPA_Data *output; + LADSPA_Data run_adding_gain; +} Inv; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return invDescriptor; + default: + return NULL; + } +} + +static void cleanupInv(LADSPA_Handle instance) { + free(instance); +} + +static void connectPortInv( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + Inv *plugin; + + plugin = (Inv *)instance; + switch (port) { + case INV_INPUT: + plugin->input = data; + break; + case INV_OUTPUT: + plugin->output = data; + break; + } +} + +static LADSPA_Handle instantiateInv( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + Inv *plugin_data = (Inv *)malloc(sizeof(Inv)); + plugin_data->run_adding_gain = 1.0f; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runInv(LADSPA_Handle instance, unsigned long sample_count) { + Inv *plugin_data = (Inv *)instance; + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + +#line 17 "inv_1429.xml" + unsigned long pos; + + for (pos = 0; pos < sample_count; pos++) { + buffer_write(output[pos], -input[pos]); + } +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainInv(LADSPA_Handle instance, LADSPA_Data gain) { + ((Inv *)instance)->run_adding_gain = gain; +} + +static void runAddingInv(LADSPA_Handle instance, unsigned long sample_count) { + Inv *plugin_data = (Inv *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + +#line 17 "inv_1429.xml" + unsigned long pos; + + for (pos = 0; pos < sample_count; pos++) { + buffer_write(output[pos], -input[pos]); + } +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + invDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (invDescriptor) { + invDescriptor->UniqueID = 1429; + invDescriptor->Label = "inv"; + invDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + invDescriptor->Name = + D_("Inverter"); + invDescriptor->Maker = + "Steve Harris "; + invDescriptor->Copyright = + "GPL"; + invDescriptor->PortCount = 2; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(2, + sizeof(LADSPA_PortDescriptor)); + invDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(2, + sizeof(LADSPA_PortRangeHint)); + invDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(2, sizeof(char*)); + invDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Input */ + port_descriptors[INV_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[INV_INPUT] = + D_("Input"); + port_range_hints[INV_INPUT].HintDescriptor = 0; + + /* Parameters for Output */ + port_descriptors[INV_OUTPUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[INV_OUTPUT] = + D_("Output"); + port_range_hints[INV_OUTPUT].HintDescriptor = 0; + + invDescriptor->activate = NULL; + invDescriptor->cleanup = cleanupInv; + invDescriptor->connect_port = connectPortInv; + invDescriptor->deactivate = NULL; + invDescriptor->instantiate = instantiateInv; + invDescriptor->run = runInv; + invDescriptor->run_adding = runAddingInv; + invDescriptor->set_run_adding_gain = setRunAddingGainInv; + } +} + +void _fini() { + if (invDescriptor) { + free((LADSPA_PortDescriptor *)invDescriptor->PortDescriptors); + free((char **)invDescriptor->PortNames); + free((LADSPA_PortRangeHint *)invDescriptor->PortRangeHints); + free(invDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/karaoke_1409.c b/plugins/LadspaEffect/swh/karaoke_1409.c new file mode 100644 index 000000000..4c2f7355e --- /dev/null +++ b/plugins/LadspaEffect/swh/karaoke_1409.c @@ -0,0 +1,285 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + + +#define KARAOKE_GAIN 0 +#define KARAOKE_LIN 1 +#define KARAOKE_RIN 2 +#define KARAOKE_LOUT 3 +#define KARAOKE_ROUT 4 + +static LADSPA_Descriptor *karaokeDescriptor = NULL; + +typedef struct { + LADSPA_Data *gain; + LADSPA_Data *lin; + LADSPA_Data *rin; + LADSPA_Data *lout; + LADSPA_Data *rout; + LADSPA_Data run_adding_gain; +} Karaoke; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return karaokeDescriptor; + default: + return NULL; + } +} + +static void cleanupKaraoke(LADSPA_Handle instance) { + free(instance); +} + +static void connectPortKaraoke( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + Karaoke *plugin; + + plugin = (Karaoke *)instance; + switch (port) { + case KARAOKE_GAIN: + plugin->gain = data; + break; + case KARAOKE_LIN: + plugin->lin = data; + break; + case KARAOKE_RIN: + plugin->rin = data; + break; + case KARAOKE_LOUT: + plugin->lout = data; + break; + case KARAOKE_ROUT: + plugin->rout = data; + break; + } +} + +static LADSPA_Handle instantiateKaraoke( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + Karaoke *plugin_data = (Karaoke *)malloc(sizeof(Karaoke)); + plugin_data->run_adding_gain = 1.0f; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runKaraoke(LADSPA_Handle instance, unsigned long sample_count) { + Karaoke *plugin_data = (Karaoke *)instance; + + /* Vocal volume (dB) (float value) */ + const LADSPA_Data gain = *(plugin_data->gain); + + /* Left in (array of floats of length sample_count) */ + const LADSPA_Data * const lin = plugin_data->lin; + + /* Right in (array of floats of length sample_count) */ + const LADSPA_Data * const rin = plugin_data->rin; + + /* Left out (array of floats of length sample_count) */ + LADSPA_Data * const lout = plugin_data->lout; + + /* Right out (array of floats of length sample_count) */ + LADSPA_Data * const rout = plugin_data->rout; + +#line 17 "karaoke_1409.xml" + unsigned long pos; + float coef = pow(10.0f, gain * 0.05f) * 0.5f; + float m, s; + + for (pos = 0; pos < sample_count; pos++) { + m = lin[pos] + rin[pos]; + s = lin[pos] - rin[pos]; + buffer_write(lout[pos], m * coef + s * 0.5f); + buffer_write(rout[pos], m * coef - s * 0.5f); + } +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainKaraoke(LADSPA_Handle instance, LADSPA_Data gain) { + ((Karaoke *)instance)->run_adding_gain = gain; +} + +static void runAddingKaraoke(LADSPA_Handle instance, unsigned long sample_count) { + Karaoke *plugin_data = (Karaoke *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Vocal volume (dB) (float value) */ + const LADSPA_Data gain = *(plugin_data->gain); + + /* Left in (array of floats of length sample_count) */ + const LADSPA_Data * const lin = plugin_data->lin; + + /* Right in (array of floats of length sample_count) */ + const LADSPA_Data * const rin = plugin_data->rin; + + /* Left out (array of floats of length sample_count) */ + LADSPA_Data * const lout = plugin_data->lout; + + /* Right out (array of floats of length sample_count) */ + LADSPA_Data * const rout = plugin_data->rout; + +#line 17 "karaoke_1409.xml" + unsigned long pos; + float coef = pow(10.0f, gain * 0.05f) * 0.5f; + float m, s; + + for (pos = 0; pos < sample_count; pos++) { + m = lin[pos] + rin[pos]; + s = lin[pos] - rin[pos]; + buffer_write(lout[pos], m * coef + s * 0.5f); + buffer_write(rout[pos], m * coef - s * 0.5f); + } +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + karaokeDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (karaokeDescriptor) { + karaokeDescriptor->UniqueID = 1409; + karaokeDescriptor->Label = "karaoke"; + karaokeDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + karaokeDescriptor->Name = + D_("Karaoke"); + karaokeDescriptor->Maker = + "Steve Harris "; + karaokeDescriptor->Copyright = + "GPL"; + karaokeDescriptor->PortCount = 5; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(5, + sizeof(LADSPA_PortDescriptor)); + karaokeDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(5, + sizeof(LADSPA_PortRangeHint)); + karaokeDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(5, sizeof(char*)); + karaokeDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Vocal volume (dB) */ + port_descriptors[KARAOKE_GAIN] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[KARAOKE_GAIN] = + D_("Vocal volume (dB)"); + port_range_hints[KARAOKE_GAIN].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[KARAOKE_GAIN].LowerBound = -70; + port_range_hints[KARAOKE_GAIN].UpperBound = 0; + + /* Parameters for Left in */ + port_descriptors[KARAOKE_LIN] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[KARAOKE_LIN] = + D_("Left in"); + port_range_hints[KARAOKE_LIN].HintDescriptor = 0; + + /* Parameters for Right in */ + port_descriptors[KARAOKE_RIN] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[KARAOKE_RIN] = + D_("Right in"); + port_range_hints[KARAOKE_RIN].HintDescriptor = 0; + + /* Parameters for Left out */ + port_descriptors[KARAOKE_LOUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[KARAOKE_LOUT] = + D_("Left out"); + port_range_hints[KARAOKE_LOUT].HintDescriptor = 0; + + /* Parameters for Right out */ + port_descriptors[KARAOKE_ROUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[KARAOKE_ROUT] = + D_("Right out"); + port_range_hints[KARAOKE_ROUT].HintDescriptor = 0; + + karaokeDescriptor->activate = NULL; + karaokeDescriptor->cleanup = cleanupKaraoke; + karaokeDescriptor->connect_port = connectPortKaraoke; + karaokeDescriptor->deactivate = NULL; + karaokeDescriptor->instantiate = instantiateKaraoke; + karaokeDescriptor->run = runKaraoke; + karaokeDescriptor->run_adding = runAddingKaraoke; + karaokeDescriptor->set_run_adding_gain = setRunAddingGainKaraoke; + } +} + +void _fini() { + if (karaokeDescriptor) { + free((LADSPA_PortDescriptor *)karaokeDescriptor->PortDescriptors); + free((char **)karaokeDescriptor->PortNames); + free((LADSPA_PortRangeHint *)karaokeDescriptor->PortRangeHints); + free(karaokeDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/ladspa-util.c b/plugins/LadspaEffect/swh/ladspa-util.c new file mode 100644 index 000000000..57ce5bf15 --- /dev/null +++ b/plugins/LadspaEffect/swh/ladspa-util.c @@ -0,0 +1,22 @@ +/* truncate: + + Truncates a float down to an int without worrying about + the stack and crap like that. +*/ + +static const float _truncate_half = 0.5f; + +int truncate(float flt) { + int i; + + i = flt; +/* + asm ( + "flds 8(%ebp)\n" + "\tfsubs _truncate_half\n" + "\tfistpl -4(%ebp)\n" + ); +*/ + + return i; +} diff --git a/plugins/LadspaEffect/swh/ladspa-util.h b/plugins/LadspaEffect/swh/ladspa-util.h new file mode 100644 index 000000000..ef6e31bed --- /dev/null +++ b/plugins/LadspaEffect/swh/ladspa-util.h @@ -0,0 +1,233 @@ +/* Some misc util functions for audio DSP work, written by Steve Harris, + * December 2000 + * + * steve@plugin.org.uk + */ + +#ifndef LADSPA_UTIL_H +#define LADSPA_UTIL_H + +#include +#include + +#include "config.h" + +// 16.16 fixpoint +typedef union { + int32_t all; + struct { +#ifdef WORDS_BIGENDIAN + int16_t in; + uint16_t fr; +#else + uint16_t fr; + int16_t in; +#endif + } part; +} fixp16; + +// 32.32 fixpoint +typedef union { + int64_t all; + struct { +#ifdef WORDS_BIGENDIAN + int32_t in; + uint32_t fr; +#else + uint32_t fr; + int32_t in; +#endif + } part; +} fixp32; + +/* 32 bit "pointer cast" union */ +typedef union { + float f; + int32_t i; +} ls_pcast32; + +// Sometimes it doesn't get defined, even though it eists and C99 is declared +long int lrintf (float x); + +// 1.0 / ln(2) +#define LN2R 1.442695041f + +/* detet floating point denormal numbers by comparing them to the smallest + * normal, crap, but reliable */ +#define DN_CHECK(x, l) if (fabs(x) < 1e-38) printf("DN: "l"\n") + +// Denormalise floats, only actually needed for PIII and recent PowerPC +//#define FLUSH_TO_ZERO(fv) (((*(unsigned int*)&(fv))&0x7f800000)==0)?0.0f:(fv) + +static inline float flush_to_zero(float f) +{ + ls_pcast32 v; + + v.f = f; + + // original: return (v.i & 0x7f800000) == 0 ? 0.0f : f; + // version from Tim Blechmann + return (v.i & 0x7f800000) < 0x08000000 ? 0.0f : f; +} + +static inline void round_to_zero(volatile float *f) +{ + *f += 1e-18; + *f -= 1e-18; +} + +/* A set of branchless clipping operations from Laurent de Soras */ + +static inline float f_max(float x, float a) +{ + x -= a; + x += fabs(x); + x *= 0.5; + x += a; + + return x; +} + +static inline float f_min(float x, float b) +{ + x = b - x; + x += fabs(x); + x *= 0.5; + x = b - x; + + return x; +} + +static inline float f_clamp(float x, float a, float b) +{ + const float x1 = fabs(x - a); + const float x2 = fabs(x - b); + + x = x1 + a + b; + x -= x2; + x *= 0.5; + + return x; +} + +// Limit a value to be l<=v<=u +#define LIMIT(v,l,u) ((v)<(l)?(l):((v)>(u)?(u):(v))) + +// Truncate-to-zero modulo (ANSI C doesn't specify) will only work +// if -m < v < 2m +#define MOD(v,m) (v<0?v+m:(v>=m?v-m:v)) + +// Truncate-to-zero modulo (ANSI C doesn't specify) will only work +// if v > -m and v < m +#define NEG_MOD(v,m) ((v)<0?((v)+(m)):(v)) + +// Convert a value in dB's to a coefficent +#define DB_CO(g) ((g) > -90.0f ? powf(10.0f, (g) * 0.05f) : 0.0f) +#define CO_DB(v) (20.0f * log10f(v)) + +// Linearly interpolate [ = a * (1 - f) + b * f] +#define LIN_INTERP(f,a,b) ((a) + (f) * ((b) - (a))) + +// Cubic interpolation function +static inline float cube_interp(const float fr, const float inm1, const float + in, const float inp1, const float inp2) +{ + return in + 0.5f * fr * (inp1 - inm1 + + fr * (4.0f * inp1 + 2.0f * inm1 - 5.0f * in - inp2 + + fr * (3.0f * (in - inp1) - inm1 + inp2))); +} + +/* fast sin^2 aproxiamtion, adapted from jan AT rpgfan's posting to the + * music-dsp list */ +static inline float f_sin_sq(float angle) +{ + const float asqr = angle * angle; + float result = -2.39e-08f; + + result *= asqr; + result += 2.7526e-06f; + result *= asqr; + result -= 1.98409e-04f; + result *= asqr; + result += 8.3333315e-03f; + result *= asqr; + result -= 1.666666664e-01f; + result *= asqr; + result += 1.0f; + result *= angle; + + return result * result; +} + +#ifdef HAVE_LRINTF + +#define f_round(f) lrintf(f) + +#else + +// Round float to int using IEEE int* hack +static inline int f_round(float f) +{ + ls_pcast32 p; + + p.f = f; + p.f += (3<<22); + + return p.i - 0x4b400000; +} + +#endif + +// Truncate float to int +static inline int f_trunc(float f) +{ + return f_round(floorf(f)); +} + +/* Andrew Simper's pow(2, x) aproximation from the music-dsp list */ + +#if 0 + +/* original */ +static inline float f_pow2(float x) +{ + long *px = (long*)(&x); // store address of float as long pointer + const float tx = (x-0.5f) + (3<<22); // temporary value for truncation + const long lx = *((long*)&tx) - 0x4b400000; // integer power of 2 + const float dx = x-(float)(lx); // float remainder of power of 2 + + x = 1.0f + dx*(0.6960656421638072f + // cubic apporoximation of 2^x + dx*(0.224494337302845f + // for x in the range [0, 1] + dx*(0.07944023841053369f))); + *px += (lx<<23); // add integer power of 2 to exponent + + return x; +} + +#else + +/* union version */ +static inline float f_pow2(float x) +{ + ls_pcast32 *px, tx, lx; + float dx; + + px = (ls_pcast32 *)&x; // store address of float as long pointer + tx.f = (x-0.5f) + (3<<22); // temporary value for truncation + lx.i = tx.i - 0x4b400000; // integer power of 2 + dx = x - (float)lx.i; // float remainder of power of 2 + + x = 1.0f + dx * (0.6960656421638072f + // cubic apporoximation of 2^x + dx * (0.224494337302845f + // for x in the range [0, 1] + dx * (0.07944023841053369f))); + (*px).i += (lx.i << 23); // add integer power of 2 to exponent + + return (*px).f; +} + +#endif + +/* Fast exponentiation function, y = e^x */ +#define f_exp(x) f_pow2(x * LN2R) + +#endif diff --git a/plugins/LadspaEffect/swh/latency_1914.c b/plugins/LadspaEffect/swh/latency_1914.c new file mode 100644 index 000000000..56d0365b6 --- /dev/null +++ b/plugins/LadspaEffect/swh/latency_1914.c @@ -0,0 +1,270 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + +#line 10 "latency_1914.xml" + +#include "ladspa-util.h" + +#define ARTIFICIALLATENCY_DELAY 0 +#define ARTIFICIALLATENCY_INPUT 1 +#define ARTIFICIALLATENCY_OUTPUT 2 +#define ARTIFICIALLATENCY_LATENCY 3 + +static LADSPA_Descriptor *artificialLatencyDescriptor = NULL; + +typedef struct { + LADSPA_Data *delay; + LADSPA_Data *input; + LADSPA_Data *output; + LADSPA_Data *latency; + float fs; + LADSPA_Data run_adding_gain; +} ArtificialLatency; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return artificialLatencyDescriptor; + default: + return NULL; + } +} + +static void cleanupArtificialLatency(LADSPA_Handle instance) { + free(instance); +} + +static void connectPortArtificialLatency( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + ArtificialLatency *plugin; + + plugin = (ArtificialLatency *)instance; + switch (port) { + case ARTIFICIALLATENCY_DELAY: + plugin->delay = data; + break; + case ARTIFICIALLATENCY_INPUT: + plugin->input = data; + break; + case ARTIFICIALLATENCY_OUTPUT: + plugin->output = data; + break; + case ARTIFICIALLATENCY_LATENCY: + plugin->latency = data; + break; + } +} + +static LADSPA_Handle instantiateArtificialLatency( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + ArtificialLatency *plugin_data = (ArtificialLatency *)malloc(sizeof(ArtificialLatency)); + float fs; + +#line 21 "latency_1914.xml" + fs = s_rate; + + plugin_data->fs = fs; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runArtificialLatency(LADSPA_Handle instance, unsigned long sample_count) { + ArtificialLatency *plugin_data = (ArtificialLatency *)instance; + + /* Delay (ms) (float value) */ + const LADSPA_Data delay = *(plugin_data->delay); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + float fs = plugin_data->fs; + +#line 25 "latency_1914.xml" + unsigned long pos; + const int delay_fr = f_round(delay * 0.001 * fs); + + if (input != output) { + for (pos = 0; pos < sample_count; pos++) { + buffer_write(output[pos], input[pos]); + } + } + *(plugin_data->latency) = (float)delay_fr; +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainArtificialLatency(LADSPA_Handle instance, LADSPA_Data gain) { + ((ArtificialLatency *)instance)->run_adding_gain = gain; +} + +static void runAddingArtificialLatency(LADSPA_Handle instance, unsigned long sample_count) { + ArtificialLatency *plugin_data = (ArtificialLatency *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Delay (ms) (float value) */ + const LADSPA_Data delay = *(plugin_data->delay); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + float fs = plugin_data->fs; + +#line 25 "latency_1914.xml" + unsigned long pos; + const int delay_fr = f_round(delay * 0.001 * fs); + + if (input != output) { + for (pos = 0; pos < sample_count; pos++) { + buffer_write(output[pos], input[pos]); + } + } + *(plugin_data->latency) = (float)delay_fr; +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + artificialLatencyDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (artificialLatencyDescriptor) { + artificialLatencyDescriptor->UniqueID = 1914; + artificialLatencyDescriptor->Label = "artificialLatency"; + artificialLatencyDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + artificialLatencyDescriptor->Name = + D_("Artificial latency"); + artificialLatencyDescriptor->Maker = + "Steve Harris "; + artificialLatencyDescriptor->Copyright = + "GPL"; + artificialLatencyDescriptor->PortCount = 4; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(4, + sizeof(LADSPA_PortDescriptor)); + artificialLatencyDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(4, + sizeof(LADSPA_PortRangeHint)); + artificialLatencyDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(4, sizeof(char*)); + artificialLatencyDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Delay (ms) */ + port_descriptors[ARTIFICIALLATENCY_DELAY] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[ARTIFICIALLATENCY_DELAY] = + D_("Delay (ms)"); + port_range_hints[ARTIFICIALLATENCY_DELAY].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; + port_range_hints[ARTIFICIALLATENCY_DELAY].LowerBound = 0; + port_range_hints[ARTIFICIALLATENCY_DELAY].UpperBound = 10000; + + /* Parameters for Input */ + port_descriptors[ARTIFICIALLATENCY_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[ARTIFICIALLATENCY_INPUT] = + D_("Input"); + port_range_hints[ARTIFICIALLATENCY_INPUT].HintDescriptor = 0; + + /* Parameters for Output */ + port_descriptors[ARTIFICIALLATENCY_OUTPUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[ARTIFICIALLATENCY_OUTPUT] = + D_("Output"); + port_range_hints[ARTIFICIALLATENCY_OUTPUT].HintDescriptor = 0; + + /* Parameters for latency */ + port_descriptors[ARTIFICIALLATENCY_LATENCY] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_CONTROL; + port_names[ARTIFICIALLATENCY_LATENCY] = + D_("latency"); + port_range_hints[ARTIFICIALLATENCY_LATENCY].HintDescriptor = 0; + + artificialLatencyDescriptor->activate = NULL; + artificialLatencyDescriptor->cleanup = cleanupArtificialLatency; + artificialLatencyDescriptor->connect_port = connectPortArtificialLatency; + artificialLatencyDescriptor->deactivate = NULL; + artificialLatencyDescriptor->instantiate = instantiateArtificialLatency; + artificialLatencyDescriptor->run = runArtificialLatency; + artificialLatencyDescriptor->run_adding = runAddingArtificialLatency; + artificialLatencyDescriptor->set_run_adding_gain = setRunAddingGainArtificialLatency; + } +} + +void _fini() { + if (artificialLatencyDescriptor) { + free((LADSPA_PortDescriptor *)artificialLatencyDescriptor->PortDescriptors); + free((char **)artificialLatencyDescriptor->PortNames); + free((LADSPA_PortRangeHint *)artificialLatencyDescriptor->PortRangeHints); + free(artificialLatencyDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/lcr_delay_1436.c b/plugins/LadspaEffect/swh/lcr_delay_1436.c new file mode 100644 index 000000000..8e0c60243 --- /dev/null +++ b/plugins/LadspaEffect/swh/lcr_delay_1436.c @@ -0,0 +1,744 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + +#line 10 "lcr_delay_1436.xml" + +#include "ladspa-util.h" +#include "util/biquad.h" + +#define LCRDELAY_LDEL 0 +#define LCRDELAY_LLEV 1 +#define LCRDELAY_CDEL 2 +#define LCRDELAY_CLEV 3 +#define LCRDELAY_RDEL 4 +#define LCRDELAY_RLEV 5 +#define LCRDELAY_FEEDBACK 6 +#define LCRDELAY_HIGH_D 7 +#define LCRDELAY_LOW_D 8 +#define LCRDELAY_SPREAD 9 +#define LCRDELAY_WET 10 +#define LCRDELAY_IN_L 11 +#define LCRDELAY_IN_R 12 +#define LCRDELAY_OUT_L 13 +#define LCRDELAY_OUT_R 14 + +static LADSPA_Descriptor *lcrDelayDescriptor = NULL; + +typedef struct { + LADSPA_Data *ldel; + LADSPA_Data *llev; + LADSPA_Data *cdel; + LADSPA_Data *clev; + LADSPA_Data *rdel; + LADSPA_Data *rlev; + LADSPA_Data *feedback; + LADSPA_Data *high_d; + LADSPA_Data *low_d; + LADSPA_Data *spread; + LADSPA_Data *wet; + LADSPA_Data *in_l; + LADSPA_Data *in_r; + LADSPA_Data *out_l; + LADSPA_Data *out_r; + LADSPA_Data *buffer; + unsigned int buffer_mask; + unsigned int buffer_pos; + biquad * filters; + float fs; + float last_cd; + float last_cl; + float last_ld; + float last_ll; + float last_rd; + float last_rl; + LADSPA_Data run_adding_gain; +} LcrDelay; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return lcrDelayDescriptor; + default: + return NULL; + } +} + +static void activateLcrDelay(LADSPA_Handle instance) { + LcrDelay *plugin_data = (LcrDelay *)instance; + LADSPA_Data *buffer = plugin_data->buffer; + unsigned int buffer_mask = plugin_data->buffer_mask; + unsigned int buffer_pos = plugin_data->buffer_pos; + biquad *filters = plugin_data->filters; + float fs = plugin_data->fs; + float last_cd = plugin_data->last_cd; + float last_cl = plugin_data->last_cl; + float last_ld = plugin_data->last_ld; + float last_ll = plugin_data->last_ll; + float last_rd = plugin_data->last_rd; + float last_rl = plugin_data->last_rl; +#line 41 "lcr_delay_1436.xml" + memset(buffer, 0, (buffer_mask + 1) * sizeof(LADSPA_Data)); + last_ll = 0.0f; + last_cl = 0.0f; + last_rl = 0.0f; + last_ld = 0.0f; + last_cd = 0.0f; + last_rd = 0.0f; + biquad_init(filters); + biquad_init(filters + 1); + plugin_data->buffer = buffer; + plugin_data->buffer_mask = buffer_mask; + plugin_data->buffer_pos = buffer_pos; + plugin_data->filters = filters; + plugin_data->fs = fs; + plugin_data->last_cd = last_cd; + plugin_data->last_cl = last_cl; + plugin_data->last_ld = last_ld; + plugin_data->last_ll = last_ll; + plugin_data->last_rd = last_rd; + plugin_data->last_rl = last_rl; + +} + +static void cleanupLcrDelay(LADSPA_Handle instance) { +#line 53 "lcr_delay_1436.xml" + LcrDelay *plugin_data = (LcrDelay *)instance; + free(plugin_data->filters); + free(plugin_data->buffer); + free(instance); +} + +static void connectPortLcrDelay( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + LcrDelay *plugin; + + plugin = (LcrDelay *)instance; + switch (port) { + case LCRDELAY_LDEL: + plugin->ldel = data; + break; + case LCRDELAY_LLEV: + plugin->llev = data; + break; + case LCRDELAY_CDEL: + plugin->cdel = data; + break; + case LCRDELAY_CLEV: + plugin->clev = data; + break; + case LCRDELAY_RDEL: + plugin->rdel = data; + break; + case LCRDELAY_RLEV: + plugin->rlev = data; + break; + case LCRDELAY_FEEDBACK: + plugin->feedback = data; + break; + case LCRDELAY_HIGH_D: + plugin->high_d = data; + break; + case LCRDELAY_LOW_D: + plugin->low_d = data; + break; + case LCRDELAY_SPREAD: + plugin->spread = data; + break; + case LCRDELAY_WET: + plugin->wet = data; + break; + case LCRDELAY_IN_L: + plugin->in_l = data; + break; + case LCRDELAY_IN_R: + plugin->in_r = data; + break; + case LCRDELAY_OUT_L: + plugin->out_l = data; + break; + case LCRDELAY_OUT_R: + plugin->out_r = data; + break; + } +} + +static LADSPA_Handle instantiateLcrDelay( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + LcrDelay *plugin_data = (LcrDelay *)malloc(sizeof(LcrDelay)); + LADSPA_Data *buffer = NULL; + unsigned int buffer_mask; + unsigned int buffer_pos; + biquad *filters = NULL; + float fs; + float last_cd; + float last_cl; + float last_ld; + float last_ll; + float last_rd; + float last_rl; + +#line 21 "lcr_delay_1436.xml" + int buffer_size = 32768; + + fs = s_rate; + while (buffer_size < fs * 2.7f) { + buffer_size *= 2; + } + buffer = calloc(buffer_size, sizeof(LADSPA_Data)); + buffer_mask = buffer_size - 1; + buffer_pos = 0; + last_ll = 0.0f; + last_cl = 0.0f; + last_rl = 0.0f; + last_ld = 0.0f; + last_cd = 0.0f; + last_rd = 0.0f; + + filters = malloc(2 * sizeof(biquad)); + + plugin_data->buffer = buffer; + plugin_data->buffer_mask = buffer_mask; + plugin_data->buffer_pos = buffer_pos; + plugin_data->filters = filters; + plugin_data->fs = fs; + plugin_data->last_cd = last_cd; + plugin_data->last_cl = last_cl; + plugin_data->last_ld = last_ld; + plugin_data->last_ll = last_ll; + plugin_data->last_rd = last_rd; + plugin_data->last_rl = last_rl; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runLcrDelay(LADSPA_Handle instance, unsigned long sample_count) { + LcrDelay *plugin_data = (LcrDelay *)instance; + + /* L delay (ms) (float value) */ + const LADSPA_Data ldel = *(plugin_data->ldel); + + /* L level (float value) */ + const LADSPA_Data llev = *(plugin_data->llev); + + /* C delay (ms) (float value) */ + const LADSPA_Data cdel = *(plugin_data->cdel); + + /* C level (float value) */ + const LADSPA_Data clev = *(plugin_data->clev); + + /* R delay (ms) (float value) */ + const LADSPA_Data rdel = *(plugin_data->rdel); + + /* R level (float value) */ + const LADSPA_Data rlev = *(plugin_data->rlev); + + /* Feedback (float value) */ + const LADSPA_Data feedback = *(plugin_data->feedback); + + /* High damp (%) (float value) */ + const LADSPA_Data high_d = *(plugin_data->high_d); + + /* Low damp (%) (float value) */ + const LADSPA_Data low_d = *(plugin_data->low_d); + + /* Spread (float value) */ + const LADSPA_Data spread = *(plugin_data->spread); + + /* Dry/Wet level (float value) */ + const LADSPA_Data wet = *(plugin_data->wet); + + /* L input (array of floats of length sample_count) */ + const LADSPA_Data * const in_l = plugin_data->in_l; + + /* R input (array of floats of length sample_count) */ + const LADSPA_Data * const in_r = plugin_data->in_r; + + /* L output (array of floats of length sample_count) */ + LADSPA_Data * const out_l = plugin_data->out_l; + + /* R output (array of floats of length sample_count) */ + LADSPA_Data * const out_r = plugin_data->out_r; + LADSPA_Data * buffer = plugin_data->buffer; + unsigned int buffer_mask = plugin_data->buffer_mask; + unsigned int buffer_pos = plugin_data->buffer_pos; + biquad * filters = plugin_data->filters; + float fs = plugin_data->fs; + float last_cd = plugin_data->last_cd; + float last_cl = plugin_data->last_cl; + float last_ld = plugin_data->last_ld; + float last_ll = plugin_data->last_ll; + float last_rd = plugin_data->last_rd; + float last_rl = plugin_data->last_rl; + +#line 58 "lcr_delay_1436.xml" + unsigned long pos; + const float sc_r = 1.0f / (float)sample_count; + const float spr_t = 0.5f + spread * 0.01f; + const float spr_o = 0.5f - spread * 0.01f; + float fb = feedback * 0.01f; + float ll, cl, rl, ld, cd, rd; + float ll_d, cl_d, rl_d, ld_d, cd_d, rd_d; + float left, right; + float fbs; /* Feedback signal */ + + if (fb < -0.99f) { + fb = -0.99f; + } else if (fb > 0.99f) { + fb = 0.99f; + } + + ls_set_params(filters, fs * 0.0001f * powf(2.0f, low_d * 0.12f), + -0.5f * low_d, 0.5f, fs); + hs_set_params(filters + 1, fs * (0.41f - 0.0001f * + powf(2.0f, high_d * 0.12f)), -70.0f, 0.9f, fs); + + ll = last_ll; /* Start value of Left Level */ + ll_d = (llev * 0.01f - last_ll) * sc_r; /* Delta for Left Level */ + cl = last_cl; + cl_d = (clev * 0.01f - last_cl) * sc_r; + rl = last_rl; + rl_d = (rlev * 0.01f - last_rl) * sc_r; + + ld = last_ld; + ld_d = (ldel * fs * 0.001f - last_ld) * sc_r; + cd = last_cd; + cd_d = (cdel * fs * 0.001f - last_cd) * sc_r; + rd = last_rd; + rd_d = (rdel * fs * 0.001f - last_rd) * sc_r; + + for (pos = 0; pos < sample_count; pos++) { + /* Increment linear interpolators */ + ll += ll_d; + rl += rl_d; + cl += cl_d; + ld += ld_d; + rd += rd_d; + cd += cd_d; + + /* Write input into delay line */ + buffer[buffer_pos] = in_l[pos] + in_r[pos]; + /* Add feedback, must be done afterwards for case where C delay = 0 */ + fbs = buffer[(buffer_pos - f_round(cd)) & buffer_mask] * fb; + fbs = flush_to_zero(fbs); + fbs = biquad_run(filters, fbs); + fbs = biquad_run(filters + 1, fbs); + buffer[buffer_pos] += fbs; + + /* Outputs from left and right delay beffers + centre mix */ + left = buffer[(buffer_pos - f_round(ld)) & buffer_mask] * ll + + buffer[(buffer_pos - f_round(cd)) & buffer_mask] * cl; + right = buffer[(buffer_pos - f_round(rd)) & buffer_mask] * rl + + buffer[(buffer_pos - f_round(cd)) & buffer_mask] * cl; + + /* Left and right channel outs */ + buffer_write(out_l[pos], in_l[pos] * (1.0f - wet) + + (left * spr_t + right * spr_o) * wet); + buffer_write(out_r[pos], in_r[pos] * (1.0f - wet) + + (left * spr_o + right * spr_t) * wet); + + buffer_pos = (buffer_pos + 1) & buffer_mask; + } + + plugin_data->last_ll = ll; + plugin_data->last_cl = cl; + plugin_data->last_rl = rl; + plugin_data->last_ld = ld; + plugin_data->last_cd = cd; + plugin_data->last_rd = rd; + plugin_data->buffer_pos = buffer_pos; +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainLcrDelay(LADSPA_Handle instance, LADSPA_Data gain) { + ((LcrDelay *)instance)->run_adding_gain = gain; +} + +static void runAddingLcrDelay(LADSPA_Handle instance, unsigned long sample_count) { + LcrDelay *plugin_data = (LcrDelay *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* L delay (ms) (float value) */ + const LADSPA_Data ldel = *(plugin_data->ldel); + + /* L level (float value) */ + const LADSPA_Data llev = *(plugin_data->llev); + + /* C delay (ms) (float value) */ + const LADSPA_Data cdel = *(plugin_data->cdel); + + /* C level (float value) */ + const LADSPA_Data clev = *(plugin_data->clev); + + /* R delay (ms) (float value) */ + const LADSPA_Data rdel = *(plugin_data->rdel); + + /* R level (float value) */ + const LADSPA_Data rlev = *(plugin_data->rlev); + + /* Feedback (float value) */ + const LADSPA_Data feedback = *(plugin_data->feedback); + + /* High damp (%) (float value) */ + const LADSPA_Data high_d = *(plugin_data->high_d); + + /* Low damp (%) (float value) */ + const LADSPA_Data low_d = *(plugin_data->low_d); + + /* Spread (float value) */ + const LADSPA_Data spread = *(plugin_data->spread); + + /* Dry/Wet level (float value) */ + const LADSPA_Data wet = *(plugin_data->wet); + + /* L input (array of floats of length sample_count) */ + const LADSPA_Data * const in_l = plugin_data->in_l; + + /* R input (array of floats of length sample_count) */ + const LADSPA_Data * const in_r = plugin_data->in_r; + + /* L output (array of floats of length sample_count) */ + LADSPA_Data * const out_l = plugin_data->out_l; + + /* R output (array of floats of length sample_count) */ + LADSPA_Data * const out_r = plugin_data->out_r; + LADSPA_Data * buffer = plugin_data->buffer; + unsigned int buffer_mask = plugin_data->buffer_mask; + unsigned int buffer_pos = plugin_data->buffer_pos; + biquad * filters = plugin_data->filters; + float fs = plugin_data->fs; + float last_cd = plugin_data->last_cd; + float last_cl = plugin_data->last_cl; + float last_ld = plugin_data->last_ld; + float last_ll = plugin_data->last_ll; + float last_rd = plugin_data->last_rd; + float last_rl = plugin_data->last_rl; + +#line 58 "lcr_delay_1436.xml" + unsigned long pos; + const float sc_r = 1.0f / (float)sample_count; + const float spr_t = 0.5f + spread * 0.01f; + const float spr_o = 0.5f - spread * 0.01f; + float fb = feedback * 0.01f; + float ll, cl, rl, ld, cd, rd; + float ll_d, cl_d, rl_d, ld_d, cd_d, rd_d; + float left, right; + float fbs; /* Feedback signal */ + + if (fb < -0.99f) { + fb = -0.99f; + } else if (fb > 0.99f) { + fb = 0.99f; + } + + ls_set_params(filters, fs * 0.0001f * powf(2.0f, low_d * 0.12f), + -0.5f * low_d, 0.5f, fs); + hs_set_params(filters + 1, fs * (0.41f - 0.0001f * + powf(2.0f, high_d * 0.12f)), -70.0f, 0.9f, fs); + + ll = last_ll; /* Start value of Left Level */ + ll_d = (llev * 0.01f - last_ll) * sc_r; /* Delta for Left Level */ + cl = last_cl; + cl_d = (clev * 0.01f - last_cl) * sc_r; + rl = last_rl; + rl_d = (rlev * 0.01f - last_rl) * sc_r; + + ld = last_ld; + ld_d = (ldel * fs * 0.001f - last_ld) * sc_r; + cd = last_cd; + cd_d = (cdel * fs * 0.001f - last_cd) * sc_r; + rd = last_rd; + rd_d = (rdel * fs * 0.001f - last_rd) * sc_r; + + for (pos = 0; pos < sample_count; pos++) { + /* Increment linear interpolators */ + ll += ll_d; + rl += rl_d; + cl += cl_d; + ld += ld_d; + rd += rd_d; + cd += cd_d; + + /* Write input into delay line */ + buffer[buffer_pos] = in_l[pos] + in_r[pos]; + /* Add feedback, must be done afterwards for case where C delay = 0 */ + fbs = buffer[(buffer_pos - f_round(cd)) & buffer_mask] * fb; + fbs = flush_to_zero(fbs); + fbs = biquad_run(filters, fbs); + fbs = biquad_run(filters + 1, fbs); + buffer[buffer_pos] += fbs; + + /* Outputs from left and right delay beffers + centre mix */ + left = buffer[(buffer_pos - f_round(ld)) & buffer_mask] * ll + + buffer[(buffer_pos - f_round(cd)) & buffer_mask] * cl; + right = buffer[(buffer_pos - f_round(rd)) & buffer_mask] * rl + + buffer[(buffer_pos - f_round(cd)) & buffer_mask] * cl; + + /* Left and right channel outs */ + buffer_write(out_l[pos], in_l[pos] * (1.0f - wet) + + (left * spr_t + right * spr_o) * wet); + buffer_write(out_r[pos], in_r[pos] * (1.0f - wet) + + (left * spr_o + right * spr_t) * wet); + + buffer_pos = (buffer_pos + 1) & buffer_mask; + } + + plugin_data->last_ll = ll; + plugin_data->last_cl = cl; + plugin_data->last_rl = rl; + plugin_data->last_ld = ld; + plugin_data->last_cd = cd; + plugin_data->last_rd = rd; + plugin_data->buffer_pos = buffer_pos; +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + lcrDelayDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (lcrDelayDescriptor) { + lcrDelayDescriptor->UniqueID = 1436; + lcrDelayDescriptor->Label = "lcrDelay"; + lcrDelayDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + lcrDelayDescriptor->Name = + D_("L/C/R Delay"); + lcrDelayDescriptor->Maker = + "Steve Harris "; + lcrDelayDescriptor->Copyright = + "GPL"; + lcrDelayDescriptor->PortCount = 15; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(15, + sizeof(LADSPA_PortDescriptor)); + lcrDelayDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(15, + sizeof(LADSPA_PortRangeHint)); + lcrDelayDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(15, sizeof(char*)); + lcrDelayDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for L delay (ms) */ + port_descriptors[LCRDELAY_LDEL] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[LCRDELAY_LDEL] = + D_("L delay (ms)"); + port_range_hints[LCRDELAY_LDEL].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; + port_range_hints[LCRDELAY_LDEL].LowerBound = 0; + port_range_hints[LCRDELAY_LDEL].UpperBound = 2700; + + /* Parameters for L level */ + port_descriptors[LCRDELAY_LLEV] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[LCRDELAY_LLEV] = + D_("L level"); + port_range_hints[LCRDELAY_LLEV].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; + port_range_hints[LCRDELAY_LLEV].LowerBound = 0; + port_range_hints[LCRDELAY_LLEV].UpperBound = 50; + + /* Parameters for C delay (ms) */ + port_descriptors[LCRDELAY_CDEL] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[LCRDELAY_CDEL] = + D_("C delay (ms)"); + port_range_hints[LCRDELAY_CDEL].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; + port_range_hints[LCRDELAY_CDEL].LowerBound = 0; + port_range_hints[LCRDELAY_CDEL].UpperBound = 2700; + + /* Parameters for C level */ + port_descriptors[LCRDELAY_CLEV] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[LCRDELAY_CLEV] = + D_("C level"); + port_range_hints[LCRDELAY_CLEV].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; + port_range_hints[LCRDELAY_CLEV].LowerBound = 0; + port_range_hints[LCRDELAY_CLEV].UpperBound = 50; + + /* Parameters for R delay (ms) */ + port_descriptors[LCRDELAY_RDEL] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[LCRDELAY_RDEL] = + D_("R delay (ms)"); + port_range_hints[LCRDELAY_RDEL].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; + port_range_hints[LCRDELAY_RDEL].LowerBound = 0; + port_range_hints[LCRDELAY_RDEL].UpperBound = 2700; + + /* Parameters for R level */ + port_descriptors[LCRDELAY_RLEV] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[LCRDELAY_RLEV] = + D_("R level"); + port_range_hints[LCRDELAY_RLEV].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; + port_range_hints[LCRDELAY_RLEV].LowerBound = 0; + port_range_hints[LCRDELAY_RLEV].UpperBound = 50; + + /* Parameters for Feedback */ + port_descriptors[LCRDELAY_FEEDBACK] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[LCRDELAY_FEEDBACK] = + D_("Feedback"); + port_range_hints[LCRDELAY_FEEDBACK].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[LCRDELAY_FEEDBACK].LowerBound = -100; + port_range_hints[LCRDELAY_FEEDBACK].UpperBound = 100; + + /* Parameters for High damp (%) */ + port_descriptors[LCRDELAY_HIGH_D] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[LCRDELAY_HIGH_D] = + D_("High damp (%)"); + port_range_hints[LCRDELAY_HIGH_D].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; + port_range_hints[LCRDELAY_HIGH_D].LowerBound = 0; + port_range_hints[LCRDELAY_HIGH_D].UpperBound = 100; + + /* Parameters for Low damp (%) */ + port_descriptors[LCRDELAY_LOW_D] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[LCRDELAY_LOW_D] = + D_("Low damp (%)"); + port_range_hints[LCRDELAY_LOW_D].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; + port_range_hints[LCRDELAY_LOW_D].LowerBound = 0; + port_range_hints[LCRDELAY_LOW_D].UpperBound = 100; + + /* Parameters for Spread */ + port_descriptors[LCRDELAY_SPREAD] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[LCRDELAY_SPREAD] = + D_("Spread"); + port_range_hints[LCRDELAY_SPREAD].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; + port_range_hints[LCRDELAY_SPREAD].LowerBound = 0; + port_range_hints[LCRDELAY_SPREAD].UpperBound = 50; + + /* Parameters for Dry/Wet level */ + port_descriptors[LCRDELAY_WET] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[LCRDELAY_WET] = + D_("Dry/Wet level"); + port_range_hints[LCRDELAY_WET].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[LCRDELAY_WET].LowerBound = 0; + port_range_hints[LCRDELAY_WET].UpperBound = 1; + + /* Parameters for L input */ + port_descriptors[LCRDELAY_IN_L] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[LCRDELAY_IN_L] = + D_("L input"); + port_range_hints[LCRDELAY_IN_L].HintDescriptor = 0; + + /* Parameters for R input */ + port_descriptors[LCRDELAY_IN_R] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[LCRDELAY_IN_R] = + D_("R input"); + port_range_hints[LCRDELAY_IN_R].HintDescriptor = 0; + + /* Parameters for L output */ + port_descriptors[LCRDELAY_OUT_L] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[LCRDELAY_OUT_L] = + D_("L output"); + port_range_hints[LCRDELAY_OUT_L].HintDescriptor = 0; + + /* Parameters for R output */ + port_descriptors[LCRDELAY_OUT_R] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[LCRDELAY_OUT_R] = + D_("R output"); + port_range_hints[LCRDELAY_OUT_R].HintDescriptor = 0; + + lcrDelayDescriptor->activate = activateLcrDelay; + lcrDelayDescriptor->cleanup = cleanupLcrDelay; + lcrDelayDescriptor->connect_port = connectPortLcrDelay; + lcrDelayDescriptor->deactivate = NULL; + lcrDelayDescriptor->instantiate = instantiateLcrDelay; + lcrDelayDescriptor->run = runLcrDelay; + lcrDelayDescriptor->run_adding = runAddingLcrDelay; + lcrDelayDescriptor->set_run_adding_gain = setRunAddingGainLcrDelay; + } +} + +void _fini() { + if (lcrDelayDescriptor) { + free((LADSPA_PortDescriptor *)lcrDelayDescriptor->PortDescriptors); + free((char **)lcrDelayDescriptor->PortNames); + free((LADSPA_PortRangeHint *)lcrDelayDescriptor->PortRangeHints); + free(lcrDelayDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/lowpass_iir_1891.c b/plugins/LadspaEffect/swh/lowpass_iir_1891.c new file mode 100644 index 000000000..782f9e39f --- /dev/null +++ b/plugins/LadspaEffect/swh/lowpass_iir_1891.c @@ -0,0 +1,291 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + + +#include "config.h" +#include "util/iir.h" +#include "ladspa-util.h" + +#define LOWPASS_IIR_CUTOFF 0 +#define LOWPASS_IIR_STAGES 1 +#define LOWPASS_IIR_INPUT 2 +#define LOWPASS_IIR_OUTPUT 3 + +static LADSPA_Descriptor *lowpass_iirDescriptor = NULL; + +typedef struct { + LADSPA_Data *cutoff; + LADSPA_Data *stages; + LADSPA_Data *input; + LADSPA_Data *output; + iir_stage_t* gt; + iirf_t* iirf; + long sample_rate; + LADSPA_Data run_adding_gain; +} Lowpass_iir; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return lowpass_iirDescriptor; + default: + return NULL; + } +} + +static void activateLowpass_iir(LADSPA_Handle instance) { + Lowpass_iir *plugin_data = (Lowpass_iir *)instance; + iir_stage_t*gt = plugin_data->gt; + iirf_t*iirf = plugin_data->iirf; + long sample_rate = plugin_data->sample_rate; + + gt = init_iir_stage(IIR_STAGE_LOWPASS,10,3,2); + iirf = init_iirf_t(gt); + chebyshev(iirf, gt, 2*CLAMP(f_round(*(plugin_data->stages)),1,10), IIR_STAGE_LOWPASS, + *(plugin_data->cutoff)/(float)sample_rate, 0.5f); + plugin_data->gt = gt; + plugin_data->iirf = iirf; + plugin_data->sample_rate = sample_rate; + +} + +static void cleanupLowpass_iir(LADSPA_Handle instance) { + Lowpass_iir *plugin_data = (Lowpass_iir *)instance; + free_iirf_t(plugin_data->iirf, plugin_data->gt); + free_iir_stage(plugin_data->gt); + free(instance); +} + +static void connectPortLowpass_iir( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + Lowpass_iir *plugin; + + plugin = (Lowpass_iir *)instance; + switch (port) { + case LOWPASS_IIR_CUTOFF: + plugin->cutoff = data; + break; + case LOWPASS_IIR_STAGES: + plugin->stages = data; + break; + case LOWPASS_IIR_INPUT: + plugin->input = data; + break; + case LOWPASS_IIR_OUTPUT: + plugin->output = data; + break; + } +} + +static LADSPA_Handle instantiateLowpass_iir( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + Lowpass_iir *plugin_data = (Lowpass_iir *)malloc(sizeof(Lowpass_iir)); + iir_stage_t*gt = NULL; + iirf_t*iirf = NULL; + long sample_rate; + + sample_rate = s_rate; + + plugin_data->gt = gt; + plugin_data->iirf = iirf; + plugin_data->sample_rate = sample_rate; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runLowpass_iir(LADSPA_Handle instance, unsigned long sample_count) { + Lowpass_iir *plugin_data = (Lowpass_iir *)instance; + + /* Cutoff Frequency (float value) */ + const LADSPA_Data cutoff = *(plugin_data->cutoff); + + /* Stages(2 poles per stage) (float value) */ + const LADSPA_Data stages = *(plugin_data->stages); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + iir_stage_t* gt = plugin_data->gt; + iirf_t* iirf = plugin_data->iirf; + long sample_rate = plugin_data->sample_rate; + + chebyshev(iirf, gt, 2*CLAMP((int)stages,1,10), IIR_STAGE_LOWPASS, cutoff/(float)sample_rate, 0.5f); + iir_process_buffer_ns_5(iirf, gt, input, output, sample_count,RUN_ADDING); +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainLowpass_iir(LADSPA_Handle instance, LADSPA_Data gain) { + ((Lowpass_iir *)instance)->run_adding_gain = gain; +} + +static void runAddingLowpass_iir(LADSPA_Handle instance, unsigned long sample_count) { + Lowpass_iir *plugin_data = (Lowpass_iir *)instance; + + /* Cutoff Frequency (float value) */ + const LADSPA_Data cutoff = *(plugin_data->cutoff); + + /* Stages(2 poles per stage) (float value) */ + const LADSPA_Data stages = *(plugin_data->stages); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + iir_stage_t* gt = plugin_data->gt; + iirf_t* iirf = plugin_data->iirf; + long sample_rate = plugin_data->sample_rate; + + chebyshev(iirf, gt, 2*CLAMP((int)stages,1,10), IIR_STAGE_LOWPASS, cutoff/(float)sample_rate, 0.5f); + iir_process_buffer_ns_5(iirf, gt, input, output, sample_count,RUN_ADDING); +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + lowpass_iirDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (lowpass_iirDescriptor) { + lowpass_iirDescriptor->UniqueID = 1891; + lowpass_iirDescriptor->Label = "lowpass_iir"; + lowpass_iirDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + lowpass_iirDescriptor->Name = + D_("Glame Lowpass Filter"); + lowpass_iirDescriptor->Maker = + "Alexander Ehlert "; + lowpass_iirDescriptor->Copyright = + "GPL"; + lowpass_iirDescriptor->PortCount = 4; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(4, + sizeof(LADSPA_PortDescriptor)); + lowpass_iirDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(4, + sizeof(LADSPA_PortRangeHint)); + lowpass_iirDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(4, sizeof(char*)); + lowpass_iirDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Cutoff Frequency */ + port_descriptors[LOWPASS_IIR_CUTOFF] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[LOWPASS_IIR_CUTOFF] = + D_("Cutoff Frequency"); + port_range_hints[LOWPASS_IIR_CUTOFF].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_HIGH | LADSPA_HINT_SAMPLE_RATE | LADSPA_HINT_LOGARITHMIC; + port_range_hints[LOWPASS_IIR_CUTOFF].LowerBound = 0.0001; + port_range_hints[LOWPASS_IIR_CUTOFF].UpperBound = 0.45; + + /* Parameters for Stages(2 poles per stage) */ + port_descriptors[LOWPASS_IIR_STAGES] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[LOWPASS_IIR_STAGES] = + D_("Stages(2 poles per stage)"); + port_range_hints[LOWPASS_IIR_STAGES].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1 | LADSPA_HINT_INTEGER; + port_range_hints[LOWPASS_IIR_STAGES].LowerBound = 1.0; + port_range_hints[LOWPASS_IIR_STAGES].UpperBound = 10.0; + + /* Parameters for Input */ + port_descriptors[LOWPASS_IIR_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[LOWPASS_IIR_INPUT] = + D_("Input"); + port_range_hints[LOWPASS_IIR_INPUT].HintDescriptor = 0; + + /* Parameters for Output */ + port_descriptors[LOWPASS_IIR_OUTPUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[LOWPASS_IIR_OUTPUT] = + D_("Output"); + port_range_hints[LOWPASS_IIR_OUTPUT].HintDescriptor = 0; + + lowpass_iirDescriptor->activate = activateLowpass_iir; + lowpass_iirDescriptor->cleanup = cleanupLowpass_iir; + lowpass_iirDescriptor->connect_port = connectPortLowpass_iir; + lowpass_iirDescriptor->deactivate = NULL; + lowpass_iirDescriptor->instantiate = instantiateLowpass_iir; + lowpass_iirDescriptor->run = runLowpass_iir; + lowpass_iirDescriptor->run_adding = runAddingLowpass_iir; + lowpass_iirDescriptor->set_run_adding_gain = setRunAddingGainLowpass_iir; + } +} + +void _fini() { + if (lowpass_iirDescriptor) { + free((LADSPA_PortDescriptor *)lowpass_iirDescriptor->PortDescriptors); + free((char **)lowpass_iirDescriptor->PortNames); + free((LADSPA_PortRangeHint *)lowpass_iirDescriptor->PortRangeHints); + free(lowpass_iirDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/ls_filter_1908.c b/plugins/LadspaEffect/swh/ls_filter_1908.c new file mode 100644 index 000000000..6dc3ef2e8 --- /dev/null +++ b/plugins/LadspaEffect/swh/ls_filter_1908.c @@ -0,0 +1,319 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + +#line 10 "ls_filter_1908.xml" + +#include "ladspa-util.h" +#include "util/ls_filter.h" + +#define LSFILTER_TYPE 0 +#define LSFILTER_CUTOFF 1 +#define LSFILTER_RESONANCE 2 +#define LSFILTER_INPUT 3 +#define LSFILTER_OUTPUT 4 + +static LADSPA_Descriptor *lsFilterDescriptor = NULL; + +typedef struct { + LADSPA_Data *type; + LADSPA_Data *cutoff; + LADSPA_Data *resonance; + LADSPA_Data *input; + LADSPA_Data *output; + ls_filt * filt; + float fs; + LADSPA_Data run_adding_gain; +} LsFilter; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return lsFilterDescriptor; + default: + return NULL; + } +} + +static void activateLsFilter(LADSPA_Handle instance) { + LsFilter *plugin_data = (LsFilter *)instance; + ls_filt *filt = plugin_data->filt; + float fs = plugin_data->fs; +#line 26 "ls_filter_1908.xml" + ls_filt_init(filt); + plugin_data->filt = filt; + plugin_data->fs = fs; + +} + +static void cleanupLsFilter(LADSPA_Handle instance) { +#line 42 "ls_filter_1908.xml" + LsFilter *plugin_data = (LsFilter *)instance; + free(plugin_data->filt); + free(instance); +} + +static void connectPortLsFilter( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + LsFilter *plugin; + + plugin = (LsFilter *)instance; + switch (port) { + case LSFILTER_TYPE: + plugin->type = data; + break; + case LSFILTER_CUTOFF: + plugin->cutoff = data; + break; + case LSFILTER_RESONANCE: + plugin->resonance = data; + break; + case LSFILTER_INPUT: + plugin->input = data; + break; + case LSFILTER_OUTPUT: + plugin->output = data; + break; + } +} + +static LADSPA_Handle instantiateLsFilter( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + LsFilter *plugin_data = (LsFilter *)malloc(sizeof(LsFilter)); + ls_filt *filt = NULL; + float fs; + +#line 21 "ls_filter_1908.xml" + filt = malloc(sizeof(ls_filt)); + fs = s_rate; + + plugin_data->filt = filt; + plugin_data->fs = fs; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runLsFilter(LADSPA_Handle instance, unsigned long sample_count) { + LsFilter *plugin_data = (LsFilter *)instance; + + /* Filter type (0=LP, 1=BP, 2=HP) (float value) */ + const LADSPA_Data type = *(plugin_data->type); + + /* Cutoff frequency (Hz) (float value) */ + const LADSPA_Data cutoff = *(plugin_data->cutoff); + + /* Resonance (float value) */ + const LADSPA_Data resonance = *(plugin_data->resonance); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + ls_filt * filt = plugin_data->filt; + float fs = plugin_data->fs; + +#line 30 "ls_filter_1908.xml" + unsigned long pos; + const ls_filt_type t = (ls_filt_type)f_round(type); + + ls_filt_setup(filt, t, cutoff, resonance, fs); + + for (pos = 0; pos < sample_count; pos++) { + buffer_write(output[pos], ls_filt_run(filt, input[pos])); + } +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainLsFilter(LADSPA_Handle instance, LADSPA_Data gain) { + ((LsFilter *)instance)->run_adding_gain = gain; +} + +static void runAddingLsFilter(LADSPA_Handle instance, unsigned long sample_count) { + LsFilter *plugin_data = (LsFilter *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Filter type (0=LP, 1=BP, 2=HP) (float value) */ + const LADSPA_Data type = *(plugin_data->type); + + /* Cutoff frequency (Hz) (float value) */ + const LADSPA_Data cutoff = *(plugin_data->cutoff); + + /* Resonance (float value) */ + const LADSPA_Data resonance = *(plugin_data->resonance); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + ls_filt * filt = plugin_data->filt; + float fs = plugin_data->fs; + +#line 30 "ls_filter_1908.xml" + unsigned long pos; + const ls_filt_type t = (ls_filt_type)f_round(type); + + ls_filt_setup(filt, t, cutoff, resonance, fs); + + for (pos = 0; pos < sample_count; pos++) { + buffer_write(output[pos], ls_filt_run(filt, input[pos])); + } +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + lsFilterDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (lsFilterDescriptor) { + lsFilterDescriptor->UniqueID = 1908; + lsFilterDescriptor->Label = "lsFilter"; + lsFilterDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + lsFilterDescriptor->Name = + D_("LS Filter"); + lsFilterDescriptor->Maker = + "Steve Harris "; + lsFilterDescriptor->Copyright = + "GPL"; + lsFilterDescriptor->PortCount = 5; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(5, + sizeof(LADSPA_PortDescriptor)); + lsFilterDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(5, + sizeof(LADSPA_PortRangeHint)); + lsFilterDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(5, sizeof(char*)); + lsFilterDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Filter type (0=LP, 1=BP, 2=HP) */ + port_descriptors[LSFILTER_TYPE] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[LSFILTER_TYPE] = + D_("Filter type (0=LP, 1=BP, 2=HP)"); + port_range_hints[LSFILTER_TYPE].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0 | LADSPA_HINT_INTEGER; + port_range_hints[LSFILTER_TYPE].LowerBound = 0; + port_range_hints[LSFILTER_TYPE].UpperBound = 2; + + /* Parameters for Cutoff frequency (Hz) */ + port_descriptors[LSFILTER_CUTOFF] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[LSFILTER_CUTOFF] = + D_("Cutoff frequency (Hz)"); + port_range_hints[LSFILTER_CUTOFF].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE | LADSPA_HINT_LOGARITHMIC | LADSPA_HINT_SAMPLE_RATE; + port_range_hints[LSFILTER_CUTOFF].LowerBound = 0.002; + port_range_hints[LSFILTER_CUTOFF].UpperBound = 0.5; + + /* Parameters for Resonance */ + port_descriptors[LSFILTER_RESONANCE] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[LSFILTER_RESONANCE] = + D_("Resonance"); + port_range_hints[LSFILTER_RESONANCE].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[LSFILTER_RESONANCE].LowerBound = 0.0; + port_range_hints[LSFILTER_RESONANCE].UpperBound = 1.0; + + /* Parameters for Input */ + port_descriptors[LSFILTER_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[LSFILTER_INPUT] = + D_("Input"); + port_range_hints[LSFILTER_INPUT].HintDescriptor = 0; + + /* Parameters for Output */ + port_descriptors[LSFILTER_OUTPUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[LSFILTER_OUTPUT] = + D_("Output"); + port_range_hints[LSFILTER_OUTPUT].HintDescriptor = 0; + + lsFilterDescriptor->activate = activateLsFilter; + lsFilterDescriptor->cleanup = cleanupLsFilter; + lsFilterDescriptor->connect_port = connectPortLsFilter; + lsFilterDescriptor->deactivate = NULL; + lsFilterDescriptor->instantiate = instantiateLsFilter; + lsFilterDescriptor->run = runLsFilter; + lsFilterDescriptor->run_adding = runAddingLsFilter; + lsFilterDescriptor->set_run_adding_gain = setRunAddingGainLsFilter; + } +} + +void _fini() { + if (lsFilterDescriptor) { + free((LADSPA_PortDescriptor *)lsFilterDescriptor->PortDescriptors); + free((char **)lsFilterDescriptor->PortNames); + free((LADSPA_PortRangeHint *)lsFilterDescriptor->PortRangeHints); + free(lsFilterDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/matrix_ms_st_1421.c b/plugins/LadspaEffect/swh/matrix_ms_st_1421.c new file mode 100644 index 000000000..dd153866e --- /dev/null +++ b/plugins/LadspaEffect/swh/matrix_ms_st_1421.c @@ -0,0 +1,277 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + + +#define MATRIXMSST_WIDTH 0 +#define MATRIXMSST_MID 1 +#define MATRIXMSST_SIDE 2 +#define MATRIXMSST_LEFT 3 +#define MATRIXMSST_RIGHT 4 + +static LADSPA_Descriptor *matrixMSStDescriptor = NULL; + +typedef struct { + LADSPA_Data *width; + LADSPA_Data *mid; + LADSPA_Data *side; + LADSPA_Data *left; + LADSPA_Data *right; + LADSPA_Data run_adding_gain; +} MatrixMSSt; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return matrixMSStDescriptor; + default: + return NULL; + } +} + +static void cleanupMatrixMSSt(LADSPA_Handle instance) { + free(instance); +} + +static void connectPortMatrixMSSt( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + MatrixMSSt *plugin; + + plugin = (MatrixMSSt *)instance; + switch (port) { + case MATRIXMSST_WIDTH: + plugin->width = data; + break; + case MATRIXMSST_MID: + plugin->mid = data; + break; + case MATRIXMSST_SIDE: + plugin->side = data; + break; + case MATRIXMSST_LEFT: + plugin->left = data; + break; + case MATRIXMSST_RIGHT: + plugin->right = data; + break; + } +} + +static LADSPA_Handle instantiateMatrixMSSt( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + MatrixMSSt *plugin_data = (MatrixMSSt *)malloc(sizeof(MatrixMSSt)); + plugin_data->run_adding_gain = 1.0f; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runMatrixMSSt(LADSPA_Handle instance, unsigned long sample_count) { + MatrixMSSt *plugin_data = (MatrixMSSt *)instance; + + /* Width (float value) */ + const LADSPA_Data width = *(plugin_data->width); + + /* Mid (array of floats of length sample_count) */ + const LADSPA_Data * const mid = plugin_data->mid; + + /* Side (array of floats of length sample_count) */ + const LADSPA_Data * const side = plugin_data->side; + + /* Left (array of floats of length sample_count) */ + LADSPA_Data * const left = plugin_data->left; + + /* Right (array of floats of length sample_count) */ + LADSPA_Data * const right = plugin_data->right; + +#line 16 "matrix_ms_st_1421.xml" + unsigned long pos; + + for (pos = 0; pos < sample_count; pos++) { + buffer_write(left[pos], mid[pos] + side[pos] * width); + buffer_write(right[pos], mid[pos] - side[pos] * width); + } +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainMatrixMSSt(LADSPA_Handle instance, LADSPA_Data gain) { + ((MatrixMSSt *)instance)->run_adding_gain = gain; +} + +static void runAddingMatrixMSSt(LADSPA_Handle instance, unsigned long sample_count) { + MatrixMSSt *plugin_data = (MatrixMSSt *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Width (float value) */ + const LADSPA_Data width = *(plugin_data->width); + + /* Mid (array of floats of length sample_count) */ + const LADSPA_Data * const mid = plugin_data->mid; + + /* Side (array of floats of length sample_count) */ + const LADSPA_Data * const side = plugin_data->side; + + /* Left (array of floats of length sample_count) */ + LADSPA_Data * const left = plugin_data->left; + + /* Right (array of floats of length sample_count) */ + LADSPA_Data * const right = plugin_data->right; + +#line 16 "matrix_ms_st_1421.xml" + unsigned long pos; + + for (pos = 0; pos < sample_count; pos++) { + buffer_write(left[pos], mid[pos] + side[pos] * width); + buffer_write(right[pos], mid[pos] - side[pos] * width); + } +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + matrixMSStDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (matrixMSStDescriptor) { + matrixMSStDescriptor->UniqueID = 1421; + matrixMSStDescriptor->Label = "matrixMSSt"; + matrixMSStDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + matrixMSStDescriptor->Name = + D_("Matrix: MS to Stereo"); + matrixMSStDescriptor->Maker = + "Steve Harris "; + matrixMSStDescriptor->Copyright = + "GPL"; + matrixMSStDescriptor->PortCount = 5; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(5, + sizeof(LADSPA_PortDescriptor)); + matrixMSStDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(5, + sizeof(LADSPA_PortRangeHint)); + matrixMSStDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(5, sizeof(char*)); + matrixMSStDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Width */ + port_descriptors[MATRIXMSST_WIDTH] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[MATRIXMSST_WIDTH] = + D_("Width"); + port_range_hints[MATRIXMSST_WIDTH].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1; + port_range_hints[MATRIXMSST_WIDTH].LowerBound = 0; + port_range_hints[MATRIXMSST_WIDTH].UpperBound = 2; + + /* Parameters for Mid */ + port_descriptors[MATRIXMSST_MID] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[MATRIXMSST_MID] = + D_("Mid"); + port_range_hints[MATRIXMSST_MID].HintDescriptor = 0; + + /* Parameters for Side */ + port_descriptors[MATRIXMSST_SIDE] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[MATRIXMSST_SIDE] = + D_("Side"); + port_range_hints[MATRIXMSST_SIDE].HintDescriptor = 0; + + /* Parameters for Left */ + port_descriptors[MATRIXMSST_LEFT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[MATRIXMSST_LEFT] = + D_("Left"); + port_range_hints[MATRIXMSST_LEFT].HintDescriptor = 0; + + /* Parameters for Right */ + port_descriptors[MATRIXMSST_RIGHT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[MATRIXMSST_RIGHT] = + D_("Right"); + port_range_hints[MATRIXMSST_RIGHT].HintDescriptor = 0; + + matrixMSStDescriptor->activate = NULL; + matrixMSStDescriptor->cleanup = cleanupMatrixMSSt; + matrixMSStDescriptor->connect_port = connectPortMatrixMSSt; + matrixMSStDescriptor->deactivate = NULL; + matrixMSStDescriptor->instantiate = instantiateMatrixMSSt; + matrixMSStDescriptor->run = runMatrixMSSt; + matrixMSStDescriptor->run_adding = runAddingMatrixMSSt; + matrixMSStDescriptor->set_run_adding_gain = setRunAddingGainMatrixMSSt; + } +} + +void _fini() { + if (matrixMSStDescriptor) { + free((LADSPA_PortDescriptor *)matrixMSStDescriptor->PortDescriptors); + free((char **)matrixMSStDescriptor->PortNames); + free((LADSPA_PortRangeHint *)matrixMSStDescriptor->PortRangeHints); + free(matrixMSStDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/matrix_spatialiser_1422.c b/plugins/LadspaEffect/swh/matrix_spatialiser_1422.c new file mode 100644 index 000000000..f041630b3 --- /dev/null +++ b/plugins/LadspaEffect/swh/matrix_spatialiser_1422.c @@ -0,0 +1,435 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + +#line 10 "matrix_spatialiser_1422.xml" + +/* + thanks to Steve Harris for walking me through my first plugin ! +*/ + +#include "ladspa-util.h" + +/* we use sin/cos panning and start at pi/4. this is the correction factor + to bring the signal back to unity gain in neutral position. + it should be 1/x : sin(x) = cos(x) (~1.41421...). but since we are using an + approximation of sin/cos, we take its equal gain point, which leads to 1.3333... +*/ +#define EQUALGAINPOINT_OFFSET 128.0f +#define EQUALGAINPOINT_TO_UNITY 4.0f / 3.0f + +#define BITSPERCYCLE 10 /* resolution of the width parameter for */ +#define BITSPERQUARTER (BITSPERCYCLE-2) /* one cycle (0-2pi) */ + +/* borrowed code: http://www.dspguru.com/comp.dsp/tricks/alg/sincos.htm + i'm using a constant of 0.75, which makes the calculations simpler and does + not yield discontinuities. + author: Olli Niemitalo (oniemita@mail.student.oulu.fi) +*/ +static inline void sin_cos_approx(int phasein, float *vsin, float *vcos) { + // Modulo phase into quarter, convert to float 0..1 + float modphase = (phasein & ((1<current_m_gain; + LADSPA_Data current_s_gain = plugin_data->current_s_gain; +#line 94 "matrix_spatialiser_1422.xml" + sin_cos_approx(EQUALGAINPOINT_OFFSET, ¤t_s_gain, ¤t_m_gain); + current_m_gain *= EQUALGAINPOINT_TO_UNITY; /* normalize the neutral */ + current_s_gain *= EQUALGAINPOINT_TO_UNITY; /* setting to unity gain. */ + plugin_data->current_m_gain = current_m_gain; + plugin_data->current_s_gain = current_s_gain; + +} + +static void cleanupMatrixSpatialiser(LADSPA_Handle instance) { + free(instance); +} + +static void connectPortMatrixSpatialiser( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + MatrixSpatialiser *plugin; + + plugin = (MatrixSpatialiser *)instance; + switch (port) { + case MATRIXSPATIALISER_I_LEFT: + plugin->i_left = data; + break; + case MATRIXSPATIALISER_I_RIGHT: + plugin->i_right = data; + break; + case MATRIXSPATIALISER_WIDTH: + plugin->width = data; + break; + case MATRIXSPATIALISER_O_LEFT: + plugin->o_left = data; + break; + case MATRIXSPATIALISER_O_RIGHT: + plugin->o_right = data; + break; + } +} + +static LADSPA_Handle instantiateMatrixSpatialiser( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + MatrixSpatialiser *plugin_data = (MatrixSpatialiser *)malloc(sizeof(MatrixSpatialiser)); + LADSPA_Data current_m_gain; + LADSPA_Data current_s_gain; + +#line 89 "matrix_spatialiser_1422.xml" + current_m_gain = 0.0f; + current_s_gain = 0.0f; + + plugin_data->current_m_gain = current_m_gain; + plugin_data->current_s_gain = current_s_gain; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runMatrixSpatialiser(LADSPA_Handle instance, unsigned long sample_count) { + MatrixSpatialiser *plugin_data = (MatrixSpatialiser *)instance; + + /* Input L (array of floats of length sample_count) */ + const LADSPA_Data * const i_left = plugin_data->i_left; + + /* Input R (array of floats of length sample_count) */ + const LADSPA_Data * const i_right = plugin_data->i_right; + + /* Width (float value) */ + const LADSPA_Data width = *(plugin_data->width); + + /* Output L (array of floats of length sample_count) */ + LADSPA_Data * const o_left = plugin_data->o_left; + + /* Output R (array of floats of length sample_count) */ + LADSPA_Data * const o_right = plugin_data->o_right; + LADSPA_Data current_m_gain = plugin_data->current_m_gain; + LADSPA_Data current_s_gain = plugin_data->current_s_gain; + +#line 100 "matrix_spatialiser_1422.xml" + unsigned long pos; + LADSPA_Data mid, side; + LADSPA_Data m_gain, s_gain; + int width_ = f_round(width + EQUALGAINPOINT_OFFSET); + + /* smoothen the gain changes. to spread the curve over the entire + buffer length (i.e.#sample_count samples), make lp dependent on + sample_count. + */ + const float lp = 7.0f / (float) sample_count; /* value found by experiment */ + const float lp_i = 1.0f - lp; + + /* do approximately the same as + s_gain = sin(width); m_gain = cos(width); + but a lot faster: + */ + sin_cos_approx(width_, &s_gain, &m_gain); + + m_gain *= EQUALGAINPOINT_TO_UNITY; /* normalize the neutral */ + s_gain *= EQUALGAINPOINT_TO_UNITY; /* setting to unity gain. */ + + #ifdef DEBUG + /* do a "hardware bypass" if width == 0 */ + /* no smoothing here */ + if (width_ == 128) { + for (pos = 0; pos < sample_count; pos++) { + buffer_write(o_left[pos], i_left[pos]); + buffer_write(o_right[pos], i_right[pos]); + } + } else + #endif + + for (pos = 0; pos < sample_count; pos++) { + current_m_gain = current_m_gain * lp_i + m_gain * lp; + current_s_gain = current_s_gain * lp_i + s_gain * lp; + mid = (i_left[pos] + i_right[pos]) * 0.5f * current_m_gain; + side = (i_left[pos] - i_right[pos]) * 0.5f * current_s_gain; + buffer_write(o_left[pos], mid + side); + buffer_write(o_right[pos], mid - side); + } + + plugin_data->current_m_gain = current_m_gain; + plugin_data->current_s_gain = current_s_gain; +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainMatrixSpatialiser(LADSPA_Handle instance, LADSPA_Data gain) { + ((MatrixSpatialiser *)instance)->run_adding_gain = gain; +} + +static void runAddingMatrixSpatialiser(LADSPA_Handle instance, unsigned long sample_count) { + MatrixSpatialiser *plugin_data = (MatrixSpatialiser *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Input L (array of floats of length sample_count) */ + const LADSPA_Data * const i_left = plugin_data->i_left; + + /* Input R (array of floats of length sample_count) */ + const LADSPA_Data * const i_right = plugin_data->i_right; + + /* Width (float value) */ + const LADSPA_Data width = *(plugin_data->width); + + /* Output L (array of floats of length sample_count) */ + LADSPA_Data * const o_left = plugin_data->o_left; + + /* Output R (array of floats of length sample_count) */ + LADSPA_Data * const o_right = plugin_data->o_right; + LADSPA_Data current_m_gain = plugin_data->current_m_gain; + LADSPA_Data current_s_gain = plugin_data->current_s_gain; + +#line 100 "matrix_spatialiser_1422.xml" + unsigned long pos; + LADSPA_Data mid, side; + LADSPA_Data m_gain, s_gain; + int width_ = f_round(width + EQUALGAINPOINT_OFFSET); + + /* smoothen the gain changes. to spread the curve over the entire + buffer length (i.e.#sample_count samples), make lp dependent on + sample_count. + */ + const float lp = 7.0f / (float) sample_count; /* value found by experiment */ + const float lp_i = 1.0f - lp; + + /* do approximately the same as + s_gain = sin(width); m_gain = cos(width); + but a lot faster: + */ + sin_cos_approx(width_, &s_gain, &m_gain); + + m_gain *= EQUALGAINPOINT_TO_UNITY; /* normalize the neutral */ + s_gain *= EQUALGAINPOINT_TO_UNITY; /* setting to unity gain. */ + + #ifdef DEBUG + /* do a "hardware bypass" if width == 0 */ + /* no smoothing here */ + if (width_ == 128) { + for (pos = 0; pos < sample_count; pos++) { + buffer_write(o_left[pos], i_left[pos]); + buffer_write(o_right[pos], i_right[pos]); + } + } else + #endif + + for (pos = 0; pos < sample_count; pos++) { + current_m_gain = current_m_gain * lp_i + m_gain * lp; + current_s_gain = current_s_gain * lp_i + s_gain * lp; + mid = (i_left[pos] + i_right[pos]) * 0.5f * current_m_gain; + side = (i_left[pos] - i_right[pos]) * 0.5f * current_s_gain; + buffer_write(o_left[pos], mid + side); + buffer_write(o_right[pos], mid - side); + } + + plugin_data->current_m_gain = current_m_gain; + plugin_data->current_s_gain = current_s_gain; +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + matrixSpatialiserDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (matrixSpatialiserDescriptor) { + matrixSpatialiserDescriptor->UniqueID = 1422; + matrixSpatialiserDescriptor->Label = "matrixSpatialiser"; + matrixSpatialiserDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + matrixSpatialiserDescriptor->Name = + D_("Matrix Spatialiser"); + matrixSpatialiserDescriptor->Maker = + "Joern Nettingsmeier "; + matrixSpatialiserDescriptor->Copyright = + "GPL"; + matrixSpatialiserDescriptor->PortCount = 5; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(5, + sizeof(LADSPA_PortDescriptor)); + matrixSpatialiserDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(5, + sizeof(LADSPA_PortRangeHint)); + matrixSpatialiserDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(5, sizeof(char*)); + matrixSpatialiserDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Input L */ + port_descriptors[MATRIXSPATIALISER_I_LEFT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[MATRIXSPATIALISER_I_LEFT] = + D_("Input L"); + port_range_hints[MATRIXSPATIALISER_I_LEFT].HintDescriptor = 0; + + /* Parameters for Input R */ + port_descriptors[MATRIXSPATIALISER_I_RIGHT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[MATRIXSPATIALISER_I_RIGHT] = + D_("Input R"); + port_range_hints[MATRIXSPATIALISER_I_RIGHT].HintDescriptor = 0; + + /* Parameters for Width */ + port_descriptors[MATRIXSPATIALISER_WIDTH] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[MATRIXSPATIALISER_WIDTH] = + D_("Width"); + port_range_hints[MATRIXSPATIALISER_WIDTH].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_INTEGER | LADSPA_HINT_DEFAULT_0; + port_range_hints[MATRIXSPATIALISER_WIDTH].LowerBound = -512; + port_range_hints[MATRIXSPATIALISER_WIDTH].UpperBound = 512; + + /* Parameters for Output L */ + port_descriptors[MATRIXSPATIALISER_O_LEFT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[MATRIXSPATIALISER_O_LEFT] = + D_("Output L"); + port_range_hints[MATRIXSPATIALISER_O_LEFT].HintDescriptor = 0; + + /* Parameters for Output R */ + port_descriptors[MATRIXSPATIALISER_O_RIGHT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[MATRIXSPATIALISER_O_RIGHT] = + D_("Output R"); + port_range_hints[MATRIXSPATIALISER_O_RIGHT].HintDescriptor = 0; + + matrixSpatialiserDescriptor->activate = activateMatrixSpatialiser; + matrixSpatialiserDescriptor->cleanup = cleanupMatrixSpatialiser; + matrixSpatialiserDescriptor->connect_port = connectPortMatrixSpatialiser; + matrixSpatialiserDescriptor->deactivate = NULL; + matrixSpatialiserDescriptor->instantiate = instantiateMatrixSpatialiser; + matrixSpatialiserDescriptor->run = runMatrixSpatialiser; + matrixSpatialiserDescriptor->run_adding = runAddingMatrixSpatialiser; + matrixSpatialiserDescriptor->set_run_adding_gain = setRunAddingGainMatrixSpatialiser; + } +} + +void _fini() { + if (matrixSpatialiserDescriptor) { + free((LADSPA_PortDescriptor *)matrixSpatialiserDescriptor->PortDescriptors); + free((char **)matrixSpatialiserDescriptor->PortNames); + free((LADSPA_PortRangeHint *)matrixSpatialiserDescriptor->PortRangeHints); + free(matrixSpatialiserDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/matrix_st_ms_1420.c b/plugins/LadspaEffect/swh/matrix_st_ms_1420.c new file mode 100644 index 000000000..c41c76210 --- /dev/null +++ b/plugins/LadspaEffect/swh/matrix_st_ms_1420.c @@ -0,0 +1,256 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + + +#define MATRIXSTMS_LEFT 0 +#define MATRIXSTMS_RIGHT 1 +#define MATRIXSTMS_MID 2 +#define MATRIXSTMS_SIDE 3 + +static LADSPA_Descriptor *matrixStMSDescriptor = NULL; + +typedef struct { + LADSPA_Data *left; + LADSPA_Data *right; + LADSPA_Data *mid; + LADSPA_Data *side; + LADSPA_Data run_adding_gain; +} MatrixStMS; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return matrixStMSDescriptor; + default: + return NULL; + } +} + +static void cleanupMatrixStMS(LADSPA_Handle instance) { + free(instance); +} + +static void connectPortMatrixStMS( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + MatrixStMS *plugin; + + plugin = (MatrixStMS *)instance; + switch (port) { + case MATRIXSTMS_LEFT: + plugin->left = data; + break; + case MATRIXSTMS_RIGHT: + plugin->right = data; + break; + case MATRIXSTMS_MID: + plugin->mid = data; + break; + case MATRIXSTMS_SIDE: + plugin->side = data; + break; + } +} + +static LADSPA_Handle instantiateMatrixStMS( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + MatrixStMS *plugin_data = (MatrixStMS *)malloc(sizeof(MatrixStMS)); + plugin_data->run_adding_gain = 1.0f; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runMatrixStMS(LADSPA_Handle instance, unsigned long sample_count) { + MatrixStMS *plugin_data = (MatrixStMS *)instance; + + /* Left (array of floats of length sample_count) */ + const LADSPA_Data * const left = plugin_data->left; + + /* Right (array of floats of length sample_count) */ + const LADSPA_Data * const right = plugin_data->right; + + /* Mid (array of floats of length sample_count) */ + LADSPA_Data * const mid = plugin_data->mid; + + /* Side (array of floats of length sample_count) */ + LADSPA_Data * const side = plugin_data->side; + +#line 16 "matrix_st_ms_1420.xml" + unsigned long pos; + + for (pos = 0; pos < sample_count; pos++) { + buffer_write(mid[pos], (left[pos] + right[pos]) * 0.5); + buffer_write(side[pos], (left[pos] - right[pos]) * 0.5); + } +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainMatrixStMS(LADSPA_Handle instance, LADSPA_Data gain) { + ((MatrixStMS *)instance)->run_adding_gain = gain; +} + +static void runAddingMatrixStMS(LADSPA_Handle instance, unsigned long sample_count) { + MatrixStMS *plugin_data = (MatrixStMS *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Left (array of floats of length sample_count) */ + const LADSPA_Data * const left = plugin_data->left; + + /* Right (array of floats of length sample_count) */ + const LADSPA_Data * const right = plugin_data->right; + + /* Mid (array of floats of length sample_count) */ + LADSPA_Data * const mid = plugin_data->mid; + + /* Side (array of floats of length sample_count) */ + LADSPA_Data * const side = plugin_data->side; + +#line 16 "matrix_st_ms_1420.xml" + unsigned long pos; + + for (pos = 0; pos < sample_count; pos++) { + buffer_write(mid[pos], (left[pos] + right[pos]) * 0.5); + buffer_write(side[pos], (left[pos] - right[pos]) * 0.5); + } +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + matrixStMSDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (matrixStMSDescriptor) { + matrixStMSDescriptor->UniqueID = 1420; + matrixStMSDescriptor->Label = "matrixStMS"; + matrixStMSDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + matrixStMSDescriptor->Name = + D_("Matrix: Stereo to MS"); + matrixStMSDescriptor->Maker = + "Steve Harris "; + matrixStMSDescriptor->Copyright = + "GPL"; + matrixStMSDescriptor->PortCount = 4; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(4, + sizeof(LADSPA_PortDescriptor)); + matrixStMSDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(4, + sizeof(LADSPA_PortRangeHint)); + matrixStMSDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(4, sizeof(char*)); + matrixStMSDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Left */ + port_descriptors[MATRIXSTMS_LEFT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[MATRIXSTMS_LEFT] = + D_("Left"); + port_range_hints[MATRIXSTMS_LEFT].HintDescriptor = 0; + + /* Parameters for Right */ + port_descriptors[MATRIXSTMS_RIGHT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[MATRIXSTMS_RIGHT] = + D_("Right"); + port_range_hints[MATRIXSTMS_RIGHT].HintDescriptor = 0; + + /* Parameters for Mid */ + port_descriptors[MATRIXSTMS_MID] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[MATRIXSTMS_MID] = + D_("Mid"); + port_range_hints[MATRIXSTMS_MID].HintDescriptor = 0; + + /* Parameters for Side */ + port_descriptors[MATRIXSTMS_SIDE] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[MATRIXSTMS_SIDE] = + D_("Side"); + port_range_hints[MATRIXSTMS_SIDE].HintDescriptor = 0; + + matrixStMSDescriptor->activate = NULL; + matrixStMSDescriptor->cleanup = cleanupMatrixStMS; + matrixStMSDescriptor->connect_port = connectPortMatrixStMS; + matrixStMSDescriptor->deactivate = NULL; + matrixStMSDescriptor->instantiate = instantiateMatrixStMS; + matrixStMSDescriptor->run = runMatrixStMS; + matrixStMSDescriptor->run_adding = runAddingMatrixStMS; + matrixStMSDescriptor->set_run_adding_gain = setRunAddingGainMatrixStMS; + } +} + +void _fini() { + if (matrixStMSDescriptor) { + free((LADSPA_PortDescriptor *)matrixStMSDescriptor->PortDescriptors); + free((char **)matrixStMSDescriptor->PortNames); + free((LADSPA_PortRangeHint *)matrixStMSDescriptor->PortRangeHints); + free(matrixStMSDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/mbeq_1197.c b/plugins/LadspaEffect/swh/mbeq_1197.c new file mode 100644 index 000000000..09b51f1fb --- /dev/null +++ b/plugins/LadspaEffect/swh/mbeq_1197.c @@ -0,0 +1,896 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + +#line 9 "mbeq_1197.xml" + +#include "config.h" + +#ifdef FFTW3 + +#include + +typedef fftwf_plan fft_plan; +typedef float fftw_real; + +#else + +#ifdef EXPLICIT_S +#include +#else +#include +#endif //EXPLICIT_S + +typedef rfftw_plan fft_plan; + +#endif //FFTW3 + +#include "ladspa-util.h" + +#define FFT_LENGTH 1024 +#define OVER_SAMP 4 +#define BANDS 15 + + +float bands[BANDS] = + { 50.00f, 100.00f, 155.56f, 220.00f, 311.13f, + 440.00f, 622.25f, 880.00f, 1244.51f, 1760.00f, 2489.02f, + 3519.95, 4978.04f, 9956.08f, 19912.16f }; + +#define MBEQ_BAND_1 0 +#define MBEQ_BAND_2 1 +#define MBEQ_BAND_3 2 +#define MBEQ_BAND_4 3 +#define MBEQ_BAND_5 4 +#define MBEQ_BAND_6 5 +#define MBEQ_BAND_7 6 +#define MBEQ_BAND_8 7 +#define MBEQ_BAND_9 8 +#define MBEQ_BAND_10 9 +#define MBEQ_BAND_11 10 +#define MBEQ_BAND_12 11 +#define MBEQ_BAND_13 12 +#define MBEQ_BAND_14 13 +#define MBEQ_BAND_15 14 +#define MBEQ_INPUT 15 +#define MBEQ_OUTPUT 16 +#define MBEQ_LATENCY 17 + +static LADSPA_Descriptor *mbeqDescriptor = NULL; + +typedef struct { + LADSPA_Data *band_1; + LADSPA_Data *band_2; + LADSPA_Data *band_3; + LADSPA_Data *band_4; + LADSPA_Data *band_5; + LADSPA_Data *band_6; + LADSPA_Data *band_7; + LADSPA_Data *band_8; + LADSPA_Data *band_9; + LADSPA_Data *band_10; + LADSPA_Data *band_11; + LADSPA_Data *band_12; + LADSPA_Data *band_13; + LADSPA_Data *band_14; + LADSPA_Data *band_15; + LADSPA_Data *input; + LADSPA_Data *output; + LADSPA_Data *latency; + int * bin_base; + float * bin_delta; + fftw_real * comp; + float * db_table; + long fifo_pos; + LADSPA_Data *in_fifo; + LADSPA_Data *out_accum; + LADSPA_Data *out_fifo; + fft_plan plan_cr; + fft_plan plan_rc; + fftw_real * real; + float * window; + LADSPA_Data run_adding_gain; +} Mbeq; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return mbeqDescriptor; + default: + return NULL; + } +} + +static void activateMbeq(LADSPA_Handle instance) { + Mbeq *plugin_data = (Mbeq *)instance; + int *bin_base = plugin_data->bin_base; + float *bin_delta = plugin_data->bin_delta; + fftw_real *comp = plugin_data->comp; + float *db_table = plugin_data->db_table; + long fifo_pos = plugin_data->fifo_pos; + LADSPA_Data *in_fifo = plugin_data->in_fifo; + LADSPA_Data *out_accum = plugin_data->out_accum; + LADSPA_Data *out_fifo = plugin_data->out_fifo; + fft_plan plan_cr = plugin_data->plan_cr; + fft_plan plan_rc = plugin_data->plan_rc; + fftw_real *real = plugin_data->real; + float *window = plugin_data->window; +#line 109 "mbeq_1197.xml" + fifo_pos = 0; + plugin_data->bin_base = bin_base; + plugin_data->bin_delta = bin_delta; + plugin_data->comp = comp; + plugin_data->db_table = db_table; + plugin_data->fifo_pos = fifo_pos; + plugin_data->in_fifo = in_fifo; + plugin_data->out_accum = out_accum; + plugin_data->out_fifo = out_fifo; + plugin_data->plan_cr = plan_cr; + plugin_data->plan_rc = plan_rc; + plugin_data->real = real; + plugin_data->window = window; + +} + +static void cleanupMbeq(LADSPA_Handle instance) { +#line 113 "mbeq_1197.xml" + Mbeq *plugin_data = (Mbeq *)instance; + free(plugin_data->in_fifo); + free(plugin_data->out_fifo); + free(plugin_data->out_accum); + free(plugin_data->real); + free(plugin_data->comp); + free(plugin_data->window); + free(plugin_data->bin_base); + free(plugin_data->bin_delta); + free(plugin_data->db_table); + free(instance); +} + +static void connectPortMbeq( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + Mbeq *plugin; + + plugin = (Mbeq *)instance; + switch (port) { + case MBEQ_BAND_1: + plugin->band_1 = data; + break; + case MBEQ_BAND_2: + plugin->band_2 = data; + break; + case MBEQ_BAND_3: + plugin->band_3 = data; + break; + case MBEQ_BAND_4: + plugin->band_4 = data; + break; + case MBEQ_BAND_5: + plugin->band_5 = data; + break; + case MBEQ_BAND_6: + plugin->band_6 = data; + break; + case MBEQ_BAND_7: + plugin->band_7 = data; + break; + case MBEQ_BAND_8: + plugin->band_8 = data; + break; + case MBEQ_BAND_9: + plugin->band_9 = data; + break; + case MBEQ_BAND_10: + plugin->band_10 = data; + break; + case MBEQ_BAND_11: + plugin->band_11 = data; + break; + case MBEQ_BAND_12: + plugin->band_12 = data; + break; + case MBEQ_BAND_13: + plugin->band_13 = data; + break; + case MBEQ_BAND_14: + plugin->band_14 = data; + break; + case MBEQ_BAND_15: + plugin->band_15 = data; + break; + case MBEQ_INPUT: + plugin->input = data; + break; + case MBEQ_OUTPUT: + plugin->output = data; + break; + case MBEQ_LATENCY: + plugin->latency = data; + break; + } +} + +static LADSPA_Handle instantiateMbeq( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + Mbeq *plugin_data = (Mbeq *)malloc(sizeof(Mbeq)); + int *bin_base = NULL; + float *bin_delta = NULL; + fftw_real *comp = NULL; + float *db_table = NULL; + long fifo_pos; + LADSPA_Data *in_fifo = NULL; + LADSPA_Data *out_accum = NULL; + LADSPA_Data *out_fifo = NULL; + fft_plan plan_cr; + fft_plan plan_rc; + fftw_real *real = NULL; + float *window = NULL; + +#line 51 "mbeq_1197.xml" + int i, bin; + float last_bin, next_bin; + float db; + float hz_per_bin = (float)s_rate / (float)FFT_LENGTH; + + in_fifo = calloc(FFT_LENGTH, sizeof(LADSPA_Data)); + out_fifo = calloc(FFT_LENGTH, sizeof(LADSPA_Data)); + out_accum = calloc(FFT_LENGTH * 2, sizeof(LADSPA_Data)); + real = calloc(FFT_LENGTH, sizeof(fftw_real)); + comp = calloc(FFT_LENGTH, sizeof(fftw_real)); + window = calloc(FFT_LENGTH, sizeof(float)); + bin_base = calloc(FFT_LENGTH/2, sizeof(int)); + bin_delta = calloc(FFT_LENGTH/2, sizeof(float)); + fifo_pos = 0; + + #ifdef FFTW3 + plan_rc = fftwf_plan_r2r_1d(FFT_LENGTH, real, comp, FFTW_R2HC, FFTW_MEASURE); + plan_cr = fftwf_plan_r2r_1d(FFT_LENGTH, comp, real, FFTW_HC2R, FFTW_MEASURE); + #else + plan_rc = rfftw_create_plan(FFT_LENGTH, FFTW_REAL_TO_COMPLEX, FFTW_ESTIMATE); + plan_cr = rfftw_create_plan(FFT_LENGTH, FFTW_COMPLEX_TO_REAL, FFTW_ESTIMATE); + #endif + + // Create raised cosine window table + for (i=0; i < FFT_LENGTH; i++) { + window[i] = -0.5f*cos(2.0f*M_PI*(double)i/(double)FFT_LENGTH)+0.5f; + window[i] *= 2.0f; + } + + // Create db->coeffiecnt lookup table + db_table = malloc(1000 * sizeof(float)); + for (i=0; i < 1000; i++) { + db = ((float)i/10) - 70; + db_table[i] = pow(10.0f, db/20.0f); + } + + // Create FFT bin -> band + delta tables + bin = 0; + while (bin <= bands[0]/hz_per_bin) { + bin_base[bin] = 0; + bin_delta[bin++] = 0.0f; + } + for (i = 1; i < BANDS-1 && bin < (FFT_LENGTH/2)-1 && bands[i+1] < s_rate/2; i++) { + last_bin = bin; + next_bin = (bands[i+1])/hz_per_bin; + while (bin <= next_bin) { + bin_base[bin] = i; + bin_delta[bin] = (float)(bin - last_bin) / (float)(next_bin - last_bin); + bin++; + } + } + for (; bin < (FFT_LENGTH/2); bin++) { + bin_base[bin] = BANDS-1; + bin_delta[bin] = 0.0f; + } + + plugin_data->bin_base = bin_base; + plugin_data->bin_delta = bin_delta; + plugin_data->comp = comp; + plugin_data->db_table = db_table; + plugin_data->fifo_pos = fifo_pos; + plugin_data->in_fifo = in_fifo; + plugin_data->out_accum = out_accum; + plugin_data->out_fifo = out_fifo; + plugin_data->plan_cr = plan_cr; + plugin_data->plan_rc = plan_rc; + plugin_data->real = real; + plugin_data->window = window; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runMbeq(LADSPA_Handle instance, unsigned long sample_count) { + Mbeq *plugin_data = (Mbeq *)instance; + + /* 50Hz gain (low shelving) (float value) */ + const LADSPA_Data band_1 = *(plugin_data->band_1); + + /* 100Hz gain (float value) */ + const LADSPA_Data band_2 = *(plugin_data->band_2); + + /* 156Hz gain (float value) */ + const LADSPA_Data band_3 = *(plugin_data->band_3); + + /* 220Hz gain (float value) */ + const LADSPA_Data band_4 = *(plugin_data->band_4); + + /* 311Hz gain (float value) */ + const LADSPA_Data band_5 = *(plugin_data->band_5); + + /* 440Hz gain (float value) */ + const LADSPA_Data band_6 = *(plugin_data->band_6); + + /* 622Hz gain (float value) */ + const LADSPA_Data band_7 = *(plugin_data->band_7); + + /* 880Hz gain (float value) */ + const LADSPA_Data band_8 = *(plugin_data->band_8); + + /* 1250Hz gain (float value) */ + const LADSPA_Data band_9 = *(plugin_data->band_9); + + /* 1750Hz gain (float value) */ + const LADSPA_Data band_10 = *(plugin_data->band_10); + + /* 2500Hz gain (float value) */ + const LADSPA_Data band_11 = *(plugin_data->band_11); + + /* 3500Hz gain (float value) */ + const LADSPA_Data band_12 = *(plugin_data->band_12); + + /* 5000Hz gain (float value) */ + const LADSPA_Data band_13 = *(plugin_data->band_13); + + /* 10000Hz gain (float value) */ + const LADSPA_Data band_14 = *(plugin_data->band_14); + + /* 20000Hz gain (float value) */ + const LADSPA_Data band_15 = *(plugin_data->band_15); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + int * bin_base = plugin_data->bin_base; + float * bin_delta = plugin_data->bin_delta; + fftw_real * comp = plugin_data->comp; + float * db_table = plugin_data->db_table; + long fifo_pos = plugin_data->fifo_pos; + LADSPA_Data * in_fifo = plugin_data->in_fifo; + LADSPA_Data * out_accum = plugin_data->out_accum; + LADSPA_Data * out_fifo = plugin_data->out_fifo; + fft_plan plan_cr = plugin_data->plan_cr; + fft_plan plan_rc = plugin_data->plan_rc; + fftw_real * real = plugin_data->real; + float * window = plugin_data->window; + +#line 125 "mbeq_1197.xml" + int i, bin, gain_idx; + float gains[BANDS + 1] = + { band_1, band_2, band_3, band_4, band_5, band_6, band_7, band_8, band_9, + band_10, band_11, band_12, band_13, band_14, band_15, 0.0f }; + float coefs[FFT_LENGTH / 2]; + unsigned long pos; + + int step_size = FFT_LENGTH / OVER_SAMP; + int fft_latency = FFT_LENGTH - step_size; + + // Convert gains from dB to co-efficents + for (i = 0; i < BANDS; i++) { + gain_idx = (int)((gains[i] * 10) + 700); + gains[i] = db_table[LIMIT(gain_idx, 0, 999)]; + } + + // Calculate coefficients for each bin of FFT + coefs[0] = 0.0f; + for (bin=1; bin < (FFT_LENGTH/2-1); bin++) { + coefs[bin] = ((1.0f-bin_delta[bin]) * gains[bin_base[bin]]) + + (bin_delta[bin] * gains[bin_base[bin]+1]); + } + + if (fifo_pos == 0) { + fifo_pos = fft_latency; + } + + for (pos = 0; pos < sample_count; pos++) { + in_fifo[fifo_pos] = input[pos]; + buffer_write(output[pos], out_fifo[fifo_pos-fft_latency]); + fifo_pos++; + + // If the FIFO is full + if (fifo_pos >= FFT_LENGTH) { + fifo_pos = fft_latency; + + // Window input FIFO + for (i=0; i < FFT_LENGTH; i++) { + real[i] = in_fifo[i] * window[i]; + } + + // Run the real->complex transform + #ifdef FFTW3 + fftwf_execute(plan_rc); + #else + rfftw_one(plan_rc, real, comp); + #endif + + // Multiply the bins magnitudes by the coeficients + comp[0] *= coefs[0]; + for (i = 1; i < FFT_LENGTH/2; i++) { + comp[i] *= coefs[i]; + comp[FFT_LENGTH-i] *= coefs[i]; + } + + // Run the complex->real transform + #ifdef FFTW3 + fftwf_execute(plan_cr); + #else + rfftw_one(plan_cr, comp, real); + #endif + + // Window into the output accumulator + for (i = 0; i < FFT_LENGTH; i++) { + out_accum[i] += 0.9186162f * window[i] * real[i]/(FFT_LENGTH * OVER_SAMP); + } + for (i = 0; i < step_size; i++) { + out_fifo[i] = out_accum[i]; + } + + // Shift output accumulator + memmove(out_accum, out_accum + step_size, FFT_LENGTH*sizeof(LADSPA_Data)); + + // Shift input fifo + for (i = 0; i < fft_latency; i++) { + in_fifo[i] = in_fifo[i+step_size]; + } + } + } + + // Store the fifo_position + plugin_data->fifo_pos = fifo_pos; + + *(plugin_data->latency) = fft_latency; +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainMbeq(LADSPA_Handle instance, LADSPA_Data gain) { + ((Mbeq *)instance)->run_adding_gain = gain; +} + +static void runAddingMbeq(LADSPA_Handle instance, unsigned long sample_count) { + Mbeq *plugin_data = (Mbeq *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* 50Hz gain (low shelving) (float value) */ + const LADSPA_Data band_1 = *(plugin_data->band_1); + + /* 100Hz gain (float value) */ + const LADSPA_Data band_2 = *(plugin_data->band_2); + + /* 156Hz gain (float value) */ + const LADSPA_Data band_3 = *(plugin_data->band_3); + + /* 220Hz gain (float value) */ + const LADSPA_Data band_4 = *(plugin_data->band_4); + + /* 311Hz gain (float value) */ + const LADSPA_Data band_5 = *(plugin_data->band_5); + + /* 440Hz gain (float value) */ + const LADSPA_Data band_6 = *(plugin_data->band_6); + + /* 622Hz gain (float value) */ + const LADSPA_Data band_7 = *(plugin_data->band_7); + + /* 880Hz gain (float value) */ + const LADSPA_Data band_8 = *(plugin_data->band_8); + + /* 1250Hz gain (float value) */ + const LADSPA_Data band_9 = *(plugin_data->band_9); + + /* 1750Hz gain (float value) */ + const LADSPA_Data band_10 = *(plugin_data->band_10); + + /* 2500Hz gain (float value) */ + const LADSPA_Data band_11 = *(plugin_data->band_11); + + /* 3500Hz gain (float value) */ + const LADSPA_Data band_12 = *(plugin_data->band_12); + + /* 5000Hz gain (float value) */ + const LADSPA_Data band_13 = *(plugin_data->band_13); + + /* 10000Hz gain (float value) */ + const LADSPA_Data band_14 = *(plugin_data->band_14); + + /* 20000Hz gain (float value) */ + const LADSPA_Data band_15 = *(plugin_data->band_15); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + int * bin_base = plugin_data->bin_base; + float * bin_delta = plugin_data->bin_delta; + fftw_real * comp = plugin_data->comp; + float * db_table = plugin_data->db_table; + long fifo_pos = plugin_data->fifo_pos; + LADSPA_Data * in_fifo = plugin_data->in_fifo; + LADSPA_Data * out_accum = plugin_data->out_accum; + LADSPA_Data * out_fifo = plugin_data->out_fifo; + fft_plan plan_cr = plugin_data->plan_cr; + fft_plan plan_rc = plugin_data->plan_rc; + fftw_real * real = plugin_data->real; + float * window = plugin_data->window; + +#line 125 "mbeq_1197.xml" + int i, bin, gain_idx; + float gains[BANDS + 1] = + { band_1, band_2, band_3, band_4, band_5, band_6, band_7, band_8, band_9, + band_10, band_11, band_12, band_13, band_14, band_15, 0.0f }; + float coefs[FFT_LENGTH / 2]; + unsigned long pos; + + int step_size = FFT_LENGTH / OVER_SAMP; + int fft_latency = FFT_LENGTH - step_size; + + // Convert gains from dB to co-efficents + for (i = 0; i < BANDS; i++) { + gain_idx = (int)((gains[i] * 10) + 700); + gains[i] = db_table[LIMIT(gain_idx, 0, 999)]; + } + + // Calculate coefficients for each bin of FFT + coefs[0] = 0.0f; + for (bin=1; bin < (FFT_LENGTH/2-1); bin++) { + coefs[bin] = ((1.0f-bin_delta[bin]) * gains[bin_base[bin]]) + + (bin_delta[bin] * gains[bin_base[bin]+1]); + } + + if (fifo_pos == 0) { + fifo_pos = fft_latency; + } + + for (pos = 0; pos < sample_count; pos++) { + in_fifo[fifo_pos] = input[pos]; + buffer_write(output[pos], out_fifo[fifo_pos-fft_latency]); + fifo_pos++; + + // If the FIFO is full + if (fifo_pos >= FFT_LENGTH) { + fifo_pos = fft_latency; + + // Window input FIFO + for (i=0; i < FFT_LENGTH; i++) { + real[i] = in_fifo[i] * window[i]; + } + + // Run the real->complex transform + #ifdef FFTW3 + fftwf_execute(plan_rc); + #else + rfftw_one(plan_rc, real, comp); + #endif + + // Multiply the bins magnitudes by the coeficients + comp[0] *= coefs[0]; + for (i = 1; i < FFT_LENGTH/2; i++) { + comp[i] *= coefs[i]; + comp[FFT_LENGTH-i] *= coefs[i]; + } + + // Run the complex->real transform + #ifdef FFTW3 + fftwf_execute(plan_cr); + #else + rfftw_one(plan_cr, comp, real); + #endif + + // Window into the output accumulator + for (i = 0; i < FFT_LENGTH; i++) { + out_accum[i] += 0.9186162f * window[i] * real[i]/(FFT_LENGTH * OVER_SAMP); + } + for (i = 0; i < step_size; i++) { + out_fifo[i] = out_accum[i]; + } + + // Shift output accumulator + memmove(out_accum, out_accum + step_size, FFT_LENGTH*sizeof(LADSPA_Data)); + + // Shift input fifo + for (i = 0; i < fft_latency; i++) { + in_fifo[i] = in_fifo[i+step_size]; + } + } + } + + // Store the fifo_position + plugin_data->fifo_pos = fifo_pos; + + *(plugin_data->latency) = fft_latency; +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + mbeqDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (mbeqDescriptor) { + mbeqDescriptor->UniqueID = 1197; + mbeqDescriptor->Label = "mbeq"; + mbeqDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + mbeqDescriptor->Name = + D_("Multiband EQ"); + mbeqDescriptor->Maker = + "Steve Harris "; + mbeqDescriptor->Copyright = + "GPL"; + mbeqDescriptor->PortCount = 18; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(18, + sizeof(LADSPA_PortDescriptor)); + mbeqDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(18, + sizeof(LADSPA_PortRangeHint)); + mbeqDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(18, sizeof(char*)); + mbeqDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for 50Hz gain (low shelving) */ + port_descriptors[MBEQ_BAND_1] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[MBEQ_BAND_1] = + D_("50Hz gain (low shelving)"); + port_range_hints[MBEQ_BAND_1].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[MBEQ_BAND_1].LowerBound = -70; + port_range_hints[MBEQ_BAND_1].UpperBound = +30; + + /* Parameters for 100Hz gain */ + port_descriptors[MBEQ_BAND_2] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[MBEQ_BAND_2] = + D_("100Hz gain"); + port_range_hints[MBEQ_BAND_2].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[MBEQ_BAND_2].LowerBound = -70; + port_range_hints[MBEQ_BAND_2].UpperBound = +30; + + /* Parameters for 156Hz gain */ + port_descriptors[MBEQ_BAND_3] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[MBEQ_BAND_3] = + D_("156Hz gain"); + port_range_hints[MBEQ_BAND_3].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[MBEQ_BAND_3].LowerBound = -70; + port_range_hints[MBEQ_BAND_3].UpperBound = +30; + + /* Parameters for 220Hz gain */ + port_descriptors[MBEQ_BAND_4] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[MBEQ_BAND_4] = + D_("220Hz gain"); + port_range_hints[MBEQ_BAND_4].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[MBEQ_BAND_4].LowerBound = -70; + port_range_hints[MBEQ_BAND_4].UpperBound = +30; + + /* Parameters for 311Hz gain */ + port_descriptors[MBEQ_BAND_5] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[MBEQ_BAND_5] = + D_("311Hz gain"); + port_range_hints[MBEQ_BAND_5].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[MBEQ_BAND_5].LowerBound = -70; + port_range_hints[MBEQ_BAND_5].UpperBound = +30; + + /* Parameters for 440Hz gain */ + port_descriptors[MBEQ_BAND_6] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[MBEQ_BAND_6] = + D_("440Hz gain"); + port_range_hints[MBEQ_BAND_6].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[MBEQ_BAND_6].LowerBound = -70; + port_range_hints[MBEQ_BAND_6].UpperBound = +30; + + /* Parameters for 622Hz gain */ + port_descriptors[MBEQ_BAND_7] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[MBEQ_BAND_7] = + D_("622Hz gain"); + port_range_hints[MBEQ_BAND_7].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[MBEQ_BAND_7].LowerBound = -70; + port_range_hints[MBEQ_BAND_7].UpperBound = +30; + + /* Parameters for 880Hz gain */ + port_descriptors[MBEQ_BAND_8] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[MBEQ_BAND_8] = + D_("880Hz gain"); + port_range_hints[MBEQ_BAND_8].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[MBEQ_BAND_8].LowerBound = -70; + port_range_hints[MBEQ_BAND_8].UpperBound = +30; + + /* Parameters for 1250Hz gain */ + port_descriptors[MBEQ_BAND_9] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[MBEQ_BAND_9] = + D_("1250Hz gain"); + port_range_hints[MBEQ_BAND_9].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[MBEQ_BAND_9].LowerBound = -70; + port_range_hints[MBEQ_BAND_9].UpperBound = +30; + + /* Parameters for 1750Hz gain */ + port_descriptors[MBEQ_BAND_10] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[MBEQ_BAND_10] = + D_("1750Hz gain"); + port_range_hints[MBEQ_BAND_10].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[MBEQ_BAND_10].LowerBound = -70; + port_range_hints[MBEQ_BAND_10].UpperBound = +30; + + /* Parameters for 2500Hz gain */ + port_descriptors[MBEQ_BAND_11] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[MBEQ_BAND_11] = + D_("2500Hz gain"); + port_range_hints[MBEQ_BAND_11].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[MBEQ_BAND_11].LowerBound = -70; + port_range_hints[MBEQ_BAND_11].UpperBound = +30; + + /* Parameters for 3500Hz gain */ + port_descriptors[MBEQ_BAND_12] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[MBEQ_BAND_12] = + D_("3500Hz gain"); + port_range_hints[MBEQ_BAND_12].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[MBEQ_BAND_12].LowerBound = -70; + port_range_hints[MBEQ_BAND_12].UpperBound = +30; + + /* Parameters for 5000Hz gain */ + port_descriptors[MBEQ_BAND_13] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[MBEQ_BAND_13] = + D_("5000Hz gain"); + port_range_hints[MBEQ_BAND_13].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[MBEQ_BAND_13].LowerBound = -70; + port_range_hints[MBEQ_BAND_13].UpperBound = +30; + + /* Parameters for 10000Hz gain */ + port_descriptors[MBEQ_BAND_14] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[MBEQ_BAND_14] = + D_("10000Hz gain"); + port_range_hints[MBEQ_BAND_14].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[MBEQ_BAND_14].LowerBound = -70; + port_range_hints[MBEQ_BAND_14].UpperBound = +30; + + /* Parameters for 20000Hz gain */ + port_descriptors[MBEQ_BAND_15] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[MBEQ_BAND_15] = + D_("20000Hz gain"); + port_range_hints[MBEQ_BAND_15].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[MBEQ_BAND_15].LowerBound = -70; + port_range_hints[MBEQ_BAND_15].UpperBound = +30; + + /* Parameters for Input */ + port_descriptors[MBEQ_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[MBEQ_INPUT] = + D_("Input"); + port_range_hints[MBEQ_INPUT].HintDescriptor = 0; + + /* Parameters for Output */ + port_descriptors[MBEQ_OUTPUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[MBEQ_OUTPUT] = + D_("Output"); + port_range_hints[MBEQ_OUTPUT].HintDescriptor = 0; + + /* Parameters for latency */ + port_descriptors[MBEQ_LATENCY] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_CONTROL; + port_names[MBEQ_LATENCY] = + D_("latency"); + port_range_hints[MBEQ_LATENCY].HintDescriptor = 0; + + mbeqDescriptor->activate = activateMbeq; + mbeqDescriptor->cleanup = cleanupMbeq; + mbeqDescriptor->connect_port = connectPortMbeq; + mbeqDescriptor->deactivate = NULL; + mbeqDescriptor->instantiate = instantiateMbeq; + mbeqDescriptor->run = runMbeq; + mbeqDescriptor->run_adding = runAddingMbeq; + mbeqDescriptor->set_run_adding_gain = setRunAddingGainMbeq; + } +} + +void _fini() { + if (mbeqDescriptor) { + free((LADSPA_PortDescriptor *)mbeqDescriptor->PortDescriptors); + free((char **)mbeqDescriptor->PortNames); + free((LADSPA_PortRangeHint *)mbeqDescriptor->PortRangeHints); + free(mbeqDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/mod_delay_1419.c b/plugins/LadspaEffect/swh/mod_delay_1419.c new file mode 100644 index 000000000..67e1a0337 --- /dev/null +++ b/plugins/LadspaEffect/swh/mod_delay_1419.c @@ -0,0 +1,329 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + +#line 10 "mod_delay_1419.xml" + +#include "ladspa-util.h" + +#define MODDELAY_BASE 0 +#define MODDELAY_DELAY 1 +#define MODDELAY_INPUT 2 +#define MODDELAY_OUTPUT 3 + +static LADSPA_Descriptor *modDelayDescriptor = NULL; + +typedef struct { + LADSPA_Data *base; + LADSPA_Data *delay; + LADSPA_Data *input; + LADSPA_Data *output; + LADSPA_Data *buffer; + unsigned int buffer_mask; + float fs; + unsigned int write_ptr; + LADSPA_Data run_adding_gain; +} ModDelay; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return modDelayDescriptor; + default: + return NULL; + } +} + +static void activateModDelay(LADSPA_Handle instance) { + ModDelay *plugin_data = (ModDelay *)instance; + LADSPA_Data *buffer = plugin_data->buffer; + unsigned int buffer_mask = plugin_data->buffer_mask; + float fs = plugin_data->fs; + unsigned int write_ptr = plugin_data->write_ptr; +#line 33 "mod_delay_1419.xml" + memset(buffer, 0, buffer_mask + 1); + write_ptr = 0; + plugin_data->buffer = buffer; + plugin_data->buffer_mask = buffer_mask; + plugin_data->fs = fs; + plugin_data->write_ptr = write_ptr; + +} + +static void cleanupModDelay(LADSPA_Handle instance) { +#line 38 "mod_delay_1419.xml" + ModDelay *plugin_data = (ModDelay *)instance; + free(plugin_data->buffer); + free(instance); +} + +static void connectPortModDelay( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + ModDelay *plugin; + + plugin = (ModDelay *)instance; + switch (port) { + case MODDELAY_BASE: + plugin->base = data; + break; + case MODDELAY_DELAY: + plugin->delay = data; + break; + case MODDELAY_INPUT: + plugin->input = data; + break; + case MODDELAY_OUTPUT: + plugin->output = data; + break; + } +} + +static LADSPA_Handle instantiateModDelay( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + ModDelay *plugin_data = (ModDelay *)malloc(sizeof(ModDelay)); + LADSPA_Data *buffer = NULL; + unsigned int buffer_mask; + float fs; + unsigned int write_ptr; + +#line 21 "mod_delay_1419.xml" + unsigned int size = 32768; + + fs = s_rate; + while (size < 2.7f * fs) { + size *= 2; + } + buffer = calloc(size, sizeof(LADSPA_Data)); + buffer_mask = size - 1; + write_ptr = 0; + + plugin_data->buffer = buffer; + plugin_data->buffer_mask = buffer_mask; + plugin_data->fs = fs; + plugin_data->write_ptr = write_ptr; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runModDelay(LADSPA_Handle instance, unsigned long sample_count) { + ModDelay *plugin_data = (ModDelay *)instance; + + /* Base delay (s) (float value) */ + const LADSPA_Data base = *(plugin_data->base); + + /* Delay (s) (array of floats of length sample_count) */ + const LADSPA_Data * const delay = plugin_data->delay; + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + LADSPA_Data * buffer = plugin_data->buffer; + unsigned int buffer_mask = plugin_data->buffer_mask; + float fs = plugin_data->fs; + unsigned int write_ptr = plugin_data->write_ptr; + +#line 42 "mod_delay_1419.xml" + unsigned long pos; + + for (pos = 0; pos < sample_count; pos++) { + float tmp; + const float rpf = modff((base + delay[pos]) * fs, &tmp); + const int rp = write_ptr - 4 - f_round(tmp); + + buffer[write_ptr++] = input[pos]; + write_ptr &= buffer_mask; + + buffer_write(output[pos], cube_interp(rpf, buffer[(rp - 1) & buffer_mask], buffer[rp & buffer_mask], buffer[(rp + 1) & buffer_mask], buffer[(rp + 2) & buffer_mask])); + } + plugin_data->write_ptr = write_ptr; +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainModDelay(LADSPA_Handle instance, LADSPA_Data gain) { + ((ModDelay *)instance)->run_adding_gain = gain; +} + +static void runAddingModDelay(LADSPA_Handle instance, unsigned long sample_count) { + ModDelay *plugin_data = (ModDelay *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Base delay (s) (float value) */ + const LADSPA_Data base = *(plugin_data->base); + + /* Delay (s) (array of floats of length sample_count) */ + const LADSPA_Data * const delay = plugin_data->delay; + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + LADSPA_Data * buffer = plugin_data->buffer; + unsigned int buffer_mask = plugin_data->buffer_mask; + float fs = plugin_data->fs; + unsigned int write_ptr = plugin_data->write_ptr; + +#line 42 "mod_delay_1419.xml" + unsigned long pos; + + for (pos = 0; pos < sample_count; pos++) { + float tmp; + const float rpf = modff((base + delay[pos]) * fs, &tmp); + const int rp = write_ptr - 4 - f_round(tmp); + + buffer[write_ptr++] = input[pos]; + write_ptr &= buffer_mask; + + buffer_write(output[pos], cube_interp(rpf, buffer[(rp - 1) & buffer_mask], buffer[rp & buffer_mask], buffer[(rp + 1) & buffer_mask], buffer[(rp + 2) & buffer_mask])); + } + plugin_data->write_ptr = write_ptr; +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + modDelayDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (modDelayDescriptor) { + modDelayDescriptor->UniqueID = 1419; + modDelayDescriptor->Label = "modDelay"; + modDelayDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + modDelayDescriptor->Name = + D_("Modulatable delay"); + modDelayDescriptor->Maker = + "Steve Harris "; + modDelayDescriptor->Copyright = + "GPL"; + modDelayDescriptor->PortCount = 4; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(4, + sizeof(LADSPA_PortDescriptor)); + modDelayDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(4, + sizeof(LADSPA_PortRangeHint)); + modDelayDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(4, sizeof(char*)); + modDelayDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Base delay (s) */ + port_descriptors[MODDELAY_BASE] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[MODDELAY_BASE] = + D_("Base delay (s)"); + port_range_hints[MODDELAY_BASE].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MAXIMUM; + port_range_hints[MODDELAY_BASE].LowerBound = 0; + port_range_hints[MODDELAY_BASE].UpperBound = 1; + + /* Parameters for Delay (s) */ + port_descriptors[MODDELAY_DELAY] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[MODDELAY_DELAY] = + D_("Delay (s)"); + port_range_hints[MODDELAY_DELAY].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[MODDELAY_DELAY].LowerBound = 0; + port_range_hints[MODDELAY_DELAY].UpperBound = 1.7; + + /* Parameters for Input */ + port_descriptors[MODDELAY_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[MODDELAY_INPUT] = + D_("Input"); + port_range_hints[MODDELAY_INPUT].HintDescriptor = 0; + + /* Parameters for Output */ + port_descriptors[MODDELAY_OUTPUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[MODDELAY_OUTPUT] = + D_("Output"); + port_range_hints[MODDELAY_OUTPUT].HintDescriptor = 0; + + modDelayDescriptor->activate = activateModDelay; + modDelayDescriptor->cleanup = cleanupModDelay; + modDelayDescriptor->connect_port = connectPortModDelay; + modDelayDescriptor->deactivate = NULL; + modDelayDescriptor->instantiate = instantiateModDelay; + modDelayDescriptor->run = runModDelay; + modDelayDescriptor->run_adding = runAddingModDelay; + modDelayDescriptor->set_run_adding_gain = setRunAddingGainModDelay; + } +} + +void _fini() { + if (modDelayDescriptor) { + free((LADSPA_PortDescriptor *)modDelayDescriptor->PortDescriptors); + free((char **)modDelayDescriptor->PortNames); + free((LADSPA_PortRangeHint *)modDelayDescriptor->PortRangeHints); + free(modDelayDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/multivoice_chorus_1201.c b/plugins/LadspaEffect/swh/multivoice_chorus_1201.c new file mode 100644 index 000000000..81f4ae8a2 --- /dev/null +++ b/plugins/LadspaEffect/swh/multivoice_chorus_1201.c @@ -0,0 +1,667 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + +#line 9 "multivoice_chorus_1201.xml" + +#include "ladspa-util.h" +#define MAX_LAWS 7 + +#define MULTIVOICECHORUS_VOICES 0 +#define MULTIVOICECHORUS_DELAY_BASE 1 +#define MULTIVOICECHORUS_VOICE_SPREAD 2 +#define MULTIVOICECHORUS_DETUNE 3 +#define MULTIVOICECHORUS_LAW_FREQ 4 +#define MULTIVOICECHORUS_ATTENDB 5 +#define MULTIVOICECHORUS_INPUT 6 +#define MULTIVOICECHORUS_OUTPUT 7 + +static LADSPA_Descriptor *multivoiceChorusDescriptor = NULL; + +typedef struct { + LADSPA_Data *voices; + LADSPA_Data *delay_base; + LADSPA_Data *voice_spread; + LADSPA_Data *detune; + LADSPA_Data *law_freq; + LADSPA_Data *attendb; + LADSPA_Data *input; + LADSPA_Data *output; + long count; + unsigned int delay_mask; + unsigned int delay_pos; + unsigned int delay_size; + float * delay_tbl; + float * dp_curr; + float * dp_targ; + int last_law_p; + int law_pos; + int law_roll; + int max_law_p; + float * next_peak_amp; + unsigned int *next_peak_pos; + float * prev_peak_amp; + unsigned int *prev_peak_pos; + long sample_rate; + LADSPA_Data run_adding_gain; +} MultivoiceChorus; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return multivoiceChorusDescriptor; + default: + return NULL; + } +} + +static void activateMultivoiceChorus(LADSPA_Handle instance) { + MultivoiceChorus *plugin_data = (MultivoiceChorus *)instance; + long count = plugin_data->count; + unsigned int delay_mask = plugin_data->delay_mask; + unsigned int delay_pos = plugin_data->delay_pos; + unsigned int delay_size = plugin_data->delay_size; + float *delay_tbl = plugin_data->delay_tbl; + float *dp_curr = plugin_data->dp_curr; + float *dp_targ = plugin_data->dp_targ; + int last_law_p = plugin_data->last_law_p; + int law_pos = plugin_data->law_pos; + int law_roll = plugin_data->law_roll; + int max_law_p = plugin_data->max_law_p; + float *next_peak_amp = plugin_data->next_peak_amp; + unsigned int *next_peak_pos = plugin_data->next_peak_pos; + float *prev_peak_amp = plugin_data->prev_peak_amp; + unsigned int *prev_peak_pos = plugin_data->prev_peak_pos; + long sample_rate = plugin_data->sample_rate; +#line 46 "multivoice_chorus_1201.xml" + memset(delay_tbl, 0, sizeof(float) * delay_size); + memset(prev_peak_pos, 0, sizeof(unsigned int) * MAX_LAWS); + memset(next_peak_pos, 0, sizeof(unsigned int) * MAX_LAWS); + memset(prev_peak_amp, 0, sizeof(float) * MAX_LAWS); + memset(next_peak_amp, 0, sizeof(float) * MAX_LAWS); + memset(dp_targ, 0, sizeof(float) * MAX_LAWS); + memset(dp_curr, 0, sizeof(float) * MAX_LAWS); + plugin_data->count = count; + plugin_data->delay_mask = delay_mask; + plugin_data->delay_pos = delay_pos; + plugin_data->delay_size = delay_size; + plugin_data->delay_tbl = delay_tbl; + plugin_data->dp_curr = dp_curr; + plugin_data->dp_targ = dp_targ; + plugin_data->last_law_p = last_law_p; + plugin_data->law_pos = law_pos; + plugin_data->law_roll = law_roll; + plugin_data->max_law_p = max_law_p; + plugin_data->next_peak_amp = next_peak_amp; + plugin_data->next_peak_pos = next_peak_pos; + plugin_data->prev_peak_amp = prev_peak_amp; + plugin_data->prev_peak_pos = prev_peak_pos; + plugin_data->sample_rate = sample_rate; + +} + +static void cleanupMultivoiceChorus(LADSPA_Handle instance) { +#line 56 "multivoice_chorus_1201.xml" + MultivoiceChorus *plugin_data = (MultivoiceChorus *)instance; + free(plugin_data->delay_tbl); + free(plugin_data->prev_peak_pos); + free(plugin_data->next_peak_pos); + free(plugin_data->prev_peak_amp); + free(plugin_data->next_peak_amp); + free(plugin_data->dp_targ); + free(plugin_data->dp_curr); + free(instance); +} + +static void connectPortMultivoiceChorus( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + MultivoiceChorus *plugin; + + plugin = (MultivoiceChorus *)instance; + switch (port) { + case MULTIVOICECHORUS_VOICES: + plugin->voices = data; + break; + case MULTIVOICECHORUS_DELAY_BASE: + plugin->delay_base = data; + break; + case MULTIVOICECHORUS_VOICE_SPREAD: + plugin->voice_spread = data; + break; + case MULTIVOICECHORUS_DETUNE: + plugin->detune = data; + break; + case MULTIVOICECHORUS_LAW_FREQ: + plugin->law_freq = data; + break; + case MULTIVOICECHORUS_ATTENDB: + plugin->attendb = data; + break; + case MULTIVOICECHORUS_INPUT: + plugin->input = data; + break; + case MULTIVOICECHORUS_OUTPUT: + plugin->output = data; + break; + } +} + +static LADSPA_Handle instantiateMultivoiceChorus( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + MultivoiceChorus *plugin_data = (MultivoiceChorus *)malloc(sizeof(MultivoiceChorus)); + long count; + unsigned int delay_mask; + unsigned int delay_pos; + unsigned int delay_size; + float *delay_tbl = NULL; + float *dp_curr = NULL; + float *dp_targ = NULL; + int last_law_p; + int law_pos; + int law_roll; + int max_law_p; + float *next_peak_amp = NULL; + unsigned int *next_peak_pos = NULL; + float *prev_peak_amp = NULL; + unsigned int *prev_peak_pos = NULL; + long sample_rate; + +#line 20 "multivoice_chorus_1201.xml" + int min_size; + + sample_rate = s_rate; + + max_law_p = s_rate/2; + last_law_p = -1; + law_pos = 0; + law_roll = 0; + + min_size = sample_rate / 10; + for (delay_size = 1024; delay_size < min_size; delay_size *= 2); + delay_mask = delay_size - 1; + delay_tbl = calloc(sizeof(float), delay_size); + delay_pos = 0; + + prev_peak_pos = malloc(sizeof(unsigned int) * MAX_LAWS); + next_peak_pos = malloc(sizeof(unsigned int) * MAX_LAWS); + prev_peak_amp = malloc(sizeof(float) * MAX_LAWS); + next_peak_amp = malloc(sizeof(float) * MAX_LAWS); + dp_targ = malloc(sizeof(float) * MAX_LAWS); + dp_curr = malloc(sizeof(float) * MAX_LAWS); + + count = 0; + + plugin_data->count = count; + plugin_data->delay_mask = delay_mask; + plugin_data->delay_pos = delay_pos; + plugin_data->delay_size = delay_size; + plugin_data->delay_tbl = delay_tbl; + plugin_data->dp_curr = dp_curr; + plugin_data->dp_targ = dp_targ; + plugin_data->last_law_p = last_law_p; + plugin_data->law_pos = law_pos; + plugin_data->law_roll = law_roll; + plugin_data->max_law_p = max_law_p; + plugin_data->next_peak_amp = next_peak_amp; + plugin_data->next_peak_pos = next_peak_pos; + plugin_data->prev_peak_amp = prev_peak_amp; + plugin_data->prev_peak_pos = prev_peak_pos; + plugin_data->sample_rate = sample_rate; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runMultivoiceChorus(LADSPA_Handle instance, unsigned long sample_count) { + MultivoiceChorus *plugin_data = (MultivoiceChorus *)instance; + + /* Number of voices (float value) */ + const LADSPA_Data voices = *(plugin_data->voices); + + /* Delay base (ms) (float value) */ + const LADSPA_Data delay_base = *(plugin_data->delay_base); + + /* Voice separation (ms) (float value) */ + const LADSPA_Data voice_spread = *(plugin_data->voice_spread); + + /* Detune (%) (float value) */ + const LADSPA_Data detune = *(plugin_data->detune); + + /* LFO frequency (Hz) (float value) */ + const LADSPA_Data law_freq = *(plugin_data->law_freq); + + /* Output attenuation (dB) (float value) */ + const LADSPA_Data attendb = *(plugin_data->attendb); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + long count = plugin_data->count; + unsigned int delay_mask = plugin_data->delay_mask; + unsigned int delay_pos = plugin_data->delay_pos; + unsigned int delay_size = plugin_data->delay_size; + float * delay_tbl = plugin_data->delay_tbl; + float * dp_curr = plugin_data->dp_curr; + float * dp_targ = plugin_data->dp_targ; + int last_law_p = plugin_data->last_law_p; + int law_pos = plugin_data->law_pos; + int law_roll = plugin_data->law_roll; + int max_law_p = plugin_data->max_law_p; + float * next_peak_amp = plugin_data->next_peak_amp; + unsigned int * next_peak_pos = plugin_data->next_peak_pos; + float * prev_peak_amp = plugin_data->prev_peak_amp; + unsigned int * prev_peak_pos = plugin_data->prev_peak_pos; + long sample_rate = plugin_data->sample_rate; + +#line 66 "multivoice_chorus_1201.xml" + unsigned long pos; + int d_base, t; + LADSPA_Data out; + float delay_depth; + float dp; // float delay position + float dp_frac; // fractional part + int dp_idx; // Integer delay index + int laws, law_separation, base_offset; + int law_p; // Period of law + float atten; // Attenuation + + // Set law params + laws = LIMIT(f_round(voices) - 1, 0, 7); + law_p = LIMIT(f_round(sample_rate/f_clamp(law_freq, 0.0001f, 1000.0f)), 1, max_law_p); + if (laws > 0) { + law_separation = law_p / laws; + } else { + law_separation = 0; + } + + // Calculate voice spread in samples + base_offset = (f_clamp(voice_spread, 0.0f, 2.0f) * sample_rate) / 1000; + // Calculate base delay size in samples + d_base = (f_clamp(delay_base, 5.0f, 40.0f) * sample_rate) / 1000; + // Calculate delay depth in samples + delay_depth = f_clamp((law_p * f_clamp(detune, 0.0f, 10.0f)) / (100.0f * M_PI), 0.0f, delay_size - d_base - 1 - (base_offset * laws)); + + // Calculate output attenuation + atten = DB_CO(f_clamp(attendb, -100.0, 24.0)); + + for (pos = 0; pos < sample_count; pos++) { + // N times per law 'frequency' splurge a new set of windowed data + // into one of the N law buffers. Keeps the laws out of phase. + if (laws > 0 && (count % law_separation) == 0) { + next_peak_amp[law_roll] = (float)rand() / (float)RAND_MAX; + next_peak_pos[law_roll] = count + law_p; + } + if (laws > 0 && (count % law_separation) == law_separation/2) { + prev_peak_amp[law_roll] = (float)rand() / (float)RAND_MAX; + prev_peak_pos[law_roll] = count + law_p; + // Pick the next law to be changed + law_roll = (law_roll + 1) % laws; + } + + out = input[pos]; + if (count % 16 < laws) { + unsigned int t = count % 16; + // Calculate sinus phases + float n_ph = (float)(law_p - abs(next_peak_pos[t] - count))/law_p; + float p_ph = n_ph + 0.5f; + if (p_ph > 1.0f) { + p_ph -= 1.0f; + } + + dp_targ[t] = f_sin_sq(3.1415926f*p_ph)*prev_peak_amp[t] + f_sin_sq(3.1415926f*n_ph)*next_peak_amp[t]; + } + for (t=0; tcount = count; + plugin_data->law_pos = law_pos; + plugin_data->last_law_p = last_law_p; + plugin_data->law_roll = law_roll; + plugin_data->delay_pos = delay_pos; +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainMultivoiceChorus(LADSPA_Handle instance, LADSPA_Data gain) { + ((MultivoiceChorus *)instance)->run_adding_gain = gain; +} + +static void runAddingMultivoiceChorus(LADSPA_Handle instance, unsigned long sample_count) { + MultivoiceChorus *plugin_data = (MultivoiceChorus *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Number of voices (float value) */ + const LADSPA_Data voices = *(plugin_data->voices); + + /* Delay base (ms) (float value) */ + const LADSPA_Data delay_base = *(plugin_data->delay_base); + + /* Voice separation (ms) (float value) */ + const LADSPA_Data voice_spread = *(plugin_data->voice_spread); + + /* Detune (%) (float value) */ + const LADSPA_Data detune = *(plugin_data->detune); + + /* LFO frequency (Hz) (float value) */ + const LADSPA_Data law_freq = *(plugin_data->law_freq); + + /* Output attenuation (dB) (float value) */ + const LADSPA_Data attendb = *(plugin_data->attendb); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + long count = plugin_data->count; + unsigned int delay_mask = plugin_data->delay_mask; + unsigned int delay_pos = plugin_data->delay_pos; + unsigned int delay_size = plugin_data->delay_size; + float * delay_tbl = plugin_data->delay_tbl; + float * dp_curr = plugin_data->dp_curr; + float * dp_targ = plugin_data->dp_targ; + int last_law_p = plugin_data->last_law_p; + int law_pos = plugin_data->law_pos; + int law_roll = plugin_data->law_roll; + int max_law_p = plugin_data->max_law_p; + float * next_peak_amp = plugin_data->next_peak_amp; + unsigned int * next_peak_pos = plugin_data->next_peak_pos; + float * prev_peak_amp = plugin_data->prev_peak_amp; + unsigned int * prev_peak_pos = plugin_data->prev_peak_pos; + long sample_rate = plugin_data->sample_rate; + +#line 66 "multivoice_chorus_1201.xml" + unsigned long pos; + int d_base, t; + LADSPA_Data out; + float delay_depth; + float dp; // float delay position + float dp_frac; // fractional part + int dp_idx; // Integer delay index + int laws, law_separation, base_offset; + int law_p; // Period of law + float atten; // Attenuation + + // Set law params + laws = LIMIT(f_round(voices) - 1, 0, 7); + law_p = LIMIT(f_round(sample_rate/f_clamp(law_freq, 0.0001f, 1000.0f)), 1, max_law_p); + if (laws > 0) { + law_separation = law_p / laws; + } else { + law_separation = 0; + } + + // Calculate voice spread in samples + base_offset = (f_clamp(voice_spread, 0.0f, 2.0f) * sample_rate) / 1000; + // Calculate base delay size in samples + d_base = (f_clamp(delay_base, 5.0f, 40.0f) * sample_rate) / 1000; + // Calculate delay depth in samples + delay_depth = f_clamp((law_p * f_clamp(detune, 0.0f, 10.0f)) / (100.0f * M_PI), 0.0f, delay_size - d_base - 1 - (base_offset * laws)); + + // Calculate output attenuation + atten = DB_CO(f_clamp(attendb, -100.0, 24.0)); + + for (pos = 0; pos < sample_count; pos++) { + // N times per law 'frequency' splurge a new set of windowed data + // into one of the N law buffers. Keeps the laws out of phase. + if (laws > 0 && (count % law_separation) == 0) { + next_peak_amp[law_roll] = (float)rand() / (float)RAND_MAX; + next_peak_pos[law_roll] = count + law_p; + } + if (laws > 0 && (count % law_separation) == law_separation/2) { + prev_peak_amp[law_roll] = (float)rand() / (float)RAND_MAX; + prev_peak_pos[law_roll] = count + law_p; + // Pick the next law to be changed + law_roll = (law_roll + 1) % laws; + } + + out = input[pos]; + if (count % 16 < laws) { + unsigned int t = count % 16; + // Calculate sinus phases + float n_ph = (float)(law_p - abs(next_peak_pos[t] - count))/law_p; + float p_ph = n_ph + 0.5f; + if (p_ph > 1.0f) { + p_ph -= 1.0f; + } + + dp_targ[t] = f_sin_sq(3.1415926f*p_ph)*prev_peak_amp[t] + f_sin_sq(3.1415926f*n_ph)*next_peak_amp[t]; + } + for (t=0; tcount = count; + plugin_data->law_pos = law_pos; + plugin_data->last_law_p = last_law_p; + plugin_data->law_roll = law_roll; + plugin_data->delay_pos = delay_pos; +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + multivoiceChorusDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (multivoiceChorusDescriptor) { + multivoiceChorusDescriptor->UniqueID = 1201; + multivoiceChorusDescriptor->Label = "multivoiceChorus"; + multivoiceChorusDescriptor->Properties = + 0; + multivoiceChorusDescriptor->Name = + D_("Multivoice Chorus"); + multivoiceChorusDescriptor->Maker = + "Steve Harris "; + multivoiceChorusDescriptor->Copyright = + "GPL"; + multivoiceChorusDescriptor->PortCount = 8; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(8, + sizeof(LADSPA_PortDescriptor)); + multivoiceChorusDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(8, + sizeof(LADSPA_PortRangeHint)); + multivoiceChorusDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(8, sizeof(char*)); + multivoiceChorusDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Number of voices */ + port_descriptors[MULTIVOICECHORUS_VOICES] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[MULTIVOICECHORUS_VOICES] = + D_("Number of voices"); + port_range_hints[MULTIVOICECHORUS_VOICES].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_INTEGER | LADSPA_HINT_DEFAULT_1; + port_range_hints[MULTIVOICECHORUS_VOICES].LowerBound = 1; + port_range_hints[MULTIVOICECHORUS_VOICES].UpperBound = 8; + + /* Parameters for Delay base (ms) */ + port_descriptors[MULTIVOICECHORUS_DELAY_BASE] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[MULTIVOICECHORUS_DELAY_BASE] = + D_("Delay base (ms)"); + port_range_hints[MULTIVOICECHORUS_DELAY_BASE].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MINIMUM; + port_range_hints[MULTIVOICECHORUS_DELAY_BASE].LowerBound = 10; + port_range_hints[MULTIVOICECHORUS_DELAY_BASE].UpperBound = 40; + + /* Parameters for Voice separation (ms) */ + port_descriptors[MULTIVOICECHORUS_VOICE_SPREAD] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[MULTIVOICECHORUS_VOICE_SPREAD] = + D_("Voice separation (ms)"); + port_range_hints[MULTIVOICECHORUS_VOICE_SPREAD].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; + port_range_hints[MULTIVOICECHORUS_VOICE_SPREAD].LowerBound = 0; + port_range_hints[MULTIVOICECHORUS_VOICE_SPREAD].UpperBound = 2; + + /* Parameters for Detune (%) */ + port_descriptors[MULTIVOICECHORUS_DETUNE] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[MULTIVOICECHORUS_DETUNE] = + D_("Detune (%)"); + port_range_hints[MULTIVOICECHORUS_DETUNE].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1; + port_range_hints[MULTIVOICECHORUS_DETUNE].LowerBound = 0; + port_range_hints[MULTIVOICECHORUS_DETUNE].UpperBound = 5; + + /* Parameters for LFO frequency (Hz) */ + port_descriptors[MULTIVOICECHORUS_LAW_FREQ] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[MULTIVOICECHORUS_LAW_FREQ] = + D_("LFO frequency (Hz)"); + port_range_hints[MULTIVOICECHORUS_LAW_FREQ].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; + port_range_hints[MULTIVOICECHORUS_LAW_FREQ].LowerBound = 2; + port_range_hints[MULTIVOICECHORUS_LAW_FREQ].UpperBound = 30; + + /* Parameters for Output attenuation (dB) */ + port_descriptors[MULTIVOICECHORUS_ATTENDB] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[MULTIVOICECHORUS_ATTENDB] = + D_("Output attenuation (dB)"); + port_range_hints[MULTIVOICECHORUS_ATTENDB].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[MULTIVOICECHORUS_ATTENDB].LowerBound = -20; + port_range_hints[MULTIVOICECHORUS_ATTENDB].UpperBound = 0; + + /* Parameters for Input */ + port_descriptors[MULTIVOICECHORUS_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[MULTIVOICECHORUS_INPUT] = + D_("Input"); + port_range_hints[MULTIVOICECHORUS_INPUT].HintDescriptor = 0; + + /* Parameters for Output */ + port_descriptors[MULTIVOICECHORUS_OUTPUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[MULTIVOICECHORUS_OUTPUT] = + D_("Output"); + port_range_hints[MULTIVOICECHORUS_OUTPUT].HintDescriptor = 0; + + multivoiceChorusDescriptor->activate = activateMultivoiceChorus; + multivoiceChorusDescriptor->cleanup = cleanupMultivoiceChorus; + multivoiceChorusDescriptor->connect_port = connectPortMultivoiceChorus; + multivoiceChorusDescriptor->deactivate = NULL; + multivoiceChorusDescriptor->instantiate = instantiateMultivoiceChorus; + multivoiceChorusDescriptor->run = runMultivoiceChorus; + multivoiceChorusDescriptor->run_adding = runAddingMultivoiceChorus; + multivoiceChorusDescriptor->set_run_adding_gain = setRunAddingGainMultivoiceChorus; + } +} + +void _fini() { + if (multivoiceChorusDescriptor) { + free((LADSPA_PortDescriptor *)multivoiceChorusDescriptor->PortDescriptors); + free((char **)multivoiceChorusDescriptor->PortNames); + free((LADSPA_PortRangeHint *)multivoiceChorusDescriptor->PortRangeHints); + free(multivoiceChorusDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/notch_iir_1894.c b/plugins/LadspaEffect/swh/notch_iir_1894.c new file mode 100644 index 000000000..9f075f3f4 --- /dev/null +++ b/plugins/LadspaEffect/swh/notch_iir_1894.c @@ -0,0 +1,354 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + + +#include "config.h" +#include "util/iir.h" + +#define NOTCH_IIR_CENTER 0 +#define NOTCH_IIR_WIDTH 1 +#define NOTCH_IIR_STAGES 2 +#define NOTCH_IIR_INPUT 3 +#define NOTCH_IIR_OUTPUT 4 + +static LADSPA_Descriptor *notch_iirDescriptor = NULL; + +typedef struct { + LADSPA_Data *center; + LADSPA_Data *width; + LADSPA_Data *stages; + LADSPA_Data *input; + LADSPA_Data *output; + iir_stage_t* first; + iirf_t* iirf1; + iirf_t* iirf2; + float lfc; + long sample_rate; + iir_stage_t* second; + float ufc; + LADSPA_Data run_adding_gain; +} Notch_iir; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return notch_iirDescriptor; + default: + return NULL; + } +} + +static void activateNotch_iir(LADSPA_Handle instance) { + Notch_iir *plugin_data = (Notch_iir *)instance; + iir_stage_t*first = plugin_data->first; + iirf_t*iirf1 = plugin_data->iirf1; + iirf_t*iirf2 = plugin_data->iirf2; + float lfc = plugin_data->lfc; + long sample_rate = plugin_data->sample_rate; + iir_stage_t*second = plugin_data->second; + float ufc = plugin_data->ufc; + + ufc = (*(plugin_data->center) - *(plugin_data->width)*0.5f)/(float)sample_rate; + lfc = (*(plugin_data->center) + *(plugin_data->width)*0.5f)/(float)sample_rate; + first = init_iir_stage(IIR_STAGE_LOWPASS,10,3,2); + second = init_iir_stage(IIR_STAGE_HIGHPASS,10,3,2); + iirf1 = init_iirf_t(first); + iirf2 = init_iirf_t(second); + chebyshev(iirf1, first, 2*CLAMP((int)(*(plugin_data->stages)),1,10), IIR_STAGE_LOWPASS, ufc, 0.5f); + chebyshev(iirf2, second, 2*CLAMP((int)(*(plugin_data->stages)),1,10), IIR_STAGE_HIGHPASS, lfc, 0.5f); + plugin_data->first = first; + plugin_data->iirf1 = iirf1; + plugin_data->iirf2 = iirf2; + plugin_data->lfc = lfc; + plugin_data->sample_rate = sample_rate; + plugin_data->second = second; + plugin_data->ufc = ufc; + +} + +static void cleanupNotch_iir(LADSPA_Handle instance) { + Notch_iir *plugin_data = (Notch_iir *)instance; + free_iirf_t(plugin_data->iirf1, plugin_data->first); + free_iirf_t(plugin_data->iirf2, plugin_data->second); + free_iir_stage(plugin_data->first); + free_iir_stage(plugin_data->second); + free(instance); +} + +static void connectPortNotch_iir( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + Notch_iir *plugin; + + plugin = (Notch_iir *)instance; + switch (port) { + case NOTCH_IIR_CENTER: + plugin->center = data; + break; + case NOTCH_IIR_WIDTH: + plugin->width = data; + break; + case NOTCH_IIR_STAGES: + plugin->stages = data; + break; + case NOTCH_IIR_INPUT: + plugin->input = data; + break; + case NOTCH_IIR_OUTPUT: + plugin->output = data; + break; + } +} + +static LADSPA_Handle instantiateNotch_iir( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + Notch_iir *plugin_data = (Notch_iir *)malloc(sizeof(Notch_iir)); + iir_stage_t*first = NULL; + iirf_t*iirf1 = NULL; + iirf_t*iirf2 = NULL; + float lfc; + long sample_rate; + iir_stage_t*second = NULL; + float ufc; + + sample_rate = s_rate; + ufc = lfc = 0.0f; + + plugin_data->first = first; + plugin_data->iirf1 = iirf1; + plugin_data->iirf2 = iirf2; + plugin_data->lfc = lfc; + plugin_data->sample_rate = sample_rate; + plugin_data->second = second; + plugin_data->ufc = ufc; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runNotch_iir(LADSPA_Handle instance, unsigned long sample_count) { + Notch_iir *plugin_data = (Notch_iir *)instance; + + /* Center Frequency (Hz) (float value) */ + const LADSPA_Data center = *(plugin_data->center); + + /* Bandwidth (Hz) (float value) */ + const LADSPA_Data width = *(plugin_data->width); + + /* Stages(2 poles per stage) (float value) */ + const LADSPA_Data stages = *(plugin_data->stages); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + iir_stage_t* first = plugin_data->first; + iirf_t* iirf1 = plugin_data->iirf1; + iirf_t* iirf2 = plugin_data->iirf2; + float lfc = plugin_data->lfc; + long sample_rate = plugin_data->sample_rate; + iir_stage_t* second = plugin_data->second; + float ufc = plugin_data->ufc; + + ufc = (center - width*0.5f)/(float)sample_rate; + lfc = (center + width*0.5f)/(float)sample_rate; + chebyshev(iirf1, first, 2*CLAMP((int)stages,1,10), IIR_STAGE_LOWPASS, ufc, 0.5f); + chebyshev(iirf2, second, 2*CLAMP((int)stages,1,10), IIR_STAGE_HIGHPASS, lfc, 0.5f); + iir_process_buffer_ns_5(iirf1, first, input, output, sample_count, RUN_ADDING); + iir_process_buffer_ns_5(iirf2, second, input, output, sample_count, 1); /* add to first buffer */ +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainNotch_iir(LADSPA_Handle instance, LADSPA_Data gain) { + ((Notch_iir *)instance)->run_adding_gain = gain; +} + +static void runAddingNotch_iir(LADSPA_Handle instance, unsigned long sample_count) { + Notch_iir *plugin_data = (Notch_iir *)instance; + + /* Center Frequency (Hz) (float value) */ + const LADSPA_Data center = *(plugin_data->center); + + /* Bandwidth (Hz) (float value) */ + const LADSPA_Data width = *(plugin_data->width); + + /* Stages(2 poles per stage) (float value) */ + const LADSPA_Data stages = *(plugin_data->stages); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + iir_stage_t* first = plugin_data->first; + iirf_t* iirf1 = plugin_data->iirf1; + iirf_t* iirf2 = plugin_data->iirf2; + float lfc = plugin_data->lfc; + long sample_rate = plugin_data->sample_rate; + iir_stage_t* second = plugin_data->second; + float ufc = plugin_data->ufc; + + ufc = (center - width*0.5f)/(float)sample_rate; + lfc = (center + width*0.5f)/(float)sample_rate; + chebyshev(iirf1, first, 2*CLAMP((int)stages,1,10), IIR_STAGE_LOWPASS, ufc, 0.5f); + chebyshev(iirf2, second, 2*CLAMP((int)stages,1,10), IIR_STAGE_HIGHPASS, lfc, 0.5f); + iir_process_buffer_ns_5(iirf1, first, input, output, sample_count, RUN_ADDING); + iir_process_buffer_ns_5(iirf2, second, input, output, sample_count, 1); /* add to first buffer */ +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + notch_iirDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (notch_iirDescriptor) { + notch_iirDescriptor->UniqueID = 1894; + notch_iirDescriptor->Label = "notch_iir"; + notch_iirDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + notch_iirDescriptor->Name = + D_("Mag's Notch Filter"); + notch_iirDescriptor->Maker = + "Alexander Ehlert "; + notch_iirDescriptor->Copyright = + "GPL"; + notch_iirDescriptor->PortCount = 5; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(5, + sizeof(LADSPA_PortDescriptor)); + notch_iirDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(5, + sizeof(LADSPA_PortRangeHint)); + notch_iirDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(5, sizeof(char*)); + notch_iirDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Center Frequency (Hz) */ + port_descriptors[NOTCH_IIR_CENTER] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[NOTCH_IIR_CENTER] = + D_("Center Frequency (Hz)"); + port_range_hints[NOTCH_IIR_CENTER].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE | LADSPA_HINT_SAMPLE_RATE | LADSPA_HINT_LOGARITHMIC; + port_range_hints[NOTCH_IIR_CENTER].LowerBound = 0.0001; + port_range_hints[NOTCH_IIR_CENTER].UpperBound = 0.45; + + /* Parameters for Bandwidth (Hz) */ + port_descriptors[NOTCH_IIR_WIDTH] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[NOTCH_IIR_WIDTH] = + D_("Bandwidth (Hz)"); + port_range_hints[NOTCH_IIR_WIDTH].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE | LADSPA_HINT_SAMPLE_RATE | LADSPA_HINT_LOGARITHMIC; + port_range_hints[NOTCH_IIR_WIDTH].LowerBound = 0.0001; + port_range_hints[NOTCH_IIR_WIDTH].UpperBound = 0.45; + + /* Parameters for Stages(2 poles per stage) */ + port_descriptors[NOTCH_IIR_STAGES] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[NOTCH_IIR_STAGES] = + D_("Stages(2 poles per stage)"); + port_range_hints[NOTCH_IIR_STAGES].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1 | LADSPA_HINT_INTEGER; + port_range_hints[NOTCH_IIR_STAGES].LowerBound = 1.0; + port_range_hints[NOTCH_IIR_STAGES].UpperBound = 10.0; + + /* Parameters for Input */ + port_descriptors[NOTCH_IIR_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[NOTCH_IIR_INPUT] = + D_("Input"); + port_range_hints[NOTCH_IIR_INPUT].HintDescriptor = 0; + + /* Parameters for Output */ + port_descriptors[NOTCH_IIR_OUTPUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[NOTCH_IIR_OUTPUT] = + D_("Output"); + port_range_hints[NOTCH_IIR_OUTPUT].HintDescriptor = 0; + + notch_iirDescriptor->activate = activateNotch_iir; + notch_iirDescriptor->cleanup = cleanupNotch_iir; + notch_iirDescriptor->connect_port = connectPortNotch_iir; + notch_iirDescriptor->deactivate = NULL; + notch_iirDescriptor->instantiate = instantiateNotch_iir; + notch_iirDescriptor->run = runNotch_iir; + notch_iirDescriptor->run_adding = runAddingNotch_iir; + notch_iirDescriptor->set_run_adding_gain = setRunAddingGainNotch_iir; + } +} + +void _fini() { + if (notch_iirDescriptor) { + free((LADSPA_PortDescriptor *)notch_iirDescriptor->PortDescriptors); + free((char **)notch_iirDescriptor->PortNames); + free((LADSPA_PortRangeHint *)notch_iirDescriptor->PortRangeHints); + free(notch_iirDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/phasers_1217.c b/plugins/LadspaEffect/swh/phasers_1217.c new file mode 100644 index 000000000..0d4cae64a --- /dev/null +++ b/plugins/LadspaEffect/swh/phasers_1217.c @@ -0,0 +1,1400 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + +#line 10 "phasers_1217.xml" + +#include "ladspa-util.h" + +#define LFO_SIZE 4096 + +typedef struct { + float a1; + float zm1; +} allpass; + +inline static float ap_run(allpass *a, float x) +{ + float y = x * -(a->a1) + a->zm1; + a->zm1 = y * a->a1 + x; + + return y; +} + +inline static void ap_set_delay(allpass *a, float d) +{ + a->a1 = (1.0f - d) / (1.0f + d); +} + +inline static void ap_clear(allpass *a) +{ + a->a1 = 0.0f; + a->zm1 = 0.0f; +} + +typedef struct { + float ga; + float gr; + float env; +} envelope; + +inline static float env_run(envelope *e, float in) +{ + float env_lvl = e->env; + + in = fabs(in); + + if (env_lvl < in) { + env_lvl = e->ga * (env_lvl - in) + in; + } else { + env_lvl = e->gr * (env_lvl - in) + in; + } + + e->env = env_lvl; + return env_lvl; +} + +// Set attack time in samples +inline static void env_set_attack(envelope *e, float a) +{ + e->ga = f_exp(-1.0f/a); +} + +// Set release time in samples +inline static void env_set_release(envelope *e, float r) +{ + e->gr = f_exp(-1.0f/r); +} + +#define LFOPHASER_LFO_RATE 0 +#define LFOPHASER_LFO_DEPTH 1 +#define LFOPHASER_FB 2 +#define LFOPHASER_SPREAD 3 +#define LFOPHASER_INPUT 4 +#define LFOPHASER_OUTPUT 5 +#define FOURBYFOURPOLE_F0 0 +#define FOURBYFOURPOLE_FB0 1 +#define FOURBYFOURPOLE_F1 2 +#define FOURBYFOURPOLE_FB1 3 +#define FOURBYFOURPOLE_F2 4 +#define FOURBYFOURPOLE_FB2 5 +#define FOURBYFOURPOLE_F3 6 +#define FOURBYFOURPOLE_FB3 7 +#define FOURBYFOURPOLE_INPUT 8 +#define FOURBYFOURPOLE_OUTPUT 9 +#define AUTOPHASER_ATTACK_P 0 +#define AUTOPHASER_DECAY_P 1 +#define AUTOPHASER_DEPTH_P 2 +#define AUTOPHASER_FB 3 +#define AUTOPHASER_SPREAD 4 +#define AUTOPHASER_INPUT 5 +#define AUTOPHASER_OUTPUT 6 + +static LADSPA_Descriptor *lfoPhaserDescriptor = NULL; + +typedef struct { + LADSPA_Data *lfo_rate; + LADSPA_Data *lfo_depth; + LADSPA_Data *fb; + LADSPA_Data *spread; + LADSPA_Data *input; + LADSPA_Data *output; + allpass * ap; + int count; + float f_per_lv; + int lfo_pos; + float * lfo_tbl; + float ym1; + LADSPA_Data run_adding_gain; +} LfoPhaser; + +static LADSPA_Descriptor *fourByFourPoleDescriptor = NULL; + +typedef struct { + LADSPA_Data *f0; + LADSPA_Data *fb0; + LADSPA_Data *f1; + LADSPA_Data *fb1; + LADSPA_Data *f2; + LADSPA_Data *fb2; + LADSPA_Data *f3; + LADSPA_Data *fb3; + LADSPA_Data *input; + LADSPA_Data *output; + allpass * ap; + float sr_r_2; + float y0; + float y1; + float y2; + float y3; + LADSPA_Data run_adding_gain; +} FourByFourPole; + +static LADSPA_Descriptor *autoPhaserDescriptor = NULL; + +typedef struct { + LADSPA_Data *attack_p; + LADSPA_Data *decay_p; + LADSPA_Data *depth_p; + LADSPA_Data *fb; + LADSPA_Data *spread; + LADSPA_Data *input; + LADSPA_Data *output; + allpass * ap; + envelope * env; + float sample_rate; + float ym1; + LADSPA_Data run_adding_gain; +} AutoPhaser; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return lfoPhaserDescriptor; + case 1: + return fourByFourPoleDescriptor; + case 2: + return autoPhaserDescriptor; + default: + return NULL; + } +} + +static void activateLfoPhaser(LADSPA_Handle instance) { + LfoPhaser *plugin_data = (LfoPhaser *)instance; + allpass *ap = plugin_data->ap; + int count = plugin_data->count; + float f_per_lv = plugin_data->f_per_lv; + int lfo_pos = plugin_data->lfo_pos; + float *lfo_tbl = plugin_data->lfo_tbl; + float ym1 = plugin_data->ym1; +#line 100 "phasers_1217.xml" + ap_clear(ap); + ap_clear(ap+1); + ap_clear(ap+2); + ap_clear(ap+3); + ap_clear(ap+4); + ap_clear(ap+5); + plugin_data->ap = ap; + plugin_data->count = count; + plugin_data->f_per_lv = f_per_lv; + plugin_data->lfo_pos = lfo_pos; + plugin_data->lfo_tbl = lfo_tbl; + plugin_data->ym1 = ym1; + +} + +static void cleanupLfoPhaser(LADSPA_Handle instance) { +#line 109 "phasers_1217.xml" + LfoPhaser *plugin_data = (LfoPhaser *)instance; + free(plugin_data->ap); + free(plugin_data->lfo_tbl); + free(instance); +} + +static void connectPortLfoPhaser( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + LfoPhaser *plugin; + + plugin = (LfoPhaser *)instance; + switch (port) { + case LFOPHASER_LFO_RATE: + plugin->lfo_rate = data; + break; + case LFOPHASER_LFO_DEPTH: + plugin->lfo_depth = data; + break; + case LFOPHASER_FB: + plugin->fb = data; + break; + case LFOPHASER_SPREAD: + plugin->spread = data; + break; + case LFOPHASER_INPUT: + plugin->input = data; + break; + case LFOPHASER_OUTPUT: + plugin->output = data; + break; + } +} + +static LADSPA_Handle instantiateLfoPhaser( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + LfoPhaser *plugin_data = (LfoPhaser *)malloc(sizeof(LfoPhaser)); + allpass *ap = NULL; + int count; + float f_per_lv; + int lfo_pos; + float *lfo_tbl = NULL; + float ym1; + +#line 80 "phasers_1217.xml" + unsigned int i; + float p; + + ap = calloc(6, sizeof(allpass)); + ym1 = 0.0f; + lfo_tbl = malloc(sizeof(float) * LFO_SIZE); + p = 0.0f; + for (i=0; iap = ap; + plugin_data->count = count; + plugin_data->f_per_lv = f_per_lv; + plugin_data->lfo_pos = lfo_pos; + plugin_data->lfo_tbl = lfo_tbl; + plugin_data->ym1 = ym1; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runLfoPhaser(LADSPA_Handle instance, unsigned long sample_count) { + LfoPhaser *plugin_data = (LfoPhaser *)instance; + + /* LFO rate (Hz) (float value) */ + const LADSPA_Data lfo_rate = *(plugin_data->lfo_rate); + + /* LFO depth (float value) */ + const LADSPA_Data lfo_depth = *(plugin_data->lfo_depth); + + /* Feedback (float value) */ + const LADSPA_Data fb = *(plugin_data->fb); + + /* Spread (octaves) (float value) */ + const LADSPA_Data spread = *(plugin_data->spread); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + allpass * ap = plugin_data->ap; + int count = plugin_data->count; + float f_per_lv = plugin_data->f_per_lv; + int lfo_pos = plugin_data->lfo_pos; + float * lfo_tbl = plugin_data->lfo_tbl; + float ym1 = plugin_data->ym1; + +#line 114 "phasers_1217.xml" + unsigned long pos; + unsigned int mod; + float y, d, ofs; + + mod = f_round(f_per_lv / lfo_rate); + if (mod < 1) { + mod=1; + } + + d = lfo_tbl[lfo_pos]; + + for (pos = 0; pos < sample_count; pos++) { + // Get new value for LFO if needed + if (++count % mod == 0) { + lfo_pos++; + lfo_pos &= 0x7FF; + count = 0; + d = lfo_tbl[lfo_pos] * lfo_depth; + + ap_set_delay(ap, d); + ofs = spread * 0.01562f; + ap_set_delay(ap+1, d+ofs); + ofs *= 2.0f; + ap_set_delay(ap+2, d+ofs); + ofs *= 2.0f; + ap_set_delay(ap+3, d+ofs); + ofs *= 2.0f; + ap_set_delay(ap+4, d+ofs); + ofs *= 2.0f; + ap_set_delay(ap+5, d+ofs); + + } + //Run in series, doesn't quite sound as nice + y = ap_run(ap, input[pos] + ym1 * fb); + y = ap_run(ap+1, y); + y = ap_run(ap+2, y); + y = ap_run(ap+3, y); + y = ap_run(ap+4, y); + y = ap_run(ap+5, y); + + buffer_write(output[pos], y); + ym1 = y; + } + + plugin_data->ym1 = ym1; + plugin_data->count = count; + plugin_data->lfo_pos = lfo_pos; +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainLfoPhaser(LADSPA_Handle instance, LADSPA_Data gain) { + ((LfoPhaser *)instance)->run_adding_gain = gain; +} + +static void runAddingLfoPhaser(LADSPA_Handle instance, unsigned long sample_count) { + LfoPhaser *plugin_data = (LfoPhaser *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* LFO rate (Hz) (float value) */ + const LADSPA_Data lfo_rate = *(plugin_data->lfo_rate); + + /* LFO depth (float value) */ + const LADSPA_Data lfo_depth = *(plugin_data->lfo_depth); + + /* Feedback (float value) */ + const LADSPA_Data fb = *(plugin_data->fb); + + /* Spread (octaves) (float value) */ + const LADSPA_Data spread = *(plugin_data->spread); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + allpass * ap = plugin_data->ap; + int count = plugin_data->count; + float f_per_lv = plugin_data->f_per_lv; + int lfo_pos = plugin_data->lfo_pos; + float * lfo_tbl = plugin_data->lfo_tbl; + float ym1 = plugin_data->ym1; + +#line 114 "phasers_1217.xml" + unsigned long pos; + unsigned int mod; + float y, d, ofs; + + mod = f_round(f_per_lv / lfo_rate); + if (mod < 1) { + mod=1; + } + + d = lfo_tbl[lfo_pos]; + + for (pos = 0; pos < sample_count; pos++) { + // Get new value for LFO if needed + if (++count % mod == 0) { + lfo_pos++; + lfo_pos &= 0x7FF; + count = 0; + d = lfo_tbl[lfo_pos] * lfo_depth; + + ap_set_delay(ap, d); + ofs = spread * 0.01562f; + ap_set_delay(ap+1, d+ofs); + ofs *= 2.0f; + ap_set_delay(ap+2, d+ofs); + ofs *= 2.0f; + ap_set_delay(ap+3, d+ofs); + ofs *= 2.0f; + ap_set_delay(ap+4, d+ofs); + ofs *= 2.0f; + ap_set_delay(ap+5, d+ofs); + + } + //Run in series, doesn't quite sound as nice + y = ap_run(ap, input[pos] + ym1 * fb); + y = ap_run(ap+1, y); + y = ap_run(ap+2, y); + y = ap_run(ap+3, y); + y = ap_run(ap+4, y); + y = ap_run(ap+5, y); + + buffer_write(output[pos], y); + ym1 = y; + } + + plugin_data->ym1 = ym1; + plugin_data->count = count; + plugin_data->lfo_pos = lfo_pos; +} + +static void activateFourByFourPole(LADSPA_Handle instance) { + FourByFourPole *plugin_data = (FourByFourPole *)instance; + allpass *ap = plugin_data->ap; + float sr_r_2 = plugin_data->sr_r_2; + float y0 = plugin_data->y0; + float y1 = plugin_data->y1; + float y2 = plugin_data->y2; + float y3 = plugin_data->y3; +#line 100 "phasers_1217.xml" + ap_clear(ap); + ap_clear(ap+1); + ap_clear(ap+2); + ap_clear(ap+3); + ap_clear(ap+4); + ap_clear(ap+5); + ap_clear(ap+6); + ap_clear(ap+7); + ap_clear(ap+8); + ap_clear(ap+9); + ap_clear(ap+10); + ap_clear(ap+11); + ap_clear(ap+12); + ap_clear(ap+13); + ap_clear(ap+14); + ap_clear(ap+15); + plugin_data->ap = ap; + plugin_data->sr_r_2 = sr_r_2; + plugin_data->y0 = y0; + plugin_data->y1 = y1; + plugin_data->y2 = y2; + plugin_data->y3 = y3; + +} + +static void cleanupFourByFourPole(LADSPA_Handle instance) { +#line 109 "phasers_1217.xml" + FourByFourPole *plugin_data = (FourByFourPole *)instance; + free(plugin_data->ap); + free(instance); +} + +static void connectPortFourByFourPole( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + FourByFourPole *plugin; + + plugin = (FourByFourPole *)instance; + switch (port) { + case FOURBYFOURPOLE_F0: + plugin->f0 = data; + break; + case FOURBYFOURPOLE_FB0: + plugin->fb0 = data; + break; + case FOURBYFOURPOLE_F1: + plugin->f1 = data; + break; + case FOURBYFOURPOLE_FB1: + plugin->fb1 = data; + break; + case FOURBYFOURPOLE_F2: + plugin->f2 = data; + break; + case FOURBYFOURPOLE_FB2: + plugin->fb2 = data; + break; + case FOURBYFOURPOLE_F3: + plugin->f3 = data; + break; + case FOURBYFOURPOLE_FB3: + plugin->fb3 = data; + break; + case FOURBYFOURPOLE_INPUT: + plugin->input = data; + break; + case FOURBYFOURPOLE_OUTPUT: + plugin->output = data; + break; + } +} + +static LADSPA_Handle instantiateFourByFourPole( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + FourByFourPole *plugin_data = (FourByFourPole *)malloc(sizeof(FourByFourPole)); + allpass *ap = NULL; + float sr_r_2; + float y0; + float y1; + float y2; + float y3; + +#line 80 "phasers_1217.xml" + ap = calloc(16, sizeof(allpass)); + y0 = 0.0f; + y1 = 0.0f; + y2 = 0.0f; + y3 = 0.0f; + sr_r_2 = 1.0f / s_rate; + + plugin_data->ap = ap; + plugin_data->sr_r_2 = sr_r_2; + plugin_data->y0 = y0; + plugin_data->y1 = y1; + plugin_data->y2 = y2; + plugin_data->y3 = y3; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runFourByFourPole(LADSPA_Handle instance, unsigned long sample_count) { + FourByFourPole *plugin_data = (FourByFourPole *)instance; + + /* Frequency 1 (float value) */ + const LADSPA_Data f0 = *(plugin_data->f0); + + /* Feedback 1 (float value) */ + const LADSPA_Data fb0 = *(plugin_data->fb0); + + /* Frequency 2 (float value) */ + const LADSPA_Data f1 = *(plugin_data->f1); + + /* Feedback 2 (float value) */ + const LADSPA_Data fb1 = *(plugin_data->fb1); + + /* Frequency 3 (float value) */ + const LADSPA_Data f2 = *(plugin_data->f2); + + /* Feedback 3 (float value) */ + const LADSPA_Data fb2 = *(plugin_data->fb2); + + /* Frequency 4 (float value) */ + const LADSPA_Data f3 = *(plugin_data->f3); + + /* Feedback 4 (float value) */ + const LADSPA_Data fb3 = *(plugin_data->fb3); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + allpass * ap = plugin_data->ap; + float sr_r_2 = plugin_data->sr_r_2; + float y0 = plugin_data->y0; + float y1 = plugin_data->y1; + float y2 = plugin_data->y2; + float y3 = plugin_data->y3; + +#line 114 "phasers_1217.xml" + unsigned long pos; + + ap_set_delay(ap, f0 * sr_r_2); + ap_set_delay(ap+1, f0 * sr_r_2); + ap_set_delay(ap+2, f0 * sr_r_2); + ap_set_delay(ap+3, f0 * sr_r_2); + ap_set_delay(ap+4, f1 * sr_r_2); + ap_set_delay(ap+5, f1 * sr_r_2); + ap_set_delay(ap+6, f1 * sr_r_2); + ap_set_delay(ap+7, f1 * sr_r_2); + ap_set_delay(ap+8, f2 * sr_r_2); + ap_set_delay(ap+9, f2 * sr_r_2); + ap_set_delay(ap+10, f2 * sr_r_2); + ap_set_delay(ap+11, f2 * sr_r_2); + ap_set_delay(ap+12, f3 * sr_r_2); + ap_set_delay(ap+13, f3 * sr_r_2); + ap_set_delay(ap+14, f3 * sr_r_2); + ap_set_delay(ap+15, f3 * sr_r_2); + + for (pos = 0; pos < sample_count; pos++) { + y0 = ap_run(ap, input[pos] + y0 * fb0); + y0 = ap_run(ap+1, y0); + y0 = ap_run(ap+2, y0); + y0 = ap_run(ap+3, y0); + + y1 = ap_run(ap+4, y0 + y1 * fb1); + y1 = ap_run(ap+5, y1); + y1 = ap_run(ap+6, y1); + y1 = ap_run(ap+7, y1); + + y2 = ap_run(ap+8, y1 + y2 * fb2); + y2 = ap_run(ap+9, y2); + y2 = ap_run(ap+10, y2); + y2 = ap_run(ap+11, y2); + + y3 = ap_run(ap+12, y2 + y3 * fb3); + y3 = ap_run(ap+13, y3); + y3 = ap_run(ap+14, y3); + y3 = ap_run(ap+15, y3); + + buffer_write(output[pos], y3); + } + + plugin_data->y0 = y0; + plugin_data->y1 = y1; + plugin_data->y2 = y2; + plugin_data->y3 = y3; +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainFourByFourPole(LADSPA_Handle instance, LADSPA_Data gain) { + ((FourByFourPole *)instance)->run_adding_gain = gain; +} + +static void runAddingFourByFourPole(LADSPA_Handle instance, unsigned long sample_count) { + FourByFourPole *plugin_data = (FourByFourPole *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Frequency 1 (float value) */ + const LADSPA_Data f0 = *(plugin_data->f0); + + /* Feedback 1 (float value) */ + const LADSPA_Data fb0 = *(plugin_data->fb0); + + /* Frequency 2 (float value) */ + const LADSPA_Data f1 = *(plugin_data->f1); + + /* Feedback 2 (float value) */ + const LADSPA_Data fb1 = *(plugin_data->fb1); + + /* Frequency 3 (float value) */ + const LADSPA_Data f2 = *(plugin_data->f2); + + /* Feedback 3 (float value) */ + const LADSPA_Data fb2 = *(plugin_data->fb2); + + /* Frequency 4 (float value) */ + const LADSPA_Data f3 = *(plugin_data->f3); + + /* Feedback 4 (float value) */ + const LADSPA_Data fb3 = *(plugin_data->fb3); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + allpass * ap = plugin_data->ap; + float sr_r_2 = plugin_data->sr_r_2; + float y0 = plugin_data->y0; + float y1 = plugin_data->y1; + float y2 = plugin_data->y2; + float y3 = plugin_data->y3; + +#line 114 "phasers_1217.xml" + unsigned long pos; + + ap_set_delay(ap, f0 * sr_r_2); + ap_set_delay(ap+1, f0 * sr_r_2); + ap_set_delay(ap+2, f0 * sr_r_2); + ap_set_delay(ap+3, f0 * sr_r_2); + ap_set_delay(ap+4, f1 * sr_r_2); + ap_set_delay(ap+5, f1 * sr_r_2); + ap_set_delay(ap+6, f1 * sr_r_2); + ap_set_delay(ap+7, f1 * sr_r_2); + ap_set_delay(ap+8, f2 * sr_r_2); + ap_set_delay(ap+9, f2 * sr_r_2); + ap_set_delay(ap+10, f2 * sr_r_2); + ap_set_delay(ap+11, f2 * sr_r_2); + ap_set_delay(ap+12, f3 * sr_r_2); + ap_set_delay(ap+13, f3 * sr_r_2); + ap_set_delay(ap+14, f3 * sr_r_2); + ap_set_delay(ap+15, f3 * sr_r_2); + + for (pos = 0; pos < sample_count; pos++) { + y0 = ap_run(ap, input[pos] + y0 * fb0); + y0 = ap_run(ap+1, y0); + y0 = ap_run(ap+2, y0); + y0 = ap_run(ap+3, y0); + + y1 = ap_run(ap+4, y0 + y1 * fb1); + y1 = ap_run(ap+5, y1); + y1 = ap_run(ap+6, y1); + y1 = ap_run(ap+7, y1); + + y2 = ap_run(ap+8, y1 + y2 * fb2); + y2 = ap_run(ap+9, y2); + y2 = ap_run(ap+10, y2); + y2 = ap_run(ap+11, y2); + + y3 = ap_run(ap+12, y2 + y3 * fb3); + y3 = ap_run(ap+13, y3); + y3 = ap_run(ap+14, y3); + y3 = ap_run(ap+15, y3); + + buffer_write(output[pos], y3); + } + + plugin_data->y0 = y0; + plugin_data->y1 = y1; + plugin_data->y2 = y2; + plugin_data->y3 = y3; +} + +static void activateAutoPhaser(LADSPA_Handle instance) { + AutoPhaser *plugin_data = (AutoPhaser *)instance; + allpass *ap = plugin_data->ap; + envelope *env = plugin_data->env; + float sample_rate = plugin_data->sample_rate; + float ym1 = plugin_data->ym1; +#line 100 "phasers_1217.xml" + ap_clear(ap); + ap_clear(ap+1); + ap_clear(ap+2); + ap_clear(ap+3); + ap_clear(ap+4); + ap_clear(ap+5); + plugin_data->ap = ap; + plugin_data->env = env; + plugin_data->sample_rate = sample_rate; + plugin_data->ym1 = ym1; + +} + +static void cleanupAutoPhaser(LADSPA_Handle instance) { +#line 109 "phasers_1217.xml" + AutoPhaser *plugin_data = (AutoPhaser *)instance; + free(plugin_data->ap); + free(plugin_data->env); + free(instance); +} + +static void connectPortAutoPhaser( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + AutoPhaser *plugin; + + plugin = (AutoPhaser *)instance; + switch (port) { + case AUTOPHASER_ATTACK_P: + plugin->attack_p = data; + break; + case AUTOPHASER_DECAY_P: + plugin->decay_p = data; + break; + case AUTOPHASER_DEPTH_P: + plugin->depth_p = data; + break; + case AUTOPHASER_FB: + plugin->fb = data; + break; + case AUTOPHASER_SPREAD: + plugin->spread = data; + break; + case AUTOPHASER_INPUT: + plugin->input = data; + break; + case AUTOPHASER_OUTPUT: + plugin->output = data; + break; + } +} + +static LADSPA_Handle instantiateAutoPhaser( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + AutoPhaser *plugin_data = (AutoPhaser *)malloc(sizeof(AutoPhaser)); + allpass *ap = NULL; + envelope *env = NULL; + float sample_rate; + float ym1; + +#line 80 "phasers_1217.xml" + ap = calloc(6, sizeof(allpass)); + env = calloc(1, sizeof(envelope)); + ym1 = 0.0f; + sample_rate = (float)s_rate; + + plugin_data->ap = ap; + plugin_data->env = env; + plugin_data->sample_rate = sample_rate; + plugin_data->ym1 = ym1; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runAutoPhaser(LADSPA_Handle instance, unsigned long sample_count) { + AutoPhaser *plugin_data = (AutoPhaser *)instance; + + /* Attack time (s) (float value) */ + const LADSPA_Data attack_p = *(plugin_data->attack_p); + + /* Decay time (s) (float value) */ + const LADSPA_Data decay_p = *(plugin_data->decay_p); + + /* Modulation depth (float value) */ + const LADSPA_Data depth_p = *(plugin_data->depth_p); + + /* Feedback (float value) */ + const LADSPA_Data fb = *(plugin_data->fb); + + /* Spread (octaves) (float value) */ + const LADSPA_Data spread = *(plugin_data->spread); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + allpass * ap = plugin_data->ap; + envelope * env = plugin_data->env; + float sample_rate = plugin_data->sample_rate; + float ym1 = plugin_data->ym1; + +#line 114 "phasers_1217.xml" + unsigned long pos; + float y, d, ofs; + float attack = attack_p; + float decay = decay_p; + const float depth = depth_p * 0.5f; + + if (attack < 0.01f) { + attack = 0.01f; + } + if (decay < 0.01f) { + decay = 0.01f; + } + env_set_attack(env, attack * sample_rate * 0.25f); + env_set_release(env, decay * sample_rate * 0.25f); + + + for (pos = 0; pos < sample_count; pos++) { + if (pos % 4 == 0) { + d = env_run(env, input[pos]) * depth; + ap_set_delay(ap, d); + ofs = spread * 0.01562f; + ap_set_delay(ap+1, d+ofs); + ofs *= 2.0f; + ap_set_delay(ap+2, d+ofs); + ofs *= 2.0f; + ap_set_delay(ap+3, d+ofs); + ofs *= 2.0f; + ap_set_delay(ap+4, d+ofs); + ofs *= 2.0f; + ap_set_delay(ap+5, d+ofs); + } + + //Run allpass filters in series + y = ap_run(ap, input[pos] + ym1 * fb); + y = ap_run(ap+1, y); + y = ap_run(ap+2, y); + y = ap_run(ap+3, y); + y = ap_run(ap+4, y); + y = ap_run(ap+5, y); + + buffer_write(output[pos], y); + ym1 = y; + } + + plugin_data->ym1 = ym1; +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainAutoPhaser(LADSPA_Handle instance, LADSPA_Data gain) { + ((AutoPhaser *)instance)->run_adding_gain = gain; +} + +static void runAddingAutoPhaser(LADSPA_Handle instance, unsigned long sample_count) { + AutoPhaser *plugin_data = (AutoPhaser *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Attack time (s) (float value) */ + const LADSPA_Data attack_p = *(plugin_data->attack_p); + + /* Decay time (s) (float value) */ + const LADSPA_Data decay_p = *(plugin_data->decay_p); + + /* Modulation depth (float value) */ + const LADSPA_Data depth_p = *(plugin_data->depth_p); + + /* Feedback (float value) */ + const LADSPA_Data fb = *(plugin_data->fb); + + /* Spread (octaves) (float value) */ + const LADSPA_Data spread = *(plugin_data->spread); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + allpass * ap = plugin_data->ap; + envelope * env = plugin_data->env; + float sample_rate = plugin_data->sample_rate; + float ym1 = plugin_data->ym1; + +#line 114 "phasers_1217.xml" + unsigned long pos; + float y, d, ofs; + float attack = attack_p; + float decay = decay_p; + const float depth = depth_p * 0.5f; + + if (attack < 0.01f) { + attack = 0.01f; + } + if (decay < 0.01f) { + decay = 0.01f; + } + env_set_attack(env, attack * sample_rate * 0.25f); + env_set_release(env, decay * sample_rate * 0.25f); + + + for (pos = 0; pos < sample_count; pos++) { + if (pos % 4 == 0) { + d = env_run(env, input[pos]) * depth; + ap_set_delay(ap, d); + ofs = spread * 0.01562f; + ap_set_delay(ap+1, d+ofs); + ofs *= 2.0f; + ap_set_delay(ap+2, d+ofs); + ofs *= 2.0f; + ap_set_delay(ap+3, d+ofs); + ofs *= 2.0f; + ap_set_delay(ap+4, d+ofs); + ofs *= 2.0f; + ap_set_delay(ap+5, d+ofs); + } + + //Run allpass filters in series + y = ap_run(ap, input[pos] + ym1 * fb); + y = ap_run(ap+1, y); + y = ap_run(ap+2, y); + y = ap_run(ap+3, y); + y = ap_run(ap+4, y); + y = ap_run(ap+5, y); + + buffer_write(output[pos], y); + ym1 = y; + } + + plugin_data->ym1 = ym1; +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + lfoPhaserDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (lfoPhaserDescriptor) { + lfoPhaserDescriptor->UniqueID = 1217; + lfoPhaserDescriptor->Label = "lfoPhaser"; + lfoPhaserDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + lfoPhaserDescriptor->Name = + D_("LFO Phaser"); + lfoPhaserDescriptor->Maker = + "Steve Harris "; + lfoPhaserDescriptor->Copyright = + "GPL"; + lfoPhaserDescriptor->PortCount = 6; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(6, + sizeof(LADSPA_PortDescriptor)); + lfoPhaserDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(6, + sizeof(LADSPA_PortRangeHint)); + lfoPhaserDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(6, sizeof(char*)); + lfoPhaserDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for LFO rate (Hz) */ + port_descriptors[LFOPHASER_LFO_RATE] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[LFOPHASER_LFO_RATE] = + D_("LFO rate (Hz)"); + port_range_hints[LFOPHASER_LFO_RATE].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; + port_range_hints[LFOPHASER_LFO_RATE].LowerBound = 0; + port_range_hints[LFOPHASER_LFO_RATE].UpperBound = 100; + + /* Parameters for LFO depth */ + port_descriptors[LFOPHASER_LFO_DEPTH] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[LFOPHASER_LFO_DEPTH] = + D_("LFO depth"); + port_range_hints[LFOPHASER_LFO_DEPTH].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; + port_range_hints[LFOPHASER_LFO_DEPTH].LowerBound = 0; + port_range_hints[LFOPHASER_LFO_DEPTH].UpperBound = 1; + + /* Parameters for Feedback */ + port_descriptors[LFOPHASER_FB] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[LFOPHASER_FB] = + D_("Feedback"); + port_range_hints[LFOPHASER_FB].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[LFOPHASER_FB].LowerBound = -1; + port_range_hints[LFOPHASER_FB].UpperBound = 1; + + /* Parameters for Spread (octaves) */ + port_descriptors[LFOPHASER_SPREAD] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[LFOPHASER_SPREAD] = + D_("Spread (octaves)"); + port_range_hints[LFOPHASER_SPREAD].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; + port_range_hints[LFOPHASER_SPREAD].LowerBound = 0; + port_range_hints[LFOPHASER_SPREAD].UpperBound = 2; + + /* Parameters for Input */ + port_descriptors[LFOPHASER_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[LFOPHASER_INPUT] = + D_("Input"); + port_range_hints[LFOPHASER_INPUT].HintDescriptor = 0; + + /* Parameters for Output */ + port_descriptors[LFOPHASER_OUTPUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[LFOPHASER_OUTPUT] = + D_("Output"); + port_range_hints[LFOPHASER_OUTPUT].HintDescriptor = 0; + + lfoPhaserDescriptor->activate = activateLfoPhaser; + lfoPhaserDescriptor->cleanup = cleanupLfoPhaser; + lfoPhaserDescriptor->connect_port = connectPortLfoPhaser; + lfoPhaserDescriptor->deactivate = NULL; + lfoPhaserDescriptor->instantiate = instantiateLfoPhaser; + lfoPhaserDescriptor->run = runLfoPhaser; + lfoPhaserDescriptor->run_adding = runAddingLfoPhaser; + lfoPhaserDescriptor->set_run_adding_gain = setRunAddingGainLfoPhaser; + } + + fourByFourPoleDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (fourByFourPoleDescriptor) { + fourByFourPoleDescriptor->UniqueID = 1218; + fourByFourPoleDescriptor->Label = "fourByFourPole"; + fourByFourPoleDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + fourByFourPoleDescriptor->Name = + D_("4 x 4 pole allpass"); + fourByFourPoleDescriptor->Maker = + "Steve Harris "; + fourByFourPoleDescriptor->Copyright = + "GPL"; + fourByFourPoleDescriptor->PortCount = 10; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(10, + sizeof(LADSPA_PortDescriptor)); + fourByFourPoleDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(10, + sizeof(LADSPA_PortRangeHint)); + fourByFourPoleDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(10, sizeof(char*)); + fourByFourPoleDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Frequency 1 */ + port_descriptors[FOURBYFOURPOLE_F0] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[FOURBYFOURPOLE_F0] = + D_("Frequency 1"); + port_range_hints[FOURBYFOURPOLE_F0].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; + port_range_hints[FOURBYFOURPOLE_F0].LowerBound = 1; + port_range_hints[FOURBYFOURPOLE_F0].UpperBound = 20000; + + /* Parameters for Feedback 1 */ + port_descriptors[FOURBYFOURPOLE_FB0] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[FOURBYFOURPOLE_FB0] = + D_("Feedback 1"); + port_range_hints[FOURBYFOURPOLE_FB0].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[FOURBYFOURPOLE_FB0].LowerBound = -1; + port_range_hints[FOURBYFOURPOLE_FB0].UpperBound = 1; + + /* Parameters for Frequency 2 */ + port_descriptors[FOURBYFOURPOLE_F1] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[FOURBYFOURPOLE_F1] = + D_("Frequency 2"); + port_range_hints[FOURBYFOURPOLE_F1].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; + port_range_hints[FOURBYFOURPOLE_F1].LowerBound = 1; + port_range_hints[FOURBYFOURPOLE_F1].UpperBound = 20000; + + /* Parameters for Feedback 2 */ + port_descriptors[FOURBYFOURPOLE_FB1] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[FOURBYFOURPOLE_FB1] = + D_("Feedback 2"); + port_range_hints[FOURBYFOURPOLE_FB1].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[FOURBYFOURPOLE_FB1].LowerBound = -1; + port_range_hints[FOURBYFOURPOLE_FB1].UpperBound = 1; + + /* Parameters for Frequency 3 */ + port_descriptors[FOURBYFOURPOLE_F2] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[FOURBYFOURPOLE_F2] = + D_("Frequency 3"); + port_range_hints[FOURBYFOURPOLE_F2].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_HIGH; + port_range_hints[FOURBYFOURPOLE_F2].LowerBound = 1; + port_range_hints[FOURBYFOURPOLE_F2].UpperBound = 20000; + + /* Parameters for Feedback 3 */ + port_descriptors[FOURBYFOURPOLE_FB2] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[FOURBYFOURPOLE_FB2] = + D_("Feedback 3"); + port_range_hints[FOURBYFOURPOLE_FB2].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[FOURBYFOURPOLE_FB2].LowerBound = -1; + port_range_hints[FOURBYFOURPOLE_FB2].UpperBound = 1; + + /* Parameters for Frequency 4 */ + port_descriptors[FOURBYFOURPOLE_F3] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[FOURBYFOURPOLE_F3] = + D_("Frequency 4"); + port_range_hints[FOURBYFOURPOLE_F3].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MAXIMUM; + port_range_hints[FOURBYFOURPOLE_F3].LowerBound = 1; + port_range_hints[FOURBYFOURPOLE_F3].UpperBound = 20000; + + /* Parameters for Feedback 4 */ + port_descriptors[FOURBYFOURPOLE_FB3] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[FOURBYFOURPOLE_FB3] = + D_("Feedback 4"); + port_range_hints[FOURBYFOURPOLE_FB3].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[FOURBYFOURPOLE_FB3].LowerBound = -1; + port_range_hints[FOURBYFOURPOLE_FB3].UpperBound = 1; + + /* Parameters for Input */ + port_descriptors[FOURBYFOURPOLE_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[FOURBYFOURPOLE_INPUT] = + D_("Input"); + port_range_hints[FOURBYFOURPOLE_INPUT].HintDescriptor = 0; + + /* Parameters for Output */ + port_descriptors[FOURBYFOURPOLE_OUTPUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[FOURBYFOURPOLE_OUTPUT] = + D_("Output"); + port_range_hints[FOURBYFOURPOLE_OUTPUT].HintDescriptor = 0; + + fourByFourPoleDescriptor->activate = activateFourByFourPole; + fourByFourPoleDescriptor->cleanup = cleanupFourByFourPole; + fourByFourPoleDescriptor->connect_port = connectPortFourByFourPole; + fourByFourPoleDescriptor->deactivate = NULL; + fourByFourPoleDescriptor->instantiate = instantiateFourByFourPole; + fourByFourPoleDescriptor->run = runFourByFourPole; + fourByFourPoleDescriptor->run_adding = runAddingFourByFourPole; + fourByFourPoleDescriptor->set_run_adding_gain = setRunAddingGainFourByFourPole; + } + + autoPhaserDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (autoPhaserDescriptor) { + autoPhaserDescriptor->UniqueID = 1219; + autoPhaserDescriptor->Label = "autoPhaser"; + autoPhaserDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + autoPhaserDescriptor->Name = + D_("Auto phaser"); + autoPhaserDescriptor->Maker = + "Steve Harris "; + autoPhaserDescriptor->Copyright = + "GPL"; + autoPhaserDescriptor->PortCount = 7; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(7, + sizeof(LADSPA_PortDescriptor)); + autoPhaserDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(7, + sizeof(LADSPA_PortRangeHint)); + autoPhaserDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(7, sizeof(char*)); + autoPhaserDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Attack time (s) */ + port_descriptors[AUTOPHASER_ATTACK_P] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[AUTOPHASER_ATTACK_P] = + D_("Attack time (s)"); + port_range_hints[AUTOPHASER_ATTACK_P].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; + port_range_hints[AUTOPHASER_ATTACK_P].LowerBound = 0; + port_range_hints[AUTOPHASER_ATTACK_P].UpperBound = 1; + + /* Parameters for Decay time (s) */ + port_descriptors[AUTOPHASER_DECAY_P] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[AUTOPHASER_DECAY_P] = + D_("Decay time (s)"); + port_range_hints[AUTOPHASER_DECAY_P].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; + port_range_hints[AUTOPHASER_DECAY_P].LowerBound = 0; + port_range_hints[AUTOPHASER_DECAY_P].UpperBound = 1; + + /* Parameters for Modulation depth */ + port_descriptors[AUTOPHASER_DEPTH_P] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[AUTOPHASER_DEPTH_P] = + D_("Modulation depth"); + port_range_hints[AUTOPHASER_DEPTH_P].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; + port_range_hints[AUTOPHASER_DEPTH_P].LowerBound = 0; + port_range_hints[AUTOPHASER_DEPTH_P].UpperBound = 1; + + /* Parameters for Feedback */ + port_descriptors[AUTOPHASER_FB] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[AUTOPHASER_FB] = + D_("Feedback"); + port_range_hints[AUTOPHASER_FB].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[AUTOPHASER_FB].LowerBound = -1; + port_range_hints[AUTOPHASER_FB].UpperBound = 1; + + /* Parameters for Spread (octaves) */ + port_descriptors[AUTOPHASER_SPREAD] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[AUTOPHASER_SPREAD] = + D_("Spread (octaves)"); + port_range_hints[AUTOPHASER_SPREAD].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1; + port_range_hints[AUTOPHASER_SPREAD].LowerBound = 0; + port_range_hints[AUTOPHASER_SPREAD].UpperBound = 2; + + /* Parameters for Input */ + port_descriptors[AUTOPHASER_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[AUTOPHASER_INPUT] = + D_("Input"); + port_range_hints[AUTOPHASER_INPUT].HintDescriptor = 0; + + /* Parameters for Output */ + port_descriptors[AUTOPHASER_OUTPUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[AUTOPHASER_OUTPUT] = + D_("Output"); + port_range_hints[AUTOPHASER_OUTPUT].HintDescriptor = 0; + + autoPhaserDescriptor->activate = activateAutoPhaser; + autoPhaserDescriptor->cleanup = cleanupAutoPhaser; + autoPhaserDescriptor->connect_port = connectPortAutoPhaser; + autoPhaserDescriptor->deactivate = NULL; + autoPhaserDescriptor->instantiate = instantiateAutoPhaser; + autoPhaserDescriptor->run = runAutoPhaser; + autoPhaserDescriptor->run_adding = runAddingAutoPhaser; + autoPhaserDescriptor->set_run_adding_gain = setRunAddingGainAutoPhaser; + } +} + +void _fini() { + if (lfoPhaserDescriptor) { + free((LADSPA_PortDescriptor *)lfoPhaserDescriptor->PortDescriptors); + free((char **)lfoPhaserDescriptor->PortNames); + free((LADSPA_PortRangeHint *)lfoPhaserDescriptor->PortRangeHints); + free(lfoPhaserDescriptor); + } + if (fourByFourPoleDescriptor) { + free((LADSPA_PortDescriptor *)fourByFourPoleDescriptor->PortDescriptors); + free((char **)fourByFourPoleDescriptor->PortNames); + free((LADSPA_PortRangeHint *)fourByFourPoleDescriptor->PortRangeHints); + free(fourByFourPoleDescriptor); + } + if (autoPhaserDescriptor) { + free((LADSPA_PortDescriptor *)autoPhaserDescriptor->PortDescriptors); + free((char **)autoPhaserDescriptor->PortNames); + free((LADSPA_PortRangeHint *)autoPhaserDescriptor->PortRangeHints); + free(autoPhaserDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/pitch_scale_1193.c b/plugins/LadspaEffect/swh/pitch_scale_1193.c new file mode 100644 index 000000000..be797e48e --- /dev/null +++ b/plugins/LadspaEffect/swh/pitch_scale_1193.c @@ -0,0 +1,338 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + +#line 9 "pitch_scale_1193.xml" + +#include "util/pitchscale.h" + +#define FRAME_LENGTH 2048 +#define OVER_SAMP 4 + +#define PITCHSCALE_MULT 0 +#define PITCHSCALE_INPUT 1 +#define PITCHSCALE_OUTPUT 2 +#define PITCHSCALE_LATENCY 3 + +static LADSPA_Descriptor *pitchScaleDescriptor = NULL; + +typedef struct { + LADSPA_Data *mult; + LADSPA_Data *input; + LADSPA_Data *output; + LADSPA_Data *latency; + sbuffers * buffers; + long sample_rate; + LADSPA_Data run_adding_gain; +} PitchScale; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return pitchScaleDescriptor; + default: + return NULL; + } +} + +static void activatePitchScale(LADSPA_Handle instance) { + PitchScale *plugin_data = (PitchScale *)instance; + sbuffers *buffers = plugin_data->buffers; + long sample_rate = plugin_data->sample_rate; +#line 68 "pitch_scale_1193.xml" + memset(buffers->gInFIFO, 0, FRAME_LENGTH*sizeof(float)); + memset(buffers->gOutFIFO, 0, FRAME_LENGTH*sizeof(float)); + memset(buffers->gLastPhase, 0, FRAME_LENGTH*sizeof(float)/2); + memset(buffers->gSumPhase, 0, FRAME_LENGTH*sizeof(float)/2); + memset(buffers->gOutputAccum, 0, 2*FRAME_LENGTH*sizeof(float)); + memset(buffers->gAnaFreq, 0, FRAME_LENGTH*sizeof(float)); + memset(buffers->gAnaMagn, 0, FRAME_LENGTH*sizeof(float)); + buffers->gRover = 0; + sample_rate = sample_rate; + + /* do one run to make sure the plans are set up */ + pitch_scale(buffers, 1.0, FRAME_LENGTH, 4, FRAME_LENGTH, sample_rate, buffers->gInFIFO, buffers->gOutFIFO, 0, 0.0f); + plugin_data->buffers = buffers; + plugin_data->sample_rate = sample_rate; + +} + +static void cleanupPitchScale(LADSPA_Handle instance) { +#line 83 "pitch_scale_1193.xml" + PitchScale *plugin_data = (PitchScale *)instance; + free (plugin_data->buffers->gInFIFO); + free (plugin_data->buffers->gOutFIFO); + free (plugin_data->buffers->gLastPhase); + free (plugin_data->buffers->gSumPhase); + free (plugin_data->buffers->gOutputAccum); + free (plugin_data->buffers->gAnaFreq); + free (plugin_data->buffers->gAnaMagn); + free (plugin_data->buffers->gSynFreq); + free (plugin_data->buffers->gSynMagn); + free (plugin_data->buffers->gWindow); + free (plugin_data->buffers); + free(instance); +} + +static void connectPortPitchScale( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + PitchScale *plugin; + + plugin = (PitchScale *)instance; + switch (port) { + case PITCHSCALE_MULT: + plugin->mult = data; + break; + case PITCHSCALE_INPUT: + plugin->input = data; + break; + case PITCHSCALE_OUTPUT: + plugin->output = data; + break; + case PITCHSCALE_LATENCY: + plugin->latency = data; + break; + } +} + +static LADSPA_Handle instantiatePitchScale( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + PitchScale *plugin_data = (PitchScale *)malloc(sizeof(PitchScale)); + sbuffers *buffers = NULL; + long sample_rate; + +#line 30 "pitch_scale_1193.xml" + int i; + float arg; + + buffers = malloc(sizeof(sbuffers)); + sample_rate = s_rate; + buffers->gInFIFO = malloc(FRAME_LENGTH * sizeof(float)); + buffers->gOutFIFO = malloc(FRAME_LENGTH * sizeof(float)); + buffers->gLastPhase = malloc(FRAME_LENGTH * sizeof(float)); + buffers->gSumPhase = malloc(FRAME_LENGTH * sizeof(float)); + buffers->gOutputAccum = malloc(2*FRAME_LENGTH * sizeof(float)); + buffers->gAnaFreq = malloc(FRAME_LENGTH * sizeof(float)); + buffers->gAnaMagn = malloc(FRAME_LENGTH * sizeof(float)); + buffers->gSynFreq = malloc(FRAME_LENGTH * sizeof(float)); + buffers->gSynMagn = malloc(FRAME_LENGTH * sizeof(float)); + buffers->gWindow = malloc(FRAME_LENGTH * sizeof(float)); +/* + if (aplan == NULL) { +#ifdef FFTW3 + aplan = fftwf_plan_r2r_1d(FRAME_LENGTH, ps_in, ps_out, FFTW_R2HC, FFTW_MEASURE); + splan = fftwf_plan_r2r_1d(FRAME_LENGTH, ps_in, ps_out, FFTW_HC2R, FFTW_MEASURE); +#else + aplan = rfftw_create_plan(FRAME_LENGTH, FFTW_REAL_TO_COMPLEX, FFTW_ESTIMATE); + splan = rfftw_create_plan(FRAME_LENGTH, FFTW_COMPLEX_TO_REAL, FFTW_ESTIMATE); +#endif + } +*/ + + arg = 2.0f * M_PI / (float)(FRAME_LENGTH-1); + for (i=0; i < FRAME_LENGTH; i++) { + // Blackman-Harris + buffers->gWindow[i] = 0.35875f - 0.48829f * cos(arg * (float)i) + 0.14128f * cos(2.0f * arg * (float)i) - 0.01168f * cos(3.0f * arg * (float)i); + // Gain correction + buffers->gWindow[i] *= 0.761f; + + } + + plugin_data->buffers = buffers; + plugin_data->sample_rate = sample_rate; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runPitchScale(LADSPA_Handle instance, unsigned long sample_count) { + PitchScale *plugin_data = (PitchScale *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Pitch co-efficient (float value) */ + const LADSPA_Data mult = *(plugin_data->mult); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + sbuffers * buffers = plugin_data->buffers; + long sample_rate = plugin_data->sample_rate; + +#line 23 "pitch_scale_1193.xml" + pitch_scale(buffers, mult, FRAME_LENGTH, OVER_SAMP, sample_count, sample_rate, input, output, RUN_ADDING, run_adding_gain); + + *(plugin_data->latency) = FRAME_LENGTH - (FRAME_LENGTH / + OVER_SAMP); +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainPitchScale(LADSPA_Handle instance, LADSPA_Data gain) { + ((PitchScale *)instance)->run_adding_gain = gain; +} + +static void runAddingPitchScale(LADSPA_Handle instance, unsigned long sample_count) { + PitchScale *plugin_data = (PitchScale *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Pitch co-efficient (float value) */ + const LADSPA_Data mult = *(plugin_data->mult); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + sbuffers * buffers = plugin_data->buffers; + long sample_rate = plugin_data->sample_rate; + +#line 23 "pitch_scale_1193.xml" + pitch_scale(buffers, mult, FRAME_LENGTH, OVER_SAMP, sample_count, sample_rate, input, output, RUN_ADDING, run_adding_gain); + + *(plugin_data->latency) = FRAME_LENGTH - (FRAME_LENGTH / + OVER_SAMP); +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + pitchScaleDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (pitchScaleDescriptor) { + pitchScaleDescriptor->UniqueID = 1193; + pitchScaleDescriptor->Label = "pitchScale"; + pitchScaleDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + pitchScaleDescriptor->Name = + D_("Pitch Scaler"); + pitchScaleDescriptor->Maker = + "Steve Harris "; + pitchScaleDescriptor->Copyright = + "GPL"; + pitchScaleDescriptor->PortCount = 4; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(4, + sizeof(LADSPA_PortDescriptor)); + pitchScaleDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(4, + sizeof(LADSPA_PortRangeHint)); + pitchScaleDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(4, sizeof(char*)); + pitchScaleDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Pitch co-efficient */ + port_descriptors[PITCHSCALE_MULT] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[PITCHSCALE_MULT] = + D_("Pitch co-efficient"); + port_range_hints[PITCHSCALE_MULT].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1; + port_range_hints[PITCHSCALE_MULT].LowerBound = 0.5; + port_range_hints[PITCHSCALE_MULT].UpperBound = 2; + + /* Parameters for Input */ + port_descriptors[PITCHSCALE_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[PITCHSCALE_INPUT] = + D_("Input"); + port_range_hints[PITCHSCALE_INPUT].HintDescriptor = 0; + + /* Parameters for Output */ + port_descriptors[PITCHSCALE_OUTPUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[PITCHSCALE_OUTPUT] = + D_("Output"); + port_range_hints[PITCHSCALE_OUTPUT].HintDescriptor = 0; + + /* Parameters for latency */ + port_descriptors[PITCHSCALE_LATENCY] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_CONTROL; + port_names[PITCHSCALE_LATENCY] = + D_("latency"); + port_range_hints[PITCHSCALE_LATENCY].HintDescriptor = 0; + + pitchScaleDescriptor->activate = activatePitchScale; + pitchScaleDescriptor->cleanup = cleanupPitchScale; + pitchScaleDescriptor->connect_port = connectPortPitchScale; + pitchScaleDescriptor->deactivate = NULL; + pitchScaleDescriptor->instantiate = instantiatePitchScale; + pitchScaleDescriptor->run = runPitchScale; + pitchScaleDescriptor->run_adding = runAddingPitchScale; + pitchScaleDescriptor->set_run_adding_gain = setRunAddingGainPitchScale; + } +} + +void _fini() { + if (pitchScaleDescriptor) { + free((LADSPA_PortDescriptor *)pitchScaleDescriptor->PortDescriptors); + free((char **)pitchScaleDescriptor->PortNames); + free((LADSPA_PortRangeHint *)pitchScaleDescriptor->PortRangeHints); + free(pitchScaleDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/pitch_scale_1194.c b/plugins/LadspaEffect/swh/pitch_scale_1194.c new file mode 100644 index 000000000..4e22de6df --- /dev/null +++ b/plugins/LadspaEffect/swh/pitch_scale_1194.c @@ -0,0 +1,322 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + +#line 9 "pitch_scale_1194.xml" + +#include "util/pitchscale.h" + +#define FRAME_LENGTH 4096 +#define OVER_SAMP 16 + +#define PITCHSCALEHQ_MULT 0 +#define PITCHSCALEHQ_INPUT 1 +#define PITCHSCALEHQ_OUTPUT 2 +#define PITCHSCALEHQ_LATENCY 3 + +static LADSPA_Descriptor *pitchScaleHQDescriptor = NULL; + +typedef struct { + LADSPA_Data *mult; + LADSPA_Data *input; + LADSPA_Data *output; + LADSPA_Data *latency; + sbuffers * buffers; + long sample_rate; + LADSPA_Data run_adding_gain; +} PitchScaleHQ; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return pitchScaleHQDescriptor; + default: + return NULL; + } +} + +static void activatePitchScaleHQ(LADSPA_Handle instance) { + PitchScaleHQ *plugin_data = (PitchScaleHQ *)instance; + sbuffers *buffers = plugin_data->buffers; + long sample_rate = plugin_data->sample_rate; +#line 57 "pitch_scale_1194.xml" + memset(buffers->gInFIFO, 0, FRAME_LENGTH*sizeof(float)); + memset(buffers->gOutFIFO, 0, FRAME_LENGTH*sizeof(float)); + memset(buffers->gLastPhase, 0, FRAME_LENGTH*sizeof(float)/2); + memset(buffers->gSumPhase, 0, FRAME_LENGTH*sizeof(float)/2); + memset(buffers->gOutputAccum, 0, 2*FRAME_LENGTH*sizeof(float)); + memset(buffers->gAnaFreq, 0, FRAME_LENGTH*sizeof(float)); + memset(buffers->gAnaMagn, 0, FRAME_LENGTH*sizeof(float)); + buffers->gRover = 0; + pitch_scale(buffers, 1.0, FRAME_LENGTH, 16, FRAME_LENGTH, sample_rate, buffers->gInFIFO, buffers->gOutFIFO, 0, 0.0f); + plugin_data->buffers = buffers; + plugin_data->sample_rate = sample_rate; + +} + +static void cleanupPitchScaleHQ(LADSPA_Handle instance) { +#line 69 "pitch_scale_1194.xml" + PitchScaleHQ *plugin_data = (PitchScaleHQ *)instance; + free (plugin_data->buffers->gInFIFO); + free (plugin_data->buffers->gOutFIFO); + free (plugin_data->buffers->gLastPhase); + free (plugin_data->buffers->gSumPhase); + free (plugin_data->buffers->gOutputAccum); + free (plugin_data->buffers->gAnaFreq); + free (plugin_data->buffers->gAnaMagn); + free (plugin_data->buffers->gSynFreq); + free (plugin_data->buffers->gSynMagn); + free (plugin_data->buffers->gWindow); + free (plugin_data->buffers); + free(instance); +} + +static void connectPortPitchScaleHQ( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + PitchScaleHQ *plugin; + + plugin = (PitchScaleHQ *)instance; + switch (port) { + case PITCHSCALEHQ_MULT: + plugin->mult = data; + break; + case PITCHSCALEHQ_INPUT: + plugin->input = data; + break; + case PITCHSCALEHQ_OUTPUT: + plugin->output = data; + break; + case PITCHSCALEHQ_LATENCY: + plugin->latency = data; + break; + } +} + +static LADSPA_Handle instantiatePitchScaleHQ( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + PitchScaleHQ *plugin_data = (PitchScaleHQ *)malloc(sizeof(PitchScaleHQ)); + sbuffers *buffers = NULL; + long sample_rate; + +#line 29 "pitch_scale_1194.xml" + int i; + float arg; + + buffers = malloc(sizeof(sbuffers)); + sample_rate = s_rate; + buffers->gInFIFO = malloc(FRAME_LENGTH * sizeof(float)); + buffers->gOutFIFO = malloc(FRAME_LENGTH * sizeof(float)); + buffers->gLastPhase = malloc(FRAME_LENGTH * sizeof(float)); + buffers->gSumPhase = malloc(FRAME_LENGTH * sizeof(float)); + buffers->gOutputAccum = malloc(2*FRAME_LENGTH * sizeof(float)); + buffers->gAnaFreq = malloc(FRAME_LENGTH * sizeof(float)); + buffers->gAnaMagn = malloc(FRAME_LENGTH * sizeof(float)); + buffers->gSynFreq = malloc(FRAME_LENGTH * sizeof(float)); + buffers->gSynMagn = malloc(FRAME_LENGTH * sizeof(float)); + buffers->gWindow = malloc(FRAME_LENGTH * sizeof(float)); + + arg = 2.0f * M_PI / (float)(FRAME_LENGTH-1); + for (i=0; i < FRAME_LENGTH; i++) { + // Blackman-Harris + buffers->gWindow[i] = 0.35875f - 0.48829f * cos(arg * (float)i) + 0.14128f * cos(2.0f * arg * (float)i) - 0.01168f * cos(3.0f * arg * (float)i); + // Gain correction + buffers->gWindow[i] *= 0.761f; + + } + + plugin_data->buffers = buffers; + plugin_data->sample_rate = sample_rate; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runPitchScaleHQ(LADSPA_Handle instance, unsigned long sample_count) { + PitchScaleHQ *plugin_data = (PitchScaleHQ *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Pitch co-efficient (float value) */ + const LADSPA_Data mult = *(plugin_data->mult); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + sbuffers * buffers = plugin_data->buffers; + long sample_rate = plugin_data->sample_rate; + +#line 23 "pitch_scale_1194.xml" + pitch_scale(buffers, mult, FRAME_LENGTH, OVER_SAMP, sample_count, sample_rate, input, output, RUN_ADDING, run_adding_gain); + *(plugin_data->latency) = FRAME_LENGTH - (FRAME_LENGTH + / OVER_SAMP); +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainPitchScaleHQ(LADSPA_Handle instance, LADSPA_Data gain) { + ((PitchScaleHQ *)instance)->run_adding_gain = gain; +} + +static void runAddingPitchScaleHQ(LADSPA_Handle instance, unsigned long sample_count) { + PitchScaleHQ *plugin_data = (PitchScaleHQ *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Pitch co-efficient (float value) */ + const LADSPA_Data mult = *(plugin_data->mult); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + sbuffers * buffers = plugin_data->buffers; + long sample_rate = plugin_data->sample_rate; + +#line 23 "pitch_scale_1194.xml" + pitch_scale(buffers, mult, FRAME_LENGTH, OVER_SAMP, sample_count, sample_rate, input, output, RUN_ADDING, run_adding_gain); + *(plugin_data->latency) = FRAME_LENGTH - (FRAME_LENGTH + / OVER_SAMP); +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + pitchScaleHQDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (pitchScaleHQDescriptor) { + pitchScaleHQDescriptor->UniqueID = 1194; + pitchScaleHQDescriptor->Label = "pitchScaleHQ"; + pitchScaleHQDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + pitchScaleHQDescriptor->Name = + D_("Higher Quality Pitch Scaler"); + pitchScaleHQDescriptor->Maker = + "Steve Harris "; + pitchScaleHQDescriptor->Copyright = + "GPL"; + pitchScaleHQDescriptor->PortCount = 4; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(4, + sizeof(LADSPA_PortDescriptor)); + pitchScaleHQDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(4, + sizeof(LADSPA_PortRangeHint)); + pitchScaleHQDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(4, sizeof(char*)); + pitchScaleHQDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Pitch co-efficient */ + port_descriptors[PITCHSCALEHQ_MULT] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[PITCHSCALEHQ_MULT] = + D_("Pitch co-efficient"); + port_range_hints[PITCHSCALEHQ_MULT].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1; + port_range_hints[PITCHSCALEHQ_MULT].LowerBound = 0.5; + port_range_hints[PITCHSCALEHQ_MULT].UpperBound = 2; + + /* Parameters for Input */ + port_descriptors[PITCHSCALEHQ_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[PITCHSCALEHQ_INPUT] = + D_("Input"); + port_range_hints[PITCHSCALEHQ_INPUT].HintDescriptor = 0; + + /* Parameters for Output */ + port_descriptors[PITCHSCALEHQ_OUTPUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[PITCHSCALEHQ_OUTPUT] = + D_("Output"); + port_range_hints[PITCHSCALEHQ_OUTPUT].HintDescriptor = 0; + + /* Parameters for latency */ + port_descriptors[PITCHSCALEHQ_LATENCY] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_CONTROL; + port_names[PITCHSCALEHQ_LATENCY] = + D_("latency"); + port_range_hints[PITCHSCALEHQ_LATENCY].HintDescriptor = 0; + + pitchScaleHQDescriptor->activate = activatePitchScaleHQ; + pitchScaleHQDescriptor->cleanup = cleanupPitchScaleHQ; + pitchScaleHQDescriptor->connect_port = connectPortPitchScaleHQ; + pitchScaleHQDescriptor->deactivate = NULL; + pitchScaleHQDescriptor->instantiate = instantiatePitchScaleHQ; + pitchScaleHQDescriptor->run = runPitchScaleHQ; + pitchScaleHQDescriptor->run_adding = runAddingPitchScaleHQ; + pitchScaleHQDescriptor->set_run_adding_gain = setRunAddingGainPitchScaleHQ; + } +} + +void _fini() { + if (pitchScaleHQDescriptor) { + free((LADSPA_PortDescriptor *)pitchScaleHQDescriptor->PortDescriptors); + free((char **)pitchScaleHQDescriptor->PortNames); + free((LADSPA_PortRangeHint *)pitchScaleHQDescriptor->PortRangeHints); + free(pitchScaleHQDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/plate_1423.c b/plugins/LadspaEffect/swh/plate_1423.c new file mode 100644 index 000000000..644aac7bf --- /dev/null +++ b/plugins/LadspaEffect/swh/plate_1423.c @@ -0,0 +1,412 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + +#line 10 "plate_1423.xml" + +#include "util/waveguide_nl.h" + +#define LP_INNER 0.96f +#define LP_OUTER 0.983f + +#define RUN_WG(n, junct_a, junct_b) waveguide_nl_process_lin(w[n], junct_a - out[n*2+1], junct_b - out[n*2], out+n*2, out+n*2+1) + +#define PLATE_TIME 0 +#define PLATE_DAMPING 1 +#define PLATE_WET 2 +#define PLATE_INPUT 3 +#define PLATE_OUTPUTL 4 +#define PLATE_OUTPUTR 5 + +static LADSPA_Descriptor *plateDescriptor = NULL; + +typedef struct { + LADSPA_Data *time; + LADSPA_Data *damping; + LADSPA_Data *wet; + LADSPA_Data *input; + LADSPA_Data *outputl; + LADSPA_Data *outputr; + float * out; + waveguide_nl **w; + LADSPA_Data run_adding_gain; +} Plate; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return plateDescriptor; + default: + return NULL; + } +} + +static void activatePlate(LADSPA_Handle instance) { + Plate *plugin_data = (Plate *)instance; + float *out = plugin_data->out; + waveguide_nl **w = plugin_data->w; +#line 40 "plate_1423.xml" + unsigned int i; + + for (i = 0; i < 8; i++) { + waveguide_nl_reset(w[i]); + } + plugin_data->out = out; + plugin_data->w = w; + +} + +static void cleanupPlate(LADSPA_Handle instance) { +#line 85 "plate_1423.xml" + Plate *plugin_data = (Plate *)instance; + unsigned int i; + + for (i = 0; i < 8; i++) { + waveguide_nl_free(plugin_data->w[i]); + } + free(plugin_data->w); + free(plugin_data->out); + free(instance); +} + +static void connectPortPlate( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + Plate *plugin; + + plugin = (Plate *)instance; + switch (port) { + case PLATE_TIME: + plugin->time = data; + break; + case PLATE_DAMPING: + plugin->damping = data; + break; + case PLATE_WET: + plugin->wet = data; + break; + case PLATE_INPUT: + plugin->input = data; + break; + case PLATE_OUTPUTL: + plugin->outputl = data; + break; + case PLATE_OUTPUTR: + plugin->outputr = data; + break; + } +} + +static LADSPA_Handle instantiatePlate( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + Plate *plugin_data = (Plate *)malloc(sizeof(Plate)); + float *out = NULL; + waveguide_nl **w = NULL; + +#line 26 "plate_1423.xml" + w = malloc(8 * sizeof(waveguide_nl *)); + w[0] = waveguide_nl_new(2389, LP_INNER, 0.04f, 0.0f); + w[1] = waveguide_nl_new(4742, LP_INNER, 0.17f, 0.0f); + w[2] = waveguide_nl_new(4623, LP_INNER, 0.52f, 0.0f); + w[3] = waveguide_nl_new(2142, LP_INNER, 0.48f, 0.0f); + w[4] = waveguide_nl_new(5597, LP_OUTER, 0.32f, 0.0f); + w[5] = waveguide_nl_new(3692, LP_OUTER, 0.89f, 0.0f); + w[6] = waveguide_nl_new(5611, LP_OUTER, 0.28f, 0.0f); + w[7] = waveguide_nl_new(3703, LP_OUTER, 0.29f, 0.0f); + + out = calloc(32, sizeof(float)); + + plugin_data->out = out; + plugin_data->w = w; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runPlate(LADSPA_Handle instance, unsigned long sample_count) { + Plate *plugin_data = (Plate *)instance; + + /* Reverb time (float value) */ + const LADSPA_Data time = *(plugin_data->time); + + /* Damping (float value) */ + const LADSPA_Data damping = *(plugin_data->damping); + + /* Dry/wet mix (float value) */ + const LADSPA_Data wet = *(plugin_data->wet); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Left output (array of floats of length sample_count) */ + LADSPA_Data * const outputl = plugin_data->outputl; + + /* Right output (array of floats of length sample_count) */ + LADSPA_Data * const outputr = plugin_data->outputr; + float * out = plugin_data->out; + waveguide_nl ** w = plugin_data->w; + +#line 48 "plate_1423.xml" + unsigned long pos; + const float scale = powf(time * 0.117647f, 1.34f); + const float lpscale = 1.0f - damping * 0.93; + + for (pos=0; pos<8; pos++) { + waveguide_nl_set_delay(w[pos], w[pos]->size * scale); + } + for (pos=0; pos<4; pos++) { + waveguide_nl_set_fc(w[pos], LP_INNER * lpscale); + } + for (; pos<8; pos++) { + waveguide_nl_set_fc(w[pos], LP_OUTER * lpscale); + } + + for (pos = 0; pos < sample_count; pos++) { + const float alpha = (out[0] + out[2] + out[4] + out[6]) * 0.5f + + input[pos]; + const float beta = (out[1] + out[9] + out[14]) * 0.666666666f; + const float gamma = (out[3] + out[8] + out[11]) * 0.666666666f; + const float delta = (out[5] + out[10] + out[13]) * 0.666666666f; + const float epsilon = (out[7] + out[12] + out[15]) * 0.666666666f; + + RUN_WG(0, beta, alpha); + RUN_WG(1, gamma, alpha); + RUN_WG(2, delta, alpha); + RUN_WG(3, epsilon, alpha); + RUN_WG(4, beta, gamma); + RUN_WG(5, gamma, delta); + RUN_WG(6, delta, epsilon); + RUN_WG(7, epsilon, beta); + + buffer_write(outputl[pos], beta * wet + input[pos] * (1.0f - wet)); + buffer_write(outputr[pos], gamma * wet + input[pos] * (1.0f - wet)); + } +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainPlate(LADSPA_Handle instance, LADSPA_Data gain) { + ((Plate *)instance)->run_adding_gain = gain; +} + +static void runAddingPlate(LADSPA_Handle instance, unsigned long sample_count) { + Plate *plugin_data = (Plate *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Reverb time (float value) */ + const LADSPA_Data time = *(plugin_data->time); + + /* Damping (float value) */ + const LADSPA_Data damping = *(plugin_data->damping); + + /* Dry/wet mix (float value) */ + const LADSPA_Data wet = *(plugin_data->wet); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Left output (array of floats of length sample_count) */ + LADSPA_Data * const outputl = plugin_data->outputl; + + /* Right output (array of floats of length sample_count) */ + LADSPA_Data * const outputr = plugin_data->outputr; + float * out = plugin_data->out; + waveguide_nl ** w = plugin_data->w; + +#line 48 "plate_1423.xml" + unsigned long pos; + const float scale = powf(time * 0.117647f, 1.34f); + const float lpscale = 1.0f - damping * 0.93; + + for (pos=0; pos<8; pos++) { + waveguide_nl_set_delay(w[pos], w[pos]->size * scale); + } + for (pos=0; pos<4; pos++) { + waveguide_nl_set_fc(w[pos], LP_INNER * lpscale); + } + for (; pos<8; pos++) { + waveguide_nl_set_fc(w[pos], LP_OUTER * lpscale); + } + + for (pos = 0; pos < sample_count; pos++) { + const float alpha = (out[0] + out[2] + out[4] + out[6]) * 0.5f + + input[pos]; + const float beta = (out[1] + out[9] + out[14]) * 0.666666666f; + const float gamma = (out[3] + out[8] + out[11]) * 0.666666666f; + const float delta = (out[5] + out[10] + out[13]) * 0.666666666f; + const float epsilon = (out[7] + out[12] + out[15]) * 0.666666666f; + + RUN_WG(0, beta, alpha); + RUN_WG(1, gamma, alpha); + RUN_WG(2, delta, alpha); + RUN_WG(3, epsilon, alpha); + RUN_WG(4, beta, gamma); + RUN_WG(5, gamma, delta); + RUN_WG(6, delta, epsilon); + RUN_WG(7, epsilon, beta); + + buffer_write(outputl[pos], beta * wet + input[pos] * (1.0f - wet)); + buffer_write(outputr[pos], gamma * wet + input[pos] * (1.0f - wet)); + } +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + plateDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (plateDescriptor) { + plateDescriptor->UniqueID = 1423; + plateDescriptor->Label = "plate"; + plateDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + plateDescriptor->Name = + D_("Plate reverb"); + plateDescriptor->Maker = + "Steve Harris "; + plateDescriptor->Copyright = + "GPL"; + plateDescriptor->PortCount = 6; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(6, + sizeof(LADSPA_PortDescriptor)); + plateDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(6, + sizeof(LADSPA_PortRangeHint)); + plateDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(6, sizeof(char*)); + plateDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Reverb time */ + port_descriptors[PLATE_TIME] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[PLATE_TIME] = + D_("Reverb time"); + port_range_hints[PLATE_TIME].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; + port_range_hints[PLATE_TIME].LowerBound = 0.01; + port_range_hints[PLATE_TIME].UpperBound = 8.5; + + /* Parameters for Damping */ + port_descriptors[PLATE_DAMPING] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[PLATE_DAMPING] = + D_("Damping"); + port_range_hints[PLATE_DAMPING].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; + port_range_hints[PLATE_DAMPING].LowerBound = 0; + port_range_hints[PLATE_DAMPING].UpperBound = 1; + + /* Parameters for Dry/wet mix */ + port_descriptors[PLATE_WET] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[PLATE_WET] = + D_("Dry/wet mix"); + port_range_hints[PLATE_WET].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; + port_range_hints[PLATE_WET].LowerBound = 0; + port_range_hints[PLATE_WET].UpperBound = 1; + + /* Parameters for Input */ + port_descriptors[PLATE_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[PLATE_INPUT] = + D_("Input"); + port_range_hints[PLATE_INPUT].HintDescriptor = 0; + + /* Parameters for Left output */ + port_descriptors[PLATE_OUTPUTL] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[PLATE_OUTPUTL] = + D_("Left output"); + port_range_hints[PLATE_OUTPUTL].HintDescriptor = 0; + + /* Parameters for Right output */ + port_descriptors[PLATE_OUTPUTR] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[PLATE_OUTPUTR] = + D_("Right output"); + port_range_hints[PLATE_OUTPUTR].HintDescriptor = 0; + + plateDescriptor->activate = activatePlate; + plateDescriptor->cleanup = cleanupPlate; + plateDescriptor->connect_port = connectPortPlate; + plateDescriptor->deactivate = NULL; + plateDescriptor->instantiate = instantiatePlate; + plateDescriptor->run = runPlate; + plateDescriptor->run_adding = runAddingPlate; + plateDescriptor->set_run_adding_gain = setRunAddingGainPlate; + } +} + +void _fini() { + if (plateDescriptor) { + free((LADSPA_PortDescriptor *)plateDescriptor->PortDescriptors); + free((char **)plateDescriptor->PortNames); + free((LADSPA_PortRangeHint *)plateDescriptor->PortRangeHints); + free(plateDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/pointer_cast_1910.c b/plugins/LadspaEffect/swh/pointer_cast_1910.c new file mode 100644 index 000000000..264821ad8 --- /dev/null +++ b/plugins/LadspaEffect/swh/pointer_cast_1910.c @@ -0,0 +1,321 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + +#line 10 "pointer_cast_1910.xml" + +#include + +#include "ladspa-util.h" +#include "util/biquad.h" + +typedef union { + LADSPA_Data fp; + int in; +} pcast; + +#define POINTERCASTDISTORTION_CUTOFF 0 +#define POINTERCASTDISTORTION_WET 1 +#define POINTERCASTDISTORTION_INPUT 2 +#define POINTERCASTDISTORTION_OUTPUT 3 + +static LADSPA_Descriptor *pointerCastDistortionDescriptor = NULL; + +typedef struct { + LADSPA_Data *cutoff; + LADSPA_Data *wet; + LADSPA_Data *input; + LADSPA_Data *output; + biquad * filt; + float fs; + LADSPA_Data run_adding_gain; +} PointerCastDistortion; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return pointerCastDistortionDescriptor; + default: + return NULL; + } +} + +static void activatePointerCastDistortion(LADSPA_Handle instance) { + PointerCastDistortion *plugin_data = (PointerCastDistortion *)instance; + biquad *filt = plugin_data->filt; + float fs = plugin_data->fs; +#line 36 "pointer_cast_1910.xml" + biquad_init(filt); + plugin_data->filt = filt; + plugin_data->fs = fs; + +} + +static void cleanupPointerCastDistortion(LADSPA_Handle instance) { +#line 59 "pointer_cast_1910.xml" + PointerCastDistortion *plugin_data = (PointerCastDistortion *)instance; + free(plugin_data->filt); + free(instance); +} + +static void connectPortPointerCastDistortion( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + PointerCastDistortion *plugin; + + plugin = (PointerCastDistortion *)instance; + switch (port) { + case POINTERCASTDISTORTION_CUTOFF: + plugin->cutoff = data; + break; + case POINTERCASTDISTORTION_WET: + plugin->wet = data; + break; + case POINTERCASTDISTORTION_INPUT: + plugin->input = data; + break; + case POINTERCASTDISTORTION_OUTPUT: + plugin->output = data; + break; + } +} + +static LADSPA_Handle instantiatePointerCastDistortion( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + PointerCastDistortion *plugin_data = (PointerCastDistortion *)malloc(sizeof(PointerCastDistortion)); + biquad *filt = NULL; + float fs; + +#line 31 "pointer_cast_1910.xml" + filt = malloc(sizeof(biquad)); + fs = s_rate; + + plugin_data->filt = filt; + plugin_data->fs = fs; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runPointerCastDistortion(LADSPA_Handle instance, unsigned long sample_count) { + PointerCastDistortion *plugin_data = (PointerCastDistortion *)instance; + + /* Effect cutoff freq (Hz) (float value) */ + const LADSPA_Data cutoff = *(plugin_data->cutoff); + + /* Dry/wet mix (float value) */ + const LADSPA_Data wet = *(plugin_data->wet); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + biquad * filt = plugin_data->filt; + float fs = plugin_data->fs; + +#line 40 "pointer_cast_1910.xml" + unsigned long pos; + const float filt_scale = cutoff < 50.0f ? cutoff / 50.0f : 1.0f; + + lp_set_params(filt, cutoff, 1.0f, fs); + + for (pos = 0; pos < sample_count; pos++) { + pcast val; + float sign, filt_val, dist_val; + + filt_val = biquad_run(filt, input[pos]) * filt_scale; + sign = filt_val < 0.0f ? -1.0f : 1.0f; + val.fp = fabs(filt_val); + dist_val = sign * (LADSPA_Data)val.in / (LADSPA_Data)INT_MAX + + (input[pos] - filt_val); + buffer_write(output[pos], LIN_INTERP(wet, input[pos], dist_val)); + } +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainPointerCastDistortion(LADSPA_Handle instance, LADSPA_Data gain) { + ((PointerCastDistortion *)instance)->run_adding_gain = gain; +} + +static void runAddingPointerCastDistortion(LADSPA_Handle instance, unsigned long sample_count) { + PointerCastDistortion *plugin_data = (PointerCastDistortion *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Effect cutoff freq (Hz) (float value) */ + const LADSPA_Data cutoff = *(plugin_data->cutoff); + + /* Dry/wet mix (float value) */ + const LADSPA_Data wet = *(plugin_data->wet); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + biquad * filt = plugin_data->filt; + float fs = plugin_data->fs; + +#line 40 "pointer_cast_1910.xml" + unsigned long pos; + const float filt_scale = cutoff < 50.0f ? cutoff / 50.0f : 1.0f; + + lp_set_params(filt, cutoff, 1.0f, fs); + + for (pos = 0; pos < sample_count; pos++) { + pcast val; + float sign, filt_val, dist_val; + + filt_val = biquad_run(filt, input[pos]) * filt_scale; + sign = filt_val < 0.0f ? -1.0f : 1.0f; + val.fp = fabs(filt_val); + dist_val = sign * (LADSPA_Data)val.in / (LADSPA_Data)INT_MAX + + (input[pos] - filt_val); + buffer_write(output[pos], LIN_INTERP(wet, input[pos], dist_val)); + } +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + pointerCastDistortionDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (pointerCastDistortionDescriptor) { + pointerCastDistortionDescriptor->UniqueID = 1910; + pointerCastDistortionDescriptor->Label = "pointerCastDistortion"; + pointerCastDistortionDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + pointerCastDistortionDescriptor->Name = + D_("Pointer cast distortion"); + pointerCastDistortionDescriptor->Maker = + "Steve Harris "; + pointerCastDistortionDescriptor->Copyright = + "GPL"; + pointerCastDistortionDescriptor->PortCount = 4; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(4, + sizeof(LADSPA_PortDescriptor)); + pointerCastDistortionDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(4, + sizeof(LADSPA_PortRangeHint)); + pointerCastDistortionDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(4, sizeof(char*)); + pointerCastDistortionDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Effect cutoff freq (Hz) */ + port_descriptors[POINTERCASTDISTORTION_CUTOFF] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[POINTERCASTDISTORTION_CUTOFF] = + D_("Effect cutoff freq (Hz)"); + port_range_hints[POINTERCASTDISTORTION_CUTOFF].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_LOGARITHMIC | LADSPA_HINT_SAMPLE_RATE | LADSPA_HINT_DEFAULT_LOW; + port_range_hints[POINTERCASTDISTORTION_CUTOFF].LowerBound = 0.0001; + port_range_hints[POINTERCASTDISTORTION_CUTOFF].UpperBound = 0.3; + + /* Parameters for Dry/wet mix */ + port_descriptors[POINTERCASTDISTORTION_WET] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[POINTERCASTDISTORTION_WET] = + D_("Dry/wet mix"); + port_range_hints[POINTERCASTDISTORTION_WET].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[POINTERCASTDISTORTION_WET].LowerBound = 0; + port_range_hints[POINTERCASTDISTORTION_WET].UpperBound = 1; + + /* Parameters for Input */ + port_descriptors[POINTERCASTDISTORTION_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[POINTERCASTDISTORTION_INPUT] = + D_("Input"); + port_range_hints[POINTERCASTDISTORTION_INPUT].HintDescriptor = 0; + + /* Parameters for Output */ + port_descriptors[POINTERCASTDISTORTION_OUTPUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[POINTERCASTDISTORTION_OUTPUT] = + D_("Output"); + port_range_hints[POINTERCASTDISTORTION_OUTPUT].HintDescriptor = 0; + + pointerCastDistortionDescriptor->activate = activatePointerCastDistortion; + pointerCastDistortionDescriptor->cleanup = cleanupPointerCastDistortion; + pointerCastDistortionDescriptor->connect_port = connectPortPointerCastDistortion; + pointerCastDistortionDescriptor->deactivate = NULL; + pointerCastDistortionDescriptor->instantiate = instantiatePointerCastDistortion; + pointerCastDistortionDescriptor->run = runPointerCastDistortion; + pointerCastDistortionDescriptor->run_adding = runAddingPointerCastDistortion; + pointerCastDistortionDescriptor->set_run_adding_gain = setRunAddingGainPointerCastDistortion; + } +} + +void _fini() { + if (pointerCastDistortionDescriptor) { + free((LADSPA_PortDescriptor *)pointerCastDistortionDescriptor->PortDescriptors); + free((char **)pointerCastDistortionDescriptor->PortNames); + free((LADSPA_PortRangeHint *)pointerCastDistortionDescriptor->PortRangeHints); + free(pointerCastDistortionDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/rate_shifter_1417.c b/plugins/LadspaEffect/swh/rate_shifter_1417.c new file mode 100644 index 000000000..fc2501e98 --- /dev/null +++ b/plugins/LadspaEffect/swh/rate_shifter_1417.c @@ -0,0 +1,325 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + +#line 10 "rate_shifter_1417.xml" + +#include "ladspa-util.h" + +#define RATESHIFTER_RATE 0 +#define RATESHIFTER_INPUT 1 +#define RATESHIFTER_OUTPUT 2 + +static LADSPA_Descriptor *rateShifterDescriptor = NULL; + +typedef struct { + LADSPA_Data *rate; + LADSPA_Data *input; + LADSPA_Data *output; + LADSPA_Data *buffer; + unsigned int buffer_mask; + fixp32 read_ptr; + unsigned int write_ptr; + LADSPA_Data run_adding_gain; +} RateShifter; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return rateShifterDescriptor; + default: + return NULL; + } +} + +static void activateRateShifter(LADSPA_Handle instance) { + RateShifter *plugin_data = (RateShifter *)instance; + LADSPA_Data *buffer = plugin_data->buffer; + unsigned int buffer_mask = plugin_data->buffer_mask; + fixp32 read_ptr = plugin_data->read_ptr; + unsigned int write_ptr = plugin_data->write_ptr; +#line 36 "rate_shifter_1417.xml" + memset(buffer, 0, buffer_mask + 1); + read_ptr.all = 0; + write_ptr = (buffer_mask + 1) / 2; + write_ptr = 0; + plugin_data->buffer = buffer; + plugin_data->buffer_mask = buffer_mask; + plugin_data->read_ptr = read_ptr; + plugin_data->write_ptr = write_ptr; + +} + +static void cleanupRateShifter(LADSPA_Handle instance) { +#line 43 "rate_shifter_1417.xml" + RateShifter *plugin_data = (RateShifter *)instance; + free(plugin_data->buffer); + free(instance); +} + +static void connectPortRateShifter( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + RateShifter *plugin; + + plugin = (RateShifter *)instance; + switch (port) { + case RATESHIFTER_RATE: + plugin->rate = data; + break; + case RATESHIFTER_INPUT: + plugin->input = data; + break; + case RATESHIFTER_OUTPUT: + plugin->output = data; + break; + } +} + +static LADSPA_Handle instantiateRateShifter( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + RateShifter *plugin_data = (RateShifter *)malloc(sizeof(RateShifter)); + LADSPA_Data *buffer = NULL; + unsigned int buffer_mask; + fixp32 read_ptr; + unsigned int write_ptr; + +#line 23 "rate_shifter_1417.xml" + unsigned int size = 32768; + const float fs = s_rate; + + while (size < 2.7f * fs) { + size *= 2; + } + buffer = calloc(size, sizeof(LADSPA_Data)); + buffer_mask = size - 1; + read_ptr.all = 0; + write_ptr = size / 2; + + plugin_data->buffer = buffer; + plugin_data->buffer_mask = buffer_mask; + plugin_data->read_ptr = read_ptr; + plugin_data->write_ptr = write_ptr; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runRateShifter(LADSPA_Handle instance, unsigned long sample_count) { + RateShifter *plugin_data = (RateShifter *)instance; + + /* Rate (float value) */ + const LADSPA_Data rate = *(plugin_data->rate); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + LADSPA_Data * buffer = plugin_data->buffer; + unsigned int buffer_mask = plugin_data->buffer_mask; + fixp32 read_ptr = plugin_data->read_ptr; + unsigned int write_ptr = plugin_data->write_ptr; + +#line 47 "rate_shifter_1417.xml" + unsigned long pos; + fixp32 read_inc; + + read_inc.all = (long long)(rate * 4294967296.0f); + + for (pos = 0; pos < sample_count; pos++) { + const unsigned int rp = read_ptr.part.in; + + /* Do write pointer stuff */ + buffer[write_ptr] = input[pos]; + write_ptr = (write_ptr + 1) & buffer_mask; + + /* And now read pointer */ + buffer_write(output[pos], cube_interp((float)read_ptr.part.fr / 4294967296.0f, buffer[(rp - 1) & buffer_mask], buffer[rp], buffer[(rp + 1) & buffer_mask], buffer[(rp + 2) & buffer_mask])); + read_ptr.all += read_inc.all; + read_ptr.part.in &= buffer_mask; + } + + plugin_data->read_ptr.all = read_ptr.all; + plugin_data->write_ptr = write_ptr; +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainRateShifter(LADSPA_Handle instance, LADSPA_Data gain) { + ((RateShifter *)instance)->run_adding_gain = gain; +} + +static void runAddingRateShifter(LADSPA_Handle instance, unsigned long sample_count) { + RateShifter *plugin_data = (RateShifter *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Rate (float value) */ + const LADSPA_Data rate = *(plugin_data->rate); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + LADSPA_Data * buffer = plugin_data->buffer; + unsigned int buffer_mask = plugin_data->buffer_mask; + fixp32 read_ptr = plugin_data->read_ptr; + unsigned int write_ptr = plugin_data->write_ptr; + +#line 47 "rate_shifter_1417.xml" + unsigned long pos; + fixp32 read_inc; + + read_inc.all = (long long)(rate * 4294967296.0f); + + for (pos = 0; pos < sample_count; pos++) { + const unsigned int rp = read_ptr.part.in; + + /* Do write pointer stuff */ + buffer[write_ptr] = input[pos]; + write_ptr = (write_ptr + 1) & buffer_mask; + + /* And now read pointer */ + buffer_write(output[pos], cube_interp((float)read_ptr.part.fr / 4294967296.0f, buffer[(rp - 1) & buffer_mask], buffer[rp], buffer[(rp + 1) & buffer_mask], buffer[(rp + 2) & buffer_mask])); + read_ptr.all += read_inc.all; + read_ptr.part.in &= buffer_mask; + } + + plugin_data->read_ptr.all = read_ptr.all; + plugin_data->write_ptr = write_ptr; +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + rateShifterDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (rateShifterDescriptor) { + rateShifterDescriptor->UniqueID = 1417; + rateShifterDescriptor->Label = "rateShifter"; + rateShifterDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + rateShifterDescriptor->Name = + D_("Rate shifter"); + rateShifterDescriptor->Maker = + "Steve Harris "; + rateShifterDescriptor->Copyright = + "GPL"; + rateShifterDescriptor->PortCount = 3; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(3, + sizeof(LADSPA_PortDescriptor)); + rateShifterDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(3, + sizeof(LADSPA_PortRangeHint)); + rateShifterDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(3, sizeof(char*)); + rateShifterDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Rate */ + port_descriptors[RATESHIFTER_RATE] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[RATESHIFTER_RATE] = + D_("Rate"); + port_range_hints[RATESHIFTER_RATE].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1; + port_range_hints[RATESHIFTER_RATE].LowerBound = -4; + port_range_hints[RATESHIFTER_RATE].UpperBound = 4; + + /* Parameters for Input */ + port_descriptors[RATESHIFTER_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[RATESHIFTER_INPUT] = + D_("Input"); + port_range_hints[RATESHIFTER_INPUT].HintDescriptor = 0; + + /* Parameters for Output */ + port_descriptors[RATESHIFTER_OUTPUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[RATESHIFTER_OUTPUT] = + D_("Output"); + port_range_hints[RATESHIFTER_OUTPUT].HintDescriptor = 0; + + rateShifterDescriptor->activate = activateRateShifter; + rateShifterDescriptor->cleanup = cleanupRateShifter; + rateShifterDescriptor->connect_port = connectPortRateShifter; + rateShifterDescriptor->deactivate = NULL; + rateShifterDescriptor->instantiate = instantiateRateShifter; + rateShifterDescriptor->run = runRateShifter; + rateShifterDescriptor->run_adding = runAddingRateShifter; + rateShifterDescriptor->set_run_adding_gain = setRunAddingGainRateShifter; + } +} + +void _fini() { + if (rateShifterDescriptor) { + free((LADSPA_PortDescriptor *)rateShifterDescriptor->PortDescriptors); + free((char **)rateShifterDescriptor->PortNames); + free((LADSPA_PortRangeHint *)rateShifterDescriptor->PortRangeHints); + free(rateShifterDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/retro_flange_1208.c b/plugins/LadspaEffect/swh/retro_flange_1208.c new file mode 100644 index 000000000..5a4124bfd --- /dev/null +++ b/plugins/LadspaEffect/swh/retro_flange_1208.c @@ -0,0 +1,592 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + +#line 10 "retro_flange_1208.xml" + +#include "ladspa-util.h" + +#define BASE_BUFFER 0.001 // Base buffer length (s) + +inline LADSPA_Data sat(LADSPA_Data x, float q, float dist) { + if (x == q) { + return 1.0f / dist + q / (1.0f - f_exp(dist * q)); + } + return ((x - q) / (1.0f - f_exp(-dist * (x - q))) + q / + (1.0f - f_exp(dist * q))); +} + +#define RETROFLANGE_DELAY_DEPTH_AVG 0 +#define RETROFLANGE_LAW_FREQ 1 +#define RETROFLANGE_INPUT 2 +#define RETROFLANGE_OUTPUT 3 + +static LADSPA_Descriptor *retroFlangeDescriptor = NULL; + +typedef struct { + LADSPA_Data *delay_depth_avg; + LADSPA_Data *law_freq; + LADSPA_Data *input; + LADSPA_Data *output; + LADSPA_Data *buffer; + long buffer_size; + long count; + LADSPA_Data *delay_line; + int delay_line_length; + int delay_pos; + LADSPA_Data last_in; + int last_law_p; + int last_phase; + int max_law_p; + float next_law_peak; + int next_law_pos; + float phase; + float prev_law_peak; + int prev_law_pos; + long sample_rate; + LADSPA_Data z0; + LADSPA_Data z1; + LADSPA_Data z2; + LADSPA_Data run_adding_gain; +} RetroFlange; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return retroFlangeDescriptor; + default: + return NULL; + } +} + +static void activateRetroFlange(LADSPA_Handle instance) { + RetroFlange *plugin_data = (RetroFlange *)instance; + LADSPA_Data *buffer = plugin_data->buffer; + long buffer_size = plugin_data->buffer_size; + long count = plugin_data->count; + LADSPA_Data *delay_line = plugin_data->delay_line; + int delay_line_length = plugin_data->delay_line_length; + int delay_pos = plugin_data->delay_pos; + LADSPA_Data last_in = plugin_data->last_in; + int last_law_p = plugin_data->last_law_p; + int last_phase = plugin_data->last_phase; + int max_law_p = plugin_data->max_law_p; + float next_law_peak = plugin_data->next_law_peak; + int next_law_pos = plugin_data->next_law_pos; + float phase = plugin_data->phase; + float prev_law_peak = plugin_data->prev_law_peak; + int prev_law_pos = plugin_data->prev_law_pos; + long sample_rate = plugin_data->sample_rate; + LADSPA_Data z0 = plugin_data->z0; + LADSPA_Data z1 = plugin_data->z1; + LADSPA_Data z2 = plugin_data->z2; +#line 57 "retro_flange_1208.xml" + memset(delay_line, 0, sizeof(float) * delay_line_length); + memset(buffer, 0, sizeof(LADSPA_Data) * buffer_size); + z0 = 0.0f; + z1 = 0.0f; + z2 = 0.0f; + + prev_law_peak = 0.0f; + next_law_peak = 1.0f; + prev_law_pos = 0; + next_law_pos = 10; + plugin_data->buffer = buffer; + plugin_data->buffer_size = buffer_size; + plugin_data->count = count; + plugin_data->delay_line = delay_line; + plugin_data->delay_line_length = delay_line_length; + plugin_data->delay_pos = delay_pos; + plugin_data->last_in = last_in; + plugin_data->last_law_p = last_law_p; + plugin_data->last_phase = last_phase; + plugin_data->max_law_p = max_law_p; + plugin_data->next_law_peak = next_law_peak; + plugin_data->next_law_pos = next_law_pos; + plugin_data->phase = phase; + plugin_data->prev_law_peak = prev_law_peak; + plugin_data->prev_law_pos = prev_law_pos; + plugin_data->sample_rate = sample_rate; + plugin_data->z0 = z0; + plugin_data->z1 = z1; + plugin_data->z2 = z2; + +} + +static void cleanupRetroFlange(LADSPA_Handle instance) { +#line 70 "retro_flange_1208.xml" + RetroFlange *plugin_data = (RetroFlange *)instance; + free(plugin_data->delay_line); + free(plugin_data->buffer); + free(instance); +} + +static void connectPortRetroFlange( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + RetroFlange *plugin; + + plugin = (RetroFlange *)instance; + switch (port) { + case RETROFLANGE_DELAY_DEPTH_AVG: + plugin->delay_depth_avg = data; + break; + case RETROFLANGE_LAW_FREQ: + plugin->law_freq = data; + break; + case RETROFLANGE_INPUT: + plugin->input = data; + break; + case RETROFLANGE_OUTPUT: + plugin->output = data; + break; + } +} + +static LADSPA_Handle instantiateRetroFlange( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + RetroFlange *plugin_data = (RetroFlange *)malloc(sizeof(RetroFlange)); + LADSPA_Data *buffer = NULL; + long buffer_size; + long count; + LADSPA_Data *delay_line = NULL; + int delay_line_length; + int delay_pos; + LADSPA_Data last_in; + int last_law_p; + int last_phase; + int max_law_p; + float next_law_peak; + int next_law_pos; + float phase; + float prev_law_peak; + int prev_law_pos; + long sample_rate; + LADSPA_Data z0; + LADSPA_Data z1; + LADSPA_Data z2; + +#line 32 "retro_flange_1208.xml" + sample_rate = s_rate; + buffer_size = BASE_BUFFER * s_rate; + buffer = calloc(buffer_size, sizeof(LADSPA_Data)); + phase = 0; + last_phase = 0; + last_in = 0.0f; + max_law_p = s_rate*2; + last_law_p = -1; + delay_line_length = sample_rate * 0.01f; + delay_line = calloc(sizeof(float), delay_line_length); + + delay_pos = 0; + count = 0; + + prev_law_peak = 0.0f; + next_law_peak = 1.0f; + prev_law_pos = 0; + next_law_pos = 10; + + z0 = 0.0f; + z1 = 0.0f; + z2 = 0.0f; + + plugin_data->buffer = buffer; + plugin_data->buffer_size = buffer_size; + plugin_data->count = count; + plugin_data->delay_line = delay_line; + plugin_data->delay_line_length = delay_line_length; + plugin_data->delay_pos = delay_pos; + plugin_data->last_in = last_in; + plugin_data->last_law_p = last_law_p; + plugin_data->last_phase = last_phase; + plugin_data->max_law_p = max_law_p; + plugin_data->next_law_peak = next_law_peak; + plugin_data->next_law_pos = next_law_pos; + plugin_data->phase = phase; + plugin_data->prev_law_peak = prev_law_peak; + plugin_data->prev_law_pos = prev_law_pos; + plugin_data->sample_rate = sample_rate; + plugin_data->z0 = z0; + plugin_data->z1 = z1; + plugin_data->z2 = z2; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runRetroFlange(LADSPA_Handle instance, unsigned long sample_count) { + RetroFlange *plugin_data = (RetroFlange *)instance; + + /* Average stall (ms) (float value) */ + const LADSPA_Data delay_depth_avg = *(plugin_data->delay_depth_avg); + + /* Flange frequency (Hz) (float value) */ + const LADSPA_Data law_freq = *(plugin_data->law_freq); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + LADSPA_Data * buffer = plugin_data->buffer; + long buffer_size = plugin_data->buffer_size; + long count = plugin_data->count; + LADSPA_Data * delay_line = plugin_data->delay_line; + int delay_line_length = plugin_data->delay_line_length; + int delay_pos = plugin_data->delay_pos; + LADSPA_Data last_in = plugin_data->last_in; + int last_law_p = plugin_data->last_law_p; + int last_phase = plugin_data->last_phase; + int max_law_p = plugin_data->max_law_p; + float next_law_peak = plugin_data->next_law_peak; + int next_law_pos = plugin_data->next_law_pos; + float phase = plugin_data->phase; + float prev_law_peak = plugin_data->prev_law_peak; + int prev_law_pos = plugin_data->prev_law_pos; + long sample_rate = plugin_data->sample_rate; + LADSPA_Data z0 = plugin_data->z0; + LADSPA_Data z1 = plugin_data->z1; + LADSPA_Data z2 = plugin_data->z2; + +#line 75 "retro_flange_1208.xml" + long int pos; + int law_p = f_trunc(LIMIT(sample_rate / f_clamp(law_freq, 0.0001f, 100.0f), 1, max_law_p)); + float increment; + float lin_int, lin_inc; + int track; + int fph; + LADSPA_Data out = 0.0f; + const float dda_c = f_clamp(delay_depth_avg, 0.0f, 10.0f); + int dl_used = (dda_c * sample_rate) / 1000; + float inc_base = 1000.0f * (float)BASE_BUFFER; + const float delay_depth = 2.0f * dda_c; + float n_ph, p_ph, law; + + for (pos = 0; pos < sample_count; pos++) { + // Write into the delay line + delay_line[delay_pos] = input[pos]; + z0 = delay_line[MOD(delay_pos - dl_used, delay_line_length)] + 0.12919609397f*z1 - 0.31050847f*z2; + out = sat(z0*0.20466966f + z1*0.40933933f + z2*0.40933933f, + -0.23f, 3.3f); + z2 = z1; z1 = z0; + delay_pos = (delay_pos + 1) % delay_line_length; + + if ((count++ % law_p) == 0) { + // Value for amplitude of law peak + next_law_peak = (float)rand() / (float)RAND_MAX; + next_law_pos = count + law_p; + } else if (count % law_p == law_p / 2) { + // Value for amplitude of law peak + prev_law_peak = (float)rand() / (float)RAND_MAX; + prev_law_pos = count + law_p; + } + + n_ph = (float)(law_p - abs(next_law_pos - count))/(float)law_p; + p_ph = n_ph + 0.5f; + if (p_ph > 1.0f) { + p_ph -= 1.0f; + } + law = f_sin_sq(3.1415926f*p_ph)*prev_law_peak + + f_sin_sq(3.1415926f*n_ph)*next_law_peak; + + increment = inc_base / (delay_depth * law + 0.2); + fph = f_trunc(phase); + last_phase = fph; + lin_int = phase - (float)fph; + out += LIN_INTERP(lin_int, buffer[(fph+1) % buffer_size], + buffer[(fph+2) % buffer_size]); + phase += increment; + lin_inc = 1.0f / (floor(phase) - last_phase + 1); + lin_inc = lin_inc > 1.0f ? 1.0f : lin_inc; + lin_int = 0.0f; + for (track = last_phase; track < phase; track++) { + lin_int += lin_inc; + buffer[track % buffer_size] = + LIN_INTERP(lin_int, last_in, input[pos]); + } + last_in = input[pos]; + buffer_write(output[pos], out * 0.707f); + if (phase >= buffer_size) { + phase -= buffer_size; + } + } + + // Store current phase in instance + plugin_data->phase = phase; + plugin_data->prev_law_peak = prev_law_peak; + plugin_data->next_law_peak = next_law_peak; + plugin_data->prev_law_pos = prev_law_pos; + plugin_data->next_law_pos = next_law_pos; + plugin_data->last_phase = last_phase; + plugin_data->last_in = last_in; + plugin_data->count = count; + plugin_data->last_law_p = last_law_p; + plugin_data->delay_pos = delay_pos; + plugin_data->z0 = z0; + plugin_data->z1 = z1; + plugin_data->z2 = z2; +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainRetroFlange(LADSPA_Handle instance, LADSPA_Data gain) { + ((RetroFlange *)instance)->run_adding_gain = gain; +} + +static void runAddingRetroFlange(LADSPA_Handle instance, unsigned long sample_count) { + RetroFlange *plugin_data = (RetroFlange *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Average stall (ms) (float value) */ + const LADSPA_Data delay_depth_avg = *(plugin_data->delay_depth_avg); + + /* Flange frequency (Hz) (float value) */ + const LADSPA_Data law_freq = *(plugin_data->law_freq); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + LADSPA_Data * buffer = plugin_data->buffer; + long buffer_size = plugin_data->buffer_size; + long count = plugin_data->count; + LADSPA_Data * delay_line = plugin_data->delay_line; + int delay_line_length = plugin_data->delay_line_length; + int delay_pos = plugin_data->delay_pos; + LADSPA_Data last_in = plugin_data->last_in; + int last_law_p = plugin_data->last_law_p; + int last_phase = plugin_data->last_phase; + int max_law_p = plugin_data->max_law_p; + float next_law_peak = plugin_data->next_law_peak; + int next_law_pos = plugin_data->next_law_pos; + float phase = plugin_data->phase; + float prev_law_peak = plugin_data->prev_law_peak; + int prev_law_pos = plugin_data->prev_law_pos; + long sample_rate = plugin_data->sample_rate; + LADSPA_Data z0 = plugin_data->z0; + LADSPA_Data z1 = plugin_data->z1; + LADSPA_Data z2 = plugin_data->z2; + +#line 75 "retro_flange_1208.xml" + long int pos; + int law_p = f_trunc(LIMIT(sample_rate / f_clamp(law_freq, 0.0001f, 100.0f), 1, max_law_p)); + float increment; + float lin_int, lin_inc; + int track; + int fph; + LADSPA_Data out = 0.0f; + const float dda_c = f_clamp(delay_depth_avg, 0.0f, 10.0f); + int dl_used = (dda_c * sample_rate) / 1000; + float inc_base = 1000.0f * (float)BASE_BUFFER; + const float delay_depth = 2.0f * dda_c; + float n_ph, p_ph, law; + + for (pos = 0; pos < sample_count; pos++) { + // Write into the delay line + delay_line[delay_pos] = input[pos]; + z0 = delay_line[MOD(delay_pos - dl_used, delay_line_length)] + 0.12919609397f*z1 - 0.31050847f*z2; + out = sat(z0*0.20466966f + z1*0.40933933f + z2*0.40933933f, + -0.23f, 3.3f); + z2 = z1; z1 = z0; + delay_pos = (delay_pos + 1) % delay_line_length; + + if ((count++ % law_p) == 0) { + // Value for amplitude of law peak + next_law_peak = (float)rand() / (float)RAND_MAX; + next_law_pos = count + law_p; + } else if (count % law_p == law_p / 2) { + // Value for amplitude of law peak + prev_law_peak = (float)rand() / (float)RAND_MAX; + prev_law_pos = count + law_p; + } + + n_ph = (float)(law_p - abs(next_law_pos - count))/(float)law_p; + p_ph = n_ph + 0.5f; + if (p_ph > 1.0f) { + p_ph -= 1.0f; + } + law = f_sin_sq(3.1415926f*p_ph)*prev_law_peak + + f_sin_sq(3.1415926f*n_ph)*next_law_peak; + + increment = inc_base / (delay_depth * law + 0.2); + fph = f_trunc(phase); + last_phase = fph; + lin_int = phase - (float)fph; + out += LIN_INTERP(lin_int, buffer[(fph+1) % buffer_size], + buffer[(fph+2) % buffer_size]); + phase += increment; + lin_inc = 1.0f / (floor(phase) - last_phase + 1); + lin_inc = lin_inc > 1.0f ? 1.0f : lin_inc; + lin_int = 0.0f; + for (track = last_phase; track < phase; track++) { + lin_int += lin_inc; + buffer[track % buffer_size] = + LIN_INTERP(lin_int, last_in, input[pos]); + } + last_in = input[pos]; + buffer_write(output[pos], out * 0.707f); + if (phase >= buffer_size) { + phase -= buffer_size; + } + } + + // Store current phase in instance + plugin_data->phase = phase; + plugin_data->prev_law_peak = prev_law_peak; + plugin_data->next_law_peak = next_law_peak; + plugin_data->prev_law_pos = prev_law_pos; + plugin_data->next_law_pos = next_law_pos; + plugin_data->last_phase = last_phase; + plugin_data->last_in = last_in; + plugin_data->count = count; + plugin_data->last_law_p = last_law_p; + plugin_data->delay_pos = delay_pos; + plugin_data->z0 = z0; + plugin_data->z1 = z1; + plugin_data->z2 = z2; +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + retroFlangeDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (retroFlangeDescriptor) { + retroFlangeDescriptor->UniqueID = 1208; + retroFlangeDescriptor->Label = "retroFlange"; + retroFlangeDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + retroFlangeDescriptor->Name = + D_("Retro Flanger"); + retroFlangeDescriptor->Maker = + "Steve Harris "; + retroFlangeDescriptor->Copyright = + "GPL"; + retroFlangeDescriptor->PortCount = 4; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(4, + sizeof(LADSPA_PortDescriptor)); + retroFlangeDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(4, + sizeof(LADSPA_PortRangeHint)); + retroFlangeDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(4, sizeof(char*)); + retroFlangeDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Average stall (ms) */ + port_descriptors[RETROFLANGE_DELAY_DEPTH_AVG] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[RETROFLANGE_DELAY_DEPTH_AVG] = + D_("Average stall (ms)"); + port_range_hints[RETROFLANGE_DELAY_DEPTH_AVG].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; + port_range_hints[RETROFLANGE_DELAY_DEPTH_AVG].LowerBound = 0; + port_range_hints[RETROFLANGE_DELAY_DEPTH_AVG].UpperBound = 10; + + /* Parameters for Flange frequency (Hz) */ + port_descriptors[RETROFLANGE_LAW_FREQ] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[RETROFLANGE_LAW_FREQ] = + D_("Flange frequency (Hz)"); + port_range_hints[RETROFLANGE_LAW_FREQ].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1; + port_range_hints[RETROFLANGE_LAW_FREQ].LowerBound = 0.5; + port_range_hints[RETROFLANGE_LAW_FREQ].UpperBound = 8; + + /* Parameters for Input */ + port_descriptors[RETROFLANGE_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[RETROFLANGE_INPUT] = + D_("Input"); + port_range_hints[RETROFLANGE_INPUT].HintDescriptor = 0; + + /* Parameters for Output */ + port_descriptors[RETROFLANGE_OUTPUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[RETROFLANGE_OUTPUT] = + D_("Output"); + port_range_hints[RETROFLANGE_OUTPUT].HintDescriptor = 0; + + retroFlangeDescriptor->activate = activateRetroFlange; + retroFlangeDescriptor->cleanup = cleanupRetroFlange; + retroFlangeDescriptor->connect_port = connectPortRetroFlange; + retroFlangeDescriptor->deactivate = NULL; + retroFlangeDescriptor->instantiate = instantiateRetroFlange; + retroFlangeDescriptor->run = runRetroFlange; + retroFlangeDescriptor->run_adding = runAddingRetroFlange; + retroFlangeDescriptor->set_run_adding_gain = setRunAddingGainRetroFlange; + } +} + +void _fini() { + if (retroFlangeDescriptor) { + free((LADSPA_PortDescriptor *)retroFlangeDescriptor->PortDescriptors); + free((char **)retroFlangeDescriptor->PortNames); + free((LADSPA_PortRangeHint *)retroFlangeDescriptor->PortRangeHints); + free(retroFlangeDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/revdelay_1605.c b/plugins/LadspaEffect/swh/revdelay_1605.c new file mode 100644 index 000000000..e8846fc79 --- /dev/null +++ b/plugins/LadspaEffect/swh/revdelay_1605.c @@ -0,0 +1,551 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + + +#include "ladspa-util.h" +#include + +#define MIN(a,b) ((a) < (b) ? (a) : (b)) +#define CALC_DELAY(delaytime) \ + (f_clamp (delaytime * sample_rate, 1.f, (float)(buffer_size + 1))) + +#define REVDELAY_IN 0 +#define REVDELAY_OUT 1 +#define REVDELAY_DELAY_TIME 2 +#define REVDELAY_DRY_LEVEL 3 +#define REVDELAY_WET_LEVEL 4 +#define REVDELAY_FEEDBACK 5 +#define REVDELAY_XFADE_SAMP 6 + +static LADSPA_Descriptor *revdelayDescriptor = NULL; + +typedef struct { + LADSPA_Data *in; + LADSPA_Data *out; + LADSPA_Data *delay_time; + LADSPA_Data *dry_level; + LADSPA_Data *wet_level; + LADSPA_Data *feedback; + LADSPA_Data *xfade_samp; + LADSPA_Data *buffer; + unsigned int buffer_size; + LADSPA_Data delay_samples; + LADSPA_Data last_delay_time; + unsigned int sample_rate; + long write_phase; + LADSPA_Data run_adding_gain; +} Revdelay; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return revdelayDescriptor; + default: + return NULL; + } +} + +static void activateRevdelay(LADSPA_Handle instance) { + Revdelay *plugin_data = (Revdelay *)instance; + LADSPA_Data *buffer = plugin_data->buffer; + unsigned int buffer_size = plugin_data->buffer_size; + LADSPA_Data delay_samples = plugin_data->delay_samples; + LADSPA_Data last_delay_time = plugin_data->last_delay_time; + unsigned int sample_rate = plugin_data->sample_rate; + long write_phase = plugin_data->write_phase; + unsigned int size; + + size = sample_rate * 5 * 2; /* 5 second maximum */ + + /* calloc sets the buffer to zero. */ + buffer = calloc(size, sizeof(LADSPA_Data)); + + buffer_size = size; + write_phase = 0; + delay_samples = 0; + plugin_data->buffer = buffer; + plugin_data->buffer_size = buffer_size; + plugin_data->delay_samples = delay_samples; + plugin_data->last_delay_time = last_delay_time; + plugin_data->sample_rate = sample_rate; + plugin_data->write_phase = write_phase; + +} + +static void cleanupRevdelay(LADSPA_Handle instance) { + Revdelay *plugin_data = (Revdelay *)instance; + free(plugin_data->buffer); + free(instance); +} + +static void connectPortRevdelay( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + Revdelay *plugin; + + plugin = (Revdelay *)instance; + switch (port) { + case REVDELAY_IN: + plugin->in = data; + break; + case REVDELAY_OUT: + plugin->out = data; + break; + case REVDELAY_DELAY_TIME: + plugin->delay_time = data; + break; + case REVDELAY_DRY_LEVEL: + plugin->dry_level = data; + break; + case REVDELAY_WET_LEVEL: + plugin->wet_level = data; + break; + case REVDELAY_FEEDBACK: + plugin->feedback = data; + break; + case REVDELAY_XFADE_SAMP: + plugin->xfade_samp = data; + break; + } +} + +static LADSPA_Handle instantiateRevdelay( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + Revdelay *plugin_data = (Revdelay *)malloc(sizeof(Revdelay)); + LADSPA_Data *buffer = NULL; + unsigned int buffer_size; + LADSPA_Data delay_samples; + LADSPA_Data last_delay_time; + unsigned int sample_rate; + long write_phase; + + sample_rate = s_rate; + buffer_size = 0; + delay_samples = 0; + last_delay_time = 0; + write_phase = 0; + + plugin_data->buffer = buffer; + plugin_data->buffer_size = buffer_size; + plugin_data->delay_samples = delay_samples; + plugin_data->last_delay_time = last_delay_time; + plugin_data->sample_rate = sample_rate; + plugin_data->write_phase = write_phase; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runRevdelay(LADSPA_Handle instance, unsigned long sample_count) { + Revdelay *plugin_data = (Revdelay *)instance; + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const in = plugin_data->in; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const out = plugin_data->out; + + /* Delay Time (s) (float value) */ + const LADSPA_Data delay_time = *(plugin_data->delay_time); + + /* Dry Level (dB) (float value) */ + const LADSPA_Data dry_level = *(plugin_data->dry_level); + + /* Wet Level (dB) (float value) */ + const LADSPA_Data wet_level = *(plugin_data->wet_level); + + /* Feedback (float value) */ + const LADSPA_Data feedback = *(plugin_data->feedback); + + /* Crossfade samples (float value) */ + const LADSPA_Data xfade_samp = *(plugin_data->xfade_samp); + LADSPA_Data * buffer = plugin_data->buffer; + unsigned int buffer_size = plugin_data->buffer_size; + LADSPA_Data delay_samples = plugin_data->delay_samples; + LADSPA_Data last_delay_time = plugin_data->last_delay_time; + unsigned int sample_rate = plugin_data->sample_rate; + long write_phase = plugin_data->write_phase; + + int i; + unsigned long delay2; + float dry = DB_CO(dry_level); + float wet = DB_CO(wet_level); + float fadescale; + unsigned long xfadesamp = xfade_samp; + + if (write_phase == 0) { + plugin_data->last_delay_time = delay_time; + plugin_data->delay_samples = delay_samples = CALC_DELAY (delay_time); + } + + if (delay_time == last_delay_time) { + long idelay_samples = (long)delay_samples; + delay2 = idelay_samples * 2; + + if (xfadesamp > idelay_samples) { + /* force it to half */ + xfadesamp = idelay_samples / 2; + } + + for (i=0; i (idelay_samples - xfadesamp)) { + fadescale = (idelay_samples - (write_phase % idelay_samples)) / (1.0 * xfadesamp); + } + else { + fadescale = 1.0; + } + + buffer[write_phase] = fadescale * (insamp + (feedback * read)); + buffer[write_phase] = flush_to_zero(buffer[write_phase]); + + buffer_write(out[i], read); + write_phase = (write_phase + 1) % delay2; + } + } else { + float next_delay_samples = CALC_DELAY (delay_time); + float delay_samples_slope = (next_delay_samples - delay_samples) / sample_count; + + for (i=0; i (idelay_samples - xfade_samp)) { + fadescale = (idelay_samples - (write_phase % idelay_samples)) / (1.0 * xfade_samp); + } + else { + fadescale = 1.0; + } + + buffer[write_phase] = fadescale * (insamp + (feedback * read)); + buffer[write_phase] = flush_to_zero(buffer[write_phase]); + + buffer_write(out[i], read); + } + + plugin_data->last_delay_time = delay_time; + plugin_data->delay_samples = delay_samples; + } + + plugin_data->write_phase = write_phase; +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainRevdelay(LADSPA_Handle instance, LADSPA_Data gain) { + ((Revdelay *)instance)->run_adding_gain = gain; +} + +static void runAddingRevdelay(LADSPA_Handle instance, unsigned long sample_count) { + Revdelay *plugin_data = (Revdelay *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const in = plugin_data->in; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const out = plugin_data->out; + + /* Delay Time (s) (float value) */ + const LADSPA_Data delay_time = *(plugin_data->delay_time); + + /* Dry Level (dB) (float value) */ + const LADSPA_Data dry_level = *(plugin_data->dry_level); + + /* Wet Level (dB) (float value) */ + const LADSPA_Data wet_level = *(plugin_data->wet_level); + + /* Feedback (float value) */ + const LADSPA_Data feedback = *(plugin_data->feedback); + + /* Crossfade samples (float value) */ + const LADSPA_Data xfade_samp = *(plugin_data->xfade_samp); + LADSPA_Data * buffer = plugin_data->buffer; + unsigned int buffer_size = plugin_data->buffer_size; + LADSPA_Data delay_samples = plugin_data->delay_samples; + LADSPA_Data last_delay_time = plugin_data->last_delay_time; + unsigned int sample_rate = plugin_data->sample_rate; + long write_phase = plugin_data->write_phase; + + int i; + unsigned long delay2; + float dry = DB_CO(dry_level); + float wet = DB_CO(wet_level); + float fadescale; + unsigned long xfadesamp = xfade_samp; + + if (write_phase == 0) { + plugin_data->last_delay_time = delay_time; + plugin_data->delay_samples = delay_samples = CALC_DELAY (delay_time); + } + + if (delay_time == last_delay_time) { + long idelay_samples = (long)delay_samples; + delay2 = idelay_samples * 2; + + if (xfadesamp > idelay_samples) { + /* force it to half */ + xfadesamp = idelay_samples / 2; + } + + for (i=0; i (idelay_samples - xfadesamp)) { + fadescale = (idelay_samples - (write_phase % idelay_samples)) / (1.0 * xfadesamp); + } + else { + fadescale = 1.0; + } + + buffer[write_phase] = fadescale * (insamp + (feedback * read)); + buffer[write_phase] = flush_to_zero(buffer[write_phase]); + + buffer_write(out[i], read); + write_phase = (write_phase + 1) % delay2; + } + } else { + float next_delay_samples = CALC_DELAY (delay_time); + float delay_samples_slope = (next_delay_samples - delay_samples) / sample_count; + + for (i=0; i (idelay_samples - xfade_samp)) { + fadescale = (idelay_samples - (write_phase % idelay_samples)) / (1.0 * xfade_samp); + } + else { + fadescale = 1.0; + } + + buffer[write_phase] = fadescale * (insamp + (feedback * read)); + buffer[write_phase] = flush_to_zero(buffer[write_phase]); + + buffer_write(out[i], read); + } + + plugin_data->last_delay_time = delay_time; + plugin_data->delay_samples = delay_samples; + } + + plugin_data->write_phase = write_phase; +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + revdelayDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (revdelayDescriptor) { + revdelayDescriptor->UniqueID = 1605; + revdelayDescriptor->Label = "revdelay"; + revdelayDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + revdelayDescriptor->Name = + D_("Reverse Delay (5s max)"); + revdelayDescriptor->Maker = + "Jesse Chappell "; + revdelayDescriptor->Copyright = + "GPL"; + revdelayDescriptor->PortCount = 7; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(7, + sizeof(LADSPA_PortDescriptor)); + revdelayDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(7, + sizeof(LADSPA_PortRangeHint)); + revdelayDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(7, sizeof(char*)); + revdelayDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Input */ + port_descriptors[REVDELAY_IN] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[REVDELAY_IN] = + D_("Input"); + port_range_hints[REVDELAY_IN].HintDescriptor = 0; + + /* Parameters for Output */ + port_descriptors[REVDELAY_OUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[REVDELAY_OUT] = + D_("Output"); + port_range_hints[REVDELAY_OUT].HintDescriptor = 0; + + /* Parameters for Delay Time (s) */ + port_descriptors[REVDELAY_DELAY_TIME] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[REVDELAY_DELAY_TIME] = + D_("Delay Time (s)"); + port_range_hints[REVDELAY_DELAY_TIME].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[REVDELAY_DELAY_TIME].LowerBound = 0; + port_range_hints[REVDELAY_DELAY_TIME].UpperBound = 5.0; + + /* Parameters for Dry Level (dB) */ + port_descriptors[REVDELAY_DRY_LEVEL] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[REVDELAY_DRY_LEVEL] = + D_("Dry Level (dB)"); + port_range_hints[REVDELAY_DRY_LEVEL].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[REVDELAY_DRY_LEVEL].LowerBound = -70; + port_range_hints[REVDELAY_DRY_LEVEL].UpperBound = 0; + + /* Parameters for Wet Level (dB) */ + port_descriptors[REVDELAY_WET_LEVEL] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[REVDELAY_WET_LEVEL] = + D_("Wet Level (dB)"); + port_range_hints[REVDELAY_WET_LEVEL].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[REVDELAY_WET_LEVEL].LowerBound = -70; + port_range_hints[REVDELAY_WET_LEVEL].UpperBound = 0; + + /* Parameters for Feedback */ + port_descriptors[REVDELAY_FEEDBACK] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[REVDELAY_FEEDBACK] = + D_("Feedback"); + port_range_hints[REVDELAY_FEEDBACK].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[REVDELAY_FEEDBACK].LowerBound = 0; + port_range_hints[REVDELAY_FEEDBACK].UpperBound = 1; + + /* Parameters for Crossfade samples */ + port_descriptors[REVDELAY_XFADE_SAMP] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[REVDELAY_XFADE_SAMP] = + D_("Crossfade samples"); + port_range_hints[REVDELAY_XFADE_SAMP].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW | LADSPA_HINT_INTEGER; + port_range_hints[REVDELAY_XFADE_SAMP].LowerBound = 0; + port_range_hints[REVDELAY_XFADE_SAMP].UpperBound = 5000; + + revdelayDescriptor->activate = activateRevdelay; + revdelayDescriptor->cleanup = cleanupRevdelay; + revdelayDescriptor->connect_port = connectPortRevdelay; + revdelayDescriptor->deactivate = NULL; + revdelayDescriptor->instantiate = instantiateRevdelay; + revdelayDescriptor->run = runRevdelay; + revdelayDescriptor->run_adding = runAddingRevdelay; + revdelayDescriptor->set_run_adding_gain = setRunAddingGainRevdelay; + } +} + +void _fini() { + if (revdelayDescriptor) { + free((LADSPA_PortDescriptor *)revdelayDescriptor->PortDescriptors); + free((char **)revdelayDescriptor->PortNames); + free((LADSPA_PortRangeHint *)revdelayDescriptor->PortRangeHints); + free(revdelayDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/ringmod_1188.c b/plugins/LadspaEffect/swh/ringmod_1188.c new file mode 100644 index 000000000..531081d93 --- /dev/null +++ b/plugins/LadspaEffect/swh/ringmod_1188.c @@ -0,0 +1,649 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + +#line 9 "ringmod_1188.xml" + +#include "ladspa-util.h" + +int refcount; +LADSPA_Data *sin_tbl, *tri_tbl, *saw_tbl, *squ_tbl; +long sample_rate; + +#define RINGMOD_2I1O_DEPTH 0 +#define RINGMOD_2I1O_INPUT 1 +#define RINGMOD_2I1O_MODULATOR 2 +#define RINGMOD_2I1O_OUTPUT 3 +#define RINGMOD_1I1O1L_DEPTHP 0 +#define RINGMOD_1I1O1L_FREQ 1 +#define RINGMOD_1I1O1L_SIN 2 +#define RINGMOD_1I1O1L_TRI 3 +#define RINGMOD_1I1O1L_SAW 4 +#define RINGMOD_1I1O1L_SQU 5 +#define RINGMOD_1I1O1L_INPUT 6 +#define RINGMOD_1I1O1L_OUTPUT 7 + +static LADSPA_Descriptor *ringmod_2i1oDescriptor = NULL; + +typedef struct { + LADSPA_Data *depth; + LADSPA_Data *input; + LADSPA_Data *modulator; + LADSPA_Data *output; + LADSPA_Data run_adding_gain; +} Ringmod_2i1o; + +static LADSPA_Descriptor *ringmod_1i1o1lDescriptor = NULL; + +typedef struct { + LADSPA_Data *depthp; + LADSPA_Data *freq; + LADSPA_Data *sin; + LADSPA_Data *tri; + LADSPA_Data *saw; + LADSPA_Data *squ; + LADSPA_Data *input; + LADSPA_Data *output; + LADSPA_Data offset; + LADSPA_Data run_adding_gain; +} Ringmod_1i1o1l; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return ringmod_2i1oDescriptor; + case 1: + return ringmod_1i1o1lDescriptor; + default: + return NULL; + } +} + +static void cleanupRingmod_2i1o(LADSPA_Handle instance) { + free(instance); +} + +static void connectPortRingmod_2i1o( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + Ringmod_2i1o *plugin; + + plugin = (Ringmod_2i1o *)instance; + switch (port) { + case RINGMOD_2I1O_DEPTH: + plugin->depth = data; + break; + case RINGMOD_2I1O_INPUT: + plugin->input = data; + break; + case RINGMOD_2I1O_MODULATOR: + plugin->modulator = data; + break; + case RINGMOD_2I1O_OUTPUT: + plugin->output = data; + break; + } +} + +static LADSPA_Handle instantiateRingmod_2i1o( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + Ringmod_2i1o *plugin_data = (Ringmod_2i1o *)malloc(sizeof(Ringmod_2i1o)); + plugin_data->run_adding_gain = 1.0f; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runRingmod_2i1o(LADSPA_Handle instance, unsigned long sample_count) { + Ringmod_2i1o *plugin_data = (Ringmod_2i1o *)instance; + + /* Modulation depth (0=none, 1=AM, 2=RM) (float value) */ + const LADSPA_Data depth = *(plugin_data->depth); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Modulator (array of floats of length sample_count) */ + const LADSPA_Data * const modulator = plugin_data->modulator; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + +#line 24 "ringmod_1188.xml" + unsigned long pos; + float tmpa = depth * 0.5f; + float tmpb = 2.0f - depth; + + for (pos = 0; pos < sample_count; pos++) { + buffer_write(output[pos], input[pos] * (tmpa * modulator[pos] + tmpb)); + } +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainRingmod_2i1o(LADSPA_Handle instance, LADSPA_Data gain) { + ((Ringmod_2i1o *)instance)->run_adding_gain = gain; +} + +static void runAddingRingmod_2i1o(LADSPA_Handle instance, unsigned long sample_count) { + Ringmod_2i1o *plugin_data = (Ringmod_2i1o *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Modulation depth (0=none, 1=AM, 2=RM) (float value) */ + const LADSPA_Data depth = *(plugin_data->depth); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Modulator (array of floats of length sample_count) */ + const LADSPA_Data * const modulator = plugin_data->modulator; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + +#line 24 "ringmod_1188.xml" + unsigned long pos; + float tmpa = depth * 0.5f; + float tmpb = 2.0f - depth; + + for (pos = 0; pos < sample_count; pos++) { + buffer_write(output[pos], input[pos] * (tmpa * modulator[pos] + tmpb)); + } +} + +static void activateRingmod_1i1o1l(LADSPA_Handle instance) { + Ringmod_1i1o1l *plugin_data = (Ringmod_1i1o1l *)instance; + LADSPA_Data offset = plugin_data->offset; +#line 89 "ringmod_1188.xml" + offset = 0; + plugin_data->offset = offset; + +} + +static void cleanupRingmod_1i1o1l(LADSPA_Handle instance) { +#line 93 "ringmod_1188.xml" + Ringmod_1i1o1l *plugin_data = (Ringmod_1i1o1l *)instance; + plugin_data = plugin_data; + if (--refcount == 0) { + free(sin_tbl); + free(tri_tbl); + free(squ_tbl); + free(saw_tbl); + } + free(instance); +} + +static void connectPortRingmod_1i1o1l( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + Ringmod_1i1o1l *plugin; + + plugin = (Ringmod_1i1o1l *)instance; + switch (port) { + case RINGMOD_1I1O1L_DEPTHP: + plugin->depthp = data; + break; + case RINGMOD_1I1O1L_FREQ: + plugin->freq = data; + break; + case RINGMOD_1I1O1L_SIN: + plugin->sin = data; + break; + case RINGMOD_1I1O1L_TRI: + plugin->tri = data; + break; + case RINGMOD_1I1O1L_SAW: + plugin->saw = data; + break; + case RINGMOD_1I1O1L_SQU: + plugin->squ = data; + break; + case RINGMOD_1I1O1L_INPUT: + plugin->input = data; + break; + case RINGMOD_1I1O1L_OUTPUT: + plugin->output = data; + break; + } +} + +static LADSPA_Handle instantiateRingmod_1i1o1l( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + Ringmod_1i1o1l *plugin_data = (Ringmod_1i1o1l *)malloc(sizeof(Ringmod_1i1o1l)); + LADSPA_Data offset; + +#line 59 "ringmod_1188.xml" + long i; + + sample_rate = s_rate; + + if (refcount++ == 0) { + sin_tbl = malloc(sizeof(LADSPA_Data) * sample_rate); + for (i = 0; i < sample_rate; i++) { + sin_tbl[i] = sin(i * 2 * M_PI / sample_rate); + } + + tri_tbl = malloc(sizeof(LADSPA_Data) * sample_rate); + for (i = 0; i < sample_rate; i++) { + tri_tbl[i] = acos(cos(i * 2 * M_PI / sample_rate)) / M_PI * 2 - 1; + } + + squ_tbl = malloc(sizeof(LADSPA_Data) * sample_rate); + for (i = 0; i < sample_rate; i++) { + squ_tbl[i] = (i < sample_rate/2) ? 1 : -1; + } + + saw_tbl = malloc(sizeof(LADSPA_Data) * sample_rate); + for (i = 0; i < sample_rate; i++) { + saw_tbl[i] = ((2.0 * i) - (float)sample_rate) / (float)sample_rate; + } + } + + offset = 0; + + plugin_data->offset = offset; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runRingmod_1i1o1l(LADSPA_Handle instance, unsigned long sample_count) { + Ringmod_1i1o1l *plugin_data = (Ringmod_1i1o1l *)instance; + + /* Modulation depth (0=none, 1=AM, 2=RM) (float value) */ + const LADSPA_Data depthp = *(plugin_data->depthp); + + /* Frequency (Hz) (float value) */ + const LADSPA_Data freq = *(plugin_data->freq); + + /* Sine level (float value) */ + const LADSPA_Data sin = *(plugin_data->sin); + + /* Triangle level (float value) */ + const LADSPA_Data tri = *(plugin_data->tri); + + /* Sawtooth level (float value) */ + const LADSPA_Data saw = *(plugin_data->saw); + + /* Square level (float value) */ + const LADSPA_Data squ = *(plugin_data->squ); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + LADSPA_Data offset = plugin_data->offset; + +#line 24 "ringmod_1188.xml" + LADSPA_Data scale = fabs(sin) + fabs(tri) + + fabs(saw) + fabs(squ); + int o; + unsigned long pos; + + // Rescale to more useful value + const float depth = depthp * 0.5f; + + if (scale == 0.0) { + scale = 1.0; + } + + for (pos = 0; pos < sample_count; pos++) { + o = f_round(offset); + buffer_write(output[pos], input[pos] * + (depth * (((sin / scale) * sin_tbl[o]) + + ((tri / scale) * tri_tbl[o]) + + ((saw / scale) * saw_tbl[o]) + + ((squ / scale) * squ_tbl[o])) + + (1.0f - depth))); + offset += freq; + if (offset > sample_rate) { + offset -= sample_rate; + } + } + + plugin_data->offset = offset; +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainRingmod_1i1o1l(LADSPA_Handle instance, LADSPA_Data gain) { + ((Ringmod_1i1o1l *)instance)->run_adding_gain = gain; +} + +static void runAddingRingmod_1i1o1l(LADSPA_Handle instance, unsigned long sample_count) { + Ringmod_1i1o1l *plugin_data = (Ringmod_1i1o1l *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Modulation depth (0=none, 1=AM, 2=RM) (float value) */ + const LADSPA_Data depthp = *(plugin_data->depthp); + + /* Frequency (Hz) (float value) */ + const LADSPA_Data freq = *(plugin_data->freq); + + /* Sine level (float value) */ + const LADSPA_Data sin = *(plugin_data->sin); + + /* Triangle level (float value) */ + const LADSPA_Data tri = *(plugin_data->tri); + + /* Sawtooth level (float value) */ + const LADSPA_Data saw = *(plugin_data->saw); + + /* Square level (float value) */ + const LADSPA_Data squ = *(plugin_data->squ); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + LADSPA_Data offset = plugin_data->offset; + +#line 24 "ringmod_1188.xml" + LADSPA_Data scale = fabs(sin) + fabs(tri) + + fabs(saw) + fabs(squ); + int o; + unsigned long pos; + + // Rescale to more useful value + const float depth = depthp * 0.5f; + + if (scale == 0.0) { + scale = 1.0; + } + + for (pos = 0; pos < sample_count; pos++) { + o = f_round(offset); + buffer_write(output[pos], input[pos] * + (depth * (((sin / scale) * sin_tbl[o]) + + ((tri / scale) * tri_tbl[o]) + + ((saw / scale) * saw_tbl[o]) + + ((squ / scale) * squ_tbl[o])) + + (1.0f - depth))); + offset += freq; + if (offset > sample_rate) { + offset -= sample_rate; + } + } + + plugin_data->offset = offset; +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + ringmod_2i1oDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (ringmod_2i1oDescriptor) { + ringmod_2i1oDescriptor->UniqueID = 1188; + ringmod_2i1oDescriptor->Label = "ringmod_2i1o"; + ringmod_2i1oDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + ringmod_2i1oDescriptor->Name = + D_("Ringmod with two inputs"); + ringmod_2i1oDescriptor->Maker = + "Steve Harris "; + ringmod_2i1oDescriptor->Copyright = + "GPL"; + ringmod_2i1oDescriptor->PortCount = 4; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(4, + sizeof(LADSPA_PortDescriptor)); + ringmod_2i1oDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(4, + sizeof(LADSPA_PortRangeHint)); + ringmod_2i1oDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(4, sizeof(char*)); + ringmod_2i1oDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Modulation depth (0=none, 1=AM, 2=RM) */ + port_descriptors[RINGMOD_2I1O_DEPTH] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[RINGMOD_2I1O_DEPTH] = + D_("Modulation depth (0=none, 1=AM, 2=RM)"); + port_range_hints[RINGMOD_2I1O_DEPTH].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[RINGMOD_2I1O_DEPTH].LowerBound = 0; + port_range_hints[RINGMOD_2I1O_DEPTH].UpperBound = 2; + + /* Parameters for Input */ + port_descriptors[RINGMOD_2I1O_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[RINGMOD_2I1O_INPUT] = + D_("Input"); + port_range_hints[RINGMOD_2I1O_INPUT].HintDescriptor = 0; + + /* Parameters for Modulator */ + port_descriptors[RINGMOD_2I1O_MODULATOR] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[RINGMOD_2I1O_MODULATOR] = + D_("Modulator"); + port_range_hints[RINGMOD_2I1O_MODULATOR].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[RINGMOD_2I1O_MODULATOR].LowerBound = -1; + port_range_hints[RINGMOD_2I1O_MODULATOR].UpperBound = +1; + + /* Parameters for Output */ + port_descriptors[RINGMOD_2I1O_OUTPUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[RINGMOD_2I1O_OUTPUT] = + D_("Output"); + port_range_hints[RINGMOD_2I1O_OUTPUT].HintDescriptor = 0; + + ringmod_2i1oDescriptor->activate = NULL; + ringmod_2i1oDescriptor->cleanup = cleanupRingmod_2i1o; + ringmod_2i1oDescriptor->connect_port = connectPortRingmod_2i1o; + ringmod_2i1oDescriptor->deactivate = NULL; + ringmod_2i1oDescriptor->instantiate = instantiateRingmod_2i1o; + ringmod_2i1oDescriptor->run = runRingmod_2i1o; + ringmod_2i1oDescriptor->run_adding = runAddingRingmod_2i1o; + ringmod_2i1oDescriptor->set_run_adding_gain = setRunAddingGainRingmod_2i1o; + } + + ringmod_1i1o1lDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (ringmod_1i1o1lDescriptor) { + ringmod_1i1o1lDescriptor->UniqueID = 1189; + ringmod_1i1o1lDescriptor->Label = "ringmod_1i1o1l"; + ringmod_1i1o1lDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + ringmod_1i1o1lDescriptor->Name = + D_("Ringmod with LFO"); + ringmod_1i1o1lDescriptor->Maker = + "Steve Harris "; + ringmod_1i1o1lDescriptor->Copyright = + "GPL"; + ringmod_1i1o1lDescriptor->PortCount = 8; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(8, + sizeof(LADSPA_PortDescriptor)); + ringmod_1i1o1lDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(8, + sizeof(LADSPA_PortRangeHint)); + ringmod_1i1o1lDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(8, sizeof(char*)); + ringmod_1i1o1lDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Modulation depth (0=none, 1=AM, 2=RM) */ + port_descriptors[RINGMOD_1I1O1L_DEPTHP] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[RINGMOD_1I1O1L_DEPTHP] = + D_("Modulation depth (0=none, 1=AM, 2=RM)"); + port_range_hints[RINGMOD_1I1O1L_DEPTHP].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[RINGMOD_1I1O1L_DEPTHP].LowerBound = 0; + port_range_hints[RINGMOD_1I1O1L_DEPTHP].UpperBound = 2; + + /* Parameters for Frequency (Hz) */ + port_descriptors[RINGMOD_1I1O1L_FREQ] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[RINGMOD_1I1O1L_FREQ] = + D_("Frequency (Hz)"); + port_range_hints[RINGMOD_1I1O1L_FREQ].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_440; + port_range_hints[RINGMOD_1I1O1L_FREQ].LowerBound = 1; + port_range_hints[RINGMOD_1I1O1L_FREQ].UpperBound = 1000; + + /* Parameters for Sine level */ + port_descriptors[RINGMOD_1I1O1L_SIN] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[RINGMOD_1I1O1L_SIN] = + D_("Sine level"); + port_range_hints[RINGMOD_1I1O1L_SIN].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1; + port_range_hints[RINGMOD_1I1O1L_SIN].LowerBound = -1; + port_range_hints[RINGMOD_1I1O1L_SIN].UpperBound = +1; + + /* Parameters for Triangle level */ + port_descriptors[RINGMOD_1I1O1L_TRI] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[RINGMOD_1I1O1L_TRI] = + D_("Triangle level"); + port_range_hints[RINGMOD_1I1O1L_TRI].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[RINGMOD_1I1O1L_TRI].LowerBound = -1; + port_range_hints[RINGMOD_1I1O1L_TRI].UpperBound = +1; + + /* Parameters for Sawtooth level */ + port_descriptors[RINGMOD_1I1O1L_SAW] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[RINGMOD_1I1O1L_SAW] = + D_("Sawtooth level"); + port_range_hints[RINGMOD_1I1O1L_SAW].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[RINGMOD_1I1O1L_SAW].LowerBound = -1; + port_range_hints[RINGMOD_1I1O1L_SAW].UpperBound = +1; + + /* Parameters for Square level */ + port_descriptors[RINGMOD_1I1O1L_SQU] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[RINGMOD_1I1O1L_SQU] = + D_("Square level"); + port_range_hints[RINGMOD_1I1O1L_SQU].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[RINGMOD_1I1O1L_SQU].LowerBound = -1; + port_range_hints[RINGMOD_1I1O1L_SQU].UpperBound = +1; + + /* Parameters for Input */ + port_descriptors[RINGMOD_1I1O1L_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[RINGMOD_1I1O1L_INPUT] = + D_("Input"); + port_range_hints[RINGMOD_1I1O1L_INPUT].HintDescriptor = 0; + + /* Parameters for Output */ + port_descriptors[RINGMOD_1I1O1L_OUTPUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[RINGMOD_1I1O1L_OUTPUT] = + D_("Output"); + port_range_hints[RINGMOD_1I1O1L_OUTPUT].HintDescriptor = 0; + + ringmod_1i1o1lDescriptor->activate = activateRingmod_1i1o1l; + ringmod_1i1o1lDescriptor->cleanup = cleanupRingmod_1i1o1l; + ringmod_1i1o1lDescriptor->connect_port = connectPortRingmod_1i1o1l; + ringmod_1i1o1lDescriptor->deactivate = NULL; + ringmod_1i1o1lDescriptor->instantiate = instantiateRingmod_1i1o1l; + ringmod_1i1o1lDescriptor->run = runRingmod_1i1o1l; + ringmod_1i1o1lDescriptor->run_adding = runAddingRingmod_1i1o1l; + ringmod_1i1o1lDescriptor->set_run_adding_gain = setRunAddingGainRingmod_1i1o1l; + } +} + +void _fini() { + if (ringmod_2i1oDescriptor) { + free((LADSPA_PortDescriptor *)ringmod_2i1oDescriptor->PortDescriptors); + free((char **)ringmod_2i1oDescriptor->PortNames); + free((LADSPA_PortRangeHint *)ringmod_2i1oDescriptor->PortRangeHints); + free(ringmod_2i1oDescriptor); + } + if (ringmod_1i1o1lDescriptor) { + free((LADSPA_PortDescriptor *)ringmod_1i1o1lDescriptor->PortDescriptors); + free((char **)ringmod_1i1o1lDescriptor->PortNames); + free((LADSPA_PortRangeHint *)ringmod_1i1o1lDescriptor->PortRangeHints); + free(ringmod_1i1o1lDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/satan_maximiser_1408.c b/plugins/LadspaEffect/swh/satan_maximiser_1408.c new file mode 100644 index 000000000..d9b3c4fa3 --- /dev/null +++ b/plugins/LadspaEffect/swh/satan_maximiser_1408.c @@ -0,0 +1,355 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + +#line 10 "satan_maximiser_1408.xml" + +#include +#include "ladspa-util.h" + +#define BUFFER_SIZE 16 +#define BUFFER_MASK 15 + +#define SATANMAXIMISER_ENV_TIME_P 0 +#define SATANMAXIMISER_KNEE_POINT 1 +#define SATANMAXIMISER_INPUT 2 +#define SATANMAXIMISER_OUTPUT 3 + +static LADSPA_Descriptor *satanMaximiserDescriptor = NULL; + +typedef struct { + LADSPA_Data *env_time_p; + LADSPA_Data *knee_point; + LADSPA_Data *input; + LADSPA_Data *output; + LADSPA_Data *buffer; + unsigned int buffer_pos; + float env; + LADSPA_Data run_adding_gain; +} SatanMaximiser; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return satanMaximiserDescriptor; + default: + return NULL; + } +} + +static void activateSatanMaximiser(LADSPA_Handle instance) { + SatanMaximiser *plugin_data = (SatanMaximiser *)instance; + LADSPA_Data *buffer = plugin_data->buffer; + unsigned int buffer_pos = plugin_data->buffer_pos; + float env = plugin_data->env; +#line 33 "satan_maximiser_1408.xml" + env = 0.0f; + memset(buffer, 0, sizeof(LADSPA_Data) * BUFFER_SIZE); + buffer_pos = 0; + plugin_data->buffer = buffer; + plugin_data->buffer_pos = buffer_pos; + plugin_data->env = env; + +} + +static void cleanupSatanMaximiser(LADSPA_Handle instance) { +#line 39 "satan_maximiser_1408.xml" + SatanMaximiser *plugin_data = (SatanMaximiser *)instance; + free(plugin_data->buffer); + free(instance); +} + +static void connectPortSatanMaximiser( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + SatanMaximiser *plugin; + + plugin = (SatanMaximiser *)instance; + switch (port) { + case SATANMAXIMISER_ENV_TIME_P: + plugin->env_time_p = data; + break; + case SATANMAXIMISER_KNEE_POINT: + plugin->knee_point = data; + break; + case SATANMAXIMISER_INPUT: + plugin->input = data; + break; + case SATANMAXIMISER_OUTPUT: + plugin->output = data; + break; + } +} + +static LADSPA_Handle instantiateSatanMaximiser( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + SatanMaximiser *plugin_data = (SatanMaximiser *)malloc(sizeof(SatanMaximiser)); + LADSPA_Data *buffer = NULL; + unsigned int buffer_pos; + float env; + +#line 27 "satan_maximiser_1408.xml" + env = 0.0f; + buffer = malloc(sizeof(LADSPA_Data) * BUFFER_SIZE); + buffer_pos = 0; + + plugin_data->buffer = buffer; + plugin_data->buffer_pos = buffer_pos; + plugin_data->env = env; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runSatanMaximiser(LADSPA_Handle instance, unsigned long sample_count) { + SatanMaximiser *plugin_data = (SatanMaximiser *)instance; + + /* Decay time (samples) (float value) */ + const LADSPA_Data env_time_p = *(plugin_data->env_time_p); + + /* Knee point (dB) (float value) */ + const LADSPA_Data knee_point = *(plugin_data->knee_point); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + LADSPA_Data * buffer = plugin_data->buffer; + unsigned int buffer_pos = plugin_data->buffer_pos; + float env = plugin_data->env; + +#line 43 "satan_maximiser_1408.xml" + unsigned long pos; + int delay; + float env_tr, env_sc, knee; + float env_time = env_time_p; + + if (env_time < 2.0f) { + env_time = 2.0f; + } + knee = DB_CO(knee_point); + delay = f_round(env_time * 0.5f); + env_tr = 1.0f / env_time; + + for (pos = 0; pos < sample_count; pos++) { + if (fabs(input[pos]) > env) { + env = fabs(input[pos]); + } else { + env = fabs(input[pos]) * env_tr + env * (1.0f - env_tr); + } + if (env <= knee) { + env_sc = 1.0f / knee; + } else { + env_sc = 1.0f / env; + } + buffer[buffer_pos] = input[pos]; + buffer_write(output[pos], buffer[(buffer_pos - delay) & BUFFER_MASK] * env_sc); + buffer_pos = (buffer_pos + 1) & BUFFER_MASK; + } + + plugin_data->env = env; + plugin_data->buffer_pos = buffer_pos; +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainSatanMaximiser(LADSPA_Handle instance, LADSPA_Data gain) { + ((SatanMaximiser *)instance)->run_adding_gain = gain; +} + +static void runAddingSatanMaximiser(LADSPA_Handle instance, unsigned long sample_count) { + SatanMaximiser *plugin_data = (SatanMaximiser *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Decay time (samples) (float value) */ + const LADSPA_Data env_time_p = *(plugin_data->env_time_p); + + /* Knee point (dB) (float value) */ + const LADSPA_Data knee_point = *(plugin_data->knee_point); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + LADSPA_Data * buffer = plugin_data->buffer; + unsigned int buffer_pos = plugin_data->buffer_pos; + float env = plugin_data->env; + +#line 43 "satan_maximiser_1408.xml" + unsigned long pos; + int delay; + float env_tr, env_sc, knee; + float env_time = env_time_p; + + if (env_time < 2.0f) { + env_time = 2.0f; + } + knee = DB_CO(knee_point); + delay = f_round(env_time * 0.5f); + env_tr = 1.0f / env_time; + + for (pos = 0; pos < sample_count; pos++) { + if (fabs(input[pos]) > env) { + env = fabs(input[pos]); + } else { + env = fabs(input[pos]) * env_tr + env * (1.0f - env_tr); + } + if (env <= knee) { + env_sc = 1.0f / knee; + } else { + env_sc = 1.0f / env; + } + buffer[buffer_pos] = input[pos]; + buffer_write(output[pos], buffer[(buffer_pos - delay) & BUFFER_MASK] * env_sc); + buffer_pos = (buffer_pos + 1) & BUFFER_MASK; + } + + plugin_data->env = env; + plugin_data->buffer_pos = buffer_pos; +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + satanMaximiserDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (satanMaximiserDescriptor) { + satanMaximiserDescriptor->UniqueID = 1408; + satanMaximiserDescriptor->Label = "satanMaximiser"; + satanMaximiserDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + satanMaximiserDescriptor->Name = + D_("Barry's Satan Maximiser"); + satanMaximiserDescriptor->Maker = + "Steve Harris "; + satanMaximiserDescriptor->Copyright = + "GPL"; + satanMaximiserDescriptor->PortCount = 4; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(4, + sizeof(LADSPA_PortDescriptor)); + satanMaximiserDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(4, + sizeof(LADSPA_PortRangeHint)); + satanMaximiserDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(4, sizeof(char*)); + satanMaximiserDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Decay time (samples) */ + port_descriptors[SATANMAXIMISER_ENV_TIME_P] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[SATANMAXIMISER_ENV_TIME_P] = + D_("Decay time (samples)"); + port_range_hints[SATANMAXIMISER_ENV_TIME_P].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MAXIMUM; + port_range_hints[SATANMAXIMISER_ENV_TIME_P].LowerBound = 2; + port_range_hints[SATANMAXIMISER_ENV_TIME_P].UpperBound = 30; + + /* Parameters for Knee point (dB) */ + port_descriptors[SATANMAXIMISER_KNEE_POINT] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[SATANMAXIMISER_KNEE_POINT] = + D_("Knee point (dB)"); + port_range_hints[SATANMAXIMISER_KNEE_POINT].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[SATANMAXIMISER_KNEE_POINT].LowerBound = -90; + port_range_hints[SATANMAXIMISER_KNEE_POINT].UpperBound = 0; + + /* Parameters for Input */ + port_descriptors[SATANMAXIMISER_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[SATANMAXIMISER_INPUT] = + D_("Input"); + port_range_hints[SATANMAXIMISER_INPUT].HintDescriptor = 0; + + /* Parameters for Output */ + port_descriptors[SATANMAXIMISER_OUTPUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[SATANMAXIMISER_OUTPUT] = + D_("Output"); + port_range_hints[SATANMAXIMISER_OUTPUT].HintDescriptor = 0; + + satanMaximiserDescriptor->activate = activateSatanMaximiser; + satanMaximiserDescriptor->cleanup = cleanupSatanMaximiser; + satanMaximiserDescriptor->connect_port = connectPortSatanMaximiser; + satanMaximiserDescriptor->deactivate = NULL; + satanMaximiserDescriptor->instantiate = instantiateSatanMaximiser; + satanMaximiserDescriptor->run = runSatanMaximiser; + satanMaximiserDescriptor->run_adding = runAddingSatanMaximiser; + satanMaximiserDescriptor->set_run_adding_gain = setRunAddingGainSatanMaximiser; + } +} + +void _fini() { + if (satanMaximiserDescriptor) { + free((LADSPA_PortDescriptor *)satanMaximiserDescriptor->PortDescriptors); + free((char **)satanMaximiserDescriptor->PortNames); + free((LADSPA_PortRangeHint *)satanMaximiserDescriptor->PortRangeHints); + free(satanMaximiserDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/sc1_1425.c b/plugins/LadspaEffect/swh/sc1_1425.c new file mode 100644 index 000000000..0a94773e2 --- /dev/null +++ b/plugins/LadspaEffect/swh/sc1_1425.c @@ -0,0 +1,484 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + +#line 10 "sc1_1425.xml" + +#include "util/db.h" +#include "util/rms.h" + +#define A_TBL 256 + +#define SC1_ATTACK 0 +#define SC1_RELEASE 1 +#define SC1_THRESHOLD 2 +#define SC1_RATIO 3 +#define SC1_KNEE 4 +#define SC1_MAKEUP_GAIN 5 +#define SC1_INPUT 6 +#define SC1_OUTPUT 7 + +static LADSPA_Descriptor *sc1Descriptor = NULL; + +typedef struct { + LADSPA_Data *attack; + LADSPA_Data *release; + LADSPA_Data *threshold; + LADSPA_Data *ratio; + LADSPA_Data *knee; + LADSPA_Data *makeup_gain; + LADSPA_Data *input; + LADSPA_Data *output; + float amp; + float * as; + unsigned int count; + float env; + float gain; + float gain_t; + rms_env * rms; + float sum; + LADSPA_Data run_adding_gain; +} Sc1; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return sc1Descriptor; + default: + return NULL; + } +} + +static void cleanupSc1(LADSPA_Handle instance) { +#line 45 "sc1_1425.xml" + Sc1 *plugin_data = (Sc1 *)instance; + rms_env_free(plugin_data->rms); + free(plugin_data->as); + free(instance); +} + +static void connectPortSc1( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + Sc1 *plugin; + + plugin = (Sc1 *)instance; + switch (port) { + case SC1_ATTACK: + plugin->attack = data; + break; + case SC1_RELEASE: + plugin->release = data; + break; + case SC1_THRESHOLD: + plugin->threshold = data; + break; + case SC1_RATIO: + plugin->ratio = data; + break; + case SC1_KNEE: + plugin->knee = data; + break; + case SC1_MAKEUP_GAIN: + plugin->makeup_gain = data; + break; + case SC1_INPUT: + plugin->input = data; + break; + case SC1_OUTPUT: + plugin->output = data; + break; + } +} + +static LADSPA_Handle instantiateSc1( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + Sc1 *plugin_data = (Sc1 *)malloc(sizeof(Sc1)); + float amp; + float *as = NULL; + unsigned int count; + float env; + float gain; + float gain_t; + rms_env *rms = NULL; + float sum; + +#line 24 "sc1_1425.xml" + unsigned int i; + float sample_rate = (float)s_rate; + + rms = rms_env_new(); + sum = 0.0f; + amp = 0.0f; + gain = 0.0f; + gain_t = 0.0f; + env = 0.0f; + count = 0; + + as = malloc(A_TBL * sizeof(float)); + as[0] = 1.0f; + for (i=1; iamp = amp; + plugin_data->as = as; + plugin_data->count = count; + plugin_data->env = env; + plugin_data->gain = gain; + plugin_data->gain_t = gain_t; + plugin_data->rms = rms; + plugin_data->sum = sum; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runSc1(LADSPA_Handle instance, unsigned long sample_count) { + Sc1 *plugin_data = (Sc1 *)instance; + + /* Attack time (ms) (float value) */ + const LADSPA_Data attack = *(plugin_data->attack); + + /* Release time (ms) (float value) */ + const LADSPA_Data release = *(plugin_data->release); + + /* Threshold level (dB) (float value) */ + const LADSPA_Data threshold = *(plugin_data->threshold); + + /* Ratio (1:n) (float value) */ + const LADSPA_Data ratio = *(plugin_data->ratio); + + /* Knee radius (dB) (float value) */ + const LADSPA_Data knee = *(plugin_data->knee); + + /* Makeup gain (dB) (float value) */ + const LADSPA_Data makeup_gain = *(plugin_data->makeup_gain); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + float amp = plugin_data->amp; + float * as = plugin_data->as; + unsigned int count = plugin_data->count; + float env = plugin_data->env; + float gain = plugin_data->gain; + float gain_t = plugin_data->gain_t; + rms_env * rms = plugin_data->rms; + float sum = plugin_data->sum; + +#line 50 "sc1_1425.xml" + unsigned long pos; + + const float ga = as[f_round(attack * 0.001f * (float)(A_TBL-1))]; + const float gr = as[f_round(release * 0.001f * (float)(A_TBL-1))]; + const float rs = (ratio - 1.0f) / ratio; + const float mug = db2lin(makeup_gain); + const float knee_min = db2lin(threshold - knee); + const float knee_max = db2lin(threshold + knee); + const float ef_a = ga * 0.25f; + const float ef_ai = 1.0f - ef_a; + + for (pos = 0; pos < sample_count; pos++) { + sum += input[pos] * input[pos]; + + if (amp > env) { + env = env * ga + amp * (1.0f - ga); + } else { + env = env * gr + amp * (1.0f - gr); + } + if (count++ % 4 == 3) { + amp = rms_env_process(rms, sum * 0.25f); + sum = 0.0f; + if (env <= knee_min) { + gain_t = 1.0f; + } else if (env < knee_max) { + const float x = -(threshold - knee - lin2db(env)) / knee; + gain_t = db2lin(-knee * rs * x * x * 0.25f); + } else { + gain_t = db2lin((threshold - lin2db(env)) * rs); + } + } + gain = gain * ef_a + gain_t * ef_ai; + buffer_write(output[pos], input[pos] * gain * mug); + } + plugin_data->sum = sum; + plugin_data->amp = amp; + plugin_data->gain = gain; + plugin_data->gain_t = gain_t; + plugin_data->env = env; + plugin_data->count = count; +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainSc1(LADSPA_Handle instance, LADSPA_Data gain) { + ((Sc1 *)instance)->run_adding_gain = gain; +} + +static void runAddingSc1(LADSPA_Handle instance, unsigned long sample_count) { + Sc1 *plugin_data = (Sc1 *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Attack time (ms) (float value) */ + const LADSPA_Data attack = *(plugin_data->attack); + + /* Release time (ms) (float value) */ + const LADSPA_Data release = *(plugin_data->release); + + /* Threshold level (dB) (float value) */ + const LADSPA_Data threshold = *(plugin_data->threshold); + + /* Ratio (1:n) (float value) */ + const LADSPA_Data ratio = *(plugin_data->ratio); + + /* Knee radius (dB) (float value) */ + const LADSPA_Data knee = *(plugin_data->knee); + + /* Makeup gain (dB) (float value) */ + const LADSPA_Data makeup_gain = *(plugin_data->makeup_gain); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + float amp = plugin_data->amp; + float * as = plugin_data->as; + unsigned int count = plugin_data->count; + float env = plugin_data->env; + float gain = plugin_data->gain; + float gain_t = plugin_data->gain_t; + rms_env * rms = plugin_data->rms; + float sum = plugin_data->sum; + +#line 50 "sc1_1425.xml" + unsigned long pos; + + const float ga = as[f_round(attack * 0.001f * (float)(A_TBL-1))]; + const float gr = as[f_round(release * 0.001f * (float)(A_TBL-1))]; + const float rs = (ratio - 1.0f) / ratio; + const float mug = db2lin(makeup_gain); + const float knee_min = db2lin(threshold - knee); + const float knee_max = db2lin(threshold + knee); + const float ef_a = ga * 0.25f; + const float ef_ai = 1.0f - ef_a; + + for (pos = 0; pos < sample_count; pos++) { + sum += input[pos] * input[pos]; + + if (amp > env) { + env = env * ga + amp * (1.0f - ga); + } else { + env = env * gr + amp * (1.0f - gr); + } + if (count++ % 4 == 3) { + amp = rms_env_process(rms, sum * 0.25f); + sum = 0.0f; + if (env <= knee_min) { + gain_t = 1.0f; + } else if (env < knee_max) { + const float x = -(threshold - knee - lin2db(env)) / knee; + gain_t = db2lin(-knee * rs * x * x * 0.25f); + } else { + gain_t = db2lin((threshold - lin2db(env)) * rs); + } + } + gain = gain * ef_a + gain_t * ef_ai; + buffer_write(output[pos], input[pos] * gain * mug); + } + plugin_data->sum = sum; + plugin_data->amp = amp; + plugin_data->gain = gain; + plugin_data->gain_t = gain_t; + plugin_data->env = env; + plugin_data->count = count; +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + sc1Descriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (sc1Descriptor) { + sc1Descriptor->UniqueID = 1425; + sc1Descriptor->Label = "sc1"; + sc1Descriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + sc1Descriptor->Name = + D_("SC1"); + sc1Descriptor->Maker = + "Steve Harris "; + sc1Descriptor->Copyright = + "GPL"; + sc1Descriptor->PortCount = 8; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(8, + sizeof(LADSPA_PortDescriptor)); + sc1Descriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(8, + sizeof(LADSPA_PortRangeHint)); + sc1Descriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(8, sizeof(char*)); + sc1Descriptor->PortNames = + (const char **)port_names; + + /* Parameters for Attack time (ms) */ + port_descriptors[SC1_ATTACK] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[SC1_ATTACK] = + D_("Attack time (ms)"); + port_range_hints[SC1_ATTACK].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; + port_range_hints[SC1_ATTACK].LowerBound = 2; + port_range_hints[SC1_ATTACK].UpperBound = 400; + + /* Parameters for Release time (ms) */ + port_descriptors[SC1_RELEASE] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[SC1_RELEASE] = + D_("Release time (ms)"); + port_range_hints[SC1_RELEASE].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; + port_range_hints[SC1_RELEASE].LowerBound = 2; + port_range_hints[SC1_RELEASE].UpperBound = 800; + + /* Parameters for Threshold level (dB) */ + port_descriptors[SC1_THRESHOLD] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[SC1_THRESHOLD] = + D_("Threshold level (dB)"); + port_range_hints[SC1_THRESHOLD].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MAXIMUM; + port_range_hints[SC1_THRESHOLD].LowerBound = -30; + port_range_hints[SC1_THRESHOLD].UpperBound = 0; + + /* Parameters for Ratio (1:n) */ + port_descriptors[SC1_RATIO] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[SC1_RATIO] = + D_("Ratio (1:n)"); + port_range_hints[SC1_RATIO].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1; + port_range_hints[SC1_RATIO].LowerBound = 1; + port_range_hints[SC1_RATIO].UpperBound = 10; + + /* Parameters for Knee radius (dB) */ + port_descriptors[SC1_KNEE] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[SC1_KNEE] = + D_("Knee radius (dB)"); + port_range_hints[SC1_KNEE].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; + port_range_hints[SC1_KNEE].LowerBound = 1; + port_range_hints[SC1_KNEE].UpperBound = 10; + + /* Parameters for Makeup gain (dB) */ + port_descriptors[SC1_MAKEUP_GAIN] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[SC1_MAKEUP_GAIN] = + D_("Makeup gain (dB)"); + port_range_hints[SC1_MAKEUP_GAIN].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[SC1_MAKEUP_GAIN].LowerBound = 0; + port_range_hints[SC1_MAKEUP_GAIN].UpperBound = +24; + + /* Parameters for Input */ + port_descriptors[SC1_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[SC1_INPUT] = + D_("Input"); + port_range_hints[SC1_INPUT].HintDescriptor = 0; + + /* Parameters for Output */ + port_descriptors[SC1_OUTPUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[SC1_OUTPUT] = + D_("Output"); + port_range_hints[SC1_OUTPUT].HintDescriptor = 0; + + sc1Descriptor->activate = NULL; + sc1Descriptor->cleanup = cleanupSc1; + sc1Descriptor->connect_port = connectPortSc1; + sc1Descriptor->deactivate = NULL; + sc1Descriptor->instantiate = instantiateSc1; + sc1Descriptor->run = runSc1; + sc1Descriptor->run_adding = runAddingSc1; + sc1Descriptor->set_run_adding_gain = setRunAddingGainSc1; + } +} + +void _fini() { + if (sc1Descriptor) { + free((LADSPA_PortDescriptor *)sc1Descriptor->PortDescriptors); + free((char **)sc1Descriptor->PortNames); + free((LADSPA_PortRangeHint *)sc1Descriptor->PortRangeHints); + free(sc1Descriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/sc2_1426.c b/plugins/LadspaEffect/swh/sc2_1426.c new file mode 100644 index 000000000..dd7a20d94 --- /dev/null +++ b/plugins/LadspaEffect/swh/sc2_1426.c @@ -0,0 +1,502 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + +#line 10 "sc2_1426.xml" + +#include "util/db.h" +#include "util/rms.h" + +#define A_TBL 256 + +#define SC2_ATTACK 0 +#define SC2_RELEASE 1 +#define SC2_THRESHOLD 2 +#define SC2_RATIO 3 +#define SC2_KNEE 4 +#define SC2_MAKEUP_GAIN 5 +#define SC2_SIDECHAIN 6 +#define SC2_INPUT 7 +#define SC2_OUTPUT 8 + +static LADSPA_Descriptor *sc2Descriptor = NULL; + +typedef struct { + LADSPA_Data *attack; + LADSPA_Data *release; + LADSPA_Data *threshold; + LADSPA_Data *ratio; + LADSPA_Data *knee; + LADSPA_Data *makeup_gain; + LADSPA_Data *sidechain; + LADSPA_Data *input; + LADSPA_Data *output; + float amp; + float * as; + unsigned int count; + float env; + float gain; + float gain_t; + rms_env * rms; + float sum; + LADSPA_Data run_adding_gain; +} Sc2; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return sc2Descriptor; + default: + return NULL; + } +} + +static void cleanupSc2(LADSPA_Handle instance) { +#line 44 "sc2_1426.xml" + Sc2 *plugin_data = (Sc2 *)instance; + rms_env_free(plugin_data->rms); + free(plugin_data->as); + free(instance); +} + +static void connectPortSc2( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + Sc2 *plugin; + + plugin = (Sc2 *)instance; + switch (port) { + case SC2_ATTACK: + plugin->attack = data; + break; + case SC2_RELEASE: + plugin->release = data; + break; + case SC2_THRESHOLD: + plugin->threshold = data; + break; + case SC2_RATIO: + plugin->ratio = data; + break; + case SC2_KNEE: + plugin->knee = data; + break; + case SC2_MAKEUP_GAIN: + plugin->makeup_gain = data; + break; + case SC2_SIDECHAIN: + plugin->sidechain = data; + break; + case SC2_INPUT: + plugin->input = data; + break; + case SC2_OUTPUT: + plugin->output = data; + break; + } +} + +static LADSPA_Handle instantiateSc2( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + Sc2 *plugin_data = (Sc2 *)malloc(sizeof(Sc2)); + float amp; + float *as = NULL; + unsigned int count; + float env; + float gain; + float gain_t; + rms_env *rms = NULL; + float sum; + +#line 23 "sc2_1426.xml" + unsigned int i; + float sample_rate = (float)s_rate; + + rms = rms_env_new(); + sum = 0.0f; + amp = 0.0f; + gain = 0.0f; + gain_t = 0.0f; + env = 0.0f; + count = 0; + + as = malloc(A_TBL * sizeof(float)); + as[0] = 1.0f; + for (i=1; iamp = amp; + plugin_data->as = as; + plugin_data->count = count; + plugin_data->env = env; + plugin_data->gain = gain; + plugin_data->gain_t = gain_t; + plugin_data->rms = rms; + plugin_data->sum = sum; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runSc2(LADSPA_Handle instance, unsigned long sample_count) { + Sc2 *plugin_data = (Sc2 *)instance; + + /* Attack time (ms) (float value) */ + const LADSPA_Data attack = *(plugin_data->attack); + + /* Release time (ms) (float value) */ + const LADSPA_Data release = *(plugin_data->release); + + /* Threshold level (dB) (float value) */ + const LADSPA_Data threshold = *(plugin_data->threshold); + + /* Ratio (1:n) (float value) */ + const LADSPA_Data ratio = *(plugin_data->ratio); + + /* Knee radius (dB) (float value) */ + const LADSPA_Data knee = *(plugin_data->knee); + + /* Makeup gain (dB) (float value) */ + const LADSPA_Data makeup_gain = *(plugin_data->makeup_gain); + + /* Sidechain (array of floats of length sample_count) */ + const LADSPA_Data * const sidechain = plugin_data->sidechain; + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + float amp = plugin_data->amp; + float * as = plugin_data->as; + unsigned int count = plugin_data->count; + float env = plugin_data->env; + float gain = plugin_data->gain; + float gain_t = plugin_data->gain_t; + rms_env * rms = plugin_data->rms; + float sum = plugin_data->sum; + +#line 49 "sc2_1426.xml" + unsigned long pos; + + const float ga = as[f_round(attack * 0.001f * (float)(A_TBL-1))]; + const float gr = as[f_round(release * 0.001f * (float)(A_TBL-1))]; + const float rs = (ratio - 1.0f) / ratio; + const float mug = db2lin(makeup_gain); + const float knee_min = db2lin(threshold - knee); + const float knee_max = db2lin(threshold + knee); + const float ef_a = ga * 0.25f; + const float ef_ai = 1.0f - ef_a; + + for (pos = 0; pos < sample_count; pos++) { + sum += sidechain[pos] * sidechain[pos]; + + if (amp > env) { + env = env * ga + amp * (1.0f - ga); + } else { + env = env * gr + amp * (1.0f - gr); + } + if (count++ % 4 == 3) { + amp = rms_env_process(rms, sum * 0.25f); + sum = 0.0f; + if (env <= knee_min) { + gain_t = 1.0f; + } else if (env < knee_max) { + const float x = -(threshold - knee - lin2db(env)) / knee; + gain_t = db2lin(-knee * rs * x * x * 0.25f); + } else { + gain_t = db2lin((threshold - lin2db(env)) * rs); + } + } + gain = gain * ef_a + gain_t * ef_ai; + buffer_write(output[pos], input[pos] * gain * mug); + } + plugin_data->sum = sum; + plugin_data->amp = amp; + plugin_data->gain = gain; + plugin_data->gain_t = gain_t; + plugin_data->env = env; + plugin_data->count = count; +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainSc2(LADSPA_Handle instance, LADSPA_Data gain) { + ((Sc2 *)instance)->run_adding_gain = gain; +} + +static void runAddingSc2(LADSPA_Handle instance, unsigned long sample_count) { + Sc2 *plugin_data = (Sc2 *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Attack time (ms) (float value) */ + const LADSPA_Data attack = *(plugin_data->attack); + + /* Release time (ms) (float value) */ + const LADSPA_Data release = *(plugin_data->release); + + /* Threshold level (dB) (float value) */ + const LADSPA_Data threshold = *(plugin_data->threshold); + + /* Ratio (1:n) (float value) */ + const LADSPA_Data ratio = *(plugin_data->ratio); + + /* Knee radius (dB) (float value) */ + const LADSPA_Data knee = *(plugin_data->knee); + + /* Makeup gain (dB) (float value) */ + const LADSPA_Data makeup_gain = *(plugin_data->makeup_gain); + + /* Sidechain (array of floats of length sample_count) */ + const LADSPA_Data * const sidechain = plugin_data->sidechain; + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + float amp = plugin_data->amp; + float * as = plugin_data->as; + unsigned int count = plugin_data->count; + float env = plugin_data->env; + float gain = plugin_data->gain; + float gain_t = plugin_data->gain_t; + rms_env * rms = plugin_data->rms; + float sum = plugin_data->sum; + +#line 49 "sc2_1426.xml" + unsigned long pos; + + const float ga = as[f_round(attack * 0.001f * (float)(A_TBL-1))]; + const float gr = as[f_round(release * 0.001f * (float)(A_TBL-1))]; + const float rs = (ratio - 1.0f) / ratio; + const float mug = db2lin(makeup_gain); + const float knee_min = db2lin(threshold - knee); + const float knee_max = db2lin(threshold + knee); + const float ef_a = ga * 0.25f; + const float ef_ai = 1.0f - ef_a; + + for (pos = 0; pos < sample_count; pos++) { + sum += sidechain[pos] * sidechain[pos]; + + if (amp > env) { + env = env * ga + amp * (1.0f - ga); + } else { + env = env * gr + amp * (1.0f - gr); + } + if (count++ % 4 == 3) { + amp = rms_env_process(rms, sum * 0.25f); + sum = 0.0f; + if (env <= knee_min) { + gain_t = 1.0f; + } else if (env < knee_max) { + const float x = -(threshold - knee - lin2db(env)) / knee; + gain_t = db2lin(-knee * rs * x * x * 0.25f); + } else { + gain_t = db2lin((threshold - lin2db(env)) * rs); + } + } + gain = gain * ef_a + gain_t * ef_ai; + buffer_write(output[pos], input[pos] * gain * mug); + } + plugin_data->sum = sum; + plugin_data->amp = amp; + plugin_data->gain = gain; + plugin_data->gain_t = gain_t; + plugin_data->env = env; + plugin_data->count = count; +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + sc2Descriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (sc2Descriptor) { + sc2Descriptor->UniqueID = 1426; + sc2Descriptor->Label = "sc2"; + sc2Descriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + sc2Descriptor->Name = + D_("SC2"); + sc2Descriptor->Maker = + "Steve Harris "; + sc2Descriptor->Copyright = + "GPL"; + sc2Descriptor->PortCount = 9; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(9, + sizeof(LADSPA_PortDescriptor)); + sc2Descriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(9, + sizeof(LADSPA_PortRangeHint)); + sc2Descriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(9, sizeof(char*)); + sc2Descriptor->PortNames = + (const char **)port_names; + + /* Parameters for Attack time (ms) */ + port_descriptors[SC2_ATTACK] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[SC2_ATTACK] = + D_("Attack time (ms)"); + port_range_hints[SC2_ATTACK].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; + port_range_hints[SC2_ATTACK].LowerBound = 2; + port_range_hints[SC2_ATTACK].UpperBound = 400; + + /* Parameters for Release time (ms) */ + port_descriptors[SC2_RELEASE] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[SC2_RELEASE] = + D_("Release time (ms)"); + port_range_hints[SC2_RELEASE].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; + port_range_hints[SC2_RELEASE].LowerBound = 2; + port_range_hints[SC2_RELEASE].UpperBound = 800; + + /* Parameters for Threshold level (dB) */ + port_descriptors[SC2_THRESHOLD] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[SC2_THRESHOLD] = + D_("Threshold level (dB)"); + port_range_hints[SC2_THRESHOLD].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MAXIMUM; + port_range_hints[SC2_THRESHOLD].LowerBound = -30; + port_range_hints[SC2_THRESHOLD].UpperBound = 0; + + /* Parameters for Ratio (1:n) */ + port_descriptors[SC2_RATIO] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[SC2_RATIO] = + D_("Ratio (1:n)"); + port_range_hints[SC2_RATIO].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1; + port_range_hints[SC2_RATIO].LowerBound = 1; + port_range_hints[SC2_RATIO].UpperBound = 10; + + /* Parameters for Knee radius (dB) */ + port_descriptors[SC2_KNEE] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[SC2_KNEE] = + D_("Knee radius (dB)"); + port_range_hints[SC2_KNEE].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; + port_range_hints[SC2_KNEE].LowerBound = 1; + port_range_hints[SC2_KNEE].UpperBound = 10; + + /* Parameters for Makeup gain (dB) */ + port_descriptors[SC2_MAKEUP_GAIN] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[SC2_MAKEUP_GAIN] = + D_("Makeup gain (dB)"); + port_range_hints[SC2_MAKEUP_GAIN].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[SC2_MAKEUP_GAIN].LowerBound = 0; + port_range_hints[SC2_MAKEUP_GAIN].UpperBound = +24; + + /* Parameters for Sidechain */ + port_descriptors[SC2_SIDECHAIN] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[SC2_SIDECHAIN] = + D_("Sidechain"); + port_range_hints[SC2_SIDECHAIN].HintDescriptor = 0; + + /* Parameters for Input */ + port_descriptors[SC2_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[SC2_INPUT] = + D_("Input"); + port_range_hints[SC2_INPUT].HintDescriptor = 0; + + /* Parameters for Output */ + port_descriptors[SC2_OUTPUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[SC2_OUTPUT] = + D_("Output"); + port_range_hints[SC2_OUTPUT].HintDescriptor = 0; + + sc2Descriptor->activate = NULL; + sc2Descriptor->cleanup = cleanupSc2; + sc2Descriptor->connect_port = connectPortSc2; + sc2Descriptor->deactivate = NULL; + sc2Descriptor->instantiate = instantiateSc2; + sc2Descriptor->run = runSc2; + sc2Descriptor->run_adding = runAddingSc2; + sc2Descriptor->set_run_adding_gain = setRunAddingGainSc2; + } +} + +void _fini() { + if (sc2Descriptor) { + free((LADSPA_PortDescriptor *)sc2Descriptor->PortDescriptors); + free((char **)sc2Descriptor->PortNames); + free((LADSPA_PortRangeHint *)sc2Descriptor->PortRangeHints); + free(sc2Descriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/sc3_1427.c b/plugins/LadspaEffect/swh/sc3_1427.c new file mode 100644 index 000000000..f7f4ceba5 --- /dev/null +++ b/plugins/LadspaEffect/swh/sc3_1427.c @@ -0,0 +1,573 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + +#line 10 "sc3_1427.xml" + +#include "util/db.h" +#include "util/rms.h" + +#define A_TBL 256 + +#define SC3_ATTACK 0 +#define SC3_RELEASE 1 +#define SC3_THRESHOLD 2 +#define SC3_RATIO 3 +#define SC3_KNEE 4 +#define SC3_MAKEUP_GAIN 5 +#define SC3_CHAIN_BAL 6 +#define SC3_SIDECHAIN 7 +#define SC3_LEFT_IN 8 +#define SC3_RIGHT_IN 9 +#define SC3_LEFT_OUT 10 +#define SC3_RIGHT_OUT 11 + +static LADSPA_Descriptor *sc3Descriptor = NULL; + +typedef struct { + LADSPA_Data *attack; + LADSPA_Data *release; + LADSPA_Data *threshold; + LADSPA_Data *ratio; + LADSPA_Data *knee; + LADSPA_Data *makeup_gain; + LADSPA_Data *chain_bal; + LADSPA_Data *sidechain; + LADSPA_Data *left_in; + LADSPA_Data *right_in; + LADSPA_Data *left_out; + LADSPA_Data *right_out; + float amp; + float * as; + unsigned int count; + float env; + float gain; + float gain_t; + rms_env * rms; + float sum; + LADSPA_Data run_adding_gain; +} Sc3; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return sc3Descriptor; + default: + return NULL; + } +} + +static void cleanupSc3(LADSPA_Handle instance) { +#line 44 "sc3_1427.xml" + Sc3 *plugin_data = (Sc3 *)instance; + rms_env_free(plugin_data->rms); + free(plugin_data->as); + free(instance); +} + +static void connectPortSc3( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + Sc3 *plugin; + + plugin = (Sc3 *)instance; + switch (port) { + case SC3_ATTACK: + plugin->attack = data; + break; + case SC3_RELEASE: + plugin->release = data; + break; + case SC3_THRESHOLD: + plugin->threshold = data; + break; + case SC3_RATIO: + plugin->ratio = data; + break; + case SC3_KNEE: + plugin->knee = data; + break; + case SC3_MAKEUP_GAIN: + plugin->makeup_gain = data; + break; + case SC3_CHAIN_BAL: + plugin->chain_bal = data; + break; + case SC3_SIDECHAIN: + plugin->sidechain = data; + break; + case SC3_LEFT_IN: + plugin->left_in = data; + break; + case SC3_RIGHT_IN: + plugin->right_in = data; + break; + case SC3_LEFT_OUT: + plugin->left_out = data; + break; + case SC3_RIGHT_OUT: + plugin->right_out = data; + break; + } +} + +static LADSPA_Handle instantiateSc3( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + Sc3 *plugin_data = (Sc3 *)malloc(sizeof(Sc3)); + float amp; + float *as = NULL; + unsigned int count; + float env; + float gain; + float gain_t; + rms_env *rms = NULL; + float sum; + +#line 23 "sc3_1427.xml" + unsigned int i; + float sample_rate = (float)s_rate; + + rms = rms_env_new(); + sum = 0.0f; + amp = 0.0f; + gain = 0.0f; + gain_t = 0.0f; + env = 0.0f; + count = 0; + + as = malloc(A_TBL * sizeof(float)); + as[0] = 1.0f; + for (i=1; iamp = amp; + plugin_data->as = as; + plugin_data->count = count; + plugin_data->env = env; + plugin_data->gain = gain; + plugin_data->gain_t = gain_t; + plugin_data->rms = rms; + plugin_data->sum = sum; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runSc3(LADSPA_Handle instance, unsigned long sample_count) { + Sc3 *plugin_data = (Sc3 *)instance; + + /* Attack time (ms) (float value) */ + const LADSPA_Data attack = *(plugin_data->attack); + + /* Release time (ms) (float value) */ + const LADSPA_Data release = *(plugin_data->release); + + /* Threshold level (dB) (float value) */ + const LADSPA_Data threshold = *(plugin_data->threshold); + + /* Ratio (1:n) (float value) */ + const LADSPA_Data ratio = *(plugin_data->ratio); + + /* Knee radius (dB) (float value) */ + const LADSPA_Data knee = *(plugin_data->knee); + + /* Makeup gain (dB) (float value) */ + const LADSPA_Data makeup_gain = *(plugin_data->makeup_gain); + + /* Chain balance (float value) */ + const LADSPA_Data chain_bal = *(plugin_data->chain_bal); + + /* Sidechain (array of floats of length sample_count) */ + const LADSPA_Data * const sidechain = plugin_data->sidechain; + + /* Left input (array of floats of length sample_count) */ + const LADSPA_Data * const left_in = plugin_data->left_in; + + /* Right input (array of floats of length sample_count) */ + const LADSPA_Data * const right_in = plugin_data->right_in; + + /* Left output (array of floats of length sample_count) */ + LADSPA_Data * const left_out = plugin_data->left_out; + + /* Right output (array of floats of length sample_count) */ + LADSPA_Data * const right_out = plugin_data->right_out; + float amp = plugin_data->amp; + float * as = plugin_data->as; + unsigned int count = plugin_data->count; + float env = plugin_data->env; + float gain = plugin_data->gain; + float gain_t = plugin_data->gain_t; + rms_env * rms = plugin_data->rms; + float sum = plugin_data->sum; + +#line 49 "sc3_1427.xml" + unsigned long pos; + + const float ga = as[f_round(attack * 0.001f * (float)(A_TBL-1))]; + const float gr = as[f_round(release * 0.001f * (float)(A_TBL-1))]; + const float rs = (ratio - 1.0f) / ratio; + const float mug = db2lin(makeup_gain); + const float knee_min = db2lin(threshold - knee); + const float knee_max = db2lin(threshold + knee); + const float chain_bali = 1.0f - chain_bal; + const float ef_a = ga * 0.25f; + const float ef_ai = 1.0f - ef_a; + + for (pos = 0; pos < sample_count; pos++) { + const float lev_in = chain_bali * (left_in[pos] + right_in[pos]) * 0.5f + + chain_bal * sidechain[pos]; + sum += lev_in * lev_in; + + if (amp > env) { + env = env * ga + amp * (1.0f - ga); + } else { + env = env * gr + amp * (1.0f - gr); + } + if (count++ % 4 == 3) { + amp = rms_env_process(rms, sum * 0.25f); + sum = 0.0f; + if (isnan(env)) { + // This can happen sometimes, but I dont know why + env = 0.0f; + } else if (env <= knee_min) { + gain_t = 1.0f; + } else if (env < knee_max) { + const float x = -(threshold - knee - lin2db(env)) / knee; + gain_t = db2lin(-knee * rs * x * x * 0.25f); + } else { + gain_t = db2lin((threshold - lin2db(env)) * rs); + } + } + gain = gain * ef_a + gain_t * ef_ai; + buffer_write(left_out[pos], left_in[pos] * gain * mug); + buffer_write(right_out[pos], right_in[pos] * gain * mug); + } + plugin_data->sum = sum; + plugin_data->amp = amp; + plugin_data->gain = gain; + plugin_data->gain_t = gain_t; + plugin_data->env = env; + plugin_data->count = count; +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainSc3(LADSPA_Handle instance, LADSPA_Data gain) { + ((Sc3 *)instance)->run_adding_gain = gain; +} + +static void runAddingSc3(LADSPA_Handle instance, unsigned long sample_count) { + Sc3 *plugin_data = (Sc3 *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Attack time (ms) (float value) */ + const LADSPA_Data attack = *(plugin_data->attack); + + /* Release time (ms) (float value) */ + const LADSPA_Data release = *(plugin_data->release); + + /* Threshold level (dB) (float value) */ + const LADSPA_Data threshold = *(plugin_data->threshold); + + /* Ratio (1:n) (float value) */ + const LADSPA_Data ratio = *(plugin_data->ratio); + + /* Knee radius (dB) (float value) */ + const LADSPA_Data knee = *(plugin_data->knee); + + /* Makeup gain (dB) (float value) */ + const LADSPA_Data makeup_gain = *(plugin_data->makeup_gain); + + /* Chain balance (float value) */ + const LADSPA_Data chain_bal = *(plugin_data->chain_bal); + + /* Sidechain (array of floats of length sample_count) */ + const LADSPA_Data * const sidechain = plugin_data->sidechain; + + /* Left input (array of floats of length sample_count) */ + const LADSPA_Data * const left_in = plugin_data->left_in; + + /* Right input (array of floats of length sample_count) */ + const LADSPA_Data * const right_in = plugin_data->right_in; + + /* Left output (array of floats of length sample_count) */ + LADSPA_Data * const left_out = plugin_data->left_out; + + /* Right output (array of floats of length sample_count) */ + LADSPA_Data * const right_out = plugin_data->right_out; + float amp = plugin_data->amp; + float * as = plugin_data->as; + unsigned int count = plugin_data->count; + float env = plugin_data->env; + float gain = plugin_data->gain; + float gain_t = plugin_data->gain_t; + rms_env * rms = plugin_data->rms; + float sum = plugin_data->sum; + +#line 49 "sc3_1427.xml" + unsigned long pos; + + const float ga = as[f_round(attack * 0.001f * (float)(A_TBL-1))]; + const float gr = as[f_round(release * 0.001f * (float)(A_TBL-1))]; + const float rs = (ratio - 1.0f) / ratio; + const float mug = db2lin(makeup_gain); + const float knee_min = db2lin(threshold - knee); + const float knee_max = db2lin(threshold + knee); + const float chain_bali = 1.0f - chain_bal; + const float ef_a = ga * 0.25f; + const float ef_ai = 1.0f - ef_a; + + for (pos = 0; pos < sample_count; pos++) { + const float lev_in = chain_bali * (left_in[pos] + right_in[pos]) * 0.5f + + chain_bal * sidechain[pos]; + sum += lev_in * lev_in; + + if (amp > env) { + env = env * ga + amp * (1.0f - ga); + } else { + env = env * gr + amp * (1.0f - gr); + } + if (count++ % 4 == 3) { + amp = rms_env_process(rms, sum * 0.25f); + sum = 0.0f; + if (isnan(env)) { + // This can happen sometimes, but I dont know why + env = 0.0f; + } else if (env <= knee_min) { + gain_t = 1.0f; + } else if (env < knee_max) { + const float x = -(threshold - knee - lin2db(env)) / knee; + gain_t = db2lin(-knee * rs * x * x * 0.25f); + } else { + gain_t = db2lin((threshold - lin2db(env)) * rs); + } + } + gain = gain * ef_a + gain_t * ef_ai; + buffer_write(left_out[pos], left_in[pos] * gain * mug); + buffer_write(right_out[pos], right_in[pos] * gain * mug); + } + plugin_data->sum = sum; + plugin_data->amp = amp; + plugin_data->gain = gain; + plugin_data->gain_t = gain_t; + plugin_data->env = env; + plugin_data->count = count; +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + sc3Descriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (sc3Descriptor) { + sc3Descriptor->UniqueID = 1427; + sc3Descriptor->Label = "sc3"; + sc3Descriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + sc3Descriptor->Name = + D_("SC3"); + sc3Descriptor->Maker = + "Steve Harris "; + sc3Descriptor->Copyright = + "GPL"; + sc3Descriptor->PortCount = 12; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(12, + sizeof(LADSPA_PortDescriptor)); + sc3Descriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(12, + sizeof(LADSPA_PortRangeHint)); + sc3Descriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(12, sizeof(char*)); + sc3Descriptor->PortNames = + (const char **)port_names; + + /* Parameters for Attack time (ms) */ + port_descriptors[SC3_ATTACK] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[SC3_ATTACK] = + D_("Attack time (ms)"); + port_range_hints[SC3_ATTACK].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; + port_range_hints[SC3_ATTACK].LowerBound = 2; + port_range_hints[SC3_ATTACK].UpperBound = 400; + + /* Parameters for Release time (ms) */ + port_descriptors[SC3_RELEASE] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[SC3_RELEASE] = + D_("Release time (ms)"); + port_range_hints[SC3_RELEASE].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; + port_range_hints[SC3_RELEASE].LowerBound = 2; + port_range_hints[SC3_RELEASE].UpperBound = 800; + + /* Parameters for Threshold level (dB) */ + port_descriptors[SC3_THRESHOLD] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[SC3_THRESHOLD] = + D_("Threshold level (dB)"); + port_range_hints[SC3_THRESHOLD].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MAXIMUM; + port_range_hints[SC3_THRESHOLD].LowerBound = -30; + port_range_hints[SC3_THRESHOLD].UpperBound = 0; + + /* Parameters for Ratio (1:n) */ + port_descriptors[SC3_RATIO] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[SC3_RATIO] = + D_("Ratio (1:n)"); + port_range_hints[SC3_RATIO].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1; + port_range_hints[SC3_RATIO].LowerBound = 1; + port_range_hints[SC3_RATIO].UpperBound = 10; + + /* Parameters for Knee radius (dB) */ + port_descriptors[SC3_KNEE] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[SC3_KNEE] = + D_("Knee radius (dB)"); + port_range_hints[SC3_KNEE].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; + port_range_hints[SC3_KNEE].LowerBound = 1; + port_range_hints[SC3_KNEE].UpperBound = 10; + + /* Parameters for Makeup gain (dB) */ + port_descriptors[SC3_MAKEUP_GAIN] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[SC3_MAKEUP_GAIN] = + D_("Makeup gain (dB)"); + port_range_hints[SC3_MAKEUP_GAIN].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[SC3_MAKEUP_GAIN].LowerBound = 0; + port_range_hints[SC3_MAKEUP_GAIN].UpperBound = +24; + + /* Parameters for Chain balance */ + port_descriptors[SC3_CHAIN_BAL] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[SC3_CHAIN_BAL] = + D_("Chain balance"); + port_range_hints[SC3_CHAIN_BAL].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[SC3_CHAIN_BAL].LowerBound = 0; + port_range_hints[SC3_CHAIN_BAL].UpperBound = 1; + + /* Parameters for Sidechain */ + port_descriptors[SC3_SIDECHAIN] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[SC3_SIDECHAIN] = + D_("Sidechain"); + port_range_hints[SC3_SIDECHAIN].HintDescriptor = 0; + + /* Parameters for Left input */ + port_descriptors[SC3_LEFT_IN] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[SC3_LEFT_IN] = + D_("Left input"); + port_range_hints[SC3_LEFT_IN].HintDescriptor = 0; + + /* Parameters for Right input */ + port_descriptors[SC3_RIGHT_IN] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[SC3_RIGHT_IN] = + D_("Right input"); + port_range_hints[SC3_RIGHT_IN].HintDescriptor = 0; + + /* Parameters for Left output */ + port_descriptors[SC3_LEFT_OUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[SC3_LEFT_OUT] = + D_("Left output"); + port_range_hints[SC3_LEFT_OUT].HintDescriptor = 0; + + /* Parameters for Right output */ + port_descriptors[SC3_RIGHT_OUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[SC3_RIGHT_OUT] = + D_("Right output"); + port_range_hints[SC3_RIGHT_OUT].HintDescriptor = 0; + + sc3Descriptor->activate = NULL; + sc3Descriptor->cleanup = cleanupSc3; + sc3Descriptor->connect_port = connectPortSc3; + sc3Descriptor->deactivate = NULL; + sc3Descriptor->instantiate = instantiateSc3; + sc3Descriptor->run = runSc3; + sc3Descriptor->run_adding = runAddingSc3; + sc3Descriptor->set_run_adding_gain = setRunAddingGainSc3; + } +} + +void _fini() { + if (sc3Descriptor) { + free((LADSPA_PortDescriptor *)sc3Descriptor->PortDescriptors); + free((char **)sc3Descriptor->PortNames); + free((LADSPA_PortRangeHint *)sc3Descriptor->PortRangeHints); + free(sc3Descriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/sc4_1882.c b/plugins/LadspaEffect/swh/sc4_1882.c new file mode 100644 index 000000000..63493383b --- /dev/null +++ b/plugins/LadspaEffect/swh/sc4_1882.c @@ -0,0 +1,629 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + +#line 10 "sc4_1882.xml" + +#include "util/db.h" +#include "util/rms.h" + +#define A_TBL 256 + +#define SC4_RMS_PEAK 0 +#define SC4_ATTACK 1 +#define SC4_RELEASE 2 +#define SC4_THRESHOLD 3 +#define SC4_RATIO 4 +#define SC4_KNEE 5 +#define SC4_MAKEUP_GAIN 6 +#define SC4_AMPLITUDE 7 +#define SC4_GAIN_RED 8 +#define SC4_LEFT_IN 9 +#define SC4_RIGHT_IN 10 +#define SC4_LEFT_OUT 11 +#define SC4_RIGHT_OUT 12 + +static LADSPA_Descriptor *sc4Descriptor = NULL; + +typedef struct { + LADSPA_Data *rms_peak; + LADSPA_Data *attack; + LADSPA_Data *release; + LADSPA_Data *threshold; + LADSPA_Data *ratio; + LADSPA_Data *knee; + LADSPA_Data *makeup_gain; + LADSPA_Data *amplitude; + LADSPA_Data *gain_red; + LADSPA_Data *left_in; + LADSPA_Data *right_in; + LADSPA_Data *left_out; + LADSPA_Data *right_out; + float amp; + float * as; + unsigned int count; + float env; + float env_peak; + float env_rms; + float gain; + float gain_t; + rms_env * rms; + float sum; + LADSPA_Data run_adding_gain; +} Sc4; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return sc4Descriptor; + default: + return NULL; + } +} + +static void cleanupSc4(LADSPA_Handle instance) { +#line 46 "sc4_1882.xml" + Sc4 *plugin_data = (Sc4 *)instance; + rms_env_free(plugin_data->rms); + free(plugin_data->as); + free(instance); +} + +static void connectPortSc4( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + Sc4 *plugin; + + plugin = (Sc4 *)instance; + switch (port) { + case SC4_RMS_PEAK: + plugin->rms_peak = data; + break; + case SC4_ATTACK: + plugin->attack = data; + break; + case SC4_RELEASE: + plugin->release = data; + break; + case SC4_THRESHOLD: + plugin->threshold = data; + break; + case SC4_RATIO: + plugin->ratio = data; + break; + case SC4_KNEE: + plugin->knee = data; + break; + case SC4_MAKEUP_GAIN: + plugin->makeup_gain = data; + break; + case SC4_AMPLITUDE: + plugin->amplitude = data; + break; + case SC4_GAIN_RED: + plugin->gain_red = data; + break; + case SC4_LEFT_IN: + plugin->left_in = data; + break; + case SC4_RIGHT_IN: + plugin->right_in = data; + break; + case SC4_LEFT_OUT: + plugin->left_out = data; + break; + case SC4_RIGHT_OUT: + plugin->right_out = data; + break; + } +} + +static LADSPA_Handle instantiateSc4( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + Sc4 *plugin_data = (Sc4 *)malloc(sizeof(Sc4)); + float amp; + float *as = NULL; + unsigned int count; + float env; + float env_peak; + float env_rms; + float gain; + float gain_t; + rms_env *rms = NULL; + float sum; + +#line 23 "sc4_1882.xml" + unsigned int i; + float sample_rate = (float)s_rate; + + rms = rms_env_new(); + sum = 0.0f; + amp = 0.0f; + gain = 0.0f; + gain_t = 0.0f; + env = 0.0f; + env_rms = 0.0f; + env_peak = 0.0f; + count = 0; + + as = malloc(A_TBL * sizeof(float)); + as[0] = 1.0f; + for (i=1; iamp = amp; + plugin_data->as = as; + plugin_data->count = count; + plugin_data->env = env; + plugin_data->env_peak = env_peak; + plugin_data->env_rms = env_rms; + plugin_data->gain = gain; + plugin_data->gain_t = gain_t; + plugin_data->rms = rms; + plugin_data->sum = sum; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runSc4(LADSPA_Handle instance, unsigned long sample_count) { + Sc4 *plugin_data = (Sc4 *)instance; + + /* RMS/peak (float value) */ + const LADSPA_Data rms_peak = *(plugin_data->rms_peak); + + /* Attack time (ms) (float value) */ + const LADSPA_Data attack = *(plugin_data->attack); + + /* Release time (ms) (float value) */ + const LADSPA_Data release = *(plugin_data->release); + + /* Threshold level (dB) (float value) */ + const LADSPA_Data threshold = *(plugin_data->threshold); + + /* Ratio (1:n) (float value) */ + const LADSPA_Data ratio = *(plugin_data->ratio); + + /* Knee radius (dB) (float value) */ + const LADSPA_Data knee = *(plugin_data->knee); + + /* Makeup gain (dB) (float value) */ + const LADSPA_Data makeup_gain = *(plugin_data->makeup_gain); + + /* Left input (array of floats of length sample_count) */ + const LADSPA_Data * const left_in = plugin_data->left_in; + + /* Right input (array of floats of length sample_count) */ + const LADSPA_Data * const right_in = plugin_data->right_in; + + /* Left output (array of floats of length sample_count) */ + LADSPA_Data * const left_out = plugin_data->left_out; + + /* Right output (array of floats of length sample_count) */ + LADSPA_Data * const right_out = plugin_data->right_out; + float amp = plugin_data->amp; + float * as = plugin_data->as; + unsigned int count = plugin_data->count; + float env = plugin_data->env; + float env_peak = plugin_data->env_peak; + float env_rms = plugin_data->env_rms; + float gain = plugin_data->gain; + float gain_t = plugin_data->gain_t; + rms_env * rms = plugin_data->rms; + float sum = plugin_data->sum; + +#line 51 "sc4_1882.xml" + unsigned long pos; + + const float ga = attack < 2.0f ? 0.0f : as[f_round(attack * 0.001f * (float)(A_TBL-1))]; + const float gr = as[f_round(release * 0.001f * (float)(A_TBL-1))]; + const float rs = (ratio - 1.0f) / ratio; + const float mug = db2lin(makeup_gain); + const float knee_min = db2lin(threshold - knee); + const float knee_max = db2lin(threshold + knee); + const float ef_a = ga * 0.25f; + const float ef_ai = 1.0f - ef_a; + + for (pos = 0; pos < sample_count; pos++) { + const float la = fabs(left_in[pos]); + const float ra = fabs(right_in[pos]); + const float lev_in = f_max(la, ra); + sum += lev_in * lev_in; + + if (amp > env_rms) { + env_rms = env_rms * ga + amp * (1.0f - ga); + } else { + env_rms = env_rms * gr + amp * (1.0f - gr); + } + round_to_zero(&env_rms); + if (lev_in > env_peak) { + env_peak = env_peak * ga + lev_in * (1.0f - ga); + } else { + env_peak = env_peak * gr + lev_in * (1.0f - gr); + } + round_to_zero(&env_peak); + if ((count++ & 3) == 3) { + amp = rms_env_process(rms, sum * 0.25f); + sum = 0.0f; + if (isnan(env_rms)) { + // This can happen sometimes, but I don't know why + env_rms = 0.0f; + } + + env = LIN_INTERP(rms_peak, env_rms, env_peak); + + if (env <= knee_min) { + gain_t = 1.0f; + } else if (env < knee_max) { + const float x = -(threshold - knee - lin2db(env)) / knee; + gain_t = db2lin(-knee * rs * x * x * 0.25f); + } else { + gain_t = db2lin((threshold - lin2db(env)) * rs); + } + } + gain = gain * ef_a + gain_t * ef_ai; + buffer_write(left_out[pos], left_in[pos] * gain * mug); + buffer_write(right_out[pos], right_in[pos] * gain * mug); + } + plugin_data->sum = sum; + plugin_data->amp = amp; + plugin_data->gain = gain; + plugin_data->gain_t = gain_t; + plugin_data->env = env; + plugin_data->env_rms = env_rms; + plugin_data->env_peak = env_peak; + plugin_data->count = count; + + *(plugin_data->amplitude) = lin2db(env); + *(plugin_data->gain_red) = lin2db(gain); +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainSc4(LADSPA_Handle instance, LADSPA_Data gain) { + ((Sc4 *)instance)->run_adding_gain = gain; +} + +static void runAddingSc4(LADSPA_Handle instance, unsigned long sample_count) { + Sc4 *plugin_data = (Sc4 *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* RMS/peak (float value) */ + const LADSPA_Data rms_peak = *(plugin_data->rms_peak); + + /* Attack time (ms) (float value) */ + const LADSPA_Data attack = *(plugin_data->attack); + + /* Release time (ms) (float value) */ + const LADSPA_Data release = *(plugin_data->release); + + /* Threshold level (dB) (float value) */ + const LADSPA_Data threshold = *(plugin_data->threshold); + + /* Ratio (1:n) (float value) */ + const LADSPA_Data ratio = *(plugin_data->ratio); + + /* Knee radius (dB) (float value) */ + const LADSPA_Data knee = *(plugin_data->knee); + + /* Makeup gain (dB) (float value) */ + const LADSPA_Data makeup_gain = *(plugin_data->makeup_gain); + + /* Left input (array of floats of length sample_count) */ + const LADSPA_Data * const left_in = plugin_data->left_in; + + /* Right input (array of floats of length sample_count) */ + const LADSPA_Data * const right_in = plugin_data->right_in; + + /* Left output (array of floats of length sample_count) */ + LADSPA_Data * const left_out = plugin_data->left_out; + + /* Right output (array of floats of length sample_count) */ + LADSPA_Data * const right_out = plugin_data->right_out; + float amp = plugin_data->amp; + float * as = plugin_data->as; + unsigned int count = plugin_data->count; + float env = plugin_data->env; + float env_peak = plugin_data->env_peak; + float env_rms = plugin_data->env_rms; + float gain = plugin_data->gain; + float gain_t = plugin_data->gain_t; + rms_env * rms = plugin_data->rms; + float sum = plugin_data->sum; + +#line 51 "sc4_1882.xml" + unsigned long pos; + + const float ga = attack < 2.0f ? 0.0f : as[f_round(attack * 0.001f * (float)(A_TBL-1))]; + const float gr = as[f_round(release * 0.001f * (float)(A_TBL-1))]; + const float rs = (ratio - 1.0f) / ratio; + const float mug = db2lin(makeup_gain); + const float knee_min = db2lin(threshold - knee); + const float knee_max = db2lin(threshold + knee); + const float ef_a = ga * 0.25f; + const float ef_ai = 1.0f - ef_a; + + for (pos = 0; pos < sample_count; pos++) { + const float la = fabs(left_in[pos]); + const float ra = fabs(right_in[pos]); + const float lev_in = f_max(la, ra); + sum += lev_in * lev_in; + + if (amp > env_rms) { + env_rms = env_rms * ga + amp * (1.0f - ga); + } else { + env_rms = env_rms * gr + amp * (1.0f - gr); + } + round_to_zero(&env_rms); + if (lev_in > env_peak) { + env_peak = env_peak * ga + lev_in * (1.0f - ga); + } else { + env_peak = env_peak * gr + lev_in * (1.0f - gr); + } + round_to_zero(&env_peak); + if ((count++ & 3) == 3) { + amp = rms_env_process(rms, sum * 0.25f); + sum = 0.0f; + if (isnan(env_rms)) { + // This can happen sometimes, but I don't know why + env_rms = 0.0f; + } + + env = LIN_INTERP(rms_peak, env_rms, env_peak); + + if (env <= knee_min) { + gain_t = 1.0f; + } else if (env < knee_max) { + const float x = -(threshold - knee - lin2db(env)) / knee; + gain_t = db2lin(-knee * rs * x * x * 0.25f); + } else { + gain_t = db2lin((threshold - lin2db(env)) * rs); + } + } + gain = gain * ef_a + gain_t * ef_ai; + buffer_write(left_out[pos], left_in[pos] * gain * mug); + buffer_write(right_out[pos], right_in[pos] * gain * mug); + } + plugin_data->sum = sum; + plugin_data->amp = amp; + plugin_data->gain = gain; + plugin_data->gain_t = gain_t; + plugin_data->env = env; + plugin_data->env_rms = env_rms; + plugin_data->env_peak = env_peak; + plugin_data->count = count; + + *(plugin_data->amplitude) = lin2db(env); + *(plugin_data->gain_red) = lin2db(gain); +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + sc4Descriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (sc4Descriptor) { + sc4Descriptor->UniqueID = 1882; + sc4Descriptor->Label = "sc4"; + sc4Descriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + sc4Descriptor->Name = + D_("SC4"); + sc4Descriptor->Maker = + "Steve Harris "; + sc4Descriptor->Copyright = + "GPL"; + sc4Descriptor->PortCount = 13; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(13, + sizeof(LADSPA_PortDescriptor)); + sc4Descriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(13, + sizeof(LADSPA_PortRangeHint)); + sc4Descriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(13, sizeof(char*)); + sc4Descriptor->PortNames = + (const char **)port_names; + + /* Parameters for RMS/peak */ + port_descriptors[SC4_RMS_PEAK] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[SC4_RMS_PEAK] = + D_("RMS/peak"); + port_range_hints[SC4_RMS_PEAK].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MINIMUM; + port_range_hints[SC4_RMS_PEAK].LowerBound = 0; + port_range_hints[SC4_RMS_PEAK].UpperBound = 1; + + /* Parameters for Attack time (ms) */ + port_descriptors[SC4_ATTACK] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[SC4_ATTACK] = + D_("Attack time (ms)"); + port_range_hints[SC4_ATTACK].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; + port_range_hints[SC4_ATTACK].LowerBound = 1.5; + port_range_hints[SC4_ATTACK].UpperBound = 400; + + /* Parameters for Release time (ms) */ + port_descriptors[SC4_RELEASE] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[SC4_RELEASE] = + D_("Release time (ms)"); + port_range_hints[SC4_RELEASE].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; + port_range_hints[SC4_RELEASE].LowerBound = 2; + port_range_hints[SC4_RELEASE].UpperBound = 800; + + /* Parameters for Threshold level (dB) */ + port_descriptors[SC4_THRESHOLD] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[SC4_THRESHOLD] = + D_("Threshold level (dB)"); + port_range_hints[SC4_THRESHOLD].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MAXIMUM; + port_range_hints[SC4_THRESHOLD].LowerBound = -30; + port_range_hints[SC4_THRESHOLD].UpperBound = 0; + + /* Parameters for Ratio (1:n) */ + port_descriptors[SC4_RATIO] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[SC4_RATIO] = + D_("Ratio (1:n)"); + port_range_hints[SC4_RATIO].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1; + port_range_hints[SC4_RATIO].LowerBound = 1; + port_range_hints[SC4_RATIO].UpperBound = 20; + + /* Parameters for Knee radius (dB) */ + port_descriptors[SC4_KNEE] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[SC4_KNEE] = + D_("Knee radius (dB)"); + port_range_hints[SC4_KNEE].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; + port_range_hints[SC4_KNEE].LowerBound = 1; + port_range_hints[SC4_KNEE].UpperBound = 10; + + /* Parameters for Makeup gain (dB) */ + port_descriptors[SC4_MAKEUP_GAIN] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[SC4_MAKEUP_GAIN] = + D_("Makeup gain (dB)"); + port_range_hints[SC4_MAKEUP_GAIN].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[SC4_MAKEUP_GAIN].LowerBound = 0; + port_range_hints[SC4_MAKEUP_GAIN].UpperBound = +24; + + /* Parameters for Amplitude (dB) */ + port_descriptors[SC4_AMPLITUDE] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_CONTROL; + port_names[SC4_AMPLITUDE] = + D_("Amplitude (dB)"); + port_range_hints[SC4_AMPLITUDE].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; + port_range_hints[SC4_AMPLITUDE].LowerBound = -40; + port_range_hints[SC4_AMPLITUDE].UpperBound = +12; + + /* Parameters for Gain reduction (dB) */ + port_descriptors[SC4_GAIN_RED] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_CONTROL; + port_names[SC4_GAIN_RED] = + D_("Gain reduction (dB)"); + port_range_hints[SC4_GAIN_RED].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; + port_range_hints[SC4_GAIN_RED].LowerBound = -24; + port_range_hints[SC4_GAIN_RED].UpperBound = 0; + + /* Parameters for Left input */ + port_descriptors[SC4_LEFT_IN] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[SC4_LEFT_IN] = + D_("Left input"); + port_range_hints[SC4_LEFT_IN].HintDescriptor = 0; + + /* Parameters for Right input */ + port_descriptors[SC4_RIGHT_IN] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[SC4_RIGHT_IN] = + D_("Right input"); + port_range_hints[SC4_RIGHT_IN].HintDescriptor = 0; + + /* Parameters for Left output */ + port_descriptors[SC4_LEFT_OUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[SC4_LEFT_OUT] = + D_("Left output"); + port_range_hints[SC4_LEFT_OUT].HintDescriptor = 0; + + /* Parameters for Right output */ + port_descriptors[SC4_RIGHT_OUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[SC4_RIGHT_OUT] = + D_("Right output"); + port_range_hints[SC4_RIGHT_OUT].HintDescriptor = 0; + + sc4Descriptor->activate = NULL; + sc4Descriptor->cleanup = cleanupSc4; + sc4Descriptor->connect_port = connectPortSc4; + sc4Descriptor->deactivate = NULL; + sc4Descriptor->instantiate = instantiateSc4; + sc4Descriptor->run = runSc4; + sc4Descriptor->run_adding = runAddingSc4; + sc4Descriptor->set_run_adding_gain = setRunAddingGainSc4; + } +} + +void _fini() { + if (sc4Descriptor) { + free((LADSPA_PortDescriptor *)sc4Descriptor->PortDescriptors); + free((char **)sc4Descriptor->PortNames); + free((LADSPA_PortRangeHint *)sc4Descriptor->PortRangeHints); + free(sc4Descriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/sc4m_1916.c b/plugins/LadspaEffect/swh/sc4m_1916.c new file mode 100644 index 000000000..e9a07a0d2 --- /dev/null +++ b/plugins/LadspaEffect/swh/sc4m_1916.c @@ -0,0 +1,579 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + +#line 10 "sc4m_1916.xml" + +#include "util/db.h" +#include "util/rms.h" + +#define A_TBL 256 + +#define SC4M_RMS_PEAK 0 +#define SC4M_ATTACK 1 +#define SC4M_RELEASE 2 +#define SC4M_THRESHOLD 3 +#define SC4M_RATIO 4 +#define SC4M_KNEE 5 +#define SC4M_MAKEUP_GAIN 6 +#define SC4M_AMPLITUDE 7 +#define SC4M_GAIN_RED 8 +#define SC4M_INPUT 9 +#define SC4M_OUTPUT 10 + +static LADSPA_Descriptor *sc4mDescriptor = NULL; + +typedef struct { + LADSPA_Data *rms_peak; + LADSPA_Data *attack; + LADSPA_Data *release; + LADSPA_Data *threshold; + LADSPA_Data *ratio; + LADSPA_Data *knee; + LADSPA_Data *makeup_gain; + LADSPA_Data *amplitude; + LADSPA_Data *gain_red; + LADSPA_Data *input; + LADSPA_Data *output; + float amp; + float * as; + unsigned int count; + float env; + float env_peak; + float env_rms; + float gain; + float gain_t; + rms_env * rms; + float sum; + LADSPA_Data run_adding_gain; +} Sc4m; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return sc4mDescriptor; + default: + return NULL; + } +} + +static void cleanupSc4m(LADSPA_Handle instance) { +#line 46 "sc4m_1916.xml" + Sc4m *plugin_data = (Sc4m *)instance; + rms_env_free(plugin_data->rms); + free(plugin_data->as); + free(instance); +} + +static void connectPortSc4m( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + Sc4m *plugin; + + plugin = (Sc4m *)instance; + switch (port) { + case SC4M_RMS_PEAK: + plugin->rms_peak = data; + break; + case SC4M_ATTACK: + plugin->attack = data; + break; + case SC4M_RELEASE: + plugin->release = data; + break; + case SC4M_THRESHOLD: + plugin->threshold = data; + break; + case SC4M_RATIO: + plugin->ratio = data; + break; + case SC4M_KNEE: + plugin->knee = data; + break; + case SC4M_MAKEUP_GAIN: + plugin->makeup_gain = data; + break; + case SC4M_AMPLITUDE: + plugin->amplitude = data; + break; + case SC4M_GAIN_RED: + plugin->gain_red = data; + break; + case SC4M_INPUT: + plugin->input = data; + break; + case SC4M_OUTPUT: + plugin->output = data; + break; + } +} + +static LADSPA_Handle instantiateSc4m( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + Sc4m *plugin_data = (Sc4m *)malloc(sizeof(Sc4m)); + float amp; + float *as = NULL; + unsigned int count; + float env; + float env_peak; + float env_rms; + float gain; + float gain_t; + rms_env *rms = NULL; + float sum; + +#line 23 "sc4m_1916.xml" + unsigned int i; + float sample_rate = (float)s_rate; + + rms = rms_env_new(); + sum = 0.0f; + amp = 0.0f; + gain = 0.0f; + gain_t = 0.0f; + env = 0.0f; + env_rms = 0.0f; + env_peak = 0.0f; + count = 0; + + as = malloc(A_TBL * sizeof(float)); + as[0] = 1.0f; + for (i=1; iamp = amp; + plugin_data->as = as; + plugin_data->count = count; + plugin_data->env = env; + plugin_data->env_peak = env_peak; + plugin_data->env_rms = env_rms; + plugin_data->gain = gain; + plugin_data->gain_t = gain_t; + plugin_data->rms = rms; + plugin_data->sum = sum; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runSc4m(LADSPA_Handle instance, unsigned long sample_count) { + Sc4m *plugin_data = (Sc4m *)instance; + + /* RMS/peak (float value) */ + const LADSPA_Data rms_peak = *(plugin_data->rms_peak); + + /* Attack time (ms) (float value) */ + const LADSPA_Data attack = *(plugin_data->attack); + + /* Release time (ms) (float value) */ + const LADSPA_Data release = *(plugin_data->release); + + /* Threshold level (dB) (float value) */ + const LADSPA_Data threshold = *(plugin_data->threshold); + + /* Ratio (1:n) (float value) */ + const LADSPA_Data ratio = *(plugin_data->ratio); + + /* Knee radius (dB) (float value) */ + const LADSPA_Data knee = *(plugin_data->knee); + + /* Makeup gain (dB) (float value) */ + const LADSPA_Data makeup_gain = *(plugin_data->makeup_gain); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + float amp = plugin_data->amp; + float * as = plugin_data->as; + unsigned int count = plugin_data->count; + float env = plugin_data->env; + float env_peak = plugin_data->env_peak; + float env_rms = plugin_data->env_rms; + float gain = plugin_data->gain; + float gain_t = plugin_data->gain_t; + rms_env * rms = plugin_data->rms; + float sum = plugin_data->sum; + +#line 51 "sc4m_1916.xml" + unsigned long pos; + + const float ga = attack < 2.0f ? 0.0f : as[f_round(attack * 0.001f * (float)(A_TBL-1))]; + const float gr = as[f_round(release * 0.001f * (float)(A_TBL-1))]; + const float rs = (ratio - 1.0f) / ratio; + const float mug = db2lin(makeup_gain); + const float knee_min = db2lin(threshold - knee); + const float knee_max = db2lin(threshold + knee); + const float ef_a = ga * 0.25f; + const float ef_ai = 1.0f - ef_a; + + for (pos = 0; pos < sample_count; pos++) { + const float lev_in = input[pos]; + sum += lev_in * lev_in; + + if (amp > env_rms) { + env_rms = env_rms * ga + amp * (1.0f - ga); + } else { + env_rms = env_rms * gr + amp * (1.0f - gr); + } + round_to_zero(&env_rms); + if (lev_in > env_peak) { + env_peak = env_peak * ga + lev_in * (1.0f - ga); + } else { + env_peak = env_peak * gr + lev_in * (1.0f - gr); + } + round_to_zero(&env_peak); + if ((count++ & 3) == 3) { + amp = rms_env_process(rms, sum * 0.25f); + sum = 0.0f; + + env = LIN_INTERP(rms_peak, env_rms, env_peak); + + if (env <= knee_min) { + gain_t = 1.0f; + } else if (env < knee_max) { + const float x = -(threshold - knee - lin2db(env)) / knee; + gain_t = db2lin(-knee * rs * x * x * 0.25f); + } else { + gain_t = db2lin((threshold - lin2db(env)) * rs); + } + } + gain = gain * ef_a + gain_t * ef_ai; + buffer_write(output[pos], input[pos] * gain * mug); + } + plugin_data->sum = sum; + plugin_data->amp = amp; + plugin_data->gain = gain; + plugin_data->gain_t = gain_t; + plugin_data->env = env; + plugin_data->env_rms = env_rms; + plugin_data->env_peak = env_peak; + plugin_data->count = count; + + *(plugin_data->amplitude) = lin2db(env); + *(plugin_data->gain_red) = lin2db(gain); +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainSc4m(LADSPA_Handle instance, LADSPA_Data gain) { + ((Sc4m *)instance)->run_adding_gain = gain; +} + +static void runAddingSc4m(LADSPA_Handle instance, unsigned long sample_count) { + Sc4m *plugin_data = (Sc4m *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* RMS/peak (float value) */ + const LADSPA_Data rms_peak = *(plugin_data->rms_peak); + + /* Attack time (ms) (float value) */ + const LADSPA_Data attack = *(plugin_data->attack); + + /* Release time (ms) (float value) */ + const LADSPA_Data release = *(plugin_data->release); + + /* Threshold level (dB) (float value) */ + const LADSPA_Data threshold = *(plugin_data->threshold); + + /* Ratio (1:n) (float value) */ + const LADSPA_Data ratio = *(plugin_data->ratio); + + /* Knee radius (dB) (float value) */ + const LADSPA_Data knee = *(plugin_data->knee); + + /* Makeup gain (dB) (float value) */ + const LADSPA_Data makeup_gain = *(plugin_data->makeup_gain); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + float amp = plugin_data->amp; + float * as = plugin_data->as; + unsigned int count = plugin_data->count; + float env = plugin_data->env; + float env_peak = plugin_data->env_peak; + float env_rms = plugin_data->env_rms; + float gain = plugin_data->gain; + float gain_t = plugin_data->gain_t; + rms_env * rms = plugin_data->rms; + float sum = plugin_data->sum; + +#line 51 "sc4m_1916.xml" + unsigned long pos; + + const float ga = attack < 2.0f ? 0.0f : as[f_round(attack * 0.001f * (float)(A_TBL-1))]; + const float gr = as[f_round(release * 0.001f * (float)(A_TBL-1))]; + const float rs = (ratio - 1.0f) / ratio; + const float mug = db2lin(makeup_gain); + const float knee_min = db2lin(threshold - knee); + const float knee_max = db2lin(threshold + knee); + const float ef_a = ga * 0.25f; + const float ef_ai = 1.0f - ef_a; + + for (pos = 0; pos < sample_count; pos++) { + const float lev_in = input[pos]; + sum += lev_in * lev_in; + + if (amp > env_rms) { + env_rms = env_rms * ga + amp * (1.0f - ga); + } else { + env_rms = env_rms * gr + amp * (1.0f - gr); + } + round_to_zero(&env_rms); + if (lev_in > env_peak) { + env_peak = env_peak * ga + lev_in * (1.0f - ga); + } else { + env_peak = env_peak * gr + lev_in * (1.0f - gr); + } + round_to_zero(&env_peak); + if ((count++ & 3) == 3) { + amp = rms_env_process(rms, sum * 0.25f); + sum = 0.0f; + + env = LIN_INTERP(rms_peak, env_rms, env_peak); + + if (env <= knee_min) { + gain_t = 1.0f; + } else if (env < knee_max) { + const float x = -(threshold - knee - lin2db(env)) / knee; + gain_t = db2lin(-knee * rs * x * x * 0.25f); + } else { + gain_t = db2lin((threshold - lin2db(env)) * rs); + } + } + gain = gain * ef_a + gain_t * ef_ai; + buffer_write(output[pos], input[pos] * gain * mug); + } + plugin_data->sum = sum; + plugin_data->amp = amp; + plugin_data->gain = gain; + plugin_data->gain_t = gain_t; + plugin_data->env = env; + plugin_data->env_rms = env_rms; + plugin_data->env_peak = env_peak; + plugin_data->count = count; + + *(plugin_data->amplitude) = lin2db(env); + *(plugin_data->gain_red) = lin2db(gain); +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + sc4mDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (sc4mDescriptor) { + sc4mDescriptor->UniqueID = 1916; + sc4mDescriptor->Label = "sc4m"; + sc4mDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + sc4mDescriptor->Name = + D_("SC4 mono"); + sc4mDescriptor->Maker = + "Steve Harris "; + sc4mDescriptor->Copyright = + "GPL"; + sc4mDescriptor->PortCount = 11; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(11, + sizeof(LADSPA_PortDescriptor)); + sc4mDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(11, + sizeof(LADSPA_PortRangeHint)); + sc4mDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(11, sizeof(char*)); + sc4mDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for RMS/peak */ + port_descriptors[SC4M_RMS_PEAK] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[SC4M_RMS_PEAK] = + D_("RMS/peak"); + port_range_hints[SC4M_RMS_PEAK].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MINIMUM; + port_range_hints[SC4M_RMS_PEAK].LowerBound = 0; + port_range_hints[SC4M_RMS_PEAK].UpperBound = 1; + + /* Parameters for Attack time (ms) */ + port_descriptors[SC4M_ATTACK] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[SC4M_ATTACK] = + D_("Attack time (ms)"); + port_range_hints[SC4M_ATTACK].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; + port_range_hints[SC4M_ATTACK].LowerBound = 1.5; + port_range_hints[SC4M_ATTACK].UpperBound = 400; + + /* Parameters for Release time (ms) */ + port_descriptors[SC4M_RELEASE] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[SC4M_RELEASE] = + D_("Release time (ms)"); + port_range_hints[SC4M_RELEASE].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; + port_range_hints[SC4M_RELEASE].LowerBound = 2; + port_range_hints[SC4M_RELEASE].UpperBound = 800; + + /* Parameters for Threshold level (dB) */ + port_descriptors[SC4M_THRESHOLD] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[SC4M_THRESHOLD] = + D_("Threshold level (dB)"); + port_range_hints[SC4M_THRESHOLD].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MAXIMUM; + port_range_hints[SC4M_THRESHOLD].LowerBound = -30; + port_range_hints[SC4M_THRESHOLD].UpperBound = 0; + + /* Parameters for Ratio (1:n) */ + port_descriptors[SC4M_RATIO] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[SC4M_RATIO] = + D_("Ratio (1:n)"); + port_range_hints[SC4M_RATIO].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1; + port_range_hints[SC4M_RATIO].LowerBound = 1; + port_range_hints[SC4M_RATIO].UpperBound = 20; + + /* Parameters for Knee radius (dB) */ + port_descriptors[SC4M_KNEE] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[SC4M_KNEE] = + D_("Knee radius (dB)"); + port_range_hints[SC4M_KNEE].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; + port_range_hints[SC4M_KNEE].LowerBound = 1; + port_range_hints[SC4M_KNEE].UpperBound = 10; + + /* Parameters for Makeup gain (dB) */ + port_descriptors[SC4M_MAKEUP_GAIN] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[SC4M_MAKEUP_GAIN] = + D_("Makeup gain (dB)"); + port_range_hints[SC4M_MAKEUP_GAIN].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[SC4M_MAKEUP_GAIN].LowerBound = 0; + port_range_hints[SC4M_MAKEUP_GAIN].UpperBound = +24; + + /* Parameters for Amplitude (dB) */ + port_descriptors[SC4M_AMPLITUDE] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_CONTROL; + port_names[SC4M_AMPLITUDE] = + D_("Amplitude (dB)"); + port_range_hints[SC4M_AMPLITUDE].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; + port_range_hints[SC4M_AMPLITUDE].LowerBound = -40; + port_range_hints[SC4M_AMPLITUDE].UpperBound = +12; + + /* Parameters for Gain reduction (dB) */ + port_descriptors[SC4M_GAIN_RED] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_CONTROL; + port_names[SC4M_GAIN_RED] = + D_("Gain reduction (dB)"); + port_range_hints[SC4M_GAIN_RED].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; + port_range_hints[SC4M_GAIN_RED].LowerBound = -24; + port_range_hints[SC4M_GAIN_RED].UpperBound = 0; + + /* Parameters for Input */ + port_descriptors[SC4M_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[SC4M_INPUT] = + D_("Input"); + port_range_hints[SC4M_INPUT].HintDescriptor = 0; + + /* Parameters for Output */ + port_descriptors[SC4M_OUTPUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[SC4M_OUTPUT] = + D_("Output"); + port_range_hints[SC4M_OUTPUT].HintDescriptor = 0; + + sc4mDescriptor->activate = NULL; + sc4mDescriptor->cleanup = cleanupSc4m; + sc4mDescriptor->connect_port = connectPortSc4m; + sc4mDescriptor->deactivate = NULL; + sc4mDescriptor->instantiate = instantiateSc4m; + sc4mDescriptor->run = runSc4m; + sc4mDescriptor->run_adding = runAddingSc4m; + sc4mDescriptor->set_run_adding_gain = setRunAddingGainSc4m; + } +} + +void _fini() { + if (sc4mDescriptor) { + free((LADSPA_PortDescriptor *)sc4mDescriptor->PortDescriptors); + free((char **)sc4mDescriptor->PortNames); + free((LADSPA_PortRangeHint *)sc4mDescriptor->PortRangeHints); + free(sc4mDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/se4_1883.c b/plugins/LadspaEffect/swh/se4_1883.c new file mode 100644 index 000000000..f3de1ec88 --- /dev/null +++ b/plugins/LadspaEffect/swh/se4_1883.c @@ -0,0 +1,625 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + +#line 10 "se4_1883.xml" + +#include "util/db.h" +#include "util/rms.h" + +#define A_TBL 256 + +#define SE4_RMS_PEAK 0 +#define SE4_ATTACK 1 +#define SE4_RELEASE 2 +#define SE4_THRESHOLD 3 +#define SE4_RATIO 4 +#define SE4_KNEE 5 +#define SE4_ATTENUATION 6 +#define SE4_AMPLITUDE 7 +#define SE4_GAIN_EXP 8 +#define SE4_LEFT_IN 9 +#define SE4_RIGHT_IN 10 +#define SE4_LEFT_OUT 11 +#define SE4_RIGHT_OUT 12 + +static LADSPA_Descriptor *se4Descriptor = NULL; + +typedef struct { + LADSPA_Data *rms_peak; + LADSPA_Data *attack; + LADSPA_Data *release; + LADSPA_Data *threshold; + LADSPA_Data *ratio; + LADSPA_Data *knee; + LADSPA_Data *attenuation; + LADSPA_Data *amplitude; + LADSPA_Data *gain_exp; + LADSPA_Data *left_in; + LADSPA_Data *right_in; + LADSPA_Data *left_out; + LADSPA_Data *right_out; + float amp; + float * as; + unsigned int count; + float env; + float env_peak; + float env_rms; + float gain; + float gain_t; + rms_env * rms; + float sum; + LADSPA_Data run_adding_gain; +} Se4; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return se4Descriptor; + default: + return NULL; + } +} + +static void cleanupSe4(LADSPA_Handle instance) { +#line 46 "se4_1883.xml" + Se4 *plugin_data = (Se4 *)instance; + rms_env_free(plugin_data->rms); + free(plugin_data->as); + free(instance); +} + +static void connectPortSe4( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + Se4 *plugin; + + plugin = (Se4 *)instance; + switch (port) { + case SE4_RMS_PEAK: + plugin->rms_peak = data; + break; + case SE4_ATTACK: + plugin->attack = data; + break; + case SE4_RELEASE: + plugin->release = data; + break; + case SE4_THRESHOLD: + plugin->threshold = data; + break; + case SE4_RATIO: + plugin->ratio = data; + break; + case SE4_KNEE: + plugin->knee = data; + break; + case SE4_ATTENUATION: + plugin->attenuation = data; + break; + case SE4_AMPLITUDE: + plugin->amplitude = data; + break; + case SE4_GAIN_EXP: + plugin->gain_exp = data; + break; + case SE4_LEFT_IN: + plugin->left_in = data; + break; + case SE4_RIGHT_IN: + plugin->right_in = data; + break; + case SE4_LEFT_OUT: + plugin->left_out = data; + break; + case SE4_RIGHT_OUT: + plugin->right_out = data; + break; + } +} + +static LADSPA_Handle instantiateSe4( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + Se4 *plugin_data = (Se4 *)malloc(sizeof(Se4)); + float amp; + float *as = NULL; + unsigned int count; + float env; + float env_peak; + float env_rms; + float gain; + float gain_t; + rms_env *rms = NULL; + float sum; + +#line 23 "se4_1883.xml" + unsigned int i; + float sample_rate = (float)s_rate; + + rms = rms_env_new(); + sum = 0.0f; + amp = 0.0f; + gain = 0.0f; + gain_t = 0.0f; + env = 0.0f; + env_rms = 0.0f; + env_peak = 0.0f; + count = 0; + + as = malloc(A_TBL * sizeof(float)); + as[0] = 1.0f; + for (i=1; iamp = amp; + plugin_data->as = as; + plugin_data->count = count; + plugin_data->env = env; + plugin_data->env_peak = env_peak; + plugin_data->env_rms = env_rms; + plugin_data->gain = gain; + plugin_data->gain_t = gain_t; + plugin_data->rms = rms; + plugin_data->sum = sum; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runSe4(LADSPA_Handle instance, unsigned long sample_count) { + Se4 *plugin_data = (Se4 *)instance; + + /* RMS/peak (float value) */ + const LADSPA_Data rms_peak = *(plugin_data->rms_peak); + + /* Attack time (ms) (float value) */ + const LADSPA_Data attack = *(plugin_data->attack); + + /* Release time (ms) (float value) */ + const LADSPA_Data release = *(plugin_data->release); + + /* Threshold level (dB) (float value) */ + const LADSPA_Data threshold = *(plugin_data->threshold); + + /* Ratio (1:n) (float value) */ + const LADSPA_Data ratio = *(plugin_data->ratio); + + /* Knee radius (dB) (float value) */ + const LADSPA_Data knee = *(plugin_data->knee); + + /* Attenuation (dB) (float value) */ + const LADSPA_Data attenuation = *(plugin_data->attenuation); + + /* Left input (array of floats of length sample_count) */ + const LADSPA_Data * const left_in = plugin_data->left_in; + + /* Right input (array of floats of length sample_count) */ + const LADSPA_Data * const right_in = plugin_data->right_in; + + /* Left output (array of floats of length sample_count) */ + LADSPA_Data * const left_out = plugin_data->left_out; + + /* Right output (array of floats of length sample_count) */ + LADSPA_Data * const right_out = plugin_data->right_out; + float amp = plugin_data->amp; + float * as = plugin_data->as; + unsigned int count = plugin_data->count; + float env = plugin_data->env; + float env_peak = plugin_data->env_peak; + float env_rms = plugin_data->env_rms; + float gain = plugin_data->gain; + float gain_t = plugin_data->gain_t; + rms_env * rms = plugin_data->rms; + float sum = plugin_data->sum; + +#line 51 "se4_1883.xml" + unsigned long pos; + + const float ga = attack < 2.0f ? 0.0f : as[f_round(attack * 0.001f * (float)(A_TBL-1))]; + const float gr = as[f_round(release * 0.001f * (float)(A_TBL-1))]; + const float rs = ratio / (ratio - 1.0f); + const float mug = db2lin(attenuation); + const float knee_min = db2lin(threshold - knee); + const float knee_max = db2lin(threshold + knee); + const float ef_a = ga * 0.25f; + const float ef_ai = 1.0f - ef_a; + + for (pos = 0; pos < sample_count; pos++) { + const float la = fabs(left_in[pos]); + const float ra = fabs(right_in[pos]); + const float lev_in = f_max(la, ra); + sum += lev_in * lev_in; + + if (amp > env_rms) { + env_rms = env_rms * ga + amp * (1.0f - ga); + } else { + env_rms = env_rms * gr + amp * (1.0f - gr); + } + if (lev_in > env_peak) { + env_peak = env_peak * ga + lev_in * (1.0f - ga); + } else { + env_peak = env_peak * gr + lev_in * (1.0f - gr); + } + if ((count++ & 3) == 3) { + amp = rms_env_process(rms, sum * 0.25f); + sum = 0.0f; + if (isnan(env_rms)) { + // This can happen sometimes, but I don't know why + env_rms = 0.0f; + } + + env = LIN_INTERP(rms_peak, env_rms, env_peak); + + if (env <= knee_min) { + gain_t = 1.0f; + } else if (env < knee_max) { + const float x = -(threshold - knee - lin2db(env)) / knee; + gain_t = db2lin(-knee * rs * x * x * 0.25f); + } else { + gain_t = db2lin((threshold - lin2db(env)) * rs); + } + } + gain = gain * ef_a + gain_t * ef_ai; + buffer_write(left_out[pos], left_in[pos] * gain * mug); + buffer_write(right_out[pos], right_in[pos] * gain * mug); + } + plugin_data->sum = sum; + plugin_data->amp = amp; + plugin_data->gain = gain; + plugin_data->gain_t = gain_t; + plugin_data->env = env; + plugin_data->env_rms = env_rms; + plugin_data->env_peak = env_peak; + plugin_data->count = count; + + *(plugin_data->amplitude) = lin2db(env); + *(plugin_data->gain_exp) = lin2db(gain); +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainSe4(LADSPA_Handle instance, LADSPA_Data gain) { + ((Se4 *)instance)->run_adding_gain = gain; +} + +static void runAddingSe4(LADSPA_Handle instance, unsigned long sample_count) { + Se4 *plugin_data = (Se4 *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* RMS/peak (float value) */ + const LADSPA_Data rms_peak = *(plugin_data->rms_peak); + + /* Attack time (ms) (float value) */ + const LADSPA_Data attack = *(plugin_data->attack); + + /* Release time (ms) (float value) */ + const LADSPA_Data release = *(plugin_data->release); + + /* Threshold level (dB) (float value) */ + const LADSPA_Data threshold = *(plugin_data->threshold); + + /* Ratio (1:n) (float value) */ + const LADSPA_Data ratio = *(plugin_data->ratio); + + /* Knee radius (dB) (float value) */ + const LADSPA_Data knee = *(plugin_data->knee); + + /* Attenuation (dB) (float value) */ + const LADSPA_Data attenuation = *(plugin_data->attenuation); + + /* Left input (array of floats of length sample_count) */ + const LADSPA_Data * const left_in = plugin_data->left_in; + + /* Right input (array of floats of length sample_count) */ + const LADSPA_Data * const right_in = plugin_data->right_in; + + /* Left output (array of floats of length sample_count) */ + LADSPA_Data * const left_out = plugin_data->left_out; + + /* Right output (array of floats of length sample_count) */ + LADSPA_Data * const right_out = plugin_data->right_out; + float amp = plugin_data->amp; + float * as = plugin_data->as; + unsigned int count = plugin_data->count; + float env = plugin_data->env; + float env_peak = plugin_data->env_peak; + float env_rms = plugin_data->env_rms; + float gain = plugin_data->gain; + float gain_t = plugin_data->gain_t; + rms_env * rms = plugin_data->rms; + float sum = plugin_data->sum; + +#line 51 "se4_1883.xml" + unsigned long pos; + + const float ga = attack < 2.0f ? 0.0f : as[f_round(attack * 0.001f * (float)(A_TBL-1))]; + const float gr = as[f_round(release * 0.001f * (float)(A_TBL-1))]; + const float rs = ratio / (ratio - 1.0f); + const float mug = db2lin(attenuation); + const float knee_min = db2lin(threshold - knee); + const float knee_max = db2lin(threshold + knee); + const float ef_a = ga * 0.25f; + const float ef_ai = 1.0f - ef_a; + + for (pos = 0; pos < sample_count; pos++) { + const float la = fabs(left_in[pos]); + const float ra = fabs(right_in[pos]); + const float lev_in = f_max(la, ra); + sum += lev_in * lev_in; + + if (amp > env_rms) { + env_rms = env_rms * ga + amp * (1.0f - ga); + } else { + env_rms = env_rms * gr + amp * (1.0f - gr); + } + if (lev_in > env_peak) { + env_peak = env_peak * ga + lev_in * (1.0f - ga); + } else { + env_peak = env_peak * gr + lev_in * (1.0f - gr); + } + if ((count++ & 3) == 3) { + amp = rms_env_process(rms, sum * 0.25f); + sum = 0.0f; + if (isnan(env_rms)) { + // This can happen sometimes, but I don't know why + env_rms = 0.0f; + } + + env = LIN_INTERP(rms_peak, env_rms, env_peak); + + if (env <= knee_min) { + gain_t = 1.0f; + } else if (env < knee_max) { + const float x = -(threshold - knee - lin2db(env)) / knee; + gain_t = db2lin(-knee * rs * x * x * 0.25f); + } else { + gain_t = db2lin((threshold - lin2db(env)) * rs); + } + } + gain = gain * ef_a + gain_t * ef_ai; + buffer_write(left_out[pos], left_in[pos] * gain * mug); + buffer_write(right_out[pos], right_in[pos] * gain * mug); + } + plugin_data->sum = sum; + plugin_data->amp = amp; + plugin_data->gain = gain; + plugin_data->gain_t = gain_t; + plugin_data->env = env; + plugin_data->env_rms = env_rms; + plugin_data->env_peak = env_peak; + plugin_data->count = count; + + *(plugin_data->amplitude) = lin2db(env); + *(plugin_data->gain_exp) = lin2db(gain); +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + se4Descriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (se4Descriptor) { + se4Descriptor->UniqueID = 1883; + se4Descriptor->Label = "se4"; + se4Descriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + se4Descriptor->Name = + D_("SE4"); + se4Descriptor->Maker = + "Steve Harris "; + se4Descriptor->Copyright = + "GPL"; + se4Descriptor->PortCount = 13; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(13, + sizeof(LADSPA_PortDescriptor)); + se4Descriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(13, + sizeof(LADSPA_PortRangeHint)); + se4Descriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(13, sizeof(char*)); + se4Descriptor->PortNames = + (const char **)port_names; + + /* Parameters for RMS/peak */ + port_descriptors[SE4_RMS_PEAK] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[SE4_RMS_PEAK] = + D_("RMS/peak"); + port_range_hints[SE4_RMS_PEAK].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MINIMUM; + port_range_hints[SE4_RMS_PEAK].LowerBound = 0; + port_range_hints[SE4_RMS_PEAK].UpperBound = 1; + + /* Parameters for Attack time (ms) */ + port_descriptors[SE4_ATTACK] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[SE4_ATTACK] = + D_("Attack time (ms)"); + port_range_hints[SE4_ATTACK].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; + port_range_hints[SE4_ATTACK].LowerBound = 1.5; + port_range_hints[SE4_ATTACK].UpperBound = 400; + + /* Parameters for Release time (ms) */ + port_descriptors[SE4_RELEASE] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[SE4_RELEASE] = + D_("Release time (ms)"); + port_range_hints[SE4_RELEASE].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; + port_range_hints[SE4_RELEASE].LowerBound = 2; + port_range_hints[SE4_RELEASE].UpperBound = 800; + + /* Parameters for Threshold level (dB) */ + port_descriptors[SE4_THRESHOLD] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[SE4_THRESHOLD] = + D_("Threshold level (dB)"); + port_range_hints[SE4_THRESHOLD].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MAXIMUM; + port_range_hints[SE4_THRESHOLD].LowerBound = -30; + port_range_hints[SE4_THRESHOLD].UpperBound = 0; + + /* Parameters for Ratio (1:n) */ + port_descriptors[SE4_RATIO] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[SE4_RATIO] = + D_("Ratio (1:n)"); + port_range_hints[SE4_RATIO].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1; + port_range_hints[SE4_RATIO].LowerBound = 1; + port_range_hints[SE4_RATIO].UpperBound = 20; + + /* Parameters for Knee radius (dB) */ + port_descriptors[SE4_KNEE] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[SE4_KNEE] = + D_("Knee radius (dB)"); + port_range_hints[SE4_KNEE].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; + port_range_hints[SE4_KNEE].LowerBound = 1; + port_range_hints[SE4_KNEE].UpperBound = 10; + + /* Parameters for Attenuation (dB) */ + port_descriptors[SE4_ATTENUATION] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[SE4_ATTENUATION] = + D_("Attenuation (dB)"); + port_range_hints[SE4_ATTENUATION].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[SE4_ATTENUATION].LowerBound = -24; + port_range_hints[SE4_ATTENUATION].UpperBound = 0; + + /* Parameters for Amplitude (dB) */ + port_descriptors[SE4_AMPLITUDE] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_CONTROL; + port_names[SE4_AMPLITUDE] = + D_("Amplitude (dB)"); + port_range_hints[SE4_AMPLITUDE].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; + port_range_hints[SE4_AMPLITUDE].LowerBound = -40; + port_range_hints[SE4_AMPLITUDE].UpperBound = +12; + + /* Parameters for Gain expansion (dB) */ + port_descriptors[SE4_GAIN_EXP] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_CONTROL; + port_names[SE4_GAIN_EXP] = + D_("Gain expansion (dB)"); + port_range_hints[SE4_GAIN_EXP].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; + port_range_hints[SE4_GAIN_EXP].LowerBound = 0; + port_range_hints[SE4_GAIN_EXP].UpperBound = +24; + + /* Parameters for Left input */ + port_descriptors[SE4_LEFT_IN] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[SE4_LEFT_IN] = + D_("Left input"); + port_range_hints[SE4_LEFT_IN].HintDescriptor = 0; + + /* Parameters for Right input */ + port_descriptors[SE4_RIGHT_IN] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[SE4_RIGHT_IN] = + D_("Right input"); + port_range_hints[SE4_RIGHT_IN].HintDescriptor = 0; + + /* Parameters for Left output */ + port_descriptors[SE4_LEFT_OUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[SE4_LEFT_OUT] = + D_("Left output"); + port_range_hints[SE4_LEFT_OUT].HintDescriptor = 0; + + /* Parameters for Right output */ + port_descriptors[SE4_RIGHT_OUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[SE4_RIGHT_OUT] = + D_("Right output"); + port_range_hints[SE4_RIGHT_OUT].HintDescriptor = 0; + + se4Descriptor->activate = NULL; + se4Descriptor->cleanup = cleanupSe4; + se4Descriptor->connect_port = connectPortSe4; + se4Descriptor->deactivate = NULL; + se4Descriptor->instantiate = instantiateSe4; + se4Descriptor->run = runSe4; + se4Descriptor->run_adding = runAddingSe4; + se4Descriptor->set_run_adding_gain = setRunAddingGainSe4; + } +} + +void _fini() { + if (se4Descriptor) { + free((LADSPA_PortDescriptor *)se4Descriptor->PortDescriptors); + free((char **)se4Descriptor->PortNames); + free((LADSPA_PortRangeHint *)se4Descriptor->PortRangeHints); + free(se4Descriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/shaper_1187.c b/plugins/LadspaEffect/swh/shaper_1187.c new file mode 100644 index 000000000..039367216 --- /dev/null +++ b/plugins/LadspaEffect/swh/shaper_1187.c @@ -0,0 +1,271 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + + +#define SHAPER_SHAPEP 0 +#define SHAPER_INPUT 1 +#define SHAPER_OUTPUT 2 + +static LADSPA_Descriptor *shaperDescriptor = NULL; + +typedef struct { + LADSPA_Data *shapep; + LADSPA_Data *input; + LADSPA_Data *output; + LADSPA_Data run_adding_gain; +} Shaper; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return shaperDescriptor; + default: + return NULL; + } +} + +static void cleanupShaper(LADSPA_Handle instance) { + free(instance); +} + +static void connectPortShaper( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + Shaper *plugin; + + plugin = (Shaper *)instance; + switch (port) { + case SHAPER_SHAPEP: + plugin->shapep = data; + break; + case SHAPER_INPUT: + plugin->input = data; + break; + case SHAPER_OUTPUT: + plugin->output = data; + break; + } +} + +static LADSPA_Handle instantiateShaper( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + Shaper *plugin_data = (Shaper *)malloc(sizeof(Shaper)); + plugin_data->run_adding_gain = 1.0f; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runShaper(LADSPA_Handle instance, unsigned long sample_count) { + Shaper *plugin_data = (Shaper *)instance; + + /* Waveshape (float value) */ + const LADSPA_Data shapep = *(plugin_data->shapep); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + +#line 17 "shaper_1187.xml" + int pos; + float shape = 0.0f; + + if (shapep < 1.0f && shapep > -1.0f) { + shape = 1.0f; + } else if (shape < 0) { + shape = -1.0f / shape; + } else { + shape = shapep; + } + + for (pos = 0; pos < sample_count; pos++) { + if (input[pos] < 0.0f) { + buffer_write(output[pos], -pow(-input[pos], shape)); + } else { + buffer_write(output[pos], pow(input[pos], shape)); + } + } +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainShaper(LADSPA_Handle instance, LADSPA_Data gain) { + ((Shaper *)instance)->run_adding_gain = gain; +} + +static void runAddingShaper(LADSPA_Handle instance, unsigned long sample_count) { + Shaper *plugin_data = (Shaper *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Waveshape (float value) */ + const LADSPA_Data shapep = *(plugin_data->shapep); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + +#line 17 "shaper_1187.xml" + int pos; + float shape = 0.0f; + + if (shapep < 1.0f && shapep > -1.0f) { + shape = 1.0f; + } else if (shape < 0) { + shape = -1.0f / shape; + } else { + shape = shapep; + } + + for (pos = 0; pos < sample_count; pos++) { + if (input[pos] < 0.0f) { + buffer_write(output[pos], -pow(-input[pos], shape)); + } else { + buffer_write(output[pos], pow(input[pos], shape)); + } + } +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + shaperDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (shaperDescriptor) { + shaperDescriptor->UniqueID = 1187; + shaperDescriptor->Label = "shaper"; + shaperDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + shaperDescriptor->Name = + D_("Wave shaper"); + shaperDescriptor->Maker = + "Steve Harris "; + shaperDescriptor->Copyright = + "GPL"; + shaperDescriptor->PortCount = 3; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(3, + sizeof(LADSPA_PortDescriptor)); + shaperDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(3, + sizeof(LADSPA_PortRangeHint)); + shaperDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(3, sizeof(char*)); + shaperDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Waveshape */ + port_descriptors[SHAPER_SHAPEP] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[SHAPER_SHAPEP] = + D_("Waveshape"); + port_range_hints[SHAPER_SHAPEP].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[SHAPER_SHAPEP].LowerBound = -10; + port_range_hints[SHAPER_SHAPEP].UpperBound = +10; + + /* Parameters for Input */ + port_descriptors[SHAPER_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[SHAPER_INPUT] = + D_("Input"); + port_range_hints[SHAPER_INPUT].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; + port_range_hints[SHAPER_INPUT].LowerBound = -1; + port_range_hints[SHAPER_INPUT].UpperBound = +1; + + /* Parameters for Output */ + port_descriptors[SHAPER_OUTPUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[SHAPER_OUTPUT] = + D_("Output"); + port_range_hints[SHAPER_OUTPUT].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; + port_range_hints[SHAPER_OUTPUT].LowerBound = -1; + port_range_hints[SHAPER_OUTPUT].UpperBound = +1; + + shaperDescriptor->activate = NULL; + shaperDescriptor->cleanup = cleanupShaper; + shaperDescriptor->connect_port = connectPortShaper; + shaperDescriptor->deactivate = NULL; + shaperDescriptor->instantiate = instantiateShaper; + shaperDescriptor->run = runShaper; + shaperDescriptor->run_adding = runAddingShaper; + shaperDescriptor->set_run_adding_gain = setRunAddingGainShaper; + } +} + +void _fini() { + if (shaperDescriptor) { + free((LADSPA_PortDescriptor *)shaperDescriptor->PortDescriptors); + free((char **)shaperDescriptor->PortNames); + free((LADSPA_PortRangeHint *)shaperDescriptor->PortRangeHints); + free(shaperDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/sifter_1210.c b/plugins/LadspaEffect/swh/sifter_1210.c new file mode 100644 index 000000000..891e56ee1 --- /dev/null +++ b/plugins/LadspaEffect/swh/sifter_1210.c @@ -0,0 +1,445 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + +#line 9 "sifter_1210.xml" + +#include "ladspa-util.h" + +#define MAX_BSIZE 1000 + +inline int partition(LADSPA_Data array[], int left, int right); + +inline void q_sort(LADSPA_Data array[], int left, int right) { + float pivot = partition(array, left, right); + + if (left < pivot) { + q_sort(array, left, pivot-1); + } + if (right > pivot) { + q_sort(array, pivot+1, right); + } +} + +inline int partition(LADSPA_Data array[], int left, int right) { + float pivot = array[left]; + + while (left < right) { + while (array[right] >= pivot && left < right) { + right--; + } + if (left != right) { + array[left] = array[right]; + left++; + } + while (array[left] <= pivot && left < right) { + left++; + } + if (left != right) { + array[right] = array[left]; + right--; + } + } + array[left] = pivot; + + return left; +} + +#define SIFTER_SIZE 0 +#define SIFTER_INPUT 1 +#define SIFTER_OUTPUT 2 + +static LADSPA_Descriptor *sifterDescriptor = NULL; + +typedef struct { + LADSPA_Data *size; + LADSPA_Data *input; + LADSPA_Data *output; + LADSPA_Data *b1; + long b1ptr; + LADSPA_Data *b2; + long b2ptr; + LADSPA_Data *ob; + LADSPA_Data *rc; + LADSPA_Data run_adding_gain; +} Sifter; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return sifterDescriptor; + default: + return NULL; + } +} + +static void activateSifter(LADSPA_Handle instance) { + Sifter *plugin_data = (Sifter *)instance; + LADSPA_Data *b1 = plugin_data->b1; + long b1ptr = plugin_data->b1ptr; + LADSPA_Data *b2 = plugin_data->b2; + long b2ptr = plugin_data->b2ptr; + LADSPA_Data *ob = plugin_data->ob; + LADSPA_Data *rc = plugin_data->rc; +#line 84 "sifter_1210.xml" + b1ptr = 0; + b2ptr = 0; + memset(b1, 0, MAX_BSIZE * sizeof(LADSPA_Data)); + memset(b2, 0, MAX_BSIZE * sizeof(LADSPA_Data)); + memset(ob, 0, MAX_BSIZE * sizeof(LADSPA_Data)); + plugin_data->b1 = b1; + plugin_data->b1ptr = b1ptr; + plugin_data->b2 = b2; + plugin_data->b2ptr = b2ptr; + plugin_data->ob = ob; + plugin_data->rc = rc; + +} + +static void cleanupSifter(LADSPA_Handle instance) { +#line 92 "sifter_1210.xml" + Sifter *plugin_data = (Sifter *)instance; + free(plugin_data->b1); + free(plugin_data->b2); + free(plugin_data->ob); + free(plugin_data->rc); + free(instance); +} + +static void connectPortSifter( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + Sifter *plugin; + + plugin = (Sifter *)instance; + switch (port) { + case SIFTER_SIZE: + plugin->size = data; + break; + case SIFTER_INPUT: + plugin->input = data; + break; + case SIFTER_OUTPUT: + plugin->output = data; + break; + } +} + +static LADSPA_Handle instantiateSifter( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + Sifter *plugin_data = (Sifter *)malloc(sizeof(Sifter)); + LADSPA_Data *b1 = NULL; + long b1ptr; + LADSPA_Data *b2 = NULL; + long b2ptr; + LADSPA_Data *ob = NULL; + LADSPA_Data *rc = NULL; + +#line 60 "sifter_1210.xml" + long i; + float scla = (float)MAX_BSIZE * 0.5f; + float sclb = (float)MAX_BSIZE; + + b1 = (LADSPA_Data *)calloc(MAX_BSIZE, sizeof(LADSPA_Data)); + b2 = (LADSPA_Data *)calloc(MAX_BSIZE, sizeof(LADSPA_Data)); + ob = (LADSPA_Data *)calloc(MAX_BSIZE, sizeof(LADSPA_Data)); + rc = (LADSPA_Data *)calloc(MAX_BSIZE, sizeof(LADSPA_Data)); + + // Calculate raised cosine table, to build windowing function from + rc[0] = cos(((0.0f - scla) / sclb) * M_PI); + rc[0] *= rc[0]; + for (i=1; ib1 = b1; + plugin_data->b1ptr = b1ptr; + plugin_data->b2 = b2; + plugin_data->b2ptr = b2ptr; + plugin_data->ob = ob; + plugin_data->rc = rc; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runSifter(LADSPA_Handle instance, unsigned long sample_count) { + Sifter *plugin_data = (Sifter *)instance; + + /* Sift size (float value) */ + const LADSPA_Data size = *(plugin_data->size); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + LADSPA_Data * b1 = plugin_data->b1; + long b1ptr = plugin_data->b1ptr; + LADSPA_Data * b2 = plugin_data->b2; + long b2ptr = plugin_data->b2ptr; + LADSPA_Data * ob = plugin_data->ob; + LADSPA_Data * rc = plugin_data->rc; + +#line 99 "sifter_1210.xml" + unsigned long pos, i; + long bsize = f_round(LIMIT(size, 1, MAX_BSIZE)); + + for (pos = 0; pos < sample_count; pos++) { + if (b1ptr >= bsize) { + float wstep = (float)MAX_BSIZE / (float)b1ptr, wpos = 0.0f; + + q_sort(b1, 0, b1ptr); + for (i=0; i= bsize) { + float wstep = (float)MAX_BSIZE / (float)b2ptr, wpos = 0.0f; + int offset = (b2ptr+1)/2; + + q_sort(b2, 0, b2ptr); + for (i=0; ib1ptr = b1ptr; + plugin_data->b2ptr = b2ptr; +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainSifter(LADSPA_Handle instance, LADSPA_Data gain) { + ((Sifter *)instance)->run_adding_gain = gain; +} + +static void runAddingSifter(LADSPA_Handle instance, unsigned long sample_count) { + Sifter *plugin_data = (Sifter *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Sift size (float value) */ + const LADSPA_Data size = *(plugin_data->size); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + LADSPA_Data * b1 = plugin_data->b1; + long b1ptr = plugin_data->b1ptr; + LADSPA_Data * b2 = plugin_data->b2; + long b2ptr = plugin_data->b2ptr; + LADSPA_Data * ob = plugin_data->ob; + LADSPA_Data * rc = plugin_data->rc; + +#line 99 "sifter_1210.xml" + unsigned long pos, i; + long bsize = f_round(LIMIT(size, 1, MAX_BSIZE)); + + for (pos = 0; pos < sample_count; pos++) { + if (b1ptr >= bsize) { + float wstep = (float)MAX_BSIZE / (float)b1ptr, wpos = 0.0f; + + q_sort(b1, 0, b1ptr); + for (i=0; i= bsize) { + float wstep = (float)MAX_BSIZE / (float)b2ptr, wpos = 0.0f; + int offset = (b2ptr+1)/2; + + q_sort(b2, 0, b2ptr); + for (i=0; ib1ptr = b1ptr; + plugin_data->b2ptr = b2ptr; +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + sifterDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (sifterDescriptor) { + sifterDescriptor->UniqueID = 1210; + sifterDescriptor->Label = "sifter"; + sifterDescriptor->Properties = + 0; + sifterDescriptor->Name = + D_("Signal sifter"); + sifterDescriptor->Maker = + "Steve Harris "; + sifterDescriptor->Copyright = + "GPL"; + sifterDescriptor->PortCount = 3; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(3, + sizeof(LADSPA_PortDescriptor)); + sifterDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(3, + sizeof(LADSPA_PortRangeHint)); + sifterDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(3, sizeof(char*)); + sifterDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Sift size */ + port_descriptors[SIFTER_SIZE] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[SIFTER_SIZE] = + D_("Sift size"); + port_range_hints[SIFTER_SIZE].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1; + port_range_hints[SIFTER_SIZE].LowerBound = 1; + port_range_hints[SIFTER_SIZE].UpperBound = MAX_BSIZE; + + /* Parameters for Input */ + port_descriptors[SIFTER_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[SIFTER_INPUT] = + D_("Input"); + port_range_hints[SIFTER_INPUT].HintDescriptor = 0; + + /* Parameters for Output */ + port_descriptors[SIFTER_OUTPUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[SIFTER_OUTPUT] = + D_("Output"); + port_range_hints[SIFTER_OUTPUT].HintDescriptor = 0; + + sifterDescriptor->activate = activateSifter; + sifterDescriptor->cleanup = cleanupSifter; + sifterDescriptor->connect_port = connectPortSifter; + sifterDescriptor->deactivate = NULL; + sifterDescriptor->instantiate = instantiateSifter; + sifterDescriptor->run = runSifter; + sifterDescriptor->run_adding = runAddingSifter; + sifterDescriptor->set_run_adding_gain = setRunAddingGainSifter; + } +} + +void _fini() { + if (sifterDescriptor) { + free((LADSPA_PortDescriptor *)sifterDescriptor->PortDescriptors); + free((char **)sifterDescriptor->PortNames); + free((LADSPA_PortRangeHint *)sifterDescriptor->PortRangeHints); + free(sifterDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/sin_cos_1881.c b/plugins/LadspaEffect/swh/sin_cos_1881.c new file mode 100644 index 000000000..fd5e440b3 --- /dev/null +++ b/plugins/LadspaEffect/swh/sin_cos_1881.c @@ -0,0 +1,307 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + +#line 10 "sin_cos_1881.xml" + +#include "ladspa-util.h" + +#define SINCOS_FREQ 0 +#define SINCOS_PITCH 1 +#define SINCOS_SINE 2 +#define SINCOS_COSINE 3 + +static LADSPA_Descriptor *sinCosDescriptor = NULL; + +typedef struct { + LADSPA_Data *freq; + LADSPA_Data *pitch; + LADSPA_Data *sine; + LADSPA_Data *cosine; + float fs; + double last_om; + double phi; + LADSPA_Data run_adding_gain; +} SinCos; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return sinCosDescriptor; + default: + return NULL; + } +} + +static void cleanupSinCos(LADSPA_Handle instance) { + free(instance); +} + +static void connectPortSinCos( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + SinCos *plugin; + + plugin = (SinCos *)instance; + switch (port) { + case SINCOS_FREQ: + plugin->freq = data; + break; + case SINCOS_PITCH: + plugin->pitch = data; + break; + case SINCOS_SINE: + plugin->sine = data; + break; + case SINCOS_COSINE: + plugin->cosine = data; + break; + } +} + +static LADSPA_Handle instantiateSinCos( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + SinCos *plugin_data = (SinCos *)malloc(sizeof(SinCos)); + float fs; + double last_om; + double phi; + +#line 21 "sin_cos_1881.xml" + fs = (float)s_rate; + phi = 0.0; + last_om = 0.0; + + plugin_data->fs = fs; + plugin_data->last_om = last_om; + plugin_data->phi = phi; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runSinCos(LADSPA_Handle instance, unsigned long sample_count) { + SinCos *plugin_data = (SinCos *)instance; + + /* Base frequency (Hz) (float value) */ + const LADSPA_Data freq = *(plugin_data->freq); + + /* Pitch offset (float value) */ + const LADSPA_Data pitch = *(plugin_data->pitch); + + /* Sine output (array of floats of length sample_count) */ + LADSPA_Data * const sine = plugin_data->sine; + + /* Cosine output (array of floats of length sample_count) */ + LADSPA_Data * const cosine = plugin_data->cosine; + float fs = plugin_data->fs; + double last_om = plugin_data->last_om; + double phi = plugin_data->phi; + +#line 27 "sin_cos_1881.xml" + unsigned long pos; + const double target_om = 2.0 * M_PI * f_clamp(freq, 0.0f, 0.5f) * pow(2.0, f_clamp(pitch, 0.0f, 16.0f)) / fs; + const double om_d = (target_om - last_om) / (double)sample_count; + double om = last_om; + + for (pos = 0; pos < sample_count; pos++) { + buffer_write(sine[pos], sin(phi)); + buffer_write(cosine[pos], cos(phi)); + om += om_d; + phi += om; + } + while (phi > 2.0 * M_PI) { + phi -= 2.0 * M_PI; + } + + plugin_data->phi = phi; + plugin_data->last_om = target_om; +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainSinCos(LADSPA_Handle instance, LADSPA_Data gain) { + ((SinCos *)instance)->run_adding_gain = gain; +} + +static void runAddingSinCos(LADSPA_Handle instance, unsigned long sample_count) { + SinCos *plugin_data = (SinCos *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Base frequency (Hz) (float value) */ + const LADSPA_Data freq = *(plugin_data->freq); + + /* Pitch offset (float value) */ + const LADSPA_Data pitch = *(plugin_data->pitch); + + /* Sine output (array of floats of length sample_count) */ + LADSPA_Data * const sine = plugin_data->sine; + + /* Cosine output (array of floats of length sample_count) */ + LADSPA_Data * const cosine = plugin_data->cosine; + float fs = plugin_data->fs; + double last_om = plugin_data->last_om; + double phi = plugin_data->phi; + +#line 27 "sin_cos_1881.xml" + unsigned long pos; + const double target_om = 2.0 * M_PI * f_clamp(freq, 0.0f, 0.5f) * pow(2.0, f_clamp(pitch, 0.0f, 16.0f)) / fs; + const double om_d = (target_om - last_om) / (double)sample_count; + double om = last_om; + + for (pos = 0; pos < sample_count; pos++) { + buffer_write(sine[pos], sin(phi)); + buffer_write(cosine[pos], cos(phi)); + om += om_d; + phi += om; + } + while (phi > 2.0 * M_PI) { + phi -= 2.0 * M_PI; + } + + plugin_data->phi = phi; + plugin_data->last_om = target_om; +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + sinCosDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (sinCosDescriptor) { + sinCosDescriptor->UniqueID = 1881; + sinCosDescriptor->Label = "sinCos"; + sinCosDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + sinCosDescriptor->Name = + D_("Sine + cosine oscillator"); + sinCosDescriptor->Maker = + "Steve Harris "; + sinCosDescriptor->Copyright = + "GPL"; + sinCosDescriptor->PortCount = 4; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(4, + sizeof(LADSPA_PortDescriptor)); + sinCosDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(4, + sizeof(LADSPA_PortRangeHint)); + sinCosDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(4, sizeof(char*)); + sinCosDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Base frequency (Hz) */ + port_descriptors[SINCOS_FREQ] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[SINCOS_FREQ] = + D_("Base frequency (Hz)"); + port_range_hints[SINCOS_FREQ].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_440 | LADSPA_HINT_SAMPLE_RATE | LADSPA_HINT_LOGARITHMIC; + port_range_hints[SINCOS_FREQ].LowerBound = 0.000001; + port_range_hints[SINCOS_FREQ].UpperBound = 0.5; + + /* Parameters for Pitch offset */ + port_descriptors[SINCOS_PITCH] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[SINCOS_PITCH] = + D_("Pitch offset"); + port_range_hints[SINCOS_PITCH].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[SINCOS_PITCH].LowerBound = 0; + port_range_hints[SINCOS_PITCH].UpperBound = 8; + + /* Parameters for Sine output */ + port_descriptors[SINCOS_SINE] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[SINCOS_SINE] = + D_("Sine output"); + port_range_hints[SINCOS_SINE].HintDescriptor = 0; + + /* Parameters for Cosine output */ + port_descriptors[SINCOS_COSINE] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[SINCOS_COSINE] = + D_("Cosine output"); + port_range_hints[SINCOS_COSINE].HintDescriptor = 0; + + sinCosDescriptor->activate = NULL; + sinCosDescriptor->cleanup = cleanupSinCos; + sinCosDescriptor->connect_port = connectPortSinCos; + sinCosDescriptor->deactivate = NULL; + sinCosDescriptor->instantiate = instantiateSinCos; + sinCosDescriptor->run = runSinCos; + sinCosDescriptor->run_adding = runAddingSinCos; + sinCosDescriptor->set_run_adding_gain = setRunAddingGainSinCos; + } +} + +void _fini() { + if (sinCosDescriptor) { + free((LADSPA_PortDescriptor *)sinCosDescriptor->PortDescriptors); + free((char **)sinCosDescriptor->PortNames); + free((LADSPA_PortRangeHint *)sinCosDescriptor->PortRangeHints); + free(sinCosDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/single_para_1203.c b/plugins/LadspaEffect/swh/single_para_1203.c new file mode 100644 index 000000000..75977a38c --- /dev/null +++ b/plugins/LadspaEffect/swh/single_para_1203.c @@ -0,0 +1,323 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + +#line 10 "single_para_1203.xml" + +#include "util/biquad.h" + +#define SINGLEPARA_GAIN 0 +#define SINGLEPARA_FC 1 +#define SINGLEPARA_BW 2 +#define SINGLEPARA_INPUT 3 +#define SINGLEPARA_OUTPUT 4 + +static LADSPA_Descriptor *singleParaDescriptor = NULL; + +typedef struct { + LADSPA_Data *gain; + LADSPA_Data *fc; + LADSPA_Data *bw; + LADSPA_Data *input; + LADSPA_Data *output; + biquad * filter; + float fs; + LADSPA_Data run_adding_gain; +} SinglePara; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return singleParaDescriptor; + default: + return NULL; + } +} + +static void activateSinglePara(LADSPA_Handle instance) { + SinglePara *plugin_data = (SinglePara *)instance; + biquad *filter = plugin_data->filter; + float fs = plugin_data->fs; +#line 26 "single_para_1203.xml" + biquad_init(filter); + plugin_data->filter = filter; + plugin_data->fs = fs; + +} + +static void cleanupSinglePara(LADSPA_Handle instance) { +#line 30 "single_para_1203.xml" + SinglePara *plugin_data = (SinglePara *)instance; + free(plugin_data->filter); + free(instance); +} + +static void connectPortSinglePara( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + SinglePara *plugin; + + plugin = (SinglePara *)instance; + switch (port) { + case SINGLEPARA_GAIN: + plugin->gain = data; + break; + case SINGLEPARA_FC: + plugin->fc = data; + break; + case SINGLEPARA_BW: + plugin->bw = data; + break; + case SINGLEPARA_INPUT: + plugin->input = data; + break; + case SINGLEPARA_OUTPUT: + plugin->output = data; + break; + } +} + +static LADSPA_Handle instantiateSinglePara( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + SinglePara *plugin_data = (SinglePara *)malloc(sizeof(SinglePara)); + biquad *filter = NULL; + float fs; + +#line 20 "single_para_1203.xml" + fs = (float)s_rate; + filter = malloc(sizeof(biquad)); + biquad_init(filter); + + plugin_data->filter = filter; + plugin_data->fs = fs; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runSinglePara(LADSPA_Handle instance, unsigned long sample_count) { + SinglePara *plugin_data = (SinglePara *)instance; + + /* Gain (dB) (float value) */ + const LADSPA_Data gain = *(plugin_data->gain); + + /* Frequency (Hz) (float value) */ + const LADSPA_Data fc = *(plugin_data->fc); + + /* Bandwidth (octaves) (float value) */ + const LADSPA_Data bw = *(plugin_data->bw); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + biquad * filter = plugin_data->filter; + float fs = plugin_data->fs; + +#line 34 "single_para_1203.xml" + unsigned long pos; + + eq_set_params(filter, fc, gain, bw, fs); + + for (pos = 0; pos < sample_count; pos++) { + buffer_write(output[pos], biquad_run(filter, input[pos])); + } +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainSinglePara(LADSPA_Handle instance, LADSPA_Data gain) { + ((SinglePara *)instance)->run_adding_gain = gain; +} + +static void runAddingSinglePara(LADSPA_Handle instance, unsigned long sample_count) { + SinglePara *plugin_data = (SinglePara *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Gain (dB) (float value) */ + const LADSPA_Data gain = *(plugin_data->gain); + + /* Frequency (Hz) (float value) */ + const LADSPA_Data fc = *(plugin_data->fc); + + /* Bandwidth (octaves) (float value) */ + const LADSPA_Data bw = *(plugin_data->bw); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + biquad * filter = plugin_data->filter; + float fs = plugin_data->fs; + +#line 34 "single_para_1203.xml" + unsigned long pos; + + eq_set_params(filter, fc, gain, bw, fs); + + for (pos = 0; pos < sample_count; pos++) { + buffer_write(output[pos], biquad_run(filter, input[pos])); + } +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + singleParaDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (singleParaDescriptor) { + singleParaDescriptor->UniqueID = 1203; + singleParaDescriptor->Label = "singlePara"; + singleParaDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + singleParaDescriptor->Name = + D_("Single band parametric"); + singleParaDescriptor->Maker = + "Steve Harris "; + singleParaDescriptor->Copyright = + "GPL"; + singleParaDescriptor->PortCount = 5; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(5, + sizeof(LADSPA_PortDescriptor)); + singleParaDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(5, + sizeof(LADSPA_PortRangeHint)); + singleParaDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(5, sizeof(char*)); + singleParaDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Gain (dB) */ + port_descriptors[SINGLEPARA_GAIN] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[SINGLEPARA_GAIN] = + D_("Gain (dB)"); + port_range_hints[SINGLEPARA_GAIN].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[SINGLEPARA_GAIN].LowerBound = -70; + port_range_hints[SINGLEPARA_GAIN].UpperBound = +30; + + /* Parameters for Frequency (Hz) */ + port_descriptors[SINGLEPARA_FC] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[SINGLEPARA_FC] = + D_("Frequency (Hz)"); + port_range_hints[SINGLEPARA_FC].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_SAMPLE_RATE | LADSPA_HINT_DEFAULT_440; + port_range_hints[SINGLEPARA_FC].LowerBound = 0; + port_range_hints[SINGLEPARA_FC].UpperBound = 0.4; + + /* Parameters for Bandwidth (octaves) */ + port_descriptors[SINGLEPARA_BW] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[SINGLEPARA_BW] = + D_("Bandwidth (octaves)"); + port_range_hints[SINGLEPARA_BW].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1; + port_range_hints[SINGLEPARA_BW].LowerBound = 0; + port_range_hints[SINGLEPARA_BW].UpperBound = 4; + + /* Parameters for Input */ + port_descriptors[SINGLEPARA_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[SINGLEPARA_INPUT] = + D_("Input"); + port_range_hints[SINGLEPARA_INPUT].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; + port_range_hints[SINGLEPARA_INPUT].LowerBound = -1.0; + port_range_hints[SINGLEPARA_INPUT].UpperBound = +1.0; + + /* Parameters for Output */ + port_descriptors[SINGLEPARA_OUTPUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[SINGLEPARA_OUTPUT] = + D_("Output"); + port_range_hints[SINGLEPARA_OUTPUT].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; + port_range_hints[SINGLEPARA_OUTPUT].LowerBound = -1.0; + port_range_hints[SINGLEPARA_OUTPUT].UpperBound = +1.0; + + singleParaDescriptor->activate = activateSinglePara; + singleParaDescriptor->cleanup = cleanupSinglePara; + singleParaDescriptor->connect_port = connectPortSinglePara; + singleParaDescriptor->deactivate = NULL; + singleParaDescriptor->instantiate = instantiateSinglePara; + singleParaDescriptor->run = runSinglePara; + singleParaDescriptor->run_adding = runAddingSinglePara; + singleParaDescriptor->set_run_adding_gain = setRunAddingGainSinglePara; + } +} + +void _fini() { + if (singleParaDescriptor) { + free((LADSPA_PortDescriptor *)singleParaDescriptor->PortDescriptors); + free((char **)singleParaDescriptor->PortNames); + free((LADSPA_PortRangeHint *)singleParaDescriptor->PortRangeHints); + free(singleParaDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/sinus_wavewrapper_1198.c b/plugins/LadspaEffect/swh/sinus_wavewrapper_1198.c new file mode 100644 index 000000000..8703d2ba1 --- /dev/null +++ b/plugins/LadspaEffect/swh/sinus_wavewrapper_1198.c @@ -0,0 +1,255 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + + +#define SINUSWAVEWRAPPER_WRAP 0 +#define SINUSWAVEWRAPPER_INPUT 1 +#define SINUSWAVEWRAPPER_OUTPUT 2 + +static LADSPA_Descriptor *sinusWavewrapperDescriptor = NULL; + +typedef struct { + LADSPA_Data *wrap; + LADSPA_Data *input; + LADSPA_Data *output; + LADSPA_Data run_adding_gain; +} SinusWavewrapper; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return sinusWavewrapperDescriptor; + default: + return NULL; + } +} + +static void cleanupSinusWavewrapper(LADSPA_Handle instance) { + free(instance); +} + +static void connectPortSinusWavewrapper( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + SinusWavewrapper *plugin; + + plugin = (SinusWavewrapper *)instance; + switch (port) { + case SINUSWAVEWRAPPER_WRAP: + plugin->wrap = data; + break; + case SINUSWAVEWRAPPER_INPUT: + plugin->input = data; + break; + case SINUSWAVEWRAPPER_OUTPUT: + plugin->output = data; + break; + } +} + +static LADSPA_Handle instantiateSinusWavewrapper( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + SinusWavewrapper *plugin_data = (SinusWavewrapper *)malloc(sizeof(SinusWavewrapper)); + plugin_data->run_adding_gain = 1.0f; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runSinusWavewrapper(LADSPA_Handle instance, unsigned long sample_count) { + SinusWavewrapper *plugin_data = (SinusWavewrapper *)instance; + + /* Wrap degree (float value) */ + const LADSPA_Data wrap = *(plugin_data->wrap); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + +#line 16 "sinus_wavewrapper_1198.xml" + float coef = wrap * M_PI; + unsigned long pos; + + if (coef < 0.05f) { + coef = 0.05f; + } + + for (pos = 0; pos < sample_count; pos++) { + buffer_write(output[pos], sin(input[pos] * coef)); + } +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainSinusWavewrapper(LADSPA_Handle instance, LADSPA_Data gain) { + ((SinusWavewrapper *)instance)->run_adding_gain = gain; +} + +static void runAddingSinusWavewrapper(LADSPA_Handle instance, unsigned long sample_count) { + SinusWavewrapper *plugin_data = (SinusWavewrapper *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Wrap degree (float value) */ + const LADSPA_Data wrap = *(plugin_data->wrap); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + +#line 16 "sinus_wavewrapper_1198.xml" + float coef = wrap * M_PI; + unsigned long pos; + + if (coef < 0.05f) { + coef = 0.05f; + } + + for (pos = 0; pos < sample_count; pos++) { + buffer_write(output[pos], sin(input[pos] * coef)); + } +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + sinusWavewrapperDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (sinusWavewrapperDescriptor) { + sinusWavewrapperDescriptor->UniqueID = 1198; + sinusWavewrapperDescriptor->Label = "sinusWavewrapper"; + sinusWavewrapperDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + sinusWavewrapperDescriptor->Name = + D_("Sinus wavewrapper"); + sinusWavewrapperDescriptor->Maker = + "Steve Harris "; + sinusWavewrapperDescriptor->Copyright = + "GPL"; + sinusWavewrapperDescriptor->PortCount = 3; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(3, + sizeof(LADSPA_PortDescriptor)); + sinusWavewrapperDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(3, + sizeof(LADSPA_PortRangeHint)); + sinusWavewrapperDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(3, sizeof(char*)); + sinusWavewrapperDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Wrap degree */ + port_descriptors[SINUSWAVEWRAPPER_WRAP] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[SINUSWAVEWRAPPER_WRAP] = + D_("Wrap degree"); + port_range_hints[SINUSWAVEWRAPPER_WRAP].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[SINUSWAVEWRAPPER_WRAP].LowerBound = 0; + port_range_hints[SINUSWAVEWRAPPER_WRAP].UpperBound = 10; + + /* Parameters for Input */ + port_descriptors[SINUSWAVEWRAPPER_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[SINUSWAVEWRAPPER_INPUT] = + D_("Input"); + port_range_hints[SINUSWAVEWRAPPER_INPUT].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; + port_range_hints[SINUSWAVEWRAPPER_INPUT].LowerBound = -1; + port_range_hints[SINUSWAVEWRAPPER_INPUT].UpperBound = +1; + + /* Parameters for Output */ + port_descriptors[SINUSWAVEWRAPPER_OUTPUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[SINUSWAVEWRAPPER_OUTPUT] = + D_("Output"); + port_range_hints[SINUSWAVEWRAPPER_OUTPUT].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; + port_range_hints[SINUSWAVEWRAPPER_OUTPUT].LowerBound = -1; + port_range_hints[SINUSWAVEWRAPPER_OUTPUT].UpperBound = +1; + + sinusWavewrapperDescriptor->activate = NULL; + sinusWavewrapperDescriptor->cleanup = cleanupSinusWavewrapper; + sinusWavewrapperDescriptor->connect_port = connectPortSinusWavewrapper; + sinusWavewrapperDescriptor->deactivate = NULL; + sinusWavewrapperDescriptor->instantiate = instantiateSinusWavewrapper; + sinusWavewrapperDescriptor->run = runSinusWavewrapper; + sinusWavewrapperDescriptor->run_adding = runAddingSinusWavewrapper; + sinusWavewrapperDescriptor->set_run_adding_gain = setRunAddingGainSinusWavewrapper; + } +} + +void _fini() { + if (sinusWavewrapperDescriptor) { + free((LADSPA_PortDescriptor *)sinusWavewrapperDescriptor->PortDescriptors); + free((char **)sinusWavewrapperDescriptor->PortNames); + free((LADSPA_PortRangeHint *)sinusWavewrapperDescriptor->PortRangeHints); + free(sinusWavewrapperDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/smooth_decimate_1414.c b/plugins/LadspaEffect/swh/smooth_decimate_1414.c new file mode 100644 index 000000000..a6f13853f --- /dev/null +++ b/plugins/LadspaEffect/swh/smooth_decimate_1414.c @@ -0,0 +1,340 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + +#line 10 "smooth_decimate_1414.xml" + +#include "ladspa-util.h" + +#define SMOOTHDECIMATE_RATE 0 +#define SMOOTHDECIMATE_SMOOTH 1 +#define SMOOTHDECIMATE_INPUT 2 +#define SMOOTHDECIMATE_OUTPUT 3 + +static LADSPA_Descriptor *smoothDecimateDescriptor = NULL; + +typedef struct { + LADSPA_Data *rate; + LADSPA_Data *smooth; + LADSPA_Data *input; + LADSPA_Data *output; + float accum; + float * buffer; + int buffer_pos; + float fs; + LADSPA_Data run_adding_gain; +} SmoothDecimate; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return smoothDecimateDescriptor; + default: + return NULL; + } +} + +static void activateSmoothDecimate(LADSPA_Handle instance) { + SmoothDecimate *plugin_data = (SmoothDecimate *)instance; + float accum = plugin_data->accum; + float *buffer = plugin_data->buffer; + int buffer_pos = plugin_data->buffer_pos; + float fs = plugin_data->fs; +#line 26 "smooth_decimate_1414.xml" + buffer_pos = 0; + accum = 0.0f; + plugin_data->accum = accum; + plugin_data->buffer = buffer; + plugin_data->buffer_pos = buffer_pos; + plugin_data->fs = fs; + +} + +static void cleanupSmoothDecimate(LADSPA_Handle instance) { +#line 55 "smooth_decimate_1414.xml" + SmoothDecimate *plugin_data = (SmoothDecimate *)instance; + free(plugin_data->buffer); + free(instance); +} + +static void connectPortSmoothDecimate( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + SmoothDecimate *plugin; + + plugin = (SmoothDecimate *)instance; + switch (port) { + case SMOOTHDECIMATE_RATE: + plugin->rate = data; + break; + case SMOOTHDECIMATE_SMOOTH: + plugin->smooth = data; + break; + case SMOOTHDECIMATE_INPUT: + plugin->input = data; + break; + case SMOOTHDECIMATE_OUTPUT: + plugin->output = data; + break; + } +} + +static LADSPA_Handle instantiateSmoothDecimate( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + SmoothDecimate *plugin_data = (SmoothDecimate *)malloc(sizeof(SmoothDecimate)); + float accum; + float *buffer = NULL; + int buffer_pos; + float fs; + +#line 19 "smooth_decimate_1414.xml" + buffer = calloc(8, sizeof(float)); + buffer_pos = 0; + accum = 0.0f; + fs = (float)s_rate; + + plugin_data->accum = accum; + plugin_data->buffer = buffer; + plugin_data->buffer_pos = buffer_pos; + plugin_data->fs = fs; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runSmoothDecimate(LADSPA_Handle instance, unsigned long sample_count) { + SmoothDecimate *plugin_data = (SmoothDecimate *)instance; + + /* Resample rate (float value) */ + const LADSPA_Data rate = *(plugin_data->rate); + + /* Smoothing (float value) */ + const LADSPA_Data smooth = *(plugin_data->smooth); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + float accum = plugin_data->accum; + float * buffer = plugin_data->buffer; + int buffer_pos = plugin_data->buffer_pos; + float fs = plugin_data->fs; + +#line 31 "smooth_decimate_1414.xml" + unsigned long pos; + float smoothed; + float inc = (rate / fs); + inc = f_clamp(inc, 0.0f, 1.0f); + + for (pos = 0; pos < sample_count; pos++) { + accum += inc; + if (accum >= 1.0f) { + accum -= 1.0f; + buffer_pos = (buffer_pos + 1) & 7; + buffer[buffer_pos] = input[pos]; + } + smoothed = cube_interp(accum, buffer[(buffer_pos - 3) & 7], + buffer[(buffer_pos - 2) & 7], + buffer[(buffer_pos - 1) & 7], + buffer[buffer_pos]); + buffer_write(output[pos], LIN_INTERP(smooth, buffer[(buffer_pos - 3) & 7], smoothed)); + } + + plugin_data->accum = accum; + plugin_data->buffer_pos = buffer_pos; +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainSmoothDecimate(LADSPA_Handle instance, LADSPA_Data gain) { + ((SmoothDecimate *)instance)->run_adding_gain = gain; +} + +static void runAddingSmoothDecimate(LADSPA_Handle instance, unsigned long sample_count) { + SmoothDecimate *plugin_data = (SmoothDecimate *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Resample rate (float value) */ + const LADSPA_Data rate = *(plugin_data->rate); + + /* Smoothing (float value) */ + const LADSPA_Data smooth = *(plugin_data->smooth); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + float accum = plugin_data->accum; + float * buffer = plugin_data->buffer; + int buffer_pos = plugin_data->buffer_pos; + float fs = plugin_data->fs; + +#line 31 "smooth_decimate_1414.xml" + unsigned long pos; + float smoothed; + float inc = (rate / fs); + inc = f_clamp(inc, 0.0f, 1.0f); + + for (pos = 0; pos < sample_count; pos++) { + accum += inc; + if (accum >= 1.0f) { + accum -= 1.0f; + buffer_pos = (buffer_pos + 1) & 7; + buffer[buffer_pos] = input[pos]; + } + smoothed = cube_interp(accum, buffer[(buffer_pos - 3) & 7], + buffer[(buffer_pos - 2) & 7], + buffer[(buffer_pos - 1) & 7], + buffer[buffer_pos]); + buffer_write(output[pos], LIN_INTERP(smooth, buffer[(buffer_pos - 3) & 7], smoothed)); + } + + plugin_data->accum = accum; + plugin_data->buffer_pos = buffer_pos; +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + smoothDecimateDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (smoothDecimateDescriptor) { + smoothDecimateDescriptor->UniqueID = 1414; + smoothDecimateDescriptor->Label = "smoothDecimate"; + smoothDecimateDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + smoothDecimateDescriptor->Name = + D_("Smooth Decimator"); + smoothDecimateDescriptor->Maker = + "Steve Harris "; + smoothDecimateDescriptor->Copyright = + "GPL"; + smoothDecimateDescriptor->PortCount = 4; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(4, + sizeof(LADSPA_PortDescriptor)); + smoothDecimateDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(4, + sizeof(LADSPA_PortRangeHint)); + smoothDecimateDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(4, sizeof(char*)); + smoothDecimateDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Resample rate */ + port_descriptors[SMOOTHDECIMATE_RATE] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[SMOOTHDECIMATE_RATE] = + D_("Resample rate"); + port_range_hints[SMOOTHDECIMATE_RATE].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_SAMPLE_RATE | LADSPA_HINT_DEFAULT_MAXIMUM; + port_range_hints[SMOOTHDECIMATE_RATE].LowerBound = 0; + port_range_hints[SMOOTHDECIMATE_RATE].UpperBound = 1; + + /* Parameters for Smoothing */ + port_descriptors[SMOOTHDECIMATE_SMOOTH] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[SMOOTHDECIMATE_SMOOTH] = + D_("Smoothing"); + port_range_hints[SMOOTHDECIMATE_SMOOTH].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MAXIMUM; + port_range_hints[SMOOTHDECIMATE_SMOOTH].LowerBound = 0; + port_range_hints[SMOOTHDECIMATE_SMOOTH].UpperBound = 1; + + /* Parameters for Input */ + port_descriptors[SMOOTHDECIMATE_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[SMOOTHDECIMATE_INPUT] = + D_("Input"); + port_range_hints[SMOOTHDECIMATE_INPUT].HintDescriptor = 0; + + /* Parameters for Output */ + port_descriptors[SMOOTHDECIMATE_OUTPUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[SMOOTHDECIMATE_OUTPUT] = + D_("Output"); + port_range_hints[SMOOTHDECIMATE_OUTPUT].HintDescriptor = 0; + + smoothDecimateDescriptor->activate = activateSmoothDecimate; + smoothDecimateDescriptor->cleanup = cleanupSmoothDecimate; + smoothDecimateDescriptor->connect_port = connectPortSmoothDecimate; + smoothDecimateDescriptor->deactivate = NULL; + smoothDecimateDescriptor->instantiate = instantiateSmoothDecimate; + smoothDecimateDescriptor->run = runSmoothDecimate; + smoothDecimateDescriptor->run_adding = runAddingSmoothDecimate; + smoothDecimateDescriptor->set_run_adding_gain = setRunAddingGainSmoothDecimate; + } +} + +void _fini() { + if (smoothDecimateDescriptor) { + free((LADSPA_PortDescriptor *)smoothDecimateDescriptor->PortDescriptors); + free((char **)smoothDecimateDescriptor->PortNames); + free((LADSPA_PortRangeHint *)smoothDecimateDescriptor->PortRangeHints); + free(smoothDecimateDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/split_1406.c b/plugins/LadspaEffect/swh/split_1406.c new file mode 100644 index 000000000..80bc268cd --- /dev/null +++ b/plugins/LadspaEffect/swh/split_1406.c @@ -0,0 +1,251 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + + +#define SPLIT_INPUT 0 +#define SPLIT_OUT2 1 +#define SPLIT_OUT1 2 + +static LADSPA_Descriptor *splitDescriptor = NULL; + +typedef struct { + LADSPA_Data *input; + LADSPA_Data *out2; + LADSPA_Data *out1; + LADSPA_Data run_adding_gain; +} Split; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return splitDescriptor; + default: + return NULL; + } +} + +static void cleanupSplit(LADSPA_Handle instance) { + free(instance); +} + +static void connectPortSplit( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + Split *plugin; + + plugin = (Split *)instance; + switch (port) { + case SPLIT_INPUT: + plugin->input = data; + break; + case SPLIT_OUT2: + plugin->out2 = data; + break; + case SPLIT_OUT1: + plugin->out1 = data; + break; + } +} + +static LADSPA_Handle instantiateSplit( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + Split *plugin_data = (Split *)malloc(sizeof(Split)); + plugin_data->run_adding_gain = 1.0f; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runSplit(LADSPA_Handle instance, unsigned long sample_count) { + Split *plugin_data = (Split *)instance; + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output 1 (array of floats of length sample_count) */ + LADSPA_Data * const out2 = plugin_data->out2; + + /* Output 2 (array of floats of length sample_count) */ + LADSPA_Data * const out1 = plugin_data->out1; + +#line 16 "split_1406.xml" + unsigned long pos; + + for (pos = 0; pos < sample_count; pos++) { + const LADSPA_Data in = input[pos]; + + buffer_write(out1[pos], in); + buffer_write(out2[pos], in); + } +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainSplit(LADSPA_Handle instance, LADSPA_Data gain) { + ((Split *)instance)->run_adding_gain = gain; +} + +static void runAddingSplit(LADSPA_Handle instance, unsigned long sample_count) { + Split *plugin_data = (Split *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output 1 (array of floats of length sample_count) */ + LADSPA_Data * const out2 = plugin_data->out2; + + /* Output 2 (array of floats of length sample_count) */ + LADSPA_Data * const out1 = plugin_data->out1; + +#line 16 "split_1406.xml" + unsigned long pos; + + for (pos = 0; pos < sample_count; pos++) { + const LADSPA_Data in = input[pos]; + + buffer_write(out1[pos], in); + buffer_write(out2[pos], in); + } +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + splitDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (splitDescriptor) { + splitDescriptor->UniqueID = 1406; + splitDescriptor->Label = "split"; + splitDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + splitDescriptor->Name = + D_("Mono to Stereo splitter"); + splitDescriptor->Maker = + "Frank Neumann "; + splitDescriptor->Copyright = + "GPL"; + splitDescriptor->PortCount = 3; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(3, + sizeof(LADSPA_PortDescriptor)); + splitDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(3, + sizeof(LADSPA_PortRangeHint)); + splitDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(3, sizeof(char*)); + splitDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Input */ + port_descriptors[SPLIT_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[SPLIT_INPUT] = + D_("Input"); + port_range_hints[SPLIT_INPUT].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; + port_range_hints[SPLIT_INPUT].LowerBound = -1; + port_range_hints[SPLIT_INPUT].UpperBound = +1; + + /* Parameters for Output 1 */ + port_descriptors[SPLIT_OUT2] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[SPLIT_OUT2] = + D_("Output 1"); + port_range_hints[SPLIT_OUT2].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; + port_range_hints[SPLIT_OUT2].LowerBound = -1; + port_range_hints[SPLIT_OUT2].UpperBound = +1; + + /* Parameters for Output 2 */ + port_descriptors[SPLIT_OUT1] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[SPLIT_OUT1] = + D_("Output 2"); + port_range_hints[SPLIT_OUT1].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; + port_range_hints[SPLIT_OUT1].LowerBound = -1; + port_range_hints[SPLIT_OUT1].UpperBound = +1; + + splitDescriptor->activate = NULL; + splitDescriptor->cleanup = cleanupSplit; + splitDescriptor->connect_port = connectPortSplit; + splitDescriptor->deactivate = NULL; + splitDescriptor->instantiate = instantiateSplit; + splitDescriptor->run = runSplit; + splitDescriptor->run_adding = runAddingSplit; + splitDescriptor->set_run_adding_gain = setRunAddingGainSplit; + } +} + +void _fini() { + if (splitDescriptor) { + free((LADSPA_PortDescriptor *)splitDescriptor->PortDescriptors); + free((char **)splitDescriptor->PortNames); + free((LADSPA_PortRangeHint *)splitDescriptor->PortRangeHints); + free(splitDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/step_muxer_1212.c b/plugins/LadspaEffect/swh/step_muxer_1212.c new file mode 100644 index 000000000..da231a58a --- /dev/null +++ b/plugins/LadspaEffect/swh/step_muxer_1212.c @@ -0,0 +1,543 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + +#line 10 "step_muxer_1212.xml" + +#define FADE_IN 1 +#define STABLE 2 +#define FADE_OUT 3 + +#define STEPMUXER_XFADET 0 +#define STEPMUXER_CLOCK 1 +#define STEPMUXER_INPUT0 2 +#define STEPMUXER_INPUT1 3 +#define STEPMUXER_INPUT2 4 +#define STEPMUXER_INPUT3 5 +#define STEPMUXER_INPUT4 6 +#define STEPMUXER_INPUT5 7 +#define STEPMUXER_INPUT6 8 +#define STEPMUXER_INPUT7 9 +#define STEPMUXER_OUTPUT 10 + +static LADSPA_Descriptor *stepMuxerDescriptor = NULL; + +typedef struct { + LADSPA_Data *xfadet; + LADSPA_Data *clock; + LADSPA_Data *input0; + LADSPA_Data *input1; + LADSPA_Data *input2; + LADSPA_Data *input3; + LADSPA_Data *input4; + LADSPA_Data *input5; + LADSPA_Data *input6; + LADSPA_Data *input7; + LADSPA_Data *output; + float * ch_gain; + int * ch_state; + int current_ch; + LADSPA_Data last_clock; + float sample_rate; + LADSPA_Data run_adding_gain; +} StepMuxer; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return stepMuxerDescriptor; + default: + return NULL; + } +} + +static void activateStepMuxer(LADSPA_Handle instance) { + StepMuxer *plugin_data = (StepMuxer *)instance; + float *ch_gain = plugin_data->ch_gain; + int *ch_state = plugin_data->ch_state; + int current_ch = plugin_data->current_ch; + LADSPA_Data last_clock = plugin_data->last_clock; + float sample_rate = plugin_data->sample_rate; +#line 31 "step_muxer_1212.xml" + int i; + + ch_state[0] = STABLE; + ch_gain[0] = 1.0f; + for (i = 1; i < 8; i++) { + ch_state[i] = STABLE; + ch_gain[i] = 0.0f; + } + current_ch = 0; + last_clock = 0.0f; + sample_rate = sample_rate; + plugin_data->ch_gain = ch_gain; + plugin_data->ch_state = ch_state; + plugin_data->current_ch = current_ch; + plugin_data->last_clock = last_clock; + plugin_data->sample_rate = sample_rate; + +} + +static void cleanupStepMuxer(LADSPA_Handle instance) { +#line 45 "step_muxer_1212.xml" + StepMuxer *plugin_data = (StepMuxer *)instance; + free(plugin_data->ch_state); + free(plugin_data->ch_gain); + free(instance); +} + +static void connectPortStepMuxer( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + StepMuxer *plugin; + + plugin = (StepMuxer *)instance; + switch (port) { + case STEPMUXER_XFADET: + plugin->xfadet = data; + break; + case STEPMUXER_CLOCK: + plugin->clock = data; + break; + case STEPMUXER_INPUT0: + plugin->input0 = data; + break; + case STEPMUXER_INPUT1: + plugin->input1 = data; + break; + case STEPMUXER_INPUT2: + plugin->input2 = data; + break; + case STEPMUXER_INPUT3: + plugin->input3 = data; + break; + case STEPMUXER_INPUT4: + plugin->input4 = data; + break; + case STEPMUXER_INPUT5: + plugin->input5 = data; + break; + case STEPMUXER_INPUT6: + plugin->input6 = data; + break; + case STEPMUXER_INPUT7: + plugin->input7 = data; + break; + case STEPMUXER_OUTPUT: + plugin->output = data; + break; + } +} + +static LADSPA_Handle instantiateStepMuxer( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + StepMuxer *plugin_data = (StepMuxer *)malloc(sizeof(StepMuxer)); + float *ch_gain = NULL; + int *ch_state = NULL; + int current_ch; + LADSPA_Data last_clock; + float sample_rate; + +#line 23 "step_muxer_1212.xml" + sample_rate = s_rate; + ch_state = malloc(sizeof(int) * 8); + ch_gain = malloc(sizeof(float) * 8); + current_ch = 0; + last_clock = 0.0f; + + plugin_data->ch_gain = ch_gain; + plugin_data->ch_state = ch_state; + plugin_data->current_ch = current_ch; + plugin_data->last_clock = last_clock; + plugin_data->sample_rate = sample_rate; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runStepMuxer(LADSPA_Handle instance, unsigned long sample_count) { + StepMuxer *plugin_data = (StepMuxer *)instance; + + /* Crossfade time (in ms) (float value) */ + const LADSPA_Data xfadet = *(plugin_data->xfadet); + + /* Clock (array of floats of length sample_count) */ + const LADSPA_Data * const clock = plugin_data->clock; + + /* Input 1 (array of floats of length sample_count) */ + const LADSPA_Data * const input0 = plugin_data->input0; + + /* Input 2 (array of floats of length sample_count) */ + const LADSPA_Data * const input1 = plugin_data->input1; + + /* Input 3 (array of floats of length sample_count) */ + const LADSPA_Data * const input2 = plugin_data->input2; + + /* Input 4 (array of floats of length sample_count) */ + const LADSPA_Data * const input3 = plugin_data->input3; + + /* Input 5 (array of floats of length sample_count) */ + const LADSPA_Data * const input4 = plugin_data->input4; + + /* Input 6 (array of floats of length sample_count) */ + const LADSPA_Data * const input5 = plugin_data->input5; + + /* Input 7 (array of floats of length sample_count) */ + const LADSPA_Data * const input6 = plugin_data->input6; + + /* Input 8 (array of floats of length sample_count) */ + const LADSPA_Data * const input7 = plugin_data->input7; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + float * ch_gain = plugin_data->ch_gain; + int * ch_state = plugin_data->ch_state; + int current_ch = plugin_data->current_ch; + LADSPA_Data last_clock = plugin_data->last_clock; + float sample_rate = plugin_data->sample_rate; + +#line 50 "step_muxer_1212.xml" + unsigned long pos; + float fade_inc = 1.0f / (xfadet * sample_rate * 1000.0f); + float accum; + int ch; + + for (pos = 0; pos < sample_count; pos++) { + + // Calculate output value for this sample + accum = 0.0f; + accum += input0[pos] * ch_gain[0]; + accum += input1[pos] * ch_gain[1]; + accum += input2[pos] * ch_gain[2]; + accum += input3[pos] * ch_gain[3]; + accum += input4[pos] * ch_gain[4]; + accum += input5[pos] * ch_gain[5]; + accum += input6[pos] * ch_gain[6]; + accum += input7[pos] * ch_gain[7]; + buffer_write(output[pos], accum); + + // Run crossfades + for (ch = 0; ch < 8; ch++) { + + // Channel is still being faded in + if (ch_state[ch] == FADE_IN) { + ch_gain[ch] += fade_inc; + if (ch_gain[ch] >= 1.0f) { + ch_gain[ch] = 1.0f; + ch_state[ch] = STABLE; + } + + // Channel is still being faded out + } else if (ch_state[ch] == FADE_OUT) { + ch_gain[ch] -= fade_inc; + if (ch_gain[ch] <= 0.0f) { + ch_gain[ch] = 0.0f; + ch_state[ch] = STABLE; + } + } + } + + // Check for clock signal + if (last_clock <= 0.0f && clock[pos] > 0.0f) { + ch_state[current_ch] = FADE_OUT; + current_ch = (current_ch + 1) % 8; + ch_state[current_ch] = FADE_IN; + } + } + + // Save state data + plugin_data->current_ch = current_ch; + plugin_data->last_clock = last_clock; +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainStepMuxer(LADSPA_Handle instance, LADSPA_Data gain) { + ((StepMuxer *)instance)->run_adding_gain = gain; +} + +static void runAddingStepMuxer(LADSPA_Handle instance, unsigned long sample_count) { + StepMuxer *plugin_data = (StepMuxer *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Crossfade time (in ms) (float value) */ + const LADSPA_Data xfadet = *(plugin_data->xfadet); + + /* Clock (array of floats of length sample_count) */ + const LADSPA_Data * const clock = plugin_data->clock; + + /* Input 1 (array of floats of length sample_count) */ + const LADSPA_Data * const input0 = plugin_data->input0; + + /* Input 2 (array of floats of length sample_count) */ + const LADSPA_Data * const input1 = plugin_data->input1; + + /* Input 3 (array of floats of length sample_count) */ + const LADSPA_Data * const input2 = plugin_data->input2; + + /* Input 4 (array of floats of length sample_count) */ + const LADSPA_Data * const input3 = plugin_data->input3; + + /* Input 5 (array of floats of length sample_count) */ + const LADSPA_Data * const input4 = plugin_data->input4; + + /* Input 6 (array of floats of length sample_count) */ + const LADSPA_Data * const input5 = plugin_data->input5; + + /* Input 7 (array of floats of length sample_count) */ + const LADSPA_Data * const input6 = plugin_data->input6; + + /* Input 8 (array of floats of length sample_count) */ + const LADSPA_Data * const input7 = plugin_data->input7; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + float * ch_gain = plugin_data->ch_gain; + int * ch_state = plugin_data->ch_state; + int current_ch = plugin_data->current_ch; + LADSPA_Data last_clock = plugin_data->last_clock; + float sample_rate = plugin_data->sample_rate; + +#line 50 "step_muxer_1212.xml" + unsigned long pos; + float fade_inc = 1.0f / (xfadet * sample_rate * 1000.0f); + float accum; + int ch; + + for (pos = 0; pos < sample_count; pos++) { + + // Calculate output value for this sample + accum = 0.0f; + accum += input0[pos] * ch_gain[0]; + accum += input1[pos] * ch_gain[1]; + accum += input2[pos] * ch_gain[2]; + accum += input3[pos] * ch_gain[3]; + accum += input4[pos] * ch_gain[4]; + accum += input5[pos] * ch_gain[5]; + accum += input6[pos] * ch_gain[6]; + accum += input7[pos] * ch_gain[7]; + buffer_write(output[pos], accum); + + // Run crossfades + for (ch = 0; ch < 8; ch++) { + + // Channel is still being faded in + if (ch_state[ch] == FADE_IN) { + ch_gain[ch] += fade_inc; + if (ch_gain[ch] >= 1.0f) { + ch_gain[ch] = 1.0f; + ch_state[ch] = STABLE; + } + + // Channel is still being faded out + } else if (ch_state[ch] == FADE_OUT) { + ch_gain[ch] -= fade_inc; + if (ch_gain[ch] <= 0.0f) { + ch_gain[ch] = 0.0f; + ch_state[ch] = STABLE; + } + } + } + + // Check for clock signal + if (last_clock <= 0.0f && clock[pos] > 0.0f) { + ch_state[current_ch] = FADE_OUT; + current_ch = (current_ch + 1) % 8; + ch_state[current_ch] = FADE_IN; + } + } + + // Save state data + plugin_data->current_ch = current_ch; + plugin_data->last_clock = last_clock; +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + stepMuxerDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (stepMuxerDescriptor) { + stepMuxerDescriptor->UniqueID = 1212; + stepMuxerDescriptor->Label = "stepMuxer"; + stepMuxerDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + stepMuxerDescriptor->Name = + D_("Step Demuxer"); + stepMuxerDescriptor->Maker = + "Steve Harris "; + stepMuxerDescriptor->Copyright = + "GPL"; + stepMuxerDescriptor->PortCount = 11; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(11, + sizeof(LADSPA_PortDescriptor)); + stepMuxerDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(11, + sizeof(LADSPA_PortRangeHint)); + stepMuxerDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(11, sizeof(char*)); + stepMuxerDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Crossfade time (in ms) */ + port_descriptors[STEPMUXER_XFADET] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[STEPMUXER_XFADET] = + D_("Crossfade time (in ms)"); + port_range_hints[STEPMUXER_XFADET].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; + port_range_hints[STEPMUXER_XFADET].LowerBound = 0; + port_range_hints[STEPMUXER_XFADET].UpperBound = 100; + + /* Parameters for Clock */ + port_descriptors[STEPMUXER_CLOCK] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[STEPMUXER_CLOCK] = + D_("Clock"); + port_range_hints[STEPMUXER_CLOCK].HintDescriptor = 0; + + /* Parameters for Input 1 */ + port_descriptors[STEPMUXER_INPUT0] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[STEPMUXER_INPUT0] = + D_("Input 1"); + port_range_hints[STEPMUXER_INPUT0].HintDescriptor = 0; + + /* Parameters for Input 2 */ + port_descriptors[STEPMUXER_INPUT1] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[STEPMUXER_INPUT1] = + D_("Input 2"); + port_range_hints[STEPMUXER_INPUT1].HintDescriptor = 0; + + /* Parameters for Input 3 */ + port_descriptors[STEPMUXER_INPUT2] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[STEPMUXER_INPUT2] = + D_("Input 3"); + port_range_hints[STEPMUXER_INPUT2].HintDescriptor = 0; + + /* Parameters for Input 4 */ + port_descriptors[STEPMUXER_INPUT3] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[STEPMUXER_INPUT3] = + D_("Input 4"); + port_range_hints[STEPMUXER_INPUT3].HintDescriptor = 0; + + /* Parameters for Input 5 */ + port_descriptors[STEPMUXER_INPUT4] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[STEPMUXER_INPUT4] = + D_("Input 5"); + port_range_hints[STEPMUXER_INPUT4].HintDescriptor = 0; + + /* Parameters for Input 6 */ + port_descriptors[STEPMUXER_INPUT5] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[STEPMUXER_INPUT5] = + D_("Input 6"); + port_range_hints[STEPMUXER_INPUT5].HintDescriptor = 0; + + /* Parameters for Input 7 */ + port_descriptors[STEPMUXER_INPUT6] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[STEPMUXER_INPUT6] = + D_("Input 7"); + port_range_hints[STEPMUXER_INPUT6].HintDescriptor = 0; + + /* Parameters for Input 8 */ + port_descriptors[STEPMUXER_INPUT7] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[STEPMUXER_INPUT7] = + D_("Input 8"); + port_range_hints[STEPMUXER_INPUT7].HintDescriptor = 0; + + /* Parameters for Output */ + port_descriptors[STEPMUXER_OUTPUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[STEPMUXER_OUTPUT] = + D_("Output"); + port_range_hints[STEPMUXER_OUTPUT].HintDescriptor = 0; + + stepMuxerDescriptor->activate = activateStepMuxer; + stepMuxerDescriptor->cleanup = cleanupStepMuxer; + stepMuxerDescriptor->connect_port = connectPortStepMuxer; + stepMuxerDescriptor->deactivate = NULL; + stepMuxerDescriptor->instantiate = instantiateStepMuxer; + stepMuxerDescriptor->run = runStepMuxer; + stepMuxerDescriptor->run_adding = runAddingStepMuxer; + stepMuxerDescriptor->set_run_adding_gain = setRunAddingGainStepMuxer; + } +} + +void _fini() { + if (stepMuxerDescriptor) { + free((LADSPA_PortDescriptor *)stepMuxerDescriptor->PortDescriptors); + free((char **)stepMuxerDescriptor->PortNames); + free((LADSPA_PortRangeHint *)stepMuxerDescriptor->PortRangeHints); + free(stepMuxerDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/surround_encoder_1401.c b/plugins/LadspaEffect/swh/surround_encoder_1401.c new file mode 100644 index 000000000..c11188657 --- /dev/null +++ b/plugins/LadspaEffect/swh/surround_encoder_1401.c @@ -0,0 +1,425 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + +#line 10 "surround_encoder_1401.xml" + +#include "ladspa-util.h" + +#define D_SIZE 256 +#define NZEROS 200 + +/* The non-zero taps of the Hilbert transformer */ +static float xcoeffs[] = { + +0.0008103736f, +0.0008457886f, +0.0009017196f, +0.0009793364f, + +0.0010798341f, +0.0012044365f, +0.0013544008f, +0.0015310235f, + +0.0017356466f, +0.0019696659f, +0.0022345404f, +0.0025318040f, + +0.0028630784f, +0.0032300896f, +0.0036346867f, +0.0040788644f, + +0.0045647903f, +0.0050948365f, +0.0056716186f, +0.0062980419f, + +0.0069773575f, +0.0077132300f, +0.0085098208f, +0.0093718901f, + +0.0103049226f, +0.0113152847f, +0.0124104218f, +0.0135991079f, + +0.0148917649f, +0.0163008758f, +0.0178415242f, +0.0195321089f, + +0.0213953037f, +0.0234593652f, +0.0257599469f, +0.0283426636f, + +0.0312667947f, +0.0346107648f, +0.0384804823f, +0.0430224431f, + +0.0484451086f, +0.0550553725f, +0.0633242001f, +0.0740128560f, + +0.0884368322f, +0.1090816773f, +0.1412745301f, +0.1988673273f, + +0.3326528346f, +0.9997730178f, -0.9997730178f, -0.3326528346f, + -0.1988673273f, -0.1412745301f, -0.1090816773f, -0.0884368322f, + -0.0740128560f, -0.0633242001f, -0.0550553725f, -0.0484451086f, + -0.0430224431f, -0.0384804823f, -0.0346107648f, -0.0312667947f, + -0.0283426636f, -0.0257599469f, -0.0234593652f, -0.0213953037f, + -0.0195321089f, -0.0178415242f, -0.0163008758f, -0.0148917649f, + -0.0135991079f, -0.0124104218f, -0.0113152847f, -0.0103049226f, + -0.0093718901f, -0.0085098208f, -0.0077132300f, -0.0069773575f, + -0.0062980419f, -0.0056716186f, -0.0050948365f, -0.0045647903f, + -0.0040788644f, -0.0036346867f, -0.0032300896f, -0.0028630784f, + -0.0025318040f, -0.0022345404f, -0.0019696659f, -0.0017356466f, + -0.0015310235f, -0.0013544008f, -0.0012044365f, -0.0010798341f, + -0.0009793364f, -0.0009017196f, -0.0008457886f, -0.0008103736f, +}; + +#define SURROUNDENCODER_L 0 +#define SURROUNDENCODER_R 1 +#define SURROUNDENCODER_C 2 +#define SURROUNDENCODER_S 3 +#define SURROUNDENCODER_LT 4 +#define SURROUNDENCODER_RT 5 + +static LADSPA_Descriptor *surroundEncoderDescriptor = NULL; + +typedef struct { + LADSPA_Data *l; + LADSPA_Data *r; + LADSPA_Data *c; + LADSPA_Data *s; + LADSPA_Data *lt; + LADSPA_Data *rt; + LADSPA_Data *buffer; + unsigned int buffer_pos; + unsigned int buffer_size; + LADSPA_Data *delay; + unsigned int dptr; + LADSPA_Data run_adding_gain; +} SurroundEncoder; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return surroundEncoderDescriptor; + default: + return NULL; + } +} + +static void activateSurroundEncoder(LADSPA_Handle instance) { + SurroundEncoder *plugin_data = (SurroundEncoder *)instance; + LADSPA_Data *buffer = plugin_data->buffer; + unsigned int buffer_pos = plugin_data->buffer_pos; + unsigned int buffer_size = plugin_data->buffer_size; + LADSPA_Data *delay = plugin_data->delay; + unsigned int dptr = plugin_data->dptr; +#line 75 "surround_encoder_1401.xml" + memset(buffer, 0, buffer_size * sizeof(LADSPA_Data)); + plugin_data->buffer = buffer; + plugin_data->buffer_pos = buffer_pos; + plugin_data->buffer_size = buffer_size; + plugin_data->delay = delay; + plugin_data->dptr = dptr; + +} + +static void cleanupSurroundEncoder(LADSPA_Handle instance) { +#line 79 "surround_encoder_1401.xml" + SurroundEncoder *plugin_data = (SurroundEncoder *)instance; + free(plugin_data->buffer); + + free(plugin_data->delay); + free(instance); +} + +static void connectPortSurroundEncoder( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + SurroundEncoder *plugin; + + plugin = (SurroundEncoder *)instance; + switch (port) { + case SURROUNDENCODER_L: + plugin->l = data; + break; + case SURROUNDENCODER_R: + plugin->r = data; + break; + case SURROUNDENCODER_C: + plugin->c = data; + break; + case SURROUNDENCODER_S: + plugin->s = data; + break; + case SURROUNDENCODER_LT: + plugin->lt = data; + break; + case SURROUNDENCODER_RT: + plugin->rt = data; + break; + } +} + +static LADSPA_Handle instantiateSurroundEncoder( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + SurroundEncoder *plugin_data = (SurroundEncoder *)malloc(sizeof(SurroundEncoder)); + LADSPA_Data *buffer = NULL; + unsigned int buffer_pos; + unsigned int buffer_size; + LADSPA_Data *delay = NULL; + unsigned int dptr; + +#line 65 "surround_encoder_1401.xml" + buffer_size = (int)(0.0072f * s_rate); + buffer_pos = 0; + buffer = calloc(buffer_size, sizeof(LADSPA_Data)); + + delay = calloc(D_SIZE, sizeof(LADSPA_Data)); + + dptr = 0; + + plugin_data->buffer = buffer; + plugin_data->buffer_pos = buffer_pos; + plugin_data->buffer_size = buffer_size; + plugin_data->delay = delay; + plugin_data->dptr = dptr; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runSurroundEncoder(LADSPA_Handle instance, unsigned long sample_count) { + SurroundEncoder *plugin_data = (SurroundEncoder *)instance; + + /* L (array of floats of length sample_count) */ + const LADSPA_Data * const l = plugin_data->l; + + /* R (array of floats of length sample_count) */ + const LADSPA_Data * const r = plugin_data->r; + + /* C (array of floats of length sample_count) */ + const LADSPA_Data * const c = plugin_data->c; + + /* S (array of floats of length sample_count) */ + const LADSPA_Data * const s = plugin_data->s; + + /* Lt (array of floats of length sample_count) */ + LADSPA_Data * const lt = plugin_data->lt; + + /* Rt (array of floats of length sample_count) */ + LADSPA_Data * const rt = plugin_data->rt; + LADSPA_Data * buffer = plugin_data->buffer; + unsigned int buffer_pos = plugin_data->buffer_pos; + unsigned int buffer_size = plugin_data->buffer_size; + LADSPA_Data * delay = plugin_data->delay; + unsigned int dptr = plugin_data->dptr; + +#line 85 "surround_encoder_1401.xml" + unsigned long pos; + LADSPA_Data s_delayed; + unsigned int i; + float hilb; + + for (pos = 0; pos < sample_count; pos++) { + delay[dptr] = s[pos]; + hilb = 0.0f; + for (i = 0; i <= NZEROS/2; i++) { + hilb += (xcoeffs[i] * delay[(dptr - i*2) & (D_SIZE - 1)]); + } + dptr = (dptr + 1) & (D_SIZE - 1); + + + s_delayed = buffer[buffer_pos]; + buffer[buffer_pos++] = hilb; + buffer_pos %= buffer_size; + + buffer_write(lt[pos], l[pos] + c[pos] * 0.707946f - + s_delayed * 0.707946f); + buffer_write(rt[pos], r[pos] + c[pos] * 0.707946f + + s_delayed * 0.707946f); + } + + plugin_data->dptr = dptr; + + plugin_data->buffer_pos = buffer_pos; +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainSurroundEncoder(LADSPA_Handle instance, LADSPA_Data gain) { + ((SurroundEncoder *)instance)->run_adding_gain = gain; +} + +static void runAddingSurroundEncoder(LADSPA_Handle instance, unsigned long sample_count) { + SurroundEncoder *plugin_data = (SurroundEncoder *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* L (array of floats of length sample_count) */ + const LADSPA_Data * const l = plugin_data->l; + + /* R (array of floats of length sample_count) */ + const LADSPA_Data * const r = plugin_data->r; + + /* C (array of floats of length sample_count) */ + const LADSPA_Data * const c = plugin_data->c; + + /* S (array of floats of length sample_count) */ + const LADSPA_Data * const s = plugin_data->s; + + /* Lt (array of floats of length sample_count) */ + LADSPA_Data * const lt = plugin_data->lt; + + /* Rt (array of floats of length sample_count) */ + LADSPA_Data * const rt = plugin_data->rt; + LADSPA_Data * buffer = plugin_data->buffer; + unsigned int buffer_pos = plugin_data->buffer_pos; + unsigned int buffer_size = plugin_data->buffer_size; + LADSPA_Data * delay = plugin_data->delay; + unsigned int dptr = plugin_data->dptr; + +#line 85 "surround_encoder_1401.xml" + unsigned long pos; + LADSPA_Data s_delayed; + unsigned int i; + float hilb; + + for (pos = 0; pos < sample_count; pos++) { + delay[dptr] = s[pos]; + hilb = 0.0f; + for (i = 0; i <= NZEROS/2; i++) { + hilb += (xcoeffs[i] * delay[(dptr - i*2) & (D_SIZE - 1)]); + } + dptr = (dptr + 1) & (D_SIZE - 1); + + + s_delayed = buffer[buffer_pos]; + buffer[buffer_pos++] = hilb; + buffer_pos %= buffer_size; + + buffer_write(lt[pos], l[pos] + c[pos] * 0.707946f - + s_delayed * 0.707946f); + buffer_write(rt[pos], r[pos] + c[pos] * 0.707946f + + s_delayed * 0.707946f); + } + + plugin_data->dptr = dptr; + + plugin_data->buffer_pos = buffer_pos; +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + surroundEncoderDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (surroundEncoderDescriptor) { + surroundEncoderDescriptor->UniqueID = 1401; + surroundEncoderDescriptor->Label = "surroundEncoder"; + surroundEncoderDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + surroundEncoderDescriptor->Name = + D_("Surround matrix encoder"); + surroundEncoderDescriptor->Maker = + "Steve Harris "; + surroundEncoderDescriptor->Copyright = + "GPL"; + surroundEncoderDescriptor->PortCount = 6; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(6, + sizeof(LADSPA_PortDescriptor)); + surroundEncoderDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(6, + sizeof(LADSPA_PortRangeHint)); + surroundEncoderDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(6, sizeof(char*)); + surroundEncoderDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for L */ + port_descriptors[SURROUNDENCODER_L] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[SURROUNDENCODER_L] = + D_("L"); + port_range_hints[SURROUNDENCODER_L].HintDescriptor = 0; + + /* Parameters for R */ + port_descriptors[SURROUNDENCODER_R] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[SURROUNDENCODER_R] = + D_("R"); + port_range_hints[SURROUNDENCODER_R].HintDescriptor = 0; + + /* Parameters for C */ + port_descriptors[SURROUNDENCODER_C] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[SURROUNDENCODER_C] = + D_("C"); + port_range_hints[SURROUNDENCODER_C].HintDescriptor = 0; + + /* Parameters for S */ + port_descriptors[SURROUNDENCODER_S] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[SURROUNDENCODER_S] = + D_("S"); + port_range_hints[SURROUNDENCODER_S].HintDescriptor = 0; + + /* Parameters for Lt */ + port_descriptors[SURROUNDENCODER_LT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[SURROUNDENCODER_LT] = + D_("Lt"); + port_range_hints[SURROUNDENCODER_LT].HintDescriptor = 0; + + /* Parameters for Rt */ + port_descriptors[SURROUNDENCODER_RT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[SURROUNDENCODER_RT] = + D_("Rt"); + port_range_hints[SURROUNDENCODER_RT].HintDescriptor = 0; + + surroundEncoderDescriptor->activate = activateSurroundEncoder; + surroundEncoderDescriptor->cleanup = cleanupSurroundEncoder; + surroundEncoderDescriptor->connect_port = connectPortSurroundEncoder; + surroundEncoderDescriptor->deactivate = NULL; + surroundEncoderDescriptor->instantiate = instantiateSurroundEncoder; + surroundEncoderDescriptor->run = runSurroundEncoder; + surroundEncoderDescriptor->run_adding = runAddingSurroundEncoder; + surroundEncoderDescriptor->set_run_adding_gain = setRunAddingGainSurroundEncoder; + } +} + +void _fini() { + if (surroundEncoderDescriptor) { + free((LADSPA_PortDescriptor *)surroundEncoderDescriptor->PortDescriptors); + free((char **)surroundEncoderDescriptor->PortNames); + free((LADSPA_PortRangeHint *)surroundEncoderDescriptor->PortRangeHints); + free(surroundEncoderDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/svf_1214.c b/plugins/LadspaEffect/swh/svf_1214.c new file mode 100644 index 000000000..f17a353ef --- /dev/null +++ b/plugins/LadspaEffect/swh/svf_1214.c @@ -0,0 +1,419 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + +#line 9 "svf_1214.xml" + +#include "ladspa-util.h" + +// Constants to match filter types +#define F_LP 1 +#define F_HP 2 +#define F_BP 3 +#define F_BR 4 +#define F_AP 5 + +// Number of filter oversamples +#define F_R 3 + +/* Structure to hold parameters for SV filter */ + +typedef struct { + float f; // 2.0*sin(PI*fs/(fc*r)); + float q; // 2.0*cos(pow(q, 0.1)*PI*0.5); + float qnrm; // sqrt(m/2.0f+0.01f); + float h; // high pass output + float b; // band pass output + float l; // low pass output + float p; // peaking output (allpass with resonance) + float n; // notch output + float *op; // pointer to output value +} sv_filter; + +/* Store data in SVF struct, takes the sampling frequency, cutoff frequency + and Q, and fills in the structure passed */ + +static inline void setup_svf(sv_filter *sv, float fs, float fc, float q, int t) { + sv->f = 2.0f * sin(M_PI * fc / (float)(fs * F_R)); + sv->q = 2.0f * cos(pow(q, 0.1f) * M_PI * 0.5f); + sv->qnrm = sqrt(sv->q/2.0+0.01); + switch(t) { + case F_LP: + sv->op = &(sv->l); + break; + case F_HP: + sv->op = &(sv->h); + break; + case F_BP: + sv->op = &(sv->b); + break; + case F_BR: + sv->op = &(sv->n); + break; + default: + sv->op = &(sv->p); + } +} + +/* Run one sample through the SV filter. Filter is by andy@vellocet */ + +static inline float run_svf(sv_filter *sv, float in) { + float out; + int i; + + in = sv->qnrm * in ; + for (i=0; i < F_R; i++) { + // very slight waveshape for extra stability + sv->b = flush_to_zero(sv->b - sv->b * sv->b * sv->b * 0.001f); + + // regular state variable code here + // the notch and peaking outputs are optional + sv->h = flush_to_zero(in - sv->l - sv->q * sv->b); + sv->b = sv->b + sv->f * sv->h; + sv->l = flush_to_zero(sv->l + sv->f * sv->b); + sv->n = sv->l + sv->h; + sv->p = sv->l - sv->h; + + out = *(sv->op); + in = out; + } + + return out; +} + +#define SVF_INPUT 0 +#define SVF_OUTPUT 1 +#define SVF_FILT_TYPE 2 +#define SVF_FILT_FREQ 3 +#define SVF_FILT_Q 4 +#define SVF_FILT_RES 5 + +static LADSPA_Descriptor *svfDescriptor = NULL; + +typedef struct { + LADSPA_Data *input; + LADSPA_Data *output; + LADSPA_Data *filt_type; + LADSPA_Data *filt_freq; + LADSPA_Data *filt_q; + LADSPA_Data *filt_res; + int sample_rate; + sv_filter * svf; + LADSPA_Data run_adding_gain; +} Svf; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return svfDescriptor; + default: + return NULL; + } +} + +static void activateSvf(LADSPA_Handle instance) { + Svf *plugin_data = (Svf *)instance; + int sample_rate = plugin_data->sample_rate; + sv_filter *svf = plugin_data->svf; +#line 100 "svf_1214.xml" + setup_svf(svf, 0, 0, 0, 0); + plugin_data->sample_rate = sample_rate; + plugin_data->svf = svf; + +} + +static void cleanupSvf(LADSPA_Handle instance) { +#line 104 "svf_1214.xml" + Svf *plugin_data = (Svf *)instance; + free(plugin_data->svf); + free(instance); +} + +static void connectPortSvf( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + Svf *plugin; + + plugin = (Svf *)instance; + switch (port) { + case SVF_INPUT: + plugin->input = data; + break; + case SVF_OUTPUT: + plugin->output = data; + break; + case SVF_FILT_TYPE: + plugin->filt_type = data; + break; + case SVF_FILT_FREQ: + plugin->filt_freq = data; + break; + case SVF_FILT_Q: + plugin->filt_q = data; + break; + case SVF_FILT_RES: + plugin->filt_res = data; + break; + } +} + +static LADSPA_Handle instantiateSvf( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + Svf *plugin_data = (Svf *)malloc(sizeof(Svf)); + int sample_rate; + sv_filter *svf = NULL; + +#line 94 "svf_1214.xml" + sample_rate = s_rate; + + svf = calloc(1, sizeof(sv_filter)); + + plugin_data->sample_rate = sample_rate; + plugin_data->svf = svf; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runSvf(LADSPA_Handle instance, unsigned long sample_count) { + Svf *plugin_data = (Svf *)instance; + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + + /* Filter type (0=none, 1=LP, 2=HP, 3=BP, 4=BR, 5=AP) (float value) */ + const LADSPA_Data filt_type = *(plugin_data->filt_type); + + /* Filter freq (float value) */ + const LADSPA_Data filt_freq = *(plugin_data->filt_freq); + + /* Filter Q (float value) */ + const LADSPA_Data filt_q = *(plugin_data->filt_q); + + /* Filter resonance (float value) */ + const LADSPA_Data filt_res = *(plugin_data->filt_res); + int sample_rate = plugin_data->sample_rate; + sv_filter * svf = plugin_data->svf; + +#line 108 "svf_1214.xml" + long int pos; + + setup_svf(svf, sample_rate, filt_freq, filt_q, f_round(filt_type)); + + for (pos = 0; pos < sample_count; pos++) { + buffer_write(output[pos], run_svf(svf, input[pos] + (svf->b * filt_res))); + } +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainSvf(LADSPA_Handle instance, LADSPA_Data gain) { + ((Svf *)instance)->run_adding_gain = gain; +} + +static void runAddingSvf(LADSPA_Handle instance, unsigned long sample_count) { + Svf *plugin_data = (Svf *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + + /* Filter type (0=none, 1=LP, 2=HP, 3=BP, 4=BR, 5=AP) (float value) */ + const LADSPA_Data filt_type = *(plugin_data->filt_type); + + /* Filter freq (float value) */ + const LADSPA_Data filt_freq = *(plugin_data->filt_freq); + + /* Filter Q (float value) */ + const LADSPA_Data filt_q = *(plugin_data->filt_q); + + /* Filter resonance (float value) */ + const LADSPA_Data filt_res = *(plugin_data->filt_res); + int sample_rate = plugin_data->sample_rate; + sv_filter * svf = plugin_data->svf; + +#line 108 "svf_1214.xml" + long int pos; + + setup_svf(svf, sample_rate, filt_freq, filt_q, f_round(filt_type)); + + for (pos = 0; pos < sample_count; pos++) { + buffer_write(output[pos], run_svf(svf, input[pos] + (svf->b * filt_res))); + } +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + svfDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (svfDescriptor) { + svfDescriptor->UniqueID = 1214; + svfDescriptor->Label = "svf"; + svfDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + svfDescriptor->Name = + D_("State Variable Filter"); + svfDescriptor->Maker = + "Steve Harris "; + svfDescriptor->Copyright = + "GPL"; + svfDescriptor->PortCount = 6; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(6, + sizeof(LADSPA_PortDescriptor)); + svfDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(6, + sizeof(LADSPA_PortRangeHint)); + svfDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(6, sizeof(char*)); + svfDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Input */ + port_descriptors[SVF_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[SVF_INPUT] = + D_("Input"); + port_range_hints[SVF_INPUT].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; + port_range_hints[SVF_INPUT].LowerBound = -1; + port_range_hints[SVF_INPUT].UpperBound = 1; + + /* Parameters for Output */ + port_descriptors[SVF_OUTPUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[SVF_OUTPUT] = + D_("Output"); + port_range_hints[SVF_OUTPUT].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; + port_range_hints[SVF_OUTPUT].LowerBound = -1; + port_range_hints[SVF_OUTPUT].UpperBound = 1; + + /* Parameters for Filter type (0=none, 1=LP, 2=HP, 3=BP, 4=BR, 5=AP) */ + port_descriptors[SVF_FILT_TYPE] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[SVF_FILT_TYPE] = + D_("Filter type (0=none, 1=LP, 2=HP, 3=BP, 4=BR, 5=AP)"); + port_range_hints[SVF_FILT_TYPE].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_INTEGER | LADSPA_HINT_DEFAULT_0; + port_range_hints[SVF_FILT_TYPE].LowerBound = 0; + port_range_hints[SVF_FILT_TYPE].UpperBound = 5; + + /* Parameters for Filter freq */ + port_descriptors[SVF_FILT_FREQ] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[SVF_FILT_FREQ] = + D_("Filter freq"); + port_range_hints[SVF_FILT_FREQ].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_440; + port_range_hints[SVF_FILT_FREQ].LowerBound = 0; + port_range_hints[SVF_FILT_FREQ].UpperBound = 6000; + + /* Parameters for Filter Q */ + port_descriptors[SVF_FILT_Q] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[SVF_FILT_Q] = + D_("Filter Q"); + port_range_hints[SVF_FILT_Q].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; + port_range_hints[SVF_FILT_Q].LowerBound = 0; + port_range_hints[SVF_FILT_Q].UpperBound = 1; + + /* Parameters for Filter resonance */ + port_descriptors[SVF_FILT_RES] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[SVF_FILT_RES] = + D_("Filter resonance"); + port_range_hints[SVF_FILT_RES].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[SVF_FILT_RES].LowerBound = 0; + port_range_hints[SVF_FILT_RES].UpperBound = 1; + + svfDescriptor->activate = activateSvf; + svfDescriptor->cleanup = cleanupSvf; + svfDescriptor->connect_port = connectPortSvf; + svfDescriptor->deactivate = NULL; + svfDescriptor->instantiate = instantiateSvf; + svfDescriptor->run = runSvf; + svfDescriptor->run_adding = runAddingSvf; + svfDescriptor->set_run_adding_gain = setRunAddingGainSvf; + } +} + +void _fini() { + if (svfDescriptor) { + free((LADSPA_PortDescriptor *)svfDescriptor->PortDescriptors); + free((char **)svfDescriptor->PortNames); + free((LADSPA_PortRangeHint *)svfDescriptor->PortRangeHints); + free(svfDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/tape_delay_1211.c b/plugins/LadspaEffect/swh/tape_delay_1211.c new file mode 100644 index 000000000..d31a494d1 --- /dev/null +++ b/plugins/LadspaEffect/swh/tape_delay_1211.c @@ -0,0 +1,656 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + +#line 8 "tape_delay_1211.xml" + +#include "ladspa-util.h" + +#define BASE_BUFFER 8 // Tape length (inches) + +#define TAPEDELAY_SPEED 0 +#define TAPEDELAY_DA_DB 1 +#define TAPEDELAY_T1D 2 +#define TAPEDELAY_T1A_DB 3 +#define TAPEDELAY_T2D 4 +#define TAPEDELAY_T2A_DB 5 +#define TAPEDELAY_T3D 6 +#define TAPEDELAY_T3A_DB 7 +#define TAPEDELAY_T4D 8 +#define TAPEDELAY_T4A_DB 9 +#define TAPEDELAY_INPUT 10 +#define TAPEDELAY_OUTPUT 11 + +static LADSPA_Descriptor *tapeDelayDescriptor = NULL; + +typedef struct { + LADSPA_Data *speed; + LADSPA_Data *da_db; + LADSPA_Data *t1d; + LADSPA_Data *t1a_db; + LADSPA_Data *t2d; + LADSPA_Data *t2a_db; + LADSPA_Data *t3d; + LADSPA_Data *t3a_db; + LADSPA_Data *t4d; + LADSPA_Data *t4a_db; + LADSPA_Data *input; + LADSPA_Data *output; + LADSPA_Data *buffer; + unsigned int buffer_mask; + unsigned int buffer_size; + LADSPA_Data last2_in; + LADSPA_Data last3_in; + LADSPA_Data last_in; + unsigned int last_phase; + float phase; + int sample_rate; + LADSPA_Data z0; + LADSPA_Data z1; + LADSPA_Data z2; + LADSPA_Data run_adding_gain; +} TapeDelay; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return tapeDelayDescriptor; + default: + return NULL; + } +} + +static void activateTapeDelay(LADSPA_Handle instance) { + TapeDelay *plugin_data = (TapeDelay *)instance; + LADSPA_Data *buffer = plugin_data->buffer; + unsigned int buffer_mask = plugin_data->buffer_mask; + unsigned int buffer_size = plugin_data->buffer_size; + LADSPA_Data last2_in = plugin_data->last2_in; + LADSPA_Data last3_in = plugin_data->last3_in; + LADSPA_Data last_in = plugin_data->last_in; + unsigned int last_phase = plugin_data->last_phase; + float phase = plugin_data->phase; + int sample_rate = plugin_data->sample_rate; + LADSPA_Data z0 = plugin_data->z0; + LADSPA_Data z1 = plugin_data->z1; + LADSPA_Data z2 = plugin_data->z2; +#line 38 "tape_delay_1211.xml" + int i; + + for (i = 0; i < buffer_size; i++) { + buffer[i] = 0; + } + phase = 0; + last_phase = 0; + last_in = 0.0f; + last2_in = 0.0f; + last3_in = 0.0f; + sample_rate = sample_rate; + z0 = 0.0f; + z1 = 0.0f; + z2 = 0.0f; + plugin_data->buffer = buffer; + plugin_data->buffer_mask = buffer_mask; + plugin_data->buffer_size = buffer_size; + plugin_data->last2_in = last2_in; + plugin_data->last3_in = last3_in; + plugin_data->last_in = last_in; + plugin_data->last_phase = last_phase; + plugin_data->phase = phase; + plugin_data->sample_rate = sample_rate; + plugin_data->z0 = z0; + plugin_data->z1 = z1; + plugin_data->z2 = z2; + +} + +static void cleanupTapeDelay(LADSPA_Handle instance) { +#line 55 "tape_delay_1211.xml" + TapeDelay *plugin_data = (TapeDelay *)instance; + free(plugin_data->buffer); + free(instance); +} + +static void connectPortTapeDelay( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + TapeDelay *plugin; + + plugin = (TapeDelay *)instance; + switch (port) { + case TAPEDELAY_SPEED: + plugin->speed = data; + break; + case TAPEDELAY_DA_DB: + plugin->da_db = data; + break; + case TAPEDELAY_T1D: + plugin->t1d = data; + break; + case TAPEDELAY_T1A_DB: + plugin->t1a_db = data; + break; + case TAPEDELAY_T2D: + plugin->t2d = data; + break; + case TAPEDELAY_T2A_DB: + plugin->t2a_db = data; + break; + case TAPEDELAY_T3D: + plugin->t3d = data; + break; + case TAPEDELAY_T3A_DB: + plugin->t3a_db = data; + break; + case TAPEDELAY_T4D: + plugin->t4d = data; + break; + case TAPEDELAY_T4A_DB: + plugin->t4a_db = data; + break; + case TAPEDELAY_INPUT: + plugin->input = data; + break; + case TAPEDELAY_OUTPUT: + plugin->output = data; + break; + } +} + +static LADSPA_Handle instantiateTapeDelay( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + TapeDelay *plugin_data = (TapeDelay *)malloc(sizeof(TapeDelay)); + LADSPA_Data *buffer = NULL; + unsigned int buffer_mask; + unsigned int buffer_size; + LADSPA_Data last2_in; + LADSPA_Data last3_in; + LADSPA_Data last_in; + unsigned int last_phase; + float phase; + int sample_rate; + LADSPA_Data z0; + LADSPA_Data z1; + LADSPA_Data z2; + +#line 21 "tape_delay_1211.xml" + unsigned int mbs = BASE_BUFFER * s_rate; + sample_rate = s_rate; + for (buffer_size = 4096; buffer_size < mbs; + buffer_size *= 2); + buffer = malloc(buffer_size * sizeof(LADSPA_Data)); + buffer_mask = buffer_size - 1; + phase = 0; + last_phase = 0; + last_in = 0.0f; + last2_in = 0.0f; + last3_in = 0.0f; + z0 = 0.0f; + z1 = 0.0f; + z2 = 0.0f; + + plugin_data->buffer = buffer; + plugin_data->buffer_mask = buffer_mask; + plugin_data->buffer_size = buffer_size; + plugin_data->last2_in = last2_in; + plugin_data->last3_in = last3_in; + plugin_data->last_in = last_in; + plugin_data->last_phase = last_phase; + plugin_data->phase = phase; + plugin_data->sample_rate = sample_rate; + plugin_data->z0 = z0; + plugin_data->z1 = z1; + plugin_data->z2 = z2; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runTapeDelay(LADSPA_Handle instance, unsigned long sample_count) { + TapeDelay *plugin_data = (TapeDelay *)instance; + + /* Tape speed (inches/sec, 1=normal) (float value) */ + const LADSPA_Data speed = *(plugin_data->speed); + + /* Dry level (dB) (float value) */ + const LADSPA_Data da_db = *(plugin_data->da_db); + + /* Tap 1 distance (inches) (float value) */ + const LADSPA_Data t1d = *(plugin_data->t1d); + + /* Tap 1 level (dB) (float value) */ + const LADSPA_Data t1a_db = *(plugin_data->t1a_db); + + /* Tap 2 distance (inches) (float value) */ + const LADSPA_Data t2d = *(plugin_data->t2d); + + /* Tap 2 level (dB) (float value) */ + const LADSPA_Data t2a_db = *(plugin_data->t2a_db); + + /* Tap 3 distance (inches) (float value) */ + const LADSPA_Data t3d = *(plugin_data->t3d); + + /* Tap 3 level (dB) (float value) */ + const LADSPA_Data t3a_db = *(plugin_data->t3a_db); + + /* Tap 4 distance (inches) (float value) */ + const LADSPA_Data t4d = *(plugin_data->t4d); + + /* Tap 4 level (dB) (float value) */ + const LADSPA_Data t4a_db = *(plugin_data->t4a_db); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + LADSPA_Data * buffer = plugin_data->buffer; + unsigned int buffer_mask = plugin_data->buffer_mask; + unsigned int buffer_size = plugin_data->buffer_size; + LADSPA_Data last2_in = plugin_data->last2_in; + LADSPA_Data last3_in = plugin_data->last3_in; + LADSPA_Data last_in = plugin_data->last_in; + unsigned int last_phase = plugin_data->last_phase; + float phase = plugin_data->phase; + int sample_rate = plugin_data->sample_rate; + LADSPA_Data z0 = plugin_data->z0; + LADSPA_Data z1 = plugin_data->z1; + LADSPA_Data z2 = plugin_data->z2; + +#line 59 "tape_delay_1211.xml" + unsigned int pos; + float increment = f_clamp(speed, 0.0f, 40.0f); + float lin_int, lin_inc; + unsigned int track; + unsigned int fph; + LADSPA_Data out; + + const float da = DB_CO(da_db); + const float t1a = DB_CO(t1a_db); + const float t2a = DB_CO(t2a_db); + const float t3a = DB_CO(t3a_db); + const float t4a = DB_CO(t4a_db); + const unsigned int t1d_s = f_round(t1d * sample_rate); + const unsigned int t2d_s = f_round(t2d * sample_rate); + const unsigned int t3d_s = f_round(t3d * sample_rate); + const unsigned int t4d_s = f_round(t4d * sample_rate); + + for (pos = 0; pos < sample_count; pos++) { + fph = f_trunc(phase); + last_phase = fph; + lin_int = phase - (float)fph; + + out = buffer[(unsigned int)(fph - t1d_s) & buffer_mask] * t1a; + out += buffer[(unsigned int)(fph - t2d_s) & buffer_mask] * t2a; + out += buffer[(unsigned int)(fph - t3d_s) & buffer_mask] * t3a; + out += buffer[(unsigned int)(fph - t4d_s) & buffer_mask] * t4a; + + phase += increment; + lin_inc = 1.0f / (floor(phase) - last_phase + 1); + lin_inc = lin_inc > 1.0f ? 1.0f : lin_inc; + lin_int = 0.0f; + for (track = last_phase; track < phase; track++) { + lin_int += lin_inc; + buffer[track & buffer_mask] = + cube_interp(lin_int, last3_in, last2_in, last_in, input[pos]); + } + last3_in = last2_in; + last2_in = last_in; + last_in = input[pos]; + out += input[pos] * da; + buffer_write(output[pos], out); + if (phase >= buffer_size) { + phase -= buffer_size; + } + } + + // Store current phase in instance + plugin_data->phase = phase; + plugin_data->last_phase = last_phase; + plugin_data->last_in = last_in; + plugin_data->last2_in = last2_in; + plugin_data->last3_in = last3_in; + plugin_data->z0 = z0; + plugin_data->z1 = z1; + plugin_data->z2 = z2; +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainTapeDelay(LADSPA_Handle instance, LADSPA_Data gain) { + ((TapeDelay *)instance)->run_adding_gain = gain; +} + +static void runAddingTapeDelay(LADSPA_Handle instance, unsigned long sample_count) { + TapeDelay *plugin_data = (TapeDelay *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Tape speed (inches/sec, 1=normal) (float value) */ + const LADSPA_Data speed = *(plugin_data->speed); + + /* Dry level (dB) (float value) */ + const LADSPA_Data da_db = *(plugin_data->da_db); + + /* Tap 1 distance (inches) (float value) */ + const LADSPA_Data t1d = *(plugin_data->t1d); + + /* Tap 1 level (dB) (float value) */ + const LADSPA_Data t1a_db = *(plugin_data->t1a_db); + + /* Tap 2 distance (inches) (float value) */ + const LADSPA_Data t2d = *(plugin_data->t2d); + + /* Tap 2 level (dB) (float value) */ + const LADSPA_Data t2a_db = *(plugin_data->t2a_db); + + /* Tap 3 distance (inches) (float value) */ + const LADSPA_Data t3d = *(plugin_data->t3d); + + /* Tap 3 level (dB) (float value) */ + const LADSPA_Data t3a_db = *(plugin_data->t3a_db); + + /* Tap 4 distance (inches) (float value) */ + const LADSPA_Data t4d = *(plugin_data->t4d); + + /* Tap 4 level (dB) (float value) */ + const LADSPA_Data t4a_db = *(plugin_data->t4a_db); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + LADSPA_Data * buffer = plugin_data->buffer; + unsigned int buffer_mask = plugin_data->buffer_mask; + unsigned int buffer_size = plugin_data->buffer_size; + LADSPA_Data last2_in = plugin_data->last2_in; + LADSPA_Data last3_in = plugin_data->last3_in; + LADSPA_Data last_in = plugin_data->last_in; + unsigned int last_phase = plugin_data->last_phase; + float phase = plugin_data->phase; + int sample_rate = plugin_data->sample_rate; + LADSPA_Data z0 = plugin_data->z0; + LADSPA_Data z1 = plugin_data->z1; + LADSPA_Data z2 = plugin_data->z2; + +#line 59 "tape_delay_1211.xml" + unsigned int pos; + float increment = f_clamp(speed, 0.0f, 40.0f); + float lin_int, lin_inc; + unsigned int track; + unsigned int fph; + LADSPA_Data out; + + const float da = DB_CO(da_db); + const float t1a = DB_CO(t1a_db); + const float t2a = DB_CO(t2a_db); + const float t3a = DB_CO(t3a_db); + const float t4a = DB_CO(t4a_db); + const unsigned int t1d_s = f_round(t1d * sample_rate); + const unsigned int t2d_s = f_round(t2d * sample_rate); + const unsigned int t3d_s = f_round(t3d * sample_rate); + const unsigned int t4d_s = f_round(t4d * sample_rate); + + for (pos = 0; pos < sample_count; pos++) { + fph = f_trunc(phase); + last_phase = fph; + lin_int = phase - (float)fph; + + out = buffer[(unsigned int)(fph - t1d_s) & buffer_mask] * t1a; + out += buffer[(unsigned int)(fph - t2d_s) & buffer_mask] * t2a; + out += buffer[(unsigned int)(fph - t3d_s) & buffer_mask] * t3a; + out += buffer[(unsigned int)(fph - t4d_s) & buffer_mask] * t4a; + + phase += increment; + lin_inc = 1.0f / (floor(phase) - last_phase + 1); + lin_inc = lin_inc > 1.0f ? 1.0f : lin_inc; + lin_int = 0.0f; + for (track = last_phase; track < phase; track++) { + lin_int += lin_inc; + buffer[track & buffer_mask] = + cube_interp(lin_int, last3_in, last2_in, last_in, input[pos]); + } + last3_in = last2_in; + last2_in = last_in; + last_in = input[pos]; + out += input[pos] * da; + buffer_write(output[pos], out); + if (phase >= buffer_size) { + phase -= buffer_size; + } + } + + // Store current phase in instance + plugin_data->phase = phase; + plugin_data->last_phase = last_phase; + plugin_data->last_in = last_in; + plugin_data->last2_in = last2_in; + plugin_data->last3_in = last3_in; + plugin_data->z0 = z0; + plugin_data->z1 = z1; + plugin_data->z2 = z2; +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + tapeDelayDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (tapeDelayDescriptor) { + tapeDelayDescriptor->UniqueID = 1211; + tapeDelayDescriptor->Label = "tapeDelay"; + tapeDelayDescriptor->Properties = + 0; + tapeDelayDescriptor->Name = + D_("Tape Delay Simulation"); + tapeDelayDescriptor->Maker = + "Steve Harris "; + tapeDelayDescriptor->Copyright = + "GPL"; + tapeDelayDescriptor->PortCount = 12; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(12, + sizeof(LADSPA_PortDescriptor)); + tapeDelayDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(12, + sizeof(LADSPA_PortRangeHint)); + tapeDelayDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(12, sizeof(char*)); + tapeDelayDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Tape speed (inches/sec, 1=normal) */ + port_descriptors[TAPEDELAY_SPEED] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[TAPEDELAY_SPEED] = + D_("Tape speed (inches/sec, 1=normal)"); + port_range_hints[TAPEDELAY_SPEED].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1; + port_range_hints[TAPEDELAY_SPEED].LowerBound = 0; + port_range_hints[TAPEDELAY_SPEED].UpperBound = 10; + + /* Parameters for Dry level (dB) */ + port_descriptors[TAPEDELAY_DA_DB] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[TAPEDELAY_DA_DB] = + D_("Dry level (dB)"); + port_range_hints[TAPEDELAY_DA_DB].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MINIMUM; + port_range_hints[TAPEDELAY_DA_DB].LowerBound = -90; + port_range_hints[TAPEDELAY_DA_DB].UpperBound = 0; + + /* Parameters for Tap 1 distance (inches) */ + port_descriptors[TAPEDELAY_T1D] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[TAPEDELAY_T1D] = + D_("Tap 1 distance (inches)"); + port_range_hints[TAPEDELAY_T1D].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[TAPEDELAY_T1D].LowerBound = 0; + port_range_hints[TAPEDELAY_T1D].UpperBound = 4; + + /* Parameters for Tap 1 level (dB) */ + port_descriptors[TAPEDELAY_T1A_DB] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[TAPEDELAY_T1A_DB] = + D_("Tap 1 level (dB)"); + port_range_hints[TAPEDELAY_T1A_DB].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[TAPEDELAY_T1A_DB].LowerBound = -90; + port_range_hints[TAPEDELAY_T1A_DB].UpperBound = 0; + + /* Parameters for Tap 2 distance (inches) */ + port_descriptors[TAPEDELAY_T2D] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[TAPEDELAY_T2D] = + D_("Tap 2 distance (inches)"); + port_range_hints[TAPEDELAY_T2D].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; + port_range_hints[TAPEDELAY_T2D].LowerBound = 0; + port_range_hints[TAPEDELAY_T2D].UpperBound = 4; + + /* Parameters for Tap 2 level (dB) */ + port_descriptors[TAPEDELAY_T2A_DB] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[TAPEDELAY_T2A_DB] = + D_("Tap 2 level (dB)"); + port_range_hints[TAPEDELAY_T2A_DB].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MINIMUM; + port_range_hints[TAPEDELAY_T2A_DB].LowerBound = -90; + port_range_hints[TAPEDELAY_T2A_DB].UpperBound = 0; + + /* Parameters for Tap 3 distance (inches) */ + port_descriptors[TAPEDELAY_T3D] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[TAPEDELAY_T3D] = + D_("Tap 3 distance (inches)"); + port_range_hints[TAPEDELAY_T3D].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; + port_range_hints[TAPEDELAY_T3D].LowerBound = 0; + port_range_hints[TAPEDELAY_T3D].UpperBound = 4; + + /* Parameters for Tap 3 level (dB) */ + port_descriptors[TAPEDELAY_T3A_DB] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[TAPEDELAY_T3A_DB] = + D_("Tap 3 level (dB)"); + port_range_hints[TAPEDELAY_T3A_DB].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MINIMUM; + port_range_hints[TAPEDELAY_T3A_DB].LowerBound = -90; + port_range_hints[TAPEDELAY_T3A_DB].UpperBound = 0; + + /* Parameters for Tap 4 distance (inches) */ + port_descriptors[TAPEDELAY_T4D] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[TAPEDELAY_T4D] = + D_("Tap 4 distance (inches)"); + port_range_hints[TAPEDELAY_T4D].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_HIGH; + port_range_hints[TAPEDELAY_T4D].LowerBound = 0; + port_range_hints[TAPEDELAY_T4D].UpperBound = 4; + + /* Parameters for Tap 4 level (dB) */ + port_descriptors[TAPEDELAY_T4A_DB] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[TAPEDELAY_T4A_DB] = + D_("Tap 4 level (dB)"); + port_range_hints[TAPEDELAY_T4A_DB].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MINIMUM; + port_range_hints[TAPEDELAY_T4A_DB].LowerBound = -90; + port_range_hints[TAPEDELAY_T4A_DB].UpperBound = 0; + + /* Parameters for Input */ + port_descriptors[TAPEDELAY_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[TAPEDELAY_INPUT] = + D_("Input"); + port_range_hints[TAPEDELAY_INPUT].HintDescriptor = 0; + + /* Parameters for Output */ + port_descriptors[TAPEDELAY_OUTPUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[TAPEDELAY_OUTPUT] = + D_("Output"); + port_range_hints[TAPEDELAY_OUTPUT].HintDescriptor = 0; + + tapeDelayDescriptor->activate = activateTapeDelay; + tapeDelayDescriptor->cleanup = cleanupTapeDelay; + tapeDelayDescriptor->connect_port = connectPortTapeDelay; + tapeDelayDescriptor->deactivate = NULL; + tapeDelayDescriptor->instantiate = instantiateTapeDelay; + tapeDelayDescriptor->run = runTapeDelay; + tapeDelayDescriptor->run_adding = runAddingTapeDelay; + tapeDelayDescriptor->set_run_adding_gain = setRunAddingGainTapeDelay; + } +} + +void _fini() { + if (tapeDelayDescriptor) { + free((LADSPA_PortDescriptor *)tapeDelayDescriptor->PortDescriptors); + free((char **)tapeDelayDescriptor->PortNames); + free((LADSPA_PortRangeHint *)tapeDelayDescriptor->PortRangeHints); + free(tapeDelayDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/transient_1206.c b/plugins/LadspaEffect/swh/transient_1206.c new file mode 100644 index 000000000..c2be769f4 --- /dev/null +++ b/plugins/LadspaEffect/swh/transient_1206.c @@ -0,0 +1,476 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + +#line 10 "transient_1206.xml" + +#include "ladspa-util.h" + +#define BUFFER_SIZE 10240 +#define SSTAB 0.00001f +#define ASTAB 0.02f + +#define TRANSIENT_ATTACK 0 +#define TRANSIENT_SUSTAIN 1 +#define TRANSIENT_INPUT 2 +#define TRANSIENT_OUTPUT 3 + +static LADSPA_Descriptor *transientDescriptor = NULL; + +typedef struct { + LADSPA_Data *attack; + LADSPA_Data *sustain; + LADSPA_Data *input; + LADSPA_Data *output; + float * buffer; + int buffer_pos; + long count; + float fast_buffer_sum; + float fast_track; + float medi_buffer_sum; + float medi_track; + int sample_rate; + float slow_buffer_sum; + float slow_track; + LADSPA_Data run_adding_gain; +} Transient; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return transientDescriptor; + default: + return NULL; + } +} + +static void activateTransient(LADSPA_Handle instance) { + Transient *plugin_data = (Transient *)instance; + float *buffer = plugin_data->buffer; + int buffer_pos = plugin_data->buffer_pos; + long count = plugin_data->count; + float fast_buffer_sum = plugin_data->fast_buffer_sum; + float fast_track = plugin_data->fast_track; + float medi_buffer_sum = plugin_data->medi_buffer_sum; + float medi_track = plugin_data->medi_track; + int sample_rate = plugin_data->sample_rate; + float slow_buffer_sum = plugin_data->slow_buffer_sum; + float slow_track = plugin_data->slow_track; +#line 36 "transient_1206.xml" + memset(buffer, '\0', BUFFER_SIZE * sizeof(float)); + fast_buffer_sum = 0.1; + medi_buffer_sum = 0.1; + slow_buffer_sum = 0.1; + buffer_pos = 0; + fast_track = 0.1; + medi_track = 0.1; + slow_track = 0.1; + count = 0; + sample_rate = sample_rate; + plugin_data->buffer = buffer; + plugin_data->buffer_pos = buffer_pos; + plugin_data->count = count; + plugin_data->fast_buffer_sum = fast_buffer_sum; + plugin_data->fast_track = fast_track; + plugin_data->medi_buffer_sum = medi_buffer_sum; + plugin_data->medi_track = medi_track; + plugin_data->sample_rate = sample_rate; + plugin_data->slow_buffer_sum = slow_buffer_sum; + plugin_data->slow_track = slow_track; + +} + +static void cleanupTransient(LADSPA_Handle instance) { +#line 49 "transient_1206.xml" + Transient *plugin_data = (Transient *)instance; + free(plugin_data->buffer); + free(instance); +} + +static void connectPortTransient( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + Transient *plugin; + + plugin = (Transient *)instance; + switch (port) { + case TRANSIENT_ATTACK: + plugin->attack = data; + break; + case TRANSIENT_SUSTAIN: + plugin->sustain = data; + break; + case TRANSIENT_INPUT: + plugin->input = data; + break; + case TRANSIENT_OUTPUT: + plugin->output = data; + break; + } +} + +static LADSPA_Handle instantiateTransient( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + Transient *plugin_data = (Transient *)malloc(sizeof(Transient)); + float *buffer = NULL; + int buffer_pos; + long count; + float fast_buffer_sum; + float fast_track; + float medi_buffer_sum; + float medi_track; + int sample_rate; + float slow_buffer_sum; + float slow_track; + +#line 23 "transient_1206.xml" + buffer = calloc(BUFFER_SIZE, sizeof(float)); + fast_buffer_sum = 0.1; + medi_buffer_sum = 0.1; + slow_buffer_sum = 0.1; + buffer_pos = 0; + fast_track = 0.0; + medi_track = 0.0; + slow_track = 0.0; + count = 0; + sample_rate = s_rate; + + plugin_data->buffer = buffer; + plugin_data->buffer_pos = buffer_pos; + plugin_data->count = count; + plugin_data->fast_buffer_sum = fast_buffer_sum; + plugin_data->fast_track = fast_track; + plugin_data->medi_buffer_sum = medi_buffer_sum; + plugin_data->medi_track = medi_track; + plugin_data->sample_rate = sample_rate; + plugin_data->slow_buffer_sum = slow_buffer_sum; + plugin_data->slow_track = slow_track; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runTransient(LADSPA_Handle instance, unsigned long sample_count) { + Transient *plugin_data = (Transient *)instance; + + /* Attack speed (float value) */ + const LADSPA_Data attack = *(plugin_data->attack); + + /* Sustain time (float value) */ + const LADSPA_Data sustain = *(plugin_data->sustain); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + float * buffer = plugin_data->buffer; + int buffer_pos = plugin_data->buffer_pos; + long count = plugin_data->count; + float fast_buffer_sum = plugin_data->fast_buffer_sum; + float fast_track = plugin_data->fast_track; + float medi_buffer_sum = plugin_data->medi_buffer_sum; + float medi_track = plugin_data->medi_track; + int sample_rate = plugin_data->sample_rate; + float slow_buffer_sum = plugin_data->slow_buffer_sum; + float slow_track = plugin_data->slow_track; + +#line 53 "transient_1206.xml" + unsigned long pos; + const int fast_sum_size = (2 * sample_rate) / 1000; + const int medi_sum_size = (25 * sample_rate) / 1000; + const int slow_sum_size = (100 * sample_rate) / 1000; + const float fast_track_lag = 1.5f / fast_sum_size; + const float medi_track_lag = 1.0f / medi_sum_size; + const float slow_track_lag = 1.3f / slow_sum_size; + float ratio; + LADSPA_Data in; + + for (pos = 0; pos < sample_count; pos++) { + in = input[pos]; + buffer[buffer_pos] = fabs(in); + fast_buffer_sum += buffer[buffer_pos]; + medi_buffer_sum += buffer[buffer_pos]; + slow_buffer_sum += buffer[buffer_pos]; + fast_buffer_sum -= buffer[MOD(buffer_pos - fast_sum_size, BUFFER_SIZE)]; + medi_buffer_sum -= buffer[MOD(buffer_pos - medi_sum_size, BUFFER_SIZE)]; + slow_buffer_sum -= buffer[MOD(buffer_pos - slow_sum_size, BUFFER_SIZE)]; + if (count++ > slow_sum_size) { + fast_track += (fast_buffer_sum/fast_sum_size - fast_track) + * fast_track_lag; + medi_track += (medi_buffer_sum/medi_sum_size - medi_track) + * medi_track_lag; + slow_track += (slow_buffer_sum/slow_sum_size - slow_track) + * slow_track_lag; + } + + // Attack + ratio = (fast_track + ASTAB) / (medi_track + ASTAB); + if (ratio * attack > 1.0f) { + in *= ratio * attack; + } else if (ratio * attack < -1.0f) { + in /= ratio * -attack; + } + + // Sustain + ratio = (slow_track + SSTAB) / (medi_track + SSTAB); + if (ratio * sustain > 1.0f) { + in *= ratio * sustain; + } else if (ratio * sustain < -1.0f) { + in /= ratio * -sustain; + } + + buffer_write(output[pos], in); + buffer_pos = (buffer_pos + 1) % BUFFER_SIZE; + } + + plugin_data->count = count; + plugin_data->fast_track = fast_track; + plugin_data->medi_track = medi_track; + plugin_data->slow_track = slow_track; + plugin_data->buffer_pos = buffer_pos; + plugin_data->fast_buffer_sum = fast_buffer_sum; + plugin_data->medi_buffer_sum = medi_buffer_sum; + plugin_data->slow_buffer_sum = slow_buffer_sum; +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainTransient(LADSPA_Handle instance, LADSPA_Data gain) { + ((Transient *)instance)->run_adding_gain = gain; +} + +static void runAddingTransient(LADSPA_Handle instance, unsigned long sample_count) { + Transient *plugin_data = (Transient *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Attack speed (float value) */ + const LADSPA_Data attack = *(plugin_data->attack); + + /* Sustain time (float value) */ + const LADSPA_Data sustain = *(plugin_data->sustain); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + float * buffer = plugin_data->buffer; + int buffer_pos = plugin_data->buffer_pos; + long count = plugin_data->count; + float fast_buffer_sum = plugin_data->fast_buffer_sum; + float fast_track = plugin_data->fast_track; + float medi_buffer_sum = plugin_data->medi_buffer_sum; + float medi_track = plugin_data->medi_track; + int sample_rate = plugin_data->sample_rate; + float slow_buffer_sum = plugin_data->slow_buffer_sum; + float slow_track = plugin_data->slow_track; + +#line 53 "transient_1206.xml" + unsigned long pos; + const int fast_sum_size = (2 * sample_rate) / 1000; + const int medi_sum_size = (25 * sample_rate) / 1000; + const int slow_sum_size = (100 * sample_rate) / 1000; + const float fast_track_lag = 1.5f / fast_sum_size; + const float medi_track_lag = 1.0f / medi_sum_size; + const float slow_track_lag = 1.3f / slow_sum_size; + float ratio; + LADSPA_Data in; + + for (pos = 0; pos < sample_count; pos++) { + in = input[pos]; + buffer[buffer_pos] = fabs(in); + fast_buffer_sum += buffer[buffer_pos]; + medi_buffer_sum += buffer[buffer_pos]; + slow_buffer_sum += buffer[buffer_pos]; + fast_buffer_sum -= buffer[MOD(buffer_pos - fast_sum_size, BUFFER_SIZE)]; + medi_buffer_sum -= buffer[MOD(buffer_pos - medi_sum_size, BUFFER_SIZE)]; + slow_buffer_sum -= buffer[MOD(buffer_pos - slow_sum_size, BUFFER_SIZE)]; + if (count++ > slow_sum_size) { + fast_track += (fast_buffer_sum/fast_sum_size - fast_track) + * fast_track_lag; + medi_track += (medi_buffer_sum/medi_sum_size - medi_track) + * medi_track_lag; + slow_track += (slow_buffer_sum/slow_sum_size - slow_track) + * slow_track_lag; + } + + // Attack + ratio = (fast_track + ASTAB) / (medi_track + ASTAB); + if (ratio * attack > 1.0f) { + in *= ratio * attack; + } else if (ratio * attack < -1.0f) { + in /= ratio * -attack; + } + + // Sustain + ratio = (slow_track + SSTAB) / (medi_track + SSTAB); + if (ratio * sustain > 1.0f) { + in *= ratio * sustain; + } else if (ratio * sustain < -1.0f) { + in /= ratio * -sustain; + } + + buffer_write(output[pos], in); + buffer_pos = (buffer_pos + 1) % BUFFER_SIZE; + } + + plugin_data->count = count; + plugin_data->fast_track = fast_track; + plugin_data->medi_track = medi_track; + plugin_data->slow_track = slow_track; + plugin_data->buffer_pos = buffer_pos; + plugin_data->fast_buffer_sum = fast_buffer_sum; + plugin_data->medi_buffer_sum = medi_buffer_sum; + plugin_data->slow_buffer_sum = slow_buffer_sum; +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + transientDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (transientDescriptor) { + transientDescriptor->UniqueID = 1206; + transientDescriptor->Label = "transient"; + transientDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + transientDescriptor->Name = + D_("Transient mangler"); + transientDescriptor->Maker = + "Steve Harris "; + transientDescriptor->Copyright = + "GPL"; + transientDescriptor->PortCount = 4; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(4, + sizeof(LADSPA_PortDescriptor)); + transientDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(4, + sizeof(LADSPA_PortRangeHint)); + transientDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(4, sizeof(char*)); + transientDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Attack speed */ + port_descriptors[TRANSIENT_ATTACK] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[TRANSIENT_ATTACK] = + D_("Attack speed"); + port_range_hints[TRANSIENT_ATTACK].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[TRANSIENT_ATTACK].LowerBound = -1; + port_range_hints[TRANSIENT_ATTACK].UpperBound = 1; + + /* Parameters for Sustain time */ + port_descriptors[TRANSIENT_SUSTAIN] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[TRANSIENT_SUSTAIN] = + D_("Sustain time"); + port_range_hints[TRANSIENT_SUSTAIN].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[TRANSIENT_SUSTAIN].LowerBound = -1; + port_range_hints[TRANSIENT_SUSTAIN].UpperBound = 1; + + /* Parameters for Input */ + port_descriptors[TRANSIENT_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[TRANSIENT_INPUT] = + D_("Input"); + port_range_hints[TRANSIENT_INPUT].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; + port_range_hints[TRANSIENT_INPUT].LowerBound = -1.0; + port_range_hints[TRANSIENT_INPUT].UpperBound = 1.0; + + /* Parameters for Output */ + port_descriptors[TRANSIENT_OUTPUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[TRANSIENT_OUTPUT] = + D_("Output"); + port_range_hints[TRANSIENT_OUTPUT].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; + port_range_hints[TRANSIENT_OUTPUT].LowerBound = -1.0; + port_range_hints[TRANSIENT_OUTPUT].UpperBound = 1.0; + + transientDescriptor->activate = activateTransient; + transientDescriptor->cleanup = cleanupTransient; + transientDescriptor->connect_port = connectPortTransient; + transientDescriptor->deactivate = NULL; + transientDescriptor->instantiate = instantiateTransient; + transientDescriptor->run = runTransient; + transientDescriptor->run_adding = runAddingTransient; + transientDescriptor->set_run_adding_gain = setRunAddingGainTransient; + } +} + +void _fini() { + if (transientDescriptor) { + free((LADSPA_PortDescriptor *)transientDescriptor->PortDescriptors); + free((char **)transientDescriptor->PortNames); + free((LADSPA_PortRangeHint *)transientDescriptor->PortRangeHints); + free(transientDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/triple_para_1204.c b/plugins/LadspaEffect/swh/triple_para_1204.c new file mode 100644 index 000000000..e2ee41361 --- /dev/null +++ b/plugins/LadspaEffect/swh/triple_para_1204.c @@ -0,0 +1,604 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + +#line 10 "triple_para_1204.xml" + +#include "util/biquad.h" + +#define TRIPLEPARA_GAIN_L 0 +#define TRIPLEPARA_FC_L 1 +#define TRIPLEPARA_BW_L 2 +#define TRIPLEPARA_GAIN_1 3 +#define TRIPLEPARA_FC_1 4 +#define TRIPLEPARA_BW_1 5 +#define TRIPLEPARA_GAIN_2 6 +#define TRIPLEPARA_FC_2 7 +#define TRIPLEPARA_BW_2 8 +#define TRIPLEPARA_GAIN_3 9 +#define TRIPLEPARA_FC_3 10 +#define TRIPLEPARA_BW_3 11 +#define TRIPLEPARA_GAIN_H 12 +#define TRIPLEPARA_FC_H 13 +#define TRIPLEPARA_BW_H 14 +#define TRIPLEPARA_INPUT 15 +#define TRIPLEPARA_OUTPUT 16 + +static LADSPA_Descriptor *tripleParaDescriptor = NULL; + +typedef struct { + LADSPA_Data *gain_L; + LADSPA_Data *fc_L; + LADSPA_Data *bw_L; + LADSPA_Data *gain_1; + LADSPA_Data *fc_1; + LADSPA_Data *bw_1; + LADSPA_Data *gain_2; + LADSPA_Data *fc_2; + LADSPA_Data *bw_2; + LADSPA_Data *gain_3; + LADSPA_Data *fc_3; + LADSPA_Data *bw_3; + LADSPA_Data *gain_H; + LADSPA_Data *fc_H; + LADSPA_Data *bw_H; + LADSPA_Data *input; + LADSPA_Data *output; + biquad * filters; + float fs; + LADSPA_Data run_adding_gain; +} TriplePara; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return tripleParaDescriptor; + default: + return NULL; + } +} + +static void activateTriplePara(LADSPA_Handle instance) { + TriplePara *plugin_data = (TriplePara *)instance; + biquad *filters = plugin_data->filters; + float fs = plugin_data->fs; +#line 32 "triple_para_1204.xml" + biquad_init(&filters[0]); + biquad_init(&filters[1]); + biquad_init(&filters[2]); + biquad_init(&filters[3]); + biquad_init(&filters[4]); + plugin_data->filters = filters; + plugin_data->fs = fs; + +} + +static void cleanupTriplePara(LADSPA_Handle instance) { +#line 68 "triple_para_1204.xml" + TriplePara *plugin_data = (TriplePara *)instance; + free(plugin_data->filters); + free(instance); +} + +static void connectPortTriplePara( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + TriplePara *plugin; + + plugin = (TriplePara *)instance; + switch (port) { + case TRIPLEPARA_GAIN_L: + plugin->gain_L = data; + break; + case TRIPLEPARA_FC_L: + plugin->fc_L = data; + break; + case TRIPLEPARA_BW_L: + plugin->bw_L = data; + break; + case TRIPLEPARA_GAIN_1: + plugin->gain_1 = data; + break; + case TRIPLEPARA_FC_1: + plugin->fc_1 = data; + break; + case TRIPLEPARA_BW_1: + plugin->bw_1 = data; + break; + case TRIPLEPARA_GAIN_2: + plugin->gain_2 = data; + break; + case TRIPLEPARA_FC_2: + plugin->fc_2 = data; + break; + case TRIPLEPARA_BW_2: + plugin->bw_2 = data; + break; + case TRIPLEPARA_GAIN_3: + plugin->gain_3 = data; + break; + case TRIPLEPARA_FC_3: + plugin->fc_3 = data; + break; + case TRIPLEPARA_BW_3: + plugin->bw_3 = data; + break; + case TRIPLEPARA_GAIN_H: + plugin->gain_H = data; + break; + case TRIPLEPARA_FC_H: + plugin->fc_H = data; + break; + case TRIPLEPARA_BW_H: + plugin->bw_H = data; + break; + case TRIPLEPARA_INPUT: + plugin->input = data; + break; + case TRIPLEPARA_OUTPUT: + plugin->output = data; + break; + } +} + +static LADSPA_Handle instantiateTriplePara( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + TriplePara *plugin_data = (TriplePara *)malloc(sizeof(TriplePara)); + biquad *filters = NULL; + float fs; + +#line 21 "triple_para_1204.xml" + fs = s_rate; + + filters = calloc(5, sizeof(biquad)); + biquad_init(&filters[0]); + biquad_init(&filters[1]); + biquad_init(&filters[2]); + biquad_init(&filters[3]); + biquad_init(&filters[4]); + + plugin_data->filters = filters; + plugin_data->fs = fs; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runTriplePara(LADSPA_Handle instance, unsigned long sample_count) { + TriplePara *plugin_data = (TriplePara *)instance; + + /* Low-shelving gain (dB) (float value) */ + const LADSPA_Data gain_L = *(plugin_data->gain_L); + + /* Low-shelving frequency (Hz) (float value) */ + const LADSPA_Data fc_L = *(plugin_data->fc_L); + + /* Low-shelving slope (float value) */ + const LADSPA_Data bw_L = *(plugin_data->bw_L); + + /* Band 1 gain (dB) (float value) */ + const LADSPA_Data gain_1 = *(plugin_data->gain_1); + + /* Band 1 frequency (Hz) (float value) */ + const LADSPA_Data fc_1 = *(plugin_data->fc_1); + + /* Band 1 bandwidth (octaves) (float value) */ + const LADSPA_Data bw_1 = *(plugin_data->bw_1); + + /* Band 2 gain (dB) (float value) */ + const LADSPA_Data gain_2 = *(plugin_data->gain_2); + + /* Band 2 frequency (Hz) (float value) */ + const LADSPA_Data fc_2 = *(plugin_data->fc_2); + + /* Band 2 bandwidth (octaves) (float value) */ + const LADSPA_Data bw_2 = *(plugin_data->bw_2); + + /* Band 3 gain (dB) (float value) */ + const LADSPA_Data gain_3 = *(plugin_data->gain_3); + + /* Band 3 frequency (Hz) (float value) */ + const LADSPA_Data fc_3 = *(plugin_data->fc_3); + + /* Band 3 bandwidth (octaves) (float value) */ + const LADSPA_Data bw_3 = *(plugin_data->bw_3); + + /* High-shelving gain (dB) (float value) */ + const LADSPA_Data gain_H = *(plugin_data->gain_H); + + /* High-shelving frequency (Hz) (float value) */ + const LADSPA_Data fc_H = *(plugin_data->fc_H); + + /* High-shelving slope (float value) */ + const LADSPA_Data bw_H = *(plugin_data->bw_H); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + biquad * filters = plugin_data->filters; + float fs = plugin_data->fs; + +#line 40 "triple_para_1204.xml" + unsigned long pos; + float in; + + ls_set_params(&filters[0], fc_L, gain_L, bw_L, fs); + eq_set_params(&filters[1], fc_1, gain_1, bw_1, fs); + eq_set_params(&filters[2], fc_2, gain_2, bw_2, fs); + eq_set_params(&filters[3], fc_3, gain_3, bw_3, fs); + hs_set_params(&filters[4], fc_H, gain_H, bw_H, fs); + + for (pos = 0; pos < sample_count; pos++) { + in = biquad_run(&filters[0], input[pos]); + in = biquad_run(&filters[1], in); + in = biquad_run(&filters[2], in); + in = biquad_run(&filters[3], in); + in = biquad_run(&filters[4], in); + buffer_write(output[pos], in); + } +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainTriplePara(LADSPA_Handle instance, LADSPA_Data gain) { + ((TriplePara *)instance)->run_adding_gain = gain; +} + +static void runAddingTriplePara(LADSPA_Handle instance, unsigned long sample_count) { + TriplePara *plugin_data = (TriplePara *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Low-shelving gain (dB) (float value) */ + const LADSPA_Data gain_L = *(plugin_data->gain_L); + + /* Low-shelving frequency (Hz) (float value) */ + const LADSPA_Data fc_L = *(plugin_data->fc_L); + + /* Low-shelving slope (float value) */ + const LADSPA_Data bw_L = *(plugin_data->bw_L); + + /* Band 1 gain (dB) (float value) */ + const LADSPA_Data gain_1 = *(plugin_data->gain_1); + + /* Band 1 frequency (Hz) (float value) */ + const LADSPA_Data fc_1 = *(plugin_data->fc_1); + + /* Band 1 bandwidth (octaves) (float value) */ + const LADSPA_Data bw_1 = *(plugin_data->bw_1); + + /* Band 2 gain (dB) (float value) */ + const LADSPA_Data gain_2 = *(plugin_data->gain_2); + + /* Band 2 frequency (Hz) (float value) */ + const LADSPA_Data fc_2 = *(plugin_data->fc_2); + + /* Band 2 bandwidth (octaves) (float value) */ + const LADSPA_Data bw_2 = *(plugin_data->bw_2); + + /* Band 3 gain (dB) (float value) */ + const LADSPA_Data gain_3 = *(plugin_data->gain_3); + + /* Band 3 frequency (Hz) (float value) */ + const LADSPA_Data fc_3 = *(plugin_data->fc_3); + + /* Band 3 bandwidth (octaves) (float value) */ + const LADSPA_Data bw_3 = *(plugin_data->bw_3); + + /* High-shelving gain (dB) (float value) */ + const LADSPA_Data gain_H = *(plugin_data->gain_H); + + /* High-shelving frequency (Hz) (float value) */ + const LADSPA_Data fc_H = *(plugin_data->fc_H); + + /* High-shelving slope (float value) */ + const LADSPA_Data bw_H = *(plugin_data->bw_H); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + biquad * filters = plugin_data->filters; + float fs = plugin_data->fs; + +#line 40 "triple_para_1204.xml" + unsigned long pos; + float in; + + ls_set_params(&filters[0], fc_L, gain_L, bw_L, fs); + eq_set_params(&filters[1], fc_1, gain_1, bw_1, fs); + eq_set_params(&filters[2], fc_2, gain_2, bw_2, fs); + eq_set_params(&filters[3], fc_3, gain_3, bw_3, fs); + hs_set_params(&filters[4], fc_H, gain_H, bw_H, fs); + + for (pos = 0; pos < sample_count; pos++) { + in = biquad_run(&filters[0], input[pos]); + in = biquad_run(&filters[1], in); + in = biquad_run(&filters[2], in); + in = biquad_run(&filters[3], in); + in = biquad_run(&filters[4], in); + buffer_write(output[pos], in); + } +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + tripleParaDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (tripleParaDescriptor) { + tripleParaDescriptor->UniqueID = 1204; + tripleParaDescriptor->Label = "triplePara"; + tripleParaDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + tripleParaDescriptor->Name = + D_("Triple band parametric with shelves"); + tripleParaDescriptor->Maker = + "Steve Harris "; + tripleParaDescriptor->Copyright = + "GPL"; + tripleParaDescriptor->PortCount = 17; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(17, + sizeof(LADSPA_PortDescriptor)); + tripleParaDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(17, + sizeof(LADSPA_PortRangeHint)); + tripleParaDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(17, sizeof(char*)); + tripleParaDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Low-shelving gain (dB) */ + port_descriptors[TRIPLEPARA_GAIN_L] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[TRIPLEPARA_GAIN_L] = + D_("Low-shelving gain (dB)"); + port_range_hints[TRIPLEPARA_GAIN_L].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[TRIPLEPARA_GAIN_L].LowerBound = -70; + port_range_hints[TRIPLEPARA_GAIN_L].UpperBound = +30; + + /* Parameters for Low-shelving frequency (Hz) */ + port_descriptors[TRIPLEPARA_FC_L] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[TRIPLEPARA_FC_L] = + D_("Low-shelving frequency (Hz)"); + port_range_hints[TRIPLEPARA_FC_L].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_LOGARITHMIC | LADSPA_HINT_SAMPLE_RATE | LADSPA_HINT_DEFAULT_MINIMUM; + port_range_hints[TRIPLEPARA_FC_L].LowerBound = 0.0001; + port_range_hints[TRIPLEPARA_FC_L].UpperBound = 0.49; + + /* Parameters for Low-shelving slope */ + port_descriptors[TRIPLEPARA_BW_L] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[TRIPLEPARA_BW_L] = + D_("Low-shelving slope"); + port_range_hints[TRIPLEPARA_BW_L].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; + port_range_hints[TRIPLEPARA_BW_L].LowerBound = 0; + port_range_hints[TRIPLEPARA_BW_L].UpperBound = 1; + + /* Parameters for Band 1 gain (dB) */ + port_descriptors[TRIPLEPARA_GAIN_1] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[TRIPLEPARA_GAIN_1] = + D_("Band 1 gain (dB)"); + port_range_hints[TRIPLEPARA_GAIN_1].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[TRIPLEPARA_GAIN_1].LowerBound = -70; + port_range_hints[TRIPLEPARA_GAIN_1].UpperBound = +30; + + /* Parameters for Band 1 frequency (Hz) */ + port_descriptors[TRIPLEPARA_FC_1] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[TRIPLEPARA_FC_1] = + D_("Band 1 frequency (Hz)"); + port_range_hints[TRIPLEPARA_FC_1].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_LOGARITHMIC | LADSPA_HINT_SAMPLE_RATE | LADSPA_HINT_DEFAULT_LOW; + port_range_hints[TRIPLEPARA_FC_1].LowerBound = 0.0001; + port_range_hints[TRIPLEPARA_FC_1].UpperBound = 0.49; + + /* Parameters for Band 1 bandwidth (octaves) */ + port_descriptors[TRIPLEPARA_BW_1] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[TRIPLEPARA_BW_1] = + D_("Band 1 bandwidth (octaves)"); + port_range_hints[TRIPLEPARA_BW_1].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1; + port_range_hints[TRIPLEPARA_BW_1].LowerBound = 0; + port_range_hints[TRIPLEPARA_BW_1].UpperBound = 4; + + /* Parameters for Band 2 gain (dB) */ + port_descriptors[TRIPLEPARA_GAIN_2] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[TRIPLEPARA_GAIN_2] = + D_("Band 2 gain (dB)"); + port_range_hints[TRIPLEPARA_GAIN_2].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[TRIPLEPARA_GAIN_2].LowerBound = -70; + port_range_hints[TRIPLEPARA_GAIN_2].UpperBound = +30; + + /* Parameters for Band 2 frequency (Hz) */ + port_descriptors[TRIPLEPARA_FC_2] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[TRIPLEPARA_FC_2] = + D_("Band 2 frequency (Hz)"); + port_range_hints[TRIPLEPARA_FC_2].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_LOGARITHMIC | LADSPA_HINT_SAMPLE_RATE | LADSPA_HINT_DEFAULT_MIDDLE; + port_range_hints[TRIPLEPARA_FC_2].LowerBound = 0.0001; + port_range_hints[TRIPLEPARA_FC_2].UpperBound = 0.49; + + /* Parameters for Band 2 bandwidth (octaves) */ + port_descriptors[TRIPLEPARA_BW_2] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[TRIPLEPARA_BW_2] = + D_("Band 2 bandwidth (octaves)"); + port_range_hints[TRIPLEPARA_BW_2].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1; + port_range_hints[TRIPLEPARA_BW_2].LowerBound = 0; + port_range_hints[TRIPLEPARA_BW_2].UpperBound = 4; + + /* Parameters for Band 3 gain (dB) */ + port_descriptors[TRIPLEPARA_GAIN_3] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[TRIPLEPARA_GAIN_3] = + D_("Band 3 gain (dB)"); + port_range_hints[TRIPLEPARA_GAIN_3].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[TRIPLEPARA_GAIN_3].LowerBound = -70; + port_range_hints[TRIPLEPARA_GAIN_3].UpperBound = +30; + + /* Parameters for Band 3 frequency (Hz) */ + port_descriptors[TRIPLEPARA_FC_3] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[TRIPLEPARA_FC_3] = + D_("Band 3 frequency (Hz)"); + port_range_hints[TRIPLEPARA_FC_3].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_LOGARITHMIC | LADSPA_HINT_SAMPLE_RATE | LADSPA_HINT_DEFAULT_HIGH; + port_range_hints[TRIPLEPARA_FC_3].LowerBound = 0.0001; + port_range_hints[TRIPLEPARA_FC_3].UpperBound = 0.49; + + /* Parameters for Band 3 bandwidth (octaves) */ + port_descriptors[TRIPLEPARA_BW_3] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[TRIPLEPARA_BW_3] = + D_("Band 3 bandwidth (octaves)"); + port_range_hints[TRIPLEPARA_BW_3].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1; + port_range_hints[TRIPLEPARA_BW_3].LowerBound = 0; + port_range_hints[TRIPLEPARA_BW_3].UpperBound = 4; + + /* Parameters for High-shelving gain (dB) */ + port_descriptors[TRIPLEPARA_GAIN_H] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[TRIPLEPARA_GAIN_H] = + D_("High-shelving gain (dB)"); + port_range_hints[TRIPLEPARA_GAIN_H].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[TRIPLEPARA_GAIN_H].LowerBound = -70; + port_range_hints[TRIPLEPARA_GAIN_H].UpperBound = +30; + + /* Parameters for High-shelving frequency (Hz) */ + port_descriptors[TRIPLEPARA_FC_H] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[TRIPLEPARA_FC_H] = + D_("High-shelving frequency (Hz)"); + port_range_hints[TRIPLEPARA_FC_H].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_LOGARITHMIC | LADSPA_HINT_SAMPLE_RATE | LADSPA_HINT_DEFAULT_MAXIMUM; + port_range_hints[TRIPLEPARA_FC_H].LowerBound = 0.0001; + port_range_hints[TRIPLEPARA_FC_H].UpperBound = 0.49; + + /* Parameters for High-shelving slope */ + port_descriptors[TRIPLEPARA_BW_H] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[TRIPLEPARA_BW_H] = + D_("High-shelving slope"); + port_range_hints[TRIPLEPARA_BW_H].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; + port_range_hints[TRIPLEPARA_BW_H].LowerBound = 0; + port_range_hints[TRIPLEPARA_BW_H].UpperBound = 1; + + /* Parameters for Input */ + port_descriptors[TRIPLEPARA_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[TRIPLEPARA_INPUT] = + D_("Input"); + port_range_hints[TRIPLEPARA_INPUT].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; + port_range_hints[TRIPLEPARA_INPUT].LowerBound = -1.0; + port_range_hints[TRIPLEPARA_INPUT].UpperBound = +1.0; + + /* Parameters for Output */ + port_descriptors[TRIPLEPARA_OUTPUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[TRIPLEPARA_OUTPUT] = + D_("Output"); + port_range_hints[TRIPLEPARA_OUTPUT].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; + port_range_hints[TRIPLEPARA_OUTPUT].LowerBound = -1.0; + port_range_hints[TRIPLEPARA_OUTPUT].UpperBound = +1.0; + + tripleParaDescriptor->activate = activateTriplePara; + tripleParaDescriptor->cleanup = cleanupTriplePara; + tripleParaDescriptor->connect_port = connectPortTriplePara; + tripleParaDescriptor->deactivate = NULL; + tripleParaDescriptor->instantiate = instantiateTriplePara; + tripleParaDescriptor->run = runTriplePara; + tripleParaDescriptor->run_adding = runAddingTriplePara; + tripleParaDescriptor->set_run_adding_gain = setRunAddingGainTriplePara; + } +} + +void _fini() { + if (tripleParaDescriptor) { + free((LADSPA_PortDescriptor *)tripleParaDescriptor->PortDescriptors); + free((char **)tripleParaDescriptor->PortNames); + free((LADSPA_PortRangeHint *)tripleParaDescriptor->PortRangeHints); + free(tripleParaDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/util/biquad.h b/plugins/LadspaEffect/swh/util/biquad.h new file mode 100644 index 000000000..64f890a81 --- /dev/null +++ b/plugins/LadspaEffect/swh/util/biquad.h @@ -0,0 +1,179 @@ +#ifndef BIQUAD_H +#define BIQUAD_H + +#define LN_2_2 0.34657359f // ln(2)/2 + +#include "ladspa-util.h" + +#ifndef LIMIT +#define LIMIT(v,l,u) (vu?u:v)) +#endif + +#ifndef BIQUAD_TYPE +#define BIQUAD_TYPE float +#endif + +typedef BIQUAD_TYPE bq_t; + +/* Biquad filter (adapted from lisp code by Eli Brandt, + http://www.cs.cmu.edu/~eli/) */ + +typedef struct { + bq_t a1; + bq_t a2; + bq_t b0; + bq_t b1; + bq_t b2; + bq_t x1; + bq_t x2; + bq_t y1; + bq_t y2; +} biquad; + +static inline void biquad_init(biquad *f) { + f->x1 = 0.0f; + f->x2 = 0.0f; + f->y1 = 0.0f; + f->y2 = 0.0f; +} + +static inline void eq_set_params(biquad *f, bq_t fc, bq_t gain, bq_t bw, + bq_t fs); +static inline void eq_set_params(biquad *f, bq_t fc, bq_t gain, bq_t bw, + bq_t fs) +{ + bq_t w = 2.0f * M_PI * LIMIT(fc, 1.0f, fs/2.0f) / fs; + bq_t cw = cosf(w); + bq_t sw = sinf(w); + bq_t J = pow(10.0f, gain * 0.025f); + bq_t g = sw * sinhf(LN_2_2 * LIMIT(bw, 0.0001f, 4.0f) * w / sw); + bq_t a0r = 1.0f / (1.0f + (g / J)); + + f->b0 = (1.0f + (g * J)) * a0r; + f->b1 = (-2.0f * cw) * a0r; + f->b2 = (1.0f - (g * J)) * a0r; + f->a1 = -(f->b1); + f->a2 = ((g / J) - 1.0f) * a0r; +} + +static inline void ls_set_params(biquad *f, bq_t fc, bq_t gain, bq_t slope, + bq_t fs); +static inline void ls_set_params(biquad *f, bq_t fc, bq_t gain, bq_t slope, + bq_t fs) +{ + bq_t w = 2.0f * M_PI * LIMIT(fc, 1.0, fs/2.0) / fs; + bq_t cw = cosf(w); + bq_t sw = sinf(w); + bq_t A = powf(10.0f, gain * 0.025f); + bq_t b = sqrt(((1.0f + A * A) / LIMIT(slope, 0.0001f, 1.0f)) - ((A - + 1.0f) * (A - 1.0))); + bq_t apc = cw * (A + 1.0f); + bq_t amc = cw * (A - 1.0f); + bq_t bs = b * sw; + bq_t a0r = 1.0f / (A + 1.0f + amc + bs); + + f->b0 = a0r * A * (A + 1.0f - amc + bs); + f->b1 = a0r * 2.0f * A * (A - 1.0f - apc); + f->b2 = a0r * A * (A + 1.0f - amc - bs); + f->a1 = a0r * 2.0f * (A - 1.0f + apc); + f->a2 = a0r * (-A - 1.0f - amc + bs); +} + +static inline void hs_set_params(biquad *f, bq_t fc, bq_t gain, bq_t slope, + bq_t fs); +static inline void hs_set_params(biquad *f, bq_t fc, bq_t gain, bq_t slope, + bq_t fs) +{ + bq_t w = 2.0f * M_PI * LIMIT(fc, 1.0, fs/2.0) / fs; + bq_t cw = cosf(w); + bq_t sw = sinf(w); + bq_t A = powf(10.0f, gain * 0.025f); + bq_t b = sqrt(((1.0f + A * A) / LIMIT(slope, 0.0001f, 1.0f)) - ((A - + 1.0f) * (A - 1.0f))); + bq_t apc = cw * (A + 1.0f); + bq_t amc = cw * (A - 1.0f); + bq_t bs = b * sw; + bq_t a0r = 1.0f / (A + 1.0f - amc + bs); + + f->b0 = a0r * A * (A + 1.0f + amc + bs); + f->b1 = a0r * -2.0f * A * (A - 1.0f + apc); + f->b2 = a0r * A * (A + 1.0f + amc - bs); + f->a1 = a0r * -2.0f * (A - 1.0f - apc); + f->a2 = a0r * (-A - 1.0f + amc + bs); +} + +static inline void lp_set_params(biquad *f, bq_t fc, bq_t bw, bq_t fs) +{ + bq_t omega = 2.0 * M_PI * fc/fs; + bq_t sn = sin(omega); + bq_t cs = cos(omega); + bq_t alpha = sn * sinh(M_LN2 / 2.0 * bw * omega / sn); + + const float a0r = 1.0 / (1.0 + alpha); + f->b0 = a0r * (1.0 - cs) * 0.5; + f->b1 = a0r * (1.0 - cs); + f->b2 = a0r * (1.0 - cs) * 0.5; + f->a1 = a0r * (2.0 * cs); + f->a2 = a0r * (alpha - 1.0); +} + +static inline void hp_set_params(biquad *f, bq_t fc, bq_t bw, bq_t fs) +{ + bq_t omega = 2.0 * M_PI * fc/fs; + bq_t sn = sin(omega); + bq_t cs = cos(omega); + bq_t alpha = sn * sinh(M_LN2 / 2.0 * bw * omega / sn); + + const float a0r = 1.0 / (1.0 + alpha); + f->b0 = a0r * (1.0 + cs) * 0.5; + f->b1 = a0r * -(1.0 + cs); + f->b2 = a0r * (1.0 + cs) * 0.5; + f->a1 = a0r * (2.0 * cs); + f->a2 = a0r * (alpha - 1.0); +} + +static inline void bp_set_params(biquad *f, bq_t fc, bq_t bw, bq_t fs) +{ + bq_t omega = 2.0 * M_PI * fc/fs; + bq_t sn = sin(omega); + bq_t cs = cos(omega); + bq_t alpha = sn * sinh(M_LN2 / 2.0 * bw * omega / sn); + + const float a0r = 1.0 / (1.0 + alpha); + f->b0 = a0r * alpha; + f->b1 = 0.0; + f->b2 = a0r * -alpha; + f->a1 = a0r * (2.0 * cs); + f->a2 = a0r * (alpha - 1.0); +} + +static inline bq_t biquad_run(biquad *f, const bq_t x) { + bq_t y; + + y = f->b0 * x + f->b1 * f->x1 + f->b2 * f->x2 + + f->a1 * f->y1 + f->a2 * f->y2; + y = flush_to_zero(y); + f->x2 = f->x1; + f->x1 = x; + f->y2 = f->y1; + f->y1 = y; + + return y; +} + +static inline bq_t biquad_run_fb(biquad *f, bq_t x, const bq_t fb) { + bq_t y; + + x += f->y1 * fb * 0.98; + y = f->b0 * x + f->b1 * f->x1 + f->b2 * f->x2 + + f->a1 * f->y1 + f->a2 * f->y2; + y = flush_to_zero(y); + f->x2 = f->x1; + f->x1 = x; + f->y2 = f->y1; + f->y1 = y; + + return y; +} + +#endif diff --git a/plugins/LadspaEffect/swh/util/blo.c b/plugins/LadspaEffect/swh/util/blo.c new file mode 100644 index 000000000..9524d0e87 --- /dev/null +++ b/plugins/LadspaEffect/swh/util/blo.c @@ -0,0 +1,277 @@ +/* + Copyright (C) 2002 Steve Harris + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#include +#include +#include +#include +#ifndef WIN32 +#include +#endif + +#include "blo.h" + +/* Create the lookup tables needed to generate the bandlimited signals, we + * create sin tables (As well as the usual sin, square, saw), which is almost + * completely pointless, but doesn't cost much ram. + * + * Memory use is roughly 8 * table_size * num_of_harmonics, eg. 2048 point + * tables with 64 harmonics costs ~1Meg. The oscilators will be accurate down + * to sample_rate / (2 * number_of_harmonics) Hz, below that they will sound a + * bit soft. + */ + +blo_h_tables *blo_h_tables_new(int table_size) +{ + blo_h_tables *this; + float *all_tables = NULL; + float *table; + float table_size_f = table_size; + float max; + unsigned int table_count = 0; + int i; + unsigned int h; + size_t all_tables_size = sizeof(float) * (table_size + BLO_TABLE_WR) + * (BLO_N_HARMONICS - 1) * 2; +#ifndef WIN32 + int shm_fd; +#endif + char shm_path[128]; + + this = malloc(sizeof(blo_h_tables)); + this->alloc_size = all_tables_size; + this->table_size = table_size; + this->table_mask = table_size - 1; + this->store_type = BLO_MMAP; + + snprintf(shm_path, 128, "/blo-1-%dx%dx%d.tbl", BLO_N_WAVES, + BLO_N_HARMONICS, table_size + BLO_TABLE_WR); +#ifndef WIN32 + if ((shm_fd = shm_open(shm_path, O_RDONLY, 0)) > 0) { + /* There is an existing SHM segment that matches what we want */ + + all_tables = mmap(0, all_tables_size, PROT_READ, MAP_SHARED, + shm_fd, 0); + close(shm_fd); + this->alloc_space = all_tables; + + /* Map the pointers to the correct places in SHM */ + + /* The zero harmonics tables (trivial) */ + table = BLO_NEXT_TABLE; + for (i=0; ih_tables[i][0] = table; + } + + /* The 1st harmonic table (trivial) */ + table = BLO_NEXT_TABLE; + for (i=0; ih_tables[i][1] = table; + } + + /* The sin 2nd+ harmonics sine tables (trivial) */ + for (h=2; hh_tables[BLO_SINE][h] = table; + } + + /* The tri 2nd+ harmonics tables */ + table = this->h_tables[BLO_TRI][1]; + for (h=2; hh_tables[BLO_TRI][h] = table; + } else { + /* Odd harmonic add sin(hp)/h^2 */ + table = BLO_NEXT_TABLE; + this->h_tables[BLO_TRI][h] = table; + } + } + + /* The square 2nd+ harmonics tables */ + table = this->h_tables[BLO_SQUARE][1]; + for (h=2; hh_tables[BLO_SQUARE][h] = table; + } else { + /* Odd harmonic add sin(hp)/h */ + table = BLO_NEXT_TABLE; + this->h_tables[BLO_SQUARE][h] = table; + } + } + + /* The saw 2nd+ harmonics tables */ + for (h=2; hh_tables[BLO_SAW][h] = table; + } + + return this; + } else if ((shm_fd = shm_open(shm_path, O_CREAT | O_RDWR, 0644)) > 0) { + /* There is no existing SHM segment, but we can make one */ + int err = ftruncate(shm_fd, all_tables_size); + + if (!err) { + all_tables = mmap(0, all_tables_size, PROT_READ | PROT_WRITE, + MAP_SHARED, shm_fd, 0); + } + close(shm_fd); + } +#endif + + /* Fallback case, can't map a SHM segment, just malloc it and suffer */ + if (!all_tables) { + all_tables = malloc(all_tables_size); + this->store_type = BLO_MALLOC; + } + this->alloc_space = all_tables; + + /* Calculate the harmonic amplitudes and place the index pointers */ + + /* Make a zero harmonics table (trivial) */ + table = BLO_NEXT_TABLE; + for (i=0; ih_tables[i][0] = table; + } + + /* Make a 1st harmonic table (trivial) */ + table = BLO_NEXT_TABLE; + for (i=0; ih_tables[i][1] = table; + } + + /* Make the sin 2nd+ harmonics tables (trivial) */ + for (h=2; hh_tables[BLO_SINE][h] = table; + } + + /* Make the tri 2nd+ harmonics tables */ + table = this->h_tables[BLO_TRI][1]; + for (h=2; hh_tables[BLO_TRI][h] = table; + } else { + float sign = 1.0f; + if (h % 4 == 3) { + sign = -1.0f; + } + /* Odd harmonic add sin(hp)/h^2 */ + table = BLO_NEXT_TABLE; + this->h_tables[BLO_TRI][h] = table; + for (i=0; ih_tables[BLO_TRI][h - 1][i] + + sign * BLO_SIN_GEN((float)i * (float)h) / + ((float)h * (float) h); + } + } + } + + /* Make the square 2nd+ harmonics tables */ + table = this->h_tables[BLO_SQUARE][1]; + for (h=2; hh_tables[BLO_SQUARE][h] = table; + } else { + /* Odd harmonic add sin(hp)/h */ + table = BLO_NEXT_TABLE; + this->h_tables[BLO_SQUARE][h] = table; + for (i=0; ih_tables[BLO_SQUARE][h - 1][i] + + BLO_SIN_GEN((float)i * (float)h) / (float)h; + } + } + } + + /* Make the saw 2nd+ harmonics tables */ + for (h=2; hh_tables[BLO_SAW][h] = table; + for (i=0; ih_tables[BLO_SAW][h - 1][i] + + BLO_SIN_GEN((float)i * (float)h) / (float)h; + } + } + + /* Normalise table levels */ + for (h=1; h max) { + max = fabs(table[i]); + } + } + max = 1.0f / max; + for (i=0; istore_type == BLO_MMAP) { +#ifndef WIN32 + munmap(tables->alloc_space, tables->alloc_size); +#endif + } else { + free(tables->alloc_space); + } + free(tables); +} + +blo_h_osc *blo_h_new(blo_h_tables *tables, unsigned int wave, float sample_rate) +{ + blo_h_osc *this = malloc(sizeof(blo_h_osc)); + + this->tables = tables; + this->wave = wave; + this->sample_rate = sample_rate; + this->nyquist = sample_rate * 0.49f; + this->ph.all = 0; + this->ph_coef = ((float)(tables->table_size) * 65536.0f) / sample_rate; + this->ph_mask = tables->table_size * 65536 - 1; + this->table_mask = tables->table_mask; + this->table_size = tables->table_size; + this->table = tables->h_tables[0][0]; + this->table_b = tables->h_tables[0][0]; + + return this; +} + +void blo_h_free(blo_h_osc *osc) +{ + free(osc); +} diff --git a/plugins/LadspaEffect/swh/util/blo.h b/plugins/LadspaEffect/swh/util/blo.h new file mode 100644 index 000000000..2254d972f --- /dev/null +++ b/plugins/LadspaEffect/swh/util/blo.h @@ -0,0 +1,213 @@ +/* + Copyright (C) 2002 Steve Harris + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#include +#include +#include + +#include "ladspa-util.h" + +#define BLO_N_WAVES 4 +#define BLO_SINE 0 +#define BLO_TRI 1 +#define BLO_SQUARE 2 +#define BLO_SAW 3 + +#define BLO_MMAP 0 +#define BLO_MALLOC 1 + +#ifndef BLO_N_HARMONICS +#define BLO_N_HARMONICS 64 +#endif + +/* The wraparaound off the end of the basic wavetable, used by the + * interpolators. */ +#define BLO_TABLE_WR 4 + +#define BLO_SIN_GEN(phase) sin((phase) * 2.0f * (float)M_PI / table_size_f) +#define BLO_NEXT_TABLE (all_tables + (table_count++ * (table_size + BLO_TABLE_WR))) + +typedef struct { + float *h_tables[BLO_N_WAVES][BLO_N_HARMONICS]; + float *alloc_space; + size_t alloc_size; + int table_size; + int table_mask; + int store_type; +} blo_h_tables; + +typedef union { + int all; + struct { + unsigned short fr; + short in; + } part; +} blo_fixp; + +typedef struct { + blo_h_tables *tables; + float sample_rate; + float nyquist; + unsigned int wave; + blo_fixp ph; + blo_fixp om; + float ph_coef; + int ph_mask; + int table_mask; + int table_size; + int topbit; + float *table; + float *table_b; + float xfade; +} blo_h_osc; + +blo_h_tables *blo_h_tables_new(int table_size); + +void blo_h_tables_free(blo_h_tables *tables); + +blo_h_osc *blo_h_new(blo_h_tables *tables, unsigned int wave, + float sample_rate); + +void blo_h_free(blo_h_osc *osc); + +/* Set frequency for static oscilator, less cycles, but won't modulate as well + * You can't use blo_osc_hd_run_* until you've called the _hd version of this + * function. + */ + +static inline void blo_hs_set_freq(blo_h_osc *this, const float f) +{ + unsigned int tab_num; + const float ff = fabs(f) + 0.00001f; // Prevent div by zero + + // This needs to be a cast, no idea why + this->om.all = (int)(f * this->ph_coef); + tab_num = f_round(this->nyquist / ff - 0.5f); + if (tab_num >= BLO_N_HARMONICS) { + tab_num = BLO_N_HARMONICS - 1; + } + this->table_b = this->tables->h_tables[this->wave][tab_num]; +} + +/* Set frequency for dynamic oscilator, can only used with _hd run calls. + */ + +static inline void blo_hd_set_freq(blo_h_osc *this, const float f) +{ + int tab_num; + const float ff = fabs(f) + 0.00001f; // Prevent div by zero + + this->om.all = f_round(f * this->ph_coef); + tab_num = abs(f_round(this->nyquist / ff - 0.5f)); + if (tab_num >= BLO_N_HARMONICS) { + tab_num = BLO_N_HARMONICS - 1; + } else if (tab_num < 0) { + tab_num = 0; + } + this->table = this->tables->h_tables[this->wave][tab_num]; + this->xfade = this->nyquist / ff - tab_num; + if (this->xfade > 1.0f) { + this->xfade = 1.0f; + } + if (--tab_num < 0) { + tab_num = 0; + } + this->table_b = this->tables->h_tables[this->wave][tab_num]; +} + +/* Run static oscilator, returns amplitude for current phase and advances the + * phase. Uses linear interpoation */ + +static inline float blo_hs_run_lin(blo_h_osc *this) +{ + const float frac = (float)(this->ph.part.fr) * 0.00001525878f; + const int idx = this->ph.part.in; + + this->ph.all += this->om.all; + this->ph.all &= this->ph_mask; + if (this->topbit != (this->ph.all & this->table_size)) { + this->topbit = this->ph.all & this->table_size; + this->table = this->table_b; + } + + return this->table[idx] * (1.0f - frac) + this->table[idx+1] * frac; +} + +/* Run static oscilator, returns amplitude for current phase and advances the + * phase. Uses cubic interpoation */ + +static inline float blo_hs_run_cub(blo_h_osc *this) +{ + const float frac = (float)(this->ph.part.fr) * 0.00001525878f; + const int idx = this->ph.part.in; + float *t = this->table; + + this->ph.all += this->om.all; + this->ph.all &= this->ph_mask; + + if (this->topbit != (this->ph.all & this->table_size)) { + this->topbit = this->ph.all & this->table_size; + this->table = this->table_b; + t = this->table_b; + } + + return cube_interp(frac, t[idx], t[idx+1], t[idx+2], t[idx+3]); +} + +/* Run dynamic oscilator, returns amplitude for current phase and advances the + * phase, ensures harmonics won't suddently pop into existence, takes more + * cycles and has slightly less high frequency partials than the static + * version */ + +static inline float blo_hd_run_lin(blo_h_osc * const this) +{ + float low, high; + const float frac = (float)(this->ph.part.fr) * 0.00001525878f; + const int idx = this->ph.part.in; + + this->ph.all += this->om.all; + this->ph.all &= this->ph_mask; + + low = LIN_INTERP(frac, this->table_b[idx], this->table_b[idx+1]); + high = LIN_INTERP(frac, this->table[idx], this->table[idx+1]); + + return LIN_INTERP(this->xfade, low, high); +} + +/* Run dynamic oscilator, returns amplitude for current phase and advances the + * phase, ensures harmonics won't suddently pop into existence, takes more + * cycles and has slightly less high frequency partials than the static + * version. This one uses cubic interpolation. */ + +static inline float blo_hd_run_cub(blo_h_osc * const this) +{ + float low, high; + const float frac = (float)(this->ph.part.fr) * 0.00001525878f; + const int idx = this->ph.part.in; + const float *tl = this->table_b; + const float *th = this->table; + + + this->ph.all += this->om.all; + this->ph.all &= this->ph_mask; + + low = cube_interp(frac, tl[idx], tl[idx+1], tl[idx+2], tl[idx+3]); + high = cube_interp(frac, th[idx], th[idx+1], th[idx+2], th[idx+3]); + + return LIN_INTERP(this->xfade, low, high); +} diff --git a/plugins/LadspaEffect/swh/util/buffer.h b/plugins/LadspaEffect/swh/util/buffer.h new file mode 100644 index 000000000..f339d3cc5 --- /dev/null +++ b/plugins/LadspaEffect/swh/util/buffer.h @@ -0,0 +1,17 @@ +#ifndef _BUFFER_H +#define _BUFFER_H + +/* substract buffer b from a, save in c + * + * this could be sped up by vector operations + */ + +static inline void buffer_sub(const float* a, const float *b, float *c, int cnt) { + int i; + float *h; + h = c; + for(i=0;i +#include + +#include "db.h" + +float db_data[DB_TABLE_SIZE]; +float lin_data[LIN_TABLE_SIZE]; + +void db_init() +{ + unsigned int i; + + for (i=0; i LIN_TABLE_SIZE - 3) { + return lin_data[LIN_TABLE_SIZE - 2]; + } + return cube_interp(ofs, lin_data[base-1], lin_data[base], lin_data[base+1], lin_data[base+2]); +} + +static inline float f_db2lin_lerp(float db) +{ + float scale = (db - DB_MIN) * (float)LIN_TABLE_SIZE / (DB_MAX - DB_MIN); + int base = f_round(scale - 0.5f); + float ofs = scale - base; + + if (base < 1) { + return 0.0f; + } else if (base > LIN_TABLE_SIZE - 3) { + return lin_data[LIN_TABLE_SIZE - 2]; + } + return (1.0f - ofs) * lin_data[base] + ofs * lin_data[base+1]; +} + +static inline float f_lin2db_cube(float lin) +{ + float scale = (lin - LIN_MIN) * (float)DB_TABLE_SIZE / (LIN_MAX - LIN_MIN); + int base = f_round(scale - 0.5f); + float ofs = scale - base; + + if (base < 2) { + return db_data[2] * scale * 0.5f - 23 * (2.0f - scale); + } else if (base > DB_TABLE_SIZE - 3) { + return db_data[DB_TABLE_SIZE - 2]; + } + return cube_interp(ofs, db_data[base-1], db_data[base], db_data[base+1], db_data[base+2]); +} + +static inline float f_lin2db_lerp(float lin) +{ + float scale = (lin - LIN_MIN) * (float)DB_TABLE_SIZE / (LIN_MAX - LIN_MIN); + int base = f_round(scale - 0.5f); + float ofs = scale - base; + + if (base < 2) { + return db_data[2] * scale * 0.5f - 23.0f * (2.0f - scale); + } else if (base > DB_TABLE_SIZE - 2) { + return db_data[DB_TABLE_SIZE - 1]; + } + return (1.0f - ofs) * db_data[base] + ofs * db_data[base+1]; +} + +#endif diff --git a/plugins/LadspaEffect/swh/util/iir.c b/plugins/LadspaEffect/swh/util/iir.c new file mode 100644 index 000000000..049c58219 --- /dev/null +++ b/plugins/LadspaEffect/swh/util/iir.c @@ -0,0 +1,236 @@ +/* + * iir.c + * Copyright (C) 2000-2003 Alexander Ehlert + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * A port of my glame lowpass/highpass/bandpass filters due to public demand in #lad + * Try out the original at glame.sourceforge.net ;-) + */ + +#include +#include "../config.h" +#include +#include +#include "iir.h" + +/* To get better filter accuracy I decided to compute the single + * stages of the filter seperatly and apply them one by one + * to the sample data. According to the DSPGUIDE chapter 20 pp339 + * filters are more stable when applied in stages. + * Who doesn't like that can still combine + * all stages to one stage by just convoluting the single stages. + * But in the moment it's up to the user that he knows what he's doing. + * float accuracy can't be enough for certain parameters. + */ + +#define DPRINTF(x) + +/* (hopefully) generic description of an iir filter */ + + + +iir_stage_t *init_iir_stage(int mode, int nstages, int na, int nb){ + iir_stage_t *dum=NULL; + int i; + if ((dum=ALLOCN(1,iir_stage_t))){ + dum->mode=mode; + dum->nstages=0; + dum->availst=nstages; + dum->na=na; + dum->nb=nb; + dum->fc=-1.0; + dum->coeff=(gliirt **)malloc(nstages*sizeof(gliirt *)); + for(i=0;icoeff[i]=(gliirt *)malloc((na+nb)*sizeof(gliirt)); + } + return dum; +} + +/* be sure to combine stages with some na, nb count! */ +void combine_iir_stages(int mode, iir_stage_t* gt, iir_stage_t *first, iir_stage_t *second, int upf, int ups){ + int stages, i, j, cnt; + + if ( (upf==-1) && (ups==-1)) + return; + + stages = first->nstages + second->nstages; + gt->nstages = stages; + + cnt = first->na + first->nb; + + /* copy coefficients */ + if (upf!=-1) + for(i=0; instages; i++) + for(j=0; jcoeff[i][j]=first->coeff[i][j]; + + if (ups!=-1) + for(i=first->nstages; icoeff[i][j]=second->coeff[i-first->nstages][j]; +} + +void free_iir_stage(iir_stage_t *gt){ + int i; + for(i=0;iavailst;i++) + if (gt->coeff[i]) free(gt->coeff[i]); + if (gt->coeff) free(gt->coeff); + if (gt) free(gt); +} + +/* center: frequency already normalized between 0 and 0.5 of sampling + * bandwidth given in octaves between lower and upper -3dB point + */ + +void calc_2polebandpass(iirf_t* iirf, iir_stage_t* gt, float fc, float bw, long sample_rate) +{ + double omega, alpha, bandwidth, center, gain; + int i; + + if ( (gt->fc==fc) && (gt->bw==bw) ) + return; + + /*reset_iirf_t(iirf, gt, 1);*/ + gt->fc = fc; + gt->bw = bw; + gt->nstages = 1; + + fc = CLAMP(fc, 0.0, (float)sample_rate*0.45f); /* if i go all the way up to 0.5 it doesn't work */ + + center = fc/(float)sample_rate; + /* bandwidth is given in octaves */ + bandwidth = log((fc+bw*0.5)/MAX(fc-bw*0.5,0.01))/log(2.0); + + omega = 2.0*M_PI*center; + alpha = sin(omega)*sinh(log(2.0)/2.0*bandwidth*omega/sin(omega)); + + gt->coeff[0][0] = alpha; + gt->coeff[0][1] = 0.0; + gt->coeff[0][2] = -alpha; + gt->coeff[0][3] = 2.0 * cos(omega); + gt->coeff[0][4] = alpha - 1.0; + gain = 1.0 + alpha; + for(i=0;i<5;i++) + gt->coeff[0][i]/=gain; +} + +/* chebyshev calculates coefficients for a chebyshev filter + * a,b coefficients + * n number of poles(2,4,6,...) + * m 0..lowpass, 1..highpass + * fc cutoff frequency in percent of samplerate + * pr percent ripple in passband (0.5 is optimal) + * + * Code from DSPGUIDE Chapter 20, pp341 + * online version http://www.dspguide.com + */ + +#define chebtype double + +int chebyshev_stage(iir_stage_t *gt, int n){ + chebtype h,rp,ip,es,kx,vx,t,w,m,d,k,gain; + chebtype x[3], y[2], a[3], b[2]; + int res=-1,i; + + if (n>gt->availst) + goto _error; + if (gt->na+gt->nb!=5) + goto _error; + + h=M_PI/((chebtype)gt->np*2.0)+n*M_PI/(chebtype)gt->np; + rp=-cos(h); + ip=sin(h); + + if(gt->ppr>0.0) { + h=100.0/(100.0-gt->ppr); + es=sqrt(h*h-1.0); + h=1.0/es; + vx=1.0/(chebtype)gt->np*log(h+sqrt(h*h+1.0)); + kx=1.0/(chebtype)gt->np*log(h+sqrt(h*h-1.0)); + kx=(exp(kx)+exp(-kx))/2.0; + h=exp(vx); + rp*=(h-1.0/h)*0.5/kx; + ip*=(h+1.0/h)*0.5/kx; + } + + t=2.0*tan(0.5); + w=2.0*M_PI*gt->fc; + m=rp*rp+ip*ip; + d=4.0-4.0*rp*t+m*t*t; + x[0]=t*t/d; + x[1]=2*x[0]; + x[2]=x[0]; + y[0]=(8.0-2.0*m*t*t)/d; + y[1]=(-4.0-4.0*rp*t-m*t*t)/d; + + if (gt->mode==IIR_STAGE_HIGHPASS) + k=-cos(w*0.5+0.5)/cos(w*0.5-0.5); + else + k=sin(0.5-w*0.5)/sin(0.5+w*0.5); + d=1+y[0]*k-y[1]*k*k; + a[0]=(x[0]-x[1]*k+x[2]*k*k)/d; + a[1]=(-2.0*x[0]*k+x[1]+x[1]*k*k-2.0*x[2]*k)/d; + a[2]=(x[0]*k*k-x[1]*k+x[2])/d; + b[0]=(2.0*k+y[0]+y[0]*k*k-2.0*y[1]*k)/d; + b[1]=(-k*k-y[0]*k+y[1])/d; + if(gt->mode==IIR_STAGE_HIGHPASS){ + a[1]=-a[1]; + b[0]=-b[0]; + } + + if(gt->mode==IIR_STAGE_HIGHPASS) + gain=(a[0]-a[1]+a[2])/(1.0+b[0]-b[1]); + else + gain=(a[0]+a[1]+a[2])/(1.0-b[0]-b[1]); + for(i=0;i<3;i++) a[i]/=gain; + + gt->coeff[n][0]=(gliirt)(a[0]); + gt->coeff[n][1]=(gliirt)(a[1]); + gt->coeff[n][2]=(gliirt)(a[2]); + gt->coeff[n][3]=(gliirt)(b[0]); + gt->coeff[n][4]=(gliirt)(b[1]); + + res=0; +_error: + return res; +} + +int chebyshev(iirf_t* iirf, iir_stage_t* gt, int n, int mode, float fc, float pr){ + int i; + + if ( (gt->fc==fc) && (gt->np==n) && (gt->ppr=pr) ) + return -1; + + if (n%2!=0) + return -1; + + if ((mode!=IIR_STAGE_HIGHPASS) && (mode!=IIR_STAGE_LOWPASS)) + return -1; + + fc=CLAMP(fc, 0.0001f, 0.4999f); + + if ((n/2)>gt->nstages) + reset_iirf_t(iirf,gt,n/2); + + gt->ppr=pr; + gt->fc=fc; + gt->np=n; + gt->nstages=n/2; + for(i=0;i + +/* header file for IIR framework */ + +typedef struct iir_stage iir_stage_t; +typedef struct iirf iirf_t; +// defines this to float if your brave and you'll see what happens.. +#define gliirt float +#define CLAMP(x,mi,ma) ( (x < mi) ? mi : ( (x>ma) ? ma : x)) +#ifndef MIN +#define MIN(a, b) ((a)<(b)?(a):(b)) +#endif +#ifndef MAX +#define MAX(a, b) ((a)>(b)?(a):(b)) +#endif +/* alloc zeroed mem, malloc/calloc syntax. */ +#define ALLOC(type) (type *)calloc(1, sizeof(type)) +#define ALLOCN(n, type) (n == 0 ? NULL : (type *)calloc((n), sizeof(type))) + +/* supported filter modes by lib */ +#define IIR_STAGE_LOWPASS 0 +#define IIR_STAGE_HIGHPASS 1 +#define IIR_STAGE_BANDPASS 2 +#define IIR_STAGE_BANDPASS_A 3 + +struct iir_stage { + int np; /* Number of poles */ + int mode; /* Filter mode low/high/bandpass... */ + int availst; /* Number of allocated stages */ + int nstages; /* Number of active filterstages */ + int na; /* number of a coefficients per stage */ + int nb; /* number of b coefficients per stage */ + gliirt fc; /* cutoff/center frequency */ + gliirt bw; /* bandwidth for bandpass */ + gliirt ppr; /* percent of ripple in passband */ + gliirt spr; /* percent of ripple in stopband */ + gliirt **coeff; /* Actual filter coefficients */ +}; + +struct iirf { + gliirt *iring; + gliirt *oring; + int ipos; + int opos; +}; +// allocate ringbuffers for iir calculation +static inline iirf_t* init_iirf_t(iir_stage_t* gt) { + int i; + iirf_t* iirf=ALLOCN(gt->availst,iirf_t); + + for(i=0;iavailst;i++){ + iirf[i].iring=ALLOCN(gt->na,gliirt); + iirf[i].oring=ALLOCN(gt->nb+1,gliirt); + iirf[i].ipos=0; + iirf[i].opos=0; + } + + return iirf; +}; + +static inline void free_iirf_t(iirf_t* iirf, iir_stage_t* gt) { + int i; + for(i=0;iavailst;i++){ + if (iirf[i].iring) free(iirf[i].iring); + if (iirf[i].oring) free(iirf[i].oring); + } + if (iirf) free(iirf); +}; + +static inline void reset_iirf_t(iirf_t* iirf, iir_stage_t* gt, int n) { + int i; + for(i=0;ina); + memset(iirf[i].oring, 0, sizeof(gliirt)*(gt->nb+1)); + } +}; + +iir_stage_t *init_iir_stage(int mode, int nstages, int na, int nb); +void combine_iir_stages(int mode, iir_stage_t* gt, iir_stage_t *first, iir_stage_t *second, int upf, int ups); +void free_iir_stage(iir_stage_t *gt); +void calc_2polebandpass(iirf_t* iirf, iir_stage_t* gt, float fc, float bw, long sample_rate); +// for chebyshev we need iir stages with na=3, nb=2 +// na are the forward coefficients +// nb are the recursive coefficients +int chebyshev(iirf_t* iirf, iir_stage_t* gt, int n, int mode, float fc, float pr); + +/* calculate butterworth coefficients + * coefficient calculation taken from http://musicdsp.org/showArchiveComment.php?ArchiveID=38 + * mode = 0 -> lowpass + * mode !=0 -> highpass + * + * f -> cutoff frequency + * r -> resonance + */ + +static inline void butterworth_stage(iir_stage_t *gt, int mode, float f, float r, long sample_rate) +{ + float c, a1, a2, a3, b1, b2; + + /* lowpass coefficients */ + + if (mode==0) { + c = 1.0f / tan(M_PI * f / sample_rate ) ; + + a1 = 1.0f / ( 1.0f + r * c + c * c); + a2 = 2.0f * a1; + a3 = a1; + b1 = -2.0f * ( 1.0f - c*c) * a1; + b2 = -( 1.0f - r * c + c * c) * a1; + } else { + /* highpass coefficients */ + c = tan(M_PI * f / sample_rate ); + + a1 = 1.0f / ( 1.0f + r * c + c * c); + a2 = -2.0f*a1; + a3 = a1; + b1 = -2.0f * ( c*c - 1.0f) * a1; + b2 = -( 1.0f - r * c + c * c) * a1; + } + + gt->fc = f; + gt->nstages = 1; + + gt->coeff[0][0] = a1; + gt->coeff[0][1] = a2; + gt->coeff[0][2] = a3; + gt->coeff[0][3] = b1; + gt->coeff[0][4] = b2; +}; + +/* process function */ +static inline void iir_process_buffer(iirf_t* iirf, iir_stage_t* gt, const float *indata, float *outdata, const long numSampsToProcess, int add) { + long pos; + int i,nb,nt,j,z,ipos,opos; + + if(gt->nstages==0) { + if (indata==outdata) + return; + memcpy(outdata, indata, numSampsToProcess*sizeof(float)); + return; + } + + nb=gt->nb+1; + nt=gt->na+gt->nb; + + ipos = iirf[0].ipos; + opos = iirf[0].opos; + + if (add==0) + for(pos=0; posnstages;i++){ + if (i>0) + iirf[i].iring[ipos]=iirf[i-1].oring[opos]; + iirf[i].oring[opos]=0.0; + /* y[n]=a0*x[n]+a1*x[n-1]+... */ + z=ipos; + for(j=0;jna;j++){ + if(z==-1) + z=gt->na-1; + iirf[i].oring[opos]+=gt->coeff[i][j]*iirf[i].iring[z--]; + } + /* y[n]=y[n]+b1*y[n-1]+b2*y[n-2]+... */ + z=opos-1; + for(j=gt->na;jnb; + iirf[i].oring[opos]+=gt->coeff[i][j]*iirf[i].oring[z--]; + } + } + /* No matter if we process it in place */ + outdata[pos]=(float)iirf[gt->nstages-1].oring[opos]; + + /* Adjust ringbuffers */ + ipos++; + if (ipos==gt->na) + ipos=0; + opos++; + if (opos==nb) + opos=0; + } + else + for(pos=0; posnstages;i++){ + if (i>0) + iirf[i].iring[ipos]=iirf[i-1].oring[opos]; + iirf[i].oring[opos]=0.0; + /* y[n]=a0*x[n]+a1*x[n-1]+... */ + z=ipos; + for(j=0;jna;j++){ + if(z==-1) + z=gt->na-1; + iirf[i].oring[opos]+=gt->coeff[i][j]*iirf[i].iring[z--]; + } + /* y[n]=y[n]+b1*y[n-1]+b2*y[n-2]+... */ + z=opos-1; + for(j=gt->na;jnb; + iirf[i].oring[opos]+=gt->coeff[i][j]*iirf[i].oring[z--]; + } + } + /* Now it matters if we process it in place */ + outdata[pos]+=(float)iirf[gt->nstages-1].oring[opos]; + + /* Adjust ringbuffers */ + ipos++; + if (ipos==gt->na) + ipos=0; + opos++; + if (opos==nb) + opos=0; + } + + iirf[0].ipos = ipos; + iirf[0].opos = opos; +}; + +/* process function for 3a and 2b coeffs */ +static inline void iir_process_buffer_1s_5(iirf_t* iirf, iir_stage_t* gt, const float *indata, + float *outdata, const long numSampsToProcess, int add) { + long pos; + + if (add==0) + for(pos=0; poscoeff[0][0]*iirf[0].iring[2] + + gt->coeff[0][1]*iirf[0].iring[1] + + gt->coeff[0][2]*iirf[0].iring[0] + + gt->coeff[0][3]*iirf[0].oring[1] + + gt->coeff[0][4]*iirf[0].oring[0]); + outdata[pos]=(float)iirf[0].oring[2]; + } + else + for(pos=0; poscoeff[0][0]*iirf[0].iring[2] + + gt->coeff[0][1]*iirf[0].iring[1] + + gt->coeff[0][2]*iirf[0].iring[0] + + gt->coeff[0][3]*iirf[0].oring[1] + + gt->coeff[0][4]*iirf[0].oring[0]); + } +}; + +/* process function */ +static inline void iir_process_buffer_ns_5(iirf_t* iirf, iir_stage_t* gt, const float *indata, float *outdata, const long numSampsToProcess, int add) { + long pos; + int i; + + if (add==0) + for(pos=0; poscoeff[0][0]*iirf[0].iring[2] + + gt->coeff[0][1]*iirf[0].iring[1] + + gt->coeff[0][2]*iirf[0].iring[0] + + gt->coeff[0][3]*iirf[0].oring[1] + + gt->coeff[0][4]*iirf[0].oring[0]); + + for(i=1;instages;i++){ + iirf[i].iring[0]=iirf[i].iring[1]; + iirf[i].iring[1]=iirf[i].iring[2]; + iirf[i].iring[2]=iirf[i-1].oring[2]; + + iirf[i].oring[0]=iirf[i].oring[1]; + iirf[i].oring[1]=iirf[i].oring[2]; + /* y[n]=a0*x[n]+a1*x[n-1]+... */ + /* y[n]=y[n]+b1*y[n-1]+b2*y[n-2]+... */ + iirf[i].oring[2] = + flush_to_zero(gt->coeff[i][0]*iirf[i].iring[2] + + gt->coeff[i][1]*iirf[i].iring[1] + + gt->coeff[i][2]*iirf[i].iring[0] + + gt->coeff[i][3]*iirf[i].oring[1] + + gt->coeff[i][4]*iirf[i].oring[0]); + } + /* No matter if we process it in place */ + outdata[pos]=(float)iirf[gt->nstages-1].oring[2]; + } + else + for(pos=0; poscoeff[0][0]*iirf[0].iring[2] + + gt->coeff[0][1]*iirf[0].iring[1] + + gt->coeff[0][2]*iirf[0].iring[0] + + gt->coeff[0][3]*iirf[0].oring[1] + + gt->coeff[0][4]*iirf[0].oring[0]); + + for(i=1;instages;i++){ + iirf[i].iring[0]=iirf[i].iring[1]; + iirf[i].iring[1]=iirf[i].iring[2]; + iirf[i].iring[2]=iirf[i-1].oring[2]; + + iirf[i].oring[0]=iirf[i].oring[1]; + iirf[i].oring[1]=iirf[i].oring[2]; + /* y[n]=a0*x[n]+a1*x[n-1]+... */ + /* y[n]=y[n]+b1*y[n-1]+b2*y[n-2]+... */ + iirf[i].oring[2] = flush_to_zero( + gt->coeff[i][0]*iirf[i].iring[2] + + gt->coeff[i][1]*iirf[i].iring[1] + + gt->coeff[i][2]*iirf[i].iring[0] + + gt->coeff[i][3]*iirf[i].oring[1] + + gt->coeff[i][4]*iirf[i].oring[0]); + } + /* No matter if we process it in place */ + outdata[pos]+=(float)iirf[gt->nstages-1].oring[2]; + } +}; + +#endif diff --git a/plugins/LadspaEffect/swh/util/ls_filter.h b/plugins/LadspaEffect/swh/util/ls_filter.h new file mode 100644 index 000000000..3268d7cf4 --- /dev/null +++ b/plugins/LadspaEffect/swh/util/ls_filter.h @@ -0,0 +1,64 @@ +#ifndef LS_FILTER_H +#define LS_FILTER_H + +#include + +#define FILT_MIDI_2_FREQ(m) (m * 80.0f + 10.0f) +#define FILT_MIDI_2_RESO(m) (m * 0.00787f) + +#define LSF_BW 0.9 +#define LSF_FB 0.9f + +typedef struct { + biquad filt; + biquad bp_filt; + bq_t scale; + bq_t resonance; +} ls_filt; + +typedef enum { + LS_FILT_TYPE_LP = 0, + LS_FILT_TYPE_BP = 1, + LS_FILT_TYPE_HP = 2 +} ls_filt_type; + +static inline void ls_filt_init(ls_filt *f) +{ + biquad_init(&(f->filt)); + biquad_init(&(f->bp_filt)); +} + +static inline void ls_filt_setup(ls_filt *f, ls_filt_type t, bq_t cutoff, + bq_t resonance, bq_t fs) +{ + bp_set_params(&(f->bp_filt), cutoff, 0.7, fs); + + switch(t) { + case LS_FILT_TYPE_LP: + lp_set_params(&(f->filt), cutoff, 1.0 - resonance * LSF_BW, fs); + break; + case LS_FILT_TYPE_BP: + bp_set_params(&(f->filt), cutoff, 1.0 - resonance * LSF_BW, fs); + break; + case LS_FILT_TYPE_HP: + hp_set_params(&(f->filt), cutoff, 1.0 - resonance * LSF_BW, fs); + break; + default: + /* oops, its not a known type - should really happen, but + lets make the output silent just in case */ + lp_set_params(&(f->filt), 1.0, 1.0, fs); + break; + } + + f->scale = 1.0f - resonance * 0.7f; + f->resonance = resonance; +} + +static inline bq_t ls_filt_run(ls_filt *f, bq_t in) +{ + return biquad_run(&(f->filt), in) * f->scale + + biquad_run_fb(&(f->bp_filt), in, f->resonance * LSF_FB) * + f->resonance; +} + +#endif diff --git a/plugins/LadspaEffect/swh/util/pitchscale.c b/plugins/LadspaEffect/swh/util/pitchscale.c new file mode 100644 index 000000000..f443ced03 --- /dev/null +++ b/plugins/LadspaEffect/swh/util/pitchscale.c @@ -0,0 +1,334 @@ +/**************************************************************************** +* +* NAME: smsPitchScale.cp +* VERSION: 1.01 +* HOME URL: http://www.dspdimension.com +* KNOWN BUGS: none +* +* SYNOPSIS: Routine for doing pitch scaling while maintaining +* duration using the Short Time Fourier Transform. +* +* DESCRIPTION: The routine takes a pitchScale factor value which is between 0.5 +* (one octave down) and 2. (one octave up). A value of exactly 1 does not change +* the pitch. numSampsToProcess tells the routine how many samples in indata[0... +* numSampsToProcess-1] should be pitch scaled and moved to outdata[0 ... +* numSampsToProcess-1]. The two buffers can be identical (ie. it can process the +* data in-place). fftFrameLength defines the FFT frame size used for the +* processing. Typical values are 1024, 2048 and 4096. It may be any value <= +* MAX_FFT_FRAME_LENGTH but it MUST be a power of 2. osamp is the STFT +* oversampling factor which also determines the overlap between adjacent STFT +* frames. It should at least be 4 for moderate scaling ratios. A value of 32 is +* recommended for best quality. sampleRate takes the sample rate for the signal +* in unit Hz, ie. 44100 for 44.1 kHz audio. The data passed to the routine in +* indata[] should be in the range [-1.0, 1.0), which is also the output range +* for the data. +* +* COPYRIGHT 1999 Stephan M. Sprenger +* +* The Wide Open License (WOL) +* +* Permission to use, copy, modify, distribute and sell this software and its +* documentation for any purpose is hereby granted without fee, provided that +* the above copyright notice and this license appear in all source copies. +* THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF +* ANY KIND. See http://www.dspguru.com/wol.htm for more information. +* +*****************************************************************************/ + +#include +#include "../config.h" +#include + +#include "pitchscale.h" + +static float ps_in[MAX_FRAME_LENGTH*2], ps_out[MAX_FRAME_LENGTH*2]; +static fft_plan aplan = NULL, splan = NULL; + +void pitch_scale(sbuffers *buffers, const double pitchScale, const long + fftFrameLength, const long osamp, const long numSampsToProcess, + const double sampleRate, const float *indata, float *outdata, + const int adding, const float gain) { +/* + Routine smsPitchScale(). See top of file for explanation Purpose: doing + pitch scaling while maintaining duration using the Short Time Fourier + Transform. Author: (c)1999 Stephan M. Sprenger +*/ + double magn, phase, tmp; + double freqPerBin, expct; + long i,k, qpd, index, inFifoLatency, stepSize, + fftFrameSize2; + double phaseArr[MAX_FRAME_LENGTH]; + float ri[16]; + + float *gInFIFO = buffers->gInFIFO; + float *gOutFIFO = buffers->gOutFIFO; + float *gLastPhase = buffers->gLastPhase; + float *gSumPhase = buffers->gSumPhase; + float *gOutputAccum = buffers->gOutputAccum; + float *gAnaFreq = buffers->gAnaFreq; + float *gAnaMagn = buffers->gAnaMagn; + float *gSynFreq = buffers->gSynFreq; + float *gSynMagn = buffers->gSynMagn; + float *gWindow = buffers->gWindow; + long gRover = buffers->gRover; + + if (aplan == NULL) { + int i; + + for (i=0; i= fftFrameLength) { + gRover = inFifoLatency; + + /* do windowing and store */ + for (k = 0; k < fftFrameLength; k++) { + ps_in[k] = gInFIFO[k] * gWindow[k]; + } + + /* As long as we have not yet collected enough data just read in */ + + /* ***************** ANALYSIS ******************* */ + /* do transform */ +#ifdef FFTW3 + fftwf_execute(aplan); +#else + rfftw_one(aplan, ps_in, ps_out); +#endif + + /* this is the analysis step */ + + /* Hard math first, we can 3dnow this */ + for (k = 1; k <= fftFrameSize2; k+=8) { + float *mb = &gAnaMagn[k]; + + ri[0] = ps_out[k]; + ri[2] = ps_out[k+1]; + ri[4] = ps_out[k+2]; + ri[6] = ps_out[k+3]; + ri[8] = ps_out[k+4]; + ri[10] = ps_out[k+5]; + ri[12] = ps_out[k+6]; + ri[14] = ps_out[k+7]; + + ri[1] = ps_out[fftFrameLength - k]; + ri[3] = ps_out[fftFrameLength - (k + 1)]; + ri[5] = ps_out[fftFrameLength - (k + 2)]; + ri[7] = ps_out[fftFrameLength - (k + 3)]; + ri[9] = ps_out[fftFrameLength - (k + 4)]; + ri[11] = ps_out[fftFrameLength - (k + 5)]; + ri[13] = ps_out[fftFrameLength - (k + 6)]; + ri[15] = ps_out[fftFrameLength - (k + 7)]; + + /* compute magnitude and phase. */ +#ifdef ACCEL_3DNOW +#warning Using processor specific 3DNow! accelerations + __asm__ __volatile__ ( + " \n\ + femms \n\ + movq (%%eax), %%mm0 \n\ + movq 8(%%eax), %%mm1 \n\ + movq 16(%%eax), %%mm2 \n\ + movq 24(%%eax), %%mm3 \n\ + movq 32(%%eax), %%mm4 \n\ + movq 40(%%eax), %%mm5 \n\ + movq 48(%%eax), %%mm6 \n\ + movq 56(%%eax), %%mm7 \n\ + # do the squares and add \n\ + pfmul %%mm0, %%mm0 \n\ + pfacc %%mm0, %%mm0 \n\ + pfmul %%mm1, %%mm1 \n\ + pfacc %%mm1, %%mm1 \n\ + pfmul %%mm2, %%mm2 \n\ + pfacc %%mm2, %%mm2 \n\ + pfmul %%mm3, %%mm3 \n\ + pfacc %%mm3, %%mm3 \n\ + pfmul %%mm4, %%mm4 \n\ + pfacc %%mm4, %%mm4 \n\ + pfmul %%mm5, %%mm5 \n\ + pfacc %%mm5, %%mm5 \n\ + pfmul %%mm6, %%mm6 \n\ + pfacc %%mm6, %%mm6 \n\ + pfmul %%mm7, %%mm7 \n\ + pfacc %%mm7, %%mm7 \n\ + # Recip square roots. \n\ + pfrsqrt %%mm0, %%mm0 \n\ + pfrsqrt %%mm1, %%mm1 \n\ + pfrsqrt %%mm2, %%mm2 \n\ + pfrsqrt %%mm3, %%mm3 \n\ + pfrsqrt %%mm4, %%mm4 \n\ + pfrsqrt %%mm5, %%mm5 \n\ + pfrsqrt %%mm6, %%mm6 \n\ + pfrsqrt %%mm7, %%mm7 \n\ + pfrcp %%mm0, %%mm0 \n\ + pfrcp %%mm1, %%mm1 \n\ + pfrcp %%mm2, %%mm2 \n\ + pfrcp %%mm3, %%mm3 \n\ + pfrcp %%mm4, %%mm4 \n\ + pfrcp %%mm5, %%mm5 \n\ + pfrcp %%mm6, %%mm6 \n\ + pfrcp %%mm7, %%mm7 \n\ + # ship em out \n\ + movd %%mm0, (%%edx) \n\ + movd %%mm1, 4(%%edx) \n\ + movd %%mm2, 8(%%edx) \n\ + movd %%mm3, 12(%%edx) \n\ + movd %%mm4, 16(%%edx) \n\ + movd %%mm5, 20(%%edx) \n\ + movd %%mm6, 24(%%edx) \n\ + movd %%mm7, 28(%%edx) \n\ + femms \n\ + " + : + : "a" (ri), "d" (mb) + : "memory"); + + +#else + mb[0] = sqrt(ri[0]*ri[0]+ ri[1]*ri[1]); + mb[1] = sqrt(ri[2]*ri[2] + ri[3]*ri[3]); + mb[2] = sqrt(ri[4]*ri[4] + ri[5]*ri[5]); + mb[3] = sqrt(ri[6]*ri[6] + ri[7]*ri[7]); +#endif + + phaseArr[k] = atan2(ri[1], ri[0]); + phaseArr[k+1] = atan2(ri[3], ri[2]); + phaseArr[k+2] = atan2(ri[5], ri[4]); + phaseArr[k+3] = atan2(ri[7], ri[6]); + phaseArr[k+4] = atan2(ri[9], ri[8]); + phaseArr[k+5] = atan2(ri[11], ri[10]); + phaseArr[k+6] = atan2(ri[13], ri[12]); + phaseArr[k+7] = atan2(ri[15], ri[14]); + } + + for (k = 1; k <= fftFrameSize2; k++) { + + /* compute phase difference */ + tmp = phaseArr[k] - gLastPhase[k]; + gLastPhase[k] = phaseArr[k]; + + /* subtract expected phase difference */ + tmp -= (double)k*expct; + + /* map delta phase into +/- Pi interval */ + qpd = tmp/M_PI; + if (qpd >= 0) qpd += qpd&1; + else qpd -= qpd&1; + tmp -= M_PI*(double)qpd; + + /* get deviation from bin frequency from the +/- Pi interval */ + tmp = osamp*tmp/(2.0f*M_PI); + + /* compute the k-th partials' true frequency */ + tmp = (double)k*freqPerBin + tmp*freqPerBin; + + /* store magnitude and true frequency in analysis arrays */ + gAnaFreq[k] = tmp; + + } + + /* ***************** PROCESSING ******************* */ + /* this does the actual pitch scaling */ + memset(gSynMagn, 0, fftFrameLength*sizeof(float)); + memset(gSynFreq, 0, fftFrameLength*sizeof(float)); + for (k = 0; k <= fftFrameSize2; k++) { + index = k/pitchScale; + if (index <= fftFrameSize2) { + /* new bin overrides existing if magnitude is higher */ + if (gAnaMagn[index] > gSynMagn[k]) { + gSynMagn[k] = gAnaMagn[index]; + gSynFreq[k] = gAnaFreq[index] * pitchScale; + } + + /* fill empty bins with nearest neighbour */ + + if ((gSynFreq[k] == 0.) && (k > 0)) { + gSynFreq[k] = gSynFreq[k-1]; + gSynMagn[k] = gSynMagn[k-1]; + } + } + } + + + /* ***************** SYNTHESIS ******************* */ + /* this is the synthesis step */ + for (k = 1; k <= fftFrameSize2; k++) { + + /* get magnitude and true frequency from synthesis arrays */ + magn = gSynMagn[k]; + tmp = gSynFreq[k]; + + /* subtract bin mid frequency */ + tmp -= (double)k*freqPerBin; + + /* get bin deviation from freq deviation */ + tmp /= freqPerBin; + + /* take osamp into account */ + tmp = 2.*M_PI*tmp/osamp; + + /* add the overlap phase advance back in */ + tmp += (double)k*expct; + + /* accumulate delta phase to get bin phase */ + gSumPhase[k] += tmp; + phase = gSumPhase[k]; + + ps_in[k] = magn*cosf(phase); + ps_in[fftFrameLength - k] = magn*sinf(phase); + } + + /* do inverse transform */ +#ifdef FFTW3 + fftwf_execute(splan); +#else + rfftw_one(splan, ps_in, ps_out); +#endif + + /* do windowing and add to output accumulator */ + for(k=0; k < fftFrameLength; k++) { + gOutputAccum[k] += 2.0f*gWindow[k]*ps_out[k]/(fftFrameSize2*osamp); + } + for (k = 0; k < stepSize; k++) gOutFIFO[k] = gOutputAccum[k]; + + /* shift accumulator */ + memmove(gOutputAccum, gOutputAccum+stepSize, fftFrameLength*sizeof(float)); + + /* move input FIFO */ + for (k = 0; k < inFifoLatency; k++) gInFIFO[k] = gInFIFO[k+stepSize]; + } + } + + buffers->gRover = gRover; +} diff --git a/plugins/LadspaEffect/swh/util/pitchscale.h b/plugins/LadspaEffect/swh/util/pitchscale.h new file mode 100644 index 000000000..7ca6631fa --- /dev/null +++ b/plugins/LadspaEffect/swh/util/pitchscale.h @@ -0,0 +1,49 @@ +#ifndef PITCHSCALE_H +#define PITCHSCALE_H + +#include + +#ifdef FFTW3 + +#include + +typedef fftwf_plan fft_plan; +typedef float fftw_real; + +#else + +#ifdef EXPLICIT_S +#include +#else +#include +#endif //EXPLICIT_S + +typedef rfftw_plan fft_plan; + +#endif //FFTW3 + +typedef struct { + float *gInFIFO; + float *gOutFIFO; + float *gLastPhase; + float *gSumPhase; + float *gOutputAccum; + float *gAnaFreq; + float *gAnaMagn; + float *gSynFreq; + float *gSynMagn; + float *gWindow; + long gRover; +} sbuffers; + +#define MAX_FRAME_LENGTH 4096 + +#define true 1 +#define false 0 + +void pitch_scale(sbuffers *buffers, const double pitchScale, const long + fftFrameLength, const long osamp, const long numSampsToProcess, + const double sampleRate, const float *indata, float *outdata, + const int adding, const float gain); + +#endif diff --git a/plugins/LadspaEffect/swh/util/rms.c b/plugins/LadspaEffect/swh/util/rms.c new file mode 100644 index 000000000..cca1ce665 --- /dev/null +++ b/plugins/LadspaEffect/swh/util/rms.c @@ -0,0 +1,25 @@ +#include +#include "rms.h" + +rms_env *rms_env_new() +{ + rms_env *new = (rms_env *)calloc(1, sizeof(rms_env)); + + return new; +} + +void rms_env_reset(rms_env *r) +{ + unsigned int i; + + for (i=0; ibuffer[i] = 0.0f; + } + r->pos = 0; + r->sum = 0.0f; +} + +void rms_env_free(rms_env *r) +{ + free(r); +} diff --git a/plugins/LadspaEffect/swh/util/rms.h b/plugins/LadspaEffect/swh/util/rms.h new file mode 100644 index 000000000..efaee6745 --- /dev/null +++ b/plugins/LadspaEffect/swh/util/rms.h @@ -0,0 +1,35 @@ +#ifndef _RMS_H +#define _RMS_H + +#include + +#define RMS_BUF_SIZE 64 + +typedef struct { + float buffer[RMS_BUF_SIZE]; + unsigned int pos; + float sum; +} rms_env; + +rms_env *rms_env_new(); + +static inline float rms_env_process(rms_env *r, float x); + +void rms_env_reset(rms_env *r); + +void rms_env_free(rms_env *r); + +inline static float rms_env_process(rms_env *r, const float x) +{ + r->sum -= r->buffer[r->pos]; + r->sum += x; + if (r->sum < 1.0e-6) { + r->sum = 0.0f; + } + r->buffer[r->pos] = x; + r->pos = (r->pos + 1) & (RMS_BUF_SIZE - 1); + + return sqrt(r->sum / (float)RMS_BUF_SIZE); +} + +#endif diff --git a/plugins/LadspaEffect/swh/util/waveguide_nl.h b/plugins/LadspaEffect/swh/util/waveguide_nl.h new file mode 100644 index 000000000..64a322278 --- /dev/null +++ b/plugins/LadspaEffect/swh/util/waveguide_nl.h @@ -0,0 +1,148 @@ +#ifndef WAVEGUIDE_NL_H +#define WAVEGUIDE_NL_H + +#include +#include + +typedef struct { + int size; + float *buffer[2]; + int ptr; + int delay; + float fc; + float lp[2]; + float a1a; + float a1b; + float zm1[2]; +} waveguide_nl; + +waveguide_nl *waveguide_nl_new(int size, float fc, float da, float db) +{ + waveguide_nl *wg = malloc(sizeof(waveguide_nl)); + wg->size = size; + wg->delay = size; + wg->buffer[0] = calloc(size, sizeof(float)); + wg->buffer[1] = calloc(size, sizeof(float)); + wg->ptr = 0; + wg->fc = fc; + wg->lp[0] = 0.0f; + wg->lp[1] = 0.0f; + wg->zm1[0] = 0.0f; + wg->zm1[1] = 0.0f; + wg->a1a = (1.0f - da) / (1.0f + da); + wg->a1b = (1.0f - db) / (1.0f + db); + + return wg; +} + +inline void waveguide_nl_reset(waveguide_nl *wg) +{ + memset(wg->buffer[0], 0, wg->size * sizeof(float)); + memset(wg->buffer[1], 0, wg->size * sizeof(float)); + wg->lp[0] = 0.0f; + wg->lp[1] = 0.0f; + wg->zm1[0] = 0.0f; + wg->zm1[1] = 0.0f; +} + +inline void waveguide_nl_free(waveguide_nl *wg) +{ + if (!wg) { + return; + } + free(wg->buffer[0]); + free(wg->buffer[1]); + free(wg); +} + +inline void waveguide_nl_set_delay(waveguide_nl *wg, int delay) +{ + if (delay > wg->size) { + wg->delay = wg->size; + } else if (delay < 1) { + wg->delay = 1; + } else { + wg->delay = delay; + } +} + +inline void waveguide_nl_set_fc(waveguide_nl *wg, float fc) +{ + wg->fc = fc; +} + +inline void waveguide_nl_set_ap(waveguide_nl *wg, float da, float db) +{ + wg->a1a = (1.0f - da) / (1.0f + da); + wg->a1b = (1.0f - db) / (1.0f + db); +} + +inline void waveguide_nl_process_lin(waveguide_nl *wg, float in0, float in1, float *out0, float *out1) +{ + float tmp; + + *out0 = wg->buffer[0][(wg->ptr + wg->delay) % wg->size]; + *out0 = wg->lp[0] * (wg->fc - 1.0f) + wg->fc * *out0; + wg->lp[0] = *out0; + tmp = *out0 * -(wg->a1a) + wg->zm1[0]; + wg->zm1[0] = tmp * wg->a1a + *out0; + *out0 = tmp; + + *out1 = wg->buffer[1][(wg->ptr + wg->delay) % wg->size]; + *out1 = wg->lp[1] * (wg->fc - 1.0f) + wg->fc * *out1; + wg->lp[1] = *out1; + tmp = *out1 * -(wg->a1a) + wg->zm1[1]; + wg->zm1[1] = tmp * wg->a1a + *out1; + *out1 = tmp; + + wg->buffer[0][wg->ptr] = in0; + wg->buffer[1][wg->ptr] = in1; + wg->ptr--; + if (wg->ptr < 0) { + wg->ptr += wg->size; + } +} + +inline void waveguide_nl_process(waveguide_nl *wg, float in0, float in1, float *out0, float *out1) +{ + float tmp; + float a1; + float b; + + *out0 = wg->buffer[0][(wg->ptr + wg->delay) % wg->size]; + *out0 = wg->lp[0] * (wg->fc - 1.0f) + wg->fc * *out0; + wg->lp[0] = *out0; + b = (*out0 + 1.0) * 6.0f; + if (b > 1.0f) { + b = 1.0f; + } else if (b < 0.0f) { + b = 0.0f; + } + a1 = b * wg->a1a + (1.0f - b) * wg->a1b; + tmp = *out0 * -a1 + wg->zm1[0]; + wg->zm1[0] = tmp * a1 + *out0; + *out0 = tmp; + + *out1 = wg->buffer[1][(wg->ptr + wg->delay) % wg->size]; + *out1 = wg->lp[1] * (wg->fc - 1.0f) + wg->fc * *out1; + wg->lp[1] = *out1; + b = (*out1 + 1.0) * 6.0f; + if (b > 1.0f) { + b = 1.0f; + } else if (b < 0.0f) { + b = 0.0f; + } + a1 = b * wg->a1a + (1.0f - b) * wg->a1b; + tmp = *out1 * -a1 + wg->zm1[1]; + wg->zm1[1] = tmp * a1 + *out1; + *out1 = tmp; + + wg->buffer[0][wg->ptr] = in0; + wg->buffer[1][wg->ptr] = in1; + wg->ptr--; + if (wg->ptr < 0) { + wg->ptr += wg->size; + } +} + +#endif diff --git a/plugins/LadspaEffect/swh/valve_1209.c b/plugins/LadspaEffect/swh/valve_1209.c new file mode 100644 index 000000000..8e4dd6f13 --- /dev/null +++ b/plugins/LadspaEffect/swh/valve_1209.c @@ -0,0 +1,343 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + +#line 10 "valve_1209.xml" + +#include "ladspa-util.h" + +#define VALVE_Q_P 0 +#define VALVE_DIST_P 1 +#define VALVE_INPUT 2 +#define VALVE_OUTPUT 3 + +static LADSPA_Descriptor *valveDescriptor = NULL; + +typedef struct { + LADSPA_Data *q_p; + LADSPA_Data *dist_p; + LADSPA_Data *input; + LADSPA_Data *output; + LADSPA_Data itm1; + LADSPA_Data otm1; + LADSPA_Data run_adding_gain; +} Valve; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return valveDescriptor; + default: + return NULL; + } +} + +static void activateValve(LADSPA_Handle instance) { + Valve *plugin_data = (Valve *)instance; + LADSPA_Data itm1 = plugin_data->itm1; + LADSPA_Data otm1 = plugin_data->otm1; +#line 21 "valve_1209.xml" + itm1 = 0.0f; + otm1 = 0.0f; + plugin_data->itm1 = itm1; + plugin_data->otm1 = otm1; + +} + +static void cleanupValve(LADSPA_Handle instance) { + free(instance); +} + +static void connectPortValve( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + Valve *plugin; + + plugin = (Valve *)instance; + switch (port) { + case VALVE_Q_P: + plugin->q_p = data; + break; + case VALVE_DIST_P: + plugin->dist_p = data; + break; + case VALVE_INPUT: + plugin->input = data; + break; + case VALVE_OUTPUT: + plugin->output = data; + break; + } +} + +static LADSPA_Handle instantiateValve( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + Valve *plugin_data = (Valve *)malloc(sizeof(Valve)); + plugin_data->run_adding_gain = 1.0f; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runValve(LADSPA_Handle instance, unsigned long sample_count) { + Valve *plugin_data = (Valve *)instance; + + /* Distortion level (float value) */ + const LADSPA_Data q_p = *(plugin_data->q_p); + + /* Distortion character (float value) */ + const LADSPA_Data dist_p = *(plugin_data->dist_p); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + LADSPA_Data itm1 = plugin_data->itm1; + LADSPA_Data otm1 = plugin_data->otm1; + +#line 26 "valve_1209.xml" + unsigned long pos; + LADSPA_Data fx; + + const float q = q_p - 0.999f; + const float dist = dist_p * 40.0f + 0.1f; + + if (q == 0.0f) { + for (pos = 0; pos < sample_count; pos++) { + if (input[pos] == q) { + fx = 1.0f / dist; + } else { + fx = input[pos] / (1.0f - f_exp(-dist * input[pos])); + } + otm1 = 0.999f * otm1 + fx - itm1; + round_to_zero(&otm1); + itm1 = fx; + buffer_write(output[pos], otm1); + } + } else { + for (pos = 0; pos < sample_count; pos++) { + if (input[pos] == q) { + fx = 1.0f / dist + q / (1.0f - f_exp(dist * q)); + } else { + fx = (input[pos] - q) / + (1.0f - f_exp(-dist * (input[pos] - q))) + + q / (1.0f - f_exp(dist * q)); + } + otm1 = 0.999f * otm1 + fx - itm1; + round_to_zero(&otm1); + itm1 = fx; + buffer_write(output[pos], otm1); + } + } + + plugin_data->itm1 = itm1; + plugin_data->otm1 = otm1; +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainValve(LADSPA_Handle instance, LADSPA_Data gain) { + ((Valve *)instance)->run_adding_gain = gain; +} + +static void runAddingValve(LADSPA_Handle instance, unsigned long sample_count) { + Valve *plugin_data = (Valve *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Distortion level (float value) */ + const LADSPA_Data q_p = *(plugin_data->q_p); + + /* Distortion character (float value) */ + const LADSPA_Data dist_p = *(plugin_data->dist_p); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + LADSPA_Data itm1 = plugin_data->itm1; + LADSPA_Data otm1 = plugin_data->otm1; + +#line 26 "valve_1209.xml" + unsigned long pos; + LADSPA_Data fx; + + const float q = q_p - 0.999f; + const float dist = dist_p * 40.0f + 0.1f; + + if (q == 0.0f) { + for (pos = 0; pos < sample_count; pos++) { + if (input[pos] == q) { + fx = 1.0f / dist; + } else { + fx = input[pos] / (1.0f - f_exp(-dist * input[pos])); + } + otm1 = 0.999f * otm1 + fx - itm1; + round_to_zero(&otm1); + itm1 = fx; + buffer_write(output[pos], otm1); + } + } else { + for (pos = 0; pos < sample_count; pos++) { + if (input[pos] == q) { + fx = 1.0f / dist + q / (1.0f - f_exp(dist * q)); + } else { + fx = (input[pos] - q) / + (1.0f - f_exp(-dist * (input[pos] - q))) + + q / (1.0f - f_exp(dist * q)); + } + otm1 = 0.999f * otm1 + fx - itm1; + round_to_zero(&otm1); + itm1 = fx; + buffer_write(output[pos], otm1); + } + } + + plugin_data->itm1 = itm1; + plugin_data->otm1 = otm1; +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + valveDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (valveDescriptor) { + valveDescriptor->UniqueID = 1209; + valveDescriptor->Label = "valve"; + valveDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + valveDescriptor->Name = + D_("Valve saturation"); + valveDescriptor->Maker = + "Steve Harris "; + valveDescriptor->Copyright = + "GPL"; + valveDescriptor->PortCount = 4; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(4, + sizeof(LADSPA_PortDescriptor)); + valveDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(4, + sizeof(LADSPA_PortRangeHint)); + valveDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(4, sizeof(char*)); + valveDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Distortion level */ + port_descriptors[VALVE_Q_P] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[VALVE_Q_P] = + D_("Distortion level"); + port_range_hints[VALVE_Q_P].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[VALVE_Q_P].LowerBound = 0; + port_range_hints[VALVE_Q_P].UpperBound = 1; + + /* Parameters for Distortion character */ + port_descriptors[VALVE_DIST_P] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[VALVE_DIST_P] = + D_("Distortion character"); + port_range_hints[VALVE_DIST_P].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[VALVE_DIST_P].LowerBound = 0; + port_range_hints[VALVE_DIST_P].UpperBound = 1; + + /* Parameters for Input */ + port_descriptors[VALVE_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[VALVE_INPUT] = + D_("Input"); + port_range_hints[VALVE_INPUT].HintDescriptor = 0; + + /* Parameters for Output */ + port_descriptors[VALVE_OUTPUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[VALVE_OUTPUT] = + D_("Output"); + port_range_hints[VALVE_OUTPUT].HintDescriptor = 0; + + valveDescriptor->activate = activateValve; + valveDescriptor->cleanup = cleanupValve; + valveDescriptor->connect_port = connectPortValve; + valveDescriptor->deactivate = NULL; + valveDescriptor->instantiate = instantiateValve; + valveDescriptor->run = runValve; + valveDescriptor->run_adding = runAddingValve; + valveDescriptor->set_run_adding_gain = setRunAddingGainValve; + } +} + +void _fini() { + if (valveDescriptor) { + free((LADSPA_PortDescriptor *)valveDescriptor->PortDescriptors); + free((char **)valveDescriptor->PortNames); + free((LADSPA_PortRangeHint *)valveDescriptor->PortRangeHints); + free(valveDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/valve_rect_1405.c b/plugins/LadspaEffect/swh/valve_rect_1405.c new file mode 100644 index 000000000..3c971118f --- /dev/null +++ b/plugins/LadspaEffect/swh/valve_rect_1405.c @@ -0,0 +1,412 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + +#line 10 "valve_rect_1405.xml" + +#include "ladspa-util.h" + +#define VALVERECT_SAG 0 +#define VALVERECT_DIST_P 1 +#define VALVERECT_INPUT 2 +#define VALVERECT_OUTPUT 3 + +static LADSPA_Descriptor *valveRectDescriptor = NULL; + +typedef struct { + LADSPA_Data *sag; + LADSPA_Data *dist_p; + LADSPA_Data *input; + LADSPA_Data *output; + unsigned int apos; + float * avg; + int avg_size; + float avg_sizer; + float avgs; + float lp1tm1; + float lp2tm1; + LADSPA_Data run_adding_gain; +} ValveRect; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return valveRectDescriptor; + default: + return NULL; + } +} + +static void activateValveRect(LADSPA_Handle instance) { + ValveRect *plugin_data = (ValveRect *)instance; + unsigned int apos = plugin_data->apos; + float *avg = plugin_data->avg; + int avg_size = plugin_data->avg_size; + float avg_sizer = plugin_data->avg_sizer; + float avgs = plugin_data->avgs; + float lp1tm1 = plugin_data->lp1tm1; + float lp2tm1 = plugin_data->lp2tm1; +#line 36 "valve_rect_1405.xml" + memset(avg, 0, avg_size * sizeof(float)); + avgs = 0.0f; + apos = 0; + lp1tm1 = 0.0f; + lp2tm1 = 0.0f; + plugin_data->apos = apos; + plugin_data->avg = avg; + plugin_data->avg_size = avg_size; + plugin_data->avg_sizer = avg_sizer; + plugin_data->avgs = avgs; + plugin_data->lp1tm1 = lp1tm1; + plugin_data->lp2tm1 = lp2tm1; + +} + +static void cleanupValveRect(LADSPA_Handle instance) { +#line 44 "valve_rect_1405.xml" + ValveRect *plugin_data = (ValveRect *)instance; + free(plugin_data->avg); + free(instance); +} + +static void connectPortValveRect( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + ValveRect *plugin; + + plugin = (ValveRect *)instance; + switch (port) { + case VALVERECT_SAG: + plugin->sag = data; + break; + case VALVERECT_DIST_P: + plugin->dist_p = data; + break; + case VALVERECT_INPUT: + plugin->input = data; + break; + case VALVERECT_OUTPUT: + plugin->output = data; + break; + } +} + +static LADSPA_Handle instantiateValveRect( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + ValveRect *plugin_data = (ValveRect *)malloc(sizeof(ValveRect)); + unsigned int apos; + float *avg = NULL; + int avg_size; + float avg_sizer; + float avgs; + float lp1tm1; + float lp2tm1; + +#line 19 "valve_rect_1405.xml" + // Number of samples in averaging buffer + avg_size = s_rate / 9; + // Reciprocal of obove + avg_sizer = 9.0f / (float)s_rate; + // Averaging buffer + avg = calloc(avg_size, sizeof(float)); + // Sum of samples in averaging buffer + avgs = 0.0f; + // Position in averaging buffer + apos = 0; + // Last value in lowpass 1 + lp1tm1 = 0.0f; + // Last value in lowpass 2 + lp2tm1 = 0.0f; + + plugin_data->apos = apos; + plugin_data->avg = avg; + plugin_data->avg_size = avg_size; + plugin_data->avg_sizer = avg_sizer; + plugin_data->avgs = avgs; + plugin_data->lp1tm1 = lp1tm1; + plugin_data->lp2tm1 = lp2tm1; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runValveRect(LADSPA_Handle instance, unsigned long sample_count) { + ValveRect *plugin_data = (ValveRect *)instance; + + /* Sag level (float value) */ + const LADSPA_Data sag = *(plugin_data->sag); + + /* Distortion (float value) */ + const LADSPA_Data dist_p = *(plugin_data->dist_p); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + unsigned int apos = plugin_data->apos; + float * avg = plugin_data->avg; + int avg_size = plugin_data->avg_size; + float avg_sizer = plugin_data->avg_sizer; + float avgs = plugin_data->avgs; + float lp1tm1 = plugin_data->lp1tm1; + float lp2tm1 = plugin_data->lp2tm1; + +#line 48 "valve_rect_1405.xml" + unsigned long pos; + float q, x, fx; + const float dist = dist_p * 40.0f + 0.1f; + + for (pos = 0; pos < sample_count; pos++) { + x = fabs(input[pos]); + if (x > lp1tm1) { + lp1tm1 = x; + } else { + lp1tm1 = 0.9999f * lp1tm1 + 0.0001f * x; + } + + avgs -= avg[apos]; + avgs += lp1tm1; + avg[apos++] = lp1tm1; + apos %= avg_size; + + lp2tm1 = 0.999f * lp2tm1 + avgs*avg_sizer * 0.001f; + q = lp1tm1 * sag - lp2tm1 * 1.02f - 1.0f; + if (q > -0.01f) { + q = -0.01f; + } else if (q < -1.0f) { + q = -1.0f; + } + + if (input[pos] == q) { + fx = 1.0f / dist + q / (1.0f - f_exp(dist * q)); + } else { + fx = (input[pos] - q) / + (1.0f - f_exp(-dist * (input[pos] - q))) + + q / (1.0f - f_exp(dist * q)); + } + + buffer_write(output[pos], fx); + } + + plugin_data->lp1tm1 = lp1tm1; + plugin_data->lp2tm1 = lp2tm1; + plugin_data->avgs = avgs; + plugin_data->apos = apos; +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainValveRect(LADSPA_Handle instance, LADSPA_Data gain) { + ((ValveRect *)instance)->run_adding_gain = gain; +} + +static void runAddingValveRect(LADSPA_Handle instance, unsigned long sample_count) { + ValveRect *plugin_data = (ValveRect *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Sag level (float value) */ + const LADSPA_Data sag = *(plugin_data->sag); + + /* Distortion (float value) */ + const LADSPA_Data dist_p = *(plugin_data->dist_p); + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + unsigned int apos = plugin_data->apos; + float * avg = plugin_data->avg; + int avg_size = plugin_data->avg_size; + float avg_sizer = plugin_data->avg_sizer; + float avgs = plugin_data->avgs; + float lp1tm1 = plugin_data->lp1tm1; + float lp2tm1 = plugin_data->lp2tm1; + +#line 48 "valve_rect_1405.xml" + unsigned long pos; + float q, x, fx; + const float dist = dist_p * 40.0f + 0.1f; + + for (pos = 0; pos < sample_count; pos++) { + x = fabs(input[pos]); + if (x > lp1tm1) { + lp1tm1 = x; + } else { + lp1tm1 = 0.9999f * lp1tm1 + 0.0001f * x; + } + + avgs -= avg[apos]; + avgs += lp1tm1; + avg[apos++] = lp1tm1; + apos %= avg_size; + + lp2tm1 = 0.999f * lp2tm1 + avgs*avg_sizer * 0.001f; + q = lp1tm1 * sag - lp2tm1 * 1.02f - 1.0f; + if (q > -0.01f) { + q = -0.01f; + } else if (q < -1.0f) { + q = -1.0f; + } + + if (input[pos] == q) { + fx = 1.0f / dist + q / (1.0f - f_exp(dist * q)); + } else { + fx = (input[pos] - q) / + (1.0f - f_exp(-dist * (input[pos] - q))) + + q / (1.0f - f_exp(dist * q)); + } + + buffer_write(output[pos], fx); + } + + plugin_data->lp1tm1 = lp1tm1; + plugin_data->lp2tm1 = lp2tm1; + plugin_data->avgs = avgs; + plugin_data->apos = apos; +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + valveRectDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (valveRectDescriptor) { + valveRectDescriptor->UniqueID = 1405; + valveRectDescriptor->Label = "valveRect"; + valveRectDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + valveRectDescriptor->Name = + D_("Valve rectifier"); + valveRectDescriptor->Maker = + "Steve Harris "; + valveRectDescriptor->Copyright = + "GPL"; + valveRectDescriptor->PortCount = 4; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(4, + sizeof(LADSPA_PortDescriptor)); + valveRectDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(4, + sizeof(LADSPA_PortRangeHint)); + valveRectDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(4, sizeof(char*)); + valveRectDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Sag level */ + port_descriptors[VALVERECT_SAG] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[VALVERECT_SAG] = + D_("Sag level"); + port_range_hints[VALVERECT_SAG].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[VALVERECT_SAG].LowerBound = 0; + port_range_hints[VALVERECT_SAG].UpperBound = 1; + + /* Parameters for Distortion */ + port_descriptors[VALVERECT_DIST_P] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[VALVERECT_DIST_P] = + D_("Distortion"); + port_range_hints[VALVERECT_DIST_P].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[VALVERECT_DIST_P].LowerBound = 0; + port_range_hints[VALVERECT_DIST_P].UpperBound = 1; + + /* Parameters for Input */ + port_descriptors[VALVERECT_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[VALVERECT_INPUT] = + D_("Input"); + port_range_hints[VALVERECT_INPUT].HintDescriptor = 0; + + /* Parameters for Output */ + port_descriptors[VALVERECT_OUTPUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[VALVERECT_OUTPUT] = + D_("Output"); + port_range_hints[VALVERECT_OUTPUT].HintDescriptor = 0; + + valveRectDescriptor->activate = activateValveRect; + valveRectDescriptor->cleanup = cleanupValveRect; + valveRectDescriptor->connect_port = connectPortValveRect; + valveRectDescriptor->deactivate = NULL; + valveRectDescriptor->instantiate = instantiateValveRect; + valveRectDescriptor->run = runValveRect; + valveRectDescriptor->run_adding = runAddingValveRect; + valveRectDescriptor->set_run_adding_gain = setRunAddingGainValveRect; + } +} + +void _fini() { + if (valveRectDescriptor) { + free((LADSPA_PortDescriptor *)valveRectDescriptor->PortDescriptors); + free((char **)valveRectDescriptor->PortNames); + free((LADSPA_PortRangeHint *)valveRectDescriptor->PortRangeHints); + free(valveRectDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/vocoder_1337.c b/plugins/LadspaEffect/swh/vocoder_1337.c new file mode 100644 index 000000000..e5b4d24bd --- /dev/null +++ b/plugins/LadspaEffect/swh/vocoder_1337.c @@ -0,0 +1,463 @@ +/* vocoder.c + Version 0.3 + + LADSPA Unique ID: 1337 + + Version 0.31 + Added stereo output, renamed input/output ports, added, + added a control for stereo balance + + Version 0.3 + Added support for changing bands in real time 2003-12-09 + + Version 0.2 + Adapted to LADSPA by Josh Green + 15.6.2001 (for the LinuxTag 2001!) + + Original program can be found at: + http://www.sirlab.de/linux/ + Author: Achim Settelmeier + + Adapted to LMMS by Hexasoft (hexasoft.corp@free.fr) + + + Licence: GPL + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +*/ + + +/* not familiar with WINDOWS stuff. Saw this in other sources, it should be needed */ + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + + +/*****************************************************************************/ +/* general includes */ +#include +#include +#include +#include + +/*****************************************************************************/ +/* LADSPA headers */ +#include + +/*****************************************************************************/ + + +#define LADSPA_UNIQUE_ID 1337 + +#define MAX_BANDS 16 /* max 16 bandsn should be increased */ +#define AMPLIFIER 16.0 + +struct bandpass +{ + LADSPA_Data c, f, att; + + LADSPA_Data freq; + LADSPA_Data low1, low2; + LADSPA_Data mid1, mid2; + LADSPA_Data high1, high2; + LADSPA_Data y; +}; + +struct bands_out{ + LADSPA_Data decay; + LADSPA_Data oldval; + LADSPA_Data level; /* 0.0 - 1.0 level of this output band */ +}; + +const LADSPA_Data decay_table[] = +{ + 1/100.0, + 1/100.0, 1/100.0, 1/100.0, + 1/125.0, 1/125.0, 1/125.0, + 1/166.0, 1/166.0, 1/166.0, + 1/200.0, 1/200.0, 1/200.0, + 1/250.0, 1/250.0, 1/250.0 +}; + +/* The port numbers for the plugin: */ + +#define PORT_FORMANT 0 /* the track to "vocodify */ +#define PORT_CARRIER 1 /* the track to control 1st track */ +#define PORT_OUTPUT 2 /* left output */ +#define PORT_OUTPUT2 3 /* right output */ +#define CTRL_BANDCOUNT 4 /* selected # of bands to use */ +#define CTRL_PAN 5 /* stereo balance for outputs */ +#define CTRL_BAND1LVL 6 /* start of bands level */ + +#define PORT_COUNT 6 + MAX_BANDS /* bands level */ + + +/* useful macros */ +#undef CLAMP +#define CLAMP(x, low, high) (((x) > (high)) ? (high) : (((x) < (low)) ? (low) : (x))) + +/* Instance data for the vocoder plugin */ +typedef struct { + LADSPA_Data SampleRate; + + int num_bands; /* current number of bands */ + float mainvol; /* main volume */ + + struct bandpass bands_formant[MAX_BANDS]; /* one structure per band */ + struct bandpass bands_carrier[MAX_BANDS]; /* one structure per band */ + struct bands_out bands_out[MAX_BANDS]; /* one structure per band */ + + /* Ports */ + + LADSPA_Data * portFormant; /* Formant signal port data location */ + LADSPA_Data * portCarrier; /* Carrier signal port data location */ + LADSPA_Data * portOutput; /* Output audio port data location */ + LADSPA_Data * portOutput2; /* Output audio port data location (copy of previous one) */ + LADSPA_Data * ctrlPan; /* PAN for output */ + LADSPA_Data * ctrlBandCount; /* Band count control */ + LADSPA_Data * ctrlBandLevels[MAX_BANDS]; /* level controls for each band */ + +} VocoderInstance; + +/*****************************************************************************/ + +/* Construct a new plugin instance. */ +LADSPA_Handle +instantiateVocoder(const LADSPA_Descriptor * Descriptor, + unsigned long SampleRate) { + VocoderInstance * vocoder; + + vocoder = (VocoderInstance *)malloc(sizeof(VocoderInstance)); + + if (vocoder == NULL) + return NULL; + + vocoder->SampleRate = (LADSPA_Data)SampleRate; + vocoder->num_bands = -1; + + return vocoder; +} + +/*****************************************************************************/ + +/* Initialise and activate a plugin instance. */ +void +activateVocoder(LADSPA_Handle Instance) { + VocoderInstance *vocoder = (VocoderInstance *)Instance; + int i; + + vocoder->mainvol = 1.0 * AMPLIFIER; + + for (i = 0; i < MAX_BANDS; i++) + vocoder->bands_out[i].oldval = 0.0; +} + +/*****************************************************************************/ + +/* Connect a port to a data location. */ +void +connectPortToVocoder(LADSPA_Handle Instance, + unsigned long Port, + LADSPA_Data * DataLocation) { + + VocoderInstance * vocoder; + + vocoder = (VocoderInstance *)Instance; + switch (Port) { + case PORT_FORMANT: /* formant port? */ + vocoder->portFormant = DataLocation; + break; + case PORT_CARRIER: /* carrier port? */ + vocoder->portCarrier = DataLocation; + break; + case PORT_OUTPUT: /* output port? */ + vocoder->portOutput = DataLocation; + break; + case PORT_OUTPUT2: /* output port? */ + vocoder->portOutput2 = DataLocation; + break; + case CTRL_BANDCOUNT: /* band count control? */ + vocoder->ctrlBandCount = DataLocation; + break; + case CTRL_PAN: /* Pan control? */ + vocoder->ctrlPan = DataLocation; + break; + default: /* a band level control? */ + if (Port >= CTRL_BAND1LVL && Port < CTRL_BAND1LVL + MAX_BANDS) + vocoder->ctrlBandLevels[Port - CTRL_BAND1LVL] = DataLocation; + break; + } +} + +/*****************************************************************************/ + +// vocoder_do_bandpasses /*fold00*/ +void vocoder_do_bandpasses(struct bandpass *bands, LADSPA_Data sample, + VocoderInstance *vocoder) +{ + int i; + for (i=0; i < vocoder->num_bands; i++) + { + bands[i].high1 = sample - bands[i].f * bands[i].mid1 - bands[i].low1; + bands[i].mid1 += bands[i].high1 * bands[i].c; + bands[i].low1 += bands[i].mid1; + + bands[i].high2 = bands[i].low1 - bands[i].f * bands[i].mid2 + - bands[i].low2; + bands[i].mid2 += bands[i].high2 * bands[i].c; + bands[i].low2 += bands[i].mid2; + bands[i].y = bands[i].high2 * bands[i].att; + } +} + +/* Run a vocoder instance for a block of SampleCount samples. */ +void +runVocoder(LADSPA_Handle Instance, + unsigned long SampleCount) +{ + VocoderInstance *vocoder = (VocoderInstance *)Instance; + int i, j, numbands, pan; + float a; + LADSPA_Data x, c; + float fl, fr; + + numbands = (int)(*vocoder->ctrlBandCount); + if (numbands < 1 || numbands > MAX_BANDS) numbands = MAX_BANDS; + + /* initialize bandpass information if num_bands control has changed, + or on first run */ + if (vocoder->num_bands != numbands) + { + vocoder->num_bands = numbands; + + for(i=0; i < numbands; i++) + { + memset(&vocoder->bands_formant[i], 0, sizeof(struct bandpass)); + + a = 16.0 * i/(double)numbands; // stretch existing bands + + if (a < 4.0) + vocoder->bands_formant[i].freq = 150 + 420 * a / 4.0; + else + vocoder->bands_formant[i].freq = 600 * pow (1.23, a - 4.0); + + c = vocoder->bands_formant[i].freq * 2 * M_PI / vocoder->SampleRate; + vocoder->bands_formant[i].c = c * c; + + vocoder->bands_formant[i].f = 0.4/c; + vocoder->bands_formant[i].att = + 1/(6.0 + ((exp (vocoder->bands_formant[i].freq + / vocoder->SampleRate) - 1) * 10)); + + memcpy(&vocoder->bands_carrier[i], + &vocoder->bands_formant[i], sizeof(struct bandpass)); + + vocoder->bands_out[i].decay = decay_table[(int)a]; + vocoder->bands_out[i].level = + CLAMP (*vocoder->ctrlBandLevels[i], 0.0, 1.0); + } + } + else /* get current values of band level controls */ + { + for (i = 0; i < numbands; i++) + vocoder->bands_out[i].level = CLAMP (*vocoder->ctrlBandLevels[i], + 0.0, 1.0); + } + + for (i=0; i < SampleCount; i++) + { + vocoder_do_bandpasses (vocoder->bands_carrier, + vocoder->portCarrier[i], vocoder); + vocoder_do_bandpasses (vocoder->bands_formant, + vocoder->portFormant[i], vocoder); + + vocoder->portOutput[i] = 0.0; + vocoder->portOutput2[i] = 0.0; + for (j=0; j < numbands; j++) + { + vocoder->bands_out[j].oldval = vocoder->bands_out[j].oldval + + (fabs (vocoder->bands_formant[j].y) + - vocoder->bands_out[j].oldval) + * vocoder->bands_out[j].decay; + x = vocoder->bands_carrier[j].y * vocoder->bands_out[j].oldval; + vocoder->portOutput[i] += x * vocoder->bands_out[j].level; + vocoder->portOutput2[i] += x * vocoder->bands_out[j].level; + } + /* treat paning + main volume */ + pan = (int)(*vocoder->ctrlPan); + fl = fr = 1.; + if (pan != 0) { /* no paning, don't compute useless values */ + if (pan > 0) { /* reduce left */ + fl = (100.-pan)/100.; + } else { + fr = (100.+pan)/100.; + } + } + /* apply volume and paning */ + vocoder->portOutput[i] *= vocoder->mainvol * fl; + vocoder->portOutput2[i] *= vocoder->mainvol * fr; + } +} + + +/*****************************************************************************/ + +/* Throw away a vocoder instance. */ +void +cleanupVocoder(LADSPA_Handle Instance) +{ + VocoderInstance * Vocoder; + Vocoder = (VocoderInstance *)Instance; + free(Vocoder); +} + +/*****************************************************************************/ + +LADSPA_Descriptor * g_psDescriptor = NULL; + +/*****************************************************************************/ + +/* _init() is called automatically when the plugin library is first + loaded. */ +void +_init() { + char ** pcPortNames; + LADSPA_PortDescriptor * piPortDescriptors; + LADSPA_PortRangeHint * psPortRangeHints; + int i; + + g_psDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (g_psDescriptor) { + g_psDescriptor->UniqueID = LADSPA_UNIQUE_ID; + g_psDescriptor->Label = strdup("vocoder-lmms"); + g_psDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; + g_psDescriptor->Name = strdup("Vocoder for LMMS"); + g_psDescriptor->Maker = strdup("Achim Settelmeier (adapted to LADSPA by Josh Green, adapted to LMMS by Hexasoft)"); + g_psDescriptor->Copyright = strdup("GPL"); + g_psDescriptor->PortCount = PORT_COUNT; + piPortDescriptors = (LADSPA_PortDescriptor *)calloc(PORT_COUNT, + sizeof(LADSPA_PortDescriptor)); + g_psDescriptor->PortDescriptors + = (const LADSPA_PortDescriptor *)piPortDescriptors; + piPortDescriptors[PORT_FORMANT] + = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + piPortDescriptors[PORT_CARRIER] + = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + piPortDescriptors[PORT_OUTPUT] + = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + piPortDescriptors[PORT_OUTPUT2] + = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + piPortDescriptors[CTRL_BANDCOUNT] + = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + piPortDescriptors[CTRL_PAN] + = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + + pcPortNames = (char **)calloc(PORT_COUNT, sizeof(char *)); + g_psDescriptor->PortNames = (const char **)pcPortNames; + pcPortNames[PORT_FORMANT] = strdup("Formant-in"); + pcPortNames[PORT_CARRIER] = strdup("Carrier-in"); + pcPortNames[PORT_OUTPUT] = strdup("Output-out"); + pcPortNames[PORT_OUTPUT2] = strdup("Output2-out"); + pcPortNames[CTRL_BANDCOUNT] = strdup("Number of bands"); + pcPortNames[CTRL_PAN] = strdup("Left/Right"); + + psPortRangeHints = ((LADSPA_PortRangeHint *) + calloc(PORT_COUNT, sizeof(LADSPA_PortRangeHint))); + g_psDescriptor->PortRangeHints + = (const LADSPA_PortRangeHint *)psPortRangeHints; + psPortRangeHints[PORT_FORMANT].HintDescriptor = 0; + psPortRangeHints[PORT_CARRIER].HintDescriptor = 0; + psPortRangeHints[PORT_OUTPUT].HintDescriptor = 0; + psPortRangeHints[PORT_OUTPUT2].HintDescriptor = 0; + psPortRangeHints[CTRL_BANDCOUNT].HintDescriptor + = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE + | LADSPA_HINT_INTEGER; + psPortRangeHints[CTRL_BANDCOUNT].LowerBound = 1; + psPortRangeHints[CTRL_BANDCOUNT].UpperBound = MAX_BANDS; + psPortRangeHints[CTRL_PAN].HintDescriptor + = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE + | LADSPA_HINT_INTEGER; + psPortRangeHints[CTRL_PAN].LowerBound = -100; + psPortRangeHints[CTRL_PAN].UpperBound = +100; + + for (i=CTRL_BAND1LVL; i < CTRL_BAND1LVL + MAX_BANDS; i++) + { + piPortDescriptors[i] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + pcPortNames[i] = malloc (sizeof ("Band 99 Level")); + sprintf(pcPortNames[i], "Band %d Level", i - CTRL_BAND1LVL + 1); + psPortRangeHints[i].HintDescriptor + = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; + psPortRangeHints[i].LowerBound = 0; + psPortRangeHints[i].UpperBound = 1; + } + + g_psDescriptor->instantiate = instantiateVocoder; + g_psDescriptor->connect_port = connectPortToVocoder; + g_psDescriptor->activate = activateVocoder; + g_psDescriptor->run = runVocoder; + g_psDescriptor->run_adding = NULL; + g_psDescriptor->set_run_adding_gain = NULL; + g_psDescriptor->deactivate = NULL; + g_psDescriptor->cleanup = cleanupVocoder; + } +} + +/*****************************************************************************/ + +/* _fini() is called automatically when the library is unloaded. */ +void +_fini() { + long lIndex; + if (g_psDescriptor) { + free((char *)g_psDescriptor->Label); + free((char *)g_psDescriptor->Name); + free((char *)g_psDescriptor->Maker); + free((char *)g_psDescriptor->Copyright); + free((LADSPA_PortDescriptor *)g_psDescriptor->PortDescriptors); + for (lIndex = 0; lIndex < g_psDescriptor->PortCount; lIndex++) + free((char *)(g_psDescriptor->PortNames[lIndex])); + free((char **)g_psDescriptor->PortNames); + free((LADSPA_PortRangeHint *)g_psDescriptor->PortRangeHints); + free(g_psDescriptor); + } +} + +/*****************************************************************************/ + +/* Return a descriptor of the requested plugin type. Only one plugin + type is available in this library. */ +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor * +ladspa_descriptor(unsigned long Index) { +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + if (Index == 0) + return g_psDescriptor; + else + return NULL; +} + +/*****************************************************************************/ + +/* EOF */ diff --git a/plugins/LadspaEffect/swh/vynil_1905.c b/plugins/LadspaEffect/swh/vynil_1905.c new file mode 100644 index 000000000..d42f8f6a3 --- /dev/null +++ b/plugins/LadspaEffect/swh/vynil_1905.c @@ -0,0 +1,723 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + +#line 10 "vynil_1905.xml" + +#include +#include + +#include "ladspa-util.h" +#include "util/biquad.h" + +#define BUF_LEN 0.1 +#define CLICK_BUF_SIZE 4096 + +#define df(x) ((sinf(x) + 1.0f) * 0.5f) + +inline static float noise(); +inline static float noise() +{ + static unsigned int randSeed = 23; + randSeed = (randSeed * 196314165) + 907633515; + return randSeed / (float)INT_MAX - 1.0f; +} + +#define VYNIL_YEAR 0 +#define VYNIL_RPM 1 +#define VYNIL_WARP 2 +#define VYNIL_CLICK 3 +#define VYNIL_WEAR 4 +#define VYNIL_IN_L 5 +#define VYNIL_IN_R 6 +#define VYNIL_OUT_L 7 +#define VYNIL_OUT_R 8 + +static LADSPA_Descriptor *vynilDescriptor = NULL; + +typedef struct { + LADSPA_Data *year; + LADSPA_Data *rpm; + LADSPA_Data *warp; + LADSPA_Data *click; + LADSPA_Data *wear; + LADSPA_Data *in_l; + LADSPA_Data *in_r; + LADSPA_Data *out_l; + LADSPA_Data *out_r; + LADSPA_Data *buffer_m; + unsigned int buffer_mask; + unsigned int buffer_pos; + LADSPA_Data *buffer_s; + LADSPA_Data *click_buffer; + fixp16 click_buffer_omega; + fixp16 click_buffer_pos; + float click_gain; + float def; + float def_target; + float fs; + biquad * highp; + biquad * lowp_m; + biquad * lowp_s; + biquad * noise_filt; + float phi; + unsigned int sample_cnt; + LADSPA_Data run_adding_gain; +} Vynil; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return vynilDescriptor; + default: + return NULL; + } +} + +static void activateVynil(LADSPA_Handle instance) { + Vynil *plugin_data = (Vynil *)instance; + LADSPA_Data *buffer_m = plugin_data->buffer_m; + unsigned int buffer_mask = plugin_data->buffer_mask; + unsigned int buffer_pos = plugin_data->buffer_pos; + LADSPA_Data *buffer_s = plugin_data->buffer_s; + LADSPA_Data *click_buffer = plugin_data->click_buffer; + fixp16 click_buffer_omega = plugin_data->click_buffer_omega; + fixp16 click_buffer_pos = plugin_data->click_buffer_pos; + float click_gain = plugin_data->click_gain; + float def = plugin_data->def; + float def_target = plugin_data->def_target; + float fs = plugin_data->fs; + biquad *highp = plugin_data->highp; + biquad *lowp_m = plugin_data->lowp_m; + biquad *lowp_s = plugin_data->lowp_s; + biquad *noise_filt = plugin_data->noise_filt; + float phi = plugin_data->phi; + unsigned int sample_cnt = plugin_data->sample_cnt; +#line 75 "vynil_1905.xml" + memset(buffer_m, 0, sizeof(LADSPA_Data) * (buffer_mask + 1)); + memset(buffer_s, 0, sizeof(LADSPA_Data) * (buffer_mask + 1)); + buffer_pos = 0; + click_buffer_pos.all = 0; + click_buffer_omega.all = 0; + click_gain = 0; + phi = 0.0f; + + lp_set_params(lowp_m, 16000.0, 0.5, fs); + lp_set_params(lowp_s, 16000.0, 0.5, fs); + lp_set_params(highp, 10.0, 0.5, fs); + lp_set_params(noise_filt, 1000.0, 0.5, fs); + plugin_data->buffer_m = buffer_m; + plugin_data->buffer_mask = buffer_mask; + plugin_data->buffer_pos = buffer_pos; + plugin_data->buffer_s = buffer_s; + plugin_data->click_buffer = click_buffer; + plugin_data->click_buffer_omega = click_buffer_omega; + plugin_data->click_buffer_pos = click_buffer_pos; + plugin_data->click_gain = click_gain; + plugin_data->def = def; + plugin_data->def_target = def_target; + plugin_data->fs = fs; + plugin_data->highp = highp; + plugin_data->lowp_m = lowp_m; + plugin_data->lowp_s = lowp_s; + plugin_data->noise_filt = noise_filt; + plugin_data->phi = phi; + plugin_data->sample_cnt = sample_cnt; + +} + +static void cleanupVynil(LADSPA_Handle instance) { +#line 179 "vynil_1905.xml" + Vynil *plugin_data = (Vynil *)instance; + free(plugin_data->buffer_m); + free(plugin_data->buffer_s); + free(plugin_data->click_buffer); + free(plugin_data->lowp_m); + free(plugin_data->lowp_s); + free(plugin_data->noise_filt); + free(instance); +} + +static void connectPortVynil( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + Vynil *plugin; + + plugin = (Vynil *)instance; + switch (port) { + case VYNIL_YEAR: + plugin->year = data; + break; + case VYNIL_RPM: + plugin->rpm = data; + break; + case VYNIL_WARP: + plugin->warp = data; + break; + case VYNIL_CLICK: + plugin->click = data; + break; + case VYNIL_WEAR: + plugin->wear = data; + break; + case VYNIL_IN_L: + plugin->in_l = data; + break; + case VYNIL_IN_R: + plugin->in_r = data; + break; + case VYNIL_OUT_L: + plugin->out_l = data; + break; + case VYNIL_OUT_R: + plugin->out_r = data; + break; + } +} + +static LADSPA_Handle instantiateVynil( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + Vynil *plugin_data = (Vynil *)malloc(sizeof(Vynil)); + LADSPA_Data *buffer_m = NULL; + unsigned int buffer_mask; + unsigned int buffer_pos; + LADSPA_Data *buffer_s = NULL; + LADSPA_Data *click_buffer = NULL; + fixp16 click_buffer_omega; + fixp16 click_buffer_pos; + float click_gain; + float def; + float def_target; + float fs; + biquad *highp = NULL; + biquad *lowp_m = NULL; + biquad *lowp_s = NULL; + biquad *noise_filt = NULL; + float phi; + unsigned int sample_cnt; + +#line 37 "vynil_1905.xml" + unsigned int i; + unsigned int buffer_size; + + fs = (float)s_rate; + buffer_size = 4096; + while (buffer_size < s_rate * BUF_LEN) { + buffer_size *= 2; + } + buffer_m = malloc(sizeof(LADSPA_Data) * buffer_size); + buffer_s = malloc(sizeof(LADSPA_Data) * buffer_size); + buffer_mask = buffer_size - 1; + buffer_pos = 0; + click_gain = 0; + phi = 0.0f; /* Angular phase */ + + click_buffer = malloc(sizeof(LADSPA_Data) * CLICK_BUF_SIZE); + for (i=0; ibuffer_m = buffer_m; + plugin_data->buffer_mask = buffer_mask; + plugin_data->buffer_pos = buffer_pos; + plugin_data->buffer_s = buffer_s; + plugin_data->click_buffer = click_buffer; + plugin_data->click_buffer_omega = click_buffer_omega; + plugin_data->click_buffer_pos = click_buffer_pos; + plugin_data->click_gain = click_gain; + plugin_data->def = def; + plugin_data->def_target = def_target; + plugin_data->fs = fs; + plugin_data->highp = highp; + plugin_data->lowp_m = lowp_m; + plugin_data->lowp_s = lowp_s; + plugin_data->noise_filt = noise_filt; + plugin_data->phi = phi; + plugin_data->sample_cnt = sample_cnt; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runVynil(LADSPA_Handle instance, unsigned long sample_count) { + Vynil *plugin_data = (Vynil *)instance; + + /* Year (float value) */ + const LADSPA_Data year = *(plugin_data->year); + + /* RPM (float value) */ + const LADSPA_Data rpm = *(plugin_data->rpm); + + /* Surface warping (float value) */ + const LADSPA_Data warp = *(plugin_data->warp); + + /* Crackle (float value) */ + const LADSPA_Data click = *(plugin_data->click); + + /* Wear (float value) */ + const LADSPA_Data wear = *(plugin_data->wear); + + /* Input L (array of floats of length sample_count) */ + const LADSPA_Data * const in_l = plugin_data->in_l; + + /* Input R (array of floats of length sample_count) */ + const LADSPA_Data * const in_r = plugin_data->in_r; + + /* Output L (array of floats of length sample_count) */ + LADSPA_Data * const out_l = plugin_data->out_l; + + /* Output R (array of floats of length sample_count) */ + LADSPA_Data * const out_r = plugin_data->out_r; + LADSPA_Data * buffer_m = plugin_data->buffer_m; + unsigned int buffer_mask = plugin_data->buffer_mask; + unsigned int buffer_pos = plugin_data->buffer_pos; + LADSPA_Data * buffer_s = plugin_data->buffer_s; + LADSPA_Data * click_buffer = plugin_data->click_buffer; + fixp16 click_buffer_omega = plugin_data->click_buffer_omega; + fixp16 click_buffer_pos = plugin_data->click_buffer_pos; + float click_gain = plugin_data->click_gain; + float def = plugin_data->def; + float def_target = plugin_data->def_target; + float fs = plugin_data->fs; + biquad * highp = plugin_data->highp; + biquad * lowp_m = plugin_data->lowp_m; + biquad * lowp_s = plugin_data->lowp_s; + biquad * noise_filt = plugin_data->noise_filt; + float phi = plugin_data->phi; + unsigned int sample_cnt = plugin_data->sample_cnt; + +#line 90 "vynil_1905.xml" + unsigned long pos; + float deflec = def; + float deflec_target = def_target; + float src_m, src_s; + + /* angular velocity of platter * 16 */ + const float omega = 960.0f / (rpm * fs); + const float age = (2000 - year) * 0.01f; + const unsigned int click_prob = (age*age*(float)RAND_MAX)/10 + click * 0.02 * RAND_MAX; + const float noise_amp = (click + wear * 0.3f) * 0.12f + (1993.0f - year) * 0.0031f; + const float bandwidth = (year - 1880.0f) * (rpm * 1.9f); + const float noise_bandwidth = bandwidth * (0.25 - wear * 0.02) + click * 200.0 + 300.0; + const float stereo = f_clamp((year - 1940.0f) * 0.02f, 0.0f, 1.0f); + const float wrap_gain = age * 3.1f + 0.05f; + const float wrap_bias = age * 0.1f; + + lp_set_params(lowp_m, bandwidth * (1.0 - wear * 0.86), 2.0, fs); + lp_set_params(lowp_s, bandwidth * (1.0 - wear * 0.89), 2.0, fs); + hp_set_params(highp, (2000-year) * 8.0, 1.5, fs); + lp_set_params(noise_filt, noise_bandwidth, 4.0 + wear * 2.0, fs); + + for (pos = 0; pos < sample_count; pos++) { + unsigned int o1, o2; + float ofs; + + if ((sample_cnt & 15) == 0) { + const float ang = phi * 2.0f * M_PI; + const float w = warp * (2000.0f - year) * 0.01f; + deflec_target = w*df(ang)*0.5f + w*w*df(2.0f*ang)*0.31f + + w*w*w*df(3.0f*ang)*0.129f; + phi += omega; + while (phi > 1.0f) { + phi -= 1.0f; + } + if ((unsigned int)rand() < click_prob) { + click_buffer_omega.all = ((rand() >> 6) + 1000) * rpm; + click_gain = noise_amp * 5.0f * noise(); + } + } + deflec = deflec * 0.1f + deflec_target * 0.9f; + + /* matrix into mid_side representation (this is roughly what stereo + * LPs do) */ + buffer_m[buffer_pos] = in_l[pos] + in_r[pos]; + buffer_s[buffer_pos] = in_l[pos] - in_r[pos]; + + /* cacluate the effects of the surface warping */ + ofs = fs * 0.009f * deflec; + o1 = f_round(floorf(ofs)); + o2 = f_round(ceilf(ofs)); + ofs -= o1; + src_m = LIN_INTERP(ofs, buffer_m[(buffer_pos - o1 - 1) & buffer_mask], buffer_m[(buffer_pos - o2 - 1) & buffer_mask]); + src_s = LIN_INTERP(ofs, buffer_s[(buffer_pos - o1 - 1) & buffer_mask], buffer_s[(buffer_pos - o2 - 1) & buffer_mask]); + + src_m = biquad_run(lowp_m, src_m + click_buffer[click_buffer_pos.part.in & (CLICK_BUF_SIZE - 1)] * click_gain); + + /* waveshaper */ + src_m = LIN_INTERP(age, src_m, sinf(src_m * wrap_gain + wrap_bias)); + + /* output highpass */ + src_m = biquad_run(highp, src_m) + biquad_run(noise_filt, noise()) * noise_amp + click_buffer[click_buffer_pos.part.in & (CLICK_BUF_SIZE - 1)] * click_gain * 0.5f; + + /* stereo seperation filter */ + src_s = biquad_run(lowp_s, src_s) * stereo; + + buffer_write(out_l[pos], (src_s + src_m) * 0.5f); + buffer_write(out_r[pos], (src_m - src_s) * 0.5f); + + /* roll buffer indexes */ + buffer_pos = (buffer_pos + 1) & buffer_mask; + click_buffer_pos.all += click_buffer_omega.all; + if (click_buffer_pos.part.in >= CLICK_BUF_SIZE) { + click_buffer_pos.all = 0; + click_buffer_omega.all = 0; + } + sample_cnt++; + } + + plugin_data->buffer_pos = buffer_pos; + plugin_data->click_buffer_pos = click_buffer_pos; + plugin_data->click_buffer_omega = click_buffer_omega; + plugin_data->click_gain = click_gain; + plugin_data->sample_cnt = sample_cnt; + plugin_data->def_target = deflec_target; + plugin_data->def = deflec; + plugin_data->phi = phi; +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainVynil(LADSPA_Handle instance, LADSPA_Data gain) { + ((Vynil *)instance)->run_adding_gain = gain; +} + +static void runAddingVynil(LADSPA_Handle instance, unsigned long sample_count) { + Vynil *plugin_data = (Vynil *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Year (float value) */ + const LADSPA_Data year = *(plugin_data->year); + + /* RPM (float value) */ + const LADSPA_Data rpm = *(plugin_data->rpm); + + /* Surface warping (float value) */ + const LADSPA_Data warp = *(plugin_data->warp); + + /* Crackle (float value) */ + const LADSPA_Data click = *(plugin_data->click); + + /* Wear (float value) */ + const LADSPA_Data wear = *(plugin_data->wear); + + /* Input L (array of floats of length sample_count) */ + const LADSPA_Data * const in_l = plugin_data->in_l; + + /* Input R (array of floats of length sample_count) */ + const LADSPA_Data * const in_r = plugin_data->in_r; + + /* Output L (array of floats of length sample_count) */ + LADSPA_Data * const out_l = plugin_data->out_l; + + /* Output R (array of floats of length sample_count) */ + LADSPA_Data * const out_r = plugin_data->out_r; + LADSPA_Data * buffer_m = plugin_data->buffer_m; + unsigned int buffer_mask = plugin_data->buffer_mask; + unsigned int buffer_pos = plugin_data->buffer_pos; + LADSPA_Data * buffer_s = plugin_data->buffer_s; + LADSPA_Data * click_buffer = plugin_data->click_buffer; + fixp16 click_buffer_omega = plugin_data->click_buffer_omega; + fixp16 click_buffer_pos = plugin_data->click_buffer_pos; + float click_gain = plugin_data->click_gain; + float def = plugin_data->def; + float def_target = plugin_data->def_target; + float fs = plugin_data->fs; + biquad * highp = plugin_data->highp; + biquad * lowp_m = plugin_data->lowp_m; + biquad * lowp_s = plugin_data->lowp_s; + biquad * noise_filt = plugin_data->noise_filt; + float phi = plugin_data->phi; + unsigned int sample_cnt = plugin_data->sample_cnt; + +#line 90 "vynil_1905.xml" + unsigned long pos; + float deflec = def; + float deflec_target = def_target; + float src_m, src_s; + + /* angular velocity of platter * 16 */ + const float omega = 960.0f / (rpm * fs); + const float age = (2000 - year) * 0.01f; + const unsigned int click_prob = (age*age*(float)RAND_MAX)/10 + click * 0.02 * RAND_MAX; + const float noise_amp = (click + wear * 0.3f) * 0.12f + (1993.0f - year) * 0.0031f; + const float bandwidth = (year - 1880.0f) * (rpm * 1.9f); + const float noise_bandwidth = bandwidth * (0.25 - wear * 0.02) + click * 200.0 + 300.0; + const float stereo = f_clamp((year - 1940.0f) * 0.02f, 0.0f, 1.0f); + const float wrap_gain = age * 3.1f + 0.05f; + const float wrap_bias = age * 0.1f; + + lp_set_params(lowp_m, bandwidth * (1.0 - wear * 0.86), 2.0, fs); + lp_set_params(lowp_s, bandwidth * (1.0 - wear * 0.89), 2.0, fs); + hp_set_params(highp, (2000-year) * 8.0, 1.5, fs); + lp_set_params(noise_filt, noise_bandwidth, 4.0 + wear * 2.0, fs); + + for (pos = 0; pos < sample_count; pos++) { + unsigned int o1, o2; + float ofs; + + if ((sample_cnt & 15) == 0) { + const float ang = phi * 2.0f * M_PI; + const float w = warp * (2000.0f - year) * 0.01f; + deflec_target = w*df(ang)*0.5f + w*w*df(2.0f*ang)*0.31f + + w*w*w*df(3.0f*ang)*0.129f; + phi += omega; + while (phi > 1.0f) { + phi -= 1.0f; + } + if ((unsigned int)rand() < click_prob) { + click_buffer_omega.all = ((rand() >> 6) + 1000) * rpm; + click_gain = noise_amp * 5.0f * noise(); + } + } + deflec = deflec * 0.1f + deflec_target * 0.9f; + + /* matrix into mid_side representation (this is roughly what stereo + * LPs do) */ + buffer_m[buffer_pos] = in_l[pos] + in_r[pos]; + buffer_s[buffer_pos] = in_l[pos] - in_r[pos]; + + /* cacluate the effects of the surface warping */ + ofs = fs * 0.009f * deflec; + o1 = f_round(floorf(ofs)); + o2 = f_round(ceilf(ofs)); + ofs -= o1; + src_m = LIN_INTERP(ofs, buffer_m[(buffer_pos - o1 - 1) & buffer_mask], buffer_m[(buffer_pos - o2 - 1) & buffer_mask]); + src_s = LIN_INTERP(ofs, buffer_s[(buffer_pos - o1 - 1) & buffer_mask], buffer_s[(buffer_pos - o2 - 1) & buffer_mask]); + + src_m = biquad_run(lowp_m, src_m + click_buffer[click_buffer_pos.part.in & (CLICK_BUF_SIZE - 1)] * click_gain); + + /* waveshaper */ + src_m = LIN_INTERP(age, src_m, sinf(src_m * wrap_gain + wrap_bias)); + + /* output highpass */ + src_m = biquad_run(highp, src_m) + biquad_run(noise_filt, noise()) * noise_amp + click_buffer[click_buffer_pos.part.in & (CLICK_BUF_SIZE - 1)] * click_gain * 0.5f; + + /* stereo seperation filter */ + src_s = biquad_run(lowp_s, src_s) * stereo; + + buffer_write(out_l[pos], (src_s + src_m) * 0.5f); + buffer_write(out_r[pos], (src_m - src_s) * 0.5f); + + /* roll buffer indexes */ + buffer_pos = (buffer_pos + 1) & buffer_mask; + click_buffer_pos.all += click_buffer_omega.all; + if (click_buffer_pos.part.in >= CLICK_BUF_SIZE) { + click_buffer_pos.all = 0; + click_buffer_omega.all = 0; + } + sample_cnt++; + } + + plugin_data->buffer_pos = buffer_pos; + plugin_data->click_buffer_pos = click_buffer_pos; + plugin_data->click_buffer_omega = click_buffer_omega; + plugin_data->click_gain = click_gain; + plugin_data->sample_cnt = sample_cnt; + plugin_data->def_target = deflec_target; + plugin_data->def = deflec; + plugin_data->phi = phi; +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + vynilDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (vynilDescriptor) { + vynilDescriptor->UniqueID = 1905; + vynilDescriptor->Label = "vynil"; + vynilDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + vynilDescriptor->Name = + D_("VyNil (Vinyl Effect)"); + vynilDescriptor->Maker = + "Steve Harris "; + vynilDescriptor->Copyright = + "GPL"; + vynilDescriptor->PortCount = 9; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(9, + sizeof(LADSPA_PortDescriptor)); + vynilDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(9, + sizeof(LADSPA_PortRangeHint)); + vynilDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(9, sizeof(char*)); + vynilDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Year */ + port_descriptors[VYNIL_YEAR] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[VYNIL_YEAR] = + D_("Year"); + port_range_hints[VYNIL_YEAR].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MAXIMUM; + port_range_hints[VYNIL_YEAR].LowerBound = 1900; + port_range_hints[VYNIL_YEAR].UpperBound = 1990; + + /* Parameters for RPM */ + port_descriptors[VYNIL_RPM] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[VYNIL_RPM] = + D_("RPM"); + port_range_hints[VYNIL_RPM].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MINIMUM; + port_range_hints[VYNIL_RPM].LowerBound = 33; + port_range_hints[VYNIL_RPM].UpperBound = 78; + + /* Parameters for Surface warping */ + port_descriptors[VYNIL_WARP] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[VYNIL_WARP] = + D_("Surface warping"); + port_range_hints[VYNIL_WARP].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[VYNIL_WARP].LowerBound = 0.0; + port_range_hints[VYNIL_WARP].UpperBound = 1.0; + + /* Parameters for Crackle */ + port_descriptors[VYNIL_CLICK] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[VYNIL_CLICK] = + D_("Crackle"); + port_range_hints[VYNIL_CLICK].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[VYNIL_CLICK].LowerBound = 0.0; + port_range_hints[VYNIL_CLICK].UpperBound = 1.0; + + /* Parameters for Wear */ + port_descriptors[VYNIL_WEAR] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[VYNIL_WEAR] = + D_("Wear"); + port_range_hints[VYNIL_WEAR].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[VYNIL_WEAR].LowerBound = 0.0; + port_range_hints[VYNIL_WEAR].UpperBound = 1.0; + + /* Parameters for Input L */ + port_descriptors[VYNIL_IN_L] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[VYNIL_IN_L] = + D_("Input L"); + port_range_hints[VYNIL_IN_L].HintDescriptor = 0; + + /* Parameters for Input R */ + port_descriptors[VYNIL_IN_R] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[VYNIL_IN_R] = + D_("Input R"); + port_range_hints[VYNIL_IN_R].HintDescriptor = 0; + + /* Parameters for Output L */ + port_descriptors[VYNIL_OUT_L] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[VYNIL_OUT_L] = + D_("Output L"); + port_range_hints[VYNIL_OUT_L].HintDescriptor = 0; + + /* Parameters for Output R */ + port_descriptors[VYNIL_OUT_R] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[VYNIL_OUT_R] = + D_("Output R"); + port_range_hints[VYNIL_OUT_R].HintDescriptor = 0; + + vynilDescriptor->activate = activateVynil; + vynilDescriptor->cleanup = cleanupVynil; + vynilDescriptor->connect_port = connectPortVynil; + vynilDescriptor->deactivate = NULL; + vynilDescriptor->instantiate = instantiateVynil; + vynilDescriptor->run = runVynil; + vynilDescriptor->run_adding = runAddingVynil; + vynilDescriptor->set_run_adding_gain = setRunAddingGainVynil; + } +} + +void _fini() { + if (vynilDescriptor) { + free((LADSPA_PortDescriptor *)vynilDescriptor->PortDescriptors); + free((char **)vynilDescriptor->PortNames); + free((LADSPA_PortRangeHint *)vynilDescriptor->PortRangeHints); + free(vynilDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/wave_terrain_1412.c b/plugins/LadspaEffect/swh/wave_terrain_1412.c new file mode 100644 index 000000000..00c2efef5 --- /dev/null +++ b/plugins/LadspaEffect/swh/wave_terrain_1412.c @@ -0,0 +1,242 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + + +#define WAVETERRAIN_XB 0 +#define WAVETERRAIN_YB 1 +#define WAVETERRAIN_ZB 2 + +static LADSPA_Descriptor *waveTerrainDescriptor = NULL; + +typedef struct { + LADSPA_Data *xb; + LADSPA_Data *yb; + LADSPA_Data *zb; + LADSPA_Data run_adding_gain; +} WaveTerrain; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return waveTerrainDescriptor; + default: + return NULL; + } +} + +static void cleanupWaveTerrain(LADSPA_Handle instance) { + free(instance); +} + +static void connectPortWaveTerrain( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + WaveTerrain *plugin; + + plugin = (WaveTerrain *)instance; + switch (port) { + case WAVETERRAIN_XB: + plugin->xb = data; + break; + case WAVETERRAIN_YB: + plugin->yb = data; + break; + case WAVETERRAIN_ZB: + plugin->zb = data; + break; + } +} + +static LADSPA_Handle instantiateWaveTerrain( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + WaveTerrain *plugin_data = (WaveTerrain *)malloc(sizeof(WaveTerrain)); + plugin_data->run_adding_gain = 1.0f; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runWaveTerrain(LADSPA_Handle instance, unsigned long sample_count) { + WaveTerrain *plugin_data = (WaveTerrain *)instance; + + /* x (array of floats of length sample_count) */ + const LADSPA_Data * const xb = plugin_data->xb; + + /* y (array of floats of length sample_count) */ + const LADSPA_Data * const yb = plugin_data->yb; + + /* z (array of floats of length sample_count) */ + LADSPA_Data * const zb = plugin_data->zb; + +#line 18 "wave_terrain_1412.xml" + unsigned long pos; + float x, y; + + for (pos = 0; pos < sample_count; pos++) { + x = xb[pos]; + y = yb[pos]; + buffer_write(zb[pos], (x - y) * (x - 1.0f) * (x + 1.0f) * (y - 1.0f) * (y + 1.0f) ); + } +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainWaveTerrain(LADSPA_Handle instance, LADSPA_Data gain) { + ((WaveTerrain *)instance)->run_adding_gain = gain; +} + +static void runAddingWaveTerrain(LADSPA_Handle instance, unsigned long sample_count) { + WaveTerrain *plugin_data = (WaveTerrain *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* x (array of floats of length sample_count) */ + const LADSPA_Data * const xb = plugin_data->xb; + + /* y (array of floats of length sample_count) */ + const LADSPA_Data * const yb = plugin_data->yb; + + /* z (array of floats of length sample_count) */ + LADSPA_Data * const zb = plugin_data->zb; + +#line 18 "wave_terrain_1412.xml" + unsigned long pos; + float x, y; + + for (pos = 0; pos < sample_count; pos++) { + x = xb[pos]; + y = yb[pos]; + buffer_write(zb[pos], (x - y) * (x - 1.0f) * (x + 1.0f) * (y - 1.0f) * (y + 1.0f) ); + } +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + waveTerrainDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (waveTerrainDescriptor) { + waveTerrainDescriptor->UniqueID = 1412; + waveTerrainDescriptor->Label = "waveTerrain"; + waveTerrainDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + waveTerrainDescriptor->Name = + D_("Wave Terrain Oscillator"); + waveTerrainDescriptor->Maker = + "Steve Harris "; + waveTerrainDescriptor->Copyright = + "GPL"; + waveTerrainDescriptor->PortCount = 3; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(3, + sizeof(LADSPA_PortDescriptor)); + waveTerrainDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(3, + sizeof(LADSPA_PortRangeHint)); + waveTerrainDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(3, sizeof(char*)); + waveTerrainDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for x */ + port_descriptors[WAVETERRAIN_XB] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[WAVETERRAIN_XB] = + D_("x"); + port_range_hints[WAVETERRAIN_XB].HintDescriptor = 0; + + /* Parameters for y */ + port_descriptors[WAVETERRAIN_YB] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[WAVETERRAIN_YB] = + D_("y"); + port_range_hints[WAVETERRAIN_YB].HintDescriptor = 0; + + /* Parameters for z */ + port_descriptors[WAVETERRAIN_ZB] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[WAVETERRAIN_ZB] = + D_("z"); + port_range_hints[WAVETERRAIN_ZB].HintDescriptor = 0; + + waveTerrainDescriptor->activate = NULL; + waveTerrainDescriptor->cleanup = cleanupWaveTerrain; + waveTerrainDescriptor->connect_port = connectPortWaveTerrain; + waveTerrainDescriptor->deactivate = NULL; + waveTerrainDescriptor->instantiate = instantiateWaveTerrain; + waveTerrainDescriptor->run = runWaveTerrain; + waveTerrainDescriptor->run_adding = runAddingWaveTerrain; + waveTerrainDescriptor->set_run_adding_gain = setRunAddingGainWaveTerrain; + } +} + +void _fini() { + if (waveTerrainDescriptor) { + free((LADSPA_PortDescriptor *)waveTerrainDescriptor->PortDescriptors); + free((char **)waveTerrainDescriptor->PortNames); + free((LADSPA_PortRangeHint *)waveTerrainDescriptor->PortRangeHints); + free(waveTerrainDescriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/xfade_1915.c b/plugins/LadspaEffect/swh/xfade_1915.c new file mode 100644 index 000000000..a8c8dd5bd --- /dev/null +++ b/plugins/LadspaEffect/swh/xfade_1915.c @@ -0,0 +1,615 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + +#line 10 "xfade_1915.xml" + +#include "ladspa-util.h" + +#define XFADE_XFADE 0 +#define XFADE_INPUTLA 1 +#define XFADE_INPUTRA 2 +#define XFADE_INPUTLB 3 +#define XFADE_INPUTRB 4 +#define XFADE_OUTPUTL 5 +#define XFADE_OUTPUTR 6 +#define XFADE4_XFADE 0 +#define XFADE4_INPUTLA 1 +#define XFADE4_INPUTRA 2 +#define XFADE4_INPUTLB 3 +#define XFADE4_INPUTRB 4 +#define XFADE4_OUTPUTLA 5 +#define XFADE4_OUTPUTRA 6 +#define XFADE4_OUTPUTLB 7 +#define XFADE4_OUTPUTRB 8 + +static LADSPA_Descriptor *xfadeDescriptor = NULL; + +typedef struct { + LADSPA_Data *xfade; + LADSPA_Data *inputLA; + LADSPA_Data *inputRA; + LADSPA_Data *inputLB; + LADSPA_Data *inputRB; + LADSPA_Data *outputL; + LADSPA_Data *outputR; + LADSPA_Data run_adding_gain; +} Xfade; + +static LADSPA_Descriptor *xfade4Descriptor = NULL; + +typedef struct { + LADSPA_Data *xfade; + LADSPA_Data *inputLA; + LADSPA_Data *inputRA; + LADSPA_Data *inputLB; + LADSPA_Data *inputRB; + LADSPA_Data *outputLA; + LADSPA_Data *outputRA; + LADSPA_Data *outputLB; + LADSPA_Data *outputRB; + LADSPA_Data run_adding_gain; +} Xfade4; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return xfadeDescriptor; + case 1: + return xfade4Descriptor; + default: + return NULL; + } +} + +static void cleanupXfade(LADSPA_Handle instance) { + free(instance); +} + +static void connectPortXfade( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + Xfade *plugin; + + plugin = (Xfade *)instance; + switch (port) { + case XFADE_XFADE: + plugin->xfade = data; + break; + case XFADE_INPUTLA: + plugin->inputLA = data; + break; + case XFADE_INPUTRA: + plugin->inputRA = data; + break; + case XFADE_INPUTLB: + plugin->inputLB = data; + break; + case XFADE_INPUTRB: + plugin->inputRB = data; + break; + case XFADE_OUTPUTL: + plugin->outputL = data; + break; + case XFADE_OUTPUTR: + plugin->outputR = data; + break; + } +} + +static LADSPA_Handle instantiateXfade( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + Xfade *plugin_data = (Xfade *)malloc(sizeof(Xfade)); + plugin_data->run_adding_gain = 1.0f; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runXfade(LADSPA_Handle instance, unsigned long sample_count) { + Xfade *plugin_data = (Xfade *)instance; + + /* Crossfade (float value) */ + const LADSPA_Data xfade = *(plugin_data->xfade); + + /* Input A left (array of floats of length sample_count) */ + const LADSPA_Data * const inputLA = plugin_data->inputLA; + + /* Input A right (array of floats of length sample_count) */ + const LADSPA_Data * const inputRA = plugin_data->inputRA; + + /* Input B left (array of floats of length sample_count) */ + const LADSPA_Data * const inputLB = plugin_data->inputLB; + + /* Input B right (array of floats of length sample_count) */ + const LADSPA_Data * const inputRB = plugin_data->inputRB; + + /* Output left (array of floats of length sample_count) */ + LADSPA_Data * const outputL = plugin_data->outputL; + + /* Output right (array of floats of length sample_count) */ + LADSPA_Data * const outputR = plugin_data->outputR; + +#line 19 "xfade_1915.xml" + unsigned long pos; + const float coefB = (xfade + 1.0f) * 0.5f; + const float coefA = 1.0f - coefB; + + for (pos = 0; pos < sample_count; pos++) { + buffer_write(outputL[pos], inputLA[pos] * coefA + inputLB[pos] * coefB); + buffer_write(outputR[pos], inputRA[pos] * coefA + inputRB[pos] * coefB); + } +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainXfade(LADSPA_Handle instance, LADSPA_Data gain) { + ((Xfade *)instance)->run_adding_gain = gain; +} + +static void runAddingXfade(LADSPA_Handle instance, unsigned long sample_count) { + Xfade *plugin_data = (Xfade *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Crossfade (float value) */ + const LADSPA_Data xfade = *(plugin_data->xfade); + + /* Input A left (array of floats of length sample_count) */ + const LADSPA_Data * const inputLA = plugin_data->inputLA; + + /* Input A right (array of floats of length sample_count) */ + const LADSPA_Data * const inputRA = plugin_data->inputRA; + + /* Input B left (array of floats of length sample_count) */ + const LADSPA_Data * const inputLB = plugin_data->inputLB; + + /* Input B right (array of floats of length sample_count) */ + const LADSPA_Data * const inputRB = plugin_data->inputRB; + + /* Output left (array of floats of length sample_count) */ + LADSPA_Data * const outputL = plugin_data->outputL; + + /* Output right (array of floats of length sample_count) */ + LADSPA_Data * const outputR = plugin_data->outputR; + +#line 19 "xfade_1915.xml" + unsigned long pos; + const float coefB = (xfade + 1.0f) * 0.5f; + const float coefA = 1.0f - coefB; + + for (pos = 0; pos < sample_count; pos++) { + buffer_write(outputL[pos], inputLA[pos] * coefA + inputLB[pos] * coefB); + buffer_write(outputR[pos], inputRA[pos] * coefA + inputRB[pos] * coefB); + } +} + +static void cleanupXfade4(LADSPA_Handle instance) { + free(instance); +} + +static void connectPortXfade4( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + Xfade4 *plugin; + + plugin = (Xfade4 *)instance; + switch (port) { + case XFADE4_XFADE: + plugin->xfade = data; + break; + case XFADE4_INPUTLA: + plugin->inputLA = data; + break; + case XFADE4_INPUTRA: + plugin->inputRA = data; + break; + case XFADE4_INPUTLB: + plugin->inputLB = data; + break; + case XFADE4_INPUTRB: + plugin->inputRB = data; + break; + case XFADE4_OUTPUTLA: + plugin->outputLA = data; + break; + case XFADE4_OUTPUTRA: + plugin->outputRA = data; + break; + case XFADE4_OUTPUTLB: + plugin->outputLB = data; + break; + case XFADE4_OUTPUTRB: + plugin->outputRB = data; + break; + } +} + +static LADSPA_Handle instantiateXfade4( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + Xfade4 *plugin_data = (Xfade4 *)malloc(sizeof(Xfade4)); + plugin_data->run_adding_gain = 1.0f; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runXfade4(LADSPA_Handle instance, unsigned long sample_count) { + Xfade4 *plugin_data = (Xfade4 *)instance; + + /* Crossfade (float value) */ + const LADSPA_Data xfade = *(plugin_data->xfade); + + /* Input A left (array of floats of length sample_count) */ + const LADSPA_Data * const inputLA = plugin_data->inputLA; + + /* Input A right (array of floats of length sample_count) */ + const LADSPA_Data * const inputRA = plugin_data->inputRA; + + /* Input B left (array of floats of length sample_count) */ + const LADSPA_Data * const inputLB = plugin_data->inputLB; + + /* Input B right (array of floats of length sample_count) */ + const LADSPA_Data * const inputRB = plugin_data->inputRB; + + /* Output A left (array of floats of length sample_count) */ + LADSPA_Data * const outputLA = plugin_data->outputLA; + + /* Output A right (array of floats of length sample_count) */ + LADSPA_Data * const outputRA = plugin_data->outputRA; + + /* Output B left (array of floats of length sample_count) */ + LADSPA_Data * const outputLB = plugin_data->outputLB; + + /* Output B right (array of floats of length sample_count) */ + LADSPA_Data * const outputRB = plugin_data->outputRB; + +#line 19 "xfade_1915.xml" + unsigned long pos; + const float coefB = (xfade + 1.0f) * 0.5f; + const float coefA = 1.0f - coefB; + + for (pos = 0; pos < sample_count; pos++) { + buffer_write(outputLA[pos], inputLA[pos] * coefA); + buffer_write(outputRA[pos], inputRA[pos] * coefA); + buffer_write(outputLB[pos], inputLB[pos] * coefB); + buffer_write(outputRB[pos], inputRB[pos] * coefB); + } +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainXfade4(LADSPA_Handle instance, LADSPA_Data gain) { + ((Xfade4 *)instance)->run_adding_gain = gain; +} + +static void runAddingXfade4(LADSPA_Handle instance, unsigned long sample_count) { + Xfade4 *plugin_data = (Xfade4 *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Crossfade (float value) */ + const LADSPA_Data xfade = *(plugin_data->xfade); + + /* Input A left (array of floats of length sample_count) */ + const LADSPA_Data * const inputLA = plugin_data->inputLA; + + /* Input A right (array of floats of length sample_count) */ + const LADSPA_Data * const inputRA = plugin_data->inputRA; + + /* Input B left (array of floats of length sample_count) */ + const LADSPA_Data * const inputLB = plugin_data->inputLB; + + /* Input B right (array of floats of length sample_count) */ + const LADSPA_Data * const inputRB = plugin_data->inputRB; + + /* Output A left (array of floats of length sample_count) */ + LADSPA_Data * const outputLA = plugin_data->outputLA; + + /* Output A right (array of floats of length sample_count) */ + LADSPA_Data * const outputRA = plugin_data->outputRA; + + /* Output B left (array of floats of length sample_count) */ + LADSPA_Data * const outputLB = plugin_data->outputLB; + + /* Output B right (array of floats of length sample_count) */ + LADSPA_Data * const outputRB = plugin_data->outputRB; + +#line 19 "xfade_1915.xml" + unsigned long pos; + const float coefB = (xfade + 1.0f) * 0.5f; + const float coefA = 1.0f - coefB; + + for (pos = 0; pos < sample_count; pos++) { + buffer_write(outputLA[pos], inputLA[pos] * coefA); + buffer_write(outputRA[pos], inputRA[pos] * coefA); + buffer_write(outputLB[pos], inputLB[pos] * coefB); + buffer_write(outputRB[pos], inputRB[pos] * coefB); + } +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + xfadeDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (xfadeDescriptor) { + xfadeDescriptor->UniqueID = 1915; + xfadeDescriptor->Label = "xfade"; + xfadeDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + xfadeDescriptor->Name = + D_("Crossfade"); + xfadeDescriptor->Maker = + "Steve Harris "; + xfadeDescriptor->Copyright = + "GPL"; + xfadeDescriptor->PortCount = 7; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(7, + sizeof(LADSPA_PortDescriptor)); + xfadeDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(7, + sizeof(LADSPA_PortRangeHint)); + xfadeDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(7, sizeof(char*)); + xfadeDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Crossfade */ + port_descriptors[XFADE_XFADE] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[XFADE_XFADE] = + D_("Crossfade"); + port_range_hints[XFADE_XFADE].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[XFADE_XFADE].LowerBound = -1; + port_range_hints[XFADE_XFADE].UpperBound = 1; + + /* Parameters for Input A left */ + port_descriptors[XFADE_INPUTLA] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[XFADE_INPUTLA] = + D_("Input A left"); + port_range_hints[XFADE_INPUTLA].HintDescriptor = 0; + + /* Parameters for Input A right */ + port_descriptors[XFADE_INPUTRA] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[XFADE_INPUTRA] = + D_("Input A right"); + port_range_hints[XFADE_INPUTRA].HintDescriptor = 0; + + /* Parameters for Input B left */ + port_descriptors[XFADE_INPUTLB] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[XFADE_INPUTLB] = + D_("Input B left"); + port_range_hints[XFADE_INPUTLB].HintDescriptor = 0; + + /* Parameters for Input B right */ + port_descriptors[XFADE_INPUTRB] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[XFADE_INPUTRB] = + D_("Input B right"); + port_range_hints[XFADE_INPUTRB].HintDescriptor = 0; + + /* Parameters for Output left */ + port_descriptors[XFADE_OUTPUTL] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[XFADE_OUTPUTL] = + D_("Output left"); + port_range_hints[XFADE_OUTPUTL].HintDescriptor = 0; + + /* Parameters for Output right */ + port_descriptors[XFADE_OUTPUTR] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[XFADE_OUTPUTR] = + D_("Output right"); + port_range_hints[XFADE_OUTPUTR].HintDescriptor = 0; + + xfadeDescriptor->activate = NULL; + xfadeDescriptor->cleanup = cleanupXfade; + xfadeDescriptor->connect_port = connectPortXfade; + xfadeDescriptor->deactivate = NULL; + xfadeDescriptor->instantiate = instantiateXfade; + xfadeDescriptor->run = runXfade; + xfadeDescriptor->run_adding = runAddingXfade; + xfadeDescriptor->set_run_adding_gain = setRunAddingGainXfade; + } + + xfade4Descriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (xfade4Descriptor) { + xfade4Descriptor->UniqueID = 1917; + xfade4Descriptor->Label = "xfade4"; + xfade4Descriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + xfade4Descriptor->Name = + D_("Crossfade (4 outs)"); + xfade4Descriptor->Maker = + "Steve Harris "; + xfade4Descriptor->Copyright = + "GPL"; + xfade4Descriptor->PortCount = 9; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(9, + sizeof(LADSPA_PortDescriptor)); + xfade4Descriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(9, + sizeof(LADSPA_PortRangeHint)); + xfade4Descriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(9, sizeof(char*)); + xfade4Descriptor->PortNames = + (const char **)port_names; + + /* Parameters for Crossfade */ + port_descriptors[XFADE4_XFADE] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[XFADE4_XFADE] = + D_("Crossfade"); + port_range_hints[XFADE4_XFADE].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[XFADE4_XFADE].LowerBound = -1; + port_range_hints[XFADE4_XFADE].UpperBound = 1; + + /* Parameters for Input A left */ + port_descriptors[XFADE4_INPUTLA] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[XFADE4_INPUTLA] = + D_("Input A left"); + port_range_hints[XFADE4_INPUTLA].HintDescriptor = 0; + + /* Parameters for Input A right */ + port_descriptors[XFADE4_INPUTRA] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[XFADE4_INPUTRA] = + D_("Input A right"); + port_range_hints[XFADE4_INPUTRA].HintDescriptor = 0; + + /* Parameters for Input B left */ + port_descriptors[XFADE4_INPUTLB] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[XFADE4_INPUTLB] = + D_("Input B left"); + port_range_hints[XFADE4_INPUTLB].HintDescriptor = 0; + + /* Parameters for Input B right */ + port_descriptors[XFADE4_INPUTRB] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[XFADE4_INPUTRB] = + D_("Input B right"); + port_range_hints[XFADE4_INPUTRB].HintDescriptor = 0; + + /* Parameters for Output A left */ + port_descriptors[XFADE4_OUTPUTLA] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[XFADE4_OUTPUTLA] = + D_("Output A left"); + port_range_hints[XFADE4_OUTPUTLA].HintDescriptor = 0; + + /* Parameters for Output A right */ + port_descriptors[XFADE4_OUTPUTRA] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[XFADE4_OUTPUTRA] = + D_("Output A right"); + port_range_hints[XFADE4_OUTPUTRA].HintDescriptor = 0; + + /* Parameters for Output B left */ + port_descriptors[XFADE4_OUTPUTLB] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[XFADE4_OUTPUTLB] = + D_("Output B left"); + port_range_hints[XFADE4_OUTPUTLB].HintDescriptor = 0; + + /* Parameters for Output B right */ + port_descriptors[XFADE4_OUTPUTRB] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[XFADE4_OUTPUTRB] = + D_("Output B right"); + port_range_hints[XFADE4_OUTPUTRB].HintDescriptor = 0; + + xfade4Descriptor->activate = NULL; + xfade4Descriptor->cleanup = cleanupXfade4; + xfade4Descriptor->connect_port = connectPortXfade4; + xfade4Descriptor->deactivate = NULL; + xfade4Descriptor->instantiate = instantiateXfade4; + xfade4Descriptor->run = runXfade4; + xfade4Descriptor->run_adding = runAddingXfade4; + xfade4Descriptor->set_run_adding_gain = setRunAddingGainXfade4; + } +} + +void _fini() { + if (xfadeDescriptor) { + free((LADSPA_PortDescriptor *)xfadeDescriptor->PortDescriptors); + free((char **)xfadeDescriptor->PortNames); + free((LADSPA_PortRangeHint *)xfadeDescriptor->PortRangeHints); + free(xfadeDescriptor); + } + if (xfade4Descriptor) { + free((LADSPA_PortDescriptor *)xfade4Descriptor->PortDescriptors); + free((char **)xfade4Descriptor->PortNames); + free((LADSPA_PortRangeHint *)xfade4Descriptor->PortRangeHints); + free(xfade4Descriptor); + } + +} diff --git a/plugins/LadspaEffect/swh/zm1_1428.c b/plugins/LadspaEffect/swh/zm1_1428.c new file mode 100644 index 000000000..048631ebb --- /dev/null +++ b/plugins/LadspaEffect/swh/zm1_1428.c @@ -0,0 +1,243 @@ +#include +#include +#ifndef WIN32 +#include "config.h" +#endif + +#ifdef ENABLE_NLS +#include +#endif + +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 + +#include + +#include "ladspa.h" + +#ifdef WIN32 +#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) +int bIsFirstTime = 1; +void _init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + + +#define ZM1_INPUT 0 +#define ZM1_OUTPUT 1 + +static LADSPA_Descriptor *zm1Descriptor = NULL; + +typedef struct { + LADSPA_Data *input; + LADSPA_Data *output; + LADSPA_Data xm1; + LADSPA_Data run_adding_gain; +} Zm1; + +_WINDOWS_DLL_EXPORT_ +const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { + +#ifdef WIN32 + if (bIsFirstTime) { + _init(); + bIsFirstTime = 0; + } +#endif + switch (index) { + case 0: + return zm1Descriptor; + default: + return NULL; + } +} + +static void activateZm1(LADSPA_Handle instance) { + Zm1 *plugin_data = (Zm1 *)instance; + LADSPA_Data xm1 = plugin_data->xm1; +#line 21 "zm1_1428.xml" + xm1 = 0.0f; + plugin_data->xm1 = xm1; + +} + +static void cleanupZm1(LADSPA_Handle instance) { + free(instance); +} + +static void connectPortZm1( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + Zm1 *plugin; + + plugin = (Zm1 *)instance; + switch (port) { + case ZM1_INPUT: + plugin->input = data; + break; + case ZM1_OUTPUT: + plugin->output = data; + break; + } +} + +static LADSPA_Handle instantiateZm1( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + Zm1 *plugin_data = (Zm1 *)malloc(sizeof(Zm1)); + LADSPA_Data xm1; + +#line 17 "zm1_1428.xml" + xm1 = 0.0f; + + plugin_data->xm1 = xm1; + + return (LADSPA_Handle)plugin_data; +} + +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 + +static void runZm1(LADSPA_Handle instance, unsigned long sample_count) { + Zm1 *plugin_data = (Zm1 *)instance; + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + LADSPA_Data xm1 = plugin_data->xm1; + +#line 25 "zm1_1428.xml" + unsigned long pos; + LADSPA_Data tmp; + + for (pos = 0; pos < sample_count; pos++) { + tmp = input[pos]; + buffer_write(output[pos], xm1); + xm1 = tmp; + } + plugin_data->xm1 = xm1; +} +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING + +#define buffer_write(b, v) (b += (v) * run_adding_gain) +#define RUN_ADDING 1 +#define RUN_REPLACING 0 + +static void setRunAddingGainZm1(LADSPA_Handle instance, LADSPA_Data gain) { + ((Zm1 *)instance)->run_adding_gain = gain; +} + +static void runAddingZm1(LADSPA_Handle instance, unsigned long sample_count) { + Zm1 *plugin_data = (Zm1 *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Input (array of floats of length sample_count) */ + const LADSPA_Data * const input = plugin_data->input; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + LADSPA_Data xm1 = plugin_data->xm1; + +#line 25 "zm1_1428.xml" + unsigned long pos; + LADSPA_Data tmp; + + for (pos = 0; pos < sample_count; pos++) { + tmp = input[pos]; + buffer_write(output[pos], xm1); + xm1 = tmp; + } + plugin_data->xm1 = xm1; +} + +void _init() { + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + +#ifdef ENABLE_NLS +#define D_(s) dgettext(PACKAGE, s) + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + zm1Descriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (zm1Descriptor) { + zm1Descriptor->UniqueID = 1428; + zm1Descriptor->Label = "zm1"; + zm1Descriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + zm1Descriptor->Name = + D_("z-1"); + zm1Descriptor->Maker = + "Steve Harris "; + zm1Descriptor->Copyright = + "GPL"; + zm1Descriptor->PortCount = 2; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(2, + sizeof(LADSPA_PortDescriptor)); + zm1Descriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(2, + sizeof(LADSPA_PortRangeHint)); + zm1Descriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(2, sizeof(char*)); + zm1Descriptor->PortNames = + (const char **)port_names; + + /* Parameters for Input */ + port_descriptors[ZM1_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[ZM1_INPUT] = + D_("Input"); + port_range_hints[ZM1_INPUT].HintDescriptor = 0; + + /* Parameters for Output */ + port_descriptors[ZM1_OUTPUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[ZM1_OUTPUT] = + D_("Output"); + port_range_hints[ZM1_OUTPUT].HintDescriptor = 0; + + zm1Descriptor->activate = activateZm1; + zm1Descriptor->cleanup = cleanupZm1; + zm1Descriptor->connect_port = connectPortZm1; + zm1Descriptor->deactivate = NULL; + zm1Descriptor->instantiate = instantiateZm1; + zm1Descriptor->run = runZm1; + zm1Descriptor->run_adding = runAddingZm1; + zm1Descriptor->set_run_adding_gain = setRunAddingGainZm1; + } +} + +void _fini() { + if (zm1Descriptor) { + free((LADSPA_PortDescriptor *)zm1Descriptor->PortDescriptors); + free((char **)zm1Descriptor->PortNames); + free((LADSPA_PortRangeHint *)zm1Descriptor->PortRangeHints); + free(zm1Descriptor); + } + +} diff --git a/plugins/LadspaEffect/tap/CMakeLists.txt b/plugins/LadspaEffect/tap/CMakeLists.txt new file mode 100644 index 000000000..d88c6990b --- /dev/null +++ b/plugins/LadspaEffect/tap/CMakeLists.txt @@ -0,0 +1,21 @@ +INCLUDE_DIRECTORIES("${CMAKE_SOURCE_DIR}/include") +FILE(GLOB PLUGIN_SOURCES *.c) +SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O3 -Wno-write-strings -fomit-frame-pointer -fno-strict-aliasing -fstrength-reduce -funroll-loops -ffast-math") +FOREACH(_item ${PLUGIN_SOURCES}) + GET_FILENAME_COMPONENT(_plugin "${_item}" NAME_WE) + ADD_LIBRARY("${_plugin}" MODULE "${_item}") + INSTALL(TARGETS "${_plugin}" LIBRARY DESTINATION "${PLUGIN_DIR}/ladspa") + SET_TARGET_PROPERTIES("${_plugin}" PROPERTIES PREFIX "") + IF(LMMS_BUILD_WIN32) + ADD_CUSTOM_COMMAND(TARGET "${_plugin}" POST_BUILD COMMAND "${STRIP}" "\"${CMAKE_CURRENT_BINARY_DIR}/${_plugin}.dll\"") + ENDIF(LMMS_BUILD_WIN32) + IF(LMMS_BUILD_APPLE) + SET_TARGET_PROPERTIES("${_plugin}" PROPERTIES LINK_FLAGS "${LINK_FLAGS} -Bsymbolic -lm") + ELSE(LMMS_BUILD_APPLE) + SET_TARGET_PROPERTIES("${_plugin}" PROPERTIES LINK_FLAGS "${LINK_FLAGS} -shared -Wl,-no-undefined -Wl,-Bsymbolic -lm") + ENDIF(LMMS_BUILD_APPLE) + IF(LMMS_BUILD_LINUX) + SET_TARGET_PROPERTIES("${_plugin}" PROPERTIES LINK_FLAGS "${LINK_FLAGS} -nostartfiles") + ENDIF(LMMS_BUILD_LINUX) +ENDFOREACH(_item ${PLUGIN_SOURCES}) + diff --git a/plugins/LadspaEffect/tap/COPYING b/plugins/LadspaEffect/tap/COPYING new file mode 100644 index 000000000..d60c31a97 --- /dev/null +++ b/plugins/LadspaEffect/tap/COPYING @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/plugins/LadspaEffect/tap/CREDITS b/plugins/LadspaEffect/tap/CREDITS new file mode 100644 index 000000000..a75843108 --- /dev/null +++ b/plugins/LadspaEffect/tap/CREDITS @@ -0,0 +1,66 @@ +The author would like to thank the following people for their help, +support, comments, suggestions, patches etc. + +If you discover yourself in the following list and would like to +remain nameless instead, please write to the author. + +In no particular order: + + +Anand Kumria constantly maintains a Debian +package of this software. + +As the author of the lrdf library, Steve Harris +was kind enough to take a look at the RDF file describing these +plugins. + +Alexander Koenig discovered that the AutoPanner (and +Tremolo) didn't work at very small frequency values, and sent a patch +that became the base of the solution. + +Forrest Cook suggested implementing an AutoPanner as a +new TAP-plugin. + +Nick Lamb suggested using his Demolition +[http://www.ecs.soton.ac.uk/~njl98r/code/ladspa/] program to +sanity-check the TAP-plugins. Demolition proved essential, a must for +any LADSPA plugin developer. It revealed bugs and LADSPA +non-conformancies too many to mention in the TAP-plugins code, which +could be fixed easily this way. + +Linium discovered a bug in EQ and EQ-BW: +the plugins reinitialized themselves on each transport stop, which +resulted in the effect disappearing after every STOP->PLAY. + +As a main Ardour developer, Taybin Rutkin +implemented using RDF metadata to generate drop-down lists in LADSPA +plugin GUIs in Ardour. This made it much easier to create good-looking +and easy to use plugins; in particular TAP Reverberator and TAP +Dynamics are among the "big winners". + +Luke Yelavich sent a patch that cleaned up the +Makefile a bit by introducing the variables CFLAGS and LDFLAGS. + +Jan Depner suggested implementing some kind +of doubler plugin, and he gave me useful pointers about the Midpoint +Displacement Algorithm with which a semi-random series of numbers +following a fractal pattern can be generated. Without him, the TAP +Fractal Doubler would have never been written. He also helped a lot +with the CPU runaway problems in TAP Reverberator, by reporting the +problem and trying out my solutions. + +Maarten Maathuis contributed the Bauer +stereophonic-to-binaural DSP plugin. NOTE: this plugin only existed in +CVS between releases 0.7.0 and 0.7.1; it has been agreed to be removed +from TAP-plugins and released separately. + +Damon Chaplin tracked down issues that +caused problems on 64-bit machines, found uninitialised variables via +Valgrind, and also pinned down long lurking denormal issues. Thanks! + + +And, of course, special thanks to the Ardour [http://ardour.org] and +JACK [http://jackit.sf.net] development teams for their tireless +efforts in creating one of the best Linux audio engineering platforms +(and besides that, the recommended host for these plugins). +TAP-plugins aims to be a very small contribution to this effort. diff --git a/plugins/LadspaEffect/tap/README b/plugins/LadspaEffect/tap/README new file mode 100644 index 000000000..73ae6be2f --- /dev/null +++ b/plugins/LadspaEffect/tap/README @@ -0,0 +1,44 @@ +TAP-plugins (Tom's Audio Processing plugins) +-------------------------------------------- + +AUTHOR: Tom Szilagyi +WEBPAGE: http://tap-plugins.sf.net + + +Welcome! + +TAP-plugins is a bunch of LADSPA plugins for audio processing. It runs +on the GNU/Linux operating system, and possibly other UNIX-like +operating systems. + +LADSPA stands for Linux Audio Developers Simple Plugin API. +Learn more about LADSPA at http://www.ladspa.org + +You need a LADSPA-aware host program to use these plugins. +I recommend using Ardour, which is a professional multichannel hard +disc recorder and digital audio workstation for Linux. These plugins +were developed and tested using Ardour, but they should work with any +LADSPA-capable host. Learn more about Ardour at http://ardour.org + + + +Installation and usage of the plugins is very simple. Please take a +moment to edit the top of the Makefile if you wish to install the +plugins in a directory other than /usr/local/lib/ladspa (the default +place for plugins). A destination directory for RDF metadata is also +set there (defaults to /usr/local/share/ladspa/rdf) which you may also +want to change. Then run "make" and (as root) "make install". No +special packages are needed to compile these plugins, so there is no +./configure script. + +A thorough manual is provided in html format. It is identical to the +project website. There is no need to save that manually, though: it is +provided as a separate package called tap-plugins-doc. After +downloading and untarring it, just open index.html with your favorite +Any Browser to view it. + +Questions, comments, suggestions, bugreports and fixes are always +welcome at: + + +Have fun, turn up the volume and kick the shit out of your neighbours! diff --git a/plugins/LadspaEffect/tap/tap_autopan.c b/plugins/LadspaEffect/tap/tap_autopan.c new file mode 100644 index 000000000..1eda204b0 --- /dev/null +++ b/plugins/LadspaEffect/tap/tap_autopan.c @@ -0,0 +1,361 @@ +/* -*- linux-c -*- + Copyright (C) 2004 Tom Szilagyi + + Patches were received from: + Alexander Koenig + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + $Id: tap_autopan.c,v 1.6 2004/02/21 17:33:36 tszilagyi Exp $ +*/ + + +#include +#include +#include +#include + +#include +#include "tap_utils.h" + +/* The Unique ID of the plugin: */ + +#define ID_STEREO 2146 + +/* The port numbers for the plugin: */ + +#define CONTROL_FREQ 0 +#define CONTROL_DEPTH 1 +#define CONTROL_GAIN 2 +#define INPUT_L 3 +#define INPUT_R 4 +#define OUTPUT_L 5 +#define OUTPUT_R 6 + + +/* Total number of ports */ + +#define PORTCOUNT_STEREO 7 + + +/* cosine table for fast computations */ +LADSPA_Data cos_table[1024]; + + +/* The structure used to hold port connection information and state */ + +typedef struct { + LADSPA_Data * freq; + LADSPA_Data * depth; + LADSPA_Data * gain; + LADSPA_Data * input_L; + LADSPA_Data * input_R; + LADSPA_Data * output_L; + LADSPA_Data * output_R; + unsigned long SampleRate; + LADSPA_Data Phase; + LADSPA_Data run_adding_gain; +} AutoPan; + + + +/* Construct a new plugin instance. */ +LADSPA_Handle +instantiate_AutoPan(const LADSPA_Descriptor * Descriptor, + unsigned long SampleRate) { + + LADSPA_Handle * ptr; + + if ((ptr = malloc(sizeof(AutoPan))) != NULL) { + ((AutoPan *)ptr)->SampleRate = SampleRate; + ((AutoPan *)ptr)->run_adding_gain = 1.0; + return ptr; + } + + return NULL; +} + +void +activate_AutoPan(LADSPA_Handle Instance) { + + AutoPan * ptr; + + ptr = (AutoPan *)Instance; + ptr->Phase = 0.0f; +} + + + +/* Connect a port to a data location. */ +void +connect_port_AutoPan(LADSPA_Handle Instance, + unsigned long Port, + LADSPA_Data * DataLocation) { + + AutoPan * ptr; + + ptr = (AutoPan *)Instance; + switch (Port) { + case CONTROL_FREQ: + ptr->freq = DataLocation; + break; + case CONTROL_DEPTH: + ptr->depth = DataLocation; + break; + case CONTROL_GAIN: + ptr->gain = DataLocation; + break; + case INPUT_L: + ptr->input_L = DataLocation; + break; + case INPUT_R: + ptr->input_R = DataLocation; + break; + case OUTPUT_L: + ptr->output_L = DataLocation; + break; + case OUTPUT_R: + ptr->output_R = DataLocation; + break; + } +} + + + +void +run_AutoPan(LADSPA_Handle Instance, + unsigned long SampleCount) { + + AutoPan * ptr = (AutoPan *)Instance; + + LADSPA_Data * input_L = ptr->input_L; + LADSPA_Data * input_R = ptr->input_R; + LADSPA_Data * output_L = ptr->output_L; + LADSPA_Data * output_R = ptr->output_R; + LADSPA_Data freq = LIMIT(*(ptr->freq),0.0f,20.0f); + LADSPA_Data depth = LIMIT(*(ptr->depth),0.0f,100.0f); + LADSPA_Data gain = db2lin(LIMIT(*(ptr->gain),-70.0f,20.0f)); + unsigned long sample_index; + LADSPA_Data phase_L = 0; + LADSPA_Data phase_R = 0; + + for (sample_index = 0; sample_index < SampleCount; sample_index++) { + phase_L = 1024.0f * freq * sample_index / ptr->SampleRate + ptr->Phase; + while (phase_L >= 1024.0f) + phase_L -= 1024.0f; + phase_R = phase_L + 512.0f; + while (phase_R >= 1024.0f) + phase_R -= 1024.0f; + + *(output_L++) = *(input_L++) * gain * + (1 - 0.5*depth/100 + 0.5 * depth/100 * cos_table[(unsigned long) phase_L]); + *(output_R++) = *(input_R++) * gain * + (1 - 0.5*depth/100 + 0.5 * depth/100 * cos_table[(unsigned long) phase_R]); + } + ptr->Phase = phase_L; + while (ptr->Phase >= 1024.0f) + ptr->Phase -= 1024.0f; +} + + + +void +set_run_adding_gain_AutoPan(LADSPA_Handle Instance, LADSPA_Data gain) { + + AutoPan * ptr; + + ptr = (AutoPan *)Instance; + + ptr->run_adding_gain = gain; +} + + + +void +run_adding_AutoPan(LADSPA_Handle Instance, + unsigned long SampleCount) { + + AutoPan * ptr = (AutoPan *)Instance; + + LADSPA_Data * input_L = ptr->input_L; + LADSPA_Data * input_R = ptr->input_R; + LADSPA_Data * output_L = ptr->output_L; + LADSPA_Data * output_R = ptr->output_R; + LADSPA_Data freq = LIMIT(*(ptr->freq),0.0f,20.0f); + LADSPA_Data depth = LIMIT(*(ptr->depth),0.0f,100.0f); + LADSPA_Data gain = db2lin(LIMIT(*(ptr->gain),-70.0f,20.0f)); + unsigned long sample_index; + LADSPA_Data phase_L = 0; + LADSPA_Data phase_R = 0; + + for (sample_index = 0; sample_index < SampleCount; sample_index++) { + phase_L = 1024.0f * freq * sample_index / ptr->SampleRate + ptr->Phase; + while (phase_L >= 1024.0f) + phase_L -= 1024.0f; + phase_R = phase_L + 512.0f; + while (phase_R >= 1024.0f) + phase_R -= 1024.0f; + + *(output_L++) += *(input_L++) * gain * ptr->run_adding_gain * + (1 - 0.5*depth/100 + 0.5 * depth/100 * cos_table[(unsigned long) phase_L]); + *(output_R++) += *(input_R++) * gain * ptr->run_adding_gain * + (1 - 0.5*depth/100 + 0.5 * depth/100 * cos_table[(unsigned long) phase_R]); + } + ptr->Phase = phase_L; + while (ptr->Phase >= 1024.0f) + ptr->Phase -= 1024.0f; +} + + + + +/* Throw away an AutoPan effect instance. */ +void +cleanup_AutoPan(LADSPA_Handle Instance) { + free(Instance); +} + + + +LADSPA_Descriptor * mono_descriptor = NULL; + + + +/* __attribute__((constructor)) _init() is called automatically when the plugin library is first + loaded. */ +void +__attribute__((constructor)) _init() { + + int i; + char ** port_names; + LADSPA_PortDescriptor * port_descriptors; + LADSPA_PortRangeHint * port_range_hints; + + if ((mono_descriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor))) == NULL) + exit(1); + + for (i = 0; i < 1024; i++) + cos_table[i] = cosf(i * M_PI / 512.0f); + + + mono_descriptor->UniqueID = ID_STEREO; + mono_descriptor->Label = strdup("tap_autopan"); + mono_descriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; + mono_descriptor->Name = strdup("TAP AutoPanner"); + mono_descriptor->Maker = strdup("Tom Szilagyi"); + mono_descriptor->Copyright = strdup("GPL"); + mono_descriptor->PortCount = PORTCOUNT_STEREO; + + if ((port_descriptors = + (LADSPA_PortDescriptor *)calloc(PORTCOUNT_STEREO, sizeof(LADSPA_PortDescriptor))) == NULL) + exit(1); + + mono_descriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; + port_descriptors[CONTROL_FREQ] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_descriptors[CONTROL_DEPTH] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_descriptors[CONTROL_GAIN] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_descriptors[INPUT_L] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_descriptors[INPUT_R] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_descriptors[OUTPUT_L] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_descriptors[OUTPUT_R] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + + if ((port_names = + (char **)calloc(PORTCOUNT_STEREO, sizeof(char *))) == NULL) + exit(1); + + mono_descriptor->PortNames = (const char **)port_names; + port_names[CONTROL_FREQ] = strdup("Frequency [Hz]"); + port_names[CONTROL_DEPTH] = strdup("Depth [%]"); + port_names[CONTROL_GAIN] = strdup("Gain [dB]"); + port_names[INPUT_L] = strdup("Input L"); + port_names[INPUT_R] = strdup("Input R"); + port_names[OUTPUT_L] = strdup("Output L"); + port_names[OUTPUT_R] = strdup("Output R"); + + if ((port_range_hints = + ((LADSPA_PortRangeHint *)calloc(PORTCOUNT_STEREO, sizeof(LADSPA_PortRangeHint)))) == NULL) + exit(1); + + mono_descriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; + port_range_hints[CONTROL_FREQ].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_0); + port_range_hints[CONTROL_DEPTH].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_0); + port_range_hints[CONTROL_GAIN].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_0); + port_range_hints[CONTROL_FREQ].LowerBound = 0; + port_range_hints[CONTROL_FREQ].UpperBound = 20; + port_range_hints[CONTROL_DEPTH].LowerBound = 0; + port_range_hints[CONTROL_DEPTH].UpperBound = 100; + port_range_hints[CONTROL_GAIN].LowerBound = -70; + port_range_hints[CONTROL_GAIN].UpperBound = 20; + port_range_hints[INPUT_L].HintDescriptor = 0; + port_range_hints[INPUT_R].HintDescriptor = 0; + port_range_hints[OUTPUT_L].HintDescriptor = 0; + port_range_hints[OUTPUT_R].HintDescriptor = 0; + mono_descriptor->instantiate = instantiate_AutoPan; + mono_descriptor->connect_port = connect_port_AutoPan; + mono_descriptor->activate = activate_AutoPan; + mono_descriptor->run = run_AutoPan; + mono_descriptor->run_adding = run_adding_AutoPan; + mono_descriptor->set_run_adding_gain = set_run_adding_gain_AutoPan; + mono_descriptor->deactivate = NULL; + mono_descriptor->cleanup = cleanup_AutoPan; +} + + +void +delete_descriptor(LADSPA_Descriptor * descriptor) { + unsigned long index; + if (descriptor) { + free((char *)descriptor->Label); + free((char *)descriptor->Name); + free((char *)descriptor->Maker); + free((char *)descriptor->Copyright); + free((LADSPA_PortDescriptor *)descriptor->PortDescriptors); + for (index = 0; index < descriptor->PortCount; index++) + free((char *)(descriptor->PortNames[index])); + free((char **)descriptor->PortNames); + free((LADSPA_PortRangeHint *)descriptor->PortRangeHints); + free(descriptor); + } +} + + +/* __attribute__((destructor)) _fini() is called automatically when the library is unloaded. */ +void +__attribute__((destructor)) _fini() { + delete_descriptor(mono_descriptor); +} + + +/* Return a descriptor of the requested plugin type. */ +const LADSPA_Descriptor * +ladspa_descriptor(unsigned long Index) { + + switch (Index) { + case 0: + return mono_descriptor; + default: + return NULL; + } +} diff --git a/plugins/LadspaEffect/tap/tap_chorusflanger.c b/plugins/LadspaEffect/tap/tap_chorusflanger.c new file mode 100644 index 000000000..24301e242 --- /dev/null +++ b/plugins/LadspaEffect/tap/tap_chorusflanger.c @@ -0,0 +1,595 @@ +/* -*- linux-c -*- + Copyright (C) 2004 Tom Szilagyi + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + $Id: tap_chorusflanger.c,v 1.3 2004/08/17 09:15:21 tszilagyi Exp $ +*/ + + +#include +#include +#include +#include +#include + +#include +#include "tap_utils.h" + + +/* The Unique ID of the plugin: */ + +#define ID_STEREO 2159 + +/* The port numbers for the plugin: */ + +#define FREQ 0 +#define PHASE 1 +#define DEPTH 2 +#define DELAY 3 +#define CONTOUR 4 +#define DRYLEVEL 5 +#define WETLEVEL 6 +#define INPUT_L 7 +#define INPUT_R 8 +#define OUTPUT_L 9 +#define OUTPUT_R 10 + +/* Total number of ports */ +#define PORTCOUNT_STEREO 11 + + +/* + * Largest buffer lengths needed (at 192 kHz). + * These are summed up to determine the size of *one* buffer per channel. + */ +#define DEPTH_BUFLEN 450 +#define DELAY_BUFLEN 19200 + +/* Max. frequency setting */ +#define MAX_FREQ 5.0f + +/* bandwidth of highpass filters (in octaves) */ +#define HP_BW 1 + +/* cosine table for fast computations */ +#define COS_TABLE_SIZE 1024 +LADSPA_Data cos_table[COS_TABLE_SIZE]; + + +/* The structure used to hold port connection information and state */ +typedef struct { + LADSPA_Data * freq; + LADSPA_Data * phase; + LADSPA_Data * depth; + LADSPA_Data * delay; + LADSPA_Data * contour; + LADSPA_Data * drylevel; + LADSPA_Data * wetlevel; + LADSPA_Data * input_L; + LADSPA_Data * input_R; + LADSPA_Data * output_L; + LADSPA_Data * output_R; + + LADSPA_Data * ring_L; + unsigned long buflen_L; + unsigned long pos_L; + LADSPA_Data * ring_R; + unsigned long buflen_R; + unsigned long pos_R; + + biquad highpass_L; + biquad highpass_R; + + float cm_phase; + float dm_phase; + + unsigned long sample_rate; + LADSPA_Data run_adding_gain; +} ChorusFlanger; + + +/* Construct a new plugin instance. */ +LADSPA_Handle +instantiate_ChorusFlanger(const LADSPA_Descriptor * Descriptor, + unsigned long sample_rate) { + + LADSPA_Handle * ptr; + + if ((ptr = malloc(sizeof(ChorusFlanger))) != NULL) { + ((ChorusFlanger *)ptr)->sample_rate = sample_rate; + ((ChorusFlanger *)ptr)->run_adding_gain = 1.0f; + + + if ((((ChorusFlanger *)ptr)->ring_L = + calloc((DEPTH_BUFLEN + DELAY_BUFLEN) * sample_rate / 192000, + sizeof(LADSPA_Data))) == NULL) + return NULL; + ((ChorusFlanger *)ptr)->buflen_L = (DEPTH_BUFLEN + DELAY_BUFLEN) * sample_rate / 192000; + ((ChorusFlanger *)ptr)->pos_L = 0; + + if ((((ChorusFlanger *)ptr)->ring_R = + calloc((DEPTH_BUFLEN + DELAY_BUFLEN) * sample_rate / 192000, + sizeof(LADSPA_Data))) == NULL) + return NULL; + ((ChorusFlanger *)ptr)->buflen_R = (DEPTH_BUFLEN + DELAY_BUFLEN) * sample_rate / 192000; + ((ChorusFlanger *)ptr)->pos_R = 0; + + + ((ChorusFlanger *)ptr)->cm_phase = 0.0f; + ((ChorusFlanger *)ptr)->dm_phase = 0.0f; + + return ptr; + } + return NULL; +} + + +void +activate_ChorusFlanger(LADSPA_Handle Instance) { + + ChorusFlanger * ptr = (ChorusFlanger *)Instance; + unsigned long i; + + for (i = 0; i < (DEPTH_BUFLEN + DELAY_BUFLEN) * ptr->sample_rate / 192000; i++) { + ptr->ring_L[i] = 0.0f; + ptr->ring_R[i] = 0.0f; + } + + biquad_init(&ptr->highpass_L); + biquad_init(&ptr->highpass_R); +} + + + + +/* Connect a port to a data location. */ +void +connect_port_ChorusFlanger(LADSPA_Handle Instance, + unsigned long Port, + LADSPA_Data * data) { + + ChorusFlanger * ptr = (ChorusFlanger *)Instance; + + switch (Port) { + case FREQ: + ptr->freq = data; + break; + case PHASE: + ptr->phase = data; + break; + case DEPTH: + ptr->depth = data; + break; + case DELAY: + ptr->delay = data; + break; + case CONTOUR: + ptr->contour = data; + break; + case DRYLEVEL: + ptr->drylevel = data; + break; + case WETLEVEL: + ptr->wetlevel = data; + break; + case INPUT_L: + ptr->input_L = data; + break; + case INPUT_R: + ptr->input_R = data; + break; + case OUTPUT_L: + ptr->output_L = data; + break; + case OUTPUT_R: + ptr->output_R = data; + break; + } +} + + +void +run_ChorusFlanger(LADSPA_Handle Instance, + unsigned long SampleCount) { + + ChorusFlanger * ptr = (ChorusFlanger *)Instance; + + LADSPA_Data freq = LIMIT(*(ptr->freq), 0.0f, MAX_FREQ); + LADSPA_Data phase = LIMIT(*(ptr->phase), 0.0f, 180.0f) / 180.0f; + LADSPA_Data depth = 100.0f * ptr->sample_rate / 44100.0f + * LIMIT(*(ptr->depth),0.0f,100.0f) / 100.0f; + LADSPA_Data delay = LIMIT(*(ptr->delay),0.0f,100.0f); + LADSPA_Data contour = LIMIT(*(ptr->contour), 20.0f, 20000.0f); + LADSPA_Data drylevel = db2lin(LIMIT(*(ptr->drylevel),-90.0f,20.0f)); + LADSPA_Data wetlevel = db2lin(LIMIT(*(ptr->wetlevel),-90.0f,20.0f)); + LADSPA_Data * input_L = ptr->input_L; + LADSPA_Data * input_R = ptr->input_R; + LADSPA_Data * output_L = ptr->output_L; + LADSPA_Data * output_R = ptr->output_R; + + unsigned long sample_index; + unsigned long sample_count = SampleCount; + + LADSPA_Data in_L = 0.0f; + LADSPA_Data in_R = 0.0f; + LADSPA_Data d_L = 0.0f; + LADSPA_Data d_R = 0.0f; + LADSPA_Data f_L = 0.0f; + LADSPA_Data f_R = 0.0f; + LADSPA_Data out_L = 0.0f; + LADSPA_Data out_R = 0.0f; + + float phase_L = 0.0f; + float phase_R = 0.0f; + float fpos_L = 0.0f; + float fpos_R = 0.0f; + float n_L = 0.0f; + float n_R = 0.0f; + float rem_L = 0.0f; + float rem_R = 0.0f; + float s_a_L, s_a_R, s_b_L, s_b_R; + + float d_pos = 0.0f; + + if (delay < 1.0f) + delay = 1.0f; + delay = 100.0f - delay; + + hp_set_params(&ptr->highpass_L, contour, HP_BW, ptr->sample_rate); + hp_set_params(&ptr->highpass_R, contour, HP_BW, ptr->sample_rate); + + for (sample_index = 0; sample_index < sample_count; sample_index++) { + + in_L = *(input_L++); + in_R = *(input_R++); + + push_buffer(in_L, ptr->ring_L, ptr->buflen_L, &(ptr->pos_L)); + push_buffer(in_R, ptr->ring_R, ptr->buflen_R, &(ptr->pos_R)); + + ptr->cm_phase += freq / ptr->sample_rate * COS_TABLE_SIZE; + + while (ptr->cm_phase >= COS_TABLE_SIZE) + ptr->cm_phase -= COS_TABLE_SIZE; + + ptr->dm_phase = phase * COS_TABLE_SIZE / 2.0f; + + phase_L = ptr->cm_phase; + phase_R = ptr->cm_phase + ptr->dm_phase; + while (phase_R >= COS_TABLE_SIZE) + phase_R -= COS_TABLE_SIZE; + + d_pos = delay * ptr->sample_rate / 1000.0f; + fpos_L = d_pos + depth * (0.5f + 0.5f * cos_table[(unsigned long)phase_L]); + fpos_R = d_pos + depth * (0.5f + 0.5f * cos_table[(unsigned long)phase_R]); + + n_L = floorf(fpos_L); + n_R = floorf(fpos_R); + rem_L = fpos_L - n_L; + rem_R = fpos_R - n_R; + + s_a_L = read_buffer(ptr->ring_L, ptr->buflen_L, + ptr->pos_L, (unsigned long) n_L); + s_b_L = read_buffer(ptr->ring_L, ptr->buflen_L, + ptr->pos_L, (unsigned long) n_L + 1); + + s_a_R = read_buffer(ptr->ring_R, ptr->buflen_R, + ptr->pos_R, (unsigned long) n_R); + s_b_R = read_buffer(ptr->ring_R, ptr->buflen_R, + ptr->pos_R, (unsigned long) n_R + 1); + + d_L = ((1 - rem_L) * s_a_L + rem_L * s_b_L); + d_R = ((1 - rem_R) * s_a_R + rem_R * s_b_R); + + f_L = biquad_run(&ptr->highpass_L, d_L); + f_R = biquad_run(&ptr->highpass_R, d_R); + + out_L = drylevel * in_L + wetlevel * f_L; + out_R = drylevel * in_R + wetlevel * f_R; + + *(output_L++) = out_L; + *(output_R++) = out_R; + } +} + + +void +set_run_adding_gain_ChorusFlanger(LADSPA_Handle Instance, LADSPA_Data gain) { + + ChorusFlanger * ptr = (ChorusFlanger *)Instance; + + ptr->run_adding_gain = gain; +} + + + +void +run_adding_ChorusFlanger(LADSPA_Handle Instance, + unsigned long SampleCount) { + + ChorusFlanger * ptr = (ChorusFlanger *)Instance; + + LADSPA_Data freq = LIMIT(*(ptr->freq), 0.0f, MAX_FREQ); + LADSPA_Data phase = LIMIT(*(ptr->phase), 0.0f, 180.0f) / 180.0f; + LADSPA_Data depth = 100.0f * ptr->sample_rate / 44100.0f + * LIMIT(*(ptr->depth),0.0f,100.0f) / 100.0f; + LADSPA_Data delay = LIMIT(*(ptr->delay),0.0f,100.0f); + LADSPA_Data contour = LIMIT(*(ptr->contour), 20.0f, 20000.0f); + LADSPA_Data drylevel = db2lin(LIMIT(*(ptr->drylevel),-90.0f,20.0f)); + LADSPA_Data wetlevel = db2lin(LIMIT(*(ptr->wetlevel),-90.0f,20.0f)); + LADSPA_Data * input_L = ptr->input_L; + LADSPA_Data * input_R = ptr->input_R; + LADSPA_Data * output_L = ptr->output_L; + LADSPA_Data * output_R = ptr->output_R; + + unsigned long sample_index; + unsigned long sample_count = SampleCount; + + LADSPA_Data in_L = 0.0f; + LADSPA_Data in_R = 0.0f; + LADSPA_Data d_L = 0.0f; + LADSPA_Data d_R = 0.0f; + LADSPA_Data f_L = 0.0f; + LADSPA_Data f_R = 0.0f; + LADSPA_Data out_L = 0.0f; + LADSPA_Data out_R = 0.0f; + + float phase_L = 0.0f; + float phase_R = 0.0f; + float fpos_L = 0.0f; + float fpos_R = 0.0f; + float n_L = 0.0f; + float n_R = 0.0f; + float rem_L = 0.0f; + float rem_R = 0.0f; + float s_a_L, s_a_R, s_b_L, s_b_R; + + float d_pos = 0.0f; + + if (delay < 1.0f) + delay = 1.0f; + delay = 100.0f - delay; + + hp_set_params(&ptr->highpass_L, contour, HP_BW, ptr->sample_rate); + hp_set_params(&ptr->highpass_R, contour, HP_BW, ptr->sample_rate); + + for (sample_index = 0; sample_index < sample_count; sample_index++) { + + in_L = *(input_L++); + in_R = *(input_R++); + + push_buffer(in_L, ptr->ring_L, ptr->buflen_L, &(ptr->pos_L)); + push_buffer(in_R, ptr->ring_R, ptr->buflen_R, &(ptr->pos_R)); + + ptr->cm_phase += freq / ptr->sample_rate * COS_TABLE_SIZE; + + while (ptr->cm_phase >= COS_TABLE_SIZE) + ptr->cm_phase -= COS_TABLE_SIZE; + + ptr->dm_phase = phase * COS_TABLE_SIZE / 2.0f; + + phase_L = ptr->cm_phase; + phase_R = ptr->cm_phase + ptr->dm_phase; + while (phase_R >= COS_TABLE_SIZE) + phase_R -= COS_TABLE_SIZE; + + d_pos = delay * ptr->sample_rate / 1000.0f; + fpos_L = d_pos + depth * (0.5f + 0.5f * cos_table[(unsigned long)phase_L]); + fpos_R = d_pos + depth * (0.5f + 0.5f * cos_table[(unsigned long)phase_R]); + + n_L = floorf(fpos_L); + n_R = floorf(fpos_R); + rem_L = fpos_L - n_L; + rem_R = fpos_R - n_R; + + s_a_L = read_buffer(ptr->ring_L, ptr->buflen_L, + ptr->pos_L, (unsigned long) n_L); + s_b_L = read_buffer(ptr->ring_L, ptr->buflen_L, + ptr->pos_L, (unsigned long) n_L + 1); + + s_a_R = read_buffer(ptr->ring_R, ptr->buflen_R, + ptr->pos_R, (unsigned long) n_R); + s_b_R = read_buffer(ptr->ring_R, ptr->buflen_R, + ptr->pos_R, (unsigned long) n_R + 1); + + d_L = ((1 - rem_L) * s_a_L + rem_L * s_b_L); + d_R = ((1 - rem_R) * s_a_R + rem_R * s_b_R); + + f_L = biquad_run(&ptr->highpass_L, d_L); + f_R = biquad_run(&ptr->highpass_R, d_R); + + out_L = drylevel * in_L + wetlevel * f_L; + out_R = drylevel * in_R + wetlevel * f_R; + + *(output_L++) += ptr->run_adding_gain * out_L; + *(output_R++) += ptr->run_adding_gain * out_R; + } +} + + + +/* Throw away a ChorusFlanger effect instance. */ +void +cleanup_ChorusFlanger(LADSPA_Handle Instance) { + + ChorusFlanger * ptr = (ChorusFlanger *)Instance; + free(ptr->ring_L); + free(ptr->ring_R); + free(Instance); +} + + + +LADSPA_Descriptor * stereo_descriptor = NULL; + + + +/* __attribute__((constructor)) _init() is called automatically when the plugin library is first + loaded. */ +void +__attribute__((constructor)) _init() { + + char ** port_names; + LADSPA_PortDescriptor * port_descriptors; + LADSPA_PortRangeHint * port_range_hints; + int i; + + if ((stereo_descriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor))) == NULL) + exit(1); + + for (i = 0; i < COS_TABLE_SIZE; i++) + cos_table[i] = cosf(i * 2.0f * M_PI / COS_TABLE_SIZE); + + stereo_descriptor->UniqueID = ID_STEREO; + stereo_descriptor->Label = strdup("tap_chorusflanger"); + stereo_descriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; + stereo_descriptor->Name = strdup("TAP Chorus/Flanger"); + stereo_descriptor->Maker = strdup("Tom Szilagyi"); + stereo_descriptor->Copyright = strdup("GPL"); + stereo_descriptor->PortCount = PORTCOUNT_STEREO; + + if ((port_descriptors = + (LADSPA_PortDescriptor *)calloc(PORTCOUNT_STEREO, sizeof(LADSPA_PortDescriptor))) == NULL) + exit(1); + + stereo_descriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; + port_descriptors[FREQ] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_descriptors[PHASE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_descriptors[DEPTH] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_descriptors[DELAY] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_descriptors[CONTOUR] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_descriptors[DRYLEVEL] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_descriptors[WETLEVEL] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_descriptors[INPUT_L] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_descriptors[INPUT_R] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_descriptors[OUTPUT_L] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_descriptors[OUTPUT_R] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + + if ((port_names = + (char **)calloc(PORTCOUNT_STEREO, sizeof(char *))) == NULL) + exit(1); + + stereo_descriptor->PortNames = (const char **)port_names; + port_names[FREQ] = strdup("Frequency [Hz]"); + port_names[PHASE] = strdup("L/R Phase Shift [deg]"); + port_names[DEPTH] = strdup("Depth [%]"); + port_names[DELAY] = strdup("Delay [ms]"); + port_names[CONTOUR] = strdup("Contour [Hz]"); + port_names[DRYLEVEL] = strdup("Dry Level [dB]"); + port_names[WETLEVEL] = strdup("Wet Level [dB]"); + port_names[INPUT_L] = strdup("Input_L"); + port_names[INPUT_R] = strdup("Input_R"); + port_names[OUTPUT_L] = strdup("Output_L"); + port_names[OUTPUT_R] = strdup("Output_R"); + + if ((port_range_hints = + ((LADSPA_PortRangeHint *)calloc(PORTCOUNT_STEREO, sizeof(LADSPA_PortRangeHint)))) == NULL) + exit(1); + + stereo_descriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; + port_range_hints[FREQ].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_LOW); + port_range_hints[PHASE].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_MIDDLE); + port_range_hints[DEPTH].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_HIGH); + port_range_hints[DELAY].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_LOW); + port_range_hints[CONTOUR].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_100); + port_range_hints[DRYLEVEL].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_0); + port_range_hints[WETLEVEL].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_0); + port_range_hints[FREQ].LowerBound = 0.0f; + port_range_hints[FREQ].UpperBound = MAX_FREQ; + port_range_hints[PHASE].LowerBound = 0.0f; + port_range_hints[PHASE].UpperBound = 180.0f; + port_range_hints[DEPTH].LowerBound = 0.0f; + port_range_hints[DEPTH].UpperBound = 100.0f; + port_range_hints[DELAY].LowerBound = 0.0f; + port_range_hints[DELAY].UpperBound = 100.0f; + port_range_hints[CONTOUR].LowerBound = 20.0f; + port_range_hints[CONTOUR].UpperBound = 20000.0f; + port_range_hints[DRYLEVEL].LowerBound = -90.0f; + port_range_hints[DRYLEVEL].UpperBound = +20.0f; + port_range_hints[WETLEVEL].LowerBound = -90.0f; + port_range_hints[WETLEVEL].UpperBound = +20.0f; + port_range_hints[INPUT_L].HintDescriptor = 0; + port_range_hints[INPUT_R].HintDescriptor = 0; + port_range_hints[OUTPUT_L].HintDescriptor = 0; + port_range_hints[OUTPUT_R].HintDescriptor = 0; + stereo_descriptor->instantiate = instantiate_ChorusFlanger; + stereo_descriptor->connect_port = connect_port_ChorusFlanger; + stereo_descriptor->activate = activate_ChorusFlanger; + stereo_descriptor->run = run_ChorusFlanger; + stereo_descriptor->run_adding = run_adding_ChorusFlanger; + stereo_descriptor->set_run_adding_gain = set_run_adding_gain_ChorusFlanger; + stereo_descriptor->deactivate = NULL; + stereo_descriptor->cleanup = cleanup_ChorusFlanger; +} + + +void +delete_descriptor(LADSPA_Descriptor * descriptor) { + unsigned long index; + if (descriptor) { + free((char *)descriptor->Label); + free((char *)descriptor->Name); + free((char *)descriptor->Maker); + free((char *)descriptor->Copyright); + free((LADSPA_PortDescriptor *)descriptor->PortDescriptors); + for (index = 0; index < descriptor->PortCount; index++) + free((char *)(descriptor->PortNames[index])); + free((char **)descriptor->PortNames); + free((LADSPA_PortRangeHint *)descriptor->PortRangeHints); + free(descriptor); + } +} + + +/* __attribute__((destructor)) _fini() is called automatically when the library is unloaded. */ +void +__attribute__((destructor)) _fini() { + delete_descriptor(stereo_descriptor); +} + + +/* Return a descriptor of the requested plugin type. */ +const LADSPA_Descriptor * +ladspa_descriptor(unsigned long Index) { + + switch (Index) { + case 0: + return stereo_descriptor; + default: + return NULL; + } +} diff --git a/plugins/LadspaEffect/tap/tap_deesser.c b/plugins/LadspaEffect/tap/tap_deesser.c new file mode 100644 index 000000000..583290e5c --- /dev/null +++ b/plugins/LadspaEffect/tap/tap_deesser.c @@ -0,0 +1,491 @@ +/* -*- linux-c -*- + Copyright (C) 2004 Tom Szilagyi + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + $Id: tap_deesser.c,v 1.7 2004/05/01 16:15:06 tszilagyi Exp $ +*/ + + +#include +#include +#include +#include + +#include +#include "tap_utils.h" + +/* The Unique ID of the plugin: */ + +#define ID_MONO 2147 + +/* The port numbers for the plugin: */ + +#define THRESHOLD 0 +#define FREQ 1 +#define SIDECHAIN 2 +#define MONITOR 3 +#define ATTENUAT 4 +#define INPUT 5 +#define OUTPUT 6 + + +/* Total number of ports */ + +#define PORTCOUNT_MONO 7 + + +/* Bandwidth of sidechain lowpass/highpass filters */ +#define SIDECH_BW 0.3f + +/* Used to hold 10 ms gain data, enough for sample rates up to 192 kHz */ +#define RINGBUF_SIZE 2000 + + + +/* 4 digits precision from 1.000 to 9.999 */ +LADSPA_Data log10_table[9000]; + + +/* The structure used to hold port connection information and state */ + +typedef struct { + LADSPA_Data * threshold; + LADSPA_Data * audiomode; + LADSPA_Data * freq; + LADSPA_Data * sidechain; + LADSPA_Data * monitor; + LADSPA_Data * attenuat; + LADSPA_Data * input; + LADSPA_Data * output; + + biquad sidech_lo_filter; + biquad sidech_hi_filter; + LADSPA_Data * ringbuffer; + unsigned long buflen; + unsigned long pos; + LADSPA_Data sum; + LADSPA_Data old_freq; + + unsigned long sample_rate; + LADSPA_Data run_adding_gain; +} DeEsser; + + +/* fast linear to decibel conversion using log10_table[] */ +LADSPA_Data fast_lin2db(LADSPA_Data lin) { + + unsigned long k; + int exp = 0; + LADSPA_Data mant = ABS(lin); + + /* sanity checks */ + if (mant == 0.0f) + return(-1.0f/0.0f); /* -inf */ + if (mant == 1.0f/0.0f) /* +inf */ + return(mant); + + while (mant < 1.0f) { + mant *= 10; + exp --; + } + while (mant >= 10.0f) { + mant /= 10; + exp ++; + } + + k = (mant - 0.999999f) * 1000.0f; + return 20.0f * (log10_table[k] + exp); +} + + + +/* Construct a new plugin instance. */ +LADSPA_Handle +instantiate_DeEsser(const LADSPA_Descriptor * Descriptor, + unsigned long SampleRate) { + + LADSPA_Handle * ptr; + + if ((ptr = malloc(sizeof(DeEsser))) != NULL) { + ((DeEsser *)ptr)->sample_rate = SampleRate; + ((DeEsser *)ptr)->run_adding_gain = 1.0f; + + /* init filters */ + biquad_init(&((DeEsser *)ptr)->sidech_lo_filter); + biquad_init(&((DeEsser *)ptr)->sidech_hi_filter); + + /* alloc mem for ringbuffer */ + if ((((DeEsser *)ptr)->ringbuffer = + calloc(RINGBUF_SIZE, sizeof(LADSPA_Data))) == NULL) + return NULL; + + /* 10 ms attenuation data is stored */ + ((DeEsser *)ptr)->buflen = ((DeEsser *)ptr)->sample_rate / 100; + + ((DeEsser *)ptr)->pos = 0; + ((DeEsser *)ptr)->sum = 0.0f; + ((DeEsser *)ptr)->old_freq = 0; + + return ptr; + } + return NULL; +} + + +void +activate_DeEsser(LADSPA_Handle Instance) { + + DeEsser * ptr = (DeEsser *)Instance; + unsigned long i; + + for (i = 0; i < RINGBUF_SIZE; i++) + ptr->ringbuffer[i] = 0.0f; +} + + + + +/* Connect a port to a data location. */ +void +connect_port_DeEsser(LADSPA_Handle Instance, + unsigned long Port, + LADSPA_Data * DataLocation) { + + DeEsser * ptr; + + ptr = (DeEsser *)Instance; + switch (Port) { + case THRESHOLD: + ptr->threshold = DataLocation; + break; + case FREQ: + ptr->freq = DataLocation; + break; + case SIDECHAIN: + ptr->sidechain = DataLocation; + break; + case MONITOR: + ptr->monitor = DataLocation; + break; + case ATTENUAT: + ptr->attenuat = DataLocation; + *(ptr->attenuat) = 0.0f; + break; + case INPUT: + ptr->input = DataLocation; + break; + case OUTPUT: + ptr->output = DataLocation; + break; + } +} + + + +void +run_DeEsser(LADSPA_Handle Instance, + unsigned long SampleCount) { + + DeEsser * ptr = (DeEsser *)Instance; + + LADSPA_Data * input = ptr->input; + LADSPA_Data * output = ptr->output; + LADSPA_Data threshold = LIMIT(*(ptr->threshold),-50.0f,10.0f); + LADSPA_Data freq = LIMIT(*(ptr->freq),2000.0f,16000.0f); + LADSPA_Data sidechain = LIMIT(*(ptr->sidechain),0.0f,1.0f); + LADSPA_Data monitor = LIMIT(*(ptr->monitor),0.0f,1.0f); + unsigned long sample_index; + + LADSPA_Data in = 0; + LADSPA_Data out = 0; + LADSPA_Data sidech = 0; + LADSPA_Data ampl_db = 0.0f; + LADSPA_Data attn = 0.0f; + LADSPA_Data max_attn = 0.0f; + + + if (ptr->old_freq != freq) { + lp_set_params(&ptr->sidech_lo_filter, freq, SIDECH_BW, ptr->sample_rate); + hp_set_params(&ptr->sidech_hi_filter, freq, SIDECH_BW, ptr->sample_rate); + ptr->old_freq = freq; + } + + for (sample_index = 0; sample_index < SampleCount; sample_index++) { + + in = *(input++); + + /* process sidechain filters */ + sidech = biquad_run(&ptr->sidech_hi_filter, in); + if (sidechain > 0.1f) + sidech = biquad_run(&ptr->sidech_lo_filter, sidech); + + ampl_db = fast_lin2db(sidech); + if (ampl_db <= threshold) + attn = 0.0f; + else + attn = -0.5f * (ampl_db - threshold); + + ptr->sum += attn; + ptr->sum -= push_buffer(attn, ptr->ringbuffer, ptr->buflen, &ptr->pos); + + if (-1.0f * ptr->sum > max_attn) + max_attn = -0.01f * ptr->sum; + + in *= db2lin(ptr->sum / 100.0f); + + + /* output selector */ + if (monitor > 0.1f) + out = sidech; + else + out = in; + + *(output++) = out; + *(ptr->attenuat) = LIMIT(max_attn,0,10); + } +} + + +void +set_run_adding_gain_DeEsser(LADSPA_Handle Instance, LADSPA_Data gain) { + + DeEsser * ptr = (DeEsser *)Instance; + + ptr->run_adding_gain = gain; +} + + + +void +run_adding_DeEsser(LADSPA_Handle Instance, + unsigned long SampleCount) { + + DeEsser * ptr = (DeEsser *)Instance; + + LADSPA_Data * input = ptr->input; + LADSPA_Data * output = ptr->output; + LADSPA_Data threshold = LIMIT(*(ptr->threshold),-50.0f,10.0f); + LADSPA_Data freq = LIMIT(*(ptr->freq),2000.0f,16000.0f); + LADSPA_Data sidechain = LIMIT(*(ptr->sidechain),0.0f,1.0f); + LADSPA_Data monitor = LIMIT(*(ptr->monitor),0.0f,1.0f); + unsigned long sample_index; + + LADSPA_Data in = 0; + LADSPA_Data out = 0; + LADSPA_Data sidech = 0; + LADSPA_Data ampl_db = 0.0f; + LADSPA_Data attn = 0.0f; + LADSPA_Data max_attn = 0.0f; + + + if (ptr->old_freq != freq) { + lp_set_params(&ptr->sidech_lo_filter, freq, SIDECH_BW, ptr->sample_rate); + hp_set_params(&ptr->sidech_hi_filter, freq, SIDECH_BW, ptr->sample_rate); + ptr->old_freq = freq; + } + + for (sample_index = 0; sample_index < SampleCount; sample_index++) { + + in = *(input++); + + /* process sidechain filters */ + sidech = biquad_run(&ptr->sidech_hi_filter, in); + if (sidechain > 0.1f) + sidech = biquad_run(&ptr->sidech_lo_filter, sidech); + + ampl_db = 20.0f * log10f(sidech); + if (ampl_db <= threshold) + attn = 0.0f; + else + attn = -0.5f * (ampl_db - threshold); + + ptr->sum += attn; + ptr->sum -= push_buffer(attn, ptr->ringbuffer, ptr->buflen, &ptr->pos); + + if (-1.0f * ptr->sum > max_attn) + max_attn = -0.01f * ptr->sum; + + in *= db2lin(ptr->sum / 100.0f); + + + /* output selector */ + if (monitor > 0.1f) + out = sidech; + else + out = in; + + *(output++) += ptr->run_adding_gain * out; + *(ptr->attenuat) = LIMIT(max_attn,0,10); + } +} + + + +/* Throw away a DeEsser effect instance. */ +void +cleanup_DeEsser(LADSPA_Handle Instance) { + + DeEsser * ptr = (DeEsser *)Instance; + free(ptr->ringbuffer); + free(Instance); +} + + + +LADSPA_Descriptor * mono_descriptor = NULL; + + + +/* __attribute__((constructor)) _init() is called automatically when the plugin library is first + loaded. */ +void +__attribute__((constructor)) _init() { + + int i; + char ** port_names; + LADSPA_PortDescriptor * port_descriptors; + LADSPA_PortRangeHint * port_range_hints; + + if ((mono_descriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor))) == NULL) + exit(1); + + + /* compute the log10 table */ + for (i = 0; i < 9000; i++) + log10_table[i] = log10f(1.0f + i / 1000.0f); + + + mono_descriptor->UniqueID = ID_MONO; + mono_descriptor->Label = strdup("tap_deesser"); + mono_descriptor->Properties = 0; + mono_descriptor->Name = strdup("TAP DeEsser"); + mono_descriptor->Maker = strdup("Tom Szilagyi"); + mono_descriptor->Copyright = strdup("GPL"); + mono_descriptor->PortCount = PORTCOUNT_MONO; + + if ((port_descriptors = + (LADSPA_PortDescriptor *)calloc(PORTCOUNT_MONO, sizeof(LADSPA_PortDescriptor))) == NULL) + exit(1); + + mono_descriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; + port_descriptors[THRESHOLD] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_descriptors[FREQ] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_descriptors[SIDECHAIN] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_descriptors[MONITOR] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_descriptors[ATTENUAT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_CONTROL; + port_descriptors[INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_descriptors[OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + + if ((port_names = + (char **)calloc(PORTCOUNT_MONO, sizeof(char *))) == NULL) + exit(1); + + mono_descriptor->PortNames = (const char **)port_names; + port_names[THRESHOLD] = strdup("Threshold Level [dB]"); + port_names[FREQ] = strdup("Frequency [Hz]"); + port_names[SIDECHAIN] = strdup("Sidechain Filter"); + port_names[MONITOR] = strdup("Monitor"); + port_names[ATTENUAT] = strdup("Attenuation [dB]"); + port_names[INPUT] = strdup("Input"); + port_names[OUTPUT] = strdup("Output"); + + if ((port_range_hints = + ((LADSPA_PortRangeHint *)calloc(PORTCOUNT_MONO, sizeof(LADSPA_PortRangeHint)))) == NULL) + exit(1); + + mono_descriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; + port_range_hints[THRESHOLD].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_0); + port_range_hints[FREQ].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_LOW); + port_range_hints[SIDECHAIN].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_INTEGER | + LADSPA_HINT_DEFAULT_0); + port_range_hints[MONITOR].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_INTEGER | + LADSPA_HINT_DEFAULT_0); + port_range_hints[ATTENUAT].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_0); + port_range_hints[THRESHOLD].LowerBound = -50; + port_range_hints[THRESHOLD].UpperBound = 10; + port_range_hints[FREQ].LowerBound = 2000; + port_range_hints[FREQ].UpperBound = 16000; + port_range_hints[SIDECHAIN].LowerBound = 0.0f; + port_range_hints[SIDECHAIN].UpperBound = 1.01f; + port_range_hints[MONITOR].LowerBound = 0.0f; + port_range_hints[MONITOR].UpperBound = 1.01f; + port_range_hints[ATTENUAT].LowerBound = 0.0f; + port_range_hints[ATTENUAT].UpperBound = 10.0f; + port_range_hints[INPUT].HintDescriptor = 0; + port_range_hints[OUTPUT].HintDescriptor = 0; + mono_descriptor->instantiate = instantiate_DeEsser; + mono_descriptor->connect_port = connect_port_DeEsser; + mono_descriptor->activate = activate_DeEsser; + mono_descriptor->run = run_DeEsser; + mono_descriptor->run_adding = run_adding_DeEsser; + mono_descriptor->set_run_adding_gain = set_run_adding_gain_DeEsser; + mono_descriptor->deactivate = NULL; + mono_descriptor->cleanup = cleanup_DeEsser; +} + + +void +delete_descriptor(LADSPA_Descriptor * descriptor) { + unsigned long index; + if (descriptor) { + free((char *)descriptor->Label); + free((char *)descriptor->Name); + free((char *)descriptor->Maker); + free((char *)descriptor->Copyright); + free((LADSPA_PortDescriptor *)descriptor->PortDescriptors); + for (index = 0; index < descriptor->PortCount; index++) + free((char *)(descriptor->PortNames[index])); + free((char **)descriptor->PortNames); + free((LADSPA_PortRangeHint *)descriptor->PortRangeHints); + free(descriptor); + } +} + + +/* __attribute__((destructor)) _fini() is called automatically when the library is unloaded. */ +void +__attribute__((destructor)) _fini() { + delete_descriptor(mono_descriptor); +} + + +/* Return a descriptor of the requested plugin type. */ +const LADSPA_Descriptor * +ladspa_descriptor(unsigned long Index) { + + switch (Index) { + case 0: + return mono_descriptor; + default: + return NULL; + } +} diff --git a/plugins/LadspaEffect/tap/tap_doubler.c b/plugins/LadspaEffect/tap/tap_doubler.c new file mode 100644 index 000000000..ae64ac8c6 --- /dev/null +++ b/plugins/LadspaEffect/tap/tap_doubler.c @@ -0,0 +1,737 @@ +/* -*- linux-c -*- + Copyright (C) 2004 Tom Szilagyi + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + $Id: tap_doubler.c,v 1.4 2004/08/13 18:34:31 tszilagyi Exp $ +*/ + + +#include +#include +#include +#include +#include + +#include +#include "tap_utils.h" + + +/* The Unique ID of the plugin: */ + +#define ID_STEREO 2156 + +/* The port numbers for the plugin: */ + +#define TIME 0 +#define PITCH 1 +#define DRYLEVEL 2 +#define DRYPOSL 3 +#define DRYPOSR 4 +#define WETLEVEL 5 +#define WETPOSL 6 +#define WETPOSR 7 +#define INPUT_L 8 +#define INPUT_R 9 +#define OUTPUT_L 10 +#define OUTPUT_R 11 + +/* Total number of ports */ + + +#define PORTCOUNT_STEREO 12 + + +/* Number of pink noise samples to be generated at once */ +#define NOISE_LEN 1024 + +/* + * Largest buffer length needed (at 192 kHz). + */ +#define BUFLEN 11520 + + + +/* The structure used to hold port connection information and state */ + +typedef struct { + LADSPA_Data * time; + LADSPA_Data * pitch; + LADSPA_Data * drylevel; + LADSPA_Data * dryposl; + LADSPA_Data * dryposr; + LADSPA_Data * wetlevel; + LADSPA_Data * wetposl; + LADSPA_Data * wetposr; + LADSPA_Data * input_L; + LADSPA_Data * input_R; + LADSPA_Data * output_L; + LADSPA_Data * output_R; + + LADSPA_Data old_time; + LADSPA_Data old_pitch; + + LADSPA_Data * ring_L; + unsigned long buflen_L; + unsigned long pos_L; + + LADSPA_Data * ring_R; + unsigned long buflen_R; + unsigned long pos_R; + + LADSPA_Data * ring_pnoise; + unsigned long buflen_pnoise; + unsigned long pos_pnoise; + + LADSPA_Data * ring_dnoise; + unsigned long buflen_dnoise; + unsigned long pos_dnoise; + + float delay; + float d_delay; + float p_delay; + unsigned long n_delay; + + float pitchmod; + float d_pitch; + float p_pitch; + unsigned long n_pitch; + + unsigned long p_stretch; + unsigned long d_stretch; + + unsigned long sample_rate; + LADSPA_Data run_adding_gain; +} Doubler; + + +/* generate fractal pattern using Midpoint Displacement Method + * v: buffer of floats to output fractal pattern to + * N: length of v, MUST be integer power of 2 (ie 128, 256, ...) + * H: Hurst constant, between 0 and 0.9999 (fractal dimension) + */ +void +fractal(LADSPA_Data * v, int N, float H) { + + int l = N; + int k; + float r = 1.0f; + int c; + + v[0] = 0; + while (l > 1) { + k = N / l; + for (c = 0; c < k; c++) { + v[c*l + l/2] = (v[c*l] + v[((c+1) * l) % N]) / 2.0f + + 2.0f * r * (rand() - (float)RAND_MAX/2.0f) / (float)RAND_MAX; + v[c*l + l/2] = LIMIT(v[c*l + l/2], -1.0f, 1.0f); + } + l /= 2; + r /= powf(2, H); + } +} + + + +/* Construct a new plugin instance. */ +LADSPA_Handle +instantiate_Doubler(const LADSPA_Descriptor * Descriptor, + unsigned long sample_rate) { + + LADSPA_Handle * ptr; + + if ((ptr = malloc(sizeof(Doubler))) != NULL) { + ((Doubler *)ptr)->sample_rate = sample_rate; + ((Doubler *)ptr)->run_adding_gain = 1.0f; + + if ((((Doubler *)ptr)->ring_L = + calloc(BUFLEN * sample_rate / 192000, sizeof(LADSPA_Data))) == NULL) + return NULL; + ((Doubler *)ptr)->buflen_L = BUFLEN * sample_rate / 192000; + ((Doubler *)ptr)->pos_L = 0; + + if ((((Doubler *)ptr)->ring_R = + calloc(BUFLEN * sample_rate / 192000, sizeof(LADSPA_Data))) == NULL) + return NULL; + ((Doubler *)ptr)->buflen_R = BUFLEN * sample_rate / 192000; + ((Doubler *)ptr)->pos_R = 0; + + if ((((Doubler *)ptr)->ring_pnoise = + calloc(NOISE_LEN, sizeof(LADSPA_Data))) == NULL) + return NULL; + ((Doubler *)ptr)->buflen_pnoise = NOISE_LEN; + ((Doubler *)ptr)->pos_pnoise = 0; + + if ((((Doubler *)ptr)->ring_dnoise = + calloc(NOISE_LEN, sizeof(LADSPA_Data))) == NULL) + return NULL; + ((Doubler *)ptr)->buflen_dnoise = NOISE_LEN; + ((Doubler *)ptr)->pos_dnoise = 0; + + ((Doubler *)ptr)->d_stretch = sample_rate / 10; + ((Doubler *)ptr)->p_stretch = sample_rate / 1000; + + ((Doubler *)ptr)->delay = 0.0f; + ((Doubler *)ptr)->d_delay = 0.0f; + ((Doubler *)ptr)->p_delay = 0.0f; + ((Doubler *)ptr)->n_delay = ((Doubler *)ptr)->d_stretch; + + ((Doubler *)ptr)->pitchmod = 0.0f; + ((Doubler *)ptr)->d_pitch = 0.0f; + ((Doubler *)ptr)->p_pitch = 0.0f; + ((Doubler *)ptr)->n_pitch = ((Doubler *)ptr)->p_stretch; + + return ptr; + } + return NULL; +} + + +void +activate_Doubler(LADSPA_Handle Instance) { + + Doubler * ptr = (Doubler *)Instance; + unsigned long i; + + for (i = 0; i < BUFLEN * ptr->sample_rate / 192000; i++) { + ptr->ring_L[i] = 0.0f; + ptr->ring_R[i] = 0.0f; + } + + ptr->old_time = -1.0f; + ptr->old_pitch = -1.0f; +} + + + + +/* Connect a port to a data location. */ +void +connect_port_Doubler(LADSPA_Handle Instance, + unsigned long Port, + LADSPA_Data * data) { + + Doubler * ptr = (Doubler *)Instance; + + switch (Port) { + case TIME: + ptr->time = data; + break; + case PITCH: + ptr->pitch = data; + break; + case DRYLEVEL: + ptr->drylevel = data; + break; + case DRYPOSL: + ptr->dryposl = data; + break; + case DRYPOSR: + ptr->dryposr = data; + break; + case WETLEVEL: + ptr->wetlevel = data; + break; + case WETPOSL: + ptr->wetposl = data; + break; + case WETPOSR: + ptr->wetposr = data; + break; + case INPUT_L: + ptr->input_L = data; + break; + case INPUT_R: + ptr->input_R = data; + break; + case OUTPUT_L: + ptr->output_L = data; + break; + case OUTPUT_R: + ptr->output_R = data; + break; + } +} + + + +void +run_Doubler(LADSPA_Handle Instance, + unsigned long SampleCount) { + + Doubler * ptr = (Doubler *)Instance; + + LADSPA_Data pitch = LIMIT(*(ptr->pitch),0.0f,1.0f) + 0.75f; + LADSPA_Data depth = LIMIT(((1.0f - LIMIT(*(ptr->pitch),0.0f,1.0f)) * 1.75f + 0.25f) * + ptr->sample_rate / 6000.0f / M_PI, + 0, ptr->buflen_L / 2); + LADSPA_Data time = LIMIT(*(ptr->time), 0.0f, 1.0f) + 0.5f; + LADSPA_Data drylevel = db2lin(LIMIT(*(ptr->drylevel),-90.0f,20.0f)); + LADSPA_Data wetlevel = db2lin(LIMIT(*(ptr->wetlevel),-90.0f,20.0f)); + LADSPA_Data dryposl = 1.0f - LIMIT(*(ptr->dryposl), 0.0f, 1.0f); + LADSPA_Data dryposr = LIMIT(*(ptr->dryposr), 0.0f, 1.0f); + LADSPA_Data wetposl = 1.0f - LIMIT(*(ptr->wetposl), 0.0f, 1.0f); + LADSPA_Data wetposr = LIMIT(*(ptr->wetposr), 0.0f, 1.0f); + LADSPA_Data * input_L = ptr->input_L; + LADSPA_Data * input_R = ptr->input_R; + LADSPA_Data * output_L = ptr->output_L; + LADSPA_Data * output_R = ptr->output_R; + + unsigned long sample_index; + unsigned long sample_count = SampleCount; + + LADSPA_Data in_L = 0.0f; + LADSPA_Data in_R = 0.0f; + LADSPA_Data out_L = 0.0f; + LADSPA_Data out_R = 0.0f; + + LADSPA_Data fpos = 0.0f; + LADSPA_Data n = 0.0f; + LADSPA_Data rem = 0.0f; + LADSPA_Data s_a_L, s_a_R, s_b_L, s_b_R; + LADSPA_Data prev_p_pitch = 0.0f; + LADSPA_Data prev_p_delay = 0.0f; + LADSPA_Data delay; + + LADSPA_Data drystream_L = 0.0f; + LADSPA_Data drystream_R = 0.0f; + LADSPA_Data wetstream_L = 0.0f; + LADSPA_Data wetstream_R = 0.0f; + + if (ptr->old_pitch != pitch) { + ptr->pitchmod = ptr->p_pitch; + prev_p_pitch = ptr->p_pitch; + fractal(ptr->ring_pnoise, NOISE_LEN, pitch); + ptr->pos_pnoise = 0; + ptr->p_pitch = push_buffer(0.0f, ptr->ring_pnoise, + ptr->buflen_pnoise, &(ptr->pos_pnoise)); + ptr->d_pitch = (ptr->p_pitch - prev_p_pitch) / (float)(ptr->p_stretch); + ptr->n_pitch = 0; + + ptr->old_pitch = pitch; + } + + if (ptr->old_time != time) { + ptr->delay = ptr->p_delay; + prev_p_delay = ptr->p_delay; + fractal(ptr->ring_dnoise, NOISE_LEN, time); + ptr->pos_dnoise = 0; + ptr->p_delay = push_buffer(0.0f, ptr->ring_dnoise, + ptr->buflen_dnoise, &(ptr->pos_dnoise)); + ptr->d_delay = (ptr->p_delay - prev_p_delay) / (float)(ptr->d_stretch); + ptr->n_delay = 0; + + ptr->old_time = time; + } + + + for (sample_index = 0; sample_index < sample_count; sample_index++) { + + in_L = *(input_L++); + in_R = *(input_R++); + + push_buffer(in_L, ptr->ring_L, ptr->buflen_L, &(ptr->pos_L)); + push_buffer(in_R, ptr->ring_R, ptr->buflen_R, &(ptr->pos_R)); + + if (ptr->n_pitch < ptr->p_stretch) { + ptr->pitchmod += ptr->d_pitch; + ptr->n_pitch++; + } else { + ptr->pitchmod = ptr->p_pitch; + prev_p_pitch = ptr->p_pitch; + if (!ptr->pos_pnoise) { + fractal(ptr->ring_pnoise, NOISE_LEN, pitch); + } + ptr->p_pitch = push_buffer(0.0f, ptr->ring_pnoise, + ptr->buflen_pnoise, &(ptr->pos_pnoise)); + ptr->d_pitch = (ptr->p_pitch - prev_p_pitch) / (float)(ptr->p_stretch); + ptr->n_pitch = 0; + } + + if (ptr->n_delay < ptr->d_stretch) { + ptr->delay += ptr->d_delay; + ptr->n_delay++; + } else { + ptr->delay = ptr->p_delay; + prev_p_delay = ptr->p_delay; + if (!ptr->pos_dnoise) { + fractal(ptr->ring_dnoise, NOISE_LEN, time); + } + ptr->p_delay = push_buffer(0.0f, ptr->ring_dnoise, + ptr->buflen_dnoise, &(ptr->pos_dnoise)); + ptr->d_delay = (ptr->p_delay - prev_p_delay) / (float)(ptr->d_stretch); + ptr->n_delay = 0; + } + + delay = (12.5f * ptr->delay + 37.5f) * ptr->sample_rate / 1000.0f; + fpos = ptr->buflen_L - depth * (1.0f - ptr->pitchmod) - delay - 1.0f; + n = floorf(fpos); + rem = fpos - n; + + s_a_L = read_buffer(ptr->ring_L, ptr->buflen_L, + ptr->pos_L, (unsigned long) n); + s_b_L = read_buffer(ptr->ring_L, ptr->buflen_L, + ptr->pos_L, (unsigned long) n + 1); + + s_a_R = read_buffer(ptr->ring_R, ptr->buflen_R, + ptr->pos_R, (unsigned long) n); + s_b_R = read_buffer(ptr->ring_R, ptr->buflen_R, + ptr->pos_R, (unsigned long) n + 1); + + drystream_L = drylevel * in_L; + drystream_R = drylevel * in_R; + wetstream_L = wetlevel * ((1 - rem) * s_a_L + rem * s_b_L); + wetstream_R = wetlevel * ((1 - rem) * s_a_R + rem * s_b_R); + + out_L = dryposl * drystream_L + (1.0f - dryposr) * drystream_R + + wetposl * wetstream_L + (1.0f - wetposr) * wetstream_R; + out_R = (1.0f - dryposl) * drystream_L + dryposr * drystream_R + + (1.0f - wetposl) * wetstream_L + wetposr * wetstream_R; + + *(output_L++) = out_L; + *(output_R++) = out_R; + } +} + + +void +set_run_adding_gain_Doubler(LADSPA_Handle Instance, LADSPA_Data gain) { + + Doubler * ptr = (Doubler *)Instance; + + ptr->run_adding_gain = gain; +} + + + +void +run_adding_Doubler(LADSPA_Handle Instance, + unsigned long SampleCount) { + + Doubler * ptr = (Doubler *)Instance; + + LADSPA_Data pitch = LIMIT(*(ptr->pitch),0.0f,1.0f) + 0.75f; + LADSPA_Data depth = LIMIT(((1.0f - LIMIT(*(ptr->pitch),0.0f,1.0f)) * 1.75f + 0.25f) * + ptr->sample_rate / 6000.0f / M_PI, + 0, ptr->buflen_L / 2); + LADSPA_Data time = LIMIT(*(ptr->time), 0.0f, 1.0f) + 0.5f; + LADSPA_Data drylevel = db2lin(LIMIT(*(ptr->drylevel),-90.0f,20.0f)); + LADSPA_Data wetlevel = db2lin(LIMIT(*(ptr->wetlevel),-90.0f,20.0f)); + LADSPA_Data dryposl = 1.0f - LIMIT(*(ptr->dryposl), 0.0f, 1.0f); + LADSPA_Data dryposr = LIMIT(*(ptr->dryposr), 0.0f, 1.0f); + LADSPA_Data wetposl = 1.0f - LIMIT(*(ptr->wetposl), 0.0f, 1.0f); + LADSPA_Data wetposr = LIMIT(*(ptr->wetposr), 0.0f, 1.0f); + LADSPA_Data * input_L = ptr->input_L; + LADSPA_Data * input_R = ptr->input_R; + LADSPA_Data * output_L = ptr->output_L; + LADSPA_Data * output_R = ptr->output_R; + + unsigned long sample_index; + unsigned long sample_count = SampleCount; + + LADSPA_Data in_L = 0.0f; + LADSPA_Data in_R = 0.0f; + LADSPA_Data out_L = 0.0f; + LADSPA_Data out_R = 0.0f; + + LADSPA_Data fpos = 0.0f; + LADSPA_Data n = 0.0f; + LADSPA_Data rem = 0.0f; + LADSPA_Data s_a_L, s_a_R, s_b_L, s_b_R; + LADSPA_Data prev_p_pitch = 0.0f; + LADSPA_Data prev_p_delay = 0.0f; + LADSPA_Data delay; + + LADSPA_Data drystream_L = 0.0f; + LADSPA_Data drystream_R = 0.0f; + LADSPA_Data wetstream_L = 0.0f; + LADSPA_Data wetstream_R = 0.0f; + + if (ptr->old_pitch != pitch) { + ptr->pitchmod = ptr->p_pitch; + prev_p_pitch = ptr->p_pitch; + fractal(ptr->ring_pnoise, NOISE_LEN, pitch); + ptr->pos_pnoise = 0; + ptr->p_pitch = push_buffer(0.0f, ptr->ring_pnoise, + ptr->buflen_pnoise, &(ptr->pos_pnoise)); + ptr->d_pitch = (ptr->p_pitch - prev_p_pitch) / (float)(ptr->p_stretch); + ptr->n_pitch = 0; + + ptr->old_pitch = pitch; + } + + if (ptr->old_time != time) { + ptr->delay = ptr->p_delay; + prev_p_delay = ptr->p_delay; + fractal(ptr->ring_dnoise, NOISE_LEN, time); + ptr->pos_dnoise = 0; + ptr->p_delay = push_buffer(0.0f, ptr->ring_dnoise, + ptr->buflen_dnoise, &(ptr->pos_dnoise)); + ptr->d_delay = (ptr->p_delay - prev_p_delay) / (float)(ptr->d_stretch); + ptr->n_delay = 0; + + ptr->old_time = time; + } + + + for (sample_index = 0; sample_index < sample_count; sample_index++) { + + in_L = *(input_L++); + in_R = *(input_R++); + + push_buffer(in_L, ptr->ring_L, ptr->buflen_L, &(ptr->pos_L)); + push_buffer(in_R, ptr->ring_R, ptr->buflen_R, &(ptr->pos_R)); + + if (ptr->n_pitch < ptr->p_stretch) { + ptr->pitchmod += ptr->d_pitch; + ptr->n_pitch++; + } else { + ptr->pitchmod = ptr->p_pitch; + prev_p_pitch = ptr->p_pitch; + if (!ptr->pos_pnoise) { + fractal(ptr->ring_pnoise, NOISE_LEN, pitch); + } + ptr->p_pitch = push_buffer(0.0f, ptr->ring_pnoise, + ptr->buflen_pnoise, &(ptr->pos_pnoise)); + ptr->d_pitch = (ptr->p_pitch - prev_p_pitch) / (float)(ptr->p_stretch); + ptr->n_pitch = 0; + } + + if (ptr->n_delay < ptr->d_stretch) { + ptr->delay += ptr->d_delay; + ptr->n_delay++; + } else { + ptr->delay = ptr->p_delay; + prev_p_delay = ptr->p_delay; + if (!ptr->pos_dnoise) { + fractal(ptr->ring_dnoise, NOISE_LEN, time); + } + ptr->p_delay = push_buffer(0.0f, ptr->ring_dnoise, + ptr->buflen_dnoise, &(ptr->pos_dnoise)); + ptr->d_delay = (ptr->p_delay - prev_p_delay) / (float)(ptr->d_stretch); + ptr->n_delay = 0; + } + + delay = (12.5f * ptr->delay + 37.5f) * ptr->sample_rate / 1000.0f; + fpos = ptr->buflen_L - depth * (1.0f - ptr->pitchmod) - delay - 1.0f; + n = floorf(fpos); + rem = fpos - n; + + s_a_L = read_buffer(ptr->ring_L, ptr->buflen_L, + ptr->pos_L, (unsigned long) n); + s_b_L = read_buffer(ptr->ring_L, ptr->buflen_L, + ptr->pos_L, (unsigned long) n + 1); + + s_a_R = read_buffer(ptr->ring_R, ptr->buflen_R, + ptr->pos_R, (unsigned long) n); + s_b_R = read_buffer(ptr->ring_R, ptr->buflen_R, + ptr->pos_R, (unsigned long) n + 1); + + drystream_L = drylevel * in_L; + drystream_R = drylevel * in_R; + wetstream_L = wetlevel * ((1 - rem) * s_a_L + rem * s_b_L); + wetstream_R = wetlevel * ((1 - rem) * s_a_R + rem * s_b_R); + + out_L = dryposl * drystream_L + (1.0f - dryposr) * drystream_R + + wetposl * wetstream_L + (1.0f - wetposr) * wetstream_R; + out_R = (1.0f - dryposl) * drystream_L + dryposr * drystream_R + + (1.0f - wetposl) * wetstream_L + wetposr * wetstream_R; + + *(output_L++) += ptr->run_adding_gain * out_L; + *(output_R++) += ptr->run_adding_gain * out_R; + } +} + + + +/* Throw away a Doubler effect instance. */ +void +cleanup_Doubler(LADSPA_Handle Instance) { + + Doubler * ptr = (Doubler *)Instance; + free(ptr->ring_L); + free(ptr->ring_R); + free(ptr->ring_pnoise); + free(ptr->ring_dnoise); + free(Instance); +} + + + +LADSPA_Descriptor * stereo_descriptor = NULL; + + + +/* __attribute__((constructor)) _init() is called automatically when the plugin library is first + loaded. */ +void +__attribute__((constructor)) _init() { + + char ** port_names; + LADSPA_PortDescriptor * port_descriptors; + LADSPA_PortRangeHint * port_range_hints; + + if ((stereo_descriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor))) == NULL) + exit(1); + + stereo_descriptor->UniqueID = ID_STEREO; + stereo_descriptor->Label = strdup("tap_doubler"); + stereo_descriptor->Properties = 0; + stereo_descriptor->Name = strdup("TAP Fractal Doubler"); + stereo_descriptor->Maker = strdup("Tom Szilagyi"); + stereo_descriptor->Copyright = strdup("GPL"); + stereo_descriptor->PortCount = PORTCOUNT_STEREO; + + if ((port_descriptors = + (LADSPA_PortDescriptor *)calloc(PORTCOUNT_STEREO, sizeof(LADSPA_PortDescriptor))) == NULL) + exit(1); + + stereo_descriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; + port_descriptors[TIME] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_descriptors[PITCH] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_descriptors[DRYLEVEL] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_descriptors[DRYPOSL] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_descriptors[DRYPOSR] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_descriptors[WETLEVEL] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_descriptors[WETPOSL] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_descriptors[WETPOSR] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_descriptors[INPUT_L] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_descriptors[INPUT_R] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_descriptors[OUTPUT_L] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_descriptors[OUTPUT_R] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + + if ((port_names = + (char **)calloc(PORTCOUNT_STEREO, sizeof(char *))) == NULL) + exit(1); + + stereo_descriptor->PortNames = (const char **)port_names; + port_names[TIME] = strdup("Time Tracking"); + port_names[PITCH] = strdup("Pitch Tracking"); + port_names[DRYLEVEL] = strdup("Dry Level [dB]"); + port_names[DRYPOSL] = strdup("Dry Left Position"); + port_names[DRYPOSR] = strdup("Dry Right Position"); + port_names[WETLEVEL] = strdup("Wet Level [dB]"); + port_names[WETPOSL] = strdup("Wet Left Position"); + port_names[WETPOSR] = strdup("Wet Right Position"); + port_names[INPUT_L] = strdup("Input_L"); + port_names[INPUT_R] = strdup("Input_R"); + port_names[OUTPUT_L] = strdup("Output_L"); + port_names[OUTPUT_R] = strdup("Output_R"); + + if ((port_range_hints = + ((LADSPA_PortRangeHint *)calloc(PORTCOUNT_STEREO, sizeof(LADSPA_PortRangeHint)))) == NULL) + exit(1); + + stereo_descriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; + port_range_hints[TIME].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_MIDDLE); + port_range_hints[PITCH].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_MIDDLE); + port_range_hints[DRYLEVEL].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_0); + port_range_hints[DRYPOSL].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_MINIMUM); + port_range_hints[DRYPOSR].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_MAXIMUM); + port_range_hints[WETLEVEL].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_0); + port_range_hints[WETPOSL].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_MINIMUM); + port_range_hints[WETPOSR].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_MAXIMUM); + port_range_hints[TIME].LowerBound = 0.0f; + port_range_hints[TIME].UpperBound = 1.0f; + port_range_hints[PITCH].LowerBound = 0.0f; + port_range_hints[PITCH].UpperBound = 1.0f; + port_range_hints[DRYLEVEL].LowerBound = -90.0f; + port_range_hints[DRYLEVEL].UpperBound = +20.0f; + port_range_hints[DRYPOSL].LowerBound = 0.0f; + port_range_hints[DRYPOSL].UpperBound = 1.0f; + port_range_hints[DRYPOSR].LowerBound = 0.0f; + port_range_hints[DRYPOSR].UpperBound = 1.0f; + port_range_hints[WETLEVEL].LowerBound = -90.0f; + port_range_hints[WETLEVEL].UpperBound = +20.0f; + port_range_hints[WETPOSL].LowerBound = 0.0f; + port_range_hints[WETPOSL].UpperBound = 1.0f; + port_range_hints[WETPOSR].LowerBound = 0.0f; + port_range_hints[WETPOSR].UpperBound = 1.0f; + port_range_hints[INPUT_L].HintDescriptor = 0; + port_range_hints[INPUT_R].HintDescriptor = 0; + port_range_hints[OUTPUT_L].HintDescriptor = 0; + port_range_hints[OUTPUT_R].HintDescriptor = 0; + stereo_descriptor->instantiate = instantiate_Doubler; + stereo_descriptor->connect_port = connect_port_Doubler; + stereo_descriptor->activate = activate_Doubler; + stereo_descriptor->run = run_Doubler; + stereo_descriptor->run_adding = run_adding_Doubler; + stereo_descriptor->set_run_adding_gain = set_run_adding_gain_Doubler; + stereo_descriptor->deactivate = NULL; + stereo_descriptor->cleanup = cleanup_Doubler; +} + + +void +delete_descriptor(LADSPA_Descriptor * descriptor) { + unsigned long index; + if (descriptor) { + free((char *)descriptor->Label); + free((char *)descriptor->Name); + free((char *)descriptor->Maker); + free((char *)descriptor->Copyright); + free((LADSPA_PortDescriptor *)descriptor->PortDescriptors); + for (index = 0; index < descriptor->PortCount; index++) + free((char *)(descriptor->PortNames[index])); + free((char **)descriptor->PortNames); + free((LADSPA_PortRangeHint *)descriptor->PortRangeHints); + free(descriptor); + } +} + + +/* __attribute__((destructor)) _fini() is called automatically when the library is unloaded. */ +void +__attribute__((destructor)) _fini() { + delete_descriptor(stereo_descriptor); +} + + +/* Return a descriptor of the requested plugin type. */ +const LADSPA_Descriptor * +ladspa_descriptor(unsigned long Index) { + + switch (Index) { + case 0: + return stereo_descriptor; + default: + return NULL; + } +} diff --git a/plugins/LadspaEffect/tap/tap_dynamics_m.c b/plugins/LadspaEffect/tap/tap_dynamics_m.c new file mode 100644 index 000000000..a3d83555f --- /dev/null +++ b/plugins/LadspaEffect/tap/tap_dynamics_m.c @@ -0,0 +1,666 @@ +/* -*- linux-c -*- + Copyright (C) 2004 Tom Szilagyi + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + $Id: tap_dynamics_m.c,v 1.2 2004/06/15 14:50:55 tszilagyi Exp $ +*/ + + +#include +#include +#include +#include +#include + +#include +#include "tap_utils.h" + + +/* ***** VERY IMPORTANT! ***** + * + * If you enable this, the plugin will use float arithmetics in DSP + * calculations. This usually yields lower average CPU usage, but + * occasionaly may result in high CPU peaks which cause trouble to you + * and your JACK server. The default is to use fixpoint arithmetics + * (with the following #define commented out). But (depending on the + * processor on which you run the code) you may find floating point + * mode usable. + */ +/*#define DYN_CALC_FLOAT*/ + + +typedef signed int sample; + +/* coefficient for float to sample (signed int) conversion */ +#define F2S 2147483 + + +#ifdef DYN_CALC_FLOAT +typedef LADSPA_Data dyn_t; +typedef float rms_t; +#else +typedef sample dyn_t; +typedef int64_t rms_t; +#endif + + + +/* The Unique ID of the plugin: */ + +#define ID_MONO 2152 + +/* The port numbers for the plugin: */ + +#define ATTACK 0 +#define RELEASE 1 +#define OFFSGAIN 2 +#define MUGAIN 3 +#define RMSENV 4 +#define MODGAIN 5 +#define MODE 6 +#define INPUT 7 +#define OUTPUT 8 + + +/* Total number of ports */ + +#define PORTCOUNT_MONO 9 + + +#define TABSIZE 256 +#define RMSSIZE 64 + + +typedef struct { + rms_t buffer[RMSSIZE]; + unsigned int pos; + rms_t sum; +} rms_env; + + +/* max. number of breakpoints on in/out dB graph */ +#define MAX_POINTS 20 + +typedef struct { + LADSPA_Data x; + LADSPA_Data y; +} GRAPH_POINT; + +typedef struct { + unsigned long num_points; + GRAPH_POINT points[MAX_POINTS]; +} DYNAMICS_DATA; + +#include "tap_dynamics_presets.h" + + +/* The structure used to hold port connection information and state */ + +typedef struct { + LADSPA_Data * attack; + LADSPA_Data * release; + LADSPA_Data * offsgain; + LADSPA_Data * mugain; + LADSPA_Data * rmsenv; + LADSPA_Data * modgain; + LADSPA_Data * mode; + LADSPA_Data * input; + LADSPA_Data * output; + unsigned long sample_rate; + + float * as; + unsigned long count; + dyn_t amp; + dyn_t env; + float gain; + float gain_out; + rms_env * rms; + rms_t sum; + + DYNAMICS_DATA graph; + + LADSPA_Data run_adding_gain; +} Dynamics; + + + +/* RMS envelope stuff, grabbed without a second thought from Steve Harris's swh-plugins, util/rms.c */ +/* Adapted, though, to be able to use fixed-point arithmetics as well. */ + +rms_env * +rms_env_new(void) { + + rms_env * new = (rms_env *)calloc(1, sizeof(rms_env)); + + return new; +} + +void +rms_env_reset(rms_env *r) { + + unsigned int i; + + for (i = 0; i < RMSSIZE; i++) { + r->buffer[i] = 0.0f; + } + r->pos = 0; + r->sum = 0.0f; +} + +inline static +dyn_t +rms_env_process(rms_env *r, const rms_t x) { + + r->sum -= r->buffer[r->pos]; + r->sum += x; + r->buffer[r->pos] = x; + r->pos = (r->pos + 1) & (RMSSIZE - 1); + +#ifdef DYN_CALC_FLOAT + return sqrt(r->sum / (float)RMSSIZE); +#else + return sqrt(r->sum / RMSSIZE); +#endif +} + + + +inline +LADSPA_Data +get_table_gain(int mode, LADSPA_Data level) { + + LADSPA_Data x1 = -80.0f; + LADSPA_Data y1 = -80.0f; + LADSPA_Data x2 = 0.0f; + LADSPA_Data y2 = 0.0f; + unsigned int i = 0; + + if (level <= -80.0f) + return get_table_gain(mode, -79.9f); + + while (i < dyn_data[mode].num_points && dyn_data[mode].points[i].x < level) { + x1 = dyn_data[mode].points[i].x; + y1 = dyn_data[mode].points[i].y; + i++; + } + if (i < dyn_data[mode].num_points) { + x2 = dyn_data[mode].points[i].x; + y2 = dyn_data[mode].points[i].y; + } else + return 0.0f; + + return y1 + ((level - x1) * (y2 - y1) / (x2 - x1)) - level; +} + + +/* Construct a new plugin instance. */ +LADSPA_Handle +instantiate_Dynamics(const LADSPA_Descriptor * Descriptor, unsigned long sample_rate) { + + LADSPA_Handle * ptr; + + float * as = NULL; + unsigned int count = 0; + dyn_t amp = 0.0f; + dyn_t env = 0.0f; + float gain = 0.0f; + float gain_out = 0.0f; + rms_env * rms = NULL; + rms_t sum = 0; + int i; + + if ((ptr = malloc(sizeof(Dynamics))) == NULL) + return NULL; + + ((Dynamics *)ptr)->sample_rate = sample_rate; + ((Dynamics *)ptr)->run_adding_gain = 1.0; + + if ((rms = rms_env_new()) == NULL) + return NULL; + + if ((as = malloc(TABSIZE * sizeof(float))) == NULL) + return NULL; + + as[0] = 1.0f; + for (i = 1; i < TABSIZE; i++) { + as[i] = expf(-1.0f / (sample_rate * (float)i / (float)TABSIZE)); + } + + ((Dynamics *)ptr)->as = as; + ((Dynamics *)ptr)->count = count; + ((Dynamics *)ptr)->amp = amp; + ((Dynamics *)ptr)->env = env; + ((Dynamics *)ptr)->gain = gain; + ((Dynamics *)ptr)->gain_out = gain_out; + ((Dynamics *)ptr)->rms = rms; + ((Dynamics *)ptr)->sum = sum; + + return ptr; +} + + + +/* Connect a port to a data location. */ +void +connect_port_Dynamics(LADSPA_Handle Instance, + unsigned long Port, + LADSPA_Data * DataLocation) { + + Dynamics * ptr = (Dynamics *)Instance; + + switch (Port) { + case ATTACK: + ptr->attack = DataLocation; + break; + case RELEASE: + ptr->release = DataLocation; + break; + case OFFSGAIN: + ptr->offsgain = DataLocation; + break; + case MUGAIN: + ptr->mugain = DataLocation; + break; + case RMSENV: + ptr->rmsenv = DataLocation; + *(ptr->rmsenv) = -60.0f; + break; + case MODGAIN: + ptr->modgain = DataLocation; + *(ptr->modgain) = 0.0f; + break; + case MODE: + ptr->mode = DataLocation; + break; + case INPUT: + ptr->input = DataLocation; + break; + case OUTPUT: + ptr->output = DataLocation; + break; + } +} + + + +void +run_Dynamics(LADSPA_Handle Instance, + unsigned long sample_count) { + + Dynamics * ptr = (Dynamics *)Instance; + LADSPA_Data * input = ptr->input; + LADSPA_Data * output = ptr->output; + const float attack = LIMIT(*(ptr->attack), 4.0f, 500.0f); + const float release = LIMIT(*(ptr->release), 4.0f, 1000.0f); + const float offsgain = LIMIT(*(ptr->offsgain), -20.0f, 20.0f); + const float mugain = db2lin(LIMIT(*(ptr->mugain), -20.0f, 20.0f)); + const int mode = LIMIT(*(ptr->mode), 0, NUM_MODES-1); + unsigned long sample_index; + + dyn_t amp = ptr->amp; + dyn_t env = ptr->env; + float * as = ptr->as; + unsigned int count = ptr->count; + float gain = ptr->gain; + float gain_out = ptr->gain_out; + rms_env * rms = ptr->rms; + rms_t sum = ptr->sum; + + const float ga = as[(unsigned int)(attack * 0.001f * (float)(TABSIZE-1))]; + const float gr = as[(unsigned int)(release * 0.001f * (float)(TABSIZE-1))]; + const float ef_a = ga * 0.25f; + const float ef_ai = 1.0f - ef_a; + + float level = 0.0f; + float adjust = 0.0f; + + for (sample_index = 0; sample_index < sample_count; sample_index++) { + +#ifdef DYN_CALC_FLOAT + sum += input[sample_index] * input[sample_index]; + if (amp > env) { + env = env * ga + amp * (1.0f - ga); + } else { + env = env * gr + amp * (1.0f - gr); + } +#else + sum += (rms_t)(input[sample_index] * F2S * input[sample_index] * F2S); + if (amp) { + if (amp > env) { + env = (double)env * ga + (double)amp * (1.0f - ga); + } else { + env = (double)env * gr + (double)amp * (1.0f - gr); + } + } else + env = 0; +#endif + + if (count++ % 4 == 3) { +#ifdef DYN_CALC_FLOAT + amp = rms_env_process(rms, sum / 4); +#else + if (sum) + amp = rms_env_process(rms, sum / 4); + else + amp = 0; +#endif + +#ifdef DYN_CALC_FLOAT + if (isnan(amp)) + amp = 0.0f; +#endif + sum = 0; + + /* set gain_out according to the difference between + the envelope volume level (env) and the corresponding + output level (from graph) */ +#ifdef DYN_CALC_FLOAT + level = 20 * log10f(2 * env); +#else + level = 20 * log10f(2 * (double)env / (double)F2S); +#endif + adjust = get_table_gain(mode, level + offsgain); + gain_out = db2lin(adjust); + + } + gain = gain * ef_a + gain_out * ef_ai; + output[sample_index] = input[sample_index] * gain * mugain; + } + ptr->sum = sum; + ptr->amp = amp; + ptr->gain = gain; + ptr->gain_out = gain_out; + ptr->env = env; + ptr->count = count; + + *(ptr->rmsenv) = LIMIT(level, -60.0f, 20.0f); + *(ptr->modgain) = LIMIT(adjust, -60.0f, 20.0f); +} + + + +void +set_run_adding_gain_Dynamics(LADSPA_Handle Instance, LADSPA_Data gain) { + + Dynamics * ptr = (Dynamics *)Instance; + + ptr->run_adding_gain = gain; +} + + + +void +run_adding_Dynamics(LADSPA_Handle Instance, + unsigned long sample_count) { + + Dynamics * ptr = (Dynamics *)Instance; + LADSPA_Data * input = ptr->input; + LADSPA_Data * output = ptr->output; + const float attack = LIMIT(*(ptr->attack), 4.0f, 500.0f); + const float release = LIMIT(*(ptr->release), 4.0f, 1000.0f); + const float offsgain = LIMIT(*(ptr->offsgain), -20.0f, 20.0f); + const float mugain = db2lin(LIMIT(*(ptr->mugain), -20.0f, 20.0f)); + const int mode = LIMIT(*(ptr->mode), 0, NUM_MODES-1); + unsigned long sample_index; + + dyn_t amp = ptr->amp; + dyn_t env = ptr->env; + float * as = ptr->as; + unsigned int count = ptr->count; + float gain = ptr->gain; + float gain_out = ptr->gain_out; + rms_env * rms = ptr->rms; + rms_t sum = ptr->sum; + + const float ga = as[(unsigned int)(attack * 0.001f * (float)(TABSIZE-1))]; + const float gr = as[(unsigned int)(release * 0.001f * (float)(TABSIZE-1))]; + const float ef_a = ga * 0.25f; + const float ef_ai = 1.0f - ef_a; + + float level = 0.0f; + float adjust = 0.0f; + + for (sample_index = 0; sample_index < sample_count; sample_index++) { + +#ifdef DYN_CALC_FLOAT + sum += input[sample_index] * input[sample_index]; + if (amp > env) { + env = env * ga + amp * (1.0f - ga); + } else { + env = env * gr + amp * (1.0f - gr); + } +#else + sum += (rms_t)(input[sample_index] * F2S * input[sample_index] * F2S); + if (amp) { + if (amp > env) { + env = (double)env * ga + (double)amp * (1.0f - ga); + } else { + env = (double)env * gr + (double)amp * (1.0f - gr); + } + } else + env = 0; +#endif + + if (count++ % 4 == 3) { +#ifdef DYN_CALC_FLOAT + amp = rms_env_process(rms, sum / 4); +#else + if (sum) + amp = rms_env_process(rms, sum / 4); + else + amp = 0; +#endif + +#ifdef DYN_CALC_FLOAT + if (isnan(amp)) + amp = 0.0f; +#endif + sum = 0; + + /* set gain_out according to the difference between + the envelope volume level (env) and the corresponding + output level (from graph) */ +#ifdef DYN_CALC_FLOAT + level = 20 * log10f(2 * env); +#else + level = 20 * log10f(2 * (double)env / (double)F2S); +#endif + adjust = get_table_gain(mode, level + offsgain); + gain_out = db2lin(adjust); + + } + gain = gain * ef_a + gain_out * ef_ai; + output[sample_index] += ptr->run_adding_gain * input[sample_index] * gain * mugain; + } + ptr->sum = sum; + ptr->amp = amp; + ptr->gain = gain; + ptr->gain_out = gain_out; + ptr->env = env; + ptr->count = count; + + *(ptr->rmsenv) = LIMIT(level, -60.0f, 20.0f); + *(ptr->modgain) = LIMIT(adjust, -60.0f, 20.0f); +} + + + + +/* Throw away a Dynamics effect instance. */ +void +cleanup_Dynamics(LADSPA_Handle Instance) { + + Dynamics * ptr = (Dynamics *)Instance; + + free(ptr->rms); + free(ptr->as); + free(Instance); +} + + + +LADSPA_Descriptor * mono_descriptor = NULL; + + + +/* __attribute__((constructor)) _init() is called automatically when the plugin library is first + loaded. */ +void +__attribute__((constructor)) _init() { + + char ** port_names; + LADSPA_PortDescriptor * port_descriptors; + LADSPA_PortRangeHint * port_range_hints; + + if ((mono_descriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor))) == NULL) + exit(1); + + mono_descriptor->UniqueID = ID_MONO; + mono_descriptor->Label = strdup("tap_dynamics_m"); + mono_descriptor->Properties = 0; + mono_descriptor->Name = strdup("TAP Dynamics (M)"); + mono_descriptor->Maker = strdup("Tom Szilagyi"); + mono_descriptor->Copyright = strdup("GPL"); + mono_descriptor->PortCount = PORTCOUNT_MONO; + + if ((port_descriptors = + (LADSPA_PortDescriptor *)calloc(PORTCOUNT_MONO, sizeof(LADSPA_PortDescriptor))) == NULL) + exit(1); + + mono_descriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; + port_descriptors[ATTACK] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_descriptors[RELEASE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_descriptors[OFFSGAIN] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_descriptors[MUGAIN] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_descriptors[MODE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_descriptors[RMSENV] = LADSPA_PORT_OUTPUT | LADSPA_PORT_CONTROL; + port_descriptors[MODGAIN] = LADSPA_PORT_OUTPUT | LADSPA_PORT_CONTROL; + port_descriptors[INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_descriptors[OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + + if ((port_names = + (char **)calloc(PORTCOUNT_MONO, sizeof(char *))) == NULL) + exit(1); + + mono_descriptor->PortNames = (const char **)port_names; + port_names[ATTACK] = strdup("Attack [ms]"); + port_names[RELEASE] = strdup("Release [ms]"); + port_names[OFFSGAIN] = strdup("Offset Gain [dB]"); + port_names[MUGAIN] = strdup("Makeup Gain [dB]"); + port_names[MODE] = strdup("Function"); + port_names[RMSENV] = strdup("Envelope Volume [dB]"); + port_names[MODGAIN] = strdup("Gain Adjustment [dB]"); + port_names[INPUT] = strdup("Input"); + port_names[OUTPUT] = strdup("Output"); + + if ((port_range_hints = + ((LADSPA_PortRangeHint *)calloc(PORTCOUNT_MONO, sizeof(LADSPA_PortRangeHint)))) == NULL) + exit(1); + + mono_descriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; + port_range_hints[ATTACK].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_LOW); + port_range_hints[RELEASE].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_MIDDLE); + port_range_hints[OFFSGAIN].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_0); + port_range_hints[MUGAIN].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_0); + port_range_hints[RMSENV].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_0); + port_range_hints[MODGAIN].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_0); + port_range_hints[MODE].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_INTEGER | + LADSPA_HINT_DEFAULT_0); + port_range_hints[ATTACK].LowerBound = 4.0f; + port_range_hints[ATTACK].UpperBound = 500.0f; + port_range_hints[RELEASE].LowerBound = 4.0f; + port_range_hints[RELEASE].UpperBound = 1000.0f; + port_range_hints[OFFSGAIN].LowerBound = -20.0f; + port_range_hints[OFFSGAIN].UpperBound = 20.0f; + port_range_hints[MUGAIN].LowerBound = -20.0f; + port_range_hints[MUGAIN].UpperBound = 20.0f; + port_range_hints[RMSENV].LowerBound = -60.0f; + port_range_hints[RMSENV].UpperBound = 20.0f; + port_range_hints[MODGAIN].LowerBound = -60.0f; + port_range_hints[MODGAIN].UpperBound = 20.0f; + port_range_hints[MODE].LowerBound = 0; + port_range_hints[MODE].UpperBound = NUM_MODES - 0.9f; + port_range_hints[INPUT].HintDescriptor = 0; + port_range_hints[OUTPUT].HintDescriptor = 0; + mono_descriptor->instantiate = instantiate_Dynamics; + mono_descriptor->connect_port = connect_port_Dynamics; + mono_descriptor->activate = NULL; + mono_descriptor->run = run_Dynamics; + mono_descriptor->run_adding = run_adding_Dynamics; + mono_descriptor->set_run_adding_gain = set_run_adding_gain_Dynamics; + mono_descriptor->deactivate = NULL; + mono_descriptor->cleanup = cleanup_Dynamics; +} + + +void +delete_descriptor(LADSPA_Descriptor * descriptor) { + unsigned long index; + if (descriptor) { + free((char *)descriptor->Label); + free((char *)descriptor->Name); + free((char *)descriptor->Maker); + free((char *)descriptor->Copyright); + free((LADSPA_PortDescriptor *)descriptor->PortDescriptors); + for (index = 0; index < descriptor->PortCount; index++) + free((char *)(descriptor->PortNames[index])); + free((char **)descriptor->PortNames); + free((LADSPA_PortRangeHint *)descriptor->PortRangeHints); + free(descriptor); + } +} + + +/* __attribute__((destructor)) _fini() is called automatically when the library is unloaded. */ +void +__attribute__((destructor)) _fini() { + delete_descriptor(mono_descriptor); +} + + +/* Return a descriptor of the requested plugin type. */ +const LADSPA_Descriptor * +ladspa_descriptor(unsigned long Index) { + + switch (Index) { + case 0: + return mono_descriptor; + default: + return NULL; + } +} diff --git a/plugins/LadspaEffect/tap/tap_dynamics_presets.h b/plugins/LadspaEffect/tap/tap_dynamics_presets.h new file mode 100644 index 000000000..3f229e599 --- /dev/null +++ b/plugins/LadspaEffect/tap/tap_dynamics_presets.h @@ -0,0 +1,204 @@ +/* -*- linux-c -*- + Copyright (C) 2004 Tom Szilagyi + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + $Id: tap_dynamics_presets.h,v 1.1 2004/05/01 16:15:06 tszilagyi Exp $ +*/ + + +/* Number of dynamics presets */ +#define NUM_MODES 15 + + +/* Dynamics presets data */ +DYNAMICS_DATA dyn_data[NUM_MODES] = { + + { /* 2:1 compression starting at -6 dB */ + 4, + { + {-80.0f, -80.0f}, + {-6.0f, -6.0f}, + {0.0f, -3.8f}, + {20.0f, 3.5f}, + }, + }, + + { /* 2:1 compression starting at -9 dB */ + 4, + { + {-80.0f, -80.0f}, + {-9.0f, -9.0f}, + {0.0f, -5.3f}, + {20.0f, 2.9f}, + }, + }, + + { /* 2:1 compression starting at -12 dB */ + 4, + { + {-80.0f, -80.0f}, + {-12.0f, -12.0f}, + {0.0f, -6.8f}, + {20.0f, 1.9f}, + }, + }, + + { /* 2:1 compression starting at -18 dB */ + 4, + { + {-80.0f, -80.0f}, + {-18.0f, -18.0f}, + {0.0f, -9.8f}, + {20.0f, -0.7f}, + }, + }, + + { /* 2.5:1 compression starting at -12 dB */ + 4, + { + {-80.0f, -80.0f}, + {-12.0f, -12.0f}, + {0.0f, -7.5f}, + {20.0f, 0.0f}, + }, + }, + + { /* 3:1 compression starting at -12 dB */ + 4, + { + {-80.0f, -80.0f}, + {-12.0f, -12.0f}, + {0.0f, -9.0f}, + {20.0f, -4.0f}, + }, + }, + + { /* 3:1 compression starting at -15 dB */ + 4, + { + {-80.0f, -80.0f}, + {-15.0f, -15.0f}, + {0.0f, -10.8f}, + {20.0f, -5.2f}, + }, + }, + + { /* Compressor/Gate */ + 5, + { + {-80.0f, -105.0f}, + {-62.0f, -80.0f}, + {-15.4f, -15.4f}, + {0.0f, -12.0f}, + {20.0f, -7.6f}, + }, + }, + + { /* Expander */ + 8, + { + {-80.0f, -169.0f}, + {-54.0f, -80.0f}, + {-49.5f, -64.6f}, + {-41.1f, -41.1f}, + {-25.8f, -15.0f}, + {-10.8f, -4.5f}, + {0.0f, 0.0f}, + {20.0f, 8.3f}, + }, + }, + + { /* Hard limiter at -6 dB */ + 3, + { + {-80.0f, -80.0f}, + {-6.0f, -6.0f}, + {20.0f, -6.0f}, + }, + }, + + + { /* Hard limiter at -12 dB */ + 3, + { + {-80.0f, -80.0f}, + {-12.0f, -12.0f}, + {20.0f, -12.0f}, + }, + }, + + { /* Hard noise gate at -35 dB */ + 4, + { + {-80.0f, -115.0f}, + {-35.1f, -80.0f}, + {-35.0f, -35.0f}, + {20.0f, 20.0f}, + }, + }, + + { /* Soft limiter */ + 5, + { + {-80.0f, -80.0f}, + {-12.4f, -12.4f}, + {-6.0f, -8.0f}, + {0.0f, -6.8f}, + {20.0f, -2.8f}, + }, + }, + + { /* Soft knee comp/gate (-24 dB threshold) */ + 8, + { + {-80.0f, -113.7f}, + {-46.3f, -80.0f}, + {-42.0f, -56.8f}, + {-33.6f, -36.3f}, + {-24.0f, -24.0f}, + {-11.1f, -15.4f}, + {0.0f, -12.0f}, + {20.0f, -5.8f}, + }, + }, + + { /* Soft noise gate below -36 dB */ + 7, + { + {-80.0f, -104.0f}, + {-56.0f, -80.0f}, + {-51.8f, -67.2f}, + {-44.7f, -49.3f}, + {-34.0f, -34.0f}, + {0.0f, 0.0f}, + {20.0f, 20.0f}, + }, + }, + + + + + + + /* You can add your own presets here. + * Please read the docs about the format. + */ + + + + +}; + diff --git a/plugins/LadspaEffect/tap/tap_dynamics_st.c b/plugins/LadspaEffect/tap/tap_dynamics_st.c new file mode 100644 index 000000000..bab3b8b16 --- /dev/null +++ b/plugins/LadspaEffect/tap/tap_dynamics_st.c @@ -0,0 +1,877 @@ +/* -*- linux-c -*- + Copyright (C) 2004 Tom Szilagyi + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + $Id: tap_dynamics_st.c,v 1.2 2004/06/15 14:50:55 tszilagyi Exp $ +*/ + + +#include +#include +#include +#include +#include + +#include +#include "tap_utils.h" + + +/* ***** VERY IMPORTANT! ***** + * + * If you enable this, the plugin will use float arithmetics in DSP + * calculations. This usually yields lower average CPU usage, but + * occasionaly may result in high CPU peaks which cause trouble to you + * and your JACK server. The default is to use fixpoint arithmetics + * (with the following #define commented out). But (depending on the + * processor on which you run the code) you may find floating point + * mode usable. + */ +/*#define DYN_CALC_FLOAT*/ + + +typedef signed int sample; + +/* coefficient for float to sample (signed int) conversion */ +/* this allows for about 60 dB headroom above 0dB, if 0 dB is equivalent to 1.0f */ +/* As 2^31 equals more than 180 dB, about 120 dB dynamics remains below 0 dB */ +#define F2S 2147483 + + +#ifdef DYN_CALC_FLOAT +typedef LADSPA_Data dyn_t; +typedef float rms_t; +#else +typedef sample dyn_t; +typedef int64_t rms_t; +#endif + + + +/* The Unique ID of the plugin: */ + +#define ID_STEREO 2153 + +/* The port numbers for the plugin: */ + +#define ATTACK 0 +#define RELEASE 1 +#define OFFSGAIN 2 +#define MUGAIN 3 +#define RMSENV_L 4 +#define RMSENV_R 5 +#define MODGAIN_L 6 +#define MODGAIN_R 7 +#define STEREO 8 +#define MODE 9 +#define INPUT_L 10 +#define INPUT_R 11 +#define OUTPUT_L 12 +#define OUTPUT_R 13 + + +/* Total number of ports */ + +#define PORTCOUNT_STEREO 14 + + +#define TABSIZE 256 +#define RMSSIZE 64 + + +typedef struct { + rms_t buffer[RMSSIZE]; + unsigned int pos; + rms_t sum; +} rms_env; + + +/* max. number of breakpoints on in/out dB graph */ +#define MAX_POINTS 20 + +typedef struct { + LADSPA_Data x; + LADSPA_Data y; +} GRAPH_POINT; + +typedef struct { + unsigned long num_points; + GRAPH_POINT points[MAX_POINTS]; +} DYNAMICS_DATA; + +#include "tap_dynamics_presets.h" + + +/* The structure used to hold port connection information and state */ + +typedef struct { + LADSPA_Data * attack; + LADSPA_Data * release; + LADSPA_Data * offsgain; + LADSPA_Data * mugain; + LADSPA_Data * rmsenv_L; + LADSPA_Data * rmsenv_R; + LADSPA_Data * modgain_L; + LADSPA_Data * modgain_R; + LADSPA_Data * stereo; + LADSPA_Data * mode; + LADSPA_Data * input_L; + LADSPA_Data * output_L; + LADSPA_Data * input_R; + LADSPA_Data * output_R; + unsigned long sample_rate; + + float * as; + unsigned long count; + dyn_t amp_L; + dyn_t amp_R; + dyn_t env_L; + dyn_t env_R; + float gain_L; + float gain_R; + float gain_out_L; + float gain_out_R; + rms_env * rms_L; + rms_env * rms_R; + rms_t sum_L; + rms_t sum_R; + + DYNAMICS_DATA graph; + + LADSPA_Data run_adding_gain; +} Dynamics; + + + +/* RMS envelope stuff, grabbed without a second thought from Steve Harris's swh-plugins, util/rms.c */ +/* Adapted, though, to be able to use fixed-point arithmetics as well. */ + +rms_env * +rms_env_new(void) { + + rms_env * new = (rms_env *)calloc(1, sizeof(rms_env)); + + return new; +} + +void +rms_env_reset(rms_env *r) { + + unsigned int i; + + for (i = 0; i < RMSSIZE; i++) { + r->buffer[i] = 0.0f; + } + r->pos = 0; + r->sum = 0.0f; +} + +inline static +dyn_t +rms_env_process(rms_env *r, const rms_t x) { + + r->sum -= r->buffer[r->pos]; + r->sum += x; + r->buffer[r->pos] = x; + r->pos = (r->pos + 1) & (RMSSIZE - 1); + +#ifdef DYN_CALC_FLOAT + return sqrt(r->sum / (float)RMSSIZE); +#else + return sqrt(r->sum / RMSSIZE); +#endif +} + + + +inline +LADSPA_Data +get_table_gain(int mode, LADSPA_Data level) { + + LADSPA_Data x1 = -80.0f; + LADSPA_Data y1 = -80.0f; + LADSPA_Data x2 = 0.0f; + LADSPA_Data y2 = 0.0f; + unsigned int i = 0; + + if (level <= -80.0f) + return get_table_gain(mode, -79.9f); + + while (i < dyn_data[mode].num_points && dyn_data[mode].points[i].x < level) { + x1 = dyn_data[mode].points[i].x; + y1 = dyn_data[mode].points[i].y; + i++; + } + if (i < dyn_data[mode].num_points) { + x2 = dyn_data[mode].points[i].x; + y2 = dyn_data[mode].points[i].y; + } else + return 0.0f; + + return y1 + ((level - x1) * (y2 - y1) / (x2 - x1)) - level; +} + + +/* Construct a new plugin instance. */ +LADSPA_Handle +instantiate_Dynamics(const LADSPA_Descriptor * Descriptor, unsigned long sample_rate) { + + LADSPA_Handle * ptr; + + float * as = NULL; + unsigned int count = 0; + dyn_t amp_L = 0.0f; + dyn_t amp_R = 0.0f; + dyn_t env_L = 0.0f; + dyn_t env_R = 0.0f; + float gain_L = 0.0f; + float gain_R = 0.0f; + float gain_out_L = 0.0f; + float gain_out_R = 0.0f; + rms_env * rms_L = NULL; + rms_env * rms_R = NULL; + rms_t sum_L = 0.0f; + rms_t sum_R = 0.0f; + int i; + + if ((ptr = malloc(sizeof(Dynamics))) == NULL) + return NULL; + + ((Dynamics *)ptr)->sample_rate = sample_rate; + ((Dynamics *)ptr)->run_adding_gain = 1.0; + + if ((rms_L = rms_env_new()) == NULL) + return NULL; + if ((rms_R = rms_env_new()) == NULL) + return NULL; + + if ((as = malloc(TABSIZE * sizeof(float))) == NULL) + return NULL; + + as[0] = 1.0f; + for (i = 1; i < TABSIZE; i++) { + as[i] = expf(-1.0f / (sample_rate * (float)i / (float)TABSIZE)); + } + + ((Dynamics *)ptr)->as = as; + ((Dynamics *)ptr)->count = count; + ((Dynamics *)ptr)->amp_L = amp_L; + ((Dynamics *)ptr)->amp_R = amp_R; + ((Dynamics *)ptr)->env_L = env_L; + ((Dynamics *)ptr)->env_R = env_R; + ((Dynamics *)ptr)->gain_L = gain_L; + ((Dynamics *)ptr)->gain_R = gain_R; + ((Dynamics *)ptr)->gain_out_L = gain_out_L; + ((Dynamics *)ptr)->gain_out_R = gain_out_R; + ((Dynamics *)ptr)->rms_L = rms_L; + ((Dynamics *)ptr)->rms_R = rms_R; + ((Dynamics *)ptr)->sum_L = sum_L; + ((Dynamics *)ptr)->sum_R = sum_R; + + return ptr; +} + + + +/* Connect a port to a data location. */ +void +connect_port_Dynamics(LADSPA_Handle Instance, + unsigned long Port, + LADSPA_Data * DataLocation) { + + Dynamics * ptr = (Dynamics *)Instance; + + switch (Port) { + case ATTACK: + ptr->attack = DataLocation; + break; + case RELEASE: + ptr->release = DataLocation; + break; + case OFFSGAIN: + ptr->offsgain = DataLocation; + break; + case MUGAIN: + ptr->mugain = DataLocation; + break; + case RMSENV_L: + ptr->rmsenv_L = DataLocation; + *(ptr->rmsenv_L) = -60.0f; + break; + case RMSENV_R: + ptr->rmsenv_R = DataLocation; + *(ptr->rmsenv_R) = -60.0f; + break; + case MODGAIN_L: + ptr->modgain_L = DataLocation; + *(ptr->modgain_L) = 0.0f; + break; + case MODGAIN_R: + ptr->modgain_R = DataLocation; + *(ptr->modgain_R) = 0.0f; + break; + case STEREO: + ptr->stereo = DataLocation; + break; + case MODE: + ptr->mode = DataLocation; + break; + case INPUT_L: + ptr->input_L = DataLocation; + break; + case OUTPUT_L: + ptr->output_L = DataLocation; + break; + case INPUT_R: + ptr->input_R = DataLocation; + break; + case OUTPUT_R: + ptr->output_R = DataLocation; + break; + } +} + + + +void +run_Dynamics(LADSPA_Handle Instance, + unsigned long sample_count) { + + Dynamics * ptr = (Dynamics *)Instance; + LADSPA_Data * input_L = ptr->input_L; + LADSPA_Data * output_L = ptr->output_L; + LADSPA_Data * input_R = ptr->input_R; + LADSPA_Data * output_R = ptr->output_R; + const float attack = LIMIT(*(ptr->attack), 4.0f, 500.0f); + const float release = LIMIT(*(ptr->release), 4.0f, 1000.0f); + const float offsgain = LIMIT(*(ptr->offsgain), -20.0f, 20.0f); + const float mugain = db2lin(LIMIT(*(ptr->mugain), -20.0f, 20.0f)); + const int stereo = LIMIT(*(ptr->stereo), 0, 2); + const int mode = LIMIT(*(ptr->mode), 0, NUM_MODES-1); + unsigned long sample_index; + + dyn_t amp_L = ptr->amp_L; + dyn_t amp_R = ptr->amp_R; + dyn_t env_L = ptr->env_L; + dyn_t env_R = ptr->env_R; + float * as = ptr->as; + unsigned int count = ptr->count; + float gain_L = ptr->gain_L; + float gain_R = ptr->gain_R; + float gain_out_L = ptr->gain_out_L; + float gain_out_R = ptr->gain_out_R; + rms_env * rms_L = ptr->rms_L; + rms_env * rms_R = ptr->rms_R; + rms_t sum_L = ptr->sum_L; + rms_t sum_R = ptr->sum_R; + + const float ga = as[(unsigned int)(attack * 0.001f * (LADSPA_Data)(TABSIZE-1))]; + const float gr = as[(unsigned int)(release * 0.001f * (LADSPA_Data)(TABSIZE-1))]; + const float ef_a = ga * 0.25f; + const float ef_ai = 1.0f - ef_a; + + float level_L = 0.0f; + float level_R = 0.0f; + float adjust_L = 0.0f; + float adjust_R = 0.0f; + + for (sample_index = 0; sample_index < sample_count; sample_index++) { + +#ifdef DYN_CALC_FLOAT + sum_L += input_L[sample_index] * input_L[sample_index]; + sum_R += input_R[sample_index] * input_R[sample_index]; + + if (amp_L > env_L) { + env_L = env_L * ga + amp_L * (1.0f - ga); + } else { + env_L = env_L * gr + amp_L * (1.0f - gr); + } + if (amp_R > env_R) { + env_R = env_R * ga + amp_R * (1.0f - ga); + } else { + env_R = env_R * gr + amp_R * (1.0f - gr); + } +#else + sum_L += (rms_t)(input_L[sample_index] * F2S) * (rms_t)(input_L[sample_index] * F2S); + sum_R += (rms_t)(input_R[sample_index] * F2S) * (rms_t)(input_R[sample_index] * F2S); + + if (amp_L) { + if (amp_L > env_L) { + env_L = (double)env_L * ga + (double)amp_L * (1.0f - ga); + } else { + env_L = (double)env_L * gr + (double)amp_L * (1.0f - gr); + } + } else + env_L = 0; + + if (amp_R) { + if (amp_R > env_R) { + env_R = (double)env_R * ga + (double)amp_R * (1.0f - ga); + } else { + env_R = (double)env_R * gr + (double)amp_R * (1.0f - gr); + } + } else + env_R = 0; +#endif + + if (count++ % 4 == 3) { +#ifdef DYN_CALC_FLOAT + amp_L = rms_env_process(rms_L, sum_L * 0.25f); + amp_R = rms_env_process(rms_R, sum_R * 0.25f); +#else + if (sum_L) + amp_L = rms_env_process(rms_L, sum_L * 0.25f); + else + amp_L = 0; + + if (sum_R) + amp_R = rms_env_process(rms_R, sum_R * 0.25f); + else + amp_R = 0; +#endif + + +#ifdef DYN_CALC_FLOAT + if (isnan(amp_L)) + amp_L = 0.0f; + if (isnan(amp_R)) + amp_R = 0.0f; +#endif + sum_L = sum_R = 0; + + /* set gain_out according to the difference between + the envelope volume level (env) and the corresponding + output level (from graph) */ +#ifdef DYN_CALC_FLOAT + level_L = 20 * log10f(2 * env_L); + level_R = 20 * log10f(2 * env_R); +#else + level_L = 20 * log10f(2 * (double)env_L / (double)F2S); + level_R = 20 * log10f(2 * (double)env_R / (double)F2S); +#endif + adjust_L = get_table_gain(mode, level_L + offsgain); + adjust_R = get_table_gain(mode, level_R + offsgain); + + /* set gains according to stereo mode */ + switch (stereo) { + case 0: + gain_out_L = db2lin(adjust_L); + gain_out_R = db2lin(adjust_R); + break; + case 1: + adjust_L = adjust_R = (adjust_L + adjust_R) / 2.0f; + gain_out_L = gain_out_R = db2lin(adjust_L); + break; + case 2: + adjust_L = adjust_R = (adjust_L > adjust_R) ? adjust_L : adjust_R; + gain_out_L = gain_out_R = db2lin(adjust_L); + break; + } + + } + gain_L = gain_L * ef_a + gain_out_L * ef_ai; + gain_R = gain_R * ef_a + gain_out_R * ef_ai; + output_L[sample_index] = input_L[sample_index] * gain_L * mugain; + output_R[sample_index] = input_R[sample_index] * gain_R * mugain; + } + ptr->sum_L = sum_L; + ptr->sum_R = sum_R; + ptr->amp_L = amp_L; + ptr->amp_R = amp_R; + ptr->gain_L = gain_L; + ptr->gain_R = gain_R; + ptr->gain_out_L = gain_out_L; + ptr->gain_out_R = gain_out_R; + ptr->env_L = env_L; + ptr->env_R = env_R; + ptr->count = count; + + *(ptr->rmsenv_L) = LIMIT(level_L, -60.0f, 20.0f); + *(ptr->rmsenv_R) = LIMIT(level_R, -60.0f, 20.0f); + *(ptr->modgain_L) = LIMIT(adjust_L, -60.0f, 20.0f); + *(ptr->modgain_R) = LIMIT(adjust_R, -60.0f, 20.0f); +} + + + +void +set_run_adding_gain_Dynamics(LADSPA_Handle Instance, LADSPA_Data gain) { + + Dynamics * ptr = (Dynamics *)Instance; + + ptr->run_adding_gain = gain; +} + + + +void +run_adding_Dynamics(LADSPA_Handle Instance, + unsigned long sample_count) { + + Dynamics * ptr = (Dynamics *)Instance; + LADSPA_Data * input_L = ptr->input_L; + LADSPA_Data * output_L = ptr->output_L; + LADSPA_Data * input_R = ptr->input_R; + LADSPA_Data * output_R = ptr->output_R; + const float attack = LIMIT(*(ptr->attack), 4.0f, 500.0f); + const float release = LIMIT(*(ptr->release), 4.0f, 1000.0f); + const float offsgain = LIMIT(*(ptr->offsgain), -20.0f, 20.0f); + const float mugain = db2lin(LIMIT(*(ptr->mugain), -20.0f, 20.0f)); + const int stereo = LIMIT(*(ptr->stereo), 0, 2); + const int mode = LIMIT(*(ptr->mode), 0, NUM_MODES-1); + unsigned long sample_index; + + dyn_t amp_L = ptr->amp_L; + dyn_t amp_R = ptr->amp_R; + dyn_t env_L = ptr->env_L; + dyn_t env_R = ptr->env_R; + float * as = ptr->as; + unsigned int count = ptr->count; + float gain_L = ptr->gain_L; + float gain_R = ptr->gain_R; + float gain_out_L = ptr->gain_out_L; + float gain_out_R = ptr->gain_out_R; + rms_env * rms_L = ptr->rms_L; + rms_env * rms_R = ptr->rms_R; + rms_t sum_L = ptr->sum_L; + rms_t sum_R = ptr->sum_R; + + const float ga = as[(unsigned int)(attack * 0.001f * (LADSPA_Data)(TABSIZE-1))]; + const float gr = as[(unsigned int)(release * 0.001f * (LADSPA_Data)(TABSIZE-1))]; + const float ef_a = ga * 0.25f; + const float ef_ai = 1.0f - ef_a; + + float level_L = 0.0f; + float level_R = 0.0f; + float adjust_L = 0.0f; + float adjust_R = 0.0f; + + for (sample_index = 0; sample_index < sample_count; sample_index++) { + +#ifdef DYN_CALC_FLOAT + sum_L += input_L[sample_index] * input_L[sample_index]; + sum_R += input_R[sample_index] * input_R[sample_index]; + + if (amp_L > env_L) { + env_L = env_L * ga + amp_L * (1.0f - ga); + } else { + env_L = env_L * gr + amp_L * (1.0f - gr); + } + if (amp_R > env_R) { + env_R = env_R * ga + amp_R * (1.0f - ga); + } else { + env_R = env_R * gr + amp_R * (1.0f - gr); + } +#else + sum_L += (rms_t)(input_L[sample_index] * F2S) * (rms_t)(input_L[sample_index] * F2S); + sum_R += (rms_t)(input_R[sample_index] * F2S) * (rms_t)(input_R[sample_index] * F2S); + + if (amp_L) { + if (amp_L > env_L) { + env_L = (double)env_L * ga + (double)amp_L * (1.0f - ga); + } else { + env_L = (double)env_L * gr + (double)amp_L * (1.0f - gr); + } + } else + env_L = 0; + + if (amp_R) { + if (amp_R > env_R) { + env_R = (double)env_R * ga + (double)amp_R * (1.0f - ga); + } else { + env_R = (double)env_R * gr + (double)amp_R * (1.0f - gr); + } + } else + env_R = 0; +#endif + + if (count++ % 4 == 3) { +#ifdef DYN_CALC_FLOAT + amp_L = rms_env_process(rms_L, sum_L * 0.25f); + amp_R = rms_env_process(rms_R, sum_R * 0.25f); +#else + if (sum_L) + amp_L = rms_env_process(rms_L, sum_L * 0.25f); + else + amp_L = 0; + + if (sum_R) + amp_R = rms_env_process(rms_R, sum_R * 0.25f); + else + amp_R = 0; +#endif + + +#ifdef DYN_CALC_FLOAT + if (isnan(amp_L)) + amp_L = 0.0f; + if (isnan(amp_R)) + amp_R = 0.0f; +#endif + sum_L = sum_R = 0; + + /* set gain_out according to the difference between + the envelope volume level (env) and the corresponding + output level (from graph) */ +#ifdef DYN_CALC_FLOAT + level_L = 20 * log10f(2 * env_L); + level_R = 20 * log10f(2 * env_R); +#else + level_L = 20 * log10f(2 * (double)env_L / (double)F2S); + level_R = 20 * log10f(2 * (double)env_R / (double)F2S); +#endif + adjust_L = get_table_gain(mode, level_L + offsgain); + adjust_R = get_table_gain(mode, level_R + offsgain); + + /* set gains according to stereo mode */ + switch (stereo) { + case 0: + gain_out_L = db2lin(adjust_L); + gain_out_R = db2lin(adjust_R); + break; + case 1: + adjust_L = adjust_R = (adjust_L + adjust_R) / 2.0f; + gain_out_L = gain_out_R = db2lin(adjust_L); + break; + case 2: + adjust_L = adjust_R = (adjust_L > adjust_R) ? adjust_L : adjust_R; + gain_out_L = gain_out_R = db2lin(adjust_L); + break; + } + + } + gain_L = gain_L * ef_a + gain_out_L * ef_ai; + gain_R = gain_R * ef_a + gain_out_R * ef_ai; + output_L[sample_index] += ptr->run_adding_gain * input_L[sample_index] * gain_L * mugain; + output_R[sample_index] += ptr->run_adding_gain * input_R[sample_index] * gain_R * mugain; + } + ptr->sum_L = sum_L; + ptr->sum_R = sum_R; + ptr->amp_L = amp_L; + ptr->amp_R = amp_R; + ptr->gain_L = gain_L; + ptr->gain_R = gain_R; + ptr->gain_out_L = gain_out_L; + ptr->gain_out_R = gain_out_R; + ptr->env_L = env_L; + ptr->env_R = env_R; + ptr->count = count; + + *(ptr->rmsenv_L) = LIMIT(level_L, -60.0f, 20.0f); + *(ptr->rmsenv_R) = LIMIT(level_R, -60.0f, 20.0f); + *(ptr->modgain_L) = LIMIT(adjust_L, -60.0f, 20.0f); + *(ptr->modgain_R) = LIMIT(adjust_R, -60.0f, 20.0f); +} + + + + +/* Throw away a Dynamics effect instance. */ +void +cleanup_Dynamics(LADSPA_Handle Instance) { + + Dynamics * ptr = (Dynamics *)Instance; + + free(ptr->rms_L); + free(ptr->rms_R); + free(ptr->as); + free(Instance); +} + + + +LADSPA_Descriptor * stereo_descriptor = NULL; + + + +/* __attribute__((constructor)) _init() is called automatically when the plugin library is first + loaded. */ +void +__attribute__((constructor)) _init() { + + char ** port_names; + LADSPA_PortDescriptor * port_descriptors; + LADSPA_PortRangeHint * port_range_hints; + + if ((stereo_descriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor))) == NULL) + exit(1); + + stereo_descriptor->UniqueID = ID_STEREO; + stereo_descriptor->Label = strdup("tap_dynamics_st"); + stereo_descriptor->Properties = 0; + stereo_descriptor->Name = strdup("TAP Dynamics (St)"); + stereo_descriptor->Maker = strdup("Tom Szilagyi"); + stereo_descriptor->Copyright = strdup("GPL"); + stereo_descriptor->PortCount = PORTCOUNT_STEREO; + + if ((port_descriptors = + (LADSPA_PortDescriptor *)calloc(PORTCOUNT_STEREO, sizeof(LADSPA_PortDescriptor))) == NULL) + exit(1); + + stereo_descriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; + port_descriptors[ATTACK] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_descriptors[RELEASE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_descriptors[OFFSGAIN] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_descriptors[MUGAIN] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_descriptors[STEREO] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_descriptors[MODE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_descriptors[RMSENV_L] = LADSPA_PORT_OUTPUT | LADSPA_PORT_CONTROL; + port_descriptors[RMSENV_R] = LADSPA_PORT_OUTPUT | LADSPA_PORT_CONTROL; + port_descriptors[MODGAIN_L] = LADSPA_PORT_OUTPUT | LADSPA_PORT_CONTROL; + port_descriptors[MODGAIN_R] = LADSPA_PORT_OUTPUT | LADSPA_PORT_CONTROL; + port_descriptors[INPUT_L] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_descriptors[INPUT_R] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_descriptors[OUTPUT_L] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_descriptors[OUTPUT_R] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + + if ((port_names = + (char **)calloc(PORTCOUNT_STEREO, sizeof(char *))) == NULL) + exit(1); + + stereo_descriptor->PortNames = (const char **)port_names; + port_names[ATTACK] = strdup("Attack [ms]"); + port_names[RELEASE] = strdup("Release [ms]"); + port_names[OFFSGAIN] = strdup("Offset Gain [dB]"); + port_names[MUGAIN] = strdup("Makeup Gain [dB]"); + port_names[STEREO] = strdup("Stereo Mode"); + port_names[MODE] = strdup("Function"); + port_names[RMSENV_L] = strdup("Envelope Volume (L) [dB]"); + port_names[RMSENV_R] = strdup("Envelope Volume (R) [dB]"); + port_names[MODGAIN_L] = strdup("Gain Adjustment (L) [dB]"); + port_names[MODGAIN_R] = strdup("Gain Adjustment (R) [dB]"); + port_names[INPUT_L] = strdup("Input Left"); + port_names[INPUT_R] = strdup("Input Right"); + port_names[OUTPUT_L] = strdup("Output Left"); + port_names[OUTPUT_R] = strdup("Output Right"); + + if ((port_range_hints = + ((LADSPA_PortRangeHint *)calloc(PORTCOUNT_STEREO, sizeof(LADSPA_PortRangeHint)))) == NULL) + exit(1); + + stereo_descriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; + port_range_hints[ATTACK].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_LOW); + port_range_hints[RELEASE].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_MIDDLE); + port_range_hints[OFFSGAIN].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_0); + port_range_hints[MUGAIN].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_0); + port_range_hints[RMSENV_L].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_0); + port_range_hints[RMSENV_R].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_0); + port_range_hints[MODGAIN_L].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_0); + port_range_hints[MODGAIN_R].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_0); + port_range_hints[STEREO].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_INTEGER | + LADSPA_HINT_DEFAULT_0); + port_range_hints[MODE].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_INTEGER | + LADSPA_HINT_DEFAULT_0); + port_range_hints[ATTACK].LowerBound = 4.0f; + port_range_hints[ATTACK].UpperBound = 500.0f; + port_range_hints[RELEASE].LowerBound = 4.0f; + port_range_hints[RELEASE].UpperBound = 1000.0f; + port_range_hints[OFFSGAIN].LowerBound = -20.0f; + port_range_hints[OFFSGAIN].UpperBound = 20.0f; + port_range_hints[MUGAIN].LowerBound = -20.0f; + port_range_hints[MUGAIN].UpperBound = 20.0f; + port_range_hints[RMSENV_L].LowerBound = -60.0f; + port_range_hints[RMSENV_L].UpperBound = 20.0f; + port_range_hints[RMSENV_R].LowerBound = -60.0f; + port_range_hints[RMSENV_R].UpperBound = 20.0f; + port_range_hints[MODGAIN_L].LowerBound = -60.0f; + port_range_hints[MODGAIN_L].UpperBound = 20.0f; + port_range_hints[MODGAIN_R].LowerBound = -60.0f; + port_range_hints[MODGAIN_R].UpperBound = 20.0f; + port_range_hints[STEREO].LowerBound = 0; + port_range_hints[STEREO].UpperBound = 2.1f; + port_range_hints[MODE].LowerBound = 0; + port_range_hints[MODE].UpperBound = NUM_MODES - 0.9f; + port_range_hints[INPUT_L].HintDescriptor = 0; + port_range_hints[INPUT_R].HintDescriptor = 0; + port_range_hints[OUTPUT_L].HintDescriptor = 0; + port_range_hints[OUTPUT_R].HintDescriptor = 0; + stereo_descriptor->instantiate = instantiate_Dynamics; + stereo_descriptor->connect_port = connect_port_Dynamics; + stereo_descriptor->activate = NULL; + stereo_descriptor->run = run_Dynamics; + stereo_descriptor->run_adding = run_adding_Dynamics; + stereo_descriptor->set_run_adding_gain = set_run_adding_gain_Dynamics; + stereo_descriptor->deactivate = NULL; + stereo_descriptor->cleanup = cleanup_Dynamics; +} + + +void +delete_descriptor(LADSPA_Descriptor * descriptor) { + unsigned long index; + if (descriptor) { + free((char *)descriptor->Label); + free((char *)descriptor->Name); + free((char *)descriptor->Maker); + free((char *)descriptor->Copyright); + free((LADSPA_PortDescriptor *)descriptor->PortDescriptors); + for (index = 0; index < descriptor->PortCount; index++) + free((char *)(descriptor->PortNames[index])); + free((char **)descriptor->PortNames); + free((LADSPA_PortRangeHint *)descriptor->PortRangeHints); + free(descriptor); + } +} + + +/* __attribute__((destructor)) _fini() is called automatically when the library is unloaded. */ +void +__attribute__((destructor)) _fini() { + delete_descriptor(stereo_descriptor); +} + + +/* Return a descriptor of the requested plugin type. */ +const LADSPA_Descriptor * +ladspa_descriptor(unsigned long Index) { + + switch (Index) { + case 0: + return stereo_descriptor; + default: + return NULL; + } +} diff --git a/plugins/LadspaEffect/tap/tap_echo.c b/plugins/LadspaEffect/tap/tap_echo.c new file mode 100644 index 000000000..c1aed7ff8 --- /dev/null +++ b/plugins/LadspaEffect/tap/tap_echo.c @@ -0,0 +1,629 @@ +/* -*- linux-c -*- + Copyright (C) 2004 Tom Szilagyi + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + $Id: tap_echo.c,v 1.7 2004/12/06 09:32:41 tszilagyi Exp $ +*/ + + +#include +#include +#include +#include + +#include +#include "tap_utils.h" + +/* The Unique ID of the plugin: */ + +#define ID_STEREO 2143 + +/* The port numbers for the plugin: */ + +#define DELAYTIME_L 0 +#define FEEDBACK_L 1 +#define DELAYTIME_R 2 +#define FEEDBACK_R 3 +#define STRENGTH_L 4 +#define STRENGTH_R 5 +#define DRYLEVEL 6 +#define MODE 7 +#define HAAS 8 +#define REV_OUTCH 9 + +#define INPUT_L 10 +#define OUTPUT_L 11 +#define INPUT_R 12 +#define OUTPUT_R 13 + +/* Total number of ports */ + +#define PORTCOUNT_STEREO 14 + + +/* Maximum delay (ms) */ + +#define MAX_DELAY 2000 + + +/* The structure used to hold port connection information and state */ + +typedef struct { + LADSPA_Data * delaytime_L; + LADSPA_Data * delaytime_R; + LADSPA_Data * feedback_L; + LADSPA_Data * feedback_R; + LADSPA_Data * strength_L; + LADSPA_Data * strength_R; + LADSPA_Data * drylevel; + LADSPA_Data * mode; + LADSPA_Data * haas; + LADSPA_Data * rev_outch; + + LADSPA_Data * input_L; + LADSPA_Data * output_L; + LADSPA_Data * input_R; + LADSPA_Data * output_R; + + unsigned long sample_rate; + LADSPA_Data mpx_out_L; + LADSPA_Data mpx_out_R; + + LADSPA_Data * ringbuffer_L; + LADSPA_Data * ringbuffer_R; + unsigned long * buffer_pos_L; + unsigned long * buffer_pos_R; + + LADSPA_Data run_adding_gain; +} Echo; + + + + +/* Construct a new plugin instance. */ +LADSPA_Handle +instantiate_Echo(const LADSPA_Descriptor * Descriptor, + unsigned long SampleRate) { + + LADSPA_Handle * ptr; + + if ((ptr = malloc(sizeof(Echo))) != NULL) { + ((Echo *)ptr)->sample_rate = SampleRate; + ((Echo *)ptr)->run_adding_gain = 1.0f; + + /* allocate memory for ringbuffers and related dynamic vars */ + if ((((Echo *)ptr)->ringbuffer_L = + calloc(MAX_DELAY * ((Echo *)ptr)->sample_rate / 1000, + sizeof(LADSPA_Data))) == NULL) + exit(1); + if ((((Echo *)ptr)->ringbuffer_R = + calloc(MAX_DELAY * ((Echo *)ptr)->sample_rate / 1000, + sizeof(LADSPA_Data))) == NULL) + exit(1); + if ((((Echo *)ptr)->buffer_pos_L = calloc(1, sizeof(unsigned long))) == NULL) + exit(1); + if ((((Echo *)ptr)->buffer_pos_R = calloc(1, sizeof(unsigned long))) == NULL) + exit(1); + + *(((Echo *)ptr)->buffer_pos_L) = 0; + *(((Echo *)ptr)->buffer_pos_R) = 0; + + return ptr; + } + + return NULL; +} + + +/* activate a plugin instance */ +void +activate_Echo(LADSPA_Handle Instance) { + + Echo * ptr = (Echo *)Instance; + unsigned int i; + + ptr->mpx_out_L = 0; + ptr->mpx_out_R = 0; + + *(ptr->buffer_pos_L) = 0; + *(ptr->buffer_pos_R) = 0; + + for (i = 0; i < MAX_DELAY * ptr->sample_rate / 1000; i++) { + ptr->ringbuffer_L[i] = 0.0f; + ptr->ringbuffer_R[i] = 0.0f; + } +} + + +/* Connect a port to a data location. */ +void +connect_port_Echo(LADSPA_Handle Instance, + unsigned long Port, + LADSPA_Data * DataLocation) { + + Echo * ptr; + + ptr = (Echo *)Instance; + switch (Port) { + case DELAYTIME_L: + ptr->delaytime_L = DataLocation; + break; + case DELAYTIME_R: + ptr->delaytime_R = DataLocation; + break; + case FEEDBACK_L: + ptr->feedback_L = DataLocation; + break; + case FEEDBACK_R: + ptr->feedback_R = DataLocation; + break; + case STRENGTH_L: + ptr->strength_L = DataLocation; + break; + case STRENGTH_R: + ptr->strength_R = DataLocation; + break; + case MODE: + ptr->mode = DataLocation; + break; + case HAAS: + ptr->haas = DataLocation; + break; + case REV_OUTCH: + ptr->rev_outch = DataLocation; + break; + case DRYLEVEL: + ptr->drylevel = DataLocation; + break; + case INPUT_L: + ptr->input_L = DataLocation; + break; + case OUTPUT_L: + ptr->output_L = DataLocation; + break; + case INPUT_R: + ptr->input_R = DataLocation; + break; + case OUTPUT_R: + ptr->output_R = DataLocation; + break; + } +} + + +#define EPS 0.00000001f + +static inline float +M(float x) { + + if ((x > EPS) || (x < -EPS)) + return x; + else + return 0.0f; +} + +void +run_Echo(LADSPA_Handle Instance, + unsigned long SampleCount) { + + Echo * ptr; + unsigned long sample_index; + + LADSPA_Data delaytime_L; + LADSPA_Data delaytime_R; + LADSPA_Data feedback_L; + LADSPA_Data feedback_R; + LADSPA_Data strength_L; + LADSPA_Data strength_R; + LADSPA_Data drylevel; + LADSPA_Data mode; + LADSPA_Data haas; + LADSPA_Data rev_outch; + + LADSPA_Data * input_L; + LADSPA_Data * output_L; + LADSPA_Data * input_R; + LADSPA_Data * output_R; + + unsigned long sample_rate; + unsigned long buflen_L; + unsigned long buflen_R; + + LADSPA_Data out_L = 0; + LADSPA_Data out_R = 0; + LADSPA_Data in_L = 0; + LADSPA_Data in_R = 0; + + ptr = (Echo *)Instance; + + delaytime_L = LIMIT(*(ptr->delaytime_L),0.0f,2000.0f); + delaytime_R = LIMIT(*(ptr->delaytime_R),0.0f,2000.0f); + feedback_L = LIMIT(*(ptr->feedback_L) / 100.0, 0.0f, 100.0f); + feedback_R = LIMIT(*(ptr->feedback_R) / 100.0, 0.0f, 100.0f); + strength_L = db2lin(LIMIT(*(ptr->strength_L),-70.0f,10.0f)); + strength_R = db2lin(LIMIT(*(ptr->strength_R),-70.0f,10.0f)); + drylevel = db2lin(LIMIT(*(ptr->drylevel),-70.0f,10.0f)); + mode = LIMIT(*(ptr->mode),-2.0f,2.0f); + haas = LIMIT(*(ptr->haas),-2.0f,2.0f); + rev_outch = LIMIT(*(ptr->rev_outch),-2.0f,2.0f); + + input_L = ptr->input_L; + output_L = ptr->output_L; + input_R = ptr->input_R; + output_R = ptr->output_R; + + sample_rate = ptr->sample_rate; + buflen_L = delaytime_L * sample_rate / 1000; + buflen_R = delaytime_R * sample_rate / 1000; + + + for (sample_index = 0; sample_index < SampleCount; sample_index++) { + + in_L = *(input_L++); + in_R = *(input_R++); + + out_L = in_L * drylevel + ptr->mpx_out_L * strength_L; + out_R = in_R * drylevel + ptr->mpx_out_R * strength_R; + + if (haas > 0.0f) + in_R = 0.0f; + + if (mode <= 0.0f) { + ptr->mpx_out_L = + M(push_buffer(in_L + ptr->mpx_out_L * feedback_L, + ptr->ringbuffer_L, buflen_L, ptr->buffer_pos_L)); + ptr->mpx_out_R = + M(push_buffer(in_R + ptr->mpx_out_R * feedback_R, + ptr->ringbuffer_R, buflen_R, ptr->buffer_pos_R)); + } else { + ptr->mpx_out_R = + M(push_buffer(in_L + ptr->mpx_out_L * feedback_L, + ptr->ringbuffer_L, buflen_L, ptr->buffer_pos_L)); + ptr->mpx_out_L = + M(push_buffer(in_R + ptr->mpx_out_R * feedback_R, + ptr->ringbuffer_R, buflen_R, ptr->buffer_pos_R)); + } + + if (rev_outch <= 0.0f) { + *(output_L++) = out_L; + *(output_R++) = out_R; + } else { + *(output_L++) = out_R; + *(output_R++) = out_L; + } + } +} + + + + + +void +set_run_adding_gain(LADSPA_Handle Instance, LADSPA_Data gain){ + + Echo * ptr; + + ptr = (Echo *)Instance; + + ptr->run_adding_gain = gain; +} + + +void +run_adding_gain_Echo(LADSPA_Handle Instance, + unsigned long SampleCount) { + + Echo * ptr; + unsigned long sample_index; + + LADSPA_Data delaytime_L; + LADSPA_Data delaytime_R; + LADSPA_Data feedback_L; + LADSPA_Data feedback_R; + LADSPA_Data strength_L; + LADSPA_Data strength_R; + LADSPA_Data drylevel; + LADSPA_Data mode; + LADSPA_Data haas; + LADSPA_Data rev_outch; + + LADSPA_Data * input_L; + LADSPA_Data * output_L; + LADSPA_Data * input_R; + LADSPA_Data * output_R; + + unsigned long sample_rate; + unsigned long buflen_L; + unsigned long buflen_R; + + LADSPA_Data out_L = 0; + LADSPA_Data out_R = 0; + LADSPA_Data in_L = 0; + LADSPA_Data in_R = 0; + + ptr = (Echo *)Instance; + + delaytime_L = LIMIT(*(ptr->delaytime_L),0.0f,2000.0f); + delaytime_R = LIMIT(*(ptr->delaytime_R),0.0f,2000.0f); + feedback_L = LIMIT(*(ptr->feedback_L) / 100.0, 0.0f, 100.0f); + feedback_R = LIMIT(*(ptr->feedback_R) / 100.0, 0.0f, 100.0f); + strength_L = db2lin(LIMIT(*(ptr->strength_L),-70.0f,10.0f)); + strength_R = db2lin(LIMIT(*(ptr->strength_R),-70.0f,10.0f)); + drylevel = db2lin(LIMIT(*(ptr->drylevel),-70.0f,10.0f)); + mode = LIMIT(*(ptr->mode),-2.0f,2.0f); + haas = LIMIT(*(ptr->haas),-2.0f,2.0f); + rev_outch = LIMIT(*(ptr->rev_outch),-2.0f,2.0f); + + input_L = ptr->input_L; + output_L = ptr->output_L; + input_R = ptr->input_R; + output_R = ptr->output_R; + + sample_rate = ptr->sample_rate; + buflen_L = delaytime_L * sample_rate / 1000; + buflen_R = delaytime_R * sample_rate / 1000; + + + for (sample_index = 0; sample_index < SampleCount; sample_index++) { + + in_L = *(input_L++); + in_R = *(input_R++); + + out_L = in_L * drylevel + ptr->mpx_out_L * strength_L; + out_R = in_R * drylevel + ptr->mpx_out_R * strength_R; + + if (haas > 0.0f) + in_R = 0.0f; + + if (mode <= 0.0f) { + ptr->mpx_out_L = + M(push_buffer(in_L + ptr->mpx_out_L * feedback_L, + ptr->ringbuffer_L, buflen_L, ptr->buffer_pos_L)); + ptr->mpx_out_R = + M(push_buffer(in_R + ptr->mpx_out_R * feedback_R, + ptr->ringbuffer_R, buflen_R, ptr->buffer_pos_R)); + } else { + ptr->mpx_out_R = + M(push_buffer(in_L + ptr->mpx_out_L * feedback_L, + ptr->ringbuffer_L, buflen_L, ptr->buffer_pos_L)); + ptr->mpx_out_L = + M(push_buffer(in_R + ptr->mpx_out_R * feedback_R, + ptr->ringbuffer_R, buflen_R, ptr->buffer_pos_R)); + } + + if (rev_outch <= 0.0f) { + *(output_L++) += out_L * ptr->run_adding_gain; + *(output_R++) += out_R * ptr->run_adding_gain; + } else { + *(output_L++) += out_R * ptr->run_adding_gain; + *(output_R++) += out_L * ptr->run_adding_gain; + } + } +} + + + +/* Throw away an Echo effect instance. */ +void +cleanup_Echo(LADSPA_Handle Instance) { + + Echo * ptr = (Echo *)Instance; + + free(ptr->ringbuffer_L); + free(ptr->ringbuffer_R); + free(ptr->buffer_pos_L); + free(ptr->buffer_pos_R); + + free(Instance); +} + + + +LADSPA_Descriptor * stereo_descriptor = NULL; + + + +/* __attribute__((constructor)) _init() is called automatically when the plugin library is first + loaded. */ +void +__attribute__((constructor)) _init() { + + char ** port_names; + LADSPA_PortDescriptor * port_descriptors; + LADSPA_PortRangeHint * port_range_hints; + + if ((stereo_descriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor))) == NULL) + exit(1); + + + /* init the stereo Echo */ + + stereo_descriptor->UniqueID = ID_STEREO; + stereo_descriptor->Label = strdup("tap_stereo_echo"); + stereo_descriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; + stereo_descriptor->Name = strdup("TAP Stereo Echo"); + stereo_descriptor->Maker = strdup("Tom Szilagyi"); + stereo_descriptor->Copyright = strdup("GPL"); + stereo_descriptor->PortCount = PORTCOUNT_STEREO; + + if ((port_descriptors = + (LADSPA_PortDescriptor *)calloc(PORTCOUNT_STEREO, sizeof(LADSPA_PortDescriptor))) == NULL) + exit(1); + + stereo_descriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; + port_descriptors[DELAYTIME_L] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_descriptors[DELAYTIME_R] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_descriptors[FEEDBACK_L] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_descriptors[FEEDBACK_R] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_descriptors[STRENGTH_L] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_descriptors[STRENGTH_R] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_descriptors[DRYLEVEL] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_descriptors[MODE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_descriptors[HAAS] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_descriptors[REV_OUTCH] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + + port_descriptors[INPUT_L] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_descriptors[OUTPUT_L] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_descriptors[INPUT_R] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_descriptors[OUTPUT_R] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + + if ((port_names = + (char **)calloc(PORTCOUNT_STEREO, sizeof(char *))) == NULL) + exit(1); + + stereo_descriptor->PortNames = (const char **)port_names; + + port_names[DELAYTIME_L] = strdup("L Delay [ms]"); + port_names[DELAYTIME_R] = strdup("R/Haas Delay [ms]"); + port_names[FEEDBACK_L] = strdup("L Feedback [%]"); + port_names[FEEDBACK_R] = strdup("R/Haas Feedback [%]"); + port_names[STRENGTH_L] = strdup("L Echo Level [dB]"); + port_names[STRENGTH_R] = strdup("R Echo Level [dB]"); + port_names[DRYLEVEL] = strdup("Dry Level [dB]"); + port_names[MODE] = strdup("Cross Mode"); + port_names[HAAS] = strdup("Haas Effect"); + port_names[REV_OUTCH] = strdup("Swap Outputs"); + + port_names[INPUT_L] = strdup("Input Left"); + port_names[OUTPUT_L] = strdup("Output Left"); + port_names[INPUT_R] = strdup("Input Right"); + port_names[OUTPUT_R] = strdup("Output Right"); + + if ((port_range_hints = + ((LADSPA_PortRangeHint *)calloc(PORTCOUNT_STEREO, sizeof(LADSPA_PortRangeHint)))) == NULL) + exit(1); + + stereo_descriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; + + port_range_hints[DELAYTIME_L].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_100); + port_range_hints[DELAYTIME_L].LowerBound = 0; + port_range_hints[DELAYTIME_L].UpperBound = MAX_DELAY; + + port_range_hints[DELAYTIME_R].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_100); + port_range_hints[DELAYTIME_R].LowerBound = 0; + port_range_hints[DELAYTIME_R].UpperBound = MAX_DELAY; + + port_range_hints[FEEDBACK_L].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_0); + port_range_hints[FEEDBACK_L].LowerBound = 0; + port_range_hints[FEEDBACK_L].UpperBound = 100; + + port_range_hints[FEEDBACK_R].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_0); + port_range_hints[FEEDBACK_R].LowerBound = 0; + port_range_hints[FEEDBACK_R].UpperBound = 100; + + port_range_hints[STRENGTH_L].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_0); + port_range_hints[STRENGTH_L].LowerBound = -70; + port_range_hints[STRENGTH_L].UpperBound = 10; + + port_range_hints[STRENGTH_R].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_0); + port_range_hints[STRENGTH_R].LowerBound = -70; + port_range_hints[STRENGTH_R].UpperBound = 10; + + port_range_hints[MODE].HintDescriptor = + (LADSPA_HINT_TOGGLED | + LADSPA_HINT_DEFAULT_0); + + port_range_hints[HAAS].HintDescriptor = + (LADSPA_HINT_TOGGLED | + LADSPA_HINT_DEFAULT_0); + + port_range_hints[REV_OUTCH].HintDescriptor = + (LADSPA_HINT_TOGGLED | + LADSPA_HINT_DEFAULT_0); + + port_range_hints[DRYLEVEL].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_0); + port_range_hints[DRYLEVEL].LowerBound = -70; + port_range_hints[DRYLEVEL].UpperBound = 10; + + + port_range_hints[INPUT_L].HintDescriptor = 0; + port_range_hints[OUTPUT_L].HintDescriptor = 0; + port_range_hints[INPUT_R].HintDescriptor = 0; + port_range_hints[OUTPUT_R].HintDescriptor = 0; + + + stereo_descriptor->instantiate = instantiate_Echo; + stereo_descriptor->connect_port = connect_port_Echo; + stereo_descriptor->activate = activate_Echo; + stereo_descriptor->run = run_Echo; + stereo_descriptor->run_adding = run_adding_gain_Echo; + stereo_descriptor->set_run_adding_gain = set_run_adding_gain; + stereo_descriptor->deactivate = NULL; + stereo_descriptor->cleanup = cleanup_Echo; + +} + + +void +delete_descriptor(LADSPA_Descriptor * descriptor) { + unsigned long index; + if (descriptor) { + free((char *)descriptor->Label); + free((char *)descriptor->Name); + free((char *)descriptor->Maker); + free((char *)descriptor->Copyright); + free((LADSPA_PortDescriptor *)descriptor->PortDescriptors); + for (index = 0; index < descriptor->PortCount; index++) + free((char *)(descriptor->PortNames[index])); + free((char **)descriptor->PortNames); + free((LADSPA_PortRangeHint *)descriptor->PortRangeHints); + free(descriptor); + } +} + + +/* __attribute__((destructor)) _fini() is called automatically when the library is unloaded. */ +void +__attribute__((destructor)) _fini() { + delete_descriptor(stereo_descriptor); +} + + +/* Return a descriptor of the requested plugin type. */ + +const +LADSPA_Descriptor * +ladspa_descriptor(unsigned long Index) { + + switch (Index) { + case 0: + return stereo_descriptor; + default: + return NULL; + } +} diff --git a/plugins/LadspaEffect/tap/tap_eq.c b/plugins/LadspaEffect/tap/tap_eq.c new file mode 100644 index 000000000..90c5dd7ab --- /dev/null +++ b/plugins/LadspaEffect/tap/tap_eq.c @@ -0,0 +1,777 @@ +/* -*- linux-c -*- + Copyright (C) 2004 Tom Szilagyi + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + $Id: tap_eq.c,v 1.7 2006/08/09 12:03:24 tszilagyi Exp $ +*/ + + +/* Please note that this plugin was inspired by and its code based +upon Steve Harris's "DJ EQ" plugin (no. 1901). While I give him +credit for his excellent work, I reserve myself to be blamed for any +bugs or malfunction. */ + + +#include +#include +#include + +#include +#include "tap_utils.h" + +/* The Unique ID of the plugin */ +#define ID_MONO 2141 + + +/* Bandwidth of EQ filters in octaves */ +#define BWIDTH 1.0f + + +/* Port numbers */ + +#define EQ_CH0G 0 +#define EQ_CH1G 1 +#define EQ_CH2G 2 +#define EQ_CH3G 3 +#define EQ_CH4G 4 +#define EQ_CH5G 5 +#define EQ_CH6G 6 +#define EQ_CH7G 7 + +#define EQ_CH0F 8 +#define EQ_CH1F 9 +#define EQ_CH2F 10 +#define EQ_CH3F 11 +#define EQ_CH4F 12 +#define EQ_CH5F 13 +#define EQ_CH6F 14 +#define EQ_CH7F 15 + +#define EQ_INPUT 16 +#define EQ_OUTPUT 17 + + +/* Total number of ports */ +#define PORTCOUNT_MONO 18 + + +static LADSPA_Descriptor *eqDescriptor = NULL; + +typedef struct { + LADSPA_Data *ch0f; + LADSPA_Data *ch0g; + LADSPA_Data *ch1f; + LADSPA_Data *ch1g; + LADSPA_Data *ch2f; + LADSPA_Data *ch2g; + LADSPA_Data *ch3f; + LADSPA_Data *ch3g; + LADSPA_Data *ch4f; + LADSPA_Data *ch4g; + LADSPA_Data *ch5f; + LADSPA_Data *ch5g; + LADSPA_Data *ch6f; + LADSPA_Data *ch6g; + LADSPA_Data *ch7f; + LADSPA_Data *ch7g; + LADSPA_Data *input; + LADSPA_Data *output; + biquad * filters; + float fs; + LADSPA_Data old_ch0f; + LADSPA_Data old_ch0g; + LADSPA_Data old_ch1f; + LADSPA_Data old_ch1g; + LADSPA_Data old_ch2f; + LADSPA_Data old_ch2g; + LADSPA_Data old_ch3f; + LADSPA_Data old_ch3g; + LADSPA_Data old_ch4f; + LADSPA_Data old_ch4g; + LADSPA_Data old_ch5f; + LADSPA_Data old_ch5g; + LADSPA_Data old_ch6f; + LADSPA_Data old_ch6g; + LADSPA_Data old_ch7f; + LADSPA_Data old_ch7g; + + LADSPA_Data run_adding_gain; +} eq; + +const +LADSPA_Descriptor * +ladspa_descriptor(unsigned long index) { + + switch (index) { + case 0: + return eqDescriptor; + default: + return NULL; + } +} + +static +void +activate_eq(LADSPA_Handle instance) { + + eq *ptr = (eq *)instance; + biquad *filters = ptr->filters; + + biquad_init(&filters[0]); + biquad_init(&filters[1]); + biquad_init(&filters[2]); + biquad_init(&filters[3]); + biquad_init(&filters[4]); + biquad_init(&filters[5]); + biquad_init(&filters[6]); + biquad_init(&filters[7]); +} + + + +static +void +cleanup_eq(LADSPA_Handle instance) { + + free(instance); +} + + +static +void +connectPort_eq(LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { + + eq *plugin; + + plugin = (eq *)instance; + switch (port) { + case EQ_CH0F: + plugin->ch0f = data; + break; + case EQ_CH0G: + plugin->ch0g = data; + break; + case EQ_CH1F: + plugin->ch1f = data; + break; + case EQ_CH1G: + plugin->ch1g = data; + break; + case EQ_CH2F: + plugin->ch2f = data; + break; + case EQ_CH2G: + plugin->ch2g = data; + break; + case EQ_CH3F: + plugin->ch3f = data; + break; + case EQ_CH3G: + plugin->ch3g = data; + break; + case EQ_CH4F: + plugin->ch4f = data; + break; + case EQ_CH4G: + plugin->ch4g = data; + break; + case EQ_CH5F: + plugin->ch5f = data; + break; + case EQ_CH5G: + plugin->ch5g = data; + break; + case EQ_CH6F: + plugin->ch6f = data; + break; + case EQ_CH6G: + plugin->ch6g = data; + break; + case EQ_CH7F: + plugin->ch7f = data; + break; + case EQ_CH7G: + plugin->ch7g = data; + break; + case EQ_INPUT: + plugin->input = data; + break; + case EQ_OUTPUT: + plugin->output = data; + break; + } +} + +static +LADSPA_Handle +instantiate_eq(const LADSPA_Descriptor *descriptor, unsigned long s_rate) { + + eq *ptr = (eq *)malloc(sizeof(eq)); + biquad *filters = NULL; + float fs; + + fs = s_rate; + + memset(ptr, 0, sizeof(eq)); + + filters = calloc(8, sizeof(biquad)); + + ptr->filters = filters; + ptr->fs = fs; + ptr->run_adding_gain = 1.0f; + + ptr->old_ch0f = 100.0f; + ptr->old_ch0g = 0; + + ptr->old_ch1f = 200.0f; + ptr->old_ch1g = 0; + + ptr->old_ch2f = 400.0f; + ptr->old_ch2g = 0; + + ptr->old_ch3f = 1000.0f; + ptr->old_ch3g = 0; + + ptr->old_ch4f = 3000.0f; + ptr->old_ch4g = 0; + + ptr->old_ch5f = 6000.0f; + ptr->old_ch5g = 0; + + ptr->old_ch6f = 12000.0f; + ptr->old_ch6g = 0; + + ptr->old_ch7f = 15000.0f; + ptr->old_ch7g = 0; + + eq_set_params(&filters[0], 100.0f, 0.0f, BWIDTH, fs); + eq_set_params(&filters[1], 200.0f, 0.0f, BWIDTH, fs); + eq_set_params(&filters[2], 400.0f, 0.0f, BWIDTH, fs); + eq_set_params(&filters[3], 1000.0f, 0.0f, BWIDTH, fs); + eq_set_params(&filters[4], 3000.0f, 0.0f, BWIDTH, fs); + eq_set_params(&filters[5], 6000.0f, 0.0f, BWIDTH, fs); + eq_set_params(&filters[6], 12000.0f, 0.0f, BWIDTH, fs); + eq_set_params(&filters[7], 15000.0f, 0.0f, BWIDTH, fs); + + return (LADSPA_Handle)ptr; +} + + +static +void +run_eq(LADSPA_Handle instance, unsigned long sample_count) { + + eq * ptr = (eq *)instance; + + const LADSPA_Data ch0f = LIMIT(*(ptr->ch0f),40.0f,280.0f); + const LADSPA_Data ch0g = LIMIT(*(ptr->ch0g),-50.0f,20.0f); + const LADSPA_Data ch1f = LIMIT(*(ptr->ch1f),100.0f,500.0f); + const LADSPA_Data ch1g = LIMIT(*(ptr->ch1g),-50.0f,20.0f); + const LADSPA_Data ch2f = LIMIT(*(ptr->ch2f),200.0f,1000.0f); + const LADSPA_Data ch2g = LIMIT(*(ptr->ch2g),-50.0f,20.0f); + const LADSPA_Data ch3f = LIMIT(*(ptr->ch3f),400.0f,2800.0f); + const LADSPA_Data ch3g = LIMIT(*(ptr->ch3g),-50.0f,20.0f); + const LADSPA_Data ch4f = LIMIT(*(ptr->ch4f),1000.0f,5000.0f); + const LADSPA_Data ch4g = LIMIT(*(ptr->ch4g),-50.0f,20.0f); + const LADSPA_Data ch5f = LIMIT(*(ptr->ch5f),3000.0f,9000.0f); + const LADSPA_Data ch5g = LIMIT(*(ptr->ch5g),-50.0f,20.0f); + const LADSPA_Data ch6f = LIMIT(*(ptr->ch6f),6000.0f,18000.0f); + const LADSPA_Data ch6g = LIMIT(*(ptr->ch6g),-50.0f,20.0f); + const LADSPA_Data ch7f = LIMIT(*(ptr->ch7f),10000.0f,20000.0f); + const LADSPA_Data ch7g = LIMIT(*(ptr->ch7g),-50.0f,20.0f); + + const LADSPA_Data * input = ptr->input; + LADSPA_Data * output = ptr->output; + + biquad * filters = ptr->filters; + float fs = ptr->fs; + + unsigned long pos; + float samp; + + + if ((ch0f != ptr->old_ch0f) || + (ch0g != ptr->old_ch0g)) { + ptr->old_ch0f = ch0f; + ptr->old_ch0g = ch0g; + eq_set_params(&filters[0], ch0f, ch0g, BWIDTH, fs); + } + if ((ch1f != ptr->old_ch1f) || + (ch1g != ptr->old_ch1g)) { + ptr->old_ch1f = ch1f; + ptr->old_ch1g = ch1g; + eq_set_params(&filters[1], ch1f, ch1g, BWIDTH, fs); + } + if ((ch2f != ptr->old_ch2f) || + (ch2g != ptr->old_ch2g)) { + ptr->old_ch2f = ch2f; + ptr->old_ch2g = ch2g; + eq_set_params(&filters[2], ch2f, ch2g, BWIDTH, fs); + } + if ((ch3f != ptr->old_ch3f) || + (ch3g != ptr->old_ch3g)) { + ptr->old_ch3f = ch3f; + ptr->old_ch3g = ch3g; + eq_set_params(&filters[3], ch3f, ch3g, BWIDTH, fs); + } + if ((ch4f != ptr->old_ch4f) || + (ch4g != ptr->old_ch4g)) { + ptr->old_ch4f = ch4f; + ptr->old_ch4g = ch4g; + eq_set_params(&filters[4], ch4f, ch4g, BWIDTH, fs); + } + if ((ch5f != ptr->old_ch5f) || + (ch5g != ptr->old_ch5g)) { + ptr->old_ch5f = ch5f; + ptr->old_ch5g = ch5g; + eq_set_params(&filters[5], ch5f, ch5g, BWIDTH, fs); + } + if ((ch6f != ptr->old_ch6f) || + (ch6g != ptr->old_ch6g)) { + ptr->old_ch6f = ch6f; + ptr->old_ch6g = ch6g; + eq_set_params(&filters[6], ch6f, ch6g, BWIDTH, fs); + } + if ((ch7f != ptr->old_ch7f) || + (ch7g != ptr->old_ch7g)) { + ptr->old_ch7f = ch7f; + ptr->old_ch7g = ch7g; + eq_set_params(&filters[7], ch7f, ch7g, BWIDTH, fs); + } + + for (pos = 0; pos < sample_count; pos++) { + samp = input[pos]; + if (ch0g != 0.0f) + samp = biquad_run(&filters[0], samp); + if (ch1g != 0.0f) + samp = biquad_run(&filters[1], samp); + if (ch2g != 0.0f) + samp = biquad_run(&filters[2], samp); + if (ch3g != 0.0f) + samp = biquad_run(&filters[3], samp); + if (ch4g != 0.0f) + samp = biquad_run(&filters[4], samp); + if (ch5g != 0.0f) + samp = biquad_run(&filters[5], samp); + if (ch6g != 0.0f) + samp = biquad_run(&filters[6], samp); + if (ch7g != 0.0f) + samp = biquad_run(&filters[7], samp); + output[pos] = samp; + } +} + + + +void +set_run_adding_gain(LADSPA_Handle instance, LADSPA_Data gain) { + + eq * ptr = (eq *)instance; + + ptr->run_adding_gain = gain; +} + + + +static +void +run_adding_eq(LADSPA_Handle instance, unsigned long sample_count) { + + eq * ptr = (eq *)instance; + + const LADSPA_Data ch0f = LIMIT(*(ptr->ch0f),40.0f,280.0f); + const LADSPA_Data ch0g = LIMIT(*(ptr->ch0g),-50.0f,20.0f); + const LADSPA_Data ch1f = LIMIT(*(ptr->ch1f),100.0f,500.0f); + const LADSPA_Data ch1g = LIMIT(*(ptr->ch1g),-50.0f,20.0f); + const LADSPA_Data ch2f = LIMIT(*(ptr->ch2f),200.0f,1000.0f); + const LADSPA_Data ch2g = LIMIT(*(ptr->ch2g),-50.0f,20.0f); + const LADSPA_Data ch3f = LIMIT(*(ptr->ch3f),400.0f,2800.0f); + const LADSPA_Data ch3g = LIMIT(*(ptr->ch3g),-50.0f,20.0f); + const LADSPA_Data ch4f = LIMIT(*(ptr->ch4f),1000.0f,5000.0f); + const LADSPA_Data ch4g = LIMIT(*(ptr->ch4g),-50.0f,20.0f); + const LADSPA_Data ch5f = LIMIT(*(ptr->ch5f),3000.0f,9000.0f); + const LADSPA_Data ch5g = LIMIT(*(ptr->ch5g),-50.0f,20.0f); + const LADSPA_Data ch6f = LIMIT(*(ptr->ch6f),6000.0f,18000.0f); + const LADSPA_Data ch6g = LIMIT(*(ptr->ch6g),-50.0f,20.0f); + const LADSPA_Data ch7f = LIMIT(*(ptr->ch7f),10000.0f,20000.0f); + const LADSPA_Data ch7g = LIMIT(*(ptr->ch7g),-50.0f,20.0f); + + const LADSPA_Data * input = ptr->input; + LADSPA_Data * output = ptr->output; + + biquad * filters = ptr->filters; + float fs = ptr->fs; + + unsigned long pos; + float samp; + + + if ((ch0f != ptr->old_ch0f) || + (ch0g != ptr->old_ch0g)) { + ptr->old_ch0f = ch0f; + ptr->old_ch0g = ch0g; + eq_set_params(&filters[0], ch0f, ch0g, BWIDTH, fs); + } + if ((ch1f != ptr->old_ch1f) || + (ch1g != ptr->old_ch1g)) { + ptr->old_ch1f = ch1f; + ptr->old_ch1g = ch1g; + eq_set_params(&filters[1], ch1f, ch1g, BWIDTH, fs); + } + if ((ch2f != ptr->old_ch2f) || + (ch2g != ptr->old_ch2g)) { + ptr->old_ch2f = ch2f; + ptr->old_ch2g = ch2g; + eq_set_params(&filters[2], ch2f, ch2g, BWIDTH, fs); + } + if ((ch3f != ptr->old_ch3f) || + (ch3g != ptr->old_ch3g)) { + ptr->old_ch3f = ch3f; + ptr->old_ch3g = ch3g; + eq_set_params(&filters[3], ch3f, ch3g, BWIDTH, fs); + } + if ((ch4f != ptr->old_ch4f) || + (ch4g != ptr->old_ch4g)) { + ptr->old_ch4f = ch4f; + ptr->old_ch4g = ch4g; + eq_set_params(&filters[4], ch4f, ch4g, BWIDTH, fs); + } + if ((ch5f != ptr->old_ch5f) || + (ch5g != ptr->old_ch5g)) { + ptr->old_ch5f = ch5f; + ptr->old_ch5g = ch5g; + eq_set_params(&filters[5], ch5f, ch5g, BWIDTH, fs); + } + if ((ch6f != ptr->old_ch6f) || + (ch6g != ptr->old_ch6g)) { + ptr->old_ch6f = ch6f; + ptr->old_ch6g = ch6g; + eq_set_params(&filters[6], ch6f, ch6g, BWIDTH, fs); + } + if ((ch7f != ptr->old_ch7f) || + (ch7g != ptr->old_ch7g)) { + ptr->old_ch7f = ch7f; + ptr->old_ch7g = ch7g; + eq_set_params(&filters[7], ch7f, ch7g, BWIDTH, fs); + } + + for (pos = 0; pos < sample_count; pos++) { + samp = input[pos]; + if (ch0g != 0.0f) + samp = biquad_run(&filters[0], samp); + if (ch1g != 0.0f) + samp = biquad_run(&filters[1], samp); + if (ch2g != 0.0f) + samp = biquad_run(&filters[2], samp); + if (ch3g != 0.0f) + samp = biquad_run(&filters[3], samp); + if (ch4g != 0.0f) + samp = biquad_run(&filters[4], samp); + if (ch5g != 0.0f) + samp = biquad_run(&filters[5], samp); + if (ch6g != 0.0f) + samp = biquad_run(&filters[6], samp); + if (ch7g != 0.0f) + samp = biquad_run(&filters[7], samp); + output[pos] += ptr->run_adding_gain * samp; + } +} + + + + +void +__attribute__((constructor)) _init() { + + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + + eqDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (eqDescriptor) { + eqDescriptor->UniqueID = ID_MONO; + eqDescriptor->Label = "tap_equalizer"; + eqDescriptor->Properties = 0; + eqDescriptor->Name = "TAP Equalizer"; + eqDescriptor->Maker = "Tom Szilagyi"; + eqDescriptor->Copyright = "GPL"; + eqDescriptor->PortCount = PORTCOUNT_MONO; + + port_descriptors = + (LADSPA_PortDescriptor *)calloc(PORTCOUNT_MONO, + sizeof(LADSPA_PortDescriptor)); + eqDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = + (LADSPA_PortRangeHint *)calloc(PORTCOUNT_MONO, + sizeof(LADSPA_PortRangeHint)); + eqDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(PORTCOUNT_MONO, sizeof(char*)); + eqDescriptor->PortNames = + (const char **)port_names; + + + + /* Parameters for CH0 freq [Hz] */ + port_descriptors[EQ_CH0F] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[EQ_CH0F] = + "Band 1 Freq [Hz]"; + port_range_hints[EQ_CH0F].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_LOW; + port_range_hints[EQ_CH0F].LowerBound = 40; + port_range_hints[EQ_CH0F].UpperBound = 280; + /* Parameters for CH0 gain [dB] */ + port_descriptors[EQ_CH0G] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[EQ_CH0G] = + "Band 1 Gain [dB]"; + port_range_hints[EQ_CH0G].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_0; + port_range_hints[EQ_CH0G].LowerBound = -50; + port_range_hints[EQ_CH0G].UpperBound = +20; + + + + + /* Parameters for CH1 freq [Hz] */ + port_descriptors[EQ_CH1F] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[EQ_CH1F] = + "Band 2 Freq [Hz]"; + port_range_hints[EQ_CH1F].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_LOW; + port_range_hints[EQ_CH1F].LowerBound = 100; + port_range_hints[EQ_CH1F].UpperBound = 500; + /* Parameters for CH1 gain [dB] */ + port_descriptors[EQ_CH1G] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[EQ_CH1G] = + "Band 2 Gain [dB]"; + port_range_hints[EQ_CH1G].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_0; + port_range_hints[EQ_CH1G].LowerBound = -50; + port_range_hints[EQ_CH1G].UpperBound = +20; + + + + + /* Parameters for CH2 freq [Hz] */ + port_descriptors[EQ_CH2F] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[EQ_CH2F] = + "Band 3 Freq [Hz]"; + port_range_hints[EQ_CH2F].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_LOW; + port_range_hints[EQ_CH2F].LowerBound = 200; + port_range_hints[EQ_CH2F].UpperBound = 1000; + /* Parameters for CH2 gain [dB] */ + port_descriptors[EQ_CH2G] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[EQ_CH2G] = + "Band 3 Gain [dB]"; + port_range_hints[EQ_CH2G].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_0; + port_range_hints[EQ_CH2G].LowerBound = -50; + port_range_hints[EQ_CH2G].UpperBound = +20; + + + + + /* Parameters for CH3 freq [Hz] */ + port_descriptors[EQ_CH3F] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[EQ_CH3F] = + "Band 4 Freq [Hz]"; + port_range_hints[EQ_CH3F].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_LOW; + port_range_hints[EQ_CH3F].LowerBound = 400; + port_range_hints[EQ_CH3F].UpperBound = 2800; + /* Parameters for CH3 gain [dB] */ + port_descriptors[EQ_CH3G] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[EQ_CH3G] = + "Band 4 Gain [dB]"; + port_range_hints[EQ_CH3G].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_0; + port_range_hints[EQ_CH3G].LowerBound = -50; + port_range_hints[EQ_CH3G].UpperBound = +20; + + + + + /* Parameters for CH4 freq [Hz] */ + port_descriptors[EQ_CH4F] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[EQ_CH4F] = + "Band 5 Freq [Hz]"; + port_range_hints[EQ_CH4F].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_MIDDLE; + port_range_hints[EQ_CH4F].LowerBound = 1000; + port_range_hints[EQ_CH4F].UpperBound = 5000; + /* Parameters for CH4 gain [dB] */ + port_descriptors[EQ_CH4G] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[EQ_CH4G] = + "Band 5 Gain [dB]"; + port_range_hints[EQ_CH4G].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_0; + port_range_hints[EQ_CH4G].LowerBound = -50; + port_range_hints[EQ_CH4G].UpperBound = +20; + + + + + /* Parameters for CH5 freq [Hz] */ + port_descriptors[EQ_CH5F] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[EQ_CH5F] = + "Band 6 Freq [Hz]"; + port_range_hints[EQ_CH5F].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_MIDDLE; + port_range_hints[EQ_CH5F].LowerBound = 3000; + port_range_hints[EQ_CH5F].UpperBound = 9000; + /* Parameters for CH5 gain [dB] */ + port_descriptors[EQ_CH5G] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[EQ_CH5G] = + "Band 6 Gain [dB]"; + port_range_hints[EQ_CH5G].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_0; + port_range_hints[EQ_CH5G].LowerBound = -50; + port_range_hints[EQ_CH5G].UpperBound = +20; + + + + + /* Parameters for CH6 freq [Hz] */ + port_descriptors[EQ_CH6F] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[EQ_CH6F] = + "Band 7 Freq [Hz]"; + port_range_hints[EQ_CH6F].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_MIDDLE; + port_range_hints[EQ_CH6F].LowerBound = 6000; + port_range_hints[EQ_CH6F].UpperBound = 18000; + /* Parameters for CH6 gain [dB] */ + port_descriptors[EQ_CH6G] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[EQ_CH6G] = + "Band 7 Gain [dB]"; + port_range_hints[EQ_CH6G].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_0; + port_range_hints[EQ_CH6G].LowerBound = -50; + port_range_hints[EQ_CH6G].UpperBound = +20; + + + + + /* Parameters for CH7 freq [Hz] */ + port_descriptors[EQ_CH7F] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[EQ_CH7F] = + "Band 8 Freq [Hz]"; + port_range_hints[EQ_CH7F].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_MIDDLE; + port_range_hints[EQ_CH7F].LowerBound = 10000; + port_range_hints[EQ_CH7F].UpperBound = 20000; + /* Parameters for CH7 gain [dB] */ + port_descriptors[EQ_CH7G] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[EQ_CH7G] = + "Band 8 Gain [dB]"; + port_range_hints[EQ_CH7G].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_0; + port_range_hints[EQ_CH7G].LowerBound = -50; + port_range_hints[EQ_CH7G].UpperBound = +20; + + + + + /* Parameters for Input */ + port_descriptors[EQ_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[EQ_INPUT] = + "Input"; + port_range_hints[EQ_INPUT].HintDescriptor = 0; + + /* Parameters for Output */ + port_descriptors[EQ_OUTPUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[EQ_OUTPUT] = + "Output"; + port_range_hints[EQ_OUTPUT].HintDescriptor = 0; + + eqDescriptor->activate = activate_eq; + eqDescriptor->cleanup = cleanup_eq; + eqDescriptor->connect_port = connectPort_eq; + eqDescriptor->deactivate = NULL; + eqDescriptor->instantiate = instantiate_eq; + eqDescriptor->run = run_eq; + eqDescriptor->run_adding = run_adding_eq; + eqDescriptor->set_run_adding_gain = set_run_adding_gain; + } +} + + +void +__attribute__((destructor)) _fini() { + + if (eqDescriptor) { + free((LADSPA_PortDescriptor *)eqDescriptor->PortDescriptors); + free((char **)eqDescriptor->PortNames); + free((LADSPA_PortRangeHint *)eqDescriptor->PortRangeHints); + free(eqDescriptor); + } + +} diff --git a/plugins/LadspaEffect/tap/tap_eqbw.c b/plugins/LadspaEffect/tap/tap_eqbw.c new file mode 100644 index 000000000..8135b1c93 --- /dev/null +++ b/plugins/LadspaEffect/tap/tap_eqbw.c @@ -0,0 +1,967 @@ +/* -*- linux-c -*- + Copyright (C) 2004 Tom Szilagyi + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + $Id: tap_eqbw.c,v 1.5 2006/08/09 12:03:24 tszilagyi Exp $ +*/ + + +/* This plugin is identical to TAP Equalizer (2141), but it has + * separate user controls for setting the bandwidth of every filter. + */ + +#include +#include +#include + +#include +#include "tap_utils.h" + +/* The Unique ID of the plugin */ +#define ID_MONO 2151 + + +/* Default bandwidth of EQ filters in octaves */ +#define BWIDTH 1.0f + + +/* Port numbers */ + +#define EQ_CH0G 0 +#define EQ_CH1G 1 +#define EQ_CH2G 2 +#define EQ_CH3G 3 +#define EQ_CH4G 4 +#define EQ_CH5G 5 +#define EQ_CH6G 6 +#define EQ_CH7G 7 + +#define EQ_CH0F 8 +#define EQ_CH1F 9 +#define EQ_CH2F 10 +#define EQ_CH3F 11 +#define EQ_CH4F 12 +#define EQ_CH5F 13 +#define EQ_CH6F 14 +#define EQ_CH7F 15 + +#define EQ_CH0B 16 +#define EQ_CH1B 17 +#define EQ_CH2B 18 +#define EQ_CH3B 19 +#define EQ_CH4B 20 +#define EQ_CH5B 21 +#define EQ_CH6B 22 +#define EQ_CH7B 23 + +#define EQ_INPUT 24 +#define EQ_OUTPUT 25 + + +/* Total number of ports */ +#define PORTCOUNT_MONO 26 + + +static LADSPA_Descriptor *eqDescriptor = NULL; + +typedef struct { + LADSPA_Data *ch0f; + LADSPA_Data *ch0g; + LADSPA_Data *ch0b; + LADSPA_Data *ch1f; + LADSPA_Data *ch1g; + LADSPA_Data *ch1b; + LADSPA_Data *ch2f; + LADSPA_Data *ch2g; + LADSPA_Data *ch2b; + LADSPA_Data *ch3f; + LADSPA_Data *ch3g; + LADSPA_Data *ch3b; + LADSPA_Data *ch4f; + LADSPA_Data *ch4g; + LADSPA_Data *ch4b; + LADSPA_Data *ch5f; + LADSPA_Data *ch5g; + LADSPA_Data *ch5b; + LADSPA_Data *ch6f; + LADSPA_Data *ch6g; + LADSPA_Data *ch6b; + LADSPA_Data *ch7f; + LADSPA_Data *ch7g; + LADSPA_Data *ch7b; + LADSPA_Data *input; + LADSPA_Data *output; + biquad * filters; + float fs; + LADSPA_Data old_ch0f; + LADSPA_Data old_ch0g; + LADSPA_Data old_ch0b; + LADSPA_Data old_ch1f; + LADSPA_Data old_ch1g; + LADSPA_Data old_ch1b; + LADSPA_Data old_ch2f; + LADSPA_Data old_ch2g; + LADSPA_Data old_ch2b; + LADSPA_Data old_ch3f; + LADSPA_Data old_ch3g; + LADSPA_Data old_ch3b; + LADSPA_Data old_ch4f; + LADSPA_Data old_ch4g; + LADSPA_Data old_ch4b; + LADSPA_Data old_ch5f; + LADSPA_Data old_ch5g; + LADSPA_Data old_ch5b; + LADSPA_Data old_ch6f; + LADSPA_Data old_ch6g; + LADSPA_Data old_ch6b; + LADSPA_Data old_ch7f; + LADSPA_Data old_ch7g; + LADSPA_Data old_ch7b; + + LADSPA_Data run_adding_gain; +} eq; + +const +LADSPA_Descriptor * +ladspa_descriptor(unsigned long index) { + + switch (index) { + case 0: + return eqDescriptor; + default: + return NULL; + } +} + +static +void +activate_eq(LADSPA_Handle instance) { + + eq *ptr = (eq *)instance; + biquad *filters = ptr->filters; + + biquad_init(&filters[0]); + biquad_init(&filters[1]); + biquad_init(&filters[2]); + biquad_init(&filters[3]); + biquad_init(&filters[4]); + biquad_init(&filters[5]); + biquad_init(&filters[6]); + biquad_init(&filters[7]); +} + + +static +void +cleanup_eq(LADSPA_Handle instance) { + + free(instance); +} + + +static +void +connectPort_eq(LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { + + eq *plugin; + + plugin = (eq *)instance; + switch (port) { + case EQ_CH0F: + plugin->ch0f = data; + break; + case EQ_CH0G: + plugin->ch0g = data; + break; + case EQ_CH0B: + plugin->ch0b = data; + break; + case EQ_CH1F: + plugin->ch1f = data; + break; + case EQ_CH1G: + plugin->ch1g = data; + break; + case EQ_CH1B: + plugin->ch1b = data; + break; + case EQ_CH2F: + plugin->ch2f = data; + break; + case EQ_CH2G: + plugin->ch2g = data; + break; + case EQ_CH2B: + plugin->ch2b = data; + break; + case EQ_CH3F: + plugin->ch3f = data; + break; + case EQ_CH3G: + plugin->ch3g = data; + break; + case EQ_CH3B: + plugin->ch3b = data; + break; + case EQ_CH4F: + plugin->ch4f = data; + break; + case EQ_CH4G: + plugin->ch4g = data; + break; + case EQ_CH4B: + plugin->ch4b = data; + break; + case EQ_CH5F: + plugin->ch5f = data; + break; + case EQ_CH5G: + plugin->ch5g = data; + break; + case EQ_CH5B: + plugin->ch5b = data; + break; + case EQ_CH6F: + plugin->ch6f = data; + break; + case EQ_CH6G: + plugin->ch6g = data; + break; + case EQ_CH6B: + plugin->ch6b = data; + break; + case EQ_CH7F: + plugin->ch7f = data; + break; + case EQ_CH7G: + plugin->ch7g = data; + break; + case EQ_CH7B: + plugin->ch7b = data; + break; + case EQ_INPUT: + plugin->input = data; + break; + case EQ_OUTPUT: + plugin->output = data; + break; + } +} + +static +LADSPA_Handle +instantiate_eq(const LADSPA_Descriptor *descriptor, unsigned long s_rate) { + + eq *ptr = (eq *)malloc(sizeof(eq)); + biquad *filters = NULL; + float fs; + + fs = s_rate; + + memset(ptr, 0, sizeof(eq)); + + filters = calloc(8, sizeof(biquad)); + + ptr->filters = filters; + ptr->fs = fs; + ptr->run_adding_gain = 1.0f; + + ptr->old_ch0f = 100.0f; + ptr->old_ch0g = 0.0f; + ptr->old_ch0b = BWIDTH; + + ptr->old_ch1f = 200.0f; + ptr->old_ch1g = 0.0f; + ptr->old_ch1b = BWIDTH; + + ptr->old_ch2f = 400.0f; + ptr->old_ch2g = 0.0f; + ptr->old_ch2b = BWIDTH; + + ptr->old_ch3f = 1000.0f; + ptr->old_ch3g = 0.0f; + ptr->old_ch3b = BWIDTH; + + ptr->old_ch4f = 3000.0f; + ptr->old_ch4g = 0.0f; + ptr->old_ch4b = BWIDTH; + + ptr->old_ch5f = 6000.0f; + ptr->old_ch5g = 0.0f; + ptr->old_ch5b = BWIDTH; + + ptr->old_ch6f = 12000.0f; + ptr->old_ch6g = 0.0f; + ptr->old_ch6b = BWIDTH; + + ptr->old_ch7f = 15000.0f; + ptr->old_ch7g = 0.0f; + ptr->old_ch7b = BWIDTH; + + eq_set_params(&filters[0], 100.0f, 0.0f, BWIDTH, fs); + eq_set_params(&filters[1], 200.0f, 0.0f, BWIDTH, fs); + eq_set_params(&filters[2], 400.0f, 0.0f, BWIDTH, fs); + eq_set_params(&filters[3], 1000.0f, 0.0f, BWIDTH, fs); + eq_set_params(&filters[4], 3000.0f, 0.0f, BWIDTH, fs); + eq_set_params(&filters[5], 6000.0f, 0.0f, BWIDTH, fs); + eq_set_params(&filters[6], 12000.0f, 0.0f, BWIDTH, fs); + eq_set_params(&filters[7], 15000.0f, 0.0f, BWIDTH, fs); + + return (LADSPA_Handle)ptr; +} + + +static +void +run_eq(LADSPA_Handle instance, unsigned long sample_count) { + + eq * ptr = (eq *)instance; + + const LADSPA_Data ch0f = LIMIT(*(ptr->ch0f),40.0f,280.0f); + const LADSPA_Data ch0g = LIMIT(*(ptr->ch0g),-50.0f,20.0f); + const LADSPA_Data ch0b = LIMIT(*(ptr->ch0b),0.1f,5.0f); + const LADSPA_Data ch1f = LIMIT(*(ptr->ch1f),100.0f,500.0f); + const LADSPA_Data ch1g = LIMIT(*(ptr->ch1g),-50.0f,20.0f); + const LADSPA_Data ch1b = LIMIT(*(ptr->ch1b),0.1f,5.0f); + const LADSPA_Data ch2f = LIMIT(*(ptr->ch2f),200.0f,1000.0f); + const LADSPA_Data ch2g = LIMIT(*(ptr->ch2g),-50.0f,20.0f); + const LADSPA_Data ch2b = LIMIT(*(ptr->ch2b),0.1f,5.0f); + const LADSPA_Data ch3f = LIMIT(*(ptr->ch3f),400.0f,2800.0f); + const LADSPA_Data ch3g = LIMIT(*(ptr->ch3g),-50.0f,20.0f); + const LADSPA_Data ch3b = LIMIT(*(ptr->ch3b),0.1f,5.0f); + const LADSPA_Data ch4f = LIMIT(*(ptr->ch4f),1000.0f,5000.0f); + const LADSPA_Data ch4g = LIMIT(*(ptr->ch4g),-50.0f,20.0f); + const LADSPA_Data ch4b = LIMIT(*(ptr->ch4b),0.1f,5.0f); + const LADSPA_Data ch5f = LIMIT(*(ptr->ch5f),3000.0f,9000.0f); + const LADSPA_Data ch5g = LIMIT(*(ptr->ch5g),-50.0f,20.0f); + const LADSPA_Data ch5b = LIMIT(*(ptr->ch5b),0.1f,5.0f); + const LADSPA_Data ch6f = LIMIT(*(ptr->ch6f),6000.0f,18000.0f); + const LADSPA_Data ch6g = LIMIT(*(ptr->ch6g),-50.0f,20.0f); + const LADSPA_Data ch6b = LIMIT(*(ptr->ch6b),0.1f,5.0f); + const LADSPA_Data ch7f = LIMIT(*(ptr->ch7f),10000.0f,20000.0f); + const LADSPA_Data ch7g = LIMIT(*(ptr->ch7g),-50.0f,20.0f); + const LADSPA_Data ch7b = LIMIT(*(ptr->ch7b),0.1f,5.0f); + + const LADSPA_Data * input = ptr->input; + LADSPA_Data * output = ptr->output; + + biquad * filters = ptr->filters; + float fs = ptr->fs; + + unsigned long pos; + float samp; + + + if ((ch0f != ptr->old_ch0f) || + (ch0g != ptr->old_ch0g) || + (ch0b != ptr->old_ch0b)) { + ptr->old_ch0f = ch0f; + ptr->old_ch0g = ch0g; + ptr->old_ch0b = ch0b; + eq_set_params(&filters[0], ch0f, ch0g, ch0b, fs); + } + if ((ch1f != ptr->old_ch1f) || + (ch1g != ptr->old_ch1g) || + (ch1b != ptr->old_ch1b)) { + ptr->old_ch1f = ch1f; + ptr->old_ch1g = ch1g; + ptr->old_ch1b = ch1b; + eq_set_params(&filters[1], ch1f, ch1g, ch1b, fs); + } + if ((ch2f != ptr->old_ch2f) || + (ch2g != ptr->old_ch2g) || + (ch2b != ptr->old_ch2b)) { + ptr->old_ch2f = ch2f; + ptr->old_ch2g = ch2g; + ptr->old_ch2b = ch2b; + eq_set_params(&filters[2], ch2f, ch2g, ch2b, fs); + } + if ((ch3f != ptr->old_ch3f) || + (ch3g != ptr->old_ch3g) || + (ch3b != ptr->old_ch3b)) { + ptr->old_ch3f = ch3f; + ptr->old_ch3g = ch3g; + ptr->old_ch3b = ch3b; + eq_set_params(&filters[3], ch3f, ch3g, ch3b, fs); + } + if ((ch4f != ptr->old_ch4f) || + (ch4g != ptr->old_ch4g) || + (ch4b != ptr->old_ch4b)) { + ptr->old_ch4f = ch4f; + ptr->old_ch4g = ch4g; + ptr->old_ch4b = ch4b; + eq_set_params(&filters[4], ch4f, ch4g, ch4b, fs); + } + if ((ch5f != ptr->old_ch5f) || + (ch5g != ptr->old_ch5g) || + (ch5b != ptr->old_ch5b)) { + ptr->old_ch5f = ch5f; + ptr->old_ch5g = ch5g; + ptr->old_ch5b = ch5b; + eq_set_params(&filters[5], ch5f, ch5g, ch5b, fs); + } + if ((ch6f != ptr->old_ch6f) || + (ch6g != ptr->old_ch6g) || + (ch6b != ptr->old_ch6b)) { + ptr->old_ch6f = ch6f; + ptr->old_ch6g = ch6g; + ptr->old_ch6b = ch6b; + eq_set_params(&filters[6], ch6f, ch6g, ch6b, fs); + } + if ((ch7f != ptr->old_ch7f) || + (ch7g != ptr->old_ch7g) || + (ch7b != ptr->old_ch7b)) { + ptr->old_ch7f = ch7f; + ptr->old_ch7g = ch7g; + ptr->old_ch7b = ch7b; + eq_set_params(&filters[7], ch7f, ch7g, ch7b, fs); + } + + for (pos = 0; pos < sample_count; pos++) { + samp = input[pos]; + if (ch0g != 0.0f) + samp = biquad_run(&filters[0], samp); + if (ch1g != 0.0f) + samp = biquad_run(&filters[1], samp); + if (ch2g != 0.0f) + samp = biquad_run(&filters[2], samp); + if (ch3g != 0.0f) + samp = biquad_run(&filters[3], samp); + if (ch4g != 0.0f) + samp = biquad_run(&filters[4], samp); + if (ch5g != 0.0f) + samp = biquad_run(&filters[5], samp); + if (ch6g != 0.0f) + samp = biquad_run(&filters[6], samp); + if (ch7g != 0.0f) + samp = biquad_run(&filters[7], samp); + output[pos] = samp; + } +} + + + +void +set_run_adding_gain(LADSPA_Handle instance, LADSPA_Data gain) { + + eq * ptr = (eq *)instance; + + ptr->run_adding_gain = gain; +} + + + +static +void +run_adding_eq(LADSPA_Handle instance, unsigned long sample_count) { + + eq * ptr = (eq *)instance; + + const LADSPA_Data ch0f = LIMIT(*(ptr->ch0f),40.0f,280.0f); + const LADSPA_Data ch0g = LIMIT(*(ptr->ch0g),-50.0f,20.0f); + const LADSPA_Data ch0b = LIMIT(*(ptr->ch0b),0.1f,5.0f); + const LADSPA_Data ch1f = LIMIT(*(ptr->ch1f),100.0f,500.0f); + const LADSPA_Data ch1g = LIMIT(*(ptr->ch1g),-50.0f,20.0f); + const LADSPA_Data ch1b = LIMIT(*(ptr->ch1b),0.1f,5.0f); + const LADSPA_Data ch2f = LIMIT(*(ptr->ch2f),200.0f,1000.0f); + const LADSPA_Data ch2g = LIMIT(*(ptr->ch2g),-50.0f,20.0f); + const LADSPA_Data ch2b = LIMIT(*(ptr->ch2b),0.1f,5.0f); + const LADSPA_Data ch3f = LIMIT(*(ptr->ch3f),400.0f,2800.0f); + const LADSPA_Data ch3g = LIMIT(*(ptr->ch3g),-50.0f,20.0f); + const LADSPA_Data ch3b = LIMIT(*(ptr->ch3b),0.1f,5.0f); + const LADSPA_Data ch4f = LIMIT(*(ptr->ch4f),1000.0f,5000.0f); + const LADSPA_Data ch4g = LIMIT(*(ptr->ch4g),-50.0f,20.0f); + const LADSPA_Data ch4b = LIMIT(*(ptr->ch4b),0.1f,5.0f); + const LADSPA_Data ch5f = LIMIT(*(ptr->ch5f),3000.0f,9000.0f); + const LADSPA_Data ch5g = LIMIT(*(ptr->ch5g),-50.0f,20.0f); + const LADSPA_Data ch5b = LIMIT(*(ptr->ch5b),0.1f,5.0f); + const LADSPA_Data ch6f = LIMIT(*(ptr->ch6f),6000.0f,18000.0f); + const LADSPA_Data ch6g = LIMIT(*(ptr->ch6g),-50.0f,20.0f); + const LADSPA_Data ch6b = LIMIT(*(ptr->ch6b),0.1f,5.0f); + const LADSPA_Data ch7f = LIMIT(*(ptr->ch7f),10000.0f,20000.0f); + const LADSPA_Data ch7g = LIMIT(*(ptr->ch7g),-50.0f,20.0f); + const LADSPA_Data ch7b = LIMIT(*(ptr->ch7b),0.1f,5.0f); + + const LADSPA_Data * input = ptr->input; + LADSPA_Data * output = ptr->output; + + biquad * filters = ptr->filters; + float fs = ptr->fs; + + unsigned long pos; + float samp; + + + if ((ch0f != ptr->old_ch0f) || + (ch0g != ptr->old_ch0g) || + (ch0b != ptr->old_ch0b)) { + ptr->old_ch0f = ch0f; + ptr->old_ch0g = ch0g; + ptr->old_ch0b = ch0b; + eq_set_params(&filters[0], ch0f, ch0g, ch0b, fs); + } + if ((ch1f != ptr->old_ch1f) || + (ch1g != ptr->old_ch1g) || + (ch1b != ptr->old_ch1b)) { + ptr->old_ch1f = ch1f; + ptr->old_ch1g = ch1g; + ptr->old_ch1b = ch1b; + eq_set_params(&filters[1], ch1f, ch1g, ch1b, fs); + } + if ((ch2f != ptr->old_ch2f) || + (ch2g != ptr->old_ch2g) || + (ch2b != ptr->old_ch2b)) { + ptr->old_ch2f = ch2f; + ptr->old_ch2g = ch2g; + ptr->old_ch2b = ch2b; + eq_set_params(&filters[2], ch2f, ch2g, ch2b, fs); + } + if ((ch3f != ptr->old_ch3f) || + (ch3g != ptr->old_ch3g) || + (ch3b != ptr->old_ch3b)) { + ptr->old_ch3f = ch3f; + ptr->old_ch3g = ch3g; + ptr->old_ch3b = ch3b; + eq_set_params(&filters[3], ch3f, ch3g, ch3b, fs); + } + if ((ch4f != ptr->old_ch4f) || + (ch4g != ptr->old_ch4g) || + (ch4b != ptr->old_ch4b)) { + ptr->old_ch4f = ch4f; + ptr->old_ch4g = ch4g; + ptr->old_ch4b = ch4b; + eq_set_params(&filters[4], ch4f, ch4g, ch4b, fs); + } + if ((ch5f != ptr->old_ch5f) || + (ch5g != ptr->old_ch5g) || + (ch5b != ptr->old_ch5b)) { + ptr->old_ch5f = ch5f; + ptr->old_ch5g = ch5g; + ptr->old_ch5b = ch5b; + eq_set_params(&filters[5], ch5f, ch5g, ch5b, fs); + } + if ((ch6f != ptr->old_ch6f) || + (ch6g != ptr->old_ch6g) || + (ch6b != ptr->old_ch6b)) { + ptr->old_ch6f = ch6f; + ptr->old_ch6g = ch6g; + ptr->old_ch6b = ch6b; + eq_set_params(&filters[6], ch6f, ch6g, ch6b, fs); + } + if ((ch7f != ptr->old_ch7f) || + (ch7g != ptr->old_ch7g) || + (ch7b != ptr->old_ch7b)) { + ptr->old_ch7f = ch7f; + ptr->old_ch7g = ch7g; + ptr->old_ch7b = ch7b; + eq_set_params(&filters[7], ch7f, ch7g, ch7b, fs); + } + + for (pos = 0; pos < sample_count; pos++) { + samp = input[pos]; + if (ch0g != 0.0f) + samp = biquad_run(&filters[0], samp); + if (ch1g != 0.0f) + samp = biquad_run(&filters[1], samp); + if (ch2g != 0.0f) + samp = biquad_run(&filters[2], samp); + if (ch3g != 0.0f) + samp = biquad_run(&filters[3], samp); + if (ch4g != 0.0f) + samp = biquad_run(&filters[4], samp); + if (ch5g != 0.0f) + samp = biquad_run(&filters[5], samp); + if (ch6g != 0.0f) + samp = biquad_run(&filters[6], samp); + if (ch7g != 0.0f) + samp = biquad_run(&filters[7], samp); + output[pos] += ptr->run_adding_gain * samp; + } +} + + + + +void +__attribute__((constructor)) _init() { + + char **port_names; + LADSPA_PortDescriptor *port_descriptors; + LADSPA_PortRangeHint *port_range_hints; + + eqDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (eqDescriptor) { + eqDescriptor->UniqueID = ID_MONO; + eqDescriptor->Label = "tap_equalizer_bw"; + eqDescriptor->Properties = 0; + eqDescriptor->Name = "TAP Equalizer/BW"; + eqDescriptor->Maker = "Tom Szilagyi"; + eqDescriptor->Copyright = "GPL"; + eqDescriptor->PortCount = PORTCOUNT_MONO; + + port_descriptors = + (LADSPA_PortDescriptor *)calloc(PORTCOUNT_MONO, + sizeof(LADSPA_PortDescriptor)); + eqDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = + (LADSPA_PortRangeHint *)calloc(PORTCOUNT_MONO, + sizeof(LADSPA_PortRangeHint)); + eqDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(PORTCOUNT_MONO, sizeof(char*)); + eqDescriptor->PortNames = + (const char **)port_names; + + + + /* Parameters for CH0 freq [Hz] */ + port_descriptors[EQ_CH0F] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[EQ_CH0F] = + "Band 1 Freq [Hz]"; + port_range_hints[EQ_CH0F].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_LOW; + port_range_hints[EQ_CH0F].LowerBound = 40; + port_range_hints[EQ_CH0F].UpperBound = 280; + /* Parameters for CH0 gain [dB] */ + port_descriptors[EQ_CH0G] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[EQ_CH0G] = + "Band 1 Gain [dB]"; + port_range_hints[EQ_CH0G].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_0; + port_range_hints[EQ_CH0G].LowerBound = -50; + port_range_hints[EQ_CH0G].UpperBound = +20; + /* Parameters for CH0 bandwidth [octaves] */ + port_descriptors[EQ_CH0B] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[EQ_CH0B] = + "Band 1 Bandwidth [octaves]"; + port_range_hints[EQ_CH0B].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_1; + port_range_hints[EQ_CH0B].LowerBound = 0.1f; + port_range_hints[EQ_CH0B].UpperBound = 5.0f; + + + + + /* Parameters for CH1 freq [Hz] */ + port_descriptors[EQ_CH1F] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[EQ_CH1F] = + "Band 2 Freq [Hz]"; + port_range_hints[EQ_CH1F].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_LOW; + port_range_hints[EQ_CH1F].LowerBound = 100; + port_range_hints[EQ_CH1F].UpperBound = 500; + /* Parameters for CH1 gain [dB] */ + port_descriptors[EQ_CH1G] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[EQ_CH1G] = + "Band 2 Gain [dB]"; + port_range_hints[EQ_CH1G].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_0; + port_range_hints[EQ_CH1G].LowerBound = -50; + port_range_hints[EQ_CH1G].UpperBound = +20; + /* Parameters for CH1 bandwidth [octaves] */ + port_descriptors[EQ_CH1B] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[EQ_CH1B] = + "Band 2 Bandwidth [octaves]"; + port_range_hints[EQ_CH1B].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_1; + port_range_hints[EQ_CH1B].LowerBound = 0.1f; + port_range_hints[EQ_CH1B].UpperBound = 5.0f; + + + + + /* Parameters for CH2 freq [Hz] */ + port_descriptors[EQ_CH2F] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[EQ_CH2F] = + "Band 3 Freq [Hz]"; + port_range_hints[EQ_CH2F].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_LOW; + port_range_hints[EQ_CH2F].LowerBound = 200; + port_range_hints[EQ_CH2F].UpperBound = 1000; + /* Parameters for CH2 gain [dB] */ + port_descriptors[EQ_CH2G] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[EQ_CH2G] = + "Band 3 Gain [dB]"; + port_range_hints[EQ_CH2G].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_0; + port_range_hints[EQ_CH2G].LowerBound = -50; + port_range_hints[EQ_CH2G].UpperBound = +20; + /* Parameters for CH2 bandwidth [octaves] */ + port_descriptors[EQ_CH2B] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[EQ_CH2B] = + "Band 3 Bandwidth [octaves]"; + port_range_hints[EQ_CH2B].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_1; + port_range_hints[EQ_CH2B].LowerBound = 0.1f; + port_range_hints[EQ_CH2B].UpperBound = 5.0f; + + + + + /* Parameters for CH3 freq [Hz] */ + port_descriptors[EQ_CH3F] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[EQ_CH3F] = + "Band 4 Freq [Hz]"; + port_range_hints[EQ_CH3F].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_LOW; + port_range_hints[EQ_CH3F].LowerBound = 400; + port_range_hints[EQ_CH3F].UpperBound = 2800; + /* Parameters for CH3 gain [dB] */ + port_descriptors[EQ_CH3G] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[EQ_CH3G] = + "Band 4 Gain [dB]"; + port_range_hints[EQ_CH3G].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_0; + port_range_hints[EQ_CH3G].LowerBound = -50; + port_range_hints[EQ_CH3G].UpperBound = +20; + /* Parameters for CH3 bandwidth [octaves] */ + port_descriptors[EQ_CH3B] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[EQ_CH3B] = + "Band 4 Bandwidth [octaves]"; + port_range_hints[EQ_CH3B].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_1; + port_range_hints[EQ_CH3B].LowerBound = 0.1f; + port_range_hints[EQ_CH3B].UpperBound = 5.0f; + + + + + /* Parameters for CH4 freq [Hz] */ + port_descriptors[EQ_CH4F] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[EQ_CH4F] = + "Band 5 Freq [Hz]"; + port_range_hints[EQ_CH4F].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_MIDDLE; + port_range_hints[EQ_CH4F].LowerBound = 1000; + port_range_hints[EQ_CH4F].UpperBound = 5000; + /* Parameters for CH4 gain [dB] */ + port_descriptors[EQ_CH4G] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[EQ_CH4G] = + "Band 5 Gain [dB]"; + port_range_hints[EQ_CH4G].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_0; + port_range_hints[EQ_CH4G].LowerBound = -50; + port_range_hints[EQ_CH4G].UpperBound = +20; + /* Parameters for CH4 bandwidth [octaves] */ + port_descriptors[EQ_CH4B] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[EQ_CH4B] = + "Band 5 Bandwidth [octaves]"; + port_range_hints[EQ_CH4B].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_1; + port_range_hints[EQ_CH4B].LowerBound = 0.1f; + port_range_hints[EQ_CH4B].UpperBound = 5.0f; + + + + + /* Parameters for CH5 freq [Hz] */ + port_descriptors[EQ_CH5F] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[EQ_CH5F] = + "Band 6 Freq [Hz]"; + port_range_hints[EQ_CH5F].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_MIDDLE; + port_range_hints[EQ_CH5F].LowerBound = 3000; + port_range_hints[EQ_CH5F].UpperBound = 9000; + /* Parameters for CH5 gain [dB] */ + port_descriptors[EQ_CH5G] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[EQ_CH5G] = + "Band 6 Gain [dB]"; + port_range_hints[EQ_CH5G].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_0; + port_range_hints[EQ_CH5G].LowerBound = -50; + port_range_hints[EQ_CH5G].UpperBound = +20; + /* Parameters for CH5 bandwidth [octaves] */ + port_descriptors[EQ_CH5B] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[EQ_CH5B] = + "Band 6 Bandwidth [octaves]"; + port_range_hints[EQ_CH5B].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_1; + port_range_hints[EQ_CH5B].LowerBound = 0.1f; + port_range_hints[EQ_CH5B].UpperBound = 5.0f; + + + + + /* Parameters for CH6 freq [Hz] */ + port_descriptors[EQ_CH6F] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[EQ_CH6F] = + "Band 7 Freq [Hz]"; + port_range_hints[EQ_CH6F].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_MIDDLE; + port_range_hints[EQ_CH6F].LowerBound = 6000; + port_range_hints[EQ_CH6F].UpperBound = 18000; + /* Parameters for CH6 gain [dB] */ + port_descriptors[EQ_CH6G] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[EQ_CH6G] = + "Band 7 Gain [dB]"; + port_range_hints[EQ_CH6G].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_0; + port_range_hints[EQ_CH6G].LowerBound = -50; + port_range_hints[EQ_CH6G].UpperBound = +20; + /* Parameters for CH6 bandwidth [octaves] */ + port_descriptors[EQ_CH6B] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[EQ_CH6B] = + "Band 7 Bandwidth [octaves]"; + port_range_hints[EQ_CH6B].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_1; + port_range_hints[EQ_CH6B].LowerBound = 0.1f; + port_range_hints[EQ_CH6B].UpperBound = 5.0f; + + + + + /* Parameters for CH7 freq [Hz] */ + port_descriptors[EQ_CH7F] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[EQ_CH7F] = + "Band 8 Freq [Hz]"; + port_range_hints[EQ_CH7F].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_MIDDLE; + port_range_hints[EQ_CH7F].LowerBound = 10000; + port_range_hints[EQ_CH7F].UpperBound = 20000; + /* Parameters for CH7 gain [dB] */ + port_descriptors[EQ_CH7G] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[EQ_CH7G] = + "Band 8 Gain [dB]"; + port_range_hints[EQ_CH7G].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_0; + port_range_hints[EQ_CH7G].LowerBound = -50; + port_range_hints[EQ_CH7G].UpperBound = +20; + /* Parameters for CH7 bandwidth [octaves] */ + port_descriptors[EQ_CH7B] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[EQ_CH7B] = + "Band 8 Bandwidth [octaves]"; + port_range_hints[EQ_CH7B].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_1; + port_range_hints[EQ_CH7B].LowerBound = 0.1f; + port_range_hints[EQ_CH7B].UpperBound = 5.0f; + + + + + /* Parameters for Input */ + port_descriptors[EQ_INPUT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[EQ_INPUT] = + "Input"; + port_range_hints[EQ_INPUT].HintDescriptor = 0; + + /* Parameters for Output */ + port_descriptors[EQ_OUTPUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[EQ_OUTPUT] = + "Output"; + port_range_hints[EQ_OUTPUT].HintDescriptor = 0; + + eqDescriptor->activate = activate_eq; + eqDescriptor->cleanup = cleanup_eq; + eqDescriptor->connect_port = connectPort_eq; + eqDescriptor->deactivate = NULL; + eqDescriptor->instantiate = instantiate_eq; + eqDescriptor->run = run_eq; + eqDescriptor->run_adding = run_adding_eq; + eqDescriptor->set_run_adding_gain = set_run_adding_gain; + } +} + + +void +__attribute__((destructor)) _fini() { + + if (eqDescriptor) { + free((LADSPA_PortDescriptor *)eqDescriptor->PortDescriptors); + free((char **)eqDescriptor->PortNames); + free((LADSPA_PortRangeHint *)eqDescriptor->PortRangeHints); + free(eqDescriptor); + } + +} diff --git a/plugins/LadspaEffect/tap/tap_limiter.c b/plugins/LadspaEffect/tap/tap_limiter.c new file mode 100644 index 000000000..346d3c6ce --- /dev/null +++ b/plugins/LadspaEffect/tap/tap_limiter.c @@ -0,0 +1,443 @@ +/* -*- linux-c -*- + Copyright (C) 2004 Tom Szilagyi + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + $Id: tap_limiter.c,v 1.5 2004/02/21 17:33:36 tszilagyi Exp $ +*/ + + +#include +#include +#include +#include + +#include +#include "tap_utils.h" + +/* The Unique ID of the plugin: */ + +#define ID_MONO 2145 + +/* The port numbers for the plugin: */ + +#define LIMIT_VOL 0 +#define OUT_VOL 1 +#define LATENCY 2 +#define INPUT 3 +#define OUTPUT 4 + +/* Total number of ports */ + +#define PORTCOUNT_MONO 5 + + +/* Size of a ringbuffer that must be large enough to hold audio + * between two zero-crosses in any case (or you'll hear + * distortion). 40 Hz sound at 192kHz yields a half-period of 2400 + * samples, so this should be enough. + */ +#define RINGBUF_SIZE 2500 + + +/* The structure used to hold port connection information and state */ + +typedef struct { + LADSPA_Data * limit_vol; + LADSPA_Data * out_vol; + LADSPA_Data * latency; + LADSPA_Data * input; + LADSPA_Data * output; + + LADSPA_Data * ringbuffer; + unsigned long buflen; + unsigned long pos; + unsigned long ready_num; + + unsigned long sample_rate; + LADSPA_Data run_adding_gain; +} Limiter; + + + + +/* Construct a new plugin instance. */ +LADSPA_Handle +instantiate_Limiter(const LADSPA_Descriptor * Descriptor, + unsigned long sample_rate) { + + LADSPA_Handle * ptr; + + if ((ptr = malloc(sizeof(Limiter))) != NULL) { + ((Limiter *)ptr)->sample_rate = sample_rate; + ((Limiter *)ptr)->run_adding_gain = 1.0f; + + if ((((Limiter *)ptr)->ringbuffer = + calloc(RINGBUF_SIZE, sizeof(LADSPA_Data))) == NULL) + return NULL; + + /* 80 Hz is the lowest frequency with which zero-crosses were + * observed to occur (this corresponds to 40 Hz signal frequency). + */ + ((Limiter *)ptr)->buflen = ((Limiter *)ptr)->sample_rate / 80; + + ((Limiter *)ptr)->pos = 0; + ((Limiter *)ptr)->ready_num = 0; + + return ptr; + } + return NULL; +} + + +void +activate_Limiter(LADSPA_Handle Instance) { + + Limiter * ptr = (Limiter *)Instance; + unsigned long i; + + for (i = 0; i < RINGBUF_SIZE; i++) + ptr->ringbuffer[i] = 0.0f; +} + + + + + +/* Connect a port to a data location. */ +void +connect_port_Limiter(LADSPA_Handle Instance, + unsigned long Port, + LADSPA_Data * DataLocation) { + + Limiter * ptr = (Limiter *)Instance; + + switch (Port) { + case LIMIT_VOL: + ptr->limit_vol = DataLocation; + break; + case OUT_VOL: + ptr->out_vol = DataLocation; + break; + case LATENCY: + ptr->latency = DataLocation; + *(ptr->latency) = ptr->buflen; /* IS THIS LEGAL? */ + break; + case INPUT: + ptr->input = DataLocation; + break; + case OUTPUT: + ptr->output = DataLocation; + break; + } +} + + + +void +run_Limiter(LADSPA_Handle Instance, + unsigned long SampleCount) { + + Limiter * ptr = (Limiter *)Instance; + + LADSPA_Data * input = ptr->input; + LADSPA_Data * output = ptr->output; + LADSPA_Data limit_vol = db2lin(LIMIT(*(ptr->limit_vol),-30.0f,20.0f)); + LADSPA_Data out_vol = db2lin(LIMIT(*(ptr->out_vol),-30.0f,20.0f)); + unsigned long sample_index; + unsigned long sample_count = SampleCount; + unsigned long index_offs = 0; + unsigned long i; + LADSPA_Data max_value = 0; + LADSPA_Data section_gain = 0; + unsigned long run_length; + unsigned long total_length = 0; + + + while (total_length < sample_count) { + + run_length = ptr->buflen; + if (total_length + run_length > sample_count) + run_length = sample_count - total_length; + + while (ptr->ready_num < run_length) { + if (read_buffer(ptr->ringbuffer, ptr->buflen, + ptr->pos, ptr->ready_num) >= 0.0f) { + index_offs = 0; + while ((read_buffer(ptr->ringbuffer, ptr->buflen, ptr->pos, + ptr->ready_num + index_offs) >= 0.0f) && + (ptr->ready_num + index_offs < run_length)) { + index_offs++; + } + } else { + index_offs = 0; + while ((read_buffer(ptr->ringbuffer, ptr->buflen, ptr->pos, + ptr->ready_num + index_offs) <= 0.0f) && + (ptr->ready_num + index_offs < run_length)) { + index_offs++; + } + } + + /* search for max value in scanned halfcycle */ + max_value = 0; + for (i = ptr->ready_num; i < ptr->ready_num + index_offs; i++) { + if (fabs(read_buffer(ptr->ringbuffer, ptr->buflen, + ptr->pos, i)) > max_value) + max_value = fabs(read_buffer(ptr->ringbuffer, + ptr->buflen, ptr->pos, i)); + } + section_gain = limit_vol / max_value; + if (max_value > limit_vol) + for (i = ptr->ready_num; i < ptr->ready_num + index_offs; i++) { + write_buffer(read_buffer(ptr->ringbuffer, ptr->buflen, + ptr->pos, i) * section_gain, + ptr->ringbuffer, ptr->buflen, ptr->pos, i); + } + ptr->ready_num += index_offs; + } + + /* push run_length values out of ringbuffer, feed with input */ + for (sample_index = 0; sample_index < run_length; sample_index++) { + *(output++) = out_vol * + push_buffer(*(input++), ptr->ringbuffer, + ptr->buflen, &(ptr->pos)); + } + ptr->ready_num -= run_length; + total_length += run_length; + } + *(ptr->latency) = ptr->buflen; +} + + + +void +set_run_adding_gain_Limiter(LADSPA_Handle Instance, LADSPA_Data gain) { + + Limiter * ptr = (Limiter *)Instance; + + ptr->run_adding_gain = gain; +} + + + +void +run_adding_Limiter(LADSPA_Handle Instance, + unsigned long SampleCount) { + + Limiter * ptr = (Limiter *)Instance; + + LADSPA_Data * input = ptr->input; + LADSPA_Data * output = ptr->output; + LADSPA_Data limit_vol = db2lin(LIMIT(*(ptr->limit_vol),-30.0f,20.0f)); + LADSPA_Data out_vol = db2lin(LIMIT(*(ptr->out_vol),-30.0f,20.0f)); + unsigned long sample_index; + unsigned long sample_count = SampleCount; + unsigned long index_offs = 0; + unsigned long i; + LADSPA_Data max_value = 0; + LADSPA_Data section_gain = 0; + unsigned long run_length; + unsigned long total_length = 0; + + + while (total_length < sample_count) { + + run_length = ptr->buflen; + if (total_length + run_length > sample_count) + run_length = sample_count - total_length; + + while (ptr->ready_num < run_length) { + if (read_buffer(ptr->ringbuffer, ptr->buflen, + ptr->pos, ptr->ready_num) >= 0.0f) { + index_offs = 0; + while ((read_buffer(ptr->ringbuffer, ptr->buflen, ptr->pos, + ptr->ready_num + index_offs) >= 0.0f) && + (ptr->ready_num + index_offs < run_length)) { + index_offs++; + } + } else { + index_offs = 0; + while ((read_buffer(ptr->ringbuffer, ptr->buflen, ptr->pos, + ptr->ready_num + index_offs) <= 0.0f) && + (ptr->ready_num + index_offs < run_length)) { + index_offs++; + } + } + + /* search for max value in scanned halfcycle */ + max_value = 0; + for (i = ptr->ready_num; i < ptr->ready_num + index_offs; i++) { + if (fabs(read_buffer(ptr->ringbuffer, ptr->buflen, + ptr->pos, i)) > max_value) + max_value = fabs(read_buffer(ptr->ringbuffer, + ptr->buflen, ptr->pos, i)); + } + section_gain = limit_vol / max_value; + if (max_value > limit_vol) + for (i = ptr->ready_num; i < ptr->ready_num + index_offs; i++) { + write_buffer(read_buffer(ptr->ringbuffer, ptr->buflen, + ptr->pos, i) * section_gain, + ptr->ringbuffer, ptr->buflen, ptr->pos, i); + } + ptr->ready_num += index_offs; + } + + /* push run_length values out of ringbuffer, feed with input */ + for (sample_index = 0; sample_index < run_length; sample_index++) { + *(output++) += ptr->run_adding_gain * out_vol * + push_buffer(*(input++), ptr->ringbuffer, + ptr->buflen, &(ptr->pos)); + } + ptr->ready_num -= run_length; + total_length += run_length; + } + *(ptr->latency) = ptr->buflen; +} + + + + +/* Throw away a Limiter effect instance. */ +void +cleanup_Limiter(LADSPA_Handle Instance) { + + Limiter * ptr = (Limiter *)Instance; + free(ptr->ringbuffer); + free(Instance); +} + + + +LADSPA_Descriptor * mono_descriptor = NULL; + + + +/* __attribute__((constructor)) _init() is called automatically when the plugin library is first + loaded. */ +void +__attribute__((constructor)) _init() { + + char ** port_names; + LADSPA_PortDescriptor * port_descriptors; + LADSPA_PortRangeHint * port_range_hints; + + if ((mono_descriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor))) == NULL) + exit(1); + + + + mono_descriptor->UniqueID = ID_MONO; + mono_descriptor->Label = strdup("tap_limiter"); + mono_descriptor->Properties = 0; + mono_descriptor->Name = strdup("TAP Scaling Limiter"); + mono_descriptor->Maker = strdup("Tom Szilagyi"); + mono_descriptor->Copyright = strdup("GPL"); + mono_descriptor->PortCount = PORTCOUNT_MONO; + + if ((port_descriptors = + (LADSPA_PortDescriptor *)calloc(PORTCOUNT_MONO, sizeof(LADSPA_PortDescriptor))) == NULL) + exit(1); + + mono_descriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; + port_descriptors[LIMIT_VOL] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_descriptors[OUT_VOL] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_descriptors[LATENCY] = LADSPA_PORT_OUTPUT | LADSPA_PORT_CONTROL; + port_descriptors[INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_descriptors[OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + + if ((port_names = + (char **)calloc(PORTCOUNT_MONO, sizeof(char *))) == NULL) + exit(1); + + mono_descriptor->PortNames = (const char **)port_names; + port_names[LIMIT_VOL] = strdup("Limit Level [dB]"); + port_names[OUT_VOL] = strdup("Output Volume [dB]"); + port_names[LATENCY] = strdup("latency"); + port_names[INPUT] = strdup("Input"); + port_names[OUTPUT] = strdup("Output"); + + if ((port_range_hints = + ((LADSPA_PortRangeHint *)calloc(PORTCOUNT_MONO, sizeof(LADSPA_PortRangeHint)))) == NULL) + exit(1); + + mono_descriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; + port_range_hints[LIMIT_VOL].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_0); + port_range_hints[OUT_VOL].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_0); + port_range_hints[LATENCY].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_MAXIMUM); + port_range_hints[LIMIT_VOL].LowerBound = -30; + port_range_hints[LIMIT_VOL].UpperBound = +20; + port_range_hints[OUT_VOL].LowerBound = -30; + port_range_hints[OUT_VOL].UpperBound = +20; + port_range_hints[LATENCY].LowerBound = 0; + port_range_hints[LATENCY].UpperBound = RINGBUF_SIZE + 0.1f; + port_range_hints[INPUT].HintDescriptor = 0; + port_range_hints[OUTPUT].HintDescriptor = 0; + mono_descriptor->instantiate = instantiate_Limiter; + mono_descriptor->connect_port = connect_port_Limiter; + mono_descriptor->activate = activate_Limiter; + mono_descriptor->run = run_Limiter; + mono_descriptor->run_adding = run_adding_Limiter; + mono_descriptor->set_run_adding_gain = set_run_adding_gain_Limiter; + mono_descriptor->deactivate = NULL; + mono_descriptor->cleanup = cleanup_Limiter; +} + + +void +delete_descriptor(LADSPA_Descriptor * descriptor) { + unsigned long index; + if (descriptor) { + free((char *)descriptor->Label); + free((char *)descriptor->Name); + free((char *)descriptor->Maker); + free((char *)descriptor->Copyright); + free((LADSPA_PortDescriptor *)descriptor->PortDescriptors); + for (index = 0; index < descriptor->PortCount; index++) + free((char *)(descriptor->PortNames[index])); + free((char **)descriptor->PortNames); + free((LADSPA_PortRangeHint *)descriptor->PortRangeHints); + free(descriptor); + } +} + + +/* __attribute__((destructor)) _fini() is called automatically when the library is unloaded. */ +void +__attribute__((destructor)) _fini() { + delete_descriptor(mono_descriptor); +} + + +/* Return a descriptor of the requested plugin type. */ +const LADSPA_Descriptor * +ladspa_descriptor(unsigned long Index) { + + switch (Index) { + case 0: + return mono_descriptor; + default: + return NULL; + } +} diff --git a/plugins/LadspaEffect/tap/tap_pinknoise.c b/plugins/LadspaEffect/tap/tap_pinknoise.c new file mode 100644 index 000000000..4a55628e4 --- /dev/null +++ b/plugins/LadspaEffect/tap/tap_pinknoise.c @@ -0,0 +1,345 @@ +/* -*- linux-c -*- + Copyright (C) 2004 Tom Szilagyi + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + $Id: tap_pinknoise.c,v 1.2 2004/08/13 18:34:31 tszilagyi Exp $ +*/ + + +#include +#include +#include +#include +#include + +#include +#include "tap_utils.h" + +/* The Unique ID of the plugin: */ +#define ID_MONO 2155 + + +/* The port numbers for the plugin: */ +#define HURST 0 +#define SIGNAL 1 +#define NOISE 2 +#define INPUT 3 +#define OUTPUT 4 + + +/* Total number of ports */ +#define PORTCOUNT_MONO 5 + + +#define NOISE_LEN 1024 + + +/* The structure used to hold port connection information and state */ +typedef struct { + LADSPA_Data * hurst; + LADSPA_Data * signal; + LADSPA_Data * noise; + LADSPA_Data * input; + LADSPA_Data * output; + + LADSPA_Data * ring; + unsigned long buflen; + unsigned long pos; + + unsigned long sample_rate; + LADSPA_Data run_adding_gain; +} Pinknoise; + + + +/* generate fractal pattern using Midpoint Displacement Method + * v: buffer of floats to output fractal pattern to + * N: length of v, MUST be integer power of 2 (ie 128, 256, ...) + * H: Hurst constant, between 0 and 0.9999 (fractal dimension) + */ +void +fractal(LADSPA_Data * v, int N, float H) { + + int l = N; + int k; + float r = 2.0f * H*H + 0.3f; + int c; + + v[0] = 0; + while (l > 1) { + k = N / l; + for (c = 0; c < k; c++) { + v[c*l + l/2] = (v[c*l] + v[((c+1) * l) % N]) / 2.0f + + 2.0f * r * (rand() - (float)RAND_MAX/2.0f) / (float)RAND_MAX; + v[c*l + l/2] = LIMIT(v[c*l + l/2], -1.0f, 1.0f); + } + l /= 2; + r /= powf(2, H); + } +} + + + +/* Construct a new plugin instance. */ +LADSPA_Handle +instantiate_Pinknoise(const LADSPA_Descriptor * Descriptor, + unsigned long SampleRate) { + + LADSPA_Handle * ptr; + + if ((ptr = malloc(sizeof(Pinknoise))) != NULL) { + ((Pinknoise *)ptr)->sample_rate = SampleRate; + ((Pinknoise *)ptr)->run_adding_gain = 1.0; + + if ((((Pinknoise *)ptr)->ring = + calloc(NOISE_LEN, sizeof(LADSPA_Data))) == NULL) + return NULL; + ((Pinknoise *)ptr)->buflen = NOISE_LEN; + ((Pinknoise *)ptr)->pos = 0; + + return ptr; + } + + return NULL; +} + + +/* Connect a port to a data location. */ +void +connect_port_Pinknoise(LADSPA_Handle Instance, + unsigned long Port, + LADSPA_Data * data) { + + Pinknoise * ptr; + + ptr = (Pinknoise *)Instance; + switch (Port) { + case HURST: + ptr->hurst = data; + break; + case SIGNAL: + ptr->signal = data; + break; + case NOISE: + ptr->noise = data; + break; + case INPUT: + ptr->input = data; + break; + case OUTPUT: + ptr->output = data; + break; + } +} + + + +void +run_Pinknoise(LADSPA_Handle Instance, + unsigned long SampleCount) { + + Pinknoise * ptr = (Pinknoise *)Instance; + + LADSPA_Data * input = ptr->input; + LADSPA_Data * output = ptr->output; + LADSPA_Data hurst = LIMIT(*(ptr->hurst), 0.0f, 1.0f); + LADSPA_Data signal = db2lin(LIMIT(*(ptr->signal), -90.0f, 20.0f)); + LADSPA_Data noise = db2lin(LIMIT(*(ptr->noise), -90.0f, 20.0f)); + unsigned long sample_index; + + for (sample_index = 0; sample_index < SampleCount; sample_index++) { + + if (!ptr->pos) + fractal(ptr->ring, NOISE_LEN, hurst); + + *(output++) = signal * *(input++) + + noise * push_buffer(0.0f, ptr->ring, ptr->buflen, &(ptr->pos)); + } +} + + + +void +set_run_adding_gain_Pinknoise(LADSPA_Handle Instance, LADSPA_Data gain) { + + Pinknoise * ptr; + + ptr = (Pinknoise *)Instance; + + ptr->run_adding_gain = gain; +} + + + +void +run_adding_Pinknoise(LADSPA_Handle Instance, + unsigned long SampleCount) { + + Pinknoise * ptr = (Pinknoise *)Instance; + + LADSPA_Data * input = ptr->input; + LADSPA_Data * output = ptr->output; + LADSPA_Data hurst = LIMIT(*(ptr->hurst), 0.0f, 1.0f); + LADSPA_Data signal = db2lin(LIMIT(*(ptr->signal), -90.0f, 20.0f)); + LADSPA_Data noise = db2lin(LIMIT(*(ptr->noise), -90.0f, 20.0f)); + unsigned long sample_index; + + for (sample_index = 0; sample_index < SampleCount; sample_index++) { + + if (!ptr->pos) + fractal(ptr->ring, NOISE_LEN, hurst); + + *(output++) += ptr->run_adding_gain * (signal * *(input++) + + noise * push_buffer(0.0f, ptr->ring, + ptr->buflen, &(ptr->pos))); + } +} + + + + +/* Throw away a Pinknoise effect instance. */ +void +cleanup_Pinknoise(LADSPA_Handle Instance) { + Pinknoise * ptr = (Pinknoise *)Instance; + free(ptr->ring); + free(Instance); +} + + + +LADSPA_Descriptor * mono_descriptor = NULL; + + + +/* __attribute__((constructor)) _init() is called automatically when the plugin library is first + loaded. */ +void +__attribute__((constructor)) _init() { + + char ** port_names; + LADSPA_PortDescriptor * port_descriptors; + LADSPA_PortRangeHint * port_range_hints; + + if ((mono_descriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor))) == NULL) + exit(1); + + /* initialize RNG */ +// srand(time(0)); + + mono_descriptor->UniqueID = ID_MONO; + mono_descriptor->Label = strdup("tap_pinknoise"); + mono_descriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; + mono_descriptor->Name = strdup("TAP Pink/Fractal Noise"); + mono_descriptor->Maker = strdup("Tom Szilagyi"); + mono_descriptor->Copyright = strdup("GPL"); + mono_descriptor->PortCount = PORTCOUNT_MONO; + + if ((port_descriptors = + (LADSPA_PortDescriptor *)calloc(PORTCOUNT_MONO, sizeof(LADSPA_PortDescriptor))) == NULL) + exit(1); + + mono_descriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; + port_descriptors[HURST] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_descriptors[SIGNAL] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_descriptors[NOISE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_descriptors[INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_descriptors[OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + + if ((port_names = + (char **)calloc(PORTCOUNT_MONO, sizeof(char *))) == NULL) + exit(1); + + mono_descriptor->PortNames = (const char **)port_names; + port_names[HURST] = strdup("Fractal Dimension"); + port_names[SIGNAL] = strdup("Signal Level [dB]"); + port_names[NOISE] = strdup("Noise Level [dB]"); + port_names[INPUT] = strdup("Input"); + port_names[OUTPUT] = strdup("Output"); + + if ((port_range_hints = + ((LADSPA_PortRangeHint *)calloc(PORTCOUNT_MONO, sizeof(LADSPA_PortRangeHint)))) == NULL) + exit(1); + + mono_descriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; + port_range_hints[HURST].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_MIDDLE); + port_range_hints[SIGNAL].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_0); + port_range_hints[NOISE].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_MINIMUM); + port_range_hints[HURST].LowerBound = 0.0f; + port_range_hints[HURST].UpperBound = 1.0f; + port_range_hints[SIGNAL].LowerBound = -90.0f; + port_range_hints[SIGNAL].UpperBound = 20.0f; + port_range_hints[NOISE].LowerBound = -90.0f; + port_range_hints[NOISE].UpperBound = 20.0f; + port_range_hints[INPUT].HintDescriptor = 0; + port_range_hints[OUTPUT].HintDescriptor = 0; + mono_descriptor->instantiate = instantiate_Pinknoise; + mono_descriptor->connect_port = connect_port_Pinknoise; + mono_descriptor->activate = NULL; + mono_descriptor->run = run_Pinknoise; + mono_descriptor->run_adding = run_adding_Pinknoise; + mono_descriptor->set_run_adding_gain = set_run_adding_gain_Pinknoise; + mono_descriptor->deactivate = NULL; + mono_descriptor->cleanup = cleanup_Pinknoise; +} + + +void +delete_descriptor(LADSPA_Descriptor * descriptor) { + unsigned long index; + if (descriptor) { + free((char *)descriptor->Label); + free((char *)descriptor->Name); + free((char *)descriptor->Maker); + free((char *)descriptor->Copyright); + free((LADSPA_PortDescriptor *)descriptor->PortDescriptors); + for (index = 0; index < descriptor->PortCount; index++) + free((char *)(descriptor->PortNames[index])); + free((char **)descriptor->PortNames); + free((LADSPA_PortRangeHint *)descriptor->PortRangeHints); + free(descriptor); + } +} + + +/* __attribute__((destructor)) _fini() is called automatically when the library is unloaded. */ +void +__attribute__((destructor)) _fini() { + delete_descriptor(mono_descriptor); +} + + +/* Return a descriptor of the requested plugin type. */ +const LADSPA_Descriptor * +ladspa_descriptor(unsigned long Index) { + + switch (Index) { + case 0: + return mono_descriptor; + default: + return NULL; + } +} diff --git a/plugins/LadspaEffect/tap/tap_pitch.c b/plugins/LadspaEffect/tap/tap_pitch.c new file mode 100644 index 000000000..d0f39d390 --- /dev/null +++ b/plugins/LadspaEffect/tap/tap_pitch.c @@ -0,0 +1,556 @@ +/* -*- linux-c -*- + Copyright (C) 2004 Tom Szilagyi + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + $Id: tap_pitch.c,v 1.2 2004/02/21 17:33:36 tszilagyi Exp $ +*/ + + +#include +#include +#include +#include + +#include +#include "tap_utils.h" + + +/* The Unique ID of the plugin: */ + +#define ID_MONO 2150 + +/* The port numbers for the plugin: */ + +#define SEMITONE 0 +#define RATE 1 +#define DRYLEVEL 2 +#define WETLEVEL 3 +#define LATENCY 4 +#define INPUT 5 +#define OUTPUT 6 + +/* Total number of ports */ + + +#define PORTCOUNT_MONO 7 + + +/* depth of phase mod (yes, this is a magic number) */ +#define PM_DEPTH 3681.0f + + +/* another magic number, derived from the above one */ +#define PM_BUFLEN 16027 + + +/* frequency of the modulation signal (Hz) */ +#define PM_FREQ 6.0f + + +#define COS_TABLE_SIZE 1024 +LADSPA_Data cos_table[COS_TABLE_SIZE]; + + +/* \sqrt{12}{2} used for key frequency computing */ +#define ROOT_12_2 1.059463094f + + +/* The structure used to hold port connection information and state */ + +typedef struct { + LADSPA_Data * rate; + LADSPA_Data * semitone; + LADSPA_Data * drylevel; + LADSPA_Data * wetlevel; + LADSPA_Data * latency; + LADSPA_Data * input; + LADSPA_Data * output; + + LADSPA_Data * ringbuffer; + unsigned long buflen; + unsigned long pos; + LADSPA_Data phase; + + unsigned long sample_rate; + LADSPA_Data run_adding_gain; +} Pitch; + + + +/* Construct a new plugin instance. */ +LADSPA_Handle +instantiate_Pitch(const LADSPA_Descriptor * Descriptor, + unsigned long sample_rate) { + + LADSPA_Handle * ptr; + + if ((ptr = malloc(sizeof(Pitch))) != NULL) { + ((Pitch *)ptr)->sample_rate = sample_rate; + ((Pitch *)ptr)->run_adding_gain = 1.0f; + + if ((((Pitch *)ptr)->ringbuffer = + calloc(2 * PM_BUFLEN, sizeof(LADSPA_Data))) == NULL) + return NULL; + ((Pitch *)ptr)->buflen = 2 * PM_BUFLEN * sample_rate / 192000; + ((Pitch *)ptr)->pos = 0; + + return ptr; + } + return NULL; +} + + +void +activate_Pitch(LADSPA_Handle Instance) { + + Pitch * ptr = (Pitch *)Instance; + unsigned long i; + + for (i = 0; i < ptr->buflen; i++) + ptr->ringbuffer[i] = 0.0f; + + ptr->phase = 0.0f; +} + + + + + +/* Connect a port to a data location. */ +void +connect_port_Pitch(LADSPA_Handle Instance, + unsigned long Port, + LADSPA_Data * DataLocation) { + + Pitch * ptr = (Pitch *)Instance; + + switch (Port) { + case RATE: + ptr->rate = DataLocation; + break; + case SEMITONE: + ptr->semitone = DataLocation; + break; + case DRYLEVEL: + ptr->drylevel = DataLocation; + break; + case WETLEVEL: + ptr->wetlevel = DataLocation; + break; + case LATENCY: + ptr->latency = DataLocation; + *(ptr->latency) = ptr->buflen / 2; /* IS THIS LEGAL? */ + break; + case INPUT: + ptr->input = DataLocation; + break; + case OUTPUT: + ptr->output = DataLocation; + break; + } +} + + + +void +run_Pitch(LADSPA_Handle Instance, + unsigned long SampleCount) { + + Pitch * ptr = (Pitch *)Instance; + LADSPA_Data * input = ptr->input; + LADSPA_Data * output = ptr->output; + LADSPA_Data drylevel = db2lin(LIMIT(*(ptr->drylevel),-90.0f,20.0f)); + LADSPA_Data wetlevel = 0.333333f * db2lin(LIMIT(*(ptr->wetlevel),-90.0f,20.0f)); + LADSPA_Data buflen = ptr->buflen / 2.0f; + LADSPA_Data semitone = LIMIT(*(ptr->semitone),-12.0f,12.0f); + LADSPA_Data rate; + LADSPA_Data r; + LADSPA_Data depth; + + unsigned long sample_index; + unsigned long sample_count = SampleCount; + + LADSPA_Data in = 0.0f; + LADSPA_Data sign = 1.0f; + LADSPA_Data phase_0 = 0.0f; + LADSPA_Data phase_am_0 = 0.0f; + LADSPA_Data phase_1 = 0.0f; + LADSPA_Data phase_am_1 = 0.0f; + LADSPA_Data phase_2 = 0.0f; + LADSPA_Data phase_am_2 = 0.0f; + LADSPA_Data fpos_0 = 0.0f, fpos_1 = 0.0f, fpos_2 = 0.0f; + LADSPA_Data n_0 = 0.0f, n_1 = 0.0f, n_2 = 0.0f; + LADSPA_Data rem_0 = 0.0f, rem_1 = 0.0f, rem_2 = 0.0f; + LADSPA_Data sa_0, sb_0, sa_1, sb_1, sa_2, sb_2; + + + if (semitone == 0.0f) + rate = LIMIT(*(ptr->rate),-50.0f,100.0f); + else + rate = 100.0f * (powf(ROOT_12_2,semitone) - 1.0f); + + r = -1.0f * ABS(rate); + depth = buflen * LIMIT(ABS(r) / 100.0f, 0.0f, 1.0f); + + + if (rate > 0.0f) + sign = -1.0f; + + for (sample_index = 0; sample_index < sample_count; sample_index++) { + + in = *(input++); + + phase_0 = COS_TABLE_SIZE * PM_FREQ * sample_index / ptr->sample_rate + ptr->phase; + while (phase_0 >= COS_TABLE_SIZE) + phase_0 -= COS_TABLE_SIZE; + phase_am_0 = phase_0 + COS_TABLE_SIZE/2; + while (phase_am_0 >= COS_TABLE_SIZE) + phase_am_0 -= COS_TABLE_SIZE; + + phase_1 = phase_0 + COS_TABLE_SIZE/3.0f; + while (phase_1 >= COS_TABLE_SIZE) + phase_1 -= COS_TABLE_SIZE; + phase_am_1 = phase_1 + COS_TABLE_SIZE/2; + while (phase_am_1 >= COS_TABLE_SIZE) + phase_am_1 -= COS_TABLE_SIZE; + + phase_2 = phase_0 + 2.0f*COS_TABLE_SIZE/3.0f; + while (phase_2 >= COS_TABLE_SIZE) + phase_2 -= COS_TABLE_SIZE; + phase_am_2 = phase_2 + COS_TABLE_SIZE/2; + while (phase_am_2 >= COS_TABLE_SIZE) + phase_am_2 -= COS_TABLE_SIZE; + + push_buffer(in, ptr->ringbuffer, ptr->buflen, &(ptr->pos)); + + fpos_0 = depth * (1.0f - sign * (2.0f * phase_0 / COS_TABLE_SIZE - 1.0f)); + n_0 = floorf(fpos_0); + rem_0 = fpos_0 - n_0; + + fpos_1 = depth * (1.0f - sign * (2.0f * phase_1 / COS_TABLE_SIZE - 1.0f)); + n_1 = floorf(fpos_1); + rem_1 = fpos_1 - n_1; + + fpos_2 = depth * (1.0f - sign * (2.0f * phase_2 / COS_TABLE_SIZE - 1.0f)); + n_2 = floorf(fpos_2); + rem_2 = fpos_2 - n_2; + + sa_0 = read_buffer(ptr->ringbuffer, ptr->buflen, ptr->pos, (unsigned long) n_0); + sb_0 = read_buffer(ptr->ringbuffer, ptr->buflen, ptr->pos, (unsigned long) n_0 + 1); + + sa_1 = read_buffer(ptr->ringbuffer, ptr->buflen, ptr->pos, (unsigned long) n_1); + sb_1 = read_buffer(ptr->ringbuffer, ptr->buflen, ptr->pos, (unsigned long) n_1 + 1); + + sa_2 = read_buffer(ptr->ringbuffer, ptr->buflen, ptr->pos, (unsigned long) n_2); + sb_2 = read_buffer(ptr->ringbuffer, ptr->buflen, ptr->pos, (unsigned long) n_2 + 1); + + *(output++) = + wetlevel * + ((1.0f + cos_table[(unsigned long) phase_am_0]) * + ((1 - rem_0) * sa_0 + rem_0 * sb_0) + + (1.0f + cos_table[(unsigned long) phase_am_1]) * + ((1 - rem_1) * sa_1 + rem_1 * sb_1) + + (1.0f + cos_table[(unsigned long) phase_am_2]) * + ((1 - rem_2) * sa_2 + rem_2 * sb_2)) + + drylevel * + read_buffer(ptr->ringbuffer, ptr->buflen, ptr->pos, (unsigned long) depth); + + } + + ptr->phase += COS_TABLE_SIZE * PM_FREQ * sample_index / ptr->sample_rate; + while (ptr->phase >= COS_TABLE_SIZE) + ptr->phase -= COS_TABLE_SIZE; + + *(ptr->latency) = buflen - (unsigned long) depth; +} + + + +void +set_run_adding_gain_Pitch(LADSPA_Handle Instance, LADSPA_Data gain) { + + Pitch * ptr = (Pitch *)Instance; + + ptr->run_adding_gain = gain; +} + + + +void +run_adding_Pitch(LADSPA_Handle Instance, + unsigned long SampleCount) { + + Pitch * ptr = (Pitch *)Instance; + LADSPA_Data * input = ptr->input; + LADSPA_Data * output = ptr->output; + LADSPA_Data drylevel = db2lin(LIMIT(*(ptr->drylevel),-90.0f,20.0f)); + LADSPA_Data wetlevel = 0.333333f * db2lin(LIMIT(*(ptr->wetlevel),-90.0f,20.0f)); + LADSPA_Data buflen = ptr->buflen / 2.0f; + LADSPA_Data semitone = LIMIT(*(ptr->semitone),-12.0f,12.0f); + LADSPA_Data rate; + LADSPA_Data r; + LADSPA_Data depth; + + unsigned long sample_index; + unsigned long sample_count = SampleCount; + + LADSPA_Data in = 0.0f; + LADSPA_Data sign = 1.0f; + LADSPA_Data phase_0 = 0.0f; + LADSPA_Data phase_am_0 = 0.0f; + LADSPA_Data phase_1 = 0.0f; + LADSPA_Data phase_am_1 = 0.0f; + LADSPA_Data phase_2 = 0.0f; + LADSPA_Data phase_am_2 = 0.0f; + LADSPA_Data fpos_0 = 0.0f, fpos_1 = 0.0f, fpos_2 = 0.0f; + LADSPA_Data n_0 = 0.0f, n_1 = 0.0f, n_2 = 0.0f; + LADSPA_Data rem_0 = 0.0f, rem_1 = 0.0f, rem_2 = 0.0f; + LADSPA_Data sa_0, sb_0, sa_1, sb_1, sa_2, sb_2; + + + if (semitone == 0.0f) + rate = LIMIT(*(ptr->rate),-50.0f,100.0f); + else + rate = 100.0f * (powf(ROOT_12_2,semitone) - 1.0f); + + r = -1.0f * ABS(rate); + depth = buflen * LIMIT(ABS(r) / 100.0f, 0.0f, 1.0f); + + + if (rate > 0.0f) + sign = -1.0f; + + for (sample_index = 0; sample_index < sample_count; sample_index++) { + + in = *(input++); + + phase_0 = COS_TABLE_SIZE * PM_FREQ * sample_index / ptr->sample_rate + ptr->phase; + while (phase_0 >= COS_TABLE_SIZE) + phase_0 -= COS_TABLE_SIZE; + phase_am_0 = phase_0 + COS_TABLE_SIZE/2; + while (phase_am_0 >= COS_TABLE_SIZE) + phase_am_0 -= COS_TABLE_SIZE; + + phase_1 = phase_0 + COS_TABLE_SIZE/3.0f; + while (phase_1 >= COS_TABLE_SIZE) + phase_1 -= COS_TABLE_SIZE; + phase_am_1 = phase_1 + COS_TABLE_SIZE/2; + while (phase_am_1 >= COS_TABLE_SIZE) + phase_am_1 -= COS_TABLE_SIZE; + + phase_2 = phase_0 + 2.0f*COS_TABLE_SIZE/3.0f; + while (phase_2 >= COS_TABLE_SIZE) + phase_2 -= COS_TABLE_SIZE; + phase_am_2 = phase_2 + COS_TABLE_SIZE/2; + while (phase_am_2 >= COS_TABLE_SIZE) + phase_am_2 -= COS_TABLE_SIZE; + + push_buffer(in, ptr->ringbuffer, ptr->buflen, &(ptr->pos)); + + fpos_0 = depth * (1.0f - sign * (2.0f * phase_0 / COS_TABLE_SIZE - 1.0f)); + n_0 = floorf(fpos_0); + rem_0 = fpos_0 - n_0; + + fpos_1 = depth * (1.0f - sign * (2.0f * phase_1 / COS_TABLE_SIZE - 1.0f)); + n_1 = floorf(fpos_1); + rem_1 = fpos_1 - n_1; + + fpos_2 = depth * (1.0f - sign * (2.0f * phase_2 / COS_TABLE_SIZE - 1.0f)); + n_2 = floorf(fpos_2); + rem_2 = fpos_2 - n_2; + + sa_0 = read_buffer(ptr->ringbuffer, ptr->buflen, ptr->pos, (unsigned long) n_0); + sb_0 = read_buffer(ptr->ringbuffer, ptr->buflen, ptr->pos, (unsigned long) n_0 + 1); + + sa_1 = read_buffer(ptr->ringbuffer, ptr->buflen, ptr->pos, (unsigned long) n_1); + sb_1 = read_buffer(ptr->ringbuffer, ptr->buflen, ptr->pos, (unsigned long) n_1 + 1); + + sa_2 = read_buffer(ptr->ringbuffer, ptr->buflen, ptr->pos, (unsigned long) n_2); + sb_2 = read_buffer(ptr->ringbuffer, ptr->buflen, ptr->pos, (unsigned long) n_2 + 1); + + *(output++) += ptr->run_adding_gain * + wetlevel * + ((1.0f + cos_table[(unsigned long) phase_am_0]) * + ((1 - rem_0) * sa_0 + rem_0 * sb_0) + + (1.0f + cos_table[(unsigned long) phase_am_1]) * + ((1 - rem_1) * sa_1 + rem_1 * sb_1) + + (1.0f + cos_table[(unsigned long) phase_am_2]) * + ((1 - rem_2) * sa_2 + rem_2 * sb_2)) + + drylevel * + read_buffer(ptr->ringbuffer, ptr->buflen, ptr->pos, (unsigned long) depth); + + } + + ptr->phase += COS_TABLE_SIZE * PM_FREQ * sample_index / ptr->sample_rate; + while (ptr->phase >= COS_TABLE_SIZE) + ptr->phase -= COS_TABLE_SIZE; + + *(ptr->latency) = buflen - (unsigned long) depth; +} + + + +/* Throw away a Pitch effect instance. */ +void +cleanup_Pitch(LADSPA_Handle Instance) { + + Pitch * ptr = (Pitch *)Instance; + free(ptr->ringbuffer); + free(Instance); +} + + + +LADSPA_Descriptor * mono_descriptor = NULL; + + + +/* __attribute__((constructor)) _init() is called automatically when the plugin library is first + loaded. */ +void +__attribute__((constructor)) _init() { + + int i; + char ** port_names; + LADSPA_PortDescriptor * port_descriptors; + LADSPA_PortRangeHint * port_range_hints; + + if ((mono_descriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor))) == NULL) + exit(1); + + for (i = 0; i < COS_TABLE_SIZE; i++) + cos_table[i] = cosf(i * 2.0f * M_PI / COS_TABLE_SIZE); + + + mono_descriptor->UniqueID = ID_MONO; + mono_descriptor->Label = strdup("tap_pitch"); + mono_descriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; + mono_descriptor->Name = strdup("TAP Pitch Shifter"); + mono_descriptor->Maker = strdup("Tom Szilagyi"); + mono_descriptor->Copyright = strdup("GPL"); + mono_descriptor->PortCount = PORTCOUNT_MONO; + + if ((port_descriptors = + (LADSPA_PortDescriptor *)calloc(PORTCOUNT_MONO, sizeof(LADSPA_PortDescriptor))) == NULL) + exit(1); + + mono_descriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; + port_descriptors[RATE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_descriptors[SEMITONE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_descriptors[DRYLEVEL] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_descriptors[WETLEVEL] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_descriptors[LATENCY] = LADSPA_PORT_OUTPUT | LADSPA_PORT_CONTROL; + port_descriptors[INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_descriptors[OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + + if ((port_names = + (char **)calloc(PORTCOUNT_MONO, sizeof(char *))) == NULL) + exit(1); + + mono_descriptor->PortNames = (const char **)port_names; + port_names[SEMITONE] = strdup("Semitone Shift"); + port_names[RATE] = strdup("Rate Shift [%]"); + port_names[DRYLEVEL] = strdup("Dry Level [dB]"); + port_names[WETLEVEL] = strdup("Wet Level [dB]"); + port_names[LATENCY] = strdup("latency"); + port_names[INPUT] = strdup("Input"); + port_names[OUTPUT] = strdup("Output"); + + if ((port_range_hints = + ((LADSPA_PortRangeHint *)calloc(PORTCOUNT_MONO, sizeof(LADSPA_PortRangeHint)))) == NULL) + exit(1); + + mono_descriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; + port_range_hints[RATE].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_0); + port_range_hints[SEMITONE].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_0); + port_range_hints[DRYLEVEL].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_MINIMUM); + port_range_hints[WETLEVEL].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_0); + port_range_hints[LATENCY].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_MAXIMUM); + port_range_hints[RATE].LowerBound = -50.0f; + port_range_hints[RATE].UpperBound = 100.0f; + port_range_hints[SEMITONE].LowerBound = -12.0f; + port_range_hints[SEMITONE].UpperBound = 12.0f; + port_range_hints[DRYLEVEL].LowerBound = -90.0f; + port_range_hints[DRYLEVEL].UpperBound = 20.0f; + port_range_hints[WETLEVEL].LowerBound = -90.0f; + port_range_hints[WETLEVEL].UpperBound = 20.0f; + port_range_hints[LATENCY].LowerBound = 0; + port_range_hints[LATENCY].UpperBound = PM_BUFLEN; + port_range_hints[INPUT].HintDescriptor = 0; + port_range_hints[OUTPUT].HintDescriptor = 0; + mono_descriptor->instantiate = instantiate_Pitch; + mono_descriptor->connect_port = connect_port_Pitch; + mono_descriptor->activate = activate_Pitch; + mono_descriptor->run = run_Pitch; + mono_descriptor->run_adding = run_adding_Pitch; + mono_descriptor->set_run_adding_gain = set_run_adding_gain_Pitch; + mono_descriptor->deactivate = NULL; + mono_descriptor->cleanup = cleanup_Pitch; +} + + +void +delete_descriptor(LADSPA_Descriptor * descriptor) { + unsigned long index; + if (descriptor) { + free((char *)descriptor->Label); + free((char *)descriptor->Name); + free((char *)descriptor->Maker); + free((char *)descriptor->Copyright); + free((LADSPA_PortDescriptor *)descriptor->PortDescriptors); + for (index = 0; index < descriptor->PortCount; index++) + free((char *)(descriptor->PortNames[index])); + free((char **)descriptor->PortNames); + free((LADSPA_PortRangeHint *)descriptor->PortRangeHints); + free(descriptor); + } +} + + +/* __attribute__((destructor)) _fini() is called automatically when the library is unloaded. */ +void +__attribute__((destructor)) _fini() { + delete_descriptor(mono_descriptor); +} + + +/* Return a descriptor of the requested plugin type. */ +const LADSPA_Descriptor * +ladspa_descriptor(unsigned long Index) { + + switch (Index) { + case 0: + return mono_descriptor; + default: + return NULL; + } +} diff --git a/plugins/LadspaEffect/tap/tap_reflector.c b/plugins/LadspaEffect/tap/tap_reflector.c new file mode 100644 index 000000000..9c1826f42 --- /dev/null +++ b/plugins/LadspaEffect/tap/tap_reflector.c @@ -0,0 +1,500 @@ +/* -*- linux-c -*- + Copyright (C) 2004 Tom Szilagyi + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + $Id: tap_reflector.c,v 1.1 2004/06/18 20:12:41 tszilagyi Exp $ +*/ + + +#include +#include +#include +#include + +#include +#include "tap_utils.h" + + +/* The Unique ID of the plugin: */ + +#define ID_MONO 2154 + +/* The port numbers for the plugin: */ + +#define FRAGMENT 0 +#define DRYLEVEL 1 +#define WETLEVEL 2 +#define INPUT 3 +#define OUTPUT 4 + +/* Total number of ports */ + + +#define PORTCOUNT_MONO 5 + + +/* minimum & maximum fragment length [ms] */ +#define MIN_FRAGMENT_LEN 20 +#define MAX_FRAGMENT_LEN 1600 + +/* in kHz */ +#define MAX_SAMPLE_RATE 192 + + +#define COS_TABLE_SIZE 1024 +LADSPA_Data cos_table[COS_TABLE_SIZE]; + + + +/* The structure used to hold port connection information and state */ + +typedef struct { + LADSPA_Data * fragment; + LADSPA_Data * drylevel; + LADSPA_Data * wetlevel; + LADSPA_Data * input; + LADSPA_Data * output; + + LADSPA_Data * ring0; + unsigned long buflen0; + unsigned long pos0; + LADSPA_Data * ring1; + unsigned long buflen1; + unsigned long pos1; + LADSPA_Data * delay1; + unsigned long delay_buflen1; + unsigned long delay_pos1; + LADSPA_Data * ring2; + unsigned long buflen2; + unsigned long pos2; + LADSPA_Data * delay2; + unsigned long delay_buflen2; + unsigned long delay_pos2; + + unsigned long fragment_pos; + + unsigned long sample_rate; + LADSPA_Data run_adding_gain; +} Reflector; + + + +/* Construct a new plugin instance. */ +LADSPA_Handle +instantiate_Reflector(const LADSPA_Descriptor * Descriptor, + unsigned long sample_rate) { + + LADSPA_Handle * ptr; + + if ((ptr = malloc(sizeof(Reflector))) != NULL) { + ((Reflector *)ptr)->sample_rate = sample_rate; + ((Reflector *)ptr)->run_adding_gain = 1.0f; + + if ((((Reflector *)ptr)->ring0 = + calloc(2 * MAX_FRAGMENT_LEN * MAX_SAMPLE_RATE, sizeof(LADSPA_Data))) == NULL) + return NULL; + ((Reflector *)ptr)->buflen0 = 2 * MAX_FRAGMENT_LEN * sample_rate / 1000; + ((Reflector *)ptr)->pos0 = 0; + + if ((((Reflector *)ptr)->ring1 = + calloc(2 * MAX_FRAGMENT_LEN * MAX_SAMPLE_RATE, sizeof(LADSPA_Data))) == NULL) + return NULL; + ((Reflector *)ptr)->buflen1 = 2 * MAX_FRAGMENT_LEN * sample_rate / 1000; + ((Reflector *)ptr)->pos1 = 0; + + if ((((Reflector *)ptr)->delay1 = + calloc(2 * MAX_FRAGMENT_LEN * MAX_SAMPLE_RATE, sizeof(LADSPA_Data))) == NULL) + return NULL; + ((Reflector *)ptr)->delay_buflen1 = 2 * MAX_FRAGMENT_LEN * sample_rate / 3000; + ((Reflector *)ptr)->pos1 = 0; + + if ((((Reflector *)ptr)->ring2 = + calloc(2 * MAX_FRAGMENT_LEN * MAX_SAMPLE_RATE, sizeof(LADSPA_Data))) == NULL) + return NULL; + ((Reflector *)ptr)->buflen2 = 2 * MAX_FRAGMENT_LEN * sample_rate / 1000; + ((Reflector *)ptr)->pos2 = 0; + + if ((((Reflector *)ptr)->delay2 = + calloc(2 * MAX_FRAGMENT_LEN * MAX_SAMPLE_RATE, sizeof(LADSPA_Data))) == NULL) + return NULL; + ((Reflector *)ptr)->delay_buflen2 = 4 * MAX_FRAGMENT_LEN * sample_rate / 3000; + ((Reflector *)ptr)->pos2 = 0; + + return ptr; + } + return NULL; +} + + +void +activate_Reflector(LADSPA_Handle Instance) { + + Reflector * ptr = (Reflector *)Instance; + unsigned long i; + + for (i = 0; i < ptr->buflen0; i++) + ptr->ring0[i] = 0.0f; + ptr->pos0 = 0; + for (i = 0; i < ptr->buflen1; i++) + ptr->ring1[i] = 0.0f; + ptr->pos1 = 0; + for (i = 0; i < ptr->buflen2; i++) + ptr->ring2[i] = 0.0f; + ptr->pos2 = 0; + + for (i = 0; i < ptr->delay_buflen1; i++) + ptr->delay1[i] = 0.0f; + ptr->delay_pos1 = 0; + for (i = 0; i < ptr->delay_buflen2; i++) + ptr->delay2[i] = 0.0f; + ptr->delay_pos2 = 0; + + ptr->fragment_pos = 0; +} + + + + + +/* Connect a port to a data location. */ +void +connect_port_Reflector(LADSPA_Handle Instance, + unsigned long Port, + LADSPA_Data * DataLocation) { + + Reflector * ptr = (Reflector *)Instance; + + switch (Port) { + case FRAGMENT: + ptr->fragment = DataLocation; + break; + case DRYLEVEL: + ptr->drylevel = DataLocation; + break; + case WETLEVEL: + ptr->wetlevel = DataLocation; + break; + case INPUT: + ptr->input = DataLocation; + break; + case OUTPUT: + ptr->output = DataLocation; + break; + } +} + + + +void +run_Reflector(LADSPA_Handle Instance, + unsigned long SampleCount) { + + Reflector * ptr = (Reflector *)Instance; + LADSPA_Data * input = ptr->input; + LADSPA_Data * output = ptr->output; + LADSPA_Data drylevel = db2lin(LIMIT(*(ptr->drylevel),-90.0f,20.0f)); + LADSPA_Data wetlevel = 0.333333f * db2lin(LIMIT(*(ptr->wetlevel),-90.0f,20.0f)); + LADSPA_Data fragment = LIMIT(*(ptr->fragment),(float)MIN_FRAGMENT_LEN,(float)MAX_FRAGMENT_LEN); + + unsigned long sample_index; + unsigned long sample_count = SampleCount; + + LADSPA_Data in = 0.0f; + LADSPA_Data in1 = 0.0f; + LADSPA_Data in2 = 0.0f; + LADSPA_Data out_0 = 0.0f; + LADSPA_Data out_1 = 0.0f; + LADSPA_Data out_2 = 0.0f; + + unsigned long fragment_pos1 = 0; + unsigned long fragment_pos2 = 0; + + unsigned long arg_0 = 0; + LADSPA_Data am_0 = 0.0f; + unsigned long arg_1 = 0; + LADSPA_Data am_1 = 0.0f; + unsigned long arg_2 = 0; + LADSPA_Data am_2 = 0.0f; + + ptr->buflen0 = 2 * fragment * ptr->sample_rate / 1000.0f; + ptr->buflen1 = ptr->buflen0; + ptr->buflen2 = ptr->buflen0; + ptr->delay_buflen1 = ptr->buflen0 / 3; + ptr->delay_buflen2 = 2 * ptr->buflen0 / 3; + + for (sample_index = 0; sample_index < sample_count; sample_index++) { + + in = *(input++); + in1 = push_buffer(in, ptr->delay1, ptr->delay_buflen1, &(ptr->delay_pos1)); + in2 = push_buffer(in, ptr->delay2, ptr->delay_buflen2, &(ptr->delay_pos2)); + + push_buffer(in2, ptr->ring0, ptr->buflen0, &(ptr->pos0)); + push_buffer(in1, ptr->ring1, ptr->buflen1, &(ptr->pos1)); + push_buffer(in, ptr->ring2, ptr->buflen2, &(ptr->pos2)); + + fragment_pos1 = (ptr->fragment_pos + ptr->buflen0 / 3) % ptr->buflen0; + fragment_pos2 = (ptr->fragment_pos + 2 * ptr->buflen1 / 3) % ptr->buflen1; + + out_0 = read_buffer(ptr->ring0, ptr->buflen0, ptr->pos0, + ptr->buflen0 - ptr->fragment_pos - 1); + out_1 = read_buffer(ptr->ring1, ptr->buflen1, ptr->pos1, + ptr->buflen1 - fragment_pos1 - 1); + out_2 = read_buffer(ptr->ring2, ptr->buflen2, ptr->pos2, + ptr->buflen2 - fragment_pos2 - 1); + + ptr->fragment_pos += 2; + if (ptr->fragment_pos >= ptr->buflen0) + ptr->fragment_pos = 0; + + arg_0 = (float)ptr->fragment_pos / (float)ptr->buflen0 * COS_TABLE_SIZE; + am_0 = 1.0f - cos_table[arg_0]; + arg_1 = (float)fragment_pos1 / (float)ptr->buflen1 * COS_TABLE_SIZE; + am_1 = 1.0f - cos_table[arg_1]; + arg_2 = (float)fragment_pos2 / (float)ptr->buflen2 * COS_TABLE_SIZE; + am_2 = 1.0f - cos_table[arg_2]; + + *(output++) = drylevel * in + wetlevel * + (am_0 * out_0 + am_1 * out_1 + am_2 * out_2); + } +} + + + +void +set_run_adding_gain_Reflector(LADSPA_Handle Instance, LADSPA_Data gain) { + + Reflector * ptr = (Reflector *)Instance; + + ptr->run_adding_gain = gain; +} + + + +void +run_adding_Reflector(LADSPA_Handle Instance, + unsigned long SampleCount) { + + Reflector * ptr = (Reflector *)Instance; + LADSPA_Data * input = ptr->input; + LADSPA_Data * output = ptr->output; + LADSPA_Data drylevel = db2lin(LIMIT(*(ptr->drylevel),-90.0f,20.0f)); + LADSPA_Data wetlevel = 0.333333f * db2lin(LIMIT(*(ptr->wetlevel),-90.0f,20.0f)); + LADSPA_Data fragment = LIMIT(*(ptr->fragment),(float)MIN_FRAGMENT_LEN,(float)MAX_FRAGMENT_LEN); + + unsigned long sample_index; + unsigned long sample_count = SampleCount; + + LADSPA_Data in = 0.0f; + LADSPA_Data in1 = 0.0f; + LADSPA_Data in2 = 0.0f; + LADSPA_Data out_0 = 0.0f; + LADSPA_Data out_1 = 0.0f; + LADSPA_Data out_2 = 0.0f; + + unsigned long fragment_pos1 = 0; + unsigned long fragment_pos2 = 0; + + unsigned long arg_0 = 0; + LADSPA_Data am_0 = 0.0f; + unsigned long arg_1 = 0; + LADSPA_Data am_1 = 0.0f; + unsigned long arg_2 = 0; + LADSPA_Data am_2 = 0.0f; + + ptr->buflen0 = 2 * fragment * ptr->sample_rate / 1000.0f; + ptr->buflen1 = ptr->buflen0; + ptr->buflen2 = ptr->buflen0; + ptr->delay_buflen1 = ptr->buflen0 / 3; + ptr->delay_buflen2 = 2 * ptr->buflen0 / 3; + + for (sample_index = 0; sample_index < sample_count; sample_index++) { + + in = *(input++); + in1 = push_buffer(in, ptr->delay1, ptr->delay_buflen1, &(ptr->delay_pos1)); + in2 = push_buffer(in, ptr->delay2, ptr->delay_buflen2, &(ptr->delay_pos2)); + + push_buffer(in2, ptr->ring0, ptr->buflen0, &(ptr->pos0)); + push_buffer(in1, ptr->ring1, ptr->buflen1, &(ptr->pos1)); + push_buffer(in, ptr->ring2, ptr->buflen2, &(ptr->pos2)); + + fragment_pos1 = (ptr->fragment_pos + ptr->buflen0 / 3) % ptr->buflen0; + fragment_pos2 = (ptr->fragment_pos + 2 * ptr->buflen1 / 3) % ptr->buflen1; + + out_0 = read_buffer(ptr->ring0, ptr->buflen0, ptr->pos0, + ptr->buflen0 - ptr->fragment_pos - 1); + out_1 = read_buffer(ptr->ring1, ptr->buflen1, ptr->pos1, + ptr->buflen1 - fragment_pos1 - 1); + out_2 = read_buffer(ptr->ring2, ptr->buflen2, ptr->pos2, + ptr->buflen2 - fragment_pos2 - 1); + + ptr->fragment_pos += 2; + if (ptr->fragment_pos >= ptr->buflen0) + ptr->fragment_pos = 0; + + arg_0 = (float)ptr->fragment_pos / (float)ptr->buflen0 * COS_TABLE_SIZE; + am_0 = 1.0f - cos_table[arg_0]; + arg_1 = (float)fragment_pos1 / (float)ptr->buflen1 * COS_TABLE_SIZE; + am_1 = 1.0f - cos_table[arg_1]; + arg_2 = (float)fragment_pos2 / (float)ptr->buflen2 * COS_TABLE_SIZE; + am_2 = 1.0f - cos_table[arg_2]; + + *(output++) += ptr->run_adding_gain * + (drylevel * in + wetlevel * (am_0 * out_0 + am_1 * out_1 + am_2 * out_2)); + } +} + + + + +/* Throw away a Reflector effect instance. */ +void +cleanup_Reflector(LADSPA_Handle Instance) { + + Reflector * ptr = (Reflector *)Instance; + free(ptr->ring0); + free(ptr->ring1); + free(ptr->ring2); + free(ptr->delay1); + free(ptr->delay2); + free(Instance); +} + + + +LADSPA_Descriptor * mono_descriptor = NULL; + + + +/* __attribute__((constructor)) _init() is called automatically when the plugin library is first + loaded. */ +void +__attribute__((constructor)) _init() { + + int i; + char ** port_names; + LADSPA_PortDescriptor * port_descriptors; + LADSPA_PortRangeHint * port_range_hints; + + if ((mono_descriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor))) == NULL) + exit(1); + + for (i = 0; i < COS_TABLE_SIZE; i++) + cos_table[i] = cosf(i * 2.0f * M_PI / COS_TABLE_SIZE); + + + mono_descriptor->UniqueID = ID_MONO; + mono_descriptor->Label = strdup("tap_reflector"); + mono_descriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; + mono_descriptor->Name = strdup("TAP Reflector"); + mono_descriptor->Maker = strdup("Tom Szilagyi"); + mono_descriptor->Copyright = strdup("GPL"); + mono_descriptor->PortCount = PORTCOUNT_MONO; + + if ((port_descriptors = + (LADSPA_PortDescriptor *)calloc(PORTCOUNT_MONO, sizeof(LADSPA_PortDescriptor))) == NULL) + exit(1); + + mono_descriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; + port_descriptors[FRAGMENT] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_descriptors[DRYLEVEL] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_descriptors[WETLEVEL] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_descriptors[INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_descriptors[OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + + if ((port_names = + (char **)calloc(PORTCOUNT_MONO, sizeof(char *))) == NULL) + exit(1); + + mono_descriptor->PortNames = (const char **)port_names; + port_names[FRAGMENT] = strdup("Fragment Length [ms]"); + port_names[DRYLEVEL] = strdup("Dry Level [dB]"); + port_names[WETLEVEL] = strdup("Wet Level [dB]"); + port_names[INPUT] = strdup("Input"); + port_names[OUTPUT] = strdup("Output"); + + if ((port_range_hints = + ((LADSPA_PortRangeHint *)calloc(PORTCOUNT_MONO, sizeof(LADSPA_PortRangeHint)))) == NULL) + exit(1); + + mono_descriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; + port_range_hints[FRAGMENT].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_LOW); + port_range_hints[DRYLEVEL].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_MINIMUM); + port_range_hints[WETLEVEL].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_0); + port_range_hints[FRAGMENT].LowerBound = (float)MIN_FRAGMENT_LEN; + port_range_hints[FRAGMENT].UpperBound = (float)MAX_FRAGMENT_LEN; + port_range_hints[DRYLEVEL].LowerBound = -90.0f; + port_range_hints[DRYLEVEL].UpperBound = 20.0f; + port_range_hints[WETLEVEL].LowerBound = -90.0f; + port_range_hints[WETLEVEL].UpperBound = 20.0f; + port_range_hints[INPUT].HintDescriptor = 0; + port_range_hints[OUTPUT].HintDescriptor = 0; + mono_descriptor->instantiate = instantiate_Reflector; + mono_descriptor->connect_port = connect_port_Reflector; + mono_descriptor->activate = activate_Reflector; + mono_descriptor->run = run_Reflector; + mono_descriptor->run_adding = run_adding_Reflector; + mono_descriptor->set_run_adding_gain = set_run_adding_gain_Reflector; + mono_descriptor->deactivate = NULL; + mono_descriptor->cleanup = cleanup_Reflector; +} + + +void +delete_descriptor(LADSPA_Descriptor * descriptor) { + unsigned long index; + if (descriptor) { + free((char *)descriptor->Label); + free((char *)descriptor->Name); + free((char *)descriptor->Maker); + free((char *)descriptor->Copyright); + free((LADSPA_PortDescriptor *)descriptor->PortDescriptors); + for (index = 0; index < descriptor->PortCount; index++) + free((char *)(descriptor->PortNames[index])); + free((char **)descriptor->PortNames); + free((LADSPA_PortRangeHint *)descriptor->PortRangeHints); + free(descriptor); + } +} + + +/* __attribute__((destructor)) _fini() is called automatically when the library is unloaded. */ +void +__attribute__((destructor)) _fini() { + delete_descriptor(mono_descriptor); +} + + +/* Return a descriptor of the requested plugin type. */ +const LADSPA_Descriptor * +ladspa_descriptor(unsigned long Index) { + + switch (Index) { + case 0: + return mono_descriptor; + default: + return NULL; + } +} diff --git a/plugins/LadspaEffect/tap/tap_reverb.c b/plugins/LadspaEffect/tap/tap_reverb.c new file mode 100644 index 000000000..c42c7ae8c --- /dev/null +++ b/plugins/LadspaEffect/tap/tap_reverb.c @@ -0,0 +1,835 @@ +/* -*- linux-c -*- + Copyright (C) 2004 Tom Szilagyi + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + $Id: tap_reverb.c,v 1.13 2004/06/15 14:50:55 tszilagyi Exp $ +*/ + + +#include +#include +#include +#include + +#include + + +/* ***** VERY IMPORTANT! ***** + * + * If you enable this, the plugin will use float arithmetics in DSP + * calculations. This usually yields lower average CPU usage, but + * occasionaly may result in high CPU peaks which cause trouble to you + * and your JACK server. The default is to use fixpoint arithmetics + * (with the following #define commented out). But (depending on the + * processor on which you run the code) you may find floating point + * mode usable. + */ +/* #define REVERB_CALC_FLOAT */ + + + +#ifndef REVERB_CALC_FLOAT +typedef signed int sample; +#endif + +#ifndef REVERB_CALC_FLOAT +typedef sample rev_t; +#else +typedef LADSPA_Data rev_t; +#endif + + +#include "tap_reverb_presets.h" + + + +#ifdef REVERB_CALC_FLOAT +#define DENORM(x) (((unsigned char)(((*(unsigned int*)&(x))&0x7f800000)>>23))<103)?0.0f:(x) +#else +/* coefficient for float to sample (signed int) conversion */ +/* this allows for about 60 dB headroom above 0dB, if 0 dB is equivalent to 1.0f */ +/* As 2^31 equals more than 180 dB, about 120 dB dynamics remains below 0 dB */ +#define F2S 2147483 +#endif + + +/* load plugin data from reverb_data[] into an instance */ +void +load_plugin_data(LADSPA_Handle Instance) { + + Reverb * ptr = (Reverb *)Instance; + unsigned long m; + unsigned int i; + + + m = LIMIT(*(ptr->mode),0,NUM_MODES-1); + + /* load combs data */ + ptr->num_combs = 2 * reverb_data[m].num_combs; + for (i = 0; i < reverb_data[m].num_combs; i++) { + ((COMB_FILTER *)(ptr->combs + 2*i))->buflen = + reverb_data[m].combs[i].delay * ptr->sample_rate; + ((COMB_FILTER *)(ptr->combs + 2*i))->feedback = + reverb_data[m].combs[i].feedback; + ((COMB_FILTER *)(ptr->combs + 2*i))->freq_resp = + LIMIT(reverb_data[m].combs[i].freq_resp + * powf(ptr->sample_rate / 44100.0f, 0.8f), + 0.0f, 1.0f); + + ((COMB_FILTER *)(ptr->combs + 2*i+1))->buflen = + ((COMB_FILTER *)(ptr->combs + 2*i))->buflen; + ((COMB_FILTER *)(ptr->combs + 2*i+1))->feedback = + ((COMB_FILTER *)(ptr->combs + 2*i))->feedback; + ((COMB_FILTER *)(ptr->combs + 2*i+1))->feedback = + ((COMB_FILTER *)(ptr->combs + 2*i))->freq_resp; + + /* set initial values: */ + *(((COMB_FILTER *)(ptr->combs + 2*i))->buffer_pos) = 0; + *(((COMB_FILTER *)(ptr->combs + 2*i+1))->buffer_pos) = 0; + ((COMB_FILTER *)(ptr->combs + 2*i))->last_out = 0; + ((COMB_FILTER *)(ptr->combs + 2*i+1))->last_out = 0; + + lp_set_params(((COMB_FILTER *)(ptr->combs + 2*i))->filter, + 2000.0f + 13000.0f * (1 - reverb_data[m].combs[i].freq_resp) + * ptr->sample_rate / 44100.0f, + BANDPASS_BWIDTH, ptr->sample_rate); + lp_set_params(((COMB_FILTER *)(ptr->combs + 2*i+1))->filter, + 2000.0f + 13000.0f * (1 - reverb_data[m].combs[i].freq_resp) + * ptr->sample_rate / 44100.0f, + BANDPASS_BWIDTH, ptr->sample_rate); + } + + /* load allps data */ + ptr->num_allps = 2 * reverb_data[m].num_allps; + for (i = 0; i < reverb_data[m].num_allps; i++) { + ((ALLP_FILTER *)(ptr->allps + 2*i))->buflen = + reverb_data[m].allps[i].delay * ptr->sample_rate; + ((ALLP_FILTER *)(ptr->allps + 2*i))->feedback = + reverb_data[m].allps[i].feedback; + + ((ALLP_FILTER *)(ptr->allps + 2*i+1))->buflen = + ((ALLP_FILTER *)(ptr->allps + 2*i))->buflen; + ((ALLP_FILTER *)(ptr->allps + 2*i+1))->feedback = + ((ALLP_FILTER *)(ptr->allps + 2*i))->feedback; + + /* set initial values: */ + *(((ALLP_FILTER *)(ptr->allps + 2*i))->buffer_pos) = 0; + *(((ALLP_FILTER *)(ptr->allps + 2*i+1))->buffer_pos) = 0; + ((ALLP_FILTER *)(ptr->allps + 2*i))->last_out = 0; + ((ALLP_FILTER *)(ptr->allps + 2*i+1))->last_out = 0; + } + + /* init bandpass filters */ + lp_set_params((biquad *)(ptr->low_pass), reverb_data[m].bandpass_high, + BANDPASS_BWIDTH, ptr->sample_rate); + hp_set_params((biquad *)(ptr->high_pass), reverb_data[m].bandpass_low, + BANDPASS_BWIDTH, ptr->sample_rate); + lp_set_params((biquad *)(ptr->low_pass + 1), reverb_data[m].bandpass_high, + BANDPASS_BWIDTH, ptr->sample_rate); + hp_set_params((biquad *)(ptr->high_pass + 1), reverb_data[m].bandpass_low, + BANDPASS_BWIDTH, ptr->sample_rate); +} + + + +/* push a sample into a comb filter and return the sample falling out */ +rev_t +comb_run(rev_t insample, COMB_FILTER * comb) { + + rev_t outsample; + rev_t pushin; + + pushin = comb->fb_gain * insample + biquad_run(comb->filter, comb->fb_gain * comb->last_out); +#ifdef REVERB_CALC_FLOAT + pushin = DENORM(pushin); +#endif + outsample = push_buffer(pushin, + comb->ringbuffer, comb->buflen, comb->buffer_pos); +#ifdef REVERB_CALC_FLOAT + outsample = DENORM(outsample); +#endif + comb->last_out = outsample; + + return outsample; +} + + +/* push a sample into an allpass filter and return the sample falling out */ +rev_t +allp_run(rev_t insample, ALLP_FILTER * allp) { + + rev_t outsample; + rev_t pushin; + pushin = allp->in_gain * allp->fb_gain * insample + allp->fb_gain * allp->last_out; +#ifdef REVERB_CALC_FLOAT + pushin = DENORM(pushin); +#endif + outsample = push_buffer(pushin, + allp->ringbuffer, allp->buflen, allp->buffer_pos); +#ifdef REVERB_CALC_FLOAT + outsample = DENORM(outsample); +#endif + allp->last_out = outsample; + + return outsample; +} + + +/* compute user-input-dependent reverberator coefficients */ +void +comp_coeffs(LADSPA_Handle Instance) { + + Reverb * ptr = (Reverb *)Instance; + unsigned int i; + + + if (*(ptr->mode) != ptr->old_mode) + load_plugin_data(Instance); + + for (i = 0; i < ptr->num_combs / 2; i++) { + ((COMB_FILTER *)(ptr->combs + 2*i))->fb_gain = + powf(0.001f, + 1000.0f * ((COMB_FILTER *)(ptr->combs + 2*i))->buflen + * (1 + FR_R_COMP * ((COMB_FILTER *)(ptr->combs + 2*i))->freq_resp) + / powf(((COMB_FILTER *)(ptr->combs + 2*i))->feedback/100.0f, 0.89f) + / *(ptr->decay) + / ptr->sample_rate); + + ((COMB_FILTER *)(ptr->combs + 2*i+1))->fb_gain = + ((COMB_FILTER *)(ptr->combs + 2*i))->fb_gain; + + if (*(ptr->stereo_enh) > 0.0f) { + if (i % 2 == 0) + ((COMB_FILTER *)(ptr->combs + 2*i+1))->buflen = + ENH_STEREO_RATIO * ((COMB_FILTER *)(ptr->combs + 2*i))->buflen; + else + ((COMB_FILTER *)(ptr->combs + 2*i))->buflen = + ENH_STEREO_RATIO * ((COMB_FILTER *)(ptr->combs + 2*i+1))->buflen; + } else { + if (i % 2 == 0) + ((COMB_FILTER *)(ptr->combs + 2*i+1))->buflen = + ((COMB_FILTER *)(ptr->combs + 2*i))->buflen; + else + ((COMB_FILTER *)(ptr->combs + 2*i))->buflen = + ((COMB_FILTER *)(ptr->combs + 2*i+1))->buflen; + } + } + + for (i = 0; i < ptr->num_allps / 2; i++) { + ((ALLP_FILTER *)(ptr->allps + 2*i))->fb_gain = + powf(0.001f, 11000.0f * ((ALLP_FILTER *)(ptr->allps + 2*i))->buflen + / powf(((ALLP_FILTER *)(ptr->allps + 2*i))->feedback/100.0f, 0.88f) + / *(ptr->decay) + / ptr->sample_rate); + + ((ALLP_FILTER *)(ptr->allps + 2*i+1))->fb_gain = + ((ALLP_FILTER *)(ptr->allps + 2*i))->fb_gain; + + ((ALLP_FILTER *)(ptr->allps + 2*i))->in_gain = -0.06f + / (((ALLP_FILTER *)(ptr->allps + 2 * i))->feedback/100.0f) + / powf((*(ptr->decay) + 3500.0f) / 10000.0f, 1.5f); + + ((ALLP_FILTER *)(ptr->allps + 2*i+1))->in_gain = + ((ALLP_FILTER *)(ptr->allps + 2*i))->in_gain; + + if (*(ptr->stereo_enh) > 0.0f) { + if (i % 2 == 0) + ((ALLP_FILTER *)(ptr->allps + 2*i+1))->buflen = + ENH_STEREO_RATIO * ((ALLP_FILTER *)(ptr->allps + 2*i))->buflen; + else + ((ALLP_FILTER *)(ptr->allps + 2*i))->buflen = + ENH_STEREO_RATIO * ((ALLP_FILTER *)(ptr->allps + 2*i+1))->buflen; + } else { + if (i % 2 == 0) + ((ALLP_FILTER *)(ptr->allps + 2*i+1))->buflen = + ((ALLP_FILTER *)(ptr->allps + 2*i))->buflen; + else + ((ALLP_FILTER *)(ptr->allps + 2*i))->buflen = + ((ALLP_FILTER *)(ptr->allps + 2*i+1))->buflen; + } + } +} + + + +/* Construct a new plugin instance. */ +LADSPA_Handle +instantiate_Reverb(const LADSPA_Descriptor * Descriptor, + unsigned long SampleRate) { + + unsigned long i; + LADSPA_Handle * p; + Reverb * ptr = NULL; + + if ((p = malloc(sizeof(Reverb))) != NULL) { + ((Reverb *)p)->sample_rate = SampleRate; + ((Reverb *)p)->run_adding_gain = 1.0f; + + ptr = (Reverb *)p; + + /* allocate memory for comb/allpass filters and other dynamic vars */ + if ((ptr->combs = + calloc(2 * MAX_COMBS, sizeof(COMB_FILTER))) == NULL) + return NULL; + for (i = 0; i < 2 * MAX_COMBS; i++) { + if ((((COMB_FILTER *)(ptr->combs + i))->ringbuffer = + calloc((unsigned long)MAX_COMB_DELAY * ptr->sample_rate / 1000, + sizeof(LADSPA_Data))) == NULL) + return NULL; + if ((((COMB_FILTER *)(ptr->combs + i))->buffer_pos = + calloc(1, sizeof(unsigned long))) == NULL) + return NULL; + if ((((COMB_FILTER *)(ptr->combs + i))->filter = + calloc(1, sizeof(biquad))) == NULL) + return NULL; + } + + if ((ptr->allps = + calloc(2 * MAX_ALLPS, sizeof(ALLP_FILTER))) == NULL) + return NULL; + for (i = 0; i < 2 * MAX_ALLPS; i++) { + if ((((ALLP_FILTER *)(ptr->allps + i))->ringbuffer = + calloc((unsigned long)MAX_ALLP_DELAY * ptr->sample_rate / 1000, + sizeof(LADSPA_Data))) == NULL) + return NULL; + if ((((ALLP_FILTER *)(ptr->allps + i))->buffer_pos = + calloc(1, sizeof(unsigned long))) == NULL) + return NULL; + } + + if ((ptr->low_pass = + calloc(2, sizeof(biquad))) == NULL) + return NULL; + if ((ptr->high_pass = + calloc(2, sizeof(biquad))) == NULL) + return NULL; + + return p; + } + return NULL; +} + + +/* activate a plugin instance */ +void +activate_Reverb(LADSPA_Handle Instance) { + + Reverb * ptr = (Reverb *)Instance; + unsigned long i,j; + + for (i = 0; i < 2 * MAX_COMBS; i++) { + for (j = 0; j < (unsigned long)MAX_COMB_DELAY * ptr->sample_rate / 1000; j++) + ((COMB_FILTER *)(ptr->combs + i))->ringbuffer[j] = 0.0f; + *(((COMB_FILTER *)(ptr->combs + i))->buffer_pos) = 0; + ((COMB_FILTER *)(ptr->combs + i))->last_out = 0; + biquad_init(((COMB_FILTER *)(ptr->combs + i))->filter); + } + + for (i = 0; i < 2 * MAX_ALLPS; i++) { + for (j = 0; j < (unsigned long)MAX_ALLP_DELAY * ptr->sample_rate / 1000; j++) + ((ALLP_FILTER *)(ptr->allps + i))->ringbuffer[j] = 0.0f; + *(((ALLP_FILTER *)(ptr->allps + i))->buffer_pos) = 0; + ((ALLP_FILTER *)(ptr->allps + i))->last_out = 0; + } + + biquad_init(ptr->low_pass); + biquad_init((biquad *)(ptr->low_pass + 1)); + biquad_init(ptr->high_pass); + biquad_init((biquad *)(ptr->high_pass + 1)); + + ptr->old_decay = -10.0f; + ptr->old_stereo_enh = -10.0f; + ptr->old_mode = -10.0f; +} + + + +/* Connect a port to a data location. */ +void +connect_port_Reverb(LADSPA_Handle Instance, + unsigned long Port, + LADSPA_Data * DataLocation) { + + Reverb * ptr = (Reverb *)Instance; + + switch (Port) { + case DECAY: + ptr->decay = DataLocation; + break; + case DRYLEVEL: + ptr->drylevel = DataLocation; + break; + case WETLEVEL: + ptr->wetlevel = DataLocation; + break; + case COMBS_EN: + ptr->combs_en = DataLocation; + break; + case ALLPS_EN: + ptr->allps_en = DataLocation; + break; + case BANDPASS_EN: + ptr->bandpass_en = DataLocation; + break; + case STEREO_ENH: + ptr->stereo_enh = DataLocation; + break; + case MODE: + ptr->mode = DataLocation; + break; + case INPUT_L: + ptr->input_L = DataLocation; + break; + case OUTPUT_L: + ptr->output_L = DataLocation; + break; + case INPUT_R: + ptr->input_R = DataLocation; + break; + case OUTPUT_R: + ptr->output_R = DataLocation; + break; + } +} + + + +void +run_Reverb(LADSPA_Handle Instance, + unsigned long SampleCount) { + + Reverb * ptr = (Reverb *)Instance; + + unsigned long sample_index; + unsigned int i; + + LADSPA_Data decay = LIMIT(*(ptr->decay),0.0f,10000.0f); + LADSPA_Data drylevel = db2lin(LIMIT(*(ptr->drylevel),-70.0f,10.0f)); + LADSPA_Data wetlevel = db2lin(LIMIT(*(ptr->wetlevel),-70.0f,10.0f)); + LADSPA_Data combs_en = LIMIT(*(ptr->combs_en),-2.0f,2.0f); + LADSPA_Data allps_en = LIMIT(*(ptr->allps_en),-2.0f,2.0f); + LADSPA_Data bandpass_en = LIMIT(*(ptr->bandpass_en),-2.0f,2.0f); + LADSPA_Data stereo_enh = LIMIT(*(ptr->stereo_enh),-2.0f,2.0f); + LADSPA_Data mode = LIMIT(*(ptr->mode),0,NUM_MODES-1); + + LADSPA_Data * input_L = ptr->input_L; + LADSPA_Data * output_L = ptr->output_L; + LADSPA_Data * input_R = ptr->input_R; + LADSPA_Data * output_R = ptr->output_R; + + rev_t out_L = 0; + rev_t out_R = 0; + rev_t in_L = 0; + rev_t in_R = 0; + rev_t combs_out_L = 0; + rev_t combs_out_R = 0; + + + /* see if the user changed any control since last run */ + if ((ptr->old_decay != decay) || + (ptr->old_stereo_enh != stereo_enh) || + (ptr->old_mode != mode)) { + + /* re-compute reverberator coefficients */ + comp_coeffs(Instance); + + /* save new values */ + ptr->old_decay = decay; + ptr->old_stereo_enh = stereo_enh; + ptr->old_mode = mode; + } + + for (sample_index = 0; sample_index < SampleCount; sample_index++) { + +#ifdef REVERB_CALC_FLOAT + in_L = *(input_L++); + in_R = *(input_R++); +#else + in_L = (sample)((float)F2S * *(input_L++)); + in_R = (sample)((float)F2S * *(input_R++)); +#endif + + combs_out_L = in_L; + combs_out_R = in_R; + + /* process comb filters */ + if (combs_en > 0.0f) { + for (i = 0; i < ptr->num_combs / 2; i++) { + combs_out_L += + comb_run(in_L, ((COMB_FILTER *)(ptr->combs + 2*i))); + combs_out_R += + comb_run(in_R, ((COMB_FILTER *)(ptr->combs + 2*i+1))); + } + } + + /* process allpass filters */ + if (allps_en > 0.0f) { + for (i = 0; i < ptr->num_allps / 2; i++) { + combs_out_L += allp_run(combs_out_L, + ((ALLP_FILTER *)(ptr->allps + 2*i))); + combs_out_R += allp_run(combs_out_R, + ((ALLP_FILTER *)(ptr->allps + 2*i+1))); + } + } + + /* process bandpass filters */ + if (bandpass_en > 0.0f) { + combs_out_L = + biquad_run(((biquad *)(ptr->low_pass)), combs_out_L); + combs_out_L = + biquad_run(((biquad *)(ptr->high_pass)), combs_out_L); + combs_out_R = + biquad_run(((biquad *)(ptr->low_pass + 1)), combs_out_R); + combs_out_R = + biquad_run(((biquad *)(ptr->high_pass + 1)), combs_out_R); + } + +#ifdef REVERB_CALC_FLOAT + out_L = in_L * drylevel + combs_out_L * wetlevel; + out_R = in_R * drylevel + combs_out_R * wetlevel; + *(output_L++) = out_L; + *(output_R++) = out_R; +#else + out_L = (sample)((float)in_L * drylevel + (float)combs_out_L * wetlevel); + out_R = (sample)((float)in_R * drylevel + (float)combs_out_R * wetlevel); + *(output_L++) = (float)out_L / (float)F2S; + *(output_R++) = (float)out_R / (float)F2S; +#endif + } +} + + + + + +void +set_run_adding_gain(LADSPA_Handle Instance, LADSPA_Data gain){ + + Reverb * ptr; + + ptr = (Reverb *)Instance; + + ptr->run_adding_gain = gain; +} + + +void +run_adding_gain_Reverb(LADSPA_Handle Instance, + unsigned long SampleCount) { + + Reverb * ptr = (Reverb *)Instance; + + unsigned long sample_index; + unsigned int i; + + LADSPA_Data decay = LIMIT(*(ptr->decay),0.0f,10000.0f); + LADSPA_Data drylevel = db2lin(LIMIT(*(ptr->drylevel),-70.0f,10.0f)); + LADSPA_Data wetlevel = db2lin(LIMIT(*(ptr->wetlevel),-70.0f,10.0f)); + LADSPA_Data combs_en = LIMIT(*(ptr->combs_en),-2.0f,2.0f); + LADSPA_Data allps_en = LIMIT(*(ptr->allps_en),-2.0f,2.0f); + LADSPA_Data bandpass_en = LIMIT(*(ptr->bandpass_en),-2.0f,2.0f); + LADSPA_Data stereo_enh = LIMIT(*(ptr->stereo_enh),-2.0f,2.0f); + LADSPA_Data mode = LIMIT(*(ptr->mode),0,NUM_MODES-1); + + LADSPA_Data * input_L = ptr->input_L; + LADSPA_Data * output_L = ptr->output_L; + LADSPA_Data * input_R = ptr->input_R; + LADSPA_Data * output_R = ptr->output_R; + + rev_t out_L = 0; + rev_t out_R = 0; + rev_t in_L = 0; + rev_t in_R = 0; + rev_t combs_out_L = 0; + rev_t combs_out_R = 0; + + + /* see if the user changed any control since last run */ + if ((ptr->old_decay != decay) || + (ptr->old_stereo_enh != stereo_enh) || + (ptr->old_mode != mode)) { + + /* re-compute reverberator coefficients */ + comp_coeffs(Instance); + + /* save new values */ + ptr->old_decay = decay; + ptr->old_stereo_enh = stereo_enh; + ptr->old_mode = mode; + } + + for (sample_index = 0; sample_index < SampleCount; sample_index++) { + +#ifdef REVERB_CALC_FLOAT + in_L = *(input_L++); + in_R = *(input_R++); +#else + in_L = (sample)((float)F2S * *(input_L++)); + in_R = (sample)((float)F2S * *(input_R++)); +#endif + + combs_out_L = in_L; + combs_out_R = in_R; + + /* process comb filters */ + if (combs_en > 0.0f) { + for (i = 0; i < ptr->num_combs / 2; i++) { + combs_out_L += + comb_run(in_L, ((COMB_FILTER *)(ptr->combs + 2*i))); + combs_out_R += + comb_run(in_R, ((COMB_FILTER *)(ptr->combs + 2*i+1))); + } + } + + /* process allpass filters */ + if (allps_en > 0.0f) { + for (i = 0; i < ptr->num_allps / 2; i++) { + combs_out_L += allp_run(combs_out_L, + ((ALLP_FILTER *)(ptr->allps + 2*i))); + combs_out_R += allp_run(combs_out_R, + ((ALLP_FILTER *)(ptr->allps + 2*i+1))); + } + } + + /* process bandpass filters */ + if (bandpass_en > 0.0f) { + combs_out_L = + biquad_run(((biquad *)(ptr->low_pass)), combs_out_L); + combs_out_L = + biquad_run(((biquad *)(ptr->high_pass)), combs_out_L); + combs_out_R = + biquad_run(((biquad *)(ptr->low_pass + 1)), combs_out_R); + combs_out_R = + biquad_run(((biquad *)(ptr->high_pass + 1)), combs_out_R); + } + +#ifdef REVERB_CALC_FLOAT + out_L = in_L * drylevel + combs_out_L * wetlevel; + out_R = in_R * drylevel + combs_out_R * wetlevel; + *(output_L++) += out_L * ptr->run_adding_gain; + *(output_R++) += out_R * ptr->run_adding_gain; +#else + out_L = (sample)((float)in_L * drylevel + (float)combs_out_L * wetlevel); + out_R = (sample)((float)in_R * drylevel + (float)combs_out_R * wetlevel); + *(output_L++) += (float)out_L * ptr->run_adding_gain / (float)F2S; + *(output_R++) += (float)out_R * ptr->run_adding_gain / (float)F2S; +#endif + } +} + + + +/* Throw away a Reverb effect instance. */ +void +cleanup_Reverb(LADSPA_Handle Instance) { + + int i; + Reverb * ptr = (Reverb *)Instance; + + /* free memory allocated for comb/allpass filters & co. in instantiate_Reverb() */ + for (i = 0; i < 2 * MAX_COMBS; i++) { + free(((COMB_FILTER *)(ptr->combs + i))->ringbuffer); + free(((COMB_FILTER *)(ptr->combs + i))->buffer_pos); + free(((COMB_FILTER *)(ptr->combs + i))->filter); + } + for (i = 0; i < 2 * MAX_ALLPS; i++) { + free(((ALLP_FILTER *)(ptr->allps + i))->ringbuffer); + free(((ALLP_FILTER *)(ptr->allps + i))->buffer_pos); + } + + free(ptr->combs); + free(ptr->allps); + free(ptr->low_pass); + free(ptr->high_pass); + + free(Instance); + +} + + + +LADSPA_Descriptor * stereo_descriptor = NULL; + + + +/* __attribute__((constructor)) _init() is called automatically when the plugin library is first + loaded. */ +void +__attribute__((constructor)) _init() { + + char ** port_names; + LADSPA_PortDescriptor * port_descriptors; + LADSPA_PortRangeHint * port_range_hints; + + + if ((stereo_descriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor))) == NULL) + exit(1); + + + /* init the stereo Reverb */ + + stereo_descriptor->UniqueID = ID_STEREO; + stereo_descriptor->Label = strdup("tap_reverb"); + stereo_descriptor->Properties = 0; + stereo_descriptor->Name = strdup("TAP Reverberator"); + stereo_descriptor->Maker = strdup("Tom Szilagyi"); + stereo_descriptor->Copyright = strdup("GPL"); + stereo_descriptor->PortCount = PORTCOUNT_STEREO; + + if ((port_descriptors = + (LADSPA_PortDescriptor *)calloc(PORTCOUNT_STEREO, sizeof(LADSPA_PortDescriptor))) == NULL) + exit(1); + + stereo_descriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; + port_descriptors[DECAY] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_descriptors[DRYLEVEL] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_descriptors[WETLEVEL] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_descriptors[COMBS_EN] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_descriptors[ALLPS_EN] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_descriptors[BANDPASS_EN] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_descriptors[STEREO_ENH] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_descriptors[MODE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + + port_descriptors[INPUT_L] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_descriptors[OUTPUT_L] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_descriptors[INPUT_R] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_descriptors[OUTPUT_R] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + + if ((port_names = + (char **)calloc(PORTCOUNT_STEREO, sizeof(char *))) == NULL) + exit(1); + + stereo_descriptor->PortNames = (const char **)port_names; + + port_names[DECAY] = strdup("Decay [ms]"); + port_names[DRYLEVEL] = strdup("Dry Level [dB]"); + port_names[WETLEVEL] = strdup("Wet Level [dB]"); + port_names[COMBS_EN] = strdup("Comb Filters"); + port_names[ALLPS_EN] = strdup("Allpass Filters"); + port_names[BANDPASS_EN] = strdup("Bandpass Filter"); + port_names[STEREO_ENH] = strdup("Enhanced Stereo"); + port_names[MODE] = strdup("Reverb Type"); + port_names[INPUT_L] = strdup("Input Left"); + port_names[OUTPUT_L] = strdup("Output Left"); + port_names[INPUT_R] = strdup("Input Right"); + port_names[OUTPUT_R] = strdup("Output Right"); + + if ((port_range_hints = + ((LADSPA_PortRangeHint *)calloc(PORTCOUNT_STEREO, sizeof(LADSPA_PortRangeHint)))) == NULL) + exit(1); + + stereo_descriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; + + port_range_hints[DECAY].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_LOW); + port_range_hints[DECAY].LowerBound = 0; + port_range_hints[DECAY].UpperBound = MAX_DECAY; + + port_range_hints[DRYLEVEL].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_0); + port_range_hints[DRYLEVEL].LowerBound = -70.0f; + port_range_hints[DRYLEVEL].UpperBound = +10.0f; + + port_range_hints[WETLEVEL].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_0); + port_range_hints[WETLEVEL].LowerBound = -70.0f; + port_range_hints[WETLEVEL].UpperBound = +10.0f; + + port_range_hints[COMBS_EN].HintDescriptor = + (LADSPA_HINT_TOGGLED | + LADSPA_HINT_DEFAULT_1); + + port_range_hints[ALLPS_EN].HintDescriptor = + (LADSPA_HINT_TOGGLED | + LADSPA_HINT_DEFAULT_1); + + port_range_hints[BANDPASS_EN].HintDescriptor = + (LADSPA_HINT_TOGGLED | + LADSPA_HINT_DEFAULT_1); + + port_range_hints[STEREO_ENH].HintDescriptor = + (LADSPA_HINT_TOGGLED | + LADSPA_HINT_DEFAULT_1); + + port_range_hints[MODE].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_INTEGER | + LADSPA_HINT_DEFAULT_0); + port_range_hints[MODE].LowerBound = 0; + port_range_hints[MODE].UpperBound = NUM_MODES - 0.9f; + + port_range_hints[INPUT_L].HintDescriptor = 0; + port_range_hints[OUTPUT_L].HintDescriptor = 0; + port_range_hints[INPUT_R].HintDescriptor = 0; + port_range_hints[OUTPUT_R].HintDescriptor = 0; + + + stereo_descriptor->instantiate = instantiate_Reverb; + stereo_descriptor->connect_port = connect_port_Reverb; + stereo_descriptor->activate = activate_Reverb; + stereo_descriptor->run = run_Reverb; + stereo_descriptor->run_adding = run_adding_gain_Reverb; + stereo_descriptor->set_run_adding_gain = set_run_adding_gain; + stereo_descriptor->deactivate = NULL; + stereo_descriptor->cleanup = cleanup_Reverb; + +} + + +void +delete_descriptor(LADSPA_Descriptor * descriptor) { + unsigned long index; + if (descriptor) { + free((char *)descriptor->Label); + free((char *)descriptor->Name); + free((char *)descriptor->Maker); + free((char *)descriptor->Copyright); + free((LADSPA_PortDescriptor *)descriptor->PortDescriptors); + for (index = 0; index < descriptor->PortCount; index++) + free((char *)(descriptor->PortNames[index])); + free((char **)descriptor->PortNames); + free((LADSPA_PortRangeHint *)descriptor->PortRangeHints); + free(descriptor); + } +} + + +/* __attribute__((destructor)) _fini() is called automatically when the library is unloaded. */ +void +__attribute__((destructor)) _fini() { + delete_descriptor(stereo_descriptor); +} + + +/* Return a descriptor of the requested plugin type. */ +const LADSPA_Descriptor * +ladspa_descriptor(unsigned long Index) { + + switch (Index) { + case 0: + return stereo_descriptor; + default: + return NULL; + } +} diff --git a/plugins/LadspaEffect/tap/tap_reverb.h b/plugins/LadspaEffect/tap/tap_reverb.h new file mode 100644 index 000000000..b685a1792 --- /dev/null +++ b/plugins/LadspaEffect/tap/tap_reverb.h @@ -0,0 +1,295 @@ +/* -*- linux-c -*- + Copyright (C) 2004 Tom Szilagyi + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + $Id: tap_reverb.h,v 1.10 2004/06/14 16:43:55 tszilagyi Exp $ +*/ +#ifndef _ISOC99_SOURCE +#define _ISOC99_SOURCE +#endif + +#include + + + +/* The Unique ID of the plugin: */ + +#define ID_STEREO 2142 + +/* The port numbers for the plugin: */ + +#define DECAY 0 +#define DRYLEVEL 1 +#define WETLEVEL 2 +#define COMBS_EN 3 /* comb filters on/off */ +#define ALLPS_EN 4 /* allpass filters on/off */ +#define BANDPASS_EN 5 /* bandpass filters on/off */ +#define STEREO_ENH 6 /* stereo enhanced mode on/off */ +#define MODE 7 + +#define INPUT_L 8 +#define OUTPUT_L 9 +#define INPUT_R 10 +#define OUTPUT_R 11 + +/* Total number of ports */ + +#define PORTCOUNT_STEREO 12 + +/* Global constants (times in ms, bwidth in octaves) */ + +#define MAX_COMBS 20 +#define MAX_ALLPS 20 +#define MAX_DECAY 10000.0f +#define MAX_COMB_DELAY 250.0f +#define MAX_ALLP_DELAY 20.0f +#define BANDPASS_BWIDTH 1.5f +#define FREQ_RESP_BWIDTH 3.0f +#define ENH_STEREO_RATIO 0.998f + +/* compensation ratio of freq_resp in fb_gain calc */ +#define FR_R_COMP 0.75f + + +#ifndef M_PI +#define M_PI 3.14159265358979323846264338327 +#endif + + +/* push a sample into a ringbuffer and return the sample falling out */ +static inline +rev_t +push_buffer(rev_t insample, rev_t * buffer, + unsigned long buflen, unsigned long * pos) { + + rev_t outsample; + + outsample = buffer[*pos]; + buffer[(*pos)++] = insample; + + if (*pos >= buflen) + *pos = 0; + + return outsample; +} + +/* read a value from a ringbuffer. + * n == 0 returns the oldest sample from the buffer. + * n == buflen-1 returns the sample written to the buffer + * at the last push_buffer call. + * n must not exceed buflen-1, or your computer will explode. + */ +static inline +rev_t +read_buffer(rev_t * buffer, unsigned long buflen, + unsigned long pos, unsigned long n) { + + while (n + pos >= buflen) + n -= buflen; + return buffer[n + pos]; +} + + +/* overwrites a value in a ringbuffer, but pos stays the same. + * n == 0 overwrites the oldest sample pushed in the buffer. + * n == buflen-1 overwrites the sample written to the buffer + * at the last push_buffer call. + * n must not exceed buflen-1, or your computer... you know. + */ +static inline +void +write_buffer(rev_t insample, rev_t * buffer, unsigned long buflen, + unsigned long pos, unsigned long n) { + + while (n + pos >= buflen) + n -= buflen; + buffer[n + pos] = insample; +} + +#define db2lin(x) ((x) > -90.0f ? powf(10.0f, (x) * 0.05f) : 0.0f) +#define ABS(x) (x)>0.0f?(x):-1.0f*(x) +#define LN_2_2 0.34657359f +#define LIMIT(v,l,u) ((v)<(l)?(l):((v)>(u)?(u):(v))) + +#define BIQUAD_TYPE float +typedef BIQUAD_TYPE bq_t; + +typedef struct { + bq_t a1; + bq_t a2; + bq_t b0; + bq_t b1; + bq_t b2; + rev_t x1; + rev_t x2; + rev_t y1; + rev_t y2; +} biquad; + + +static inline void biquad_init(biquad *f) { + + f->x1 = 0.0f; + f->x2 = 0.0f; + f->y1 = 0.0f; + f->y2 = 0.0f; +} + +static inline +void +eq_set_params(biquad *f, bq_t fc, bq_t gain, bq_t bw, bq_t fs) { + + bq_t w = 2.0f * M_PI * LIMIT(fc, 1.0f, fs/2.0f) / fs; + bq_t cw = cosf(w); + bq_t sw = sinf(w); + bq_t J = pow(10.0f, gain * 0.025f); + bq_t g = sw * sinhf(LN_2_2 * LIMIT(bw, 0.0001f, 4.0f) * w / sw); + bq_t a0r = 1.0f / (1.0f + (g / J)); + + f->b0 = (1.0f + (g * J)) * a0r; + f->b1 = (-2.0f * cw) * a0r; + f->b2 = (1.0f - (g * J)) * a0r; + f->a1 = -(f->b1); + f->a2 = ((g / J) - 1.0f) * a0r; +} + +static inline void lp_set_params(biquad *f, bq_t fc, bq_t bw, bq_t fs) { + bq_t omega = 2.0 * M_PI * fc/fs; + bq_t sn = sin(omega); + bq_t cs = cos(omega); + bq_t alpha = sn * sinh(M_LN2 / 2.0 * bw * omega / sn); + const float a0r = 1.0 / (1.0 + alpha); + f->b0 = a0r * (1.0 - cs) * 0.5; + f->b1 = a0r * (1.0 - cs); + f->b2 = a0r * (1.0 - cs) * 0.5; + f->a1 = a0r * (2.0 * cs); + f->a2 = a0r * (alpha - 1.0); +} + +static inline +void +hp_set_params(biquad *f, bq_t fc, bq_t bw, bq_t fs) +{ + bq_t omega = 2.0 * M_PI * fc/fs; + bq_t sn = sin(omega); + bq_t cs = cos(omega); + bq_t alpha = sn * sinh(M_LN2 / 2.0 * bw * omega / sn); + const float a0r = 1.0 / (1.0 + alpha); + f->b0 = a0r * (1.0 + cs) * 0.5; + f->b1 = a0r * -(1.0 + cs); + f->b2 = a0r * (1.0 + cs) * 0.5; + f->a1 = a0r * (2.0 * cs); + f->a2 = a0r * (alpha - 1.0); +} + +static inline +rev_t +biquad_run(biquad *f, rev_t x) { + + union { + rev_t y; + uint32_t y_int; + } u; + + u.y = f->b0 * x + f->b1 * f->x1 + f->b2 * f->x2 + + f->a1 * f->y1 + f->a2 * f->y2; +#ifdef REVERB_CALC_FLOAT + if ((u.y_int & 0x7f800000) == 0) + u.y = 0.0f; +#endif + f->x2 = f->x1; + f->x1 = x; + f->y2 = f->y1; + f->y1 = u.y; + + return u.y; +} + + + +typedef struct { + float feedback; + float fb_gain; + float freq_resp; + rev_t * ringbuffer; + unsigned long buflen; + unsigned long * buffer_pos; + biquad * filter; + rev_t last_out; +} COMB_FILTER; + +typedef struct { + float feedback; + float fb_gain; + float in_gain; + rev_t * ringbuffer; + unsigned long buflen; + unsigned long * buffer_pos; + rev_t last_out; +} ALLP_FILTER; + + +/* The structure used to hold port connection information and state */ + +typedef struct { + unsigned long num_combs; /* total number of comb filters */ + unsigned long num_allps; /* total number of allpass filters */ + COMB_FILTER * combs; + ALLP_FILTER * allps; + biquad * low_pass; /* ptr to 2 low-pass filters */ + biquad * high_pass; /* ptr to 2 high-pass filters */ + unsigned long sample_rate; + + LADSPA_Data * decay; + LADSPA_Data * drylevel; + LADSPA_Data * wetlevel; + LADSPA_Data * combs_en; /* on/off */ + LADSPA_Data * allps_en; /* on/off */ + LADSPA_Data * bandpass_en; /* on/off */ + LADSPA_Data * stereo_enh; /* on/off */ + LADSPA_Data * mode; + + LADSPA_Data * input_L; + LADSPA_Data * output_L; + LADSPA_Data * input_R; + LADSPA_Data * output_R; + + LADSPA_Data old_decay; + LADSPA_Data old_stereo_enh; + LADSPA_Data old_mode; + + LADSPA_Data run_adding_gain; +} Reverb; + +typedef struct { + LADSPA_Data delay; + LADSPA_Data feedback; + LADSPA_Data freq_resp; +} COMB_DATA; + +typedef struct { + LADSPA_Data delay; + LADSPA_Data feedback; +} ALLP_DATA; + +typedef struct { + unsigned long num_combs; + unsigned long num_allps; + COMB_DATA combs[MAX_COMBS]; + ALLP_DATA allps[MAX_ALLPS]; + LADSPA_Data bandpass_low; + LADSPA_Data bandpass_high; +} REVERB_DATA; diff --git a/plugins/LadspaEffect/tap/tap_reverb_presets.h b/plugins/LadspaEffect/tap/tap_reverb_presets.h new file mode 100644 index 000000000..c62a85d05 --- /dev/null +++ b/plugins/LadspaEffect/tap/tap_reverb_presets.h @@ -0,0 +1,914 @@ +/* + Copyright (C) 2004 Tom Szilagyi + + This file is the output of TAP Reverb Editor, and is part of TAP Reverberator. + Please use TAP Reverb Editor to re-generate this file, rather than editing by hand. + Visit http://tap-plugins.sf.net for more info. + + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#include "tap_reverb.h" + + +/* Number of reverb presets */ +#define NUM_MODES 43 + + +/* Reverb Type data */ +REVERB_DATA reverb_data[NUM_MODES] = { + { + 5, + 5, + { + {0.1015f, 70.22f, 0.4845f}, + {0.1042f, 80.76f, 0.4000f}, + {0.1108f, 65.25f, 0.4000f}, + {0.1309f, 80.00f, 0.5342f}, + {0.1386f, 52.84f, 0.4000f}, + }, + { + {0.0067f, 65.00f}, + {0.0061f, 65.00f}, + {0.0059f, 65.00f}, + {0.0055f, 65.00f}, + {0.0101f, 80.00f}, + }, + 400.0f, + 10000.0f, + }, + { + 5, + 5, + { + {0.1077f, 70.22f, 0.4845f}, + {0.1124f, 80.76f, 0.4000f}, + {0.1185f, 65.25f, 0.4000f}, + {0.1866f, 80.00f, 0.5342f}, + {0.1943f, 52.84f, 0.4000f}, + }, + { + {0.0067f, 65.00f}, + {0.0061f, 65.00f}, + {0.0059f, 65.00f}, + {0.0055f, 65.00f}, + {0.0101f, 80.00f}, + }, + 400.0f, + 10000.0f, + }, + { + 6, + 4, + { + {0.0251f, 64.80f, 0.2026f}, + {0.0306f, 70.48f, 0.2731f}, + {0.0350f, 67.40f, 0.5727f}, + {0.0405f, 72.69f, 0.3128f}, + {0.0449f, 61.23f, 0.7225f}, + {0.0515f, 67.84f, 0.6167f}, + }, + { + {0.0056f, 75.00f}, + {0.0051f, 90.00f}, + {0.0048f, 85.00f}, + {0.0044f, 70.00f}, + }, + 80.0f, + 15000.0f, + }, + { + 6, + 8, + { + {0.0251f, 64.80f, 0.2026f}, + {0.0306f, 70.48f, 0.2731f}, + {0.0350f, 67.40f, 0.5727f}, + {0.0405f, 72.69f, 0.3128f}, + {0.0449f, 61.23f, 0.7225f}, + {0.0515f, 67.84f, 0.6167f}, + }, + { + {0.0056f, 75.00f}, + {0.0051f, 90.00f}, + {0.0048f, 85.00f}, + {0.0044f, 70.00f}, + {0.0014f, 45.51f}, + {0.0015f, 77.95f}, + {0.0017f, 65.47f}, + {0.0019f, 57.57f}, + }, + 80.0f, + 15000.0f, + }, + { + 8, + 11, + { + {0.0251f, 64.80f, 0.2026f}, + {0.0306f, 70.48f, 0.2731f}, + {0.0350f, 67.40f, 0.5727f}, + {0.0405f, 72.69f, 0.3128f}, + {0.0449f, 61.23f, 0.7225f}, + {0.0515f, 67.84f, 0.6167f}, + {0.0800f, 53.77f, 0.7048f}, + {0.0899f, 45.48f, 0.6960f}, + }, + { + {0.0056f, 75.00f}, + {0.0051f, 90.00f}, + {0.0048f, 85.00f}, + {0.0044f, 70.00f}, + {0.0014f, 45.51f}, + {0.0015f, 77.95f}, + {0.0017f, 65.47f}, + {0.0019f, 57.57f}, + {0.0071f, 60.00f}, + {0.0111f, 80.00f}, + {0.0126f, 70.00f}, + }, + 80.0f, + 15000.0f, + }, + { + 8, + 4, + { + {0.2236f, 62.93f, 0.3416f}, + {0.2329f, 75.14f, 0.3602f}, + {0.2390f, 70.34f, 0.2687f}, + {0.2438f, 82.99f, 0.5093f}, + {0.2499f, 89.97f, 0.2467f}, + {0.2282f, 60.75f, 0.3416f}, + {0.1392f, 55.00f, 0.3744f}, + {0.1348f, 75.00f, 0.2467f}, + }, + { + {0.0167f, 75.00f}, + {0.0163f, 65.00f}, + {0.0158f, 85.00f}, + {0.0155f, 80.00f}, + }, + 100.0f, + 6500.0f, + }, + { + 10, + 7, + { + {0.2236f, 62.93f, 0.3416f}, + {0.2329f, 75.14f, 0.3602f}, + {0.2390f, 70.34f, 0.2687f}, + {0.2438f, 82.99f, 0.5093f}, + {0.2499f, 89.97f, 0.2467f}, + {0.2282f, 60.75f, 0.3416f}, + {0.2352f, 52.90f, 0.3106f}, + {0.1392f, 55.00f, 0.3744f}, + {0.1469f, 68.00f, 0.5771f}, + {0.1348f, 75.00f, 0.2467f}, + }, + { + {0.0167f, 75.00f}, + {0.0163f, 65.00f}, + {0.0158f, 85.00f}, + {0.0155f, 80.00f}, + {0.0064f, 85.00f}, + {0.0068f, 75.00f}, + {0.0072f, 65.00f}, + }, + 100.0f, + 6500.0f, + }, + { + 5, + 7, + { + {0.0520f, 70.22f, 0.4720f}, + {0.0598f, 80.76f, 0.4000f}, + {0.0644f, 65.25f, 0.4000f}, + {0.0737f, 80.00f, 0.6957f}, + {0.0845f, 52.84f, 0.7205f}, + }, + { + {0.0049f, 67.11f}, + {0.0069f, 59.05f}, + {0.0073f, 87.59f}, + {0.0079f, 59.67f}, + {0.0085f, 65.87f}, + {0.0095f, 75.18f}, + {0.0100f, 71.46f}, + }, + 400.0f, + 10000.0f, + }, + { + 5, + 4, + { + {0.0280f, 82.20f, 0.4720f}, + {0.0303f, 80.20f, 0.5652f}, + {0.0325f, 77.30f, 0.6211f}, + {0.0389f, 75.30f, 0.5217f}, + {0.0415f, 59.67f, 0.6522f}, + }, + { + {0.0067f, 65.00f}, + {0.0061f, 65.00f}, + {0.0059f, 65.00f}, + {0.0055f, 65.00f}, + }, + 100.0f, + 10000.0f, + }, + { + 5, + 5, + { + {0.0280f, 82.20f, 0.4720f}, + {0.0303f, 80.20f, 0.5652f}, + {0.0325f, 77.30f, 0.6211f}, + {0.0389f, 75.30f, 0.5217f}, + {0.0415f, 59.67f, 0.6522f}, + }, + { + {0.0067f, 75.00f}, + {0.0061f, 65.00f}, + {0.0059f, 65.00f}, + {0.0055f, 65.00f}, + {0.0071f, 75.00f}, + }, + 200.0f, + 15000.0f, + }, + { + 6, + 5, + { + {0.1015f, 70.22f, 0.4845f}, + {0.1042f, 80.76f, 0.4000f}, + {0.1108f, 65.25f, 0.4000f}, + {0.1309f, 80.00f, 0.5342f}, + {0.1386f, 52.84f, 0.4000f}, + {0.0520f, 72.08f, 0.4000f}, + }, + { + {0.0067f, 65.00f}, + {0.0061f, 65.00f}, + {0.0059f, 65.00f}, + {0.0055f, 65.00f}, + {0.0101f, 80.00f}, + }, + 400.0f, + 10000.0f, + }, + { + 7, + 4, + { + {0.0536f, 82.20f, 0.3416f}, + {0.0629f, 52.84f, 0.3602f}, + {0.0690f, 77.30f, 0.3168f}, + {0.0738f, 75.30f, 0.5093f}, + {0.0799f, 59.67f, 0.3106f}, + {0.1634f, 80.00f, 0.5652f}, + {0.1680f, 80.00f, 0.5714f}, + }, + { + {0.0058f, 65.00f}, + {0.0055f, 65.00f}, + {0.0063f, 71.46f}, + {0.0069f, 80.00f}, + }, + 600.0f, + 18000.0f, + }, + { + 7, + 7, + { + {0.0536f, 82.20f, 0.3416f}, + {0.0629f, 52.84f, 0.3602f}, + {0.0690f, 77.30f, 0.3168f}, + {0.0738f, 75.30f, 0.5093f}, + {0.0799f, 59.67f, 0.3106f}, + {0.1634f, 80.00f, 0.5652f}, + {0.1680f, 80.00f, 0.5714f}, + }, + { + {0.0058f, 65.00f}, + {0.0055f, 65.00f}, + {0.0063f, 71.46f}, + {0.0069f, 80.00f}, + {0.0121f, 80.00f}, + {0.0127f, 66.49f}, + {0.0137f, 88.21f}, + }, + 600.0f, + 18000.0f, + }, + { + 5, + 4, + { + {0.0536f, 82.20f, 0.4783f}, + {0.0629f, 52.84f, 0.4348f}, + {0.0690f, 77.30f, 0.5000f}, + {0.0738f, 75.30f, 0.4500f}, + {0.0799f, 59.67f, 0.4500f}, + }, + { + {0.0067f, 65.00f}, + {0.0063f, 65.00f}, + {0.0058f, 65.00f}, + {0.0055f, 65.00f}, + }, + 100.0f, + 8000.0f, + }, + { + 5, + 4, + { + {0.0536f, 82.20f, 0.4000f}, + {0.0629f, 52.84f, 0.4348f}, + {0.0690f, 77.30f, 0.5000f}, + {0.0738f, 75.30f, 0.4500f}, + {0.0799f, 59.67f, 0.4500f}, + }, + { + {0.0067f, 65.00f}, + {0.0063f, 65.00f}, + {0.0058f, 65.00f}, + {0.0055f, 65.00f}, + }, + 100.0f, + 8000.0f, + }, + { + 5, + 4, + { + {0.0586f, 82.20f, 0.4000f}, + {0.0679f, 52.84f, 0.4348f}, + {0.0740f, 77.30f, 0.5000f}, + {0.0788f, 75.30f, 0.4500f}, + {0.0849f, 59.67f, 0.4500f}, + }, + { + {0.0067f, 65.00f}, + {0.0063f, 65.00f}, + {0.0058f, 65.00f}, + {0.0055f, 65.00f}, + }, + 100.0f, + 8000.0f, + }, + { + 5, + 7, + { + {0.0586f, 82.20f, 0.4000f}, + {0.0679f, 52.84f, 0.4348f}, + {0.0740f, 77.30f, 0.5000f}, + {0.0788f, 75.30f, 0.4500f}, + {0.0849f, 59.67f, 0.4500f}, + }, + { + {0.0067f, 65.00f}, + {0.0063f, 65.00f}, + {0.0058f, 65.00f}, + {0.0055f, 65.00f}, + {0.0141f, 80.00f}, + {0.0133f, 57.19f}, + {0.0151f, 65.25f}, + }, + 100.0f, + 8000.0f, + }, + { + 5, + 4, + { + {0.0506f, 82.20f, 0.3416f}, + {0.0599f, 52.84f, 0.3602f}, + {0.0660f, 77.30f, 0.3168f}, + {0.0708f, 75.30f, 0.5093f}, + {0.0769f, 59.67f, 0.3106f}, + }, + { + {0.0067f, 65.00f}, + {0.0063f, 65.00f}, + {0.0058f, 65.00f}, + {0.0055f, 65.00f}, + }, + 100.0f, + 8000.0f, + }, + { + 5, + 4, + { + {0.0536f, 82.20f, 0.3416f}, + {0.0629f, 52.84f, 0.3602f}, + {0.0690f, 77.30f, 0.3168f}, + {0.0738f, 75.30f, 0.5093f}, + {0.0799f, 59.67f, 0.3106f}, + }, + { + {0.0067f, 65.00f}, + {0.0063f, 65.00f}, + {0.0058f, 65.00f}, + {0.0055f, 65.00f}, + }, + 100.0f, + 8000.0f, + }, + { + 7, + 4, + { + {0.0536f, 82.20f, 0.3416f}, + {0.0629f, 52.84f, 0.3602f}, + {0.0690f, 77.30f, 0.3168f}, + {0.0738f, 75.30f, 0.5093f}, + {0.0799f, 59.67f, 0.3106f}, + {0.0582f, 77.66f, 0.3416f}, + {0.0652f, 68.35f, 0.3106f}, + }, + { + {0.0067f, 65.00f}, + {0.0063f, 65.00f}, + {0.0058f, 65.00f}, + {0.0055f, 65.00f}, + }, + 100.0f, + 8000.0f, + }, + { + 7, + 6, + { + {0.0536f, 82.20f, 0.3416f}, + {0.0629f, 52.84f, 0.3602f}, + {0.0690f, 77.30f, 0.3168f}, + {0.0738f, 75.30f, 0.5093f}, + {0.0799f, 59.67f, 0.3106f}, + {0.0582f, 77.66f, 0.3416f}, + {0.0652f, 68.35f, 0.3106f}, + }, + { + {0.0067f, 65.00f}, + {0.0063f, 65.00f}, + {0.0058f, 65.00f}, + {0.0055f, 65.00f}, + {0.0126f, 70.84f}, + {0.0138f, 86.35f}, + }, + 100.0f, + 8000.0f, + }, + { + 4, + 4, + { + {0.0752f, 61.53f, 0.4000f}, + {0.0536f, 28.64f, 0.4000f}, + {0.0907f, 85.11f, 0.4000f}, + {0.0660f, 47.88f, 0.4000f}, + }, + { + {0.0039f, 80.00f}, + {0.0043f, 70.84f}, + {0.0045f, 58.43f}, + {0.0049f, 43.53f}, + }, + 50.0f, + 10000.0f, + }, + { + 4, + 4, + { + {0.1742f, 47.26f, 0.4783f}, + {0.1526f, 23.06f, 0.1863f}, + {0.2021f, 72.08f, 0.4000f}, + {0.2175f, 90.07f, 0.4000f}, + }, + { + {0.0039f, 80.00f}, + {0.0043f, 70.84f}, + {0.0045f, 58.43f}, + {0.0049f, 43.53f}, + }, + 50.0f, + 10000.0f, + }, + { + 4, + 2, + { + {0.0969f, 52.22f, 0.6149f}, + {0.0984f, 54.70f, 0.6025f}, + {0.1000f, 80.00f, 0.5217f}, + {0.1015f, 53.46f, 0.2671f}, + }, + { + {0.0017f, 46.64f}, + {0.0021f, 47.88f}, + }, + 100.0f, + 13000.0f, + }, + { + 4, + 2, + { + {0.1526f, 52.22f, 0.6149f}, + {0.1541f, 65.87f, 0.6025f}, + {0.1557f, 80.00f, 0.5217f}, + {0.1572f, 53.46f, 0.2671f}, + }, + { + {0.0075f, 46.64f}, + {0.0078f, 47.88f}, + }, + 100.0f, + 13000.0f, + }, + { + 4, + 2, + { + {0.2082f, 52.22f, 0.6149f}, + {0.2098f, 54.70f, 0.6025f}, + {0.2113f, 80.00f, 0.5217f}, + {0.2129f, 53.46f, 0.2671f}, + }, + { + {0.0075f, 46.64f}, + {0.0078f, 47.88f}, + }, + 100.0f, + 13000.0f, + }, + { + 6, + 4, + { + {0.0536f, 82.20f, 0.4000f}, + {0.0629f, 75.80f, 0.5901f}, + {0.0690f, 77.30f, 0.5000f}, + {0.0738f, 75.30f, 0.4500f}, + {0.0799f, 59.67f, 0.4500f}, + {0.1170f, 74.56f, 0.4783f}, + }, + { + {0.0067f, 65.00f}, + {0.0063f, 65.00f}, + {0.0058f, 65.00f}, + {0.0055f, 65.00f}, + }, + 100.0f, + 13000.0f, + }, + { + 6, + 4, + { + {0.0536f, 82.20f, 0.4000f}, + {0.0629f, 75.80f, 0.5901f}, + {0.0690f, 77.30f, 0.5000f}, + {0.0738f, 75.30f, 0.4500f}, + {0.0799f, 59.67f, 0.4500f}, + {0.1727f, 74.56f, 0.5590f}, + }, + { + {0.0067f, 65.00f}, + {0.0063f, 65.00f}, + {0.0058f, 65.00f}, + {0.0055f, 65.00f}, + }, + 100.0f, + 13000.0f, + }, + { + 6, + 4, + { + {0.0814f, 82.20f, 0.4000f}, + {0.0892f, 75.80f, 0.5901f}, + {0.0953f, 77.30f, 0.5000f}, + {0.1046f, 75.30f, 0.5714f}, + {0.1108f, 59.67f, 0.4500f}, + {0.1912f, 39.81f, 0.6832f}, + }, + { + {0.0073f, 65.00f}, + {0.0063f, 65.00f}, + {0.0058f, 65.00f}, + {0.0055f, 65.00f}, + }, + 100.0f, + 13000.0f, + }, + { + 6, + 6, + { + {0.0814f, 82.20f, 0.4000f}, + {0.0892f, 75.80f, 0.5901f}, + {0.0953f, 77.30f, 0.5000f}, + {0.1046f, 75.30f, 0.5714f}, + {0.1108f, 59.67f, 0.4500f}, + {0.1912f, 39.81f, 0.6832f}, + }, + { + {0.0073f, 65.00f}, + {0.0063f, 65.00f}, + {0.0058f, 65.00f}, + {0.0055f, 65.00f}, + {0.0164f, 66.49f}, + {0.0181f, 56.57f}, + }, + 100.0f, + 13000.0f, + }, + { + 5, + 4, + { + {0.1170f, 82.20f, 0.5466f}, + {0.1232f, 75.18f, 0.4907f}, + {0.1309f, 69.60f, 0.6335f}, + {0.1417f, 49.74f, 0.6957f}, + {0.1526f, 59.67f, 0.5528f}, + }, + { + {0.0067f, 65.00f}, + {0.0063f, 65.00f}, + {0.0058f, 65.00f}, + {0.0055f, 65.00f}, + }, + 1000.0f, + 10000.0f, + }, + { + 5, + 6, + { + {0.1170f, 82.20f, 0.5466f}, + {0.1232f, 75.18f, 0.4907f}, + {0.1309f, 69.60f, 0.6335f}, + {0.1417f, 49.74f, 0.6957f}, + {0.1526f, 59.67f, 0.5528f}, + }, + { + {0.0067f, 65.00f}, + {0.0063f, 65.00f}, + {0.0058f, 65.00f}, + {0.0055f, 65.00f}, + {0.0143f, 56.57f}, + {0.0153f, 66.49f}, + }, + 1000.0f, + 10000.0f, + }, + { + 6, + 4, + { + {0.1170f, 82.20f, 0.6398f}, + {0.1232f, 75.18f, 0.7453f}, + {0.1309f, 69.60f, 0.6398f}, + {0.1417f, 49.74f, 0.6957f}, + {0.1526f, 59.67f, 0.7205f}, + {0.1634f, 84.49f, 0.7453f}, + }, + { + {0.0067f, 65.00f}, + {0.0063f, 65.00f}, + {0.0058f, 65.00f}, + {0.0055f, 65.00f}, + }, + 2000.0f, + 15000.0f, + }, + { + 6, + 6, + { + {0.1170f, 82.20f, 0.6398f}, + {0.1232f, 75.18f, 0.7453f}, + {0.1309f, 69.60f, 0.6398f}, + {0.1417f, 49.74f, 0.6957f}, + {0.1526f, 59.67f, 0.7205f}, + {0.1634f, 84.49f, 0.7453f}, + }, + { + {0.0067f, 65.00f}, + {0.0063f, 65.00f}, + {0.0058f, 65.00f}, + {0.0055f, 65.00f}, + {0.0128f, 80.00f}, + {0.0136f, 88.83f}, + }, + 2000.0f, + 15000.0f, + }, + { + 5, + 4, + { + {0.0506f, 82.20f, 0.6832f}, + {0.0599f, 73.94f, 0.6832f}, + {0.0660f, 61.53f, 0.7453f}, + {0.0708f, 75.30f, 0.7702f}, + {0.0769f, 59.67f, 0.8012f}, + }, + { + {0.0067f, 65.00f}, + {0.0063f, 65.00f}, + {0.0058f, 65.00f}, + {0.0055f, 65.00f}, + }, + 1000.0f, + 7000.0f, + }, + { + 5, + 4, + { + {0.0536f, 82.20f, 0.6832f}, + {0.0629f, 73.94f, 0.6832f}, + {0.0690f, 61.53f, 0.7453f}, + {0.0738f, 75.30f, 0.7702f}, + {0.0799f, 59.67f, 0.8012f}, + }, + { + {0.0067f, 65.00f}, + {0.0063f, 65.00f}, + {0.0058f, 65.00f}, + {0.0055f, 65.00f}, + }, + 1000.0f, + 7000.0f, + }, + { + 5, + 4, + { + {0.0586f, 82.20f, 0.6832f}, + {0.0679f, 73.94f, 0.6832f}, + {0.0740f, 61.53f, 0.7453f}, + {0.0788f, 75.30f, 0.7702f}, + {0.0849f, 59.67f, 0.8012f}, + }, + { + {0.0067f, 65.00f}, + {0.0063f, 65.00f}, + {0.0058f, 65.00f}, + {0.0055f, 65.00f}, + }, + 1000.0f, + 7000.0f, + }, + { + 5, + 7, + { + {0.0586f, 82.20f, 0.6832f}, + {0.0679f, 73.94f, 0.6832f}, + {0.0740f, 61.53f, 0.7453f}, + {0.0788f, 75.30f, 0.7702f}, + {0.0849f, 59.67f, 0.8012f}, + }, + { + {0.0067f, 65.00f}, + {0.0063f, 65.00f}, + {0.0058f, 65.00f}, + {0.0055f, 65.00f}, + {0.0122f, 80.00f}, + {0.0138f, 65.25f}, + {0.0143f, 75.00f}, + }, + 1000.0f, + 7000.0f, + }, + { + 5, + 4, + { + {0.0505f, 70.22f, 0.4720f}, + {0.0582f, 80.76f, 0.4000f}, + {0.0629f, 65.25f, 0.4000f}, + {0.0892f, 80.00f, 0.6957f}, + {0.0953f, 52.84f, 0.7205f}, + }, + { + {0.0044f, 65.00f}, + {0.0037f, 67.11f}, + {0.0057f, 80.00f}, + {0.0060f, 56.57f}, + }, + 400.0f, + 10000.0f, + }, + { + 5, + 6, + { + {0.0505f, 70.22f, 0.4720f}, + {0.0582f, 80.76f, 0.4000f}, + {0.0629f, 65.25f, 0.4000f}, + {0.0892f, 80.00f, 0.6957f}, + {0.0953f, 52.84f, 0.7205f}, + }, + { + {0.0044f, 65.00f}, + {0.0037f, 67.11f}, + {0.0057f, 80.00f}, + {0.0060f, 56.57f}, + {0.0142f, 80.00f}, + {0.0151f, 59.67f}, + }, + 400.0f, + 10000.0f, + }, + { + 5, + 4, + { + {0.2051f, 52.84f, 0.7826f}, + {0.2082f, 68.35f, 0.7019f}, + {0.2113f, 80.00f, 0.6832f}, + {0.2206f, 83.25f, 0.7081f}, + {0.2237f, 67.73f, 0.5280f}, + }, + { + {0.0067f, 65.00f}, + {0.0061f, 65.00f}, + {0.0059f, 65.00f}, + {0.0055f, 65.00f}, + }, + 400.0f, + 10000.0f, + }, + { + 6, + 5, + { + {0.0280f, 82.20f, 0.4720f}, + {0.0304f, 80.20f, 0.5652f}, + {0.0329f, 77.30f, 0.6211f}, + {0.0389f, 75.30f, 0.5217f}, + {0.0415f, 59.67f, 0.6522f}, + {0.0768f, 80.00f, 0.7702f}, + }, + { + {0.0057f, 65.00f}, + {0.0062f, 65.00f}, + {0.0066f, 77.04f}, + {0.0050f, 65.00f}, + {0.0038f, 56.57f}, + }, + 100.0f, + 10000.0f, + }, + { + 6, + 7, + { + {0.0280f, 82.20f, 0.4720f}, + {0.0304f, 80.20f, 0.5652f}, + {0.0329f, 77.30f, 0.6211f}, + {0.0389f, 75.30f, 0.5217f}, + {0.0415f, 59.67f, 0.6522f}, + {0.0768f, 80.00f, 0.7702f}, + }, + { + {0.0057f, 65.00f}, + {0.0062f, 65.00f}, + {0.0137f, 77.04f}, + {0.0050f, 65.00f}, + {0.0038f, 56.57f}, + {0.0147f, 60.91f}, + {0.0164f, 52.84f}, + }, + 100.0f, + 10000.0f, + }, +}; + diff --git a/plugins/LadspaEffect/tap/tap_rotspeak.c b/plugins/LadspaEffect/tap/tap_rotspeak.c new file mode 100644 index 000000000..7ec435bd0 --- /dev/null +++ b/plugins/LadspaEffect/tap/tap_rotspeak.c @@ -0,0 +1,768 @@ +/* -*- linux-c -*- + Copyright (C) 2004 Tom Szilagyi + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + $Id: tap_rotspeak.c,v 1.3 2004/02/21 17:33:36 tszilagyi Exp $ +*/ + + +#include +#include +#include +#include + +#include +#include "tap_utils.h" + +/* The Unique ID of the plugin: */ + +#define ID_STEREO 2149 + +/* The port numbers for the plugin: */ + +#define BASSFREQ 0 +#define HORNFREQ 1 +#define STWIDTH 2 +#define HRBAL 3 +#define LATENCY 4 +#define INPUT_L 5 +#define INPUT_R 6 +#define OUTPUT_L 7 +#define OUTPUT_R 8 + + +/* Total number of ports */ + +#define PORTCOUNT_STEREO 9 + +/* + * This has to be bigger than 0.3f * sample_rate / (2*PI) for any sample rate. + * At 192 kHz 9168 is needed so this should be enough. + */ +#define PM_DEPTH 9200 + +/* maximum phase mod freq */ +#define PM_FREQ 30.0f + + +/* splitting input signals into low and high freq components */ +#define SPLIT_FREQ 1000.0f +#define SPLIT_BW 1.0f + + +/* approx. sound velocity in air [m/s] */ +#define C_AIR 340.0f + +/* coefficient between rotating frequency and pitch mod depth (aka. Doppler effect) */ +#define FREQ_PITCH 1.6f + +/* cosine table for fast computations */ +LADSPA_Data cos_table[1024]; + + +/* The structure used to hold port connection information and state */ + +typedef struct { + LADSPA_Data * hornfreq; + LADSPA_Data * bassfreq; + LADSPA_Data * stwidth; + LADSPA_Data * hrbal; + LADSPA_Data * latency; + LADSPA_Data * input_L; + LADSPA_Data * input_R; + LADSPA_Data * output_L; + LADSPA_Data * output_R; + + LADSPA_Data * ringbuffer_h_L; + unsigned long buflen_h_L; + unsigned long pos_h_L; + LADSPA_Data * ringbuffer_h_R; + unsigned long buflen_h_R; + unsigned long pos_h_R; + + LADSPA_Data * ringbuffer_b_L; + unsigned long buflen_b_L; + unsigned long pos_b_L; + LADSPA_Data * ringbuffer_b_R; + unsigned long buflen_b_R; + unsigned long pos_b_R; + + biquad * eq_filter_L; + biquad * lp_filter_L; + biquad * hp_filter_L; + + biquad * eq_filter_R; + biquad * lp_filter_R; + biquad * hp_filter_R; + + unsigned long sample_rate; + LADSPA_Data phase_h; + LADSPA_Data phase_b; + + LADSPA_Data run_adding_gain; +} RotSpkr; + + +void cleanup_RotSpkr(LADSPA_Handle Instance); + +/* Construct a new plugin instance. */ +LADSPA_Handle +instantiate_RotSpkr(const LADSPA_Descriptor * Descriptor, + unsigned long sample_rate) { + + LADSPA_Handle * ptr; + + if ((ptr = calloc(1, sizeof(RotSpkr))) != NULL) { + RotSpkr* rotSpeak = (RotSpkr*)ptr; + rotSpeak->sample_rate = sample_rate; + rotSpeak->run_adding_gain = 1.0; + + if ((rotSpeak->ringbuffer_h_L = + calloc(2 * PM_DEPTH, sizeof(LADSPA_Data))) == NULL) + { + cleanup_RotSpkr((LADSPA_Handle)rotSpeak); + return NULL; + } + if ((rotSpeak->ringbuffer_h_R = + calloc(2 * PM_DEPTH, sizeof(LADSPA_Data))) == NULL) + { + cleanup_RotSpkr((LADSPA_Handle)rotSpeak); + return NULL; + } + rotSpeak->buflen_h_L = ceil(0.3f * sample_rate / M_PI); + rotSpeak->buflen_h_R = ceil(0.3f * sample_rate / M_PI); + rotSpeak->pos_h_L = 0; + rotSpeak->pos_h_R = 0; + + if ((rotSpeak->ringbuffer_b_L = + calloc(2 * PM_DEPTH, sizeof(LADSPA_Data))) == NULL) + { + cleanup_RotSpkr((LADSPA_Handle)rotSpeak); + return NULL; + } + if ((rotSpeak->ringbuffer_b_R = + calloc(2 * PM_DEPTH, sizeof(LADSPA_Data))) == NULL) + { + cleanup_RotSpkr((LADSPA_Handle)rotSpeak); + return NULL; + } + rotSpeak->buflen_b_L = ceil(0.3f * sample_rate / M_PI); + rotSpeak->buflen_b_R = ceil(0.3f * sample_rate / M_PI); + rotSpeak->pos_b_L = 0; + rotSpeak->pos_b_R = 0; + + if ((rotSpeak->eq_filter_L = calloc(1, sizeof(biquad))) == NULL) + { + cleanup_RotSpkr((LADSPA_Handle)rotSpeak); + return NULL; + } + if ((rotSpeak->lp_filter_L = calloc(1, sizeof(biquad))) == NULL) + { + cleanup_RotSpkr((LADSPA_Handle)rotSpeak); + return NULL; + } + if ((rotSpeak->hp_filter_L = calloc(1, sizeof(biquad))) == NULL) + { + cleanup_RotSpkr((LADSPA_Handle)rotSpeak); + return NULL; + } + + if ((rotSpeak->eq_filter_R = calloc(1, sizeof(biquad))) == NULL) + { + cleanup_RotSpkr((LADSPA_Handle)rotSpeak); + return NULL; + } + if ((rotSpeak->lp_filter_R = calloc(1, sizeof(biquad))) == NULL) + { + cleanup_RotSpkr((LADSPA_Handle)rotSpeak); + return NULL; + } + if ((rotSpeak->hp_filter_R = calloc(1, sizeof(biquad))) == NULL) + { + cleanup_RotSpkr((LADSPA_Handle)rotSpeak); + return NULL; + } + + return ptr; + } + + return NULL; +} + + +void +activate_RotSpkr(LADSPA_Handle Instance) { + + int i; + RotSpkr * ptr; + + ptr = (RotSpkr *)Instance; + + for (i = 0; i < 2 * PM_DEPTH; i++) { + ptr->ringbuffer_h_L[i] = 0.0f; + ptr->ringbuffer_h_R[i] = 0.0f; + ptr->ringbuffer_b_L[i] = 0.0f; + ptr->ringbuffer_b_R[i] = 0.0f; + } + + ptr->phase_h = 0.0f; + ptr->phase_b = 0.0f; + + biquad_init(ptr->eq_filter_L); + biquad_init(ptr->lp_filter_L); + biquad_init(ptr->hp_filter_L); + biquad_init(ptr->eq_filter_R); + biquad_init(ptr->lp_filter_R); + biquad_init(ptr->hp_filter_R); + + eq_set_params(ptr->eq_filter_L, SPLIT_FREQ, +8.0f, SPLIT_BW, ptr->sample_rate); + eq_set_params(ptr->eq_filter_R, SPLIT_FREQ, +8.0f, SPLIT_BW, ptr->sample_rate); + lp_set_params(ptr->lp_filter_L, SPLIT_FREQ, SPLIT_BW, ptr->sample_rate); + lp_set_params(ptr->lp_filter_R, SPLIT_FREQ, SPLIT_BW, ptr->sample_rate); + hp_set_params(ptr->hp_filter_L, SPLIT_FREQ, SPLIT_BW, ptr->sample_rate); + hp_set_params(ptr->hp_filter_R, SPLIT_FREQ, SPLIT_BW, ptr->sample_rate); +} + + + +/* Connect a port to a data location. */ +void +connect_port_RotSpkr(LADSPA_Handle Instance, + unsigned long Port, + LADSPA_Data * DataLocation) { + + RotSpkr * ptr; + + ptr = (RotSpkr *)Instance; + switch (Port) { + case HORNFREQ: + ptr->hornfreq = DataLocation; + break; + case BASSFREQ: + ptr->bassfreq = DataLocation; + break; + case STWIDTH: + ptr->stwidth = DataLocation; + break; + case HRBAL: + ptr->hrbal = DataLocation; + break; + case LATENCY: + ptr->latency = DataLocation; + *(ptr->latency) = ptr->buflen_h_L / 2; /* IS THIS LEGAL? YES, ONLY IF DataLocation points to valid memory location on stack/heap*/ + break; + case INPUT_L: + ptr->input_L = DataLocation; + break; + case INPUT_R: + ptr->input_R = DataLocation; + break; + case OUTPUT_L: + ptr->output_L = DataLocation; + break; + case OUTPUT_R: + ptr->output_R = DataLocation; + break; + } +} + + + +void +run_RotSpkr(LADSPA_Handle Instance, + unsigned long SampleCount) { + + RotSpkr * ptr = (RotSpkr *)Instance; + + LADSPA_Data * input_L = ptr->input_L; + LADSPA_Data * input_R = ptr->input_R; + LADSPA_Data * output_L = ptr->output_L; + LADSPA_Data * output_R = ptr->output_R; + LADSPA_Data freq_h = LIMIT(*(ptr->hornfreq),0.0f,PM_FREQ); + LADSPA_Data freq_b = LIMIT(*(ptr->bassfreq),0.0f,PM_FREQ); + LADSPA_Data stwidth = LIMIT(*(ptr->stwidth),0.0f,100.0f); + LADSPA_Data hrbal = LIMIT(*(ptr->hrbal),0.0f,1.0f); + LADSPA_Data pmdepth_h = + LIMIT(1.0f/(1.0f+FREQ_PITCH*freq_h/C_AIR) * ptr->sample_rate + / 200.0f / M_PI / freq_h, 0, ptr->buflen_h_L / 2); + LADSPA_Data pmdepth_b = + LIMIT(1.0f/(1.0f+FREQ_PITCH*freq_b/C_AIR) * ptr->sample_rate + / 200.0f / M_PI / freq_b, 0, ptr->buflen_b_L / 2); + unsigned long sample_index; + + LADSPA_Data in_L = 0.0f, in_R = 0.0f; + LADSPA_Data lo_L = 0.0f, lo_R = 0.0f; + LADSPA_Data hi_L = 0.0f, hi_R = 0.0f; + + LADSPA_Data phase_h_L = 0.0f, phase_b_L = 0.0f; + LADSPA_Data phase_h_R = 0.0f, phase_b_R = 0.0f; + LADSPA_Data phase_pm_h_L = 0.0f, phase_pm_b_L = 0.0f; + LADSPA_Data phase_pm_h_R = 0.0f, phase_pm_b_R = 0.0f; + LADSPA_Data pm_h_L = 0.0f, pm_b_L = 0.0f; + LADSPA_Data pm_h_R = 0.0f, pm_b_R = 0.0f; + + LADSPA_Data fpos_h_L = 0.0f, fpos_b_L = 0.0f, fpos_h_R = 0.0f, fpos_b_R = 0.0f; + LADSPA_Data n_h_L = 0.0f, n_b_L = 0.0f, n_h_R = 0.0f, n_b_R = 0.0f; + LADSPA_Data rem_h_L = 0.0f, rem_b_L = 0.0f, rem_h_R = 0.0f, rem_b_R = 0.0f; + LADSPA_Data sa_h_L = 0.0f, sa_b_L = 0.0f, sb_h_L = 0.0f, sb_b_L = 0.0f; + LADSPA_Data sa_h_R = 0.0f, sa_b_R = 0.0f, sb_h_R = 0.0f, sb_b_R = 0.0f; + + + for (sample_index = 0; sample_index < SampleCount; sample_index++) { + + in_L = *(input_L++); + in_R = *(input_R++); + + in_L = biquad_run(ptr->eq_filter_L, in_L); + in_R = biquad_run(ptr->eq_filter_R, in_R); + lo_L = biquad_run(ptr->lp_filter_L, in_L); + lo_R = biquad_run(ptr->lp_filter_R, in_R); + hi_L = biquad_run(ptr->hp_filter_L, in_L); + hi_R = biquad_run(ptr->hp_filter_R, in_R); + + + phase_h_L = 1024.0f * freq_h * sample_index / ptr->sample_rate + ptr->phase_h; + while (phase_h_L >= 1024.0f) + phase_h_L -= 1024.0f; + phase_pm_h_L = phase_h_L + 256.0f; + while (phase_pm_h_L >= 1024.0f) + phase_pm_h_L -= 1024.0f; + phase_h_R = phase_h_L + 512.0f; + while (phase_h_R >= 1024.0f) + phase_h_R -= 1024.0f; + phase_pm_h_R = phase_h_R + 256.0f; + while (phase_pm_h_R >= 1024.0f) + phase_pm_h_R -= 1024.0f; + + phase_b_L = 1024.0f * freq_b * sample_index / ptr->sample_rate + ptr->phase_b; + while (phase_b_L >= 1024.0f) + phase_b_L -= 1024.0f; + phase_pm_b_L = phase_b_L + 256.0f; + while (phase_pm_b_L >= 1024.0f) + phase_pm_b_L -= 1024.0f; + phase_b_R = phase_b_L + 512.0f; + while (phase_b_R >= 1024.0f) + phase_b_R -= 1024.0f; + phase_pm_b_R = phase_b_R + 256.0f; + while (phase_pm_b_R >= 1024.0f) + phase_pm_b_R -= 1024.0f; + + push_buffer(hi_L, ptr->ringbuffer_h_L, ptr->buflen_h_L, &(ptr->pos_h_L)); + push_buffer(hi_R, ptr->ringbuffer_h_R, ptr->buflen_h_R, &(ptr->pos_h_R)); + push_buffer(lo_L, ptr->ringbuffer_b_L, ptr->buflen_b_L, &(ptr->pos_b_L)); + push_buffer(lo_R, ptr->ringbuffer_b_R, ptr->buflen_b_R, &(ptr->pos_b_R)); + + fpos_h_L = pmdepth_h * (1.0f - cos_table[(unsigned long) phase_pm_h_L]); + n_h_L = floorf(fpos_h_L); + rem_h_L = fpos_h_L - n_h_L; + sa_h_L = read_buffer(ptr->ringbuffer_h_L, + ptr->buflen_h_L, ptr->pos_h_L, (unsigned long) n_h_L); + sb_h_L = read_buffer(ptr->ringbuffer_h_L, + ptr->buflen_h_L, ptr->pos_h_L, (unsigned long) n_h_L + 1); + pm_h_L = (1 - rem_h_L) * sa_h_L + rem_h_L * sb_h_L; + + fpos_h_R = pmdepth_h * (1.0f - cos_table[(unsigned long) phase_pm_h_R]); + n_h_R = floorf(fpos_h_R); + rem_h_R = fpos_h_R - n_h_R; + sa_h_R = read_buffer(ptr->ringbuffer_h_R, + ptr->buflen_h_R, ptr->pos_h_R, (unsigned long) n_h_R); + sb_h_R = read_buffer(ptr->ringbuffer_h_R, + ptr->buflen_h_R, ptr->pos_h_R, (unsigned long) n_h_R + 1); + pm_h_R = (1 - rem_h_R) * sa_h_R + rem_h_R * sb_h_R; + + + fpos_b_L = pmdepth_b * (1.0f - cos_table[(unsigned long) phase_pm_b_L]); + n_b_L = floorf(fpos_b_L); + rem_b_L = fpos_b_L - n_b_L; + sa_b_L = read_buffer(ptr->ringbuffer_b_L, + ptr->buflen_b_L, ptr->pos_b_L, (unsigned long) n_b_L); + sb_b_L = read_buffer(ptr->ringbuffer_b_L, + ptr->buflen_b_L, ptr->pos_b_L, (unsigned long) n_b_L + 1); + pm_b_L = (1 - rem_b_L) * sa_b_L + rem_b_L * sb_b_L; + + fpos_b_R = pmdepth_b * (1.0f - cos_table[(unsigned long) phase_pm_b_R]); + n_b_R = floorf(fpos_b_R); + rem_b_R = fpos_b_R - n_b_R; + sa_b_R = read_buffer(ptr->ringbuffer_b_R, + ptr->buflen_b_R, ptr->pos_b_R, (unsigned long) n_b_R); + sb_b_R = read_buffer(ptr->ringbuffer_b_R, + ptr->buflen_b_R, ptr->pos_b_R, (unsigned long) n_b_R + 1); + pm_b_R = (1 - rem_b_R) * sa_b_R + rem_b_R * sb_b_R; + + + *(output_L++) = + hrbal * pm_h_L * (1.0f + 0.5f * stwidth/100.0f * + cos_table[(unsigned long) phase_h_L]) + + (1.0f - hrbal) * pm_b_L * (1.0f + 0.5f * stwidth/100.0f * + cos_table[(unsigned long) phase_b_L]); + + *(output_R++) = + hrbal * pm_h_R * (1.0f + 0.5f * stwidth/100.0f * + cos_table[(unsigned long) phase_h_R]) + + (1.0f - hrbal) * pm_b_R * (1.0f + 0.5f * stwidth/100.0f * + cos_table[(unsigned long) phase_b_R]); + } + + ptr->phase_h += 1024.0f * freq_h * sample_index / ptr->sample_rate; + while (ptr->phase_h >= 1024.0f) + ptr->phase_h -= 1024.0f; + ptr->phase_b += 1024.0f * freq_b * sample_index / ptr->sample_rate; + while (ptr->phase_b >= 1024.0f) + ptr->phase_b -= 1024.0f; + + *(ptr->latency) = ptr->buflen_h_L / 2; +} + + +void +set_run_adding_gain_RotSpkr(LADSPA_Handle Instance, LADSPA_Data gain) { + + RotSpkr * ptr = (RotSpkr *)Instance; + + ptr->run_adding_gain = gain; +} + + + +void +run_adding_RotSpkr(LADSPA_Handle Instance, + unsigned long SampleCount) { + + RotSpkr * ptr = (RotSpkr *)Instance; + + LADSPA_Data * input_L = ptr->input_L; + LADSPA_Data * input_R = ptr->input_R; + LADSPA_Data * output_L = ptr->output_L; + LADSPA_Data * output_R = ptr->output_R; + LADSPA_Data freq_h = LIMIT(*(ptr->hornfreq),0.0f,PM_FREQ); + LADSPA_Data freq_b = LIMIT(*(ptr->bassfreq),0.0f,PM_FREQ); + LADSPA_Data stwidth = LIMIT(*(ptr->stwidth),0.0f,100.0f); + LADSPA_Data hrbal = LIMIT(*(ptr->hrbal),0.0f,1.0f); + LADSPA_Data pmdepth_h = + LIMIT(1.0f/(1.0f+FREQ_PITCH*freq_h/C_AIR) * ptr->sample_rate + / 200.0f / M_PI / freq_h, 0, ptr->buflen_h_L / 2); + LADSPA_Data pmdepth_b = + LIMIT(1.0f/(1.0f+FREQ_PITCH*freq_b/C_AIR) * ptr->sample_rate + / 200.0f / M_PI / freq_b, 0, ptr->buflen_b_L / 2); + unsigned long sample_index; + + LADSPA_Data in_L = 0.0f, in_R = 0.0f; + LADSPA_Data lo_L = 0.0f, lo_R = 0.0f; + LADSPA_Data hi_L = 0.0f, hi_R = 0.0f; + + LADSPA_Data phase_h_L = 0.0f, phase_b_L = 0.0f; + LADSPA_Data phase_h_R = 0.0f, phase_b_R = 0.0f; + LADSPA_Data phase_pm_h_L = 0.0f, phase_pm_b_L = 0.0f; + LADSPA_Data phase_pm_h_R = 0.0f, phase_pm_b_R = 0.0f; + LADSPA_Data pm_h_L = 0.0f, pm_b_L = 0.0f; + LADSPA_Data pm_h_R = 0.0f, pm_b_R = 0.0f; + + LADSPA_Data fpos_h_L = 0.0f, fpos_b_L = 0.0f, fpos_h_R = 0.0f, fpos_b_R = 0.0f; + LADSPA_Data n_h_L = 0.0f, n_b_L = 0.0f, n_h_R = 0.0f, n_b_R = 0.0f; + LADSPA_Data rem_h_L = 0.0f, rem_b_L = 0.0f, rem_h_R = 0.0f, rem_b_R = 0.0f; + LADSPA_Data sa_h_L = 0.0f, sa_b_L = 0.0f, sb_h_L = 0.0f, sb_b_L = 0.0f; + LADSPA_Data sa_h_R = 0.0f, sa_b_R = 0.0f, sb_h_R = 0.0f, sb_b_R = 0.0f; + + + for (sample_index = 0; sample_index < SampleCount; sample_index++) { + + in_L = *(input_L++); + in_R = *(input_R++); + + in_L = biquad_run(ptr->eq_filter_L, in_L); + in_R = biquad_run(ptr->eq_filter_R, in_R); + lo_L = biquad_run(ptr->lp_filter_L, in_L); + lo_R = biquad_run(ptr->lp_filter_R, in_R); + hi_L = biquad_run(ptr->hp_filter_L, in_L); + hi_R = biquad_run(ptr->hp_filter_R, in_R); + + + phase_h_L = 1024.0f * freq_h * sample_index / ptr->sample_rate + ptr->phase_h; + while (phase_h_L >= 1024.0f) + phase_h_L -= 1024.0f; + phase_pm_h_L = phase_h_L + 256.0f; + while (phase_pm_h_L >= 1024.0f) + phase_pm_h_L -= 1024.0f; + phase_h_R = phase_h_L + 512.0f; + while (phase_h_R >= 1024.0f) + phase_h_R -= 1024.0f; + phase_pm_h_R = phase_h_R + 256.0f; + while (phase_pm_h_R >= 1024.0f) + phase_pm_h_R -= 1024.0f; + + phase_b_L = 1024.0f * freq_b * sample_index / ptr->sample_rate + ptr->phase_b; + while (phase_b_L >= 1024.0f) + phase_b_L -= 1024.0f; + phase_pm_b_L = phase_b_L + 256.0f; + while (phase_pm_b_L >= 1024.0f) + phase_pm_b_L -= 1024.0f; + phase_b_R = phase_b_L + 512.0f; + while (phase_b_R >= 1024.0f) + phase_b_R -= 1024.0f; + phase_pm_b_R = phase_b_R + 256.0f; + while (phase_pm_b_R >= 1024.0f) + phase_pm_b_R -= 1024.0f; + + push_buffer(hi_L, ptr->ringbuffer_h_L, ptr->buflen_h_L, &(ptr->pos_h_L)); + push_buffer(hi_R, ptr->ringbuffer_h_R, ptr->buflen_h_R, &(ptr->pos_h_R)); + push_buffer(lo_L, ptr->ringbuffer_b_L, ptr->buflen_b_L, &(ptr->pos_b_L)); + push_buffer(lo_R, ptr->ringbuffer_b_R, ptr->buflen_b_R, &(ptr->pos_b_R)); + + fpos_h_L = pmdepth_h * (1.0f - cos_table[(unsigned long) phase_pm_h_L]); + n_h_L = floorf(fpos_h_L); + rem_h_L = fpos_h_L - n_h_L; + sa_h_L = read_buffer(ptr->ringbuffer_h_L, + ptr->buflen_h_L, ptr->pos_h_L, (unsigned long) n_h_L); + sb_h_L = read_buffer(ptr->ringbuffer_h_L, + ptr->buflen_h_L, ptr->pos_h_L, (unsigned long) n_h_L + 1); + pm_h_L = (1 - rem_h_L) * sa_h_L + rem_h_L * sb_h_L; + + fpos_h_R = pmdepth_h * (1.0f - cos_table[(unsigned long) phase_pm_h_R]); + n_h_R = floorf(fpos_h_R); + rem_h_R = fpos_h_R - n_h_R; + sa_h_R = read_buffer(ptr->ringbuffer_h_R, + ptr->buflen_h_R, ptr->pos_h_R, (unsigned long) n_h_R); + sb_h_R = read_buffer(ptr->ringbuffer_h_R, + ptr->buflen_h_R, ptr->pos_h_R, (unsigned long) n_h_R + 1); + pm_h_R = (1 - rem_h_R) * sa_h_R + rem_h_R * sb_h_R; + + + fpos_b_L = pmdepth_b * (1.0f - cos_table[(unsigned long) phase_pm_b_L]); + n_b_L = floorf(fpos_b_L); + rem_b_L = fpos_b_L - n_b_L; + sa_b_L = read_buffer(ptr->ringbuffer_b_L, + ptr->buflen_b_L, ptr->pos_b_L, (unsigned long) n_b_L); + sb_b_L = read_buffer(ptr->ringbuffer_b_L, + ptr->buflen_b_L, ptr->pos_b_L, (unsigned long) n_b_L + 1); + pm_b_L = (1 - rem_b_L) * sa_b_L + rem_b_L * sb_b_L; + + fpos_b_R = pmdepth_b * (1.0f - cos_table[(unsigned long) phase_pm_b_R]); + n_b_R = floorf(fpos_b_R); + rem_b_R = fpos_b_R - n_b_R; + sa_b_R = read_buffer(ptr->ringbuffer_b_R, + ptr->buflen_b_R, ptr->pos_b_R, (unsigned long) n_b_R); + sb_b_R = read_buffer(ptr->ringbuffer_b_R, + ptr->buflen_b_R, ptr->pos_b_R, (unsigned long) n_b_R + 1); + pm_b_R = (1 - rem_b_R) * sa_b_R + rem_b_R * sb_b_R; + + + *(output_L++) += ptr->run_adding_gain * + hrbal * pm_h_L * (1.0f + 0.5f * stwidth/100.0f * + cos_table[(unsigned long) phase_h_L]) + + (1.0f - hrbal) * pm_b_L * (1.0f + 0.5f * stwidth/100.0f * + cos_table[(unsigned long) phase_b_L]); + + *(output_R++) += ptr->run_adding_gain * + hrbal * pm_h_R * (1.0f + 0.5f * stwidth/100.0f * + cos_table[(unsigned long) phase_h_R]) + + (1.0f - hrbal) * pm_b_R * (1.0f + 0.5f * stwidth/100.0f * + cos_table[(unsigned long) phase_b_R]); + } + + ptr->phase_h += 1024.0f * freq_h * sample_index / ptr->sample_rate; + while (ptr->phase_h >= 1024.0f) + ptr->phase_h -= 1024.0f; + ptr->phase_b += 1024.0f * freq_b * sample_index / ptr->sample_rate; + while (ptr->phase_b >= 1024.0f) + ptr->phase_b -= 1024.0f; + + *(ptr->latency) = ptr->buflen_h_L / 2; +} + + + +/* + Throw away an RotSpkr effect instance. + This function should be called only when RotSpkr was allocated with calloc. + */ +void +cleanup_RotSpkr(LADSPA_Handle Instance) { + + RotSpkr * ptr = (RotSpkr *)Instance; + if (!ptr) + return; + if (ptr->ringbuffer_h_L) + free(ptr->ringbuffer_h_L); + if (ptr->ringbuffer_h_R) + free(ptr->ringbuffer_h_R); + if (ptr->ringbuffer_b_L) + free(ptr->ringbuffer_b_L); + if (ptr->ringbuffer_b_R) + free(ptr->ringbuffer_b_R); + if (ptr->eq_filter_L) + free(ptr->eq_filter_L); + if (ptr->eq_filter_R) + free(ptr->eq_filter_R); + if (ptr->lp_filter_L) + free(ptr->lp_filter_L); + if (ptr->lp_filter_R) + free(ptr->lp_filter_R); + if (ptr->hp_filter_L) + free(ptr->hp_filter_L); + if (ptr->hp_filter_R) + free(ptr->hp_filter_R); + if (Instance) + free(Instance); +} + + + +LADSPA_Descriptor * stereo_descriptor = NULL; + + + +/* __attribute__((constructor)) _init() is called automatically when the plugin library is first + loaded. */ +void +__attribute__((constructor)) _init() { + + int i; + char ** port_names; + LADSPA_PortDescriptor * port_descriptors; + LADSPA_PortRangeHint * port_range_hints; + + if ((stereo_descriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor))) == NULL) + exit(1); + + for (i = 0; i < 1024; i++) + cos_table[i] = cosf(i * M_PI / 512.0f); + + + stereo_descriptor->UniqueID = ID_STEREO; + stereo_descriptor->Label = strdup("tap_rotspeak"); + stereo_descriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; + stereo_descriptor->Name = strdup("TAP Rotary Speaker"); + stereo_descriptor->Maker = strdup("Tom Szilagyi"); + stereo_descriptor->Copyright = strdup("GPL"); + stereo_descriptor->PortCount = PORTCOUNT_STEREO; + + if ((port_descriptors = + (LADSPA_PortDescriptor *)calloc(PORTCOUNT_STEREO, sizeof(LADSPA_PortDescriptor))) == NULL) + exit(1); + + stereo_descriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; + port_descriptors[HORNFREQ] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_descriptors[BASSFREQ] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_descriptors[STWIDTH] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_descriptors[HRBAL] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_descriptors[LATENCY] = LADSPA_PORT_OUTPUT | LADSPA_PORT_CONTROL; + port_descriptors[INPUT_L] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_descriptors[INPUT_R] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_descriptors[OUTPUT_L] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_descriptors[OUTPUT_R] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + + if ((port_names = + (char **)calloc(PORTCOUNT_STEREO, sizeof(char *))) == NULL) + exit(1); + + stereo_descriptor->PortNames = (const char **)port_names; + port_names[HORNFREQ] = strdup("Horn Frequency [Hz]"); + port_names[BASSFREQ] = strdup("Rotor Frequency [Hz]"); + port_names[STWIDTH] = strdup("Mic Distance [%]"); + port_names[HRBAL] = strdup("Rotor/Horn Mix"); + port_names[LATENCY] = strdup("latency"); + port_names[INPUT_L] = strdup("Input L"); + port_names[INPUT_R] = strdup("Input R"); + port_names[OUTPUT_L] = strdup("Output L"); + port_names[OUTPUT_R] = strdup("Output R"); + + if ((port_range_hints = + ((LADSPA_PortRangeHint *)calloc(PORTCOUNT_STEREO, sizeof(LADSPA_PortRangeHint)))) == NULL) + exit(1); + + stereo_descriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; + port_range_hints[HORNFREQ].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_0); + port_range_hints[BASSFREQ].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_0); + port_range_hints[STWIDTH].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_LOW); + port_range_hints[HRBAL].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_MIDDLE); + port_range_hints[LATENCY].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_MAXIMUM); + port_range_hints[HORNFREQ].LowerBound = 0; + port_range_hints[HORNFREQ].UpperBound = PM_FREQ; + port_range_hints[BASSFREQ].LowerBound = 0; + port_range_hints[BASSFREQ].UpperBound = PM_FREQ; + port_range_hints[STWIDTH].LowerBound = 0; + port_range_hints[STWIDTH].UpperBound = 100.0f; + port_range_hints[HRBAL].LowerBound = 0; + port_range_hints[HRBAL].UpperBound = 1.0f; + port_range_hints[LATENCY].LowerBound = 0; + port_range_hints[LATENCY].UpperBound = PM_DEPTH; + port_range_hints[INPUT_L].HintDescriptor = 0; + port_range_hints[INPUT_R].HintDescriptor = 0; + port_range_hints[OUTPUT_L].HintDescriptor = 0; + port_range_hints[OUTPUT_R].HintDescriptor = 0; + stereo_descriptor->instantiate = instantiate_RotSpkr; + stereo_descriptor->connect_port = connect_port_RotSpkr; + stereo_descriptor->activate = activate_RotSpkr; + stereo_descriptor->run = run_RotSpkr; + stereo_descriptor->run_adding = run_adding_RotSpkr; + stereo_descriptor->set_run_adding_gain = set_run_adding_gain_RotSpkr; + stereo_descriptor->deactivate = NULL; + stereo_descriptor->cleanup = cleanup_RotSpkr; +} + + +void +delete_descriptor(LADSPA_Descriptor * descriptor) { + unsigned long index; + if (descriptor) { + free((char *)descriptor->Label); + free((char *)descriptor->Name); + free((char *)descriptor->Maker); + free((char *)descriptor->Copyright); + free((LADSPA_PortDescriptor *)descriptor->PortDescriptors); + for (index = 0; index < descriptor->PortCount; index++) + free((char *)(descriptor->PortNames[index])); + free((char **)descriptor->PortNames); + free((LADSPA_PortRangeHint *)descriptor->PortRangeHints); + free(descriptor); + } +} + + +/* __attribute__((destructor)) _fini() is called automatically when the library is unloaded. */ +void +__attribute__((destructor)) _fini() { + delete_descriptor(stereo_descriptor); +} + + +/* Return a descriptor of the requested plugin type. */ +const LADSPA_Descriptor * +ladspa_descriptor(unsigned long Index) { + + switch (Index) { + case 0: + return stereo_descriptor; + default: + return NULL; + } +} diff --git a/plugins/LadspaEffect/tap/tap_sigmoid.c b/plugins/LadspaEffect/tap/tap_sigmoid.c new file mode 100644 index 000000000..83c28cdd6 --- /dev/null +++ b/plugins/LadspaEffect/tap/tap_sigmoid.c @@ -0,0 +1,338 @@ +/* -*- linux-c -*- + Copyright (C) 2004 Tom Szilagyi + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + $Id: tap_sigmoid.c,v 1.3 2005/08/30 11:19:14 tszilagyi Exp $ +*/ + + +#include +#include +#include +#include + +#include +#include "tap_utils.h" + + +/* The Unique ID of the plugin: */ + +#define ID_MONO 2157 + +/* The port numbers for the plugin: */ + +#define PREGAIN 0 +#define POSTGAIN 1 +#define INPUT 2 +#define OUTPUT 3 + +/* Total number of ports */ +#define PORTCOUNT_MONO 4 + + +/* The closer this is to 1.0, the slower the input parameter + interpolation will be. */ +#define INTERP 0.99f + + +/* The structure used to hold port connection information and state */ + +typedef struct { + LADSPA_Data * pregain; + LADSPA_Data * postgain; + LADSPA_Data * input; + LADSPA_Data * output; + + LADSPA_Data pregain_i; + LADSPA_Data postgain_i; + + unsigned long sample_rate; + LADSPA_Data run_adding_gain; +} Sigmoid; + + +/* Construct a new plugin instance. */ +LADSPA_Handle +instantiate_Sigmoid(const LADSPA_Descriptor * Descriptor, + unsigned long sample_rate) { + + LADSPA_Handle * ptr; + + if ((ptr = malloc(sizeof(Sigmoid))) != NULL) { + ((Sigmoid *)ptr)->sample_rate = sample_rate; + ((Sigmoid *)ptr)->run_adding_gain = 1.0f; + + return ptr; + } + return NULL; +} + + +/* Connect a port to a data location. */ +void +connect_port_Sigmoid(LADSPA_Handle Instance, + unsigned long Port, + LADSPA_Data * DataLocation) { + + Sigmoid * ptr = (Sigmoid *)Instance; + + switch (Port) { + case PREGAIN: + ptr->pregain = DataLocation; + ptr->pregain_i = db2lin(LIMIT(*DataLocation,-90.0f,20.0f)); + break; + case POSTGAIN: + ptr->postgain = DataLocation; + ptr->postgain_i = db2lin(LIMIT(*DataLocation,-90.0f,20.0f)); + break; + case INPUT: + ptr->input = DataLocation; + break; + case OUTPUT: + ptr->output = DataLocation; + break; + } +} + + +void +run_Sigmoid(LADSPA_Handle Instance, + unsigned long SampleCount) { + + Sigmoid * ptr = (Sigmoid *)Instance; + LADSPA_Data * input = ptr->input; + LADSPA_Data * output = ptr->output; + LADSPA_Data pregain = db2lin(LIMIT(*(ptr->pregain),-90.0f,20.0f)); + LADSPA_Data postgain = db2lin(LIMIT(*(ptr->postgain),-90.0f,20.0f)); + LADSPA_Data pregain_i = ptr->pregain_i; + LADSPA_Data postgain_i = ptr->postgain_i; + + unsigned long sample_index; + unsigned long sample_count = SampleCount; + + LADSPA_Data in = 0.0f; + LADSPA_Data out = 0.0f; + + if ((pregain_i != pregain) || (postgain_i != postgain)) { + + for (sample_index = 0; sample_index < sample_count; sample_index++) { + + pregain_i = pregain_i * INTERP + pregain * (1.0f - INTERP); + postgain_i = postgain_i * INTERP + postgain * (1.0f - INTERP); + + in = *(input++) * pregain_i; + + out = 2.0f / (1.0f + exp(-5.0*in)) - 1.0f; + + *(output++) = out * postgain_i; + } + + ptr->pregain_i = pregain_i; + ptr->postgain_i = postgain_i; + + } else { + for (sample_index = 0; sample_index < sample_count; sample_index++) { + + in = *(input++) * pregain_i; + + out = 2.0f / (1.0f + exp(-5.0*in)) - 1.0f; + + *(output++) = out * postgain_i; + } + + ptr->pregain_i = pregain_i; + ptr->postgain_i = postgain_i; + } +} + + +void +set_run_adding_gain_Sigmoid(LADSPA_Handle Instance, LADSPA_Data gain) { + + Sigmoid * ptr = (Sigmoid *)Instance; + + ptr->run_adding_gain = gain; +} + + +void +run_adding_Sigmoid(LADSPA_Handle Instance, + unsigned long SampleCount) { + + Sigmoid * ptr = (Sigmoid *)Instance; + LADSPA_Data * input = ptr->input; + LADSPA_Data * output = ptr->output; + LADSPA_Data pregain = db2lin(LIMIT(*(ptr->pregain),-90.0f,20.0f)); + LADSPA_Data postgain = db2lin(LIMIT(*(ptr->postgain),-90.0f,20.0f)); + LADSPA_Data pregain_i = ptr->pregain_i; + LADSPA_Data postgain_i = ptr->postgain_i; + + unsigned long sample_index; + unsigned long sample_count = SampleCount; + + LADSPA_Data in = 0.0f; + LADSPA_Data out = 0.0f; + + + if ((pregain_i != pregain) || (postgain_i != postgain)) { + + for (sample_index = 0; sample_index < sample_count; sample_index++) { + + pregain_i = pregain_i * INTERP + pregain * (1.0f - INTERP); + postgain_i = postgain_i * INTERP + postgain * (1.0f - INTERP); + + in = *(input++) * pregain_i; + + out = 2.0f / (1.0f + exp(-5.0*in)) - 1.0f; + + *(output++) = out * postgain_i * ptr->run_adding_gain; + } + + ptr->pregain_i = pregain_i; + ptr->postgain_i = postgain_i; + + } else { + for (sample_index = 0; sample_index < sample_count; sample_index++) { + + in = *(input++) * pregain_i; + + out = 2.0f / (1.0f + exp(-5.0*in)) - 1.0f; + + *(output++) = out * postgain_i * ptr->run_adding_gain; + } + } +} + + +/* Throw away a Sigmoid effect instance. */ +void +cleanup_Sigmoid(LADSPA_Handle Instance) { + + free(Instance); +} + + +LADSPA_Descriptor * mono_descriptor = NULL; + + +/* __attribute__((constructor)) _init() is called automatically when the plugin library is first + loaded. */ +void +__attribute__((constructor)) _init() { + + char ** port_names; + LADSPA_PortDescriptor * port_descriptors; + LADSPA_PortRangeHint * port_range_hints; + + if ((mono_descriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor))) == NULL) + exit(1); + + + mono_descriptor->UniqueID = ID_MONO; + mono_descriptor->Label = strdup("tap_sigmoid"); + mono_descriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; + mono_descriptor->Name = strdup("TAP Sigmoid Booster"); + mono_descriptor->Maker = strdup("Tom Szilagyi"); + mono_descriptor->Copyright = strdup("GPL"); + mono_descriptor->PortCount = PORTCOUNT_MONO; + + if ((port_descriptors = + (LADSPA_PortDescriptor *)calloc(PORTCOUNT_MONO, sizeof(LADSPA_PortDescriptor))) == NULL) + exit(1); + + mono_descriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; + port_descriptors[PREGAIN] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_descriptors[POSTGAIN] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_descriptors[INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_descriptors[OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + + if ((port_names = + (char **)calloc(PORTCOUNT_MONO, sizeof(char *))) == NULL) + exit(1); + + mono_descriptor->PortNames = (const char **)port_names; + port_names[PREGAIN] = strdup("Pre Gain [dB]"); + port_names[POSTGAIN] = strdup("Post Gain [dB]"); + port_names[INPUT] = strdup("Input"); + port_names[OUTPUT] = strdup("Output"); + + if ((port_range_hints = + ((LADSPA_PortRangeHint *)calloc(PORTCOUNT_MONO, sizeof(LADSPA_PortRangeHint)))) == NULL) + exit(1); + + mono_descriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; + port_range_hints[PREGAIN].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_0); + port_range_hints[POSTGAIN].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_0); + port_range_hints[PREGAIN].LowerBound = -90.0f; + port_range_hints[PREGAIN].UpperBound = 20.0f; + port_range_hints[POSTGAIN].LowerBound = -90.0f; + port_range_hints[POSTGAIN].UpperBound = 20.0f; + port_range_hints[INPUT].HintDescriptor = 0; + port_range_hints[OUTPUT].HintDescriptor = 0; + mono_descriptor->instantiate = instantiate_Sigmoid; + mono_descriptor->connect_port = connect_port_Sigmoid; + mono_descriptor->activate = NULL; + mono_descriptor->run = run_Sigmoid; + mono_descriptor->run_adding = run_adding_Sigmoid; + mono_descriptor->set_run_adding_gain = set_run_adding_gain_Sigmoid; + mono_descriptor->deactivate = NULL; + mono_descriptor->cleanup = cleanup_Sigmoid; +} + + +void +delete_descriptor(LADSPA_Descriptor * descriptor) { + unsigned long index; + if (descriptor) { + free((char *)descriptor->Label); + free((char *)descriptor->Name); + free((char *)descriptor->Maker); + free((char *)descriptor->Copyright); + free((LADSPA_PortDescriptor *)descriptor->PortDescriptors); + for (index = 0; index < descriptor->PortCount; index++) + free((char *)(descriptor->PortNames[index])); + free((char **)descriptor->PortNames); + free((LADSPA_PortRangeHint *)descriptor->PortRangeHints); + free(descriptor); + } +} + + +/* __attribute__((destructor)) _fini() is called automatically when the library is unloaded. */ +void +__attribute__((destructor)) _fini() { + delete_descriptor(mono_descriptor); +} + + +/* Return a descriptor of the requested plugin type. */ +const LADSPA_Descriptor * +ladspa_descriptor(unsigned long Index) { + + switch (Index) { + case 0: + return mono_descriptor; + default: + return NULL; + } +} diff --git a/plugins/LadspaEffect/tap/tap_tremolo.c b/plugins/LadspaEffect/tap/tap_tremolo.c new file mode 100644 index 000000000..820d35b91 --- /dev/null +++ b/plugins/LadspaEffect/tap/tap_tremolo.c @@ -0,0 +1,343 @@ +/* -*- linux-c -*- + Copyright (C) 2004 Tom Szilagyi + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + $Id: tap_tremolo.c,v 1.6 2004/02/21 17:33:36 tszilagyi Exp $ +*/ + + +#include +#include +#include +#include + +#include +#include "tap_utils.h" + +/* The Unique ID of the plugin: */ + +#define ID_MONO 2144 + +/* The port numbers for the plugin: */ + +#define CONTROL_FREQ 0 +#define CONTROL_DEPTH 1 +#define CONTROL_GAIN 2 +#define INPUT_0 3 +#define OUTPUT_0 4 + + +/* Total number of ports */ + +#define PORTCOUNT_MONO 5 + + +/* cosine table for fast computations */ +LADSPA_Data cos_table[1024]; + + +/* The structure used to hold port connection information and state */ + +typedef struct { + LADSPA_Data * Control_Freq; + LADSPA_Data * Control_Depth; + LADSPA_Data * Control_Gain; + LADSPA_Data * InputBuffer_1; + LADSPA_Data * OutputBuffer_1; + unsigned long SampleRate; + LADSPA_Data Phase; + LADSPA_Data run_adding_gain; +} Tremolo; + + + +/* Construct a new plugin instance. */ +LADSPA_Handle +instantiate_Tremolo(const LADSPA_Descriptor * Descriptor, + unsigned long SampleRate) { + + LADSPA_Handle * ptr; + + if ((ptr = malloc(sizeof(Tremolo))) != NULL) { + ((Tremolo *)ptr)->SampleRate = SampleRate; + ((Tremolo *)ptr)->run_adding_gain = 1.0; + return ptr; + } + + return NULL; +} + +void +activate_Tremolo(LADSPA_Handle Instance) { + + Tremolo * ptr; + + ptr = (Tremolo *)Instance; + ptr->Phase = 0.0f; +} + + + +/* Connect a port to a data location. */ +void +connect_port_Tremolo(LADSPA_Handle Instance, + unsigned long Port, + LADSPA_Data * DataLocation) { + + Tremolo * ptr; + + ptr = (Tremolo *)Instance; + switch (Port) { + case CONTROL_FREQ: + ptr->Control_Freq = DataLocation; + break; + case CONTROL_DEPTH: + ptr->Control_Depth = DataLocation; + break; + case CONTROL_GAIN: + ptr->Control_Gain = DataLocation; + break; + case INPUT_0: + ptr->InputBuffer_1 = DataLocation; + break; + case OUTPUT_0: + ptr->OutputBuffer_1 = DataLocation; + break; + } +} + + + +void +run_Tremolo(LADSPA_Handle Instance, + unsigned long SampleCount) { + + LADSPA_Data * input; + LADSPA_Data * output; + LADSPA_Data freq; + LADSPA_Data depth; + LADSPA_Data gain; + Tremolo * ptr; + unsigned long sample_index; + LADSPA_Data phase = 0.0f; + + ptr = (Tremolo *)Instance; + + input = ptr->InputBuffer_1; + output = ptr->OutputBuffer_1; + freq = LIMIT(*(ptr->Control_Freq),0.0f,20.0f); + depth = LIMIT(*(ptr->Control_Depth),0.0f,100.0f); + gain = db2lin(LIMIT(*(ptr->Control_Gain),-70.0f,20.0f)); + + for (sample_index = 0; sample_index < SampleCount; sample_index++) { + phase = 1024.0f * freq * sample_index / ptr->SampleRate + ptr->Phase; + + while (phase >= 1024.0f) + phase -= 1024.0f; + + *(output++) = *(input++) * gain * + (1 - 0.5*depth/100 + 0.5 * depth/100 * cos_table[(unsigned long) phase]); + } + ptr->Phase = phase; + while (ptr->Phase >= 1024.0f) + ptr->Phase -= 1024.0f; +} + + + +void +set_run_adding_gain_Tremolo(LADSPA_Handle Instance, LADSPA_Data gain) { + + Tremolo * ptr; + + ptr = (Tremolo *)Instance; + + ptr->run_adding_gain = gain; +} + + + +void +run_adding_Tremolo(LADSPA_Handle Instance, + unsigned long SampleCount) { + + LADSPA_Data * input; + LADSPA_Data * output; + LADSPA_Data freq; + LADSPA_Data depth; + LADSPA_Data gain; + Tremolo * ptr; + unsigned long sample_index; + LADSPA_Data phase = 0.0f; + + ptr = (Tremolo *)Instance; + + input = ptr->InputBuffer_1; + output = ptr->OutputBuffer_1; + freq = LIMIT(*(ptr->Control_Freq),0.0f,20.0f); + depth = LIMIT(*(ptr->Control_Depth),0.0f,100.0f); + gain = db2lin(LIMIT(*(ptr->Control_Gain),-70.0f,20.0f)); + + for (sample_index = 0; sample_index < SampleCount; sample_index++) { + phase = 1024.0f * freq * sample_index / ptr->SampleRate + ptr->Phase; + + while (phase >= 1024.0f) + phase -= 1024.0f; + + *(output++) += *(input++) * ptr->run_adding_gain * gain * + (1 - 0.5*depth/100 + 0.5 * depth/100 * cos_table[(unsigned long) phase]); + } + ptr->Phase = phase; + while (ptr->Phase >= 1024.0f) + ptr->Phase -= 1024.0f; +} + + + + +/* Throw away a Tremolo effect instance. */ +void +cleanup_Tremolo(LADSPA_Handle Instance) { + free(Instance); +} + + + +LADSPA_Descriptor * mono_descriptor = NULL; + + + +/* __attribute__((constructor)) _init() is called automatically when the plugin library is first + loaded. */ +void +__attribute__((constructor)) _init() { + + char ** port_names; + LADSPA_PortDescriptor * port_descriptors; + LADSPA_PortRangeHint * port_range_hints; + int i; + + if ((mono_descriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor))) == NULL) + exit(1); + + + for (i = 0; i < 1024; i++) + cos_table[i] = cosf(i * M_PI / 512.0f); + + + mono_descriptor->UniqueID = ID_MONO; + mono_descriptor->Label = strdup("tap_tremolo"); + mono_descriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; + mono_descriptor->Name = strdup("TAP Tremolo"); + mono_descriptor->Maker = strdup("Tom Szilagyi"); + mono_descriptor->Copyright = strdup("GPL"); + mono_descriptor->PortCount = PORTCOUNT_MONO; + + if ((port_descriptors = + (LADSPA_PortDescriptor *)calloc(PORTCOUNT_MONO, sizeof(LADSPA_PortDescriptor))) == NULL) + exit(1); + + mono_descriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; + port_descriptors[CONTROL_FREQ] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_descriptors[CONTROL_DEPTH] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_descriptors[CONTROL_GAIN] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_descriptors[INPUT_0] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_descriptors[OUTPUT_0] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + + if ((port_names = + (char **)calloc(PORTCOUNT_MONO, sizeof(char *))) == NULL) + exit(1); + + mono_descriptor->PortNames = (const char **)port_names; + port_names[CONTROL_FREQ] = strdup("Frequency [Hz]"); + port_names[CONTROL_DEPTH] = strdup("Depth [%]"); + port_names[CONTROL_GAIN] = strdup("Gain [dB]"); + port_names[INPUT_0] = strdup("Input_0"); + port_names[OUTPUT_0] = strdup("Output_0"); + + if ((port_range_hints = + ((LADSPA_PortRangeHint *)calloc(PORTCOUNT_MONO, sizeof(LADSPA_PortRangeHint)))) == NULL) + exit(1); + + mono_descriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; + port_range_hints[CONTROL_FREQ].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_0); + port_range_hints[CONTROL_DEPTH].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_0); + port_range_hints[CONTROL_GAIN].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_0); + port_range_hints[CONTROL_FREQ].LowerBound = 0; + port_range_hints[CONTROL_FREQ].UpperBound = 20; + port_range_hints[CONTROL_DEPTH].LowerBound = 0; + port_range_hints[CONTROL_DEPTH].UpperBound = 100; + port_range_hints[CONTROL_GAIN].LowerBound = -70; + port_range_hints[CONTROL_GAIN].UpperBound = 20; + port_range_hints[INPUT_0].HintDescriptor = 0; + port_range_hints[OUTPUT_0].HintDescriptor = 0; + mono_descriptor->instantiate = instantiate_Tremolo; + mono_descriptor->connect_port = connect_port_Tremolo; + mono_descriptor->activate = activate_Tremolo; + mono_descriptor->run = run_Tremolo; + mono_descriptor->run_adding = run_adding_Tremolo; + mono_descriptor->set_run_adding_gain = set_run_adding_gain_Tremolo; + mono_descriptor->deactivate = NULL; + mono_descriptor->cleanup = cleanup_Tremolo; +} + + +void +delete_descriptor(LADSPA_Descriptor * descriptor) { + unsigned long index; + if (descriptor) { + free((char *)descriptor->Label); + free((char *)descriptor->Name); + free((char *)descriptor->Maker); + free((char *)descriptor->Copyright); + free((LADSPA_PortDescriptor *)descriptor->PortDescriptors); + for (index = 0; index < descriptor->PortCount; index++) + free((char *)(descriptor->PortNames[index])); + free((char **)descriptor->PortNames); + free((LADSPA_PortRangeHint *)descriptor->PortRangeHints); + free(descriptor); + } +} + + +/* __attribute__((destructor)) _fini() is called automatically when the library is unloaded. */ +void +__attribute__((destructor)) _fini() { + delete_descriptor(mono_descriptor); +} + + +/* Return a descriptor of the requested plugin type. */ +const LADSPA_Descriptor * +ladspa_descriptor(unsigned long Index) { + + switch (Index) { + case 0: + return mono_descriptor; + default: + return NULL; + } +} diff --git a/plugins/LadspaEffect/tap/tap_tubewarmth.c b/plugins/LadspaEffect/tap/tap_tubewarmth.c new file mode 100644 index 000000000..4c66fd17c --- /dev/null +++ b/plugins/LadspaEffect/tap/tap_tubewarmth.c @@ -0,0 +1,491 @@ +/* -*- linux-c -*- + Copyright (C) 2004 Tom Szilagyi + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + $Id: tap_tubewarmth.c,v 1.1 2004/08/02 18:14:50 tszilagyi Exp $ +*/ + + +#include +#include +#include +#include + +#include +#include "tap_utils.h" + + +/* The Unique ID of the plugin: */ + +#define ID_MONO 2158 + +/* The port numbers for the plugin: */ + +#define DRIVE 0 +#define BLEND 1 +#define INPUT 2 +#define OUTPUT 3 + +/* Total number of ports */ + + +#define PORTCOUNT_MONO 4 + + +/* The structure used to hold port connection information and state */ + +typedef struct { + LADSPA_Data * drive; + LADSPA_Data * blend; + LADSPA_Data * input; + LADSPA_Data * output; + + LADSPA_Data prev_med; + LADSPA_Data prev_out; + + LADSPA_Data rdrive; + LADSPA_Data rbdr; + LADSPA_Data kpa; + LADSPA_Data kpb; + LADSPA_Data kna; + LADSPA_Data knb; + LADSPA_Data ap; + LADSPA_Data an; + LADSPA_Data imr; + LADSPA_Data kc; + LADSPA_Data srct; + LADSPA_Data sq; + LADSPA_Data pwrq; + + LADSPA_Data prev_drive; + LADSPA_Data prev_blend; + + unsigned long sample_rate; + LADSPA_Data run_adding_gain; +} TubeWarmth; + + + +/* Construct a new plugin instance. */ +LADSPA_Handle +instantiate_TubeWarmth(const LADSPA_Descriptor * Descriptor, + unsigned long sample_rate) { + + LADSPA_Handle * ptr; + + if ((ptr = malloc(sizeof(TubeWarmth))) != NULL) { + ((TubeWarmth *)ptr)->sample_rate = sample_rate; + ((TubeWarmth *)ptr)->run_adding_gain = 1.0f; + + ((TubeWarmth *)ptr)->prev_med = 0.0f; + ((TubeWarmth *)ptr)->prev_out = 0.0f; + + ((TubeWarmth *)ptr)->rdrive = 0.0f; + ((TubeWarmth *)ptr)->rbdr = 0.0f; + ((TubeWarmth *)ptr)->kpa = 0.0f; + ((TubeWarmth *)ptr)->kpb = 0.0f; + ((TubeWarmth *)ptr)->kna = 0.0f; + ((TubeWarmth *)ptr)->knb = 0.0f; + ((TubeWarmth *)ptr)->ap = 0.0f; + ((TubeWarmth *)ptr)->an = 0.0f; + ((TubeWarmth *)ptr)->imr = 0.0f; + ((TubeWarmth *)ptr)->kc = 0.0f; + ((TubeWarmth *)ptr)->srct = 0.0f; + ((TubeWarmth *)ptr)->sq = 0.0f; + ((TubeWarmth *)ptr)->pwrq = 0.0f; + + /* These are out of band to force param recalc upon first run() */ + ((TubeWarmth *)ptr)->prev_drive = -1.0f; + ((TubeWarmth *)ptr)->prev_blend = -11.0f; + + return ptr; + } + return NULL; +} + + + + + +/* Connect a port to a data location. */ +void +connect_port_TubeWarmth(LADSPA_Handle Instance, + unsigned long Port, + LADSPA_Data * DataLocation) { + + TubeWarmth * ptr = (TubeWarmth *)Instance; + + switch (Port) { + case DRIVE: + ptr->drive = DataLocation; + break; + case BLEND: + ptr->blend = DataLocation; + break; + case INPUT: + ptr->input = DataLocation; + break; + case OUTPUT: + ptr->output = DataLocation; + break; + } +} + + +#define EPS 0.000000001f + +static inline float +M(float x) { + + if ((x > EPS) || (x < -EPS)) + return x; + else + return 0.0f; +} + +static inline float +D(float x) { + + if (x > EPS) + return sqrt(x); + else if (x < -EPS) + return sqrt(-x); + else + return 0.0f; +} + +void +run_TubeWarmth(LADSPA_Handle Instance, + unsigned long SampleCount) { + + TubeWarmth * ptr = (TubeWarmth *)Instance; + LADSPA_Data * input = ptr->input; + LADSPA_Data * output = ptr->output; + LADSPA_Data drive = LIMIT(*(ptr->drive),0.1f,10.0f); + LADSPA_Data blend = LIMIT(*(ptr->blend),-10.0f,10.0f); + + unsigned long sample_index; + unsigned long sample_count = SampleCount; + unsigned long sample_rate = ptr->sample_rate; + + LADSPA_Data rdrive = ptr->rdrive; + LADSPA_Data rbdr = ptr->rbdr; + LADSPA_Data kpa = ptr->kpa; + LADSPA_Data kpb = ptr->kpb; + LADSPA_Data kna = ptr->kna; + LADSPA_Data knb = ptr->knb; + LADSPA_Data ap = ptr->ap; + LADSPA_Data an = ptr->an; + LADSPA_Data imr = ptr->imr; + LADSPA_Data kc = ptr->kc; + LADSPA_Data srct = ptr->srct; + LADSPA_Data sq = ptr->sq; + LADSPA_Data pwrq = ptr->pwrq; + + LADSPA_Data prev_med; + LADSPA_Data prev_out; + LADSPA_Data in; + LADSPA_Data med; + LADSPA_Data out; + + if ((ptr->prev_drive != drive) || (ptr->prev_blend != blend)) { + + rdrive = 12.0f / drive; + rbdr = rdrive / (10.5f - blend) * 780.0f / 33.0f; + kpa = D(2.0f * (rdrive*rdrive) - 1.0f) + 1.0f; + kpb = (2.0f - kpa) / 2.0f; + ap = ((rdrive*rdrive) - kpa + 1.0f) / 2.0f; + kc = kpa / D(2.0f * D(2.0f * (rdrive*rdrive) - 1.0f) - 2.0f * rdrive*rdrive); + + srct = (0.1f * sample_rate) / (0.1f * sample_rate + 1.0f); + sq = kc*kc + 1.0f; + knb = -1.0f * rbdr / D(sq); + kna = 2.0f * kc * rbdr / D(sq); + an = rbdr*rbdr / sq; + imr = 2.0f * knb + D(2.0f * kna + 4.0f * an - 1.0f); + pwrq = 2.0f / (imr + 1.0f); + + ptr->prev_drive = drive; + ptr->prev_blend = blend; + } + + for (sample_index = 0; sample_index < sample_count; sample_index++) { + + in = *(input++); + prev_med = ptr->prev_med; + prev_out = ptr->prev_out; + + if (in >= 0.0f) { + med = (D(ap + in * (kpa - in)) + kpb) * pwrq; + } else { + med = (D(an - in * (kna + in)) + knb) * pwrq * -1.0f; + } + + out = srct * (med - prev_med + prev_out); + + if (out < -1.0f) + out = -1.0f; + + *(output++) = out; + + ptr->prev_med = M(med); + ptr->prev_out = M(out); + } + + ptr->rdrive = rdrive; + ptr->rbdr = rbdr; + ptr->kpa = kpa; + ptr->kpb = kpb; + ptr->kna = kna; + ptr->knb = knb; + ptr->ap = ap; + ptr->an = an; + ptr->imr = imr; + ptr->kc = kc; + ptr->srct = srct; + ptr->sq = sq; + ptr->pwrq = pwrq; +} + + + +void +set_run_adding_gain_TubeWarmth(LADSPA_Handle Instance, LADSPA_Data gain) { + + TubeWarmth * ptr = (TubeWarmth *)Instance; + + ptr->run_adding_gain = gain; +} + + + +void +run_adding_TubeWarmth(LADSPA_Handle Instance, + unsigned long SampleCount) { + + TubeWarmth * ptr = (TubeWarmth *)Instance; + LADSPA_Data * input = ptr->input; + LADSPA_Data * output = ptr->output; + LADSPA_Data drive = LIMIT(*(ptr->drive),0.1f,10.0f); + LADSPA_Data blend = LIMIT(*(ptr->blend),-10.0f,10.0f); + + unsigned long sample_index; + unsigned long sample_count = SampleCount; + unsigned long sample_rate = ptr->sample_rate; + + LADSPA_Data rdrive = ptr->rdrive; + LADSPA_Data rbdr = ptr->rbdr; + LADSPA_Data kpa = ptr->kpa; + LADSPA_Data kpb = ptr->kpb; + LADSPA_Data kna = ptr->kna; + LADSPA_Data knb = ptr->knb; + LADSPA_Data ap = ptr->ap; + LADSPA_Data an = ptr->an; + LADSPA_Data imr = ptr->imr; + LADSPA_Data kc = ptr->kc; + LADSPA_Data srct = ptr->srct; + LADSPA_Data sq = ptr->sq; + LADSPA_Data pwrq = ptr->pwrq; + + LADSPA_Data prev_med; + LADSPA_Data prev_out; + LADSPA_Data in; + LADSPA_Data med; + LADSPA_Data out; + + if ((ptr->prev_drive != drive) || (ptr->prev_blend != blend)) { + + rdrive = 12.0f / drive; + rbdr = rdrive / (10.5f - blend) * 780.0f / 33.0f; + kpa = D(2.0f * (rdrive*rdrive) - 1.0f) + 1.0f; + kpb = (2.0f - kpa) / 2.0f; + ap = ((rdrive*rdrive) - kpa + 1.0f) / 2.0f; + kc = kpa / D(2.0f * D(2.0f * (rdrive*rdrive) - 1.0f) - 2.0f * rdrive*rdrive); + + srct = (0.1f * sample_rate) / (0.1f * sample_rate + 1.0f); + sq = kc*kc + 1.0f; + knb = -1.0f * rbdr / D(sq); + kna = 2.0f * kc * rbdr / D(sq); + an = rbdr*rbdr / sq; + imr = 2.0f * knb + D(2.0f * kna + 4.0f * an - 1.0f); + pwrq = 2.0f / (imr + 1.0f); + + ptr->prev_drive = drive; + ptr->prev_blend = blend; + } + + for (sample_index = 0; sample_index < sample_count; sample_index++) { + + in = *(input++); + prev_med = ptr->prev_med; + prev_out = ptr->prev_out; + + if (in >= 0.0f) { + med = (D(ap + in * (kpa - in)) + kpb) * pwrq; + } else { + med = (D(an - in * (kna + in)) + knb) * pwrq * -1.0f; + } + + out = srct * (med - prev_med + prev_out); + + if (out < -1.0f) + out = -1.0f; + + *(output++) += out * ptr->run_adding_gain; + + ptr->prev_med = M(med); + ptr->prev_out = M(out); + } + + ptr->rdrive = rdrive; + ptr->rbdr = rbdr; + ptr->kpa = kpa; + ptr->kpb = kpb; + ptr->kna = kna; + ptr->knb = knb; + ptr->ap = ap; + ptr->an = an; + ptr->imr = imr; + ptr->kc = kc; + ptr->srct = srct; + ptr->sq = sq; + ptr->pwrq = pwrq; +} + + + + +/* Throw away a TubeWarmth effect instance. */ +void +cleanup_TubeWarmth(LADSPA_Handle Instance) { + + free(Instance); +} + + + +LADSPA_Descriptor * mono_descriptor = NULL; + + + +/* __attribute__((constructor)) _init() is called automatically when the plugin library is first + loaded. */ +void +__attribute__((constructor)) _init() { + + char ** port_names; + LADSPA_PortDescriptor * port_descriptors; + LADSPA_PortRangeHint * port_range_hints; + + if ((mono_descriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor))) == NULL) + exit(1); + + + mono_descriptor->UniqueID = ID_MONO; + mono_descriptor->Label = strdup("tap_tubewarmth"); + mono_descriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; + mono_descriptor->Name = strdup("TAP TubeWarmth"); + mono_descriptor->Maker = strdup("Tom Szilagyi"); + mono_descriptor->Copyright = strdup("GPL"); + mono_descriptor->PortCount = PORTCOUNT_MONO; + + if ((port_descriptors = + (LADSPA_PortDescriptor *)calloc(PORTCOUNT_MONO, sizeof(LADSPA_PortDescriptor))) == NULL) + exit(1); + + mono_descriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; + port_descriptors[DRIVE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_descriptors[BLEND] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_descriptors[INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_descriptors[OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + + if ((port_names = + (char **)calloc(PORTCOUNT_MONO, sizeof(char *))) == NULL) + exit(1); + + mono_descriptor->PortNames = (const char **)port_names; + port_names[DRIVE] = strdup("Drive"); + port_names[BLEND] = strdup("Tape--Tube Blend"); + port_names[INPUT] = strdup("Input"); + port_names[OUTPUT] = strdup("Output"); + + if ((port_range_hints = + ((LADSPA_PortRangeHint *)calloc(PORTCOUNT_MONO, sizeof(LADSPA_PortRangeHint)))) == NULL) + exit(1); + + mono_descriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; + port_range_hints[DRIVE].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_LOW); + port_range_hints[BLEND].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_MAXIMUM); + port_range_hints[DRIVE].LowerBound = 0.1f; + port_range_hints[DRIVE].UpperBound = 10.0f; + port_range_hints[BLEND].LowerBound = -10.0f; + port_range_hints[BLEND].UpperBound = 10.0f; + port_range_hints[INPUT].HintDescriptor = 0; + port_range_hints[OUTPUT].HintDescriptor = 0; + mono_descriptor->instantiate = instantiate_TubeWarmth; + mono_descriptor->connect_port = connect_port_TubeWarmth; + mono_descriptor->activate = NULL; + mono_descriptor->run = run_TubeWarmth; + mono_descriptor->run_adding = run_adding_TubeWarmth; + mono_descriptor->set_run_adding_gain = set_run_adding_gain_TubeWarmth; + mono_descriptor->deactivate = NULL; + mono_descriptor->cleanup = cleanup_TubeWarmth; +} + + +void +delete_descriptor(LADSPA_Descriptor * descriptor) { + unsigned long index; + if (descriptor) { + free((char *)descriptor->Label); + free((char *)descriptor->Name); + free((char *)descriptor->Maker); + free((char *)descriptor->Copyright); + free((LADSPA_PortDescriptor *)descriptor->PortDescriptors); + for (index = 0; index < descriptor->PortCount; index++) + free((char *)(descriptor->PortNames[index])); + free((char **)descriptor->PortNames); + free((LADSPA_PortRangeHint *)descriptor->PortRangeHints); + free(descriptor); + } +} + + +/* __attribute__((destructor)) _fini() is called automatically when the library is unloaded. */ +void +__attribute__((destructor)) _fini() { + delete_descriptor(mono_descriptor); +} + + +/* Return a descriptor of the requested plugin type. */ +const LADSPA_Descriptor * +ladspa_descriptor(unsigned long Index) { + + switch (Index) { + case 0: + return mono_descriptor; + default: + return NULL; + } +} diff --git a/plugins/LadspaEffect/tap/tap_utils.h b/plugins/LadspaEffect/tap/tap_utils.h new file mode 100644 index 000000000..5eb3221d2 --- /dev/null +++ b/plugins/LadspaEffect/tap/tap_utils.h @@ -0,0 +1,267 @@ +/* -*- linux-c -*- + Copyright (C) 2004 Tom Szilagyi + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + $Id: tap_utils.h,v 1.5 2004/02/21 17:33:36 tszilagyi Exp $ +*/ +#ifndef _ISOC99_SOURCE +#define _ISOC99_SOURCE +#endif + +#include + +#ifndef M_PI +#define M_PI 3.14159265358979323846264338327 +#endif + + + +/* push a sample into a ringbuffer and return the sample falling out */ +static inline +LADSPA_Data +push_buffer(LADSPA_Data insample, LADSPA_Data * buffer, + unsigned long buflen, unsigned long * pos) { + + LADSPA_Data outsample; + + outsample = buffer[*pos]; + buffer[(*pos)++] = insample; + + if (*pos >= buflen) + *pos = 0; + + return outsample; +} + + +/* read a value from a ringbuffer. + * n == 0 returns the oldest sample from the buffer. + * n == buflen-1 returns the sample written to the buffer + * at the last push_buffer call. + * n must not exceed buflen-1, or your computer will explode. + */ +static inline +LADSPA_Data +read_buffer(LADSPA_Data * buffer, unsigned long buflen, + unsigned long pos, unsigned long n) { + + while (n + pos >= buflen) + n -= buflen; + return buffer[n + pos]; +} + + +/* overwrites a value in a ringbuffer, but pos stays the same. + * n == 0 overwrites the oldest sample pushed in the buffer. + * n == buflen-1 overwrites the sample written to the buffer + * at the last push_buffer call. + * n must not exceed buflen-1, or your computer... you know. + */ +static inline +void +write_buffer(LADSPA_Data insample, LADSPA_Data * buffer, unsigned long buflen, + unsigned long pos, unsigned long n) { + + while (n + pos >= buflen) + n -= buflen; + buffer[n + pos] = insample; +} + + + + +/* Please note that the majority of the definitions and helper +functions below have been derived from the source code of Steve +Harris's SWH plugins (particularly from the "biquad.h" file). While I +give him credit for his excellent work, I reserve myself to be blamed +for any bugs or malfunction. */ + + +#define db2lin(x) ((x) > -90.0f ? powf(10.0f, (x) * 0.05f) : 0.0f) + +#define ABS(x) (x)>0.0f?(x):-1.0f*(x) + + +#define LN_2_2 0.34657359f +#define LIMIT(v,l,u) ((v)<(l)?(l):((v)>(u)?(u):(v))) + +#define BIQUAD_TYPE float +typedef BIQUAD_TYPE bq_t; + + +/* Biquad filter (adapted from lisp code by Eli Brandt, + http://www.cs.cmu.edu/~eli/) */ + +/* The prev. comment has been preserved from Steve Harris's biquad.h */ + +typedef struct { + bq_t a1; + bq_t a2; + bq_t b0; + bq_t b1; + bq_t b2; + bq_t x1; + bq_t x2; + bq_t y1; + bq_t y2; +} biquad; + + +static inline void biquad_init(biquad *f) { + + f->x1 = 0.0f; + f->x2 = 0.0f; + f->y1 = 0.0f; + f->y2 = 0.0f; +} + + +static inline +void +eq_set_params(biquad *f, bq_t fc, bq_t gain, bq_t bw, bq_t fs) { + + bq_t w = 2.0f * M_PI * LIMIT(fc, 1.0f, fs/2.0f) / fs; + bq_t cw = cosf(w); + bq_t sw = sinf(w); + bq_t J = pow(10.0f, gain * 0.025f); + bq_t g = sw * sinhf(LN_2_2 * LIMIT(bw, 0.0001f, 4.0f) * w / sw); + bq_t a0r = 1.0f / (1.0f + (g / J)); + + f->b0 = (1.0f + (g * J)) * a0r; + f->b1 = (-2.0f * cw) * a0r; + f->b2 = (1.0f - (g * J)) * a0r; + f->a1 = -(f->b1); + f->a2 = ((g / J) - 1.0f) * a0r; +} + + +static inline void lp_set_params(biquad *f, bq_t fc, bq_t bw, bq_t fs) { + bq_t omega = 2.0 * M_PI * fc/fs; + bq_t sn = sin(omega); + bq_t cs = cos(omega); + bq_t alpha = sn * sinh(M_LN2 / 2.0 * bw * omega / sn); + + const float a0r = 1.0 / (1.0 + alpha); +#if 0 +b0 = (1 - cs) /2; +b1 = 1 - cs; +b2 = (1 - cs) /2; +a0 = 1 + alpha; +a1 = -2 * cs; +a2 = 1 - alpha; +#endif + f->b0 = a0r * (1.0 - cs) * 0.5; + f->b1 = a0r * (1.0 - cs); + f->b2 = a0r * (1.0 - cs) * 0.5; + f->a1 = a0r * (2.0 * cs); + f->a2 = a0r * (alpha - 1.0); +} + + +static inline +void +hp_set_params(biquad *f, bq_t fc, bq_t bw, bq_t fs) +{ + bq_t omega = 2.0 * M_PI * fc/fs; + bq_t sn = sin(omega); + bq_t cs = cos(omega); + bq_t alpha = sn * sinh(M_LN2 / 2.0 * bw * omega / sn); + + const float a0r = 1.0 / (1.0 + alpha); + +#if 0 +b0 = (1 + cs) /2; +b1 = -(1 + cs); +b2 = (1 + cs) /2; +a0 = 1 + alpha; +a1 = -2 * cs; +a2 = 1 - alpha; +#endif + f->b0 = a0r * (1.0 + cs) * 0.5; + f->b1 = a0r * -(1.0 + cs); + f->b2 = a0r * (1.0 + cs) * 0.5; + f->a1 = a0r * (2.0 * cs); + f->a2 = a0r * (alpha - 1.0); +} + + +static inline +void +ls_set_params(biquad *f, bq_t fc, bq_t gain, bq_t slope, bq_t fs) +{ + + bq_t w = 2.0f * M_PI * LIMIT(fc, 1.0, fs/2.0) / fs; + bq_t cw = cosf(w); + bq_t sw = sinf(w); + bq_t A = powf(10.0f, gain * 0.025f); + bq_t b = sqrt(((1.0f + A * A) / LIMIT(slope, 0.0001f, 1.0f)) - ((A - + 1.0f) * (A - 1.0))); + bq_t apc = cw * (A + 1.0f); + bq_t amc = cw * (A - 1.0f); + bq_t bs = b * sw; + bq_t a0r = 1.0f / (A + 1.0f + amc + bs); + + f->b0 = a0r * A * (A + 1.0f - amc + bs); + f->b1 = a0r * 2.0f * A * (A - 1.0f - apc); + f->b2 = a0r * A * (A + 1.0f - amc - bs); + f->a1 = a0r * 2.0f * (A - 1.0f + apc); + f->a2 = a0r * (-A - 1.0f - amc + bs); +} + + +static inline +void +hs_set_params(biquad *f, bq_t fc, bq_t gain, bq_t slope, bq_t fs) { + + bq_t w = 2.0f * M_PI * LIMIT(fc, 1.0, fs/2.0) / fs; + bq_t cw = cosf(w); + bq_t sw = sinf(w); + bq_t A = powf(10.0f, gain * 0.025f); + bq_t b = sqrt(((1.0f + A * A) / LIMIT(slope, 0.0001f, 1.0f)) - ((A - + 1.0f) * (A - 1.0f))); + bq_t apc = cw * (A + 1.0f); + bq_t amc = cw * (A - 1.0f); + bq_t bs = b * sw; + bq_t a0r = 1.0f / (A + 1.0f - amc + bs); + + f->b0 = a0r * A * (A + 1.0f + amc + bs); + f->b1 = a0r * -2.0f * A * (A - 1.0f + apc); + f->b2 = a0r * A * (A + 1.0f + amc - bs); + f->a1 = a0r * -2.0f * (A - 1.0f - apc); + f->a2 = a0r * (-A - 1.0f + amc + bs); +} + + +static inline +bq_t +biquad_run(biquad *f, bq_t x) { + + union { + bq_t y; + uint32_t y_int; + } u; + + u.y = f->b0 * x + f->b1 * f->x1 + f->b2 * f->x2 + + f->a1 * f->y1 + f->a2 * f->y2; + if ((u.y_int & 0x7f800000) == 0) + u.y = 0.0f; + f->x2 = f->x1; + f->x1 = x; + f->y2 = f->y1; + f->y1 = u.y; + + return u.y; +} diff --git a/plugins/LadspaEffect/tap/tap_vibrato.c b/plugins/LadspaEffect/tap/tap_vibrato.c new file mode 100644 index 000000000..b7780b46a --- /dev/null +++ b/plugins/LadspaEffect/tap/tap_vibrato.c @@ -0,0 +1,445 @@ +/* -*- linux-c -*- + Copyright (C) 2004 Tom Szilagyi + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + $Id: tap_vibrato.c,v 1.3 2004/02/21 17:33:36 tszilagyi Exp $ +*/ + + +#include +#include +#include +#include + +#include +#include "tap_utils.h" + + +/* The Unique ID of the plugin: */ + +#define ID_MONO 2148 + +/* The port numbers for the plugin: */ + +#define FREQ 0 +#define DEPTH 1 +#define DRYLEVEL 2 +#define WETLEVEL 3 +#define LATENCY 4 +#define INPUT 5 +#define OUTPUT 6 + +/* Total number of ports */ + + +#define PORTCOUNT_MONO 7 + + +/* + * This has to be bigger than 0.2f * sample_rate / (2*PI) for any sample rate. + * At 192 kHz 6238 is needed so this should be enough. + */ +#define PM_DEPTH 6300 + + +#define PM_FREQ 30.0f + + +#define COS_TABLE_SIZE 1024 +LADSPA_Data cos_table[COS_TABLE_SIZE]; + + +/* The structure used to hold port connection information and state */ + +typedef struct { + LADSPA_Data * depth; + LADSPA_Data * freq; + LADSPA_Data * drylevel; + LADSPA_Data * wetlevel; + LADSPA_Data * latency; + LADSPA_Data * input; + LADSPA_Data * output; + + LADSPA_Data * ringbuffer; + unsigned long buflen; + unsigned long pos; + LADSPA_Data phase; + + unsigned long sample_rate; + LADSPA_Data run_adding_gain; +} Vibrato; + + + +/* Construct a new plugin instance. */ +LADSPA_Handle +instantiate_Vibrato(const LADSPA_Descriptor * Descriptor, + unsigned long sample_rate) { + + LADSPA_Handle * ptr; + + if ((ptr = malloc(sizeof(Vibrato))) != NULL) { + ((Vibrato *)ptr)->sample_rate = sample_rate; + ((Vibrato *)ptr)->run_adding_gain = 1.0f; + + if ((((Vibrato *)ptr)->ringbuffer = + calloc(2 * PM_DEPTH, sizeof(LADSPA_Data))) == NULL) + { + free(ptr); + return NULL; + } + ((Vibrato *)ptr)->buflen = ceil(0.2f * sample_rate / M_PI); + ((Vibrato *)ptr)->pos = 0; + + return ptr; + } + return NULL; +} + + +void +activate_Vibrato(LADSPA_Handle Instance) { + + Vibrato * ptr = (Vibrato *)Instance; + unsigned long i; + + for (i = 0; i < 2 * PM_DEPTH; i++) + ptr->ringbuffer[i] = 0.0f; + + ptr->phase = 0.0f; +} + + + + + +/* Connect a port to a data location. */ +void +connect_port_Vibrato(LADSPA_Handle Instance, + unsigned long Port, + LADSPA_Data * DataLocation) { + + Vibrato * ptr = (Vibrato *)Instance; + + switch (Port) { + case DEPTH: + ptr->depth = DataLocation; + break; + case FREQ: + ptr->freq = DataLocation; + break; + case DRYLEVEL: + ptr->drylevel = DataLocation; + break; + case WETLEVEL: + ptr->wetlevel = DataLocation; + break; + case LATENCY: + ptr->latency = DataLocation; + *(ptr->latency) = ptr->buflen / 2; /* IS THIS LEGAL? */ + break; + case INPUT: + ptr->input = DataLocation; + break; + case OUTPUT: + ptr->output = DataLocation; + break; + } +} + + + +void +run_Vibrato(LADSPA_Handle Instance, + unsigned long SampleCount) { + + Vibrato * ptr = (Vibrato *)Instance; + + LADSPA_Data freq = LIMIT(*(ptr->freq),0.0f,PM_FREQ); + LADSPA_Data depth = + LIMIT(LIMIT(*(ptr->depth),0.0f,20.0f) * ptr->sample_rate / 200.0f / M_PI / freq, + 0, ptr->buflen / 2); + LADSPA_Data drylevel = db2lin(LIMIT(*(ptr->drylevel),-90.0f,20.0f)); + LADSPA_Data wetlevel = db2lin(LIMIT(*(ptr->wetlevel),-90.0f,20.0f)); + LADSPA_Data * input = ptr->input; + LADSPA_Data * output = ptr->output; + + unsigned long sample_index; + unsigned long sample_count = SampleCount; + + LADSPA_Data in = 0.0f; + LADSPA_Data phase = 0.0f; + LADSPA_Data fpos = 0.0f; + LADSPA_Data n = 0.0f; + LADSPA_Data rem = 0.0f; + LADSPA_Data s_a, s_b; + + + if (freq == 0.0f) + depth = 0.0f; + + for (sample_index = 0; sample_index < sample_count; sample_index++) { + + in = *(input++); + + phase = COS_TABLE_SIZE * freq * sample_index / ptr->sample_rate + ptr->phase; + while (phase >= COS_TABLE_SIZE) + phase -= COS_TABLE_SIZE; + + push_buffer(in, ptr->ringbuffer, ptr->buflen, &(ptr->pos)); + + fpos = depth * (1.0f - cos_table[(unsigned long) phase]); + n = floorf(fpos); + rem = fpos - n; + + s_a = read_buffer(ptr->ringbuffer, ptr->buflen, ptr->pos, (unsigned long) n); + s_b = read_buffer(ptr->ringbuffer, ptr->buflen, ptr->pos, (unsigned long) n + 1); + + *(output++) = wetlevel * ((1 - rem) * s_a + rem * s_b) + + drylevel * read_buffer(ptr->ringbuffer, ptr->buflen, + ptr->pos, ptr->buflen / 2); + + } + + ptr->phase += COS_TABLE_SIZE * freq * sample_index / ptr->sample_rate; + while (ptr->phase >= COS_TABLE_SIZE) + ptr->phase -= COS_TABLE_SIZE; + + *(ptr->latency) = ptr->buflen / 2; +} + + +void +set_run_adding_gain_Vibrato(LADSPA_Handle Instance, LADSPA_Data gain) { + + Vibrato * ptr = (Vibrato *)Instance; + + ptr->run_adding_gain = gain; +} + + + +void +run_adding_Vibrato(LADSPA_Handle Instance, + unsigned long SampleCount) { + + Vibrato * ptr = (Vibrato *)Instance; + + LADSPA_Data freq = LIMIT(*(ptr->freq),0.0f,PM_FREQ); + LADSPA_Data depth = + LIMIT(LIMIT(*(ptr->depth),0.0f,20.0f) * ptr->sample_rate / 200.0f / M_PI / freq, + 0, ptr->buflen / 2); + LADSPA_Data drylevel = db2lin(LIMIT(*(ptr->drylevel),-90.0f,20.0f)); + LADSPA_Data wetlevel = db2lin(LIMIT(*(ptr->wetlevel),-90.0f,20.0f)); + LADSPA_Data * input = ptr->input; + LADSPA_Data * output = ptr->output; + + unsigned long sample_index; + unsigned long sample_count = SampleCount; + + LADSPA_Data in = 0.0f; + LADSPA_Data phase = 0.0f; + LADSPA_Data fpos = 0.0f; + LADSPA_Data n = 0.0f; + LADSPA_Data rem = 0.0f; + LADSPA_Data s_a, s_b; + + + if (freq == 0.0f) + depth = 0.0f; + + for (sample_index = 0; sample_index < sample_count; sample_index++) { + + in = *(input++); + + phase = COS_TABLE_SIZE * freq * sample_index / ptr->sample_rate + ptr->phase; + while (phase >= COS_TABLE_SIZE) + phase -= COS_TABLE_SIZE; + + push_buffer(in, ptr->ringbuffer, ptr->buflen, &(ptr->pos)); + + fpos = depth * (1.0f - cos_table[(unsigned long) phase]); + n = floorf(fpos); + rem = fpos - n; + + s_a = read_buffer(ptr->ringbuffer, ptr->buflen, ptr->pos, (unsigned long) n); + s_b = read_buffer(ptr->ringbuffer, ptr->buflen, ptr->pos, (unsigned long) n + 1); + + *(output++) += ptr->run_adding_gain * wetlevel * ((1 - rem) * s_a + rem * s_b) + + drylevel * read_buffer(ptr->ringbuffer, ptr->buflen, + ptr->pos, ptr->buflen / 2); + + } + + ptr->phase += COS_TABLE_SIZE * freq * sample_index / ptr->sample_rate; + while (ptr->phase >= COS_TABLE_SIZE) + ptr->phase -= COS_TABLE_SIZE; + + *(ptr->latency) = ptr->buflen / 2; +} + + + +/* Throw away a Vibrato effect instance. */ +void +cleanup_Vibrato(LADSPA_Handle Instance) { + + Vibrato * ptr = (Vibrato *)Instance; + free(ptr->ringbuffer); + free(Instance); +} + + + +LADSPA_Descriptor * mono_descriptor = NULL; + + + +/* __attribute__((constructor)) _init() is called automatically when the plugin library is first + loaded. */ +void +__attribute__((constructor)) _init() { + + int i; + char ** port_names; + LADSPA_PortDescriptor * port_descriptors; + LADSPA_PortRangeHint * port_range_hints; + + if ((mono_descriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor))) == NULL) + exit(1); + + for (i = 0; i < COS_TABLE_SIZE; i++) + cos_table[i] = cosf(i * 2.0f * M_PI / COS_TABLE_SIZE); + + mono_descriptor->UniqueID = ID_MONO; + mono_descriptor->Label = strdup("tap_vibrato"); + mono_descriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; + mono_descriptor->Name = strdup("TAP Vibrato"); + mono_descriptor->Maker = strdup("Tom Szilagyi"); + mono_descriptor->Copyright = strdup("GPL"); + mono_descriptor->PortCount = PORTCOUNT_MONO; + + if ((port_descriptors = + (LADSPA_PortDescriptor *)calloc(PORTCOUNT_MONO, sizeof(LADSPA_PortDescriptor))) == NULL) + exit(1); + + mono_descriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; + port_descriptors[DEPTH] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_descriptors[FREQ] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_descriptors[DRYLEVEL] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_descriptors[WETLEVEL] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_descriptors[LATENCY] = LADSPA_PORT_OUTPUT | LADSPA_PORT_CONTROL; + port_descriptors[INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_descriptors[OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + + if ((port_names = + (char **)calloc(PORTCOUNT_MONO, sizeof(char *))) == NULL) + exit(1); + + mono_descriptor->PortNames = (const char **)port_names; + port_names[FREQ] = strdup("Frequency [Hz]"); + port_names[DEPTH] = strdup("Depth [%]"); + port_names[DRYLEVEL] = strdup("Dry Level [dB]"); + port_names[WETLEVEL] = strdup("Wet Level [dB]"); + port_names[LATENCY] = strdup("latency"); + port_names[INPUT] = strdup("Input"); + port_names[OUTPUT] = strdup("Output"); + + if ((port_range_hints = + ((LADSPA_PortRangeHint *)calloc(PORTCOUNT_MONO, sizeof(LADSPA_PortRangeHint)))) == NULL) + exit(1); + + mono_descriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; + port_range_hints[DEPTH].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_0); + port_range_hints[FREQ].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_0); + port_range_hints[DRYLEVEL].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_MINIMUM); + port_range_hints[WETLEVEL].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_0); + port_range_hints[LATENCY].HintDescriptor = + (LADSPA_HINT_BOUNDED_BELOW | + LADSPA_HINT_BOUNDED_ABOVE | + LADSPA_HINT_DEFAULT_MAXIMUM); + port_range_hints[DEPTH].LowerBound = 0; + port_range_hints[DEPTH].UpperBound = 20.0f; + port_range_hints[FREQ].LowerBound = 0; + port_range_hints[FREQ].UpperBound = PM_FREQ; + port_range_hints[DRYLEVEL].LowerBound = -90.0f; + port_range_hints[DRYLEVEL].UpperBound = +20.0f; + port_range_hints[WETLEVEL].LowerBound = -90.0f; + port_range_hints[WETLEVEL].UpperBound = +20.0f; + port_range_hints[LATENCY].LowerBound = 0; + port_range_hints[LATENCY].UpperBound = PM_DEPTH; + port_range_hints[INPUT].HintDescriptor = 0; + port_range_hints[OUTPUT].HintDescriptor = 0; + mono_descriptor->instantiate = instantiate_Vibrato; + mono_descriptor->connect_port = connect_port_Vibrato; + mono_descriptor->activate = activate_Vibrato; + mono_descriptor->run = run_Vibrato; + mono_descriptor->run_adding = run_adding_Vibrato; + mono_descriptor->set_run_adding_gain = set_run_adding_gain_Vibrato; + mono_descriptor->deactivate = NULL; + mono_descriptor->cleanup = cleanup_Vibrato; +} + + +void +delete_descriptor(LADSPA_Descriptor * descriptor) { + unsigned long index; + if (descriptor) { + free((char *)descriptor->Label); + free((char *)descriptor->Name); + free((char *)descriptor->Maker); + free((char *)descriptor->Copyright); + free((LADSPA_PortDescriptor *)descriptor->PortDescriptors); + for (index = 0; index < descriptor->PortCount; index++) + free((char *)(descriptor->PortNames[index])); + free((char **)descriptor->PortNames); + free((LADSPA_PortRangeHint *)descriptor->PortRangeHints); + free(descriptor); + } +} + + +/* __attribute__((destructor)) _fini() is called automatically when the library is unloaded. */ +void +__attribute__((destructor)) _fini() { + delete_descriptor(mono_descriptor); +} + + +/* Return a descriptor of the requested plugin type. */ +const LADSPA_Descriptor * +ladspa_descriptor(unsigned long Index) { + + switch (Index) { + case 0: + return mono_descriptor; + default: + return NULL; + } +}